From 6439e91c41db28a22ada764390a183d245b13bc3 Mon Sep 17 00:00:00 2001 From: Brock Allen Date: Tue, 6 Aug 2019 15:47:37 -0400 Subject: [PATCH] 1.9.0-beta.4 --- dist/oidc-client.d.ts | 4 +- dist/oidc-client.js | 49 ++++++++++++++----- dist/oidc-client.min.js | 10 ++-- dist/oidc-client.rsa256.slim.js | 74 ++++++++++++++++++++--------- dist/oidc-client.rsa256.slim.min.js | 4 +- dist/oidc-client.slim.js | 49 ++++++++++++++----- dist/oidc-client.slim.min.js | 16 +++---- lib/oidc-client.js | 49 ++++++++++++++----- lib/oidc-client.min.js | 4 +- package.json | 2 +- version.js | 2 +- 11 files changed, 181 insertions(+), 82 deletions(-) diff --git a/dist/oidc-client.d.ts b/dist/oidc-client.d.ts index c8248223..cc0cc4f3 100644 --- a/dist/oidc-client.d.ts +++ b/dist/oidc-client.d.ts @@ -1,6 +1,8 @@ /* Provides a namespace for when the library is loaded outside a module loader environment */ export as namespace Oidc; +export const Version:string; + export interface Logger { error(message?: any, ...optionalParams: any[]): void; info(message?: any, ...optionalParams: any[]): void; @@ -167,7 +169,7 @@ export class UserManager extends OidcClient { signinRedirectCallback(url?: string): Promise; signoutRedirect(args?: any): Promise; - signoutRedirectCallback(url?: string): Promise; + signoutRedirectCallback(url?: string): Promise; signoutPopup(args?: any): Promise; signoutPopupCallback(url?: string, keepOpen?: boolean): Promise; diff --git a/dist/oidc-client.js b/dist/oidc-client.js index 43d2651e..6253476e 100644 --- a/dist/oidc-client.js +++ b/dist/oidc-client.js @@ -131,7 +131,13 @@ var _Global = __webpack_require__(/*! ./src/Global.js */ "./src/Global.js"); var _User = __webpack_require__(/*! ./src/User.js */ "./src/User.js"); +var _version = __webpack_require__(/*! ./version.js */ "./version.js"); + +// Copyright (c) Brock Allen & Dominick Baier. All rights reserved. +// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. + exports.default = { + Version: _version.Version, Log: _Log.Log, OidcClient: _OidcClient.OidcClient, OidcClientSettings: _OidcClientSettings.OidcClientSettings, @@ -147,9 +153,7 @@ exports.default = { SessionMonitor: _SessionMonitor.SessionMonitor, Global: _Global.Global, User: _User.User -}; // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. -// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. - +}; module.exports = exports['default']; /***/ }), @@ -22387,12 +22391,10 @@ var UserManager = exports.UserManager = function (_OidcClient) { UserManager.prototype.signinRedirectCallback = function signinRedirectCallback(url) { return this._signinEnd(url || this._redirectNavigator.url).then(function (user) { - if (user) { - if (user.profile && user.profile.sub) { - _Log.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ", user.profile.sub); - } else { - _Log.Log.info("UserManager.signinRedirectCallback: no sub"); - } + if (user.profile && user.profile.sub) { + _Log.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ", user.profile.sub); + } else { + _Log.Log.info("UserManager.signinRedirectCallback: no sub"); } return user; @@ -22491,6 +22493,7 @@ var UserManager = exports.UserManager = function (_OidcClient) { return idTokenValidation.then(function () { _Log.Log.debug("UserManager._useRefreshToken: refresh token response success"); + user.id_token = result.id_token; user.access_token = result.access_token; user.refresh_token = result.refresh_token || user.refresh_token; user.expires_in = result.expires_in; @@ -22539,7 +22542,7 @@ var UserManager = exports.UserManager = function (_OidcClient) { UserManager.prototype._signinSilentIframe = function _signinSilentIframe() { var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var url = args.redirect_uri || this.settings.silent_redirect_uri; + var url = args.redirect_uri || this.settings.silent_redirect_uri || this.settings.redirect_uri; if (!url) { _Log.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"); return Promise.reject(new Error("No silent_redirect_uri configured")); @@ -22624,7 +22627,7 @@ var UserManager = exports.UserManager = function (_OidcClient) { var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; args.request_type = "si:s"; // this acts like a signin silent - var url = args.redirect_uri || this.settings.silent_redirect_uri; + var url = args.redirect_uri || this.settings.silent_redirect_uri || this.settings.redirect_uri; if (!url) { _Log.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"); return Promise.reject(new Error("No silent_redirect_uri configured")); @@ -22734,7 +22737,10 @@ var UserManager = exports.UserManager = function (_OidcClient) { if (postLogoutRedirectUri) { args.post_logout_redirect_uri = postLogoutRedirectUri; } - return this._signoutStart(args, this._redirectNavigator).then(function () { + var navParams = { + useReplaceToNavigate: args.useReplaceToNavigate + }; + return this._signoutStart(args, this._redirectNavigator, navParams).then(function () { _Log.Log.info("UserManager.signoutRedirect: successful"); }); }; @@ -23470,6 +23476,23 @@ module.exports = exports['default']; /***/ }), +/***/ "./version.js": +/*!********************!*\ + !*** ./version.js ***! + \********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var Version = "1.9.0-beta.4";exports.Version = Version; + +/***/ }), + /***/ 0: /*!***************************************!*\ !*** multi babel-polyfill ./index.js ***! @@ -23484,4 +23507,4 @@ module.exports = __webpack_require__(/*! ./index.js */"./index.js"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vanNyc2FzaWduL2Rpc3QvanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaWFkZGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaXN1YmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL3V1aWQvbGliL3JuZy1icm93c2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvdXVpZC92NC5qcyIsIndlYnBhY2s6Ly9PaWRjLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0FjY2Vzc1Rva2VuRXZlbnRzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YUlGcmFtZU5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFQb3B1cE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0Vycm9yUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9FdmVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0dsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0lGcmFtZU5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0lGcmFtZVdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0luTWVtb3J5V2ViU3RvcmFnZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0pvc2VVdGlsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxJbXBsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSnNvblNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Mb2cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9NZXRhZGF0YVNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9PaWRjQ2xpZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvT2lkY0NsaWVudFNldHRpbmdzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUG9wdXBOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Qb3B1cFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1JlZGlyZWN0TmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUmVzcG9uc2VWYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TZXNzaW9uTW9uaXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWduaW5SZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblN0YXRlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbm91dFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWdub3V0UmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWxlbnRSZW5ld1NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TdGF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1RpbWVyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVG9rZW5DbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Ub2tlblJldm9jYXRpb25DbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9VcmxVdGlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJJbmZvU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXJFdmVudHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlclNldHRpbmdzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9jcnlwdG8vanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvcmFuZG9tLmpzIl0sIm5hbWVzIjpbIkxvZyIsIk9pZGNDbGllbnQiLCJPaWRjQ2xpZW50U2V0dGluZ3MiLCJXZWJTdG9yYWdlU3RhdGVTdG9yZSIsIkluTWVtb3J5V2ViU3RvcmFnZSIsIlVzZXJNYW5hZ2VyIiwiQWNjZXNzVG9rZW5FdmVudHMiLCJNZXRhZGF0YVNlcnZpY2UiLCJDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IiLCJDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yIiwiQ2hlY2tTZXNzaW9uSUZyYW1lIiwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50IiwiU2Vzc2lvbk1vbml0b3IiLCJHbG9iYWwiLCJVc2VyIiwibmF2aWdhdG9yIiwidXNlckFnZW50Iiwid2luZG93IiwiWUFIT08iLCJ1bmRlZmluZWQiLCJsYW5nIiwiZXh0ZW5kIiwiZyIsImgiLCJmIiwiRXJyb3IiLCJkIiwicHJvdG90eXBlIiwiY29uc3RydWN0b3IiLCJzdXBlcmNsYXNzIiwiT2JqZWN0IiwiYiIsImUiLCJjIiwidGVzdCIsImoiLCJpIiwibGVuZ3RoIiwibCIsImsiLCJhIiwiQ3J5cHRvSlMiLCJsaWIiLCJCYXNlIiwibiIsInAiLCJvIiwibWl4SW4iLCJoYXNPd25Qcm9wZXJ0eSIsImluaXQiLCIkc3VwZXIiLCJhcHBseSIsImFyZ3VtZW50cyIsImNyZWF0ZSIsInRvU3RyaW5nIiwiY2xvbmUiLCJXb3JkQXJyYXkiLCJ3b3JkcyIsInNpZ0J5dGVzIiwic3RyaW5naWZ5IiwiY29uY2F0IiwidCIsInEiLCJzIiwiY2xhbXAiLCJyIiwiY2VpbCIsImNhbGwiLCJzbGljZSIsInJhbmRvbSIsInB1c2giLCJtIiwiZW5jIiwiSGV4Iiwiam9pbiIsInBhcnNlIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJMYXRpbjEiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaGFyQ29kZUF0IiwiVXRmOCIsImRlY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiQnVmZmVyZWRCbG9ja0FsZ29yaXRobSIsInJlc2V0IiwiX2RhdGEiLCJfbkRhdGFCeXRlcyIsIl9hcHBlbmQiLCJfcHJvY2VzcyIsInciLCJ4IiwiYmxvY2tTaXplIiwidiIsInUiLCJtYXgiLCJfbWluQnVmZmVyU2l6ZSIsIm1pbiIsIl9kb1Byb2Nlc3NCbG9jayIsInNwbGljZSIsIkhhc2hlciIsImNmZyIsIl9kb1Jlc2V0IiwidXBkYXRlIiwiZmluYWxpemUiLCJfZG9GaW5hbGl6ZSIsIl9jcmVhdGVIZWxwZXIiLCJfY3JlYXRlSG1hY0hlbHBlciIsIkhNQUMiLCJhbGdvIiwiTWF0aCIsIng2NCIsIldvcmQiLCJoaWdoIiwibG93IiwidG9YMzIiLCJCYXNlNjQiLCJfbWFwIiwiY2hhckF0IiwiaW5kZXhPZiIsInNxcnQiLCJwb3ciLCJTSEEyNTYiLCJfaGFzaCIsImZsb29yIiwiSG1hY1NIQTI1NiIsIlQiLCJlYSIsIlNIQTUxMiIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiWCIsIksiLCJZIiwiTCIsIloiLCJNIiwiJCIsIk4iLCJhYSIsIk8iLCJiYSIsIlAiLCJjYSIsIlEiLCJ6IiwiQSIsInkiLCJVIiwiQiIsIlIiLCJDIiwiUyIsIkQiLCJWIiwiRSIsIlciLCJmYSIsImRhIiwiSG1hY1NIQTUxMiIsIlNIQTM4NCIsIkhtYWNTSEEzODQiLCJiNjRtYXAiLCJiNjRwYWQiLCJoZXgyYjY0Iiwic3Vic3RyaW5nIiwiYjY0dG9oZXgiLCJpbnQyY2hhciIsImI2NHRvQkEiLCJBcnJheSIsImRiaXRzIiwiY2FuYXJ5Iiwial9sbSIsIkJpZ0ludGVnZXIiLCJmcm9tTnVtYmVyIiwiZnJvbVN0cmluZyIsIm5iaSIsImFtMSIsImFtMiIsImFtMyIsImFwcE5hbWUiLCJhbSIsIkRCIiwiRE0iLCJEViIsIkJJX0ZQIiwiRlYiLCJGMSIsIkYyIiwiQklfUk0iLCJCSV9SQyIsInJyIiwidnYiLCJpbnRBdCIsImJucENvcHlUbyIsImJucEZyb21JbnQiLCJuYnYiLCJmcm9tSW50IiwiYm5wRnJvbVN0cmluZyIsImZyb21SYWRpeCIsIlpFUk8iLCJzdWJUbyIsImJucENsYW1wIiwiYm5Ub1N0cmluZyIsIm5lZ2F0ZSIsInRvUmFkaXgiLCJibk5lZ2F0ZSIsImJuQWJzIiwiYm5Db21wYXJlVG8iLCJuYml0cyIsImJuQml0TGVuZ3RoIiwiYm5wRExTaGlmdFRvIiwiYm5wRFJTaGlmdFRvIiwiYm5wTFNoaWZ0VG8iLCJibnBSU2hpZnRUbyIsImJucFN1YlRvIiwiYm5wTXVsdGlwbHlUbyIsImFicyIsImJucFNxdWFyZVRvIiwiYm5wRGl2UmVtVG8iLCJjb3B5VG8iLCJsU2hpZnRUbyIsImRsU2hpZnRUbyIsImNvbXBhcmVUbyIsIk9ORSIsImRyU2hpZnRUbyIsInJTaGlmdFRvIiwiYm5Nb2QiLCJkaXZSZW1UbyIsIkNsYXNzaWMiLCJjQ29udmVydCIsIm1vZCIsImNSZXZlcnQiLCJjUmVkdWNlIiwiY011bFRvIiwibXVsdGlwbHlUbyIsInJlZHVjZSIsImNTcXJUbyIsInNxdWFyZVRvIiwiY29udmVydCIsInJldmVydCIsIm11bFRvIiwic3FyVG8iLCJibnBJbnZEaWdpdCIsIk1vbnRnb21lcnkiLCJtcCIsImludkRpZ2l0IiwibXBsIiwibXBoIiwidW0iLCJtdDIiLCJtb250Q29udmVydCIsIm1vbnRSZXZlcnQiLCJtb250UmVkdWNlIiwibW9udFNxclRvIiwibW9udE11bFRvIiwiYm5wSXNFdmVuIiwiYm5wRXhwIiwiYm5Nb2RQb3dJbnQiLCJpc0V2ZW4iLCJleHAiLCJiaXRMZW5ndGgiLCJtb2RQb3dJbnQiLCJibkNsb25lIiwiYm5JbnRWYWx1ZSIsImJuQnl0ZVZhbHVlIiwiYm5TaG9ydFZhbHVlIiwiYm5wQ2h1bmtTaXplIiwiTE4yIiwibG9nIiwiYm5TaWdOdW0iLCJibnBUb1JhZGl4Iiwic2lnbnVtIiwiY2h1bmtTaXplIiwiaW50VmFsdWUiLCJibnBGcm9tUmFkaXgiLCJkTXVsdGlwbHkiLCJkQWRkT2Zmc2V0IiwiYm5wRnJvbU51bWJlciIsInRlc3RCaXQiLCJiaXR3aXNlVG8iLCJzaGlmdExlZnQiLCJvcF9vciIsImlzUHJvYmFibGVQcmltZSIsIm5leHRCeXRlcyIsImJuVG9CeXRlQXJyYXkiLCJibkVxdWFscyIsImJuTWluIiwiYm5NYXgiLCJibnBCaXR3aXNlVG8iLCJvcF9hbmQiLCJibkFuZCIsImJuT3IiLCJvcF94b3IiLCJiblhvciIsIm9wX2FuZG5vdCIsImJuQW5kTm90IiwiYm5Ob3QiLCJiblNoaWZ0TGVmdCIsImJuU2hpZnRSaWdodCIsImxiaXQiLCJibkdldExvd2VzdFNldEJpdCIsImNiaXQiLCJibkJpdENvdW50IiwiYm5UZXN0Qml0IiwiYm5wQ2hhbmdlQml0IiwiYm5TZXRCaXQiLCJjaGFuZ2VCaXQiLCJibkNsZWFyQml0IiwiYm5GbGlwQml0IiwiYm5wQWRkVG8iLCJibkFkZCIsImFkZFRvIiwiYm5TdWJ0cmFjdCIsImJuTXVsdGlwbHkiLCJiblNxdWFyZSIsImJuRGl2aWRlIiwiYm5SZW1haW5kZXIiLCJibkRpdmlkZUFuZFJlbWFpbmRlciIsImJucERNdWx0aXBseSIsImJucERBZGRPZmZzZXQiLCJOdWxsRXhwIiwibk5vcCIsIm5NdWxUbyIsIm5TcXJUbyIsImJuUG93IiwiYm5wTXVsdGlwbHlMb3dlclRvIiwiYm5wTXVsdGlwbHlVcHBlclRvIiwiQmFycmV0dCIsInIyIiwicTMiLCJtdSIsImRpdmlkZSIsImJhcnJldHRDb252ZXJ0IiwiYmFycmV0dFJldmVydCIsImJhcnJldHRSZWR1Y2UiLCJtdWx0aXBseVVwcGVyVG8iLCJtdWx0aXBseUxvd2VyVG8iLCJiYXJyZXR0U3FyVG8iLCJiYXJyZXR0TXVsVG8iLCJibk1vZFBvdyIsImJuR0NEIiwiZ2V0TG93ZXN0U2V0Qml0IiwiYm5wTW9kSW50IiwiYm5Nb2RJbnZlcnNlIiwic3VidHJhY3QiLCJhZGQiLCJsb3dwcmltZXMiLCJscGxpbSIsImJuSXNQcm9iYWJsZVByaW1lIiwibW9kSW50IiwibWlsbGVyUmFiaW4iLCJibnBNaWxsZXJSYWJpbiIsInNoaWZ0UmlnaHQiLCJtb2RQb3ciLCJieXRlVmFsdWUiLCJzaG9ydFZhbHVlIiwidG9CeXRlQXJyYXkiLCJlcXVhbHMiLCJhbmQiLCJvciIsInhvciIsImFuZE5vdCIsIm5vdCIsImJpdENvdW50Iiwic2V0Qml0IiwiY2xlYXJCaXQiLCJmbGlwQml0IiwibXVsdGlwbHkiLCJyZW1haW5kZXIiLCJkaXZpZGVBbmRSZW1haW5kZXIiLCJtb2RJbnZlcnNlIiwiZ2NkIiwic3F1YXJlIiwiQXJjZm91ciIsIkFSQzRpbml0IiwiQVJDNG5leHQiLCJuZXh0IiwicHJuZ19uZXdzdGF0ZSIsInJuZ19wc2l6ZSIsInJuZ19zdGF0ZSIsInJuZ19wb29sIiwicm5nX3BwdHIiLCJybmdfc2VlZF9pbnQiLCJybmdfc2VlZF90aW1lIiwiRGF0ZSIsImdldFRpbWUiLCJjcnlwdG8iLCJtc0NyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsInVhIiwiVWludDhBcnJheSIsImFwcFZlcnNpb24iLCJybmdfZ2V0X2J5dGUiLCJybmdfZ2V0X2J5dGVzIiwiU2VjdXJlUmFuZG9tIiwicGFyc2VCaWdJbnQiLCJsaW5lYnJrIiwiYnl0ZTJIZXgiLCJwa2NzMXBhZDIiLCJvYWVwX21nZjFfYXJyIiwib2FlcF9wYWQiLCJLSlVSIiwiTWVzc2FnZURpZ2VzdCIsIlV0aWwiLCJnZXRDYW5vbmljYWxBbGdOYW1lIiwiZ2V0SGFzaExlbmd0aCIsImhleHRvcnN0ciIsImhhc2hIZXgiLCJyc3RydG9oZXgiLCJSU0FLZXkiLCJkbXAxIiwiZG1xMSIsImNvZWZmIiwiUlNBU2V0UHVibGljIiwiaXNQdWJsaWMiLCJpc1ByaXZhdGUiLCJSU0FEb1B1YmxpYyIsIlJTQUVuY3J5cHQiLCJkb1B1YmxpYyIsIlJTQUVuY3J5cHRPQUVQIiwic2V0UHVibGljIiwiZW5jcnlwdCIsImVuY3J5cHRPQUVQIiwidHlwZSIsIkVDRmllbGRFbGVtZW50RnAiLCJmZUZwRXF1YWxzIiwiZmVGcFRvQmlnSW50ZWdlciIsImZlRnBOZWdhdGUiLCJmZUZwQWRkIiwidG9CaWdJbnRlZ2VyIiwiZmVGcFN1YnRyYWN0IiwiZmVGcE11bHRpcGx5IiwiZmVGcFNxdWFyZSIsImZlRnBEaXZpZGUiLCJFQ1BvaW50RnAiLCJjdXJ2ZSIsInppbnYiLCJwb2ludEZwR2V0WCIsImZyb21CaWdJbnRlZ2VyIiwicG9pbnRGcEdldFkiLCJwb2ludEZwRXF1YWxzIiwiaXNJbmZpbml0eSIsInBvaW50RnBJc0luZmluaXR5IiwicG9pbnRGcE5lZ2F0ZSIsInBvaW50RnBBZGQiLCJ0d2ljZSIsImdldEluZmluaXR5IiwicG9pbnRGcFR3aWNlIiwicG9pbnRGcE11bHRpcGx5IiwicG9pbnRGcE11bHRpcGx5VHdvIiwiZ2V0WCIsImdldFkiLCJtdWx0aXBseVR3byIsIkVDQ3VydmVGcCIsImluZmluaXR5IiwiY3VydmVGcEdldFEiLCJjdXJ2ZUZwR2V0QSIsImN1cnZlRnBHZXRCIiwiY3VydmVGcEVxdWFscyIsImN1cnZlRnBHZXRJbmZpbml0eSIsImN1cnZlRnBGcm9tQmlnSW50ZWdlciIsImN1cnZlRnBEZWNvZGVQb2ludEhleCIsImdldFEiLCJnZXRBIiwiZ2V0QiIsImRlY29kZVBvaW50SGV4IiwiZ2V0Qnl0ZUxlbmd0aCIsImdldEVuY29kZWQiLCJ0b0J5dGVBcnJheVVuc2lnbmVkIiwidW5zaGlmdCIsImRlY29kZUZyb20iLCJkZWNvZGVGcm9tSGV4IiwiYWRkMkQiLCJ0d2ljZTJEIiwidmFsdWVPZiIsIm11bHRpcGx5MkQiLCJpc09uQ3VydmUiLCJ2YWxpZGF0ZSIsImpzb25QYXJzZSIsIlJlZ0V4cCIsIm1hdGNoIiwicmVwbGFjZSIsInNoaWZ0IiwiYXNuMSIsIkFTTjFVdGlsIiwiaW50ZWdlclRvQnl0ZUhleCIsImJpZ0ludFRvTWluVHdvc0NvbXBsZW1lbnRzSGV4IiwiZ2V0UEVNU3RyaW5nRnJvbUhleCIsImhleHRvcGVtIiwibmV3T2JqZWN0IiwiREVSQm9vbGVhbiIsIkRFUkludGVnZXIiLCJERVJCaXRTdHJpbmciLCJERVJPY3RldFN0cmluZyIsIkRFUk51bGwiLCJERVJPYmplY3RJZGVudGlmaWVyIiwiREVSRW51bWVyYXRlZCIsIkRFUlVURjhTdHJpbmciLCJERVJOdW1lcmljU3RyaW5nIiwiREVSUHJpbnRhYmxlU3RyaW5nIiwiREVSVGVsZXRleFN0cmluZyIsIkRFUklBNVN0cmluZyIsIkRFUlVUQ1RpbWUiLCJERVJHZW5lcmFsaXplZFRpbWUiLCJERVJTZXF1ZW5jZSIsIkRFUlNldCIsIkRFUlRhZ2dlZE9iamVjdCIsImtleXMiLCJhcnJheSIsInRhZyIsImV4cGxpY2l0Iiwib2JqIiwianNvblRvQVNOMUhFWCIsImdldEVuY29kZWRIZXgiLCJvaWRIZXhUb0ludCIsIm9pZEludFRvSGV4Iiwic3BsaXQiLCJBU04xT2JqZWN0IiwiZ2V0TGVuZ3RoSGV4RnJvbVZhbHVlIiwiaFYiLCJoVExWIiwiaXNNb2RpZmllZCIsImdldEZyZXNoVmFsdWVIZXgiLCJoTCIsImhUIiwiZ2V0VmFsdWVIZXgiLCJERVJBYnN0cmFjdFN0cmluZyIsImdldFN0cmluZyIsInNldFN0cmluZyIsInV0Zjh0b2hleCIsInRvTG93ZXJDYXNlIiwic2V0U3RyaW5nSGV4Iiwic3RyIiwiaGV4IiwiREVSQWJzdHJhY3RUaW1lIiwibG9jYWxEYXRlVG9VVEMiLCJ1dGMiLCJnZXRUaW1lem9uZU9mZnNldCIsImZvcm1hdERhdGUiLCJ6ZXJvUGFkZGluZyIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsInN0b2hleCIsInNldEJ5RGF0ZVZhbHVlIiwiVVRDIiwic2V0QnlEYXRlIiwiREVSQWJzdHJhY3RTdHJ1Y3R1cmVkIiwic2V0QnlBU04xT2JqZWN0QXJyYXkiLCJhc24xQXJyYXkiLCJhcHBlbmRBU04xT2JqZWN0Iiwic2V0QnlCaWdJbnRlZ2VyIiwic2V0QnlJbnRlZ2VyIiwic2V0VmFsdWVIZXgiLCJiaWdpbnQiLCJzZXRIZXhWYWx1ZUluY2x1ZGluZ1VudXNlZEJpdHMiLCJzZXRVbnVzZWRCaXRzQW5kSGV4VmFsdWUiLCJzZXRCeUJpbmFyeVN0cmluZyIsInNldEJ5Qm9vbGVhbkFycmF5IiwibmV3RmFsc2VBcnJheSIsImJpbiIsInNldFZhbHVlT2lkU3RyaW5nIiwic2V0VmFsdWVOYW1lIiwieDUwOSIsIk9JRCIsIm5hbWUyb2lkIiwib2lkIiwibmFtZSIsImRhdGUiLCJ3aXRoTWlsbGlzIiwibWlsbGlzIiwic29ydEZsYWciLCJzb3J0Iiwic29ydGZsYWciLCJpc0V4cGxpY2l0IiwiYXNuMU9iamVjdCIsInNldEFTTjFPYmplY3QiLCJBU04xSEVYIiwiZ2V0TGJsZW4iLCJnZXRMIiwiZ2V0VmJsZW4iLCJnZXRWaWR4IiwiZ2V0ViIsImdldFRMViIsImdldE5leHRTaWJsaW5nSWR4IiwiZ2V0Q2hpbGRJZHgiLCJnZXROdGhDaGlsZElkeCIsImdldElkeGJ5TGlzdCIsImdldFRMVmJ5TGlzdCIsImdldFZieUxpc3QiLCJoZXh0b29pZHN0ciIsImR1bXAiLCJvbW1pdF9sb25nX29jdGV0IiwiaXNBU04xSEVYIiwib2lkMm5hbWUiLCJoZXh0b3V0ZjgiLCJvaWRuYW1lIiwiSlNPTiIsIng1MDlFeHROYW1lIiwiaXNIZXgiLCJCYXNlNjR4Iiwic3RvQkEiLCJCQXRvcyIsIkJBdG9oZXgiLCJzdG9iNjQiLCJzdG9iNjR1IiwiYjY0dG9iNjR1IiwiYjY0dXRvcyIsImI2NHV0b2I2NCIsImhleHRvYjY0dSIsImI2NHV0b2hleCIsInV0Zjh0b2I2NHUiLCJiNjR1dG91dGY4IiwiQnVmZmVyIiwidXJpY21wdG9oZXgiLCJlbmNvZGVVUklDb21wb25lbnRBbGwiLCJoZXh0b3VyaWNtcCIsInV0Zjh0b2I2NCIsImI2NHRvdXRmOCIsImhleHRvYjY0IiwiaGV4dG9iNjRubCIsImI2NG5sdG9oZXgiLCJwZW10b2hleCIsImhleHRvQXJyYXlCdWZmZXIiLCJBcnJheUJ1ZmZlciIsIkRhdGFWaWV3Iiwic2V0VWludDgiLCJBcnJheUJ1ZmZlcnRvaGV4IiwiYnl0ZUxlbmd0aCIsImdldFVpbnQ4IiwienVsdXRvbXNlYyIsInp1bHV0b3NlYyIsInp1bHV0b2RhdGUiLCJkYXRldG96dWx1IiwiZ2V0VVRDRnVsbFllYXIiLCJnZXRVVENNb250aCIsImdldFVUQ0RhdGUiLCJnZXRVVENIb3VycyIsImdldFVUQ01pbnV0ZXMiLCJnZXRVVENTZWNvbmRzIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwiaXB2NnRvaGV4IiwicmVwZWF0IiwiaGV4dG9pcHY2IiwiaGV4dG9pcCIsImlwdG9oZXgiLCJuZXdsaW5lX3RvVW5peCIsIm5ld2xpbmVfdG9Eb3MiLCJpc0ludGVnZXIiLCJpc0Jhc2U2NCIsImlzQmFzZTY0VVJMIiwiaXNJbnRlZ2VyQXJyYXkiLCJoZXh0b3Bvc2hleCIsImludGFyeXN0cnRvaGV4IiwibWFwIiwic3RyZGlmZmlkeCIsIkRJR0VTVElORk9IRUFEIiwic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kMiIsIm1kNSIsInJpcGVtZDE2MCIsIkRFRkFVTFRQUk9WSURFUiIsImhtYWNtZDUiLCJobWFjc2hhMSIsImhtYWNzaGEyMjQiLCJobWFjc2hhMjU2IiwiaG1hY3NoYTM4NCIsImhtYWNzaGE1MTIiLCJobWFjcmlwZW1kMTYwIiwiTUQ1d2l0aFJTQSIsIlNIQTF3aXRoUlNBIiwiU0hBMjI0d2l0aFJTQSIsIlNIQTI1NndpdGhSU0EiLCJTSEEzODR3aXRoUlNBIiwiU0hBNTEyd2l0aFJTQSIsIlJJUEVNRDE2MHdpdGhSU0EiLCJNRDV3aXRoRUNEU0EiLCJTSEExd2l0aEVDRFNBIiwiU0hBMjI0d2l0aEVDRFNBIiwiU0hBMjU2d2l0aEVDRFNBIiwiU0hBMzg0d2l0aEVDRFNBIiwiU0hBNTEyd2l0aEVDRFNBIiwiUklQRU1EMTYwd2l0aEVDRFNBIiwiU0hBMXdpdGhEU0EiLCJTSEEyMjR3aXRoRFNBIiwiU0hBMjU2d2l0aERTQSIsIk1ENXdpdGhSU0FhbmRNR0YxIiwiU0hBMXdpdGhSU0FhbmRNR0YxIiwiU0hBMjI0d2l0aFJTQWFuZE1HRjEiLCJTSEEyNTZ3aXRoUlNBYW5kTUdGMSIsIlNIQTM4NHdpdGhSU0FhbmRNR0YxIiwiU0hBNTEyd2l0aFJTQWFuZE1HRjEiLCJSSVBFTUQxNjB3aXRoUlNBYW5kTUdGMSIsIkNSWVBUT0pTTUVTU0FHRURJR0VTVE5BTUUiLCJNRDUiLCJTSEExIiwiU0hBMjI0IiwiUklQRU1EMTYwIiwiZ2V0RGlnZXN0SW5mb0hleCIsImdldFBhZGRlZERpZ2VzdEluZm9IZXgiLCJoYXNoU3RyaW5nIiwiYWxnIiwiZGlnZXN0U3RyaW5nIiwiZGlnZXN0SGV4IiwicHJvdiIsInNoYTI1NkhleCIsInNoYTUxMkhleCIsIlNFQ1VSRVJBTkRPTUdFTiIsImdldFJhbmRvbUhleE9mTmJ5dGVzIiwiZ2V0UmFuZG9tQmlnSW50ZWdlck9mTmJ5dGVzIiwiZ2V0UmFuZG9tSGV4T2ZOYml0cyIsImdldFJhbmRvbUJpZ0ludGVnZXJPZk5iaXRzIiwiZ2V0UmFuZG9tQmlnSW50ZWdlclplcm9Ub01heCIsImdldFJhbmRvbUJpZ0ludGVnZXJNaW5Ub01heCIsInNldEFsZ0FuZFByb3ZpZGVyIiwibWQiLCJ1cGRhdGVTdHJpbmciLCJ1cGRhdGVIZXgiLCJkaWdlc3QiLCJzamNsIiwiaGFzaCIsImNvZGVjIiwidG9CaXRzIiwiZnJvbUJpdHMiLCJhbGdOYW1lIiwicHJvdk5hbWUiLCJIQVNITEVOR1RIIiwiTWFjIiwiYWxnUHJvdiIsIm1hYyIsInBhc3MiLCJkb0ZpbmFsIiwiZG9GaW5hbFN0cmluZyIsImRvRmluYWxIZXgiLCJzZXRQYXNzd29yZCIsInV0ZjgiLCJyc3RyIiwiYjY0IiwiYjY0dSIsIlNpZ25hdHVyZSIsIl9zZXRBbGdOYW1lcyIsIm1kQWxnTmFtZSIsInB1YmtleUFsZ05hbWUiLCJfemVyb1BhZGRpbmdPZlNpZ25hdHVyZSIsIktFWVVUSUwiLCJnZXRLZXkiLCJwcnZLZXkiLCJzdGF0ZSIsInB1YktleSIsInNpZ24iLCJzSGFzaEhleCIsImVjcHJ2aGV4IiwiZWNjdXJ2ZW5hbWUiLCJFQ0RTQSIsImhTaWduIiwic2lnbkhleCIsInNpZ25XaXRoTWVzc2FnZUhhc2hQU1MiLCJwc3NTYWx0TGVuIiwic2lnbldpdGhNZXNzYWdlSGFzaCIsIkRTQSIsInNpZ25TdHJpbmciLCJ2ZXJpZnkiLCJlY3B1YmhleCIsInZlcmlmeUhleCIsInZlcmlmeVdpdGhNZXNzYWdlSGFzaFBTUyIsInZlcmlmeVdpdGhNZXNzYWdlSGFzaCIsImFsZ1Byb3ZOYW1lIiwiaW5pdFBhcmFtcyIsInBzc3NhbHRsZW4iLCJwcnZrZXlwZW0iLCJwcnZrZXlwYXMiLCJDaXBoZXIiLCJnZXRBbGdCeUtleUFuZE5hbWUiLCJkZWNyeXB0IiwiZGVjcnlwdE9BRVAiLCJvaWRoZXgybmFtZSIsImdldEJpZ1JhbmRvbSIsInNldE5hbWVkQ3VydmUiLCJlY3BhcmFtcyIsIkVDUGFyYW1ldGVyREIiLCJnZXRCeU5hbWUiLCJwcnZLZXlIZXgiLCJwdWJLZXlIZXgiLCJjdXJ2ZU5hbWUiLCJzZXRQcml2YXRlS2V5SGV4Iiwic2V0UHVibGljS2V5SGV4IiwiZ2V0UHVibGljS2V5WFlIZXgiLCJrZXlsZW4iLCJnZXRTaG9ydE5JU1RQQ3VydmVOYW1lIiwiZ2VuZXJhdGVLZXlQYWlySGV4IiwiYmlSU1NpZ1RvQVNOMVNpZyIsImZyb21CeXRlQXJyYXlVbnNpZ25lZCIsInNlcmlhbGl6ZVNpZyIsInBhcnNlU2lnSGV4IiwidmVyaWZ5UmF3IiwiQml0Y29pbiIsImlzQXJyYXkiLCJwYXJzZVNpZyIsInRvQnl0ZUFycmF5U2lnbmVkIiwicGFyc2VTaWdDb21wYWN0IiwicmVhZFBLQ1M1UHJ2S2V5SGV4IiwiZ2V0TmFtZSIsInJlYWRQS0NTOFBydktleUhleCIsInJlYWRQS0NTOFB1YktleUhleCIsInJlYWRDZXJ0UHViS2V5SGV4IiwicHJ2IiwicHViIiwicGFyc2VTaWdIZXhJbkhleFJTIiwiYXNuMVNpZ1RvQ29uY2F0U2lnIiwiY29uY2F0U2lnVG9BU04xU2lnIiwiaGV4UlNTaWdUb0FTTjFTaWciLCJyZWdpc3QiLCJBRVMiLCJUcmlwbGVERVMiLCJERVMiLCJrZXkiLCJpdiIsImNpcGhlcnRleHQiLCJwcm9jIiwiZXByb2MiLCJpdmxlbiIsImNpcGhlciIsIml2c2FsdCIsImRhdGEiLCJrZXloZXgiLCJpdmhleCIsInZlcnNpb24iLCJwYXJzZVBLQ1M1UEVNIiwiZ2V0S2V5QW5kVW51c2VkSXZCeVBhc3Njb2RlQW5kSXZzYWx0IiwiZGVjcnlwdEtleUI2NCIsImdldERlY3J5cHRlZEtleUhleCIsImdldEVuY3J5cHRlZFBLQ1M1UEVNRnJvbVBydktleUhleCIsInRvVXBwZXJDYXNlIiwicGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4IiwiZW5jcnlwdGlvblNjaGVtZUFsZyIsImVuY3J5cHRpb25TY2hlbWVJViIsInBia2RmMlNhbHQiLCJwYmtkZjJJdGVyIiwiZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtIiwiUEJLREYyIiwia2V5U2l6ZSIsIml0ZXJhdGlvbnMiLCJfZ2V0UGxhaW5QS0NTOEhleEZyb21FbmNyeXB0ZWRQS0NTOFBFTSIsImdldEtleUZyb21FbmNyeXB0ZWRQS0NTOFBFTSIsImdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOEhleCIsInBhcnNlUGxhaW5Qcml2YXRlUEtDUzhIZXgiLCJhbGdwYXJhbSIsImFsZ29pZCIsImtleWlkeCIsImdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOFBFTSIsIl9nZXRLZXlGcm9tUHVibGljUEtDUzhIZXgiLCJwYXJzZVB1YmxpY1Jhd1JTQUtleUhleCIsInBhcnNlUHVibGljUEtDUzhIZXgiLCJ4eSIsImt0eSIsImRwIiwiZHEiLCJjbyIsInFpIiwic2V0UHJpdmF0ZUV4Iiwic2V0UHJpdmF0ZSIsImNydiIsIlg1MDkiLCJnZXRQdWJsaWNLZXlGcm9tQ2VydEhleCIsImdldFB1YmxpY0tleUZyb21DZXJ0UEVNIiwiZ2VuZXJhdGVLZXlwYWlyIiwiZ2VuZXJhdGUiLCJwcnZLZXlPYmoiLCJwdWJLZXlPYmoiLCJnZXRQRU0iLCJTdWJqZWN0UHVibGljS2V5SW5mbyIsInNlcSIsIm9jdHN0ciIsImJpdHN0ciIsImdldEtleUZyb21DU1JQRU0iLCJnZXRLZXlGcm9tQ1NSSGV4IiwicGFyc2VDU1JIZXgiLCJwOHB1YmtleWhleCIsImdldEpXS0Zyb21LZXkiLCJnZXRQb3NBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4IiwiZ2V0SGV4VmFsdWVBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4IiwicmVhZFByaXZhdGVLZXlGcm9tUEVNU3RyaW5nIiwicmVhZFBLQ1M1UHViS2V5SGV4IiwicmVhZENlcnRIZXgiLCJnZXRQdWJsaWNLZXlIZXgiLCJfUkVfSEVYREVDT05MWSIsImNvbXBpbGUiLCJfcnNhc2lnbl9nZXRIZXhQYWRkZWREaWdlc3RJbmZvRm9yU3RyaW5nIiwiZG9Qcml2YXRlIiwicHNzX21nZjFfc3RyIiwic2lnblBTUyIsIl9yc2FzaWduX2dldERlY3J5cHRTaWduYXR1cmVCSSIsIl9yc2FzaWduX2dldEhleERpZ2VzdEluZm9Gcm9tU2lnIiwiX3JzYXNpZ25fZ2V0QWxnTmFtZUFuZEhhc2hGcm9tSGV4RGlzZ2VzdEluZm8iLCJ2ZXJpZnlQU1MiLCJTQUxUX0xFTl9ITEVOIiwiU0FMVF9MRU5fTUFYIiwiU0FMVF9MRU5fUkVDT1ZFUiIsImZvZmZzZXQiLCJhRXh0SW5mbyIsImdldFZlcnNpb24iLCJnZXRTZXJpYWxOdW1iZXJIZXgiLCJnZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZCIsImdldElzc3VlckhleCIsImdldElzc3VlclN0cmluZyIsImhleDJkbiIsImdldFN1YmplY3RIZXgiLCJnZXRTdWJqZWN0U3RyaW5nIiwiZ2V0Tm90QmVmb3JlIiwiZ2V0Tm90QWZ0ZXIiLCJnZXRQdWJsaWNLZXlJZHgiLCJnZXRQdWJsaWNLZXlDb250ZW50SWR4IiwiZ2V0UHVibGljS2V5IiwiZ2V0U2lnbmF0dXJlQWxnb3JpdGhtTmFtZSIsImdldFNpZ25hdHVyZVZhbHVlSGV4IiwidmVyaWZ5U2lnbmF0dXJlIiwicGFyc2VFeHQiLCJjcml0aWNhbCIsInZpZHgiLCJnZXRFeHRJbmZvIiwiZ2V0RXh0QmFzaWNDb25zdHJhaW50cyIsImNBIiwicGF0aExlbiIsImdldEV4dEtleVVzYWdlQmluIiwiZ2V0RXh0S2V5VXNhZ2VTdHJpbmciLCJLRVlVU0FHRV9OQU1FIiwiZ2V0RXh0U3ViamVjdEtleUlkZW50aWZpZXIiLCJnZXRFeHRBdXRob3JpdHlLZXlJZGVudGlmaWVyIiwia2lkIiwiZ2V0RXh0RXh0S2V5VXNhZ2VOYW1lIiwiZ2V0RXh0U3ViamVjdEFsdE5hbWUiLCJnZXRFeHRTdWJqZWN0QWx0TmFtZTIiLCJnZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHNVUkkiLCJnZXRFeHRBSUFJbmZvIiwib2NzcCIsImNhaXNzdWVyIiwiZ2V0RXh0Q2VydGlmaWNhdGVQb2xpY2llcyIsImlkIiwiY3BzIiwidW5vdGljZSIsInJlYWRDZXJ0UEVNIiwiZ2V0SW5mbyIsImhleDJyZG4iLCJoZXgyYXR0clR5cGVWYWx1ZSIsIm9pZDJhdHlwZSIsImdldFB1YmxpY0tleUluZm9Qcm9wT2ZDZXJ0UEVNIiwiandzIiwiSldTIiwiaXNTYWZlSlNPTlN0cmluZyIsInBhcnNlSldTIiwicGFyc2VkSldTIiwic2lndmFsSCIsImhlYWRCNjRVIiwicGF5bG9hZEI2NFUiLCJzaWd2YWxCNjRVIiwic2kiLCJzaWd2YWxCSSIsImhlYWRTIiwicGF5bG9hZFMiLCJyZWFkU2FmZUpTT05TdHJpbmciLCJqd3NhbGcyc2lnYWxnIiwiaEFTTjFTaWciLCJoZWFkZXJPYmoiLCJwYXlsb2FkT2JqIiwiaGVhZGVyUFAiLCJwYXlsb2FkUFAiLCJzaWdIZXgiLCJ2ZXJpZnlKV1QiLCJpbkFycmF5IiwiaW5jbHVkZWRBcnJheSIsImlzcyIsInN1YiIsImF1ZCIsIkludERhdGUiLCJnZXROb3ciLCJ2ZXJpZnlBdCIsImdyYWNlUGVyaW9kIiwibmJmIiwiaWF0IiwianRpIiwiSFMyNTYiLCJIUzM4NCIsIkhTNTEyIiwiUlMyNTYiLCJSUzM4NCIsIlJTNTEyIiwiRVMyNTYiLCJFUzM4NCIsIlBTMjU2IiwiUFMzODQiLCJQUzUxMiIsIm5vbmUiLCJnZXRFbmNvZGVkU2lnbmF0dXJlVmFsdWVGcm9tSldTIiwiZ2V0SldLdGh1bWJwcmludCIsImdldCIsImdldFp1bHUiLCJpbnREYXRlMlVUQ1N0cmluZyIsInRvVVRDU3RyaW5nIiwiaW50RGF0ZTJadWx1IiwiRURTQSIsIl9jcnlwdG8iLCJEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUiLCJhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSIsImFjY2Vzc1Rva2VuRXhwaXJpbmdUaW1lciIsIlRpbWVyIiwiYWNjZXNzVG9rZW5FeHBpcmVkVGltZXIiLCJfYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUiLCJfYWNjZXNzVG9rZW5FeHBpcmluZyIsIl9hY2Nlc3NUb2tlbkV4cGlyZWQiLCJsb2FkIiwiY29udGFpbmVyIiwiYWNjZXNzX3Rva2VuIiwiZXhwaXJlc19pbiIsImR1cmF0aW9uIiwiZGVidWciLCJleHBpcmluZyIsImNhbmNlbCIsImV4cGlyZWQiLCJ1bmxvYWQiLCJhZGRBY2Nlc3NUb2tlbkV4cGlyaW5nIiwiY2IiLCJhZGRIYW5kbGVyIiwicmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyIsInJlbW92ZUhhbmRsZXIiLCJhZGRBY2Nlc3NUb2tlbkV4cGlyZWQiLCJyZW1vdmVBY2Nlc3NUb2tlbkV4cGlyZWQiLCJEZWZhdWx0SW50ZXJ2YWwiLCJjYWxsYmFjayIsImNsaWVudF9pZCIsInVybCIsImludGVydmFsIiwic3RvcE9uRXJyb3IiLCJfY2FsbGJhY2siLCJfY2xpZW50X2lkIiwiX3VybCIsIl9pbnRlcnZhbCIsIl9zdG9wT25FcnJvciIsImlkeCIsIl9mcmFtZV9vcmlnaW4iLCJfZnJhbWUiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJwb3NpdGlvbiIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIsInNyYyIsIlByb21pc2UiLCJyZXNvbHZlIiwib25sb2FkIiwiYm9keSIsImFwcGVuZENoaWxkIiwiX2JvdW5kTWVzc2FnZUV2ZW50IiwiX21lc3NhZ2UiLCJiaW5kIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9yaWdpbiIsInNvdXJjZSIsImNvbnRlbnRXaW5kb3ciLCJlcnJvciIsInN0b3AiLCJzdGFydCIsInNlc3Npb25fc3RhdGUiLCJfc2Vzc2lvbl9zdGF0ZSIsInNlbmQiLCJwb3N0TWVzc2FnZSIsIl90aW1lciIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInByZXBhcmUiLCJwYXJhbXMiLCJwb3B1cFdpbmRvd0ZlYXR1cmVzIiwicG9wdXAiLCJDb3Jkb3ZhUG9wdXBXaW5kb3ciLCJEZWZhdWx0UG9wdXBGZWF0dXJlcyIsIkRlZmF1bHRQb3B1cFRhcmdldCIsIl9wcm9taXNlIiwicmVqZWN0IiwiX3Jlc29sdmUiLCJfcmVqZWN0IiwiZmVhdHVyZXMiLCJ0YXJnZXQiLCJwb3B1cFdpbmRvd1RhcmdldCIsInJlZGlyZWN0X3VyaSIsInN0YXJ0VXJsIiwiX2lzSW5BcHBCcm93c2VySW5zdGFsbGVkIiwiY29yZG92YU1ldGFkYXRhIiwic29tZSIsIm5hdmlnYXRlIiwiX2Vycm9yIiwiY29yZG92YSIsInJlcXVpcmUiLCJtZXRhZGF0YSIsIl9wb3B1cCIsIkluQXBwQnJvd3NlciIsIm9wZW4iLCJfZXhpdENhbGxiYWNrRXZlbnQiLCJfZXhpdENhbGxiYWNrIiwiX2xvYWRTdGFydENhbGxiYWNrRXZlbnQiLCJfbG9hZFN0YXJ0Q2FsbGJhY2siLCJwcm9taXNlIiwiZXZlbnQiLCJfc3VjY2VzcyIsIm1lc3NhZ2UiLCJfY2xlYW51cCIsImNsb3NlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkVycm9yUmVzcG9uc2UiLCJlcnJvcl9kZXNjcmlwdGlvbiIsImVycm9yX3VyaSIsIkV2ZW50IiwiX25hbWUiLCJfY2FsbGJhY2tzIiwiZmluZEluZGV4IiwiaXRlbSIsInJhaXNlIiwidGltZXIiLCJoYW5kbGUiLCJ0ZXN0aW5nIiwicmVxdWVzdCIsIl90ZXN0aW5nIiwic2V0WE1MSHR0cFJlcXVlc3QiLCJuZXdSZXF1ZXN0IiwibG9jYXRpb24iLCJsb2NhbFN0b3JhZ2UiLCJzZXNzaW9uU3RvcmFnZSIsIlhNTEh0dHBSZXF1ZXN0IiwiSUZyYW1lTmF2aWdhdG9yIiwiZnJhbWUiLCJJRnJhbWVXaW5kb3ciLCJub3RpZnlQYXJlbnQiLCJEZWZhdWx0VGltZW91dCIsInRpbWVvdXQiLCJzaWxlbnRSZXF1ZXN0VGltZW91dCIsInNldFRpbWVvdXQiLCJfdGltZW91dCIsImNsZWFyVGltZW91dCIsInJlbW92ZUNoaWxkIiwiX29yaWdpbiIsImZyYW1lRWxlbWVudCIsImhyZWYiLCJwYXJlbnQiLCJwcm90b2NvbCIsImhvc3QiLCJnZXRJdGVtIiwic2V0SXRlbSIsInZhbHVlIiwicmVtb3ZlSXRlbSIsImluZGV4IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIkpvc2VVdGlsIiwiS2V5VXRpbCIsIkFsbG93ZWRTaWduaW5nQWxncyIsImdldEpvc2VVdGlsIiwicGFyc2VKd3QiLCJqd3QiLCJ0b2tlbiIsImhlYWRlciIsInBheWxvYWQiLCJ2YWxpZGF0ZUp3dCIsImlzc3VlciIsImF1ZGllbmNlIiwiY2xvY2tTa2V3Iiwibm93IiwidGltZUluc2Vuc2l0aXZlIiwieDVjIiwiX3ZhbGlkYXRlSnd0IiwidmFsaWRhdGVKd3RBdHRyaWJ1dGVzIiwidmFsaWRBdWRpZW5jZSIsImF6cCIsImxvd2VyTm93IiwidXBwZXJOb3ciLCJ0aGVuIiwiaGV4VG9CYXNlNjRVcmwiLCJKc29uU2VydmljZSIsImFkZGl0aW9uYWxDb250ZW50VHlwZXMiLCJYTUxIdHRwUmVxdWVzdEN0b3IiLCJqd3RIYW5kbGVyIiwiX2NvbnRlbnRUeXBlcyIsIl9YTUxIdHRwUmVxdWVzdCIsIl9qd3RIYW5kbGVyIiwiZ2V0SnNvbiIsInJlcSIsImFsbG93ZWRDb250ZW50VHlwZXMiLCJzdGF0dXMiLCJjb250ZW50VHlwZSIsImdldFJlc3BvbnNlSGVhZGVyIiwiZm91bmQiLCJmaW5kIiwic3RhcnRzV2l0aCIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJvbmVycm9yIiwic2V0UmVxdWVzdEhlYWRlciIsInBvc3RGb3JtIiwibm9wTG9nZ2VyIiwiaW5mbyIsIndhcm4iLCJOT05FIiwiRVJST1IiLCJXQVJOIiwiSU5GTyIsIkRFQlVHIiwibG9nZ2VyIiwibGV2ZWwiLCJhcmdzIiwiZnJvbSIsIk9pZGNNZXRhZGF0YVVybFBhdGgiLCJzZXR0aW5ncyIsIkpzb25TZXJ2aWNlQ3RvciIsIl9zZXR0aW5ncyIsIl9qc29uU2VydmljZSIsImdldE1ldGFkYXRhIiwibWV0YWRhdGFVcmwiLCJnZXRJc3N1ZXIiLCJfZ2V0TWV0YWRhdGFQcm9wZXJ0eSIsImdldEF1dGhvcml6YXRpb25FbmRwb2ludCIsImdldFVzZXJJbmZvRW5kcG9pbnQiLCJnZXRUb2tlbkVuZHBvaW50Iiwib3B0aW9uYWwiLCJnZXRDaGVja1Nlc3Npb25JZnJhbWUiLCJnZXRFbmRTZXNzaW9uRW5kcG9pbnQiLCJnZXRSZXZvY2F0aW9uRW5kcG9pbnQiLCJnZXRLZXlzRW5kcG9pbnQiLCJnZXRTaWduaW5nS2V5cyIsInNpZ25pbmdLZXlzIiwiandrc191cmkiLCJrZXlTZXQiLCJfbWV0YWRhdGFVcmwiLCJhdXRob3JpdHkiLCJjcmVhdGVTaWduaW5SZXF1ZXN0IiwicmVzcG9uc2VfdHlwZSIsInNjb3BlIiwicHJvbXB0IiwibWF4X2FnZSIsInVpX2xvY2FsZXMiLCJpZF90b2tlbl9oaW50IiwibG9naW5faGludCIsImFjcl92YWx1ZXMiLCJyZXNvdXJjZSIsInJlcXVlc3RfdXJpIiwicmVzcG9uc2VfbW9kZSIsImV4dHJhUXVlcnlQYXJhbXMiLCJyZXF1ZXN0X3R5cGUiLCJzdGF0ZVN0b3JlIiwiU2lnbmluUmVxdWVzdCIsImlzQ29kZSIsIl9tZXRhZGF0YVNlcnZpY2UiLCJzaWduaW5SZXF1ZXN0Iiwic2lnbmluU3RhdGUiLCJfc3RhdGVTdG9yZSIsInNldCIsInRvU3RvcmFnZVN0cmluZyIsInJlYWRTaWduaW5SZXNwb25zZVN0YXRlIiwicmVtb3ZlU3RhdGUiLCJ1c2VRdWVyeSIsImRlbGltaXRlciIsInJlc3BvbnNlIiwiU2lnbmluUmVzcG9uc2UiLCJzdGF0ZUFwaSIsInJlbW92ZSIsInN0b3JlZFN0YXRlU3RyaW5nIiwiU2lnbmluU3RhdGUiLCJmcm9tU3RvcmFnZVN0cmluZyIsInByb2Nlc3NTaWduaW5SZXNwb25zZSIsIl92YWxpZGF0b3IiLCJ2YWxpZGF0ZVNpZ25pblJlc3BvbnNlIiwiY3JlYXRlU2lnbm91dFJlcXVlc3QiLCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJTaWdub3V0UmVxdWVzdCIsInNpZ25vdXRTdGF0ZSIsInJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSIsIlNpZ25vdXRSZXNwb25zZSIsInN0YXRlS2V5IiwiU3RhdGUiLCJwcm9jZXNzU2lnbm91dFJlc3BvbnNlIiwidmFsaWRhdGVTaWdub3V0UmVzcG9uc2UiLCJjbGVhclN0YWxlU3RhdGUiLCJzdGFsZVN0YXRlQWdlIiwidmFsaWRhdG9yIiwibWV0YWRhdGFTZXJ2aWNlIiwiRGVmYXVsdFJlc3BvbnNlVHlwZSIsIkRlZmF1bHRTY29wZSIsIkRlZmF1bHRTdGFsZVN0YXRlQWdlIiwiRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyIsImNsaWVudF9zZWNyZXQiLCJmaWx0ZXJQcm90b2NvbENsYWltcyIsImxvYWRVc2VySW5mbyIsInVzZXJJbmZvSnd0SXNzdWVyIiwiUmVzcG9uc2VWYWxpZGF0b3JDdG9yIiwiUmVzcG9uc2VWYWxpZGF0b3IiLCJNZXRhZGF0YVNlcnZpY2VDdG9yIiwiX2F1dGhvcml0eSIsIl9tZXRhZGF0YSIsIl9zaWduaW5nS2V5cyIsIl9jbGllbnRfc2VjcmV0IiwiX3Jlc3BvbnNlX3R5cGUiLCJfc2NvcGUiLCJfcmVkaXJlY3RfdXJpIiwiX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIl9wcm9tcHQiLCJfZGlzcGxheSIsIl9tYXhfYWdlIiwiX3VpX2xvY2FsZXMiLCJfYWNyX3ZhbHVlcyIsIl9yZXNvdXJjZSIsIl9yZXNwb25zZV9tb2RlIiwiX2ZpbHRlclByb3RvY29sQ2xhaW1zIiwiX2xvYWRVc2VySW5mbyIsIl9zdGFsZVN0YXRlQWdlIiwiX2Nsb2NrU2tldyIsIl91c2VySW5mb0p3dElzc3VlciIsIl9leHRyYVF1ZXJ5UGFyYW1zIiwiUG9wdXBOYXZpZ2F0b3IiLCJQb3B1cFdpbmRvdyIsImtlZXBPcGVuIiwibm90aWZ5T3BlbmVyIiwiQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsIiwiX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciIsIl9jaGVja0ZvclBvcHVwQ2xvc2VkIiwiX2lkIiwiZm9jdXMiLCJjbG9zZWQiLCJvcGVuZXIiLCJVcmxVdGlsaXR5IiwicGFyc2VVcmxGcmFnbWVudCIsIlJlZGlyZWN0TmF2aWdhdG9yIiwidXNlUmVwbGFjZVRvTmF2aWdhdGUiLCJQcm90b2NvbENsYWltcyIsIlVzZXJJbmZvU2VydmljZUN0b3IiLCJVc2VySW5mb1NlcnZpY2UiLCJqb3NlVXRpbCIsIlRva2VuQ2xpZW50Q3RvciIsIlRva2VuQ2xpZW50IiwiX3VzZXJJbmZvU2VydmljZSIsIl9qb3NlVXRpbCIsIl90b2tlbkNsaWVudCIsIl9wcm9jZXNzU2lnbmluUGFyYW1zIiwiX3ZhbGlkYXRlVG9rZW5zIiwiX3Byb2Nlc3NDbGFpbXMiLCJub25jZSIsImlkX3Rva2VuIiwiY29kZV92ZXJpZmllciIsImNvZGUiLCJpc09wZW5JZENvbm5lY3QiLCJwcm9maWxlIiwiZ2V0Q2xhaW1zIiwiY2xhaW1zIiwiX21lcmdlQ2xhaW1zIiwiY2xhaW1zMSIsImNsYWltczIiLCJyZXN1bHQiLCJhc3NpZ24iLCJ2YWx1ZXMiLCJmb3JFYWNoIiwiX3Byb2Nlc3NDb2RlIiwiX3ZhbGlkYXRlSWRUb2tlbkFuZEFjY2Vzc1Rva2VuIiwiX3ZhbGlkYXRlSWRUb2tlbiIsImV4Y2hhbmdlQ29kZSIsInRva2VuUmVzcG9uc2UiLCJfdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlcyIsImNsb2NrU2tld0luU2Vjb25kcyIsIl92YWxpZGF0ZUFjY2Vzc1Rva2VuIiwiX2ZpbHRlckJ5QWxnIiwiZmlsdGVyIiwiYXRfaGFzaCIsImhhc2hBbGciLCJoYXNoQml0cyIsInNoYSIsImxlZnQiLCJsZWZ0X2I2NHUiLCJ1c2VyTWFuYWdlciIsIkNoZWNrU2Vzc2lvbklGcmFtZUN0b3IiLCJfdXNlck1hbmFnZXIiLCJfQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciIsImV2ZW50cyIsImFkZFVzZXJMb2FkZWQiLCJfc3RhcnQiLCJhZGRVc2VyVW5sb2FkZWQiLCJfc3RvcCIsImdldFVzZXIiLCJ1c2VyIiwiY2F0Y2giLCJlcnIiLCJfc3ViIiwiX3NpZCIsInNpZCIsIl9jaGVja1Nlc3Npb25JRnJhbWUiLCJfY2hlY2tTZXNzaW9uSW50ZXJ2YWwiLCJfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IiLCJxdWVyeVNlc3Npb25TdGF0dXMiLCJyYWlzZVVzZXJTaWduZWRPdXRFdmVudCIsInNlc3Npb24iLCJfcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQiLCJfcmFpc2VVc2VyU2lnbmVkT3V0IiwiY2hlY2tTZXNzaW9uSW50ZXJ2YWwiLCJzdG9wQ2hlY2tTZXNzaW9uT25FcnJvciIsIm9pZGMiLCJpc09pZGMiLCJhZGRRdWVyeVBhcmFtIiwiY29kZV9jaGFsbGVuZ2UiLCJpc09BdXRoIiwiT2lkY1Njb3BlIiwidG9rZW5fdHlwZSIsImV4cGlyZXNfYXQiLCJzY29wZXMiLCJfbm9uY2UiLCJfY29kZV92ZXJpZmllciIsIl9jb2RlX2NoYWxsZW5nZSIsImNyZWF0ZWQiLCJzdG9yYWdlU3RyaW5nIiwiU2lsZW50UmVuZXdTZXJ2aWNlIiwiX3Rva2VuRXhwaXJpbmciLCJzaWduaW5TaWxlbnQiLCJfcmFpc2VTaWxlbnRSZW5ld0Vycm9yIiwiX2NyZWF0ZWQiLCJfcmVxdWVzdF90eXBlIiwic3RvcmFnZSIsImFnZSIsImN1dG9mZiIsImdldEFsbEtleXMiLCJwcm9taXNlcyIsImFsbCIsIlRpbWVyRHVyYXRpb24iLCJub3dGdW5jIiwiX25vd0Z1bmMiLCJleHBpcmF0aW9uIiwiX3RpbWVySGFuZGxlIiwiX2V4cGlyYXRpb24iLCJ0aW1lckR1cmF0aW9uIiwiZGlmZiIsImdyYW50X3R5cGUiLCJleGNoYW5nZVJlZnJlc2hUb2tlbiIsInJlZnJlc2hfdG9rZW4iLCJBY2Nlc3NUb2tlblR5cGVIaW50IiwiUmVmcmVzaFRva2VuVHlwZUhpbnQiLCJfWE1MSHR0cFJlcXVlc3RDdG9yIiwicmV2b2tlIiwicmVxdWlyZWQiLCJfcmV2b2tlIiwieGhyIiwiZ2xvYmFsIiwibGFzdEluZGV4T2YiLCJyZWdleCIsImNvdW50ZXIiLCJleGVjIiwicHJvcCIsIl9nZXRDbGFpbXNGcm9tSnd0IiwiaXNzdWVyUHJvbWlzZSIsIlNpbGVudFJlbmV3U2VydmljZUN0b3IiLCJTZXNzaW9uTW9uaXRvckN0b3IiLCJUb2tlblJldm9jYXRpb25DbGllbnRDdG9yIiwiVXNlck1hbmFnZXJTZXR0aW5ncyIsIl9ldmVudHMiLCJVc2VyTWFuYWdlckV2ZW50cyIsIl9zaWxlbnRSZW5ld1NlcnZpY2UiLCJhdXRvbWF0aWNTaWxlbnRSZW5ldyIsInN0YXJ0U2lsZW50UmVuZXciLCJtb25pdG9yU2Vzc2lvbiIsIl9zZXNzaW9uTW9uaXRvciIsIl90b2tlblJldm9jYXRpb25DbGllbnQiLCJfbG9hZFVzZXIiLCJyZW1vdmVVc2VyIiwic3RvcmVVc2VyIiwic2lnbmluUmVkaXJlY3QiLCJuYXZQYXJhbXMiLCJfc2lnbmluU3RhcnQiLCJfcmVkaXJlY3ROYXZpZ2F0b3IiLCJzaWduaW5SZWRpcmVjdENhbGxiYWNrIiwiX3NpZ25pbkVuZCIsInNpZ25pblBvcHVwIiwicG9wdXBfcmVkaXJlY3RfdXJpIiwiX3NpZ25pbiIsIl9wb3B1cE5hdmlnYXRvciIsInNpZ25pblBvcHVwQ2FsbGJhY2siLCJfc2lnbmluQ2FsbGJhY2siLCJfdXNlUmVmcmVzaFRva2VuIiwiaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3IiwidmFsaWRhdGVTdWJPblNpbGVudFJlbmV3IiwiY3VycmVudF9zdWIiLCJfc2lnbmluU2lsZW50SWZyYW1lIiwiaWRUb2tlblZhbGlkYXRpb24iLCJfdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuIiwiYXV0aF90aW1lIiwic2lsZW50X3JlZGlyZWN0X3VyaSIsIl9pZnJhbWVOYXZpZ2F0b3IiLCJzaWduaW5TaWxlbnRDYWxsYmFjayIsInNpZ25pbkNhbGxiYWNrIiwic2lnbm91dENhbGxiYWNrIiwic2lnbm91dFJlZGlyZWN0Q2FsbGJhY2siLCJzaWdub3V0UG9wdXBDYWxsYmFjayIsInF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlIiwibmF2UmVzcG9uc2UiLCJzaWduaW5SZXNwb25zZSIsIm5hdmlnYXRvclBhcmFtcyIsInNpZ25vdXRSZWRpcmVjdCIsInBvc3RMb2dvdXRSZWRpcmVjdFVyaSIsIl9zaWdub3V0U3RhcnQiLCJfc2lnbm91dEVuZCIsInNpZ25vdXRQb3B1cCIsInBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIl9zaWdub3V0IiwicmV2b2tlUHJvbWlzZSIsInJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0IiwiX3Jldm9rZUludGVybmFsIiwic2lnbm91dFJlcXVlc3QiLCJzaWdub3V0UmVzcG9uc2UiLCJyZXZva2VBY2Nlc3NUb2tlbiIsInN1Y2Nlc3MiLCJfcmV2b2tlQWNjZXNzVG9rZW5JbnRlcm5hbCIsIl9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbCIsImF0U3VjY2VzcyIsInJ0U3VjY2VzcyIsInN0b3BTaWxlbnRSZW5ldyIsIl91c2VyU3RvcmUiLCJfdXNlclN0b3JlS2V5IiwicmVkaXJlY3ROYXZpZ2F0b3IiLCJwb3B1cE5hdmlnYXRvciIsImlmcmFtZU5hdmlnYXRvciIsInVzZXJTdG9yZSIsIl91c2VyTG9hZGVkIiwiX3VzZXJVbmxvYWRlZCIsIl9zaWxlbnRSZW5ld0Vycm9yIiwiX3VzZXJTaWduZWRPdXQiLCJfdXNlclNlc3Npb25DaGFuZ2VkIiwicmFpc2VFdmVudCIsInJlbW92ZVVzZXJMb2FkZWQiLCJyZW1vdmVVc2VyVW5sb2FkZWQiLCJhZGRTaWxlbnRSZW5ld0Vycm9yIiwicmVtb3ZlU2lsZW50UmVuZXdFcnJvciIsImFkZFVzZXJTaWduZWRPdXQiLCJyZW1vdmVVc2VyU2lnbmVkT3V0IiwiYWRkVXNlclNlc3Npb25DaGFuZ2VkIiwicmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkIiwiRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsIiwic3RvcmUiLCJfcG9wdXBfcmVkaXJlY3RfdXJpIiwiX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIl9wb3B1cFdpbmRvd0ZlYXR1cmVzIiwiX3BvcHVwV2luZG93VGFyZ2V0IiwiX3NpbGVudF9yZWRpcmVjdF91cmkiLCJfc2lsZW50UmVxdWVzdFRpbWVvdXQiLCJfYXV0b21hdGljU2lsZW50UmVuZXciLCJfdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3IiwiX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyIsIl9tb25pdG9yU2Vzc2lvbiIsIl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSIsIl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCIsInByZWZpeCIsIl9zdG9yZSIsIl9wcmVmaXgiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFD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RCxFQUFuRCxFQUFzRCxFQUF0RCxFQUF5RCxFQUF6RCxFQUE0RCxFQUE1RCxFQUErRCxFQUEvRCxFQUFrRSxFQUFsRSxFQUFxRSxFQUFyRSxFQUF3RSxHQUF4RSxFQUE0RSxHQUE1RSxFQUFnRixHQUFoRixFQUFvRixHQUFwRixFQUF3RixHQUF4RixFQUE0RixHQUE1RixFQUFnRyxHQUFoRyxFQUFvRyxHQUFwRyxFQUF3RyxHQUF4RyxFQUE0RyxHQUE1RyxFQUFnSCxHQUFoSCxFQUFvSCxHQUFwSCxFQUF3SCxHQUF4SCxFQUE0SCxHQUE1SCxFQUFnSSxHQUFoSSxFQUFvSSxHQUFwSSxFQUF3SSxHQUF4SSxFQUE0SSxHQUE1SSxFQUFnSixHQUFoSixFQUFvSixHQUFwSixFQUF3SixHQUF4SixFQUE0SixHQUE1SixFQUFnSyxHQUFoSyxFQUFvSyxHQUFwSyxFQUF3SyxHQUF4SyxFQUE0SyxHQUE1SyxFQUFnTCxHQUFoTCxFQUFvTCxHQUFwTCxFQUF3TCxHQUF4TCxFQUE0TCxHQUE1TCxFQUFnTSxHQUFoTSxFQUFvTSxHQUFwTSxFQUF3TSxHQUF4TSxFQUE0TSxHQUE1TSxFQUFnTixHQUFoTixFQUFvTixHQUFwTixFQUF3TixHQUF4TixFQUE0TixHQUE1TixFQUFnTyxHQUFoTyxFQUFvTyxHQUFwTyxFQUF3TyxHQUF4TyxFQUE0TyxHQUE1TyxFQUFnUCxHQUFoUCxFQUFvUCxHQUFwUCxFQUF3UCxHQUF4UCxFQUE0UCxHQUE1UCxFQUFnUSxHQUFoUSxFQUFvUSxHQUFwUSxFQUF3USxHQUF4USxFQUE0USxHQUE1USxFQUFnUixHQUFoUixFQUFvUixHQUFwUixFQUF3UixHQUF4UixFQUE0UixHQUE1UixFQUFnUyxHQUFoUyxFQUFvUyxHQUFwUyxFQUF3UyxHQUF4UyxFQUE0UyxHQUE1UyxFQUFnVCxHQUFoVCxFQUFvVCxHQUFwVCxFQUF3VCxHQUF4VCxFQUE0VCxHQUE1VCxFQUFnVSxHQUFoVSxFQUFvVSxHQUFwVSxFQUF3VSxHQUF4VSxFQUE0VSxHQUE1VSxFQUFnVixHQUFoVixFQUFvVixHQUFwVixFQUF3VixHQUF4VixFQUE0VixHQUE1VixFQUFnVyxHQUFoVyxFQUFvVyxHQUFwVyxFQUF3VyxHQUF4VyxFQUE0VyxHQUE1VyxFQUFnWCxHQUFoWCxFQUFvWCxHQUFwWCxFQUF3WCxHQUF4WCxFQUE0WCxHQUE1WCxFQUFnWSxHQUFoWSxFQUFvWSxHQUFwWSxFQUF3WSxHQUF4WSxFQUE0WSxHQUE1WSxFQUFnWixHQUFoWixFQUFvWixHQUFwWixFQUF3WixHQUF4WixFQUE0WixHQUE1WixFQUFnYSxHQUFoYSxFQUFvYSxHQUFwYSxFQUF3YSxHQUF4YSxFQUE0YSxHQUE1YSxFQUFnYixHQUFoYixFQUFvYixHQUFwYixFQUF3YixHQUF4YixFQUE0YixHQUE1YixFQUFnYyxHQUFoYyxFQUFvYyxHQUFwYyxFQUF3YyxHQUF4YyxFQUE0YyxHQUE1YyxFQUFnZCxHQUFoZCxFQUFvZCxHQUFwZCxFQUF3ZCxHQUF4ZCxFQUE0ZCxHQUE1ZCxFQUFnZSxHQUFoZSxFQUFvZSxHQUFwZSxFQUF3ZSxHQUF4ZSxFQUE0ZSxHQUE1ZSxFQUFnZixHQUFoZixFQUFvZixHQUFwZixFQUF3ZixHQUF4ZixFQUE0ZixHQUE1ZixFQUFnZ0IsR0FBaGdCLEVBQW9nQixHQUFwZ0IsRUFBd2dCLEdBQXhnQixFQUE0Z0IsR0FBNWdCLEVBQWdoQixHQUFoaEIsRUFBb2hCLEdBQXBoQixFQUF3aEIsR0FBeGhCLEVBQTRoQixHQUE1aEIsRUFBZ2lCLEdBQWhpQixFQUFvaUIsR0FBcGlCLEVBQXdpQixHQUF4aUIsRUFBNGlCLEdBQTVpQixFQUFnakIsR0FBaGpCLEVBQW9qQixHQUFwakIsRUFBd2pCLEdBQXhqQixFQUE0akIsR0FBNWpCLEVBQWdrQixHQUFoa0IsRUFBb2tCLEdBQXBrQixFQUF3a0IsR0FBeGtCLEVBQTRrQixHQUE1a0IsRUFBZ2xCLEdBQWhsQixFQUFvbEIsR0FBcGxCLEVBQXdsQixHQUF4bEIsRUFBNGxCLEdBQTVsQixFQUFnbUIsR0FBaG1CLEVBQW9tQixHQUFwbUIsRUFBd21CLEdBQXhtQixFQUE0bUIsR0FBNW1CLEVBQWduQixHQUFobkIsRUFBb25CLEdBQXBuQixFQUF3bkIsR0FBeG5CLEVBQTRuQixHQUE1bkIsRUFBZ29CLEdBQWhvQixDQUFkLENBQW1wQixJQUFJQyxRQUFNLENBQUMsS0FBRyxFQUFKLElBQVFELFVBQVVBLFVBQVU1VCxNQUFWLEdBQWlCLENBQTNCLENBQWxCLENBQWdELFNBQVM4VCxpQkFBVCxDQUEyQm5VLENBQTNCLEVBQTZCO0FBQUMsTUFBSU4sQ0FBSjtBQUFBLE1BQU1LLElBQUUsS0FBS2dNLEdBQUwsRUFBUixDQUFtQixJQUFHaE0sRUFBRThCLENBQUYsSUFBSyxDQUFMLElBQVE5QixFQUFFLENBQUYsS0FBTWtVLFVBQVVBLFVBQVU1VCxNQUFWLEdBQWlCLENBQTNCLENBQWpCLEVBQStDO0FBQUMsU0FBSVgsSUFBRSxDQUFOLEVBQVFBLElBQUV1VSxVQUFVNVQsTUFBcEIsRUFBMkIsRUFBRVgsQ0FBN0IsRUFBK0I7QUFBQyxVQUFHSyxFQUFFLENBQUYsS0FBTWtVLFVBQVV2VSxDQUFWLENBQVQsRUFBc0I7QUFBQyxlQUFPLElBQVA7QUFBWTtBQUFDLFlBQU8sS0FBUDtBQUFhLE9BQUdLLEVBQUUwTyxNQUFGLEVBQUgsRUFBYztBQUFDLFdBQU8sS0FBUDtBQUFhLE9BQUUsQ0FBRixDQUFJLE9BQU0vTyxJQUFFdVUsVUFBVTVULE1BQWxCLEVBQXlCO0FBQUMsUUFBSUcsSUFBRXlULFVBQVV2VSxDQUFWLENBQU47QUFBQSxRQUFtQk8sSUFBRVAsSUFBRSxDQUF2QixDQUF5QixPQUFNTyxJQUFFZ1UsVUFBVTVULE1BQVosSUFBb0JHLElBQUUwVCxLQUE1QixFQUFrQztBQUFDMVQsV0FBR3lULFVBQVVoVSxHQUFWLENBQUg7QUFBa0IsU0FBRUYsRUFBRXFVLE1BQUYsQ0FBUzVULENBQVQsQ0FBRixDQUFjLE9BQU1kLElBQUVPLENBQVIsRUFBVTtBQUFDLFVBQUdPLElBQUV5VCxVQUFVdlUsR0FBVixDQUFGLElBQWtCLENBQXJCLEVBQXVCO0FBQUMsZUFBTyxLQUFQO0FBQWE7QUFBQztBQUFDLFVBQU9LLEVBQUVzVSxXQUFGLENBQWNyVSxDQUFkLENBQVA7QUFBd0IsVUFBU3NVLGNBQVQsQ0FBd0I5VSxDQUF4QixFQUEwQjtBQUFDLE1BQUlGLElBQUUsS0FBS3lVLFFBQUwsQ0FBYzVLLFdBQVdtRCxHQUF6QixDQUFOLENBQW9DLElBQUlyTSxJQUFFWCxFQUFFc1UsZUFBRixFQUFOLENBQTBCLElBQUczVCxLQUFHLENBQU4sRUFBUTtBQUFDLFdBQU8sS0FBUDtBQUFhLE9BQUlWLElBQUVELEVBQUVpVixVQUFGLENBQWF0VSxDQUFiLENBQU4sQ0FBc0JULElBQUdBLElBQUUsQ0FBSCxJQUFPLENBQVQsQ0FBVyxJQUFHQSxJQUFFeVUsVUFBVTVULE1BQWYsRUFBc0I7QUFBQ2IsUUFBRXlVLFVBQVU1VCxNQUFaO0FBQW1CLE9BQUlOLElBQUV1SixLQUFOLENBQVksS0FBSSxJQUFJdEosSUFBRSxDQUFWLEVBQVlBLElBQUVSLENBQWQsRUFBZ0IsRUFBRVEsQ0FBbEIsRUFBb0I7QUFBQ0QsTUFBRTRLLE9BQUYsQ0FBVXNKLFVBQVVoUCxLQUFLYyxLQUFMLENBQVdkLEtBQUs1QyxNQUFMLEtBQWM0UixVQUFVNVQsTUFBbkMsQ0FBVixDQUFWLEVBQWlFLElBQUlDLElBQUVQLEVBQUV5VSxNQUFGLENBQVNqVixDQUFULEVBQVcsSUFBWCxDQUFOLENBQXVCLElBQUdlLEVBQUUrTCxTQUFGLENBQVlsRCxXQUFXbUQsR0FBdkIsS0FBNkIsQ0FBN0IsSUFBZ0NoTSxFQUFFK0wsU0FBRixDQUFZL00sQ0FBWixLQUFnQixDQUFuRCxFQUFxRDtBQUFDLFVBQUlJLElBQUUsQ0FBTixDQUFRLE9BQU1BLE1BQUlPLENBQUosSUFBT0ssRUFBRStMLFNBQUYsQ0FBWS9NLENBQVosS0FBZ0IsQ0FBN0IsRUFBK0I7QUFBQ2dCLFlBQUVBLEVBQUVzTyxTQUFGLENBQVksQ0FBWixFQUFjLElBQWQsQ0FBRixDQUFzQixJQUFHdE8sRUFBRStMLFNBQUYsQ0FBWWxELFdBQVdtRCxHQUF2QixLQUE2QixDQUFoQyxFQUFrQztBQUFDLGlCQUFPLEtBQVA7QUFBYTtBQUFDLFdBQUdoTSxFQUFFK0wsU0FBRixDQUFZL00sQ0FBWixLQUFnQixDQUFuQixFQUFxQjtBQUFDLGVBQU8sS0FBUDtBQUFhO0FBQUM7QUFBQyxVQUFPLElBQVA7QUFBWSxZQUFXSyxTQUFYLENBQXFCNFAsU0FBckIsR0FBK0JOLFlBQS9CLENBQTRDOUYsV0FBV3hKLFNBQVgsQ0FBcUJ3TCxPQUFyQixHQUE2QmtFLFVBQTdCLENBQXdDbEcsV0FBV3hKLFNBQVgsQ0FBcUJrTCxTQUFyQixHQUErQjRFLFlBQS9CLENBQTRDdEcsV0FBV3hKLFNBQVgsQ0FBcUJ5SixVQUFyQixHQUFnQ3dHLGFBQWhDLENBQThDekcsV0FBV3hKLFNBQVgsQ0FBcUJtUSxTQUFyQixHQUErQlMsWUFBL0IsQ0FBNENwSCxXQUFXeEosU0FBWCxDQUFxQjhSLFNBQXJCLEdBQStCRixZQUEvQixDQUE0Q3BJLFdBQVd4SixTQUFYLENBQXFCbVMsS0FBckIsR0FBMkJGLFFBQTNCLENBQW9DekksV0FBV3hKLFNBQVgsQ0FBcUIrUCxTQUFyQixHQUErQjJDLFlBQS9CLENBQTRDbEosV0FBV3hKLFNBQVgsQ0FBcUJnUSxVQUFyQixHQUFnQzJDLGFBQWhDLENBQThDbkosV0FBV3hKLFNBQVgsQ0FBcUI0VCxlQUFyQixHQUFxQ1gsa0JBQXJDLENBQXdEekosV0FBV3hKLFNBQVgsQ0FBcUIyVCxlQUFyQixHQUFxQ1Qsa0JBQXJDLENBQXdEMUosV0FBV3hKLFNBQVgsQ0FBcUJ5VSxNQUFyQixHQUE0QlAsU0FBNUIsQ0FBc0MxSyxXQUFXeEosU0FBWCxDQUFxQjBVLFdBQXJCLEdBQWlDQyxjQUFqQyxDQUFnRG5MLFdBQVd4SixTQUFYLENBQXFCNEIsS0FBckIsR0FBMkJzTixPQUEzQixDQUFtQzFGLFdBQVd4SixTQUFYLENBQXFCNlAsUUFBckIsR0FBOEJWLFVBQTlCLENBQXlDM0YsV0FBV3hKLFNBQVgsQ0FBcUI4VSxTQUFyQixHQUErQjFGLFdBQS9CLENBQTJDNUYsV0FBV3hKLFNBQVgsQ0FBcUIrVSxVQUFyQixHQUFnQzFGLFlBQWhDLENBQTZDN0YsV0FBV3hKLFNBQVgsQ0FBcUIyUCxNQUFyQixHQUE0QkYsUUFBNUIsQ0FBcUNqRyxXQUFXeEosU0FBWCxDQUFxQmdWLFdBQXJCLEdBQWlDeEUsYUFBakMsQ0FBK0NoSCxXQUFXeEosU0FBWCxDQUFxQmlWLE1BQXJCLEdBQTRCeEUsUUFBNUIsQ0FBcUNqSCxXQUFXeEosU0FBWCxDQUFxQnlFLEdBQXJCLEdBQXlCaU0sS0FBekIsQ0FBK0JsSCxXQUFXeEosU0FBWCxDQUFxQnVFLEdBQXJCLEdBQXlCb00sS0FBekIsQ0FBK0JuSCxXQUFXeEosU0FBWCxDQUFxQmtWLEdBQXJCLEdBQXlCcEUsS0FBekIsQ0FBK0J0SCxXQUFXeEosU0FBWCxDQUFxQm1WLEVBQXJCLEdBQXdCcEUsSUFBeEIsQ0FBNkJ2SCxXQUFXeEosU0FBWCxDQUFxQm9WLEdBQXJCLEdBQXlCbkUsS0FBekIsQ0FBK0J6SCxXQUFXeEosU0FBWCxDQUFxQnFWLE1BQXJCLEdBQTRCbEUsUUFBNUIsQ0FBcUMzSCxXQUFXeEosU0FBWCxDQUFxQnNWLEdBQXJCLEdBQXlCbEUsS0FBekIsQ0FBK0I1SCxXQUFXeEosU0FBWCxDQUFxQm9RLFNBQXJCLEdBQStCaUIsV0FBL0IsQ0FBMkM3SCxXQUFXeEosU0FBWCxDQUFxQjRVLFVBQXJCLEdBQWdDdEQsWUFBaEMsQ0FBNkM5SCxXQUFXeEosU0FBWCxDQUFxQmlVLGVBQXJCLEdBQXFDekMsaUJBQXJDLENBQXVEaEksV0FBV3hKLFNBQVgsQ0FBcUJ1VixRQUFyQixHQUE4QjdELFVBQTlCLENBQXlDbEksV0FBV3hKLFNBQVgsQ0FBcUJrUSxPQUFyQixHQUE2QnlCLFNBQTdCLENBQXVDbkksV0FBV3hKLFNBQVgsQ0FBcUJ3VixNQUFyQixHQUE0QjNELFFBQTVCLENBQXFDckksV0FBV3hKLFNBQVgsQ0FBcUJ5VixRQUFyQixHQUE4QjFELFVBQTlCLENBQXlDdkksV0FBV3hKLFNBQVgsQ0FBcUIwVixPQUFyQixHQUE2QjFELFNBQTdCLENBQXVDeEksV0FBV3hKLFNBQVgsQ0FBcUJxVSxHQUFyQixHQUF5Qm5DLEtBQXpCLENBQStCMUksV0FBV3hKLFNBQVgsQ0FBcUJvVSxRQUFyQixHQUE4QmhDLFVBQTlCLENBQXlDNUksV0FBV3hKLFNBQVgsQ0FBcUIyVixRQUFyQixHQUE4QnRELFVBQTlCLENBQXlDN0ksV0FBV3hKLFNBQVgsQ0FBcUJ1VCxNQUFyQixHQUE0QmhCLFFBQTVCLENBQXFDL0ksV0FBV3hKLFNBQVgsQ0FBcUI0VixTQUFyQixHQUErQnBELFdBQS9CLENBQTJDaEosV0FBV3hKLFNBQVgsQ0FBcUI2VixrQkFBckIsR0FBd0NwRCxvQkFBeEMsQ0FBNkRqSixXQUFXeEosU0FBWCxDQUFxQjZVLE1BQXJCLEdBQTRCZCxRQUE1QixDQUFxQ3ZLLFdBQVd4SixTQUFYLENBQXFCOFYsVUFBckIsR0FBZ0MzQixZQUFoQyxDQUE2QzNLLFdBQVd4SixTQUFYLENBQXFCaUcsR0FBckIsR0FBeUIrTSxLQUF6QixDQUErQnhKLFdBQVd4SixTQUFYLENBQXFCK1YsR0FBckIsR0FBeUIvQixLQUF6QixDQUErQnhLLFdBQVd4SixTQUFYLENBQXFCc1EsZUFBckIsR0FBcUNrRSxpQkFBckMsQ0FBdURoTCxXQUFXeEosU0FBWCxDQUFxQmdXLE1BQXJCLEdBQTRCMUQsUUFBNUI7QUFDcmdaOztBQUVBLFNBQVMyRCxPQUFULEdBQWtCO0FBQUMsT0FBS3hWLENBQUwsR0FBTyxDQUFQLENBQVMsS0FBS0QsQ0FBTCxHQUFPLENBQVAsQ0FBUyxLQUFLMkgsQ0FBTCxHQUFPLElBQUlpQixLQUFKLEVBQVA7QUFBbUIsVUFBUzhNLFFBQVQsQ0FBa0JuVyxDQUFsQixFQUFvQjtBQUFDLE1BQUlPLENBQUosRUFBTU8sQ0FBTixFQUFRVCxDQUFSLENBQVUsS0FBSUUsSUFBRSxDQUFOLEVBQVFBLElBQUUsR0FBVixFQUFjLEVBQUVBLENBQWhCLEVBQWtCO0FBQUMsU0FBSzZILENBQUwsQ0FBTzdILENBQVAsSUFBVUEsQ0FBVjtBQUFZLE9BQUUsQ0FBRixDQUFJLEtBQUlBLElBQUUsQ0FBTixFQUFRQSxJQUFFLEdBQVYsRUFBYyxFQUFFQSxDQUFoQixFQUFrQjtBQUFDTyxRQUFHQSxJQUFFLEtBQUtzSCxDQUFMLENBQU83SCxDQUFQLENBQUYsR0FBWVAsRUFBRU8sSUFBRVAsRUFBRVcsTUFBTixDQUFiLEdBQTRCLEdBQTlCLENBQWtDTixJQUFFLEtBQUsrSCxDQUFMLENBQU83SCxDQUFQLENBQUYsQ0FBWSxLQUFLNkgsQ0FBTCxDQUFPN0gsQ0FBUCxJQUFVLEtBQUs2SCxDQUFMLENBQU90SCxDQUFQLENBQVYsQ0FBb0IsS0FBS3NILENBQUwsQ0FBT3RILENBQVAsSUFBVVQsQ0FBVjtBQUFZLFFBQUtLLENBQUwsR0FBTyxDQUFQLENBQVMsS0FBS0QsQ0FBTCxHQUFPLENBQVA7QUFBUyxVQUFTMlYsUUFBVCxHQUFtQjtBQUFDLE1BQUl0VixDQUFKLENBQU0sS0FBS0osQ0FBTCxHQUFRLEtBQUtBLENBQUwsR0FBTyxDQUFSLEdBQVcsR0FBbEIsQ0FBc0IsS0FBS0QsQ0FBTCxHQUFRLEtBQUtBLENBQUwsR0FBTyxLQUFLMkgsQ0FBTCxDQUFPLEtBQUsxSCxDQUFaLENBQVIsR0FBd0IsR0FBL0IsQ0FBbUNJLElBQUUsS0FBS3NILENBQUwsQ0FBTyxLQUFLMUgsQ0FBWixDQUFGLENBQWlCLEtBQUswSCxDQUFMLENBQU8sS0FBSzFILENBQVosSUFBZSxLQUFLMEgsQ0FBTCxDQUFPLEtBQUszSCxDQUFaLENBQWYsQ0FBOEIsS0FBSzJILENBQUwsQ0FBTyxLQUFLM0gsQ0FBWixJQUFlSyxDQUFmLENBQWlCLE9BQU8sS0FBS3NILENBQUwsQ0FBUXRILElBQUUsS0FBS3NILENBQUwsQ0FBTyxLQUFLMUgsQ0FBWixDQUFILEdBQW1CLEdBQTFCLENBQVA7QUFBc0MsU0FBUVQsU0FBUixDQUFrQnNCLElBQWxCLEdBQXVCNFUsUUFBdkIsQ0FBZ0NELFFBQVFqVyxTQUFSLENBQWtCb1csSUFBbEIsR0FBdUJELFFBQXZCLENBQWdDLFNBQVNFLGFBQVQsR0FBd0I7QUFBQyxTQUFPLElBQUlKLE9BQUosRUFBUDtBQUFxQixLQUFJSyxZQUFVLEdBQWQ7QUFDcGhCOztBQUVBLElBQUlDLFNBQUosQ0FBYyxJQUFJQyxRQUFKLENBQWEsSUFBSUMsUUFBSixDQUFhLFNBQVNDLFlBQVQsQ0FBc0I3VixDQUF0QixFQUF3QjtBQUFDMlYsV0FBU0MsVUFBVCxLQUFzQjVWLElBQUUsR0FBeEIsQ0FBNEIyVixTQUFTQyxVQUFULEtBQXVCNVYsS0FBRyxDQUFKLEdBQU8sR0FBN0IsQ0FBaUMyVixTQUFTQyxVQUFULEtBQXVCNVYsS0FBRyxFQUFKLEdBQVEsR0FBOUIsQ0FBa0MyVixTQUFTQyxVQUFULEtBQXVCNVYsS0FBRyxFQUFKLEdBQVEsR0FBOUIsQ0FBa0MsSUFBRzRWLFlBQVVILFNBQWIsRUFBdUI7QUFBQ0csZ0JBQVVILFNBQVY7QUFBb0I7QUFBQyxVQUFTSyxhQUFULEdBQXdCO0FBQUNELGVBQWEsSUFBSUUsSUFBSixHQUFXQyxPQUFYLEVBQWI7QUFBbUMsS0FBR0wsWUFBVSxJQUFiLEVBQWtCO0FBQUNBLGFBQVMsSUFBSXBOLEtBQUosRUFBVCxDQUFxQnFOLFdBQVMsQ0FBVCxDQUFXLElBQUl2VSxDQUFKLENBQU0sSUFBRzVDLFdBQVNFLFNBQVQsS0FBcUJGLE9BQU93WCxNQUFQLEtBQWdCdFgsU0FBaEIsSUFBMkJGLE9BQU95WCxRQUFQLEtBQWtCdlgsU0FBbEUsQ0FBSCxFQUFnRjtBQUFDLFFBQUlzWCxTQUFPeFgsT0FBT3dYLE1BQVAsSUFBZXhYLE9BQU95WCxRQUFqQyxDQUEwQyxJQUFHRCxPQUFPRSxlQUFWLEVBQTBCO0FBQUMsVUFBSUMsS0FBRyxJQUFJQyxVQUFKLENBQWUsRUFBZixDQUFQLENBQTBCSixPQUFPRSxlQUFQLENBQXVCQyxFQUF2QixFQUEyQixLQUFJL1UsSUFBRSxDQUFOLEVBQVFBLElBQUUsRUFBVixFQUFhLEVBQUVBLENBQWYsRUFBaUI7QUFBQ3NVLGlCQUFTQyxVQUFULElBQXFCUSxHQUFHL1UsQ0FBSCxDQUFyQjtBQUEyQjtBQUFDLEtBQTlILE1BQWtJO0FBQUMsVUFBRzlDLFVBQVUySyxPQUFWLElBQW1CLFVBQW5CLElBQStCM0ssVUFBVStYLFVBQVYsR0FBcUIsR0FBdkQsRUFBMkQ7QUFBQyxZQUFJdlAsSUFBRXRJLE9BQU93WCxNQUFQLENBQWNwVSxNQUFkLENBQXFCLEVBQXJCLENBQU4sQ0FBK0IsS0FBSVIsSUFBRSxDQUFOLEVBQVFBLElBQUUwRixFQUFFbEgsTUFBWixFQUFtQixFQUFFd0IsQ0FBckIsRUFBdUI7QUFBQ3NVLG1CQUFTQyxVQUFULElBQXFCN08sRUFBRXRFLFVBQUYsQ0FBYXBCLENBQWIsSUFBZ0IsR0FBckM7QUFBeUM7QUFBQztBQUFDO0FBQUMsVUFBTXVVLFdBQVNILFNBQWYsRUFBeUI7QUFBQ3BVLFFBQUVvRCxLQUFLYyxLQUFMLENBQVcsUUFBTWQsS0FBSzVDLE1BQUwsRUFBakIsQ0FBRixDQUFrQzhULFNBQVNDLFVBQVQsSUFBcUJ2VSxNQUFJLENBQXpCLENBQTJCc1UsU0FBU0MsVUFBVCxJQUFxQnZVLElBQUUsR0FBdkI7QUFBMkIsY0FBUyxDQUFULENBQVd5VTtBQUFnQixVQUFTUyxZQUFULEdBQXVCO0FBQUMsTUFBR2IsYUFBVyxJQUFkLEVBQW1CO0FBQUNJLG9CQUFnQkosWUFBVUYsZUFBVixDQUEwQkUsVUFBVWpWLElBQVYsQ0FBZWtWLFFBQWYsRUFBeUIsS0FBSUMsV0FBUyxDQUFiLEVBQWVBLFdBQVNELFNBQVM5VixNQUFqQyxFQUF3QyxFQUFFK1YsUUFBMUMsRUFBbUQ7QUFBQ0QsZUFBU0MsUUFBVCxJQUFtQixDQUFuQjtBQUFxQixnQkFBUyxDQUFUO0FBQVcsVUFBT0YsVUFBVUgsSUFBVixFQUFQO0FBQXdCLFVBQVNpQixhQUFULENBQXVCalgsQ0FBdkIsRUFBeUI7QUFBQyxNQUFJUyxDQUFKLENBQU0sS0FBSUEsSUFBRSxDQUFOLEVBQVFBLElBQUVULEVBQUVNLE1BQVosRUFBbUIsRUFBRUcsQ0FBckIsRUFBdUI7QUFBQ1QsTUFBRVMsQ0FBRixJQUFLdVcsY0FBTDtBQUFvQjtBQUFDLFVBQVNFLFlBQVQsR0FBdUIsQ0FBRSxjQUFhdFgsU0FBYixDQUF1QnVRLFNBQXZCLEdBQWlDOEcsYUFBakM7QUFDL3NDOztBQUVBLFNBQVNFLFdBQVQsQ0FBcUJuWCxDQUFyQixFQUF1QlMsQ0FBdkIsRUFBeUI7QUFBQyxTQUFPLElBQUkySSxVQUFKLENBQWVwSixDQUFmLEVBQWlCUyxDQUFqQixDQUFQO0FBQTJCLFVBQVMyVyxPQUFULENBQWlCbFgsQ0FBakIsRUFBbUJQLENBQW5CLEVBQXFCO0FBQUMsTUFBSWMsSUFBRSxFQUFOLENBQVMsSUFBSVQsSUFBRSxDQUFOLENBQVEsT0FBTUEsSUFBRUwsQ0FBRixHQUFJTyxFQUFFSSxNQUFaLEVBQW1CO0FBQUNHLFNBQUdQLEVBQUUwSSxTQUFGLENBQVk1SSxDQUFaLEVBQWNBLElBQUVMLENBQWhCLElBQW1CLElBQXRCLENBQTJCSyxLQUFHTCxDQUFIO0FBQUssVUFBT2MsSUFBRVAsRUFBRTBJLFNBQUYsQ0FBWTVJLENBQVosRUFBY0UsRUFBRUksTUFBaEIsQ0FBVDtBQUFpQyxVQUFTK1csUUFBVCxDQUFrQjVXLENBQWxCLEVBQW9CO0FBQUMsTUFBR0EsSUFBRSxFQUFMLEVBQVE7QUFBQyxXQUFNLE1BQUlBLEVBQUVjLFFBQUYsQ0FBVyxFQUFYLENBQVY7QUFBeUIsR0FBbEMsTUFBc0M7QUFBQyxXQUFPZCxFQUFFYyxRQUFGLENBQVcsRUFBWCxDQUFQO0FBQXNCO0FBQUMsVUFBUytWLFNBQVQsQ0FBbUJyWCxDQUFuQixFQUFxQlQsQ0FBckIsRUFBdUI7QUFBQyxNQUFHQSxJQUFFUyxFQUFFSyxNQUFGLEdBQVMsRUFBZCxFQUFpQjtBQUFDLFVBQUssMEJBQUwsQ0FBZ0MsT0FBTyxJQUFQO0FBQVksT0FBSWYsSUFBRSxJQUFJeUosS0FBSixFQUFOLENBQWtCLElBQUlySixJQUFFTSxFQUFFSyxNQUFGLEdBQVMsQ0FBZixDQUFpQixPQUFNWCxLQUFHLENBQUgsSUFBTUgsSUFBRSxDQUFkLEVBQWdCO0FBQUMsUUFBSUMsSUFBRVEsRUFBRWlELFVBQUYsQ0FBYXZELEdBQWIsQ0FBTixDQUF3QixJQUFHRixJQUFFLEdBQUwsRUFBUztBQUFDRixRQUFFLEVBQUVDLENBQUosSUFBT0MsQ0FBUDtBQUFTLEtBQW5CLE1BQXVCO0FBQUMsVUFBSUEsSUFBRSxHQUFILElBQVVBLElBQUUsSUFBZixFQUFxQjtBQUFDRixVQUFFLEVBQUVDLENBQUosSUFBUUMsSUFBRSxFQUFILEdBQU8sR0FBZCxDQUFrQkYsRUFBRSxFQUFFQyxDQUFKLElBQVFDLEtBQUcsQ0FBSixHQUFPLEdBQWQ7QUFBa0IsT0FBMUQsTUFBOEQ7QUFBQ0YsVUFBRSxFQUFFQyxDQUFKLElBQVFDLElBQUUsRUFBSCxHQUFPLEdBQWQsQ0FBa0JGLEVBQUUsRUFBRUMsQ0FBSixJQUFTQyxLQUFHLENBQUosR0FBTyxFQUFSLEdBQVksR0FBbkIsQ0FBdUJGLEVBQUUsRUFBRUMsQ0FBSixJQUFRQyxLQUFHLEVBQUosR0FBUSxHQUFmO0FBQW1CO0FBQUM7QUFBQyxLQUFFLEVBQUVELENBQUosSUFBTyxDQUFQLENBQVMsSUFBSVEsSUFBRSxJQUFJa1gsWUFBSixFQUFOLENBQXlCLElBQUl6VyxJQUFFLElBQUl1SSxLQUFKLEVBQU4sQ0FBa0IsT0FBTXhKLElBQUUsQ0FBUixFQUFVO0FBQUNpQixNQUFFLENBQUYsSUFBSyxDQUFMLENBQU8sT0FBTUEsRUFBRSxDQUFGLEtBQU0sQ0FBWixFQUFjO0FBQUNULFFBQUVtUSxTQUFGLENBQVkxUCxDQUFaO0FBQWUsT0FBRSxFQUFFakIsQ0FBSixJQUFPaUIsRUFBRSxDQUFGLENBQVA7QUFBWSxLQUFFLEVBQUVqQixDQUFKLElBQU8sQ0FBUCxDQUFTRCxFQUFFLEVBQUVDLENBQUosSUFBTyxDQUFQLENBQVMsT0FBTyxJQUFJNEosVUFBSixDQUFlN0osQ0FBZixDQUFQO0FBQXlCLFVBQVNnWSxhQUFULENBQXVCclgsQ0FBdkIsRUFBeUJPLENBQXpCLEVBQTJCUixDQUEzQixFQUE2QjtBQUFDLE1BQUlELElBQUUsRUFBTjtBQUFBLE1BQVNMLElBQUUsQ0FBWCxDQUFhLE9BQU1LLEVBQUVNLE1BQUYsR0FBU0csQ0FBZixFQUFpQjtBQUFDVCxTQUFHQyxFQUFFK0MsT0FBT0MsWUFBUCxDQUFvQjdCLEtBQXBCLENBQTBCNEIsTUFBMUIsRUFBaUM5QyxFQUFFMkIsTUFBRixDQUFTLENBQUMsQ0FBQ2xDLElBQUUsVUFBSCxLQUFnQixFQUFqQixFQUFvQixDQUFDQSxJQUFFLFFBQUgsS0FBYyxFQUFsQyxFQUFxQyxDQUFDQSxJQUFFLEtBQUgsS0FBVyxDQUFoRCxFQUFrREEsSUFBRSxHQUFwRCxDQUFULENBQWpDLENBQUYsQ0FBSCxDQUEyR0EsS0FBRyxDQUFIO0FBQUssVUFBT0ssQ0FBUDtBQUFTLFVBQVN3WCxRQUFULENBQWtCelYsQ0FBbEIsRUFBb0J0QixDQUFwQixFQUFzQmhCLENBQXRCLEVBQXdCYyxDQUF4QixFQUEwQjtBQUFDLE1BQUlMLElBQUV1WCxLQUFLZixNQUFMLENBQVlnQixhQUFsQixDQUFnQyxJQUFJM1csSUFBRTBXLEtBQUtmLE1BQUwsQ0FBWWlCLElBQWxCLENBQXVCLElBQUkzWCxJQUFFLElBQU4sQ0FBVyxJQUFHLENBQUNQLENBQUosRUFBTTtBQUFDQSxRQUFFLE1BQUY7QUFBUyxPQUFHLE9BQU9BLENBQVAsS0FBVyxRQUFkLEVBQXVCO0FBQUNPLFFBQUVFLEVBQUUwWCxtQkFBRixDQUFzQm5ZLENBQXRCLENBQUYsQ0FBMkJjLElBQUVMLEVBQUUyWCxhQUFGLENBQWdCN1gsQ0FBaEIsQ0FBRixDQUFxQlAsSUFBRSxXQUFTWSxDQUFULEVBQVc7QUFBQyxhQUFPeVgsVUFBVS9XLEVBQUVnWCxPQUFGLENBQVVDLFVBQVUzWCxDQUFWLENBQVYsRUFBdUJMLENBQXZCLENBQVYsQ0FBUDtBQUE0QyxLQUExRDtBQUEyRCxPQUFHK0IsRUFBRXpCLE1BQUYsR0FBUyxJQUFFQyxDQUFYLEdBQWEsQ0FBYixHQUFlRSxDQUFsQixFQUFvQjtBQUFDLFVBQUssMEJBQUw7QUFBZ0MsT0FBSUQsSUFBRSxFQUFOO0FBQUEsTUFBU1AsQ0FBVCxDQUFXLEtBQUlBLElBQUUsQ0FBTixFQUFRQSxJQUFFUSxJQUFFc0IsRUFBRXpCLE1BQUosR0FBVyxJQUFFQyxDQUFiLEdBQWUsQ0FBekIsRUFBMkJOLEtBQUcsQ0FBOUIsRUFBZ0M7QUFBQ08sU0FBRyxNQUFIO0FBQVUsT0FBSWhCLElBQUVDLEVBQUUsRUFBRixJQUFNZSxDQUFOLEdBQVEsTUFBUixHQUFldUIsQ0FBckIsQ0FBdUIsSUFBSXhDLElBQUUsSUFBSXlKLEtBQUosQ0FBVXpJLENBQVYsQ0FBTixDQUFtQixJQUFJMlcsWUFBSixHQUFtQi9HLFNBQW5CLENBQTZCNVEsQ0FBN0IsRUFBZ0MsSUFBSWEsSUFBRW1YLGNBQWNoWSxDQUFkLEVBQWdCQyxFQUFFYyxNQUFsQixFQUF5QmIsQ0FBekIsQ0FBTixDQUFrQyxJQUFJcUIsSUFBRSxFQUFOLENBQVMsS0FBSWIsSUFBRSxDQUFOLEVBQVFBLElBQUVULEVBQUVjLE1BQVosRUFBbUJMLEtBQUcsQ0FBdEIsRUFBd0I7QUFBQ2EsTUFBRWIsQ0FBRixJQUFLVCxFQUFFMEQsVUFBRixDQUFhakQsQ0FBYixJQUFnQkcsRUFBRThDLFVBQUYsQ0FBYWpELENBQWIsQ0FBckI7QUFBcUMsT0FBSXVDLElBQUUrVSxjQUFjelcsQ0FBZCxFQUFnQnZCLEVBQUVlLE1BQWxCLEVBQXlCYixDQUF6QixDQUFOLENBQWtDLElBQUlFLElBQUUsQ0FBQyxDQUFELENBQU4sQ0FBVSxLQUFJTSxJQUFFLENBQU4sRUFBUUEsSUFBRVYsRUFBRWUsTUFBWixFQUFtQkwsS0FBRyxDQUF0QixFQUF3QjtBQUFDTixNQUFFTSxJQUFFLENBQUosSUFBT1YsRUFBRVUsQ0FBRixJQUFLdUMsRUFBRVUsVUFBRixDQUFhakQsQ0FBYixDQUFaO0FBQTRCLFVBQU8sSUFBSW1KLFVBQUosQ0FBZXpKLEVBQUVrQyxNQUFGLENBQVNmLENBQVQsQ0FBZixDQUFQO0FBQW1DLFVBQVNtWCxNQUFULEdBQWlCO0FBQUMsT0FBS3BYLENBQUwsR0FBTyxJQUFQLENBQVksS0FBS1osQ0FBTCxHQUFPLENBQVAsQ0FBUyxLQUFLTixDQUFMLEdBQU8sSUFBUCxDQUFZLEtBQUttQixDQUFMLEdBQU8sSUFBUCxDQUFZLEtBQUtpQixDQUFMLEdBQU8sSUFBUCxDQUFZLEtBQUttVyxJQUFMLEdBQVUsSUFBVixDQUFlLEtBQUtDLElBQUwsR0FBVSxJQUFWLENBQWUsS0FBS0MsS0FBTCxHQUFXLElBQVg7QUFBZ0IsVUFBU0MsWUFBVCxDQUFzQnJZLENBQXRCLEVBQXdCUyxDQUF4QixFQUEwQjtBQUFDLE9BQUs2WCxRQUFMLEdBQWMsSUFBZCxDQUFtQixLQUFLQyxTQUFMLEdBQWUsS0FBZixDQUFxQixJQUFHLE9BQU92WSxDQUFQLEtBQVcsUUFBZCxFQUF1QjtBQUFDLFNBQUthLENBQUwsR0FBT2IsQ0FBUCxDQUFTLEtBQUtDLENBQUwsR0FBT1EsQ0FBUDtBQUFTLEdBQTFDLE1BQThDO0FBQUMsUUFBR1QsS0FBRyxJQUFILElBQVNTLEtBQUcsSUFBWixJQUFrQlQsRUFBRU0sTUFBRixHQUFTLENBQTNCLElBQThCRyxFQUFFSCxNQUFGLEdBQVMsQ0FBMUMsRUFBNEM7QUFBQyxXQUFLTyxDQUFMLEdBQU9zVyxZQUFZblgsQ0FBWixFQUFjLEVBQWQsQ0FBUCxDQUF5QixLQUFLQyxDQUFMLEdBQU80QyxTQUFTcEMsQ0FBVCxFQUFXLEVBQVgsQ0FBUDtBQUFzQixLQUE1RixNQUFnRztBQUFDLFlBQUssd0JBQUw7QUFBOEI7QUFBQztBQUFDLFVBQVMrWCxXQUFULENBQXFCL1gsQ0FBckIsRUFBdUI7QUFBQyxTQUFPQSxFQUFFb08sU0FBRixDQUFZLEtBQUs1TyxDQUFqQixFQUFtQixLQUFLWSxDQUF4QixDQUFQO0FBQWtDLFVBQVM0WCxVQUFULENBQW9COVksQ0FBcEIsRUFBc0I7QUFBQyxNQUFJYyxJQUFFNlcsVUFBVTNYLENBQVYsRUFBYSxLQUFLa0IsQ0FBTCxDQUFPK04sU0FBUCxLQUFtQixDQUFwQixJQUF3QixDQUFwQyxDQUFOLENBQTZDLElBQUduTyxLQUFHLElBQU4sRUFBVztBQUFDLFdBQU8sSUFBUDtBQUFZLE9BQUlSLElBQUUsS0FBS3lZLFFBQUwsQ0FBY2pZLENBQWQsQ0FBTixDQUF1QixJQUFHUixLQUFHLElBQU4sRUFBVztBQUFDLFdBQU8sSUFBUDtBQUFZLE9BQUlELElBQUVDLEVBQUVzQixRQUFGLENBQVcsRUFBWCxDQUFOLENBQXFCLElBQUcsQ0FBQ3ZCLEVBQUVNLE1BQUYsR0FBUyxDQUFWLEtBQWMsQ0FBakIsRUFBbUI7QUFBQyxXQUFPTixDQUFQO0FBQVMsR0FBN0IsTUFBaUM7QUFBQyxXQUFNLE1BQUlBLENBQVY7QUFBWTtBQUFDLFVBQVMyWSxjQUFULENBQXdCbFosQ0FBeEIsRUFBMEJRLENBQTFCLEVBQTRCRCxDQUE1QixFQUE4QjtBQUFDLE1BQUlTLElBQUUrVyxTQUFTL1gsQ0FBVCxFQUFZLEtBQUtvQixDQUFMLENBQU8rTixTQUFQLEtBQW1CLENBQXBCLElBQXdCLENBQW5DLEVBQXFDM08sQ0FBckMsRUFBdUNELENBQXZDLENBQU4sQ0FBZ0QsSUFBR1MsS0FBRyxJQUFOLEVBQVc7QUFBQyxXQUFPLElBQVA7QUFBWSxPQUFJbEIsSUFBRSxLQUFLbVosUUFBTCxDQUFjalksQ0FBZCxDQUFOLENBQXVCLElBQUdsQixLQUFHLElBQU4sRUFBVztBQUFDLFdBQU8sSUFBUDtBQUFZLE9BQUlJLElBQUVKLEVBQUVnQyxRQUFGLENBQVcsRUFBWCxDQUFOLENBQXFCLElBQUcsQ0FBQzVCLEVBQUVXLE1BQUYsR0FBUyxDQUFWLEtBQWMsQ0FBakIsRUFBbUI7QUFBQyxXQUFPWCxDQUFQO0FBQVMsR0FBN0IsTUFBaUM7QUFBQyxXQUFNLE1BQUlBLENBQVY7QUFBWTtBQUFDLFFBQU9DLFNBQVAsQ0FBaUI4WSxRQUFqQixHQUEwQkYsV0FBMUIsQ0FBc0NQLE9BQU9yWSxTQUFQLENBQWlCZ1osU0FBakIsR0FBMkJQLFlBQTNCLENBQXdDSixPQUFPclksU0FBUCxDQUFpQmlaLE9BQWpCLEdBQXlCSixVQUF6QixDQUFvQ1IsT0FBT3JZLFNBQVAsQ0FBaUJrWixXQUFqQixHQUE2QkgsY0FBN0IsQ0FBNENWLE9BQU9yWSxTQUFQLENBQWlCbVosSUFBakIsR0FBc0IsS0FBdEI7QUFDM2dGOztBQUVBLFNBQVNDLGdCQUFULENBQTBCaFosQ0FBMUIsRUFBNEJTLENBQTVCLEVBQThCO0FBQUMsT0FBS3NELENBQUwsR0FBT3RELENBQVAsQ0FBUyxLQUFLc0IsQ0FBTCxHQUFPL0IsQ0FBUDtBQUFTLFVBQVNpWixVQUFULENBQW9CeFksQ0FBcEIsRUFBc0I7QUFBQyxNQUFHQSxLQUFHLElBQU4sRUFBVztBQUFDLFdBQU8sSUFBUDtBQUFZLFVBQU8sS0FBS3NCLENBQUwsQ0FBTzhTLE1BQVAsQ0FBY3BVLEVBQUVzQixDQUFoQixLQUFvQixLQUFLZ0MsQ0FBTCxDQUFPOFEsTUFBUCxDQUFjcFUsRUFBRXNELENBQWhCLENBQTNCO0FBQStDLFVBQVNtVixnQkFBVCxHQUEyQjtBQUFDLFNBQU8sS0FBS25WLENBQVo7QUFBYyxVQUFTb1YsVUFBVCxHQUFxQjtBQUFDLFNBQU8sSUFBSUgsZ0JBQUosQ0FBcUIsS0FBS2pYLENBQTFCLEVBQTRCLEtBQUtnQyxDQUFMLENBQU9vSCxNQUFQLEdBQWdCMkIsR0FBaEIsQ0FBb0IsS0FBSy9LLENBQXpCLENBQTVCLENBQVA7QUFBZ0UsVUFBU3FYLE9BQVQsQ0FBaUIzWSxDQUFqQixFQUFtQjtBQUFDLFNBQU8sSUFBSXVZLGdCQUFKLENBQXFCLEtBQUtqWCxDQUExQixFQUE0QixLQUFLZ0MsQ0FBTCxDQUFPa1EsR0FBUCxDQUFXeFQsRUFBRTRZLFlBQUYsRUFBWCxFQUE2QnZNLEdBQTdCLENBQWlDLEtBQUsvSyxDQUF0QyxDQUE1QixDQUFQO0FBQTZFLFVBQVN1WCxZQUFULENBQXNCN1ksQ0FBdEIsRUFBd0I7QUFBQyxTQUFPLElBQUl1WSxnQkFBSixDQUFxQixLQUFLalgsQ0FBMUIsRUFBNEIsS0FBS2dDLENBQUwsQ0FBT2lRLFFBQVAsQ0FBZ0J2VCxFQUFFNFksWUFBRixFQUFoQixFQUFrQ3ZNLEdBQWxDLENBQXNDLEtBQUsvSyxDQUEzQyxDQUE1QixDQUFQO0FBQWtGLFVBQVN3WCxZQUFULENBQXNCOVksQ0FBdEIsRUFBd0I7QUFBQyxTQUFPLElBQUl1WSxnQkFBSixDQUFxQixLQUFLalgsQ0FBMUIsRUFBNEIsS0FBS2dDLENBQUwsQ0FBT3dSLFFBQVAsQ0FBZ0I5VSxFQUFFNFksWUFBRixFQUFoQixFQUFrQ3ZNLEdBQWxDLENBQXNDLEtBQUsvSyxDQUEzQyxDQUE1QixDQUFQO0FBQWtGLFVBQVN5WCxVQUFULEdBQXFCO0FBQUMsU0FBTyxJQUFJUixnQkFBSixDQUFxQixLQUFLalgsQ0FBMUIsRUFBNEIsS0FBS2dDLENBQUwsQ0FBTzZSLE1BQVAsR0FBZ0I5SSxHQUFoQixDQUFvQixLQUFLL0ssQ0FBekIsQ0FBNUIsQ0FBUDtBQUFnRSxVQUFTMFgsVUFBVCxDQUFvQmhaLENBQXBCLEVBQXNCO0FBQUMsU0FBTyxJQUFJdVksZ0JBQUosQ0FBcUIsS0FBS2pYLENBQTFCLEVBQTRCLEtBQUtnQyxDQUFMLENBQU93UixRQUFQLENBQWdCOVUsRUFBRTRZLFlBQUYsR0FBaUIzRCxVQUFqQixDQUE0QixLQUFLM1QsQ0FBakMsQ0FBaEIsRUFBcUQrSyxHQUFyRCxDQUF5RCxLQUFLL0ssQ0FBOUQsQ0FBNUIsQ0FBUDtBQUFxRyxrQkFBaUJuQyxTQUFqQixDQUEyQmlWLE1BQTNCLEdBQWtDb0UsVUFBbEMsQ0FBNkNELGlCQUFpQnBaLFNBQWpCLENBQTJCeVosWUFBM0IsR0FBd0NILGdCQUF4QyxDQUF5REYsaUJBQWlCcFosU0FBakIsQ0FBMkJ1TCxNQUEzQixHQUFrQ2dPLFVBQWxDLENBQTZDSCxpQkFBaUJwWixTQUFqQixDQUEyQnFVLEdBQTNCLEdBQStCbUYsT0FBL0IsQ0FBdUNKLGlCQUFpQnBaLFNBQWpCLENBQTJCb1UsUUFBM0IsR0FBb0NzRixZQUFwQyxDQUFpRE4saUJBQWlCcFosU0FBakIsQ0FBMkIyVixRQUEzQixHQUFvQ2dFLFlBQXBDLENBQWlEUCxpQkFBaUJwWixTQUFqQixDQUEyQmdXLE1BQTNCLEdBQWtDNEQsVUFBbEMsQ0FBNkNSLGlCQUFpQnBaLFNBQWpCLENBQTJCdVQsTUFBM0IsR0FBa0NzRyxVQUFsQyxDQUE2QyxTQUFTQyxTQUFULENBQW1CeFosQ0FBbkIsRUFBcUJPLENBQXJCLEVBQXVCZCxDQUF2QixFQUF5QkssQ0FBekIsRUFBMkI7QUFBQyxPQUFLMlosS0FBTCxHQUFXelosQ0FBWCxDQUFhLEtBQUs2RCxDQUFMLEdBQU90RCxDQUFQLENBQVMsS0FBS2lILENBQUwsR0FBTy9ILENBQVAsQ0FBUyxJQUFHSyxLQUFHLElBQU4sRUFBVztBQUFDLFNBQUt3SCxDQUFMLEdBQU80QixXQUFXbUQsR0FBbEI7QUFBc0IsR0FBbEMsTUFBc0M7QUFBQyxTQUFLL0UsQ0FBTCxHQUFPeEgsQ0FBUDtBQUFTLFFBQUs0WixJQUFMLEdBQVUsSUFBVjtBQUFlLFVBQVNDLFdBQVQsR0FBc0I7QUFBQyxNQUFHLEtBQUtELElBQUwsSUFBVyxJQUFkLEVBQW1CO0FBQUMsU0FBS0EsSUFBTCxHQUFVLEtBQUtwUyxDQUFMLENBQU9rTyxVQUFQLENBQWtCLEtBQUtpRSxLQUFMLENBQVc1WCxDQUE3QixDQUFWO0FBQTBDLFVBQU8sS0FBSzRYLEtBQUwsQ0FBV0csY0FBWCxDQUEwQixLQUFLL1YsQ0FBTCxDQUFPc1YsWUFBUCxHQUFzQjlELFFBQXRCLENBQStCLEtBQUtxRSxJQUFwQyxFQUEwQzlNLEdBQTFDLENBQThDLEtBQUs2TSxLQUFMLENBQVc1WCxDQUF6RCxDQUExQixDQUFQO0FBQThGLFVBQVNnWSxXQUFULEdBQXNCO0FBQUMsTUFBRyxLQUFLSCxJQUFMLElBQVcsSUFBZCxFQUFtQjtBQUFDLFNBQUtBLElBQUwsR0FBVSxLQUFLcFMsQ0FBTCxDQUFPa08sVUFBUCxDQUFrQixLQUFLaUUsS0FBTCxDQUFXNVgsQ0FBN0IsQ0FBVjtBQUEwQyxVQUFPLEtBQUs0WCxLQUFMLENBQVdHLGNBQVgsQ0FBMEIsS0FBS3BTLENBQUwsQ0FBTzJSLFlBQVAsR0FBc0I5RCxRQUF0QixDQUErQixLQUFLcUUsSUFBcEMsRUFBMEM5TSxHQUExQyxDQUE4QyxLQUFLNk0sS0FBTCxDQUFXNVgsQ0FBekQsQ0FBMUIsQ0FBUDtBQUE4RixVQUFTaVksYUFBVCxDQUF1QnZaLENBQXZCLEVBQXlCO0FBQUMsTUFBR0EsS0FBRyxJQUFOLEVBQVc7QUFBQyxXQUFPLElBQVA7QUFBWSxPQUFHLEtBQUt3WixVQUFMLEVBQUgsRUFBcUI7QUFBQyxXQUFPeFosRUFBRXdaLFVBQUYsRUFBUDtBQUFzQixPQUFHeFosRUFBRXdaLFVBQUYsRUFBSCxFQUFrQjtBQUFDLFdBQU8sS0FBS0EsVUFBTCxFQUFQO0FBQXlCLE9BQUkvWixDQUFKLEVBQU1GLENBQU4sQ0FBUUUsSUFBRU8sRUFBRWlILENBQUYsQ0FBSTJSLFlBQUosR0FBbUI5RCxRQUFuQixDQUE0QixLQUFLL04sQ0FBakMsRUFBb0N3TSxRQUFwQyxDQUE2QyxLQUFLdE0sQ0FBTCxDQUFPMlIsWUFBUCxHQUFzQjlELFFBQXRCLENBQStCOVUsRUFBRStHLENBQWpDLENBQTdDLEVBQWtGc0YsR0FBbEYsQ0FBc0YsS0FBSzZNLEtBQUwsQ0FBVzVYLENBQWpHLENBQUYsQ0FBc0csSUFBRyxDQUFDN0IsRUFBRTJVLE1BQUYsQ0FBU3pMLFdBQVcyQixJQUFwQixDQUFKLEVBQThCO0FBQUMsV0FBTyxLQUFQO0FBQWEsT0FBRXRLLEVBQUVzRCxDQUFGLENBQUlzVixZQUFKLEdBQW1COUQsUUFBbkIsQ0FBNEIsS0FBSy9OLENBQWpDLEVBQW9Dd00sUUFBcEMsQ0FBNkMsS0FBS2pRLENBQUwsQ0FBT3NWLFlBQVAsR0FBc0I5RCxRQUF0QixDQUErQjlVLEVBQUUrRyxDQUFqQyxDQUE3QyxFQUFrRnNGLEdBQWxGLENBQXNGLEtBQUs2TSxLQUFMLENBQVc1WCxDQUFqRyxDQUFGLENBQXNHLE9BQU8vQixFQUFFNlUsTUFBRixDQUFTekwsV0FBVzJCLElBQXBCLENBQVA7QUFBaUMsVUFBU21QLGlCQUFULEdBQTRCO0FBQUMsTUFBSSxLQUFLblcsQ0FBTCxJQUFRLElBQVQsSUFBaUIsS0FBSzJELENBQUwsSUFBUSxJQUE1QixFQUFrQztBQUFDLFdBQU8sSUFBUDtBQUFZLFVBQU8sS0FBS0YsQ0FBTCxDQUFPcU4sTUFBUCxDQUFjekwsV0FBVzJCLElBQXpCLEtBQWdDLENBQUMsS0FBS3JELENBQUwsQ0FBTzJSLFlBQVAsR0FBc0J4RSxNQUF0QixDQUE2QnpMLFdBQVcyQixJQUF4QyxDQUF4QztBQUFzRixVQUFTb1AsYUFBVCxHQUF3QjtBQUFDLFNBQU8sSUFBSVQsU0FBSixDQUFjLEtBQUtDLEtBQW5CLEVBQXlCLEtBQUs1VixDQUE5QixFQUFnQyxLQUFLMkQsQ0FBTCxDQUFPeUQsTUFBUCxFQUFoQyxFQUFnRCxLQUFLM0QsQ0FBckQsQ0FBUDtBQUErRCxVQUFTNFMsVUFBVCxDQUFvQjdaLENBQXBCLEVBQXNCO0FBQUMsTUFBRyxLQUFLMFosVUFBTCxFQUFILEVBQXFCO0FBQUMsV0FBTzFaLENBQVA7QUFBUyxPQUFHQSxFQUFFMFosVUFBRixFQUFILEVBQWtCO0FBQUMsV0FBTyxJQUFQO0FBQVksT0FBSW5aLElBQUVQLEVBQUVtSCxDQUFGLENBQUkyUixZQUFKLEdBQW1COUQsUUFBbkIsQ0FBNEIsS0FBSy9OLENBQWpDLEVBQW9Dd00sUUFBcEMsQ0FBNkMsS0FBS3RNLENBQUwsQ0FBTzJSLFlBQVAsR0FBc0I5RCxRQUF0QixDQUErQmhWLEVBQUVpSCxDQUFqQyxDQUE3QyxFQUFrRnNGLEdBQWxGLENBQXNGLEtBQUs2TSxLQUFMLENBQVc1WCxDQUFqRyxDQUFOLENBQTBHLElBQUloQixJQUFFUixFQUFFd0QsQ0FBRixDQUFJc1YsWUFBSixHQUFtQjlELFFBQW5CLENBQTRCLEtBQUsvTixDQUFqQyxFQUFvQ3dNLFFBQXBDLENBQTZDLEtBQUtqUSxDQUFMLENBQU9zVixZQUFQLEdBQXNCOUQsUUFBdEIsQ0FBK0JoVixFQUFFaUgsQ0FBakMsQ0FBN0MsRUFBa0ZzRixHQUFsRixDQUFzRixLQUFLNk0sS0FBTCxDQUFXNVgsQ0FBakcsQ0FBTixDQUEwRyxJQUFHcUgsV0FBVzJCLElBQVgsQ0FBZ0I4SixNQUFoQixDQUF1QjlULENBQXZCLENBQUgsRUFBNkI7QUFBQyxRQUFHcUksV0FBVzJCLElBQVgsQ0FBZ0I4SixNQUFoQixDQUF1Qi9ULENBQXZCLENBQUgsRUFBNkI7QUFBQyxhQUFPLEtBQUt1WixLQUFMLEVBQVA7QUFBb0IsWUFBTyxLQUFLVixLQUFMLENBQVdXLFdBQVgsRUFBUDtBQUFnQyxPQUFJbGEsSUFBRSxJQUFJZ0osVUFBSixDQUFlLEdBQWYsQ0FBTixDQUEwQixJQUFJbkosSUFBRSxLQUFLOEQsQ0FBTCxDQUFPc1YsWUFBUCxFQUFOLENBQTRCLElBQUl4WSxJQUFFLEtBQUs2RyxDQUFMLENBQU8yUixZQUFQLEVBQU4sQ0FBNEIsSUFBSW5aLElBQUVLLEVBQUV3RCxDQUFGLENBQUlzVixZQUFKLEVBQU4sQ0FBeUIsSUFBSTdZLElBQUVELEVBQUVtSCxDQUFGLENBQUkyUixZQUFKLEVBQU4sQ0FBeUIsSUFBSTdXLElBQUV6QixFQUFFNlUsTUFBRixFQUFOLENBQWlCLElBQUl2VixJQUFFbUMsRUFBRStTLFFBQUYsQ0FBV3hVLENBQVgsQ0FBTixDQUFvQixJQUFJcEIsSUFBRU0sRUFBRXNWLFFBQUYsQ0FBVy9TLENBQVgsQ0FBTixDQUFvQixJQUFJakQsSUFBRXVCLEVBQUU4VSxNQUFGLEdBQVdMLFFBQVgsQ0FBb0IsS0FBSy9OLENBQXpCLENBQU4sQ0FBa0MsSUFBSS9HLElBQUVsQixFQUFFeVUsUUFBRixDQUFXclUsRUFBRXFRLFNBQUYsQ0FBWSxDQUFaLENBQVgsRUFBMkJ1RixRQUEzQixDQUFvQ2hWLEVBQUVpSCxDQUF0QyxFQUF5Q3dNLFFBQXpDLENBQWtEM1QsQ0FBbEQsRUFBcURrVixRQUFyRCxDQUE4RHhVLENBQTlELEVBQWlFK0wsR0FBakUsQ0FBcUUsS0FBSzZNLEtBQUwsQ0FBVzVYLENBQWhGLENBQU4sQ0FBeUYsSUFBSXZDLElBQUVHLEVBQUU0VixRQUFGLENBQVduVixDQUFYLEVBQWNtVixRQUFkLENBQXVCelUsQ0FBdkIsRUFBMEJrVCxRQUExQixDQUFtQ25ULEVBQUUwVSxRQUFGLENBQVdsVixDQUFYLENBQW5DLEVBQWtEMlQsUUFBbEQsQ0FBMkR6VSxFQUFFZ1csUUFBRixDQUFXelUsQ0FBWCxDQUEzRCxFQUEwRXlVLFFBQTFFLENBQW1GaFYsRUFBRWlILENBQXJGLEVBQXdGeU0sR0FBeEYsQ0FBNEZuVCxFQUFFeVUsUUFBRixDQUFXbFYsQ0FBWCxDQUE1RixFQUEyR3lNLEdBQTNHLENBQStHLEtBQUs2TSxLQUFMLENBQVc1WCxDQUExSCxDQUFOLENBQW1JLElBQUl0QyxJQUFFWSxFQUFFa1YsUUFBRixDQUFXLEtBQUsvTixDQUFoQixFQUFtQitOLFFBQW5CLENBQTRCaFYsRUFBRWlILENBQTlCLEVBQWlDc0YsR0FBakMsQ0FBcUMsS0FBSzZNLEtBQUwsQ0FBVzVYLENBQWhELENBQU4sQ0FBeUQsT0FBTyxJQUFJMlgsU0FBSixDQUFjLEtBQUtDLEtBQW5CLEVBQXlCLEtBQUtBLEtBQUwsQ0FBV0csY0FBWCxDQUEwQnJaLENBQTFCLENBQXpCLEVBQXNELEtBQUtrWixLQUFMLENBQVdHLGNBQVgsQ0FBMEJ0YSxDQUExQixDQUF0RCxFQUFtRkMsQ0FBbkYsQ0FBUDtBQUE2RixVQUFTOGEsWUFBVCxHQUF1QjtBQUFDLE1BQUcsS0FBS04sVUFBTCxFQUFILEVBQXFCO0FBQUMsV0FBTyxJQUFQO0FBQVksT0FBRyxLQUFLdlMsQ0FBTCxDQUFPMlIsWUFBUCxHQUFzQjlKLE1BQXRCLE1BQWdDLENBQW5DLEVBQXFDO0FBQUMsV0FBTyxLQUFLb0ssS0FBTCxDQUFXVyxXQUFYLEVBQVA7QUFBZ0MsT0FBSS9hLElBQUUsSUFBSTZKLFVBQUosQ0FBZSxHQUFmLENBQU4sQ0FBMEIsSUFBSWxKLElBQUUsS0FBSzZELENBQUwsQ0FBT3NWLFlBQVAsRUFBTixDQUE0QixJQUFJN1osSUFBRSxLQUFLa0ksQ0FBTCxDQUFPMlIsWUFBUCxFQUFOLENBQTRCLElBQUlwWixJQUFFVCxFQUFFK1YsUUFBRixDQUFXLEtBQUsvTixDQUFoQixDQUFOLENBQXlCLElBQUlwSCxJQUFFSCxFQUFFc1YsUUFBRixDQUFXL1YsQ0FBWCxFQUFjc04sR0FBZCxDQUFrQixLQUFLNk0sS0FBTCxDQUFXNVgsQ0FBN0IsQ0FBTixDQUFzQyxJQUFJMUIsSUFBRSxLQUFLc1osS0FBTCxDQUFXbFosQ0FBWCxDQUFhNFksWUFBYixFQUFOLENBQWtDLElBQUk3WSxJQUFFTixFQUFFMFYsTUFBRixHQUFXTCxRQUFYLENBQW9CaFcsQ0FBcEIsQ0FBTixDQUE2QixJQUFHLENBQUM2SixXQUFXMkIsSUFBWCxDQUFnQjhKLE1BQWhCLENBQXVCeFUsQ0FBdkIsQ0FBSixFQUE4QjtBQUFDRyxRQUFFQSxFQUFFeVQsR0FBRixDQUFNLEtBQUt6TSxDQUFMLENBQU9vTyxNQUFQLEdBQWdCTCxRQUFoQixDQUF5QmxWLENBQXpCLENBQU4sQ0FBRjtBQUFxQyxPQUFFRyxFQUFFc00sR0FBRixDQUFNLEtBQUs2TSxLQUFMLENBQVc1WCxDQUFqQixDQUFGLENBQXNCLElBQUkvQixJQUFFUSxFQUFFb1YsTUFBRixHQUFXNUIsUUFBWCxDQUFvQjlULEVBQUU4UCxTQUFGLENBQVksQ0FBWixFQUFldUYsUUFBZixDQUF3Qm5WLENBQXhCLENBQXBCLEVBQWdENFAsU0FBaEQsQ0FBMEQsQ0FBMUQsRUFBNkR1RixRQUE3RCxDQUFzRXRWLENBQXRFLEVBQXlFNk0sR0FBekUsQ0FBNkUsS0FBSzZNLEtBQUwsQ0FBVzVYLENBQXhGLENBQU4sQ0FBaUcsSUFBSXRDLElBQUVlLEVBQUUrVSxRQUFGLENBQVdoVyxDQUFYLEVBQWNnVyxRQUFkLENBQXVCclYsQ0FBdkIsRUFBMEI4VCxRQUExQixDQUFtQzVULEVBQUU0UCxTQUFGLENBQVksQ0FBWixDQUFuQyxFQUFtREEsU0FBbkQsQ0FBNkQsQ0FBN0QsRUFBZ0V1RixRQUFoRSxDQUF5RW5WLENBQXpFLEVBQTRFNFQsUUFBNUUsQ0FBcUZ4VCxFQUFFb1YsTUFBRixHQUFXTCxRQUFYLENBQW9CL1UsQ0FBcEIsQ0FBckYsRUFBNkdzTSxHQUE3RyxDQUFpSCxLQUFLNk0sS0FBTCxDQUFXNVgsQ0FBNUgsQ0FBTixDQUFxSSxJQUFJcEMsSUFBRU0sRUFBRTJWLE1BQUYsR0FBV0wsUUFBWCxDQUFvQnRWLENBQXBCLEVBQXVCK1AsU0FBdkIsQ0FBaUMsQ0FBakMsRUFBb0NsRCxHQUFwQyxDQUF3QyxLQUFLNk0sS0FBTCxDQUFXNVgsQ0FBbkQsQ0FBTixDQUE0RCxPQUFPLElBQUkyWCxTQUFKLENBQWMsS0FBS0MsS0FBbkIsRUFBeUIsS0FBS0EsS0FBTCxDQUFXRyxjQUFYLENBQTBCOVosQ0FBMUIsQ0FBekIsRUFBc0QsS0FBSzJaLEtBQUwsQ0FBV0csY0FBWCxDQUEwQnJhLENBQTFCLENBQXRELEVBQW1GRSxDQUFuRixDQUFQO0FBQTZGLFVBQVM2YSxlQUFULENBQXlCeGEsQ0FBekIsRUFBMkI7QUFBQyxNQUFHLEtBQUtpYSxVQUFMLEVBQUgsRUFBcUI7QUFBQyxXQUFPLElBQVA7QUFBWSxPQUFHamEsRUFBRXVQLE1BQUYsTUFBWSxDQUFmLEVBQWlCO0FBQUMsV0FBTyxLQUFLb0ssS0FBTCxDQUFXVyxXQUFYLEVBQVA7QUFBZ0MsT0FBSS9hLElBQUVTLENBQU4sQ0FBUSxJQUFJUCxJQUFFRixFQUFFZ1csUUFBRixDQUFXLElBQUluTSxVQUFKLENBQWUsR0FBZixDQUFYLENBQU4sQ0FBc0MsSUFBSTdJLElBQUUsS0FBSzRLLE1BQUwsRUFBTixDQUFvQixJQUFJeEwsSUFBRSxJQUFOLENBQVcsSUFBSU8sQ0FBSixDQUFNLEtBQUlBLElBQUVULEVBQUVtUCxTQUFGLEtBQWMsQ0FBcEIsRUFBc0IxTyxJQUFFLENBQXhCLEVBQTBCLEVBQUVBLENBQTVCLEVBQThCO0FBQUNQLFFBQUVBLEVBQUUwYSxLQUFGLEVBQUYsQ0FBWSxJQUFJNVosSUFBRWhCLEVBQUVxUSxPQUFGLENBQVU1UCxDQUFWLENBQU4sQ0FBbUIsSUFBSUUsSUFBRWIsRUFBRXVRLE9BQUYsQ0FBVTVQLENBQVYsQ0FBTixDQUFtQixJQUFHTyxLQUFHTCxDQUFOLEVBQVE7QUFBQ1QsVUFBRUEsRUFBRXNVLEdBQUYsQ0FBTXhULElBQUUsSUFBRixHQUFPRixDQUFiLENBQUY7QUFBa0I7QUFBQyxVQUFPWixDQUFQO0FBQVMsVUFBUzhhLGtCQUFULENBQTRCdmEsQ0FBNUIsRUFBOEJPLENBQTlCLEVBQWdDVCxDQUFoQyxFQUFrQztBQUFDLE1BQUlMLENBQUosQ0FBTSxJQUFHTyxFQUFFME8sU0FBRixLQUFjNU8sRUFBRTRPLFNBQUYsRUFBakIsRUFBK0I7QUFBQ2pQLFFBQUVPLEVBQUUwTyxTQUFGLEtBQWMsQ0FBaEI7QUFBa0IsR0FBbEQsTUFBc0Q7QUFBQ2pQLFFBQUVLLEVBQUU0TyxTQUFGLEtBQWMsQ0FBaEI7QUFBa0IsT0FBSW5QLElBQUUsS0FBS2thLEtBQUwsQ0FBV1csV0FBWCxFQUFOLENBQStCLElBQUlyYSxJQUFFLEtBQUtnVSxHQUFMLENBQVN4VCxDQUFULENBQU4sQ0FBa0IsT0FBTWQsS0FBRyxDQUFULEVBQVc7QUFBQ0YsUUFBRUEsRUFBRTRhLEtBQUYsRUFBRixDQUFZLElBQUduYSxFQUFFNFAsT0FBRixDQUFVblEsQ0FBVixDQUFILEVBQWdCO0FBQUMsVUFBR0ssRUFBRThQLE9BQUYsQ0FBVW5RLENBQVYsQ0FBSCxFQUFnQjtBQUFDRixZQUFFQSxFQUFFd1UsR0FBRixDQUFNaFUsQ0FBTixDQUFGO0FBQVcsT0FBNUIsTUFBZ0M7QUFBQ1IsWUFBRUEsRUFBRXdVLEdBQUYsQ0FBTSxJQUFOLENBQUY7QUFBYztBQUFDLEtBQWpFLE1BQXFFO0FBQUMsVUFBR2pVLEVBQUU4UCxPQUFGLENBQVVuUSxDQUFWLENBQUgsRUFBZ0I7QUFBQ0YsWUFBRUEsRUFBRXdVLEdBQUYsQ0FBTXhULENBQU4sQ0FBRjtBQUFXO0FBQUMsT0FBRWQsQ0FBRjtBQUFJLFVBQU9GLENBQVA7QUFBUyxXQUFVRyxTQUFWLENBQW9COGEsSUFBcEIsR0FBeUJiLFdBQXpCLENBQXFDSCxVQUFVOVosU0FBVixDQUFvQithLElBQXBCLEdBQXlCWixXQUF6QixDQUFxQ0wsVUFBVTlaLFNBQVYsQ0FBb0JpVixNQUFwQixHQUEyQm1GLGFBQTNCLENBQXlDTixVQUFVOVosU0FBVixDQUFvQnFhLFVBQXBCLEdBQStCQyxpQkFBL0IsQ0FBaURSLFVBQVU5WixTQUFWLENBQW9CdUwsTUFBcEIsR0FBMkJnUCxhQUEzQixDQUF5Q1QsVUFBVTlaLFNBQVYsQ0FBb0JxVSxHQUFwQixHQUF3Qm1HLFVBQXhCLENBQW1DVixVQUFVOVosU0FBVixDQUFvQnlhLEtBQXBCLEdBQTBCRSxZQUExQixDQUF1Q2IsVUFBVTlaLFNBQVYsQ0FBb0IyVixRQUFwQixHQUE2QmlGLGVBQTdCLENBQTZDZCxVQUFVOVosU0FBVixDQUFvQmdiLFdBQXBCLEdBQWdDSCxrQkFBaEMsQ0FBbUQsU0FBU0ksU0FBVCxDQUFtQjVhLENBQW5CLEVBQXFCTixDQUFyQixFQUF1Qk8sQ0FBdkIsRUFBeUI7QUFBQyxPQUFLNkIsQ0FBTCxHQUFPOUIsQ0FBUCxDQUFTLEtBQUtRLENBQUwsR0FBTyxLQUFLcVosY0FBTCxDQUFvQm5hLENBQXBCLENBQVAsQ0FBOEIsS0FBS0ssQ0FBTCxHQUFPLEtBQUs4WixjQUFMLENBQW9CNVosQ0FBcEIsQ0FBUCxDQUE4QixLQUFLNGEsUUFBTCxHQUFjLElBQUlwQixTQUFKLENBQWMsSUFBZCxFQUFtQixJQUFuQixFQUF3QixJQUF4QixDQUFkO0FBQTRDLFVBQVNxQixXQUFULEdBQXNCO0FBQUMsU0FBTyxLQUFLaFosQ0FBWjtBQUFjLFVBQVNpWixXQUFULEdBQXNCO0FBQUMsU0FBTyxLQUFLdmEsQ0FBWjtBQUFjLFVBQVN3YSxXQUFULEdBQXNCO0FBQUMsU0FBTyxLQUFLamIsQ0FBWjtBQUFjLFVBQVNrYixhQUFULENBQXVCemEsQ0FBdkIsRUFBeUI7QUFBQyxNQUFHQSxLQUFHLElBQU4sRUFBVztBQUFDLFdBQU8sSUFBUDtBQUFZLFVBQU8sS0FBS3NCLENBQUwsQ0FBTzhTLE1BQVAsQ0FBY3BVLEVBQUVzQixDQUFoQixLQUFvQixLQUFLdEIsQ0FBTCxDQUFPb1UsTUFBUCxDQUFjcFUsRUFBRUEsQ0FBaEIsQ0FBcEIsSUFBd0MsS0FBS1QsQ0FBTCxDQUFPNlUsTUFBUCxDQUFjcFUsRUFBRVQsQ0FBaEIsQ0FBL0M7QUFBbUUsVUFBU21iLGtCQUFULEdBQTZCO0FBQUMsU0FBTyxLQUFLTCxRQUFaO0FBQXFCLFVBQVNNLHFCQUFULENBQStCM2EsQ0FBL0IsRUFBaUM7QUFBQyxTQUFPLElBQUl1WSxnQkFBSixDQUFxQixLQUFLalgsQ0FBMUIsRUFBNEJ0QixDQUE1QixDQUFQO0FBQXNDLFVBQVM0YSxxQkFBVCxDQUErQjFiLENBQS9CLEVBQWlDO0FBQUMsVUFBT2tELFNBQVNsRCxFQUFFbUQsTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLENBQVQsRUFBdUIsRUFBdkIsQ0FBUCxHQUFtQyxLQUFLLENBQUw7QUFBTyxhQUFPLEtBQUtnWSxRQUFaLENBQXFCLEtBQUssQ0FBTCxDQUFPLEtBQUssQ0FBTDtBQUFPLGFBQU8sSUFBUCxDQUFZLEtBQUssQ0FBTCxDQUFPLEtBQUssQ0FBTCxDQUFPLEtBQUssQ0FBTDtBQUFPLFVBQUlyYSxJQUFFLENBQUNkLEVBQUVXLE1BQUYsR0FBUyxDQUFWLElBQWEsQ0FBbkIsQ0FBcUIsSUFBSUosSUFBRVAsRUFBRW1ELE1BQUYsQ0FBUyxDQUFULEVBQVdyQyxDQUFYLENBQU4sQ0FBb0IsSUFBSVQsSUFBRUwsRUFBRW1ELE1BQUYsQ0FBU3JDLElBQUUsQ0FBWCxFQUFhQSxDQUFiLENBQU4sQ0FBc0IsT0FBTyxJQUFJaVosU0FBSixDQUFjLElBQWQsRUFBbUIsS0FBS0ksY0FBTCxDQUFvQixJQUFJMVEsVUFBSixDQUFlbEosQ0FBZixFQUFpQixFQUFqQixDQUFwQixDQUFuQixFQUE2RCxLQUFLNFosY0FBTCxDQUFvQixJQUFJMVEsVUFBSixDQUFlcEosQ0FBZixFQUFpQixFQUFqQixDQUFwQixDQUE3RCxDQUFQLENBQStHO0FBQVEsYUFBTyxJQUFQLENBQXBTO0FBQWlULFdBQVVKLFNBQVYsQ0FBb0IwYixJQUFwQixHQUF5QlAsV0FBekIsQ0FBcUNGLFVBQVVqYixTQUFWLENBQW9CMmIsSUFBcEIsR0FBeUJQLFdBQXpCLENBQXFDSCxVQUFVamIsU0FBVixDQUFvQjRiLElBQXBCLEdBQXlCUCxXQUF6QixDQUFxQ0osVUFBVWpiLFNBQVYsQ0FBb0JpVixNQUFwQixHQUEyQnFHLGFBQTNCLENBQXlDTCxVQUFVamIsU0FBVixDQUFvQjBhLFdBQXBCLEdBQWdDYSxrQkFBaEMsQ0FBbUROLFVBQVVqYixTQUFWLENBQW9Ca2EsY0FBcEIsR0FBbUNzQixxQkFBbkMsQ0FBeURQLFVBQVVqYixTQUFWLENBQW9CNmIsY0FBcEIsR0FBbUNKLHFCQUFuQztBQUNsa007O0FBRUFyQyxpQkFBaUJwWixTQUFqQixDQUEyQjhiLGFBQTNCLEdBQXlDLFlBQVU7QUFBQyxTQUFPeFcsS0FBS2MsS0FBTCxDQUFXLENBQUMsS0FBS3FULFlBQUwsR0FBb0J6SyxTQUFwQixLQUFnQyxDQUFqQyxJQUFvQyxDQUEvQyxDQUFQO0FBQXlELENBQTdHLENBQThHOEssVUFBVTlaLFNBQVYsQ0FBb0IrYixVQUFwQixHQUErQixVQUFTemIsQ0FBVCxFQUFXO0FBQUMsTUFBSVAsSUFBRSxTQUFGQSxDQUFFLENBQVNILENBQVQsRUFBV0MsQ0FBWCxFQUFhO0FBQUMsUUFBSUYsSUFBRUMsRUFBRW9jLG1CQUFGLEVBQU4sQ0FBOEIsSUFBR25jLElBQUVGLEVBQUVlLE1BQVAsRUFBYztBQUFDZixVQUFFQSxFQUFFOEMsS0FBRixDQUFROUMsRUFBRWUsTUFBRixHQUFTYixDQUFqQixDQUFGO0FBQXNCLEtBQXJDLE1BQXlDO0FBQUMsYUFBTUEsSUFBRUYsRUFBRWUsTUFBVixFQUFpQjtBQUFDZixVQUFFc2MsT0FBRixDQUFVLENBQVY7QUFBYTtBQUFDLFlBQU90YyxDQUFQO0FBQVMsR0FBckksQ0FBc0ksSUFBSWtCLElBQUUsS0FBS2lhLElBQUwsR0FBWXJCLFlBQVosRUFBTixDQUFpQyxJQUFJcFosSUFBRSxLQUFLMGEsSUFBTCxHQUFZdEIsWUFBWixFQUFOLENBQWlDLElBQUlyWixJQUFFTCxFQUFFYyxDQUFGLEVBQUksRUFBSixDQUFOLENBQWMsSUFBR1AsQ0FBSCxFQUFLO0FBQUMsUUFBR0QsRUFBRXlPLE1BQUYsRUFBSCxFQUFjO0FBQUMxTyxRQUFFNmIsT0FBRixDQUFVLENBQVY7QUFBYSxLQUE1QixNQUFnQztBQUFDN2IsUUFBRTZiLE9BQUYsQ0FBVSxDQUFWO0FBQWE7QUFBQyxHQUFyRCxNQUF5RDtBQUFDN2IsTUFBRTZiLE9BQUYsQ0FBVSxDQUFWLEVBQWE3YixJQUFFQSxFQUFFNkIsTUFBRixDQUFTbEMsRUFBRU0sQ0FBRixFQUFJLEVBQUosQ0FBVCxDQUFGO0FBQW9CLFVBQU9ELENBQVA7QUFBUyxDQUFyVyxDQUFzVzBaLFVBQVVvQyxVQUFWLEdBQXFCLFVBQVN2YyxDQUFULEVBQVdXLENBQVgsRUFBYTtBQUFDLE1BQUlULElBQUVTLEVBQUUsQ0FBRixDQUFOLENBQVcsSUFBSUQsSUFBRUMsRUFBRUksTUFBRixHQUFTLENBQWYsQ0FBaUIsSUFBSVgsSUFBRU8sRUFBRW1DLEtBQUYsQ0FBUSxDQUFSLEVBQVUsSUFBRXBDLElBQUUsQ0FBZCxDQUFOLENBQXVCLElBQUlELElBQUVFLEVBQUVtQyxLQUFGLENBQVEsSUFBRXBDLElBQUUsQ0FBWixFQUFjLElBQUVBLENBQWhCLENBQU4sQ0FBeUJOLEVBQUVrYyxPQUFGLENBQVUsQ0FBVixFQUFhN2IsRUFBRTZiLE9BQUYsQ0FBVSxDQUFWLEVBQWEsSUFBSXBiLElBQUUsSUFBSTJJLFVBQUosQ0FBZXpKLENBQWYsQ0FBTixDQUF3QixJQUFJSCxJQUFFLElBQUk0SixVQUFKLENBQWVwSixDQUFmLENBQU4sQ0FBd0IsT0FBTyxJQUFJMFosU0FBSixDQUFjbmEsQ0FBZCxFQUFnQkEsRUFBRXVhLGNBQUYsQ0FBaUJyWixDQUFqQixDQUFoQixFQUFvQ2xCLEVBQUV1YSxjQUFGLENBQWlCdGEsQ0FBakIsQ0FBcEMsQ0FBUDtBQUFnRSxDQUF6UCxDQUEwUGthLFVBQVVxQyxhQUFWLEdBQXdCLFVBQVN4YyxDQUFULEVBQVdXLENBQVgsRUFBYTtBQUFDLE1BQUlULElBQUVTLEVBQUU0QyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBTixDQUFvQixJQUFJN0MsSUFBRUMsRUFBRUksTUFBRixHQUFTLENBQWYsQ0FBaUIsSUFBSVgsSUFBRU8sRUFBRTRDLE1BQUYsQ0FBUyxDQUFULEVBQVc3QyxJQUFFLENBQWIsQ0FBTixDQUFzQixJQUFJRCxJQUFFRSxFQUFFNEMsTUFBRixDQUFTLElBQUU3QyxJQUFFLENBQWIsRUFBZUEsSUFBRSxDQUFqQixDQUFOLENBQTBCLElBQUlRLElBQUUsSUFBSTJJLFVBQUosQ0FBZXpKLENBQWYsRUFBaUIsRUFBakIsQ0FBTixDQUEyQixJQUFJSCxJQUFFLElBQUk0SixVQUFKLENBQWVwSixDQUFmLEVBQWlCLEVBQWpCLENBQU4sQ0FBMkIsT0FBTyxJQUFJMFosU0FBSixDQUFjbmEsQ0FBZCxFQUFnQkEsRUFBRXVhLGNBQUYsQ0FBaUJyWixDQUFqQixDQUFoQixFQUFvQ2xCLEVBQUV1YSxjQUFGLENBQWlCdGEsQ0FBakIsQ0FBcEMsQ0FBUDtBQUFnRSxDQUFqUCxDQUFrUGthLFVBQVU5WixTQUFWLENBQW9Cb2MsS0FBcEIsR0FBMEIsVUFBUzliLENBQVQsRUFBVztBQUFDLE1BQUcsS0FBSytaLFVBQUwsRUFBSCxFQUFxQjtBQUFDLFdBQU8vWixDQUFQO0FBQVMsT0FBR0EsRUFBRStaLFVBQUYsRUFBSCxFQUFrQjtBQUFDLFdBQU8sSUFBUDtBQUFZLE9BQUcsS0FBS2xXLENBQUwsQ0FBTzhRLE1BQVAsQ0FBYzNVLEVBQUU2RCxDQUFoQixDQUFILEVBQXNCO0FBQUMsUUFBRyxLQUFLMkQsQ0FBTCxDQUFPbU4sTUFBUCxDQUFjM1UsRUFBRXdILENBQWhCLENBQUgsRUFBc0I7QUFBQyxhQUFPLEtBQUsyUyxLQUFMLEVBQVA7QUFBb0IsWUFBTyxLQUFLVixLQUFMLENBQVdXLFdBQVgsRUFBUDtBQUFnQyxPQUFJL2EsSUFBRVcsRUFBRTZELENBQUYsQ0FBSWlRLFFBQUosQ0FBYSxLQUFLalEsQ0FBbEIsQ0FBTixDQUEyQixJQUFJOUQsSUFBRUMsRUFBRXdILENBQUYsQ0FBSXNNLFFBQUosQ0FBYSxLQUFLdE0sQ0FBbEIsQ0FBTixDQUEyQixJQUFJakgsSUFBRVIsRUFBRWtULE1BQUYsQ0FBUzVULENBQVQsQ0FBTixDQUFrQixJQUFJSSxJQUFFYyxFQUFFbVYsTUFBRixHQUFXNUIsUUFBWCxDQUFvQixLQUFLalEsQ0FBekIsRUFBNEJpUSxRQUE1QixDQUFxQzlULEVBQUU2RCxDQUF2QyxDQUFOLENBQWdELElBQUl0RSxJQUFFZ0IsRUFBRThVLFFBQUYsQ0FBVyxLQUFLeFIsQ0FBTCxDQUFPaVEsUUFBUCxDQUFnQnJVLENBQWhCLENBQVgsRUFBK0JxVSxRQUEvQixDQUF3QyxLQUFLdE0sQ0FBN0MsQ0FBTixDQUFzRCxPQUFPLElBQUlnUyxTQUFKLENBQWMsS0FBS0MsS0FBbkIsRUFBeUJoYSxDQUF6QixFQUEyQkYsQ0FBM0IsQ0FBUDtBQUFxQyxDQUF6WixDQUEwWmlhLFVBQVU5WixTQUFWLENBQW9CcWMsT0FBcEIsR0FBNEIsWUFBVTtBQUFDLE1BQUcsS0FBS2hDLFVBQUwsRUFBSCxFQUFxQjtBQUFDLFdBQU8sSUFBUDtBQUFZLE9BQUcsS0FBS3ZTLENBQUwsQ0FBTzJSLFlBQVAsR0FBc0I5SixNQUF0QixNQUFnQyxDQUFuQyxFQUFxQztBQUFDLFdBQU8sS0FBS29LLEtBQUwsQ0FBV1csV0FBWCxFQUFQO0FBQWdDLE9BQUl0YSxJQUFFLEtBQUsyWixLQUFMLENBQVdHLGNBQVgsQ0FBMEIxUSxXQUFXOFMsT0FBWCxDQUFtQixDQUFuQixDQUExQixDQUFOLENBQXVELElBQUlqYyxJQUFFLEtBQUswWixLQUFMLENBQVdHLGNBQVgsQ0FBMEIxUSxXQUFXOFMsT0FBWCxDQUFtQixDQUFuQixDQUExQixDQUFOLENBQXVELElBQUl6YixJQUFFLEtBQUtzRCxDQUFMLENBQU82UixNQUFQLEdBQWdCTCxRQUFoQixDQUF5QnRWLENBQXpCLEVBQTRCZ1UsR0FBNUIsQ0FBZ0MsS0FBSzBGLEtBQUwsQ0FBV2xaLENBQTNDLEVBQThDMFMsTUFBOUMsQ0FBcUQsS0FBS3pMLENBQUwsQ0FBTzZOLFFBQVAsQ0FBZ0J2VixDQUFoQixDQUFyRCxDQUFOLENBQStFLElBQUlFLElBQUVPLEVBQUVtVixNQUFGLEdBQVc1QixRQUFYLENBQW9CLEtBQUtqUSxDQUFMLENBQU93UixRQUFQLENBQWdCdlYsQ0FBaEIsQ0FBcEIsQ0FBTixDQUE4QyxJQUFJTCxJQUFFYyxFQUFFOFUsUUFBRixDQUFXLEtBQUt4UixDQUFMLENBQU9pUSxRQUFQLENBQWdCOVQsQ0FBaEIsQ0FBWCxFQUErQjhULFFBQS9CLENBQXdDLEtBQUt0TSxDQUE3QyxDQUFOLENBQXNELE9BQU8sSUFBSWdTLFNBQUosQ0FBYyxLQUFLQyxLQUFuQixFQUF5QnpaLENBQXpCLEVBQTJCUCxDQUEzQixDQUFQO0FBQXFDLENBQXJkLENBQXNkK1osVUFBVTlaLFNBQVYsQ0FBb0J1YyxVQUFwQixHQUErQixVQUFTbmMsQ0FBVCxFQUFXO0FBQUMsTUFBRyxLQUFLaWEsVUFBTCxFQUFILEVBQXFCO0FBQUMsV0FBTyxJQUFQO0FBQVksT0FBR2phLEVBQUV1UCxNQUFGLE1BQVksQ0FBZixFQUFpQjtBQUFDLFdBQU8sS0FBS29LLEtBQUwsQ0FBV1csV0FBWCxFQUFQO0FBQWdDLE9BQUkvYSxJQUFFUyxDQUFOLENBQVEsSUFBSVAsSUFBRUYsRUFBRWdXLFFBQUYsQ0FBVyxJQUFJbk0sVUFBSixDQUFlLEdBQWYsQ0FBWCxDQUFOLENBQXNDLElBQUk3SSxJQUFFLEtBQUs0SyxNQUFMLEVBQU4sQ0FBb0IsSUFBSXhMLElBQUUsSUFBTixDQUFXLElBQUlPLENBQUosQ0FBTSxLQUFJQSxJQUFFVCxFQUFFbVAsU0FBRixLQUFjLENBQXBCLEVBQXNCMU8sSUFBRSxDQUF4QixFQUEwQixFQUFFQSxDQUE1QixFQUE4QjtBQUFDUCxRQUFFQSxFQUFFMGEsS0FBRixFQUFGLENBQVksSUFBSTVaLElBQUVoQixFQUFFcVEsT0FBRixDQUFVNVAsQ0FBVixDQUFOLENBQW1CLElBQUlFLElBQUViLEVBQUV1USxPQUFGLENBQVU1UCxDQUFWLENBQU4sQ0FBbUIsSUFBR08sS0FBR0wsQ0FBTixFQUFRO0FBQUNULFVBQUVBLEVBQUVxYyxLQUFGLENBQVF2YixJQUFFLElBQUYsR0FBT0YsQ0FBZixDQUFGO0FBQW9CO0FBQUMsVUFBT1osQ0FBUDtBQUFTLENBQTFVLENBQTJVK1osVUFBVTlaLFNBQVYsQ0FBb0J3YyxTQUFwQixHQUE4QixZQUFVO0FBQUMsTUFBSXpjLElBQUUsS0FBSythLElBQUwsR0FBWXJCLFlBQVosRUFBTixDQUFpQyxJQUFJaFosSUFBRSxLQUFLc2EsSUFBTCxHQUFZdEIsWUFBWixFQUFOLENBQWlDLElBQUk1WixJQUFFLEtBQUtrYSxLQUFMLENBQVc0QixJQUFYLEdBQWtCbEMsWUFBbEIsRUFBTixDQUF1QyxJQUFJblosSUFBRSxLQUFLeVosS0FBTCxDQUFXNkIsSUFBWCxHQUFrQm5DLFlBQWxCLEVBQU4sQ0FBdUMsSUFBSTdaLElBQUUsS0FBS21hLEtBQUwsQ0FBVzJCLElBQVgsRUFBTixDQUF3QixJQUFJcmIsSUFBRUksRUFBRWtWLFFBQUYsQ0FBV2xWLENBQVgsRUFBY3lNLEdBQWQsQ0FBa0J0TixDQUFsQixDQUFOLENBQTJCLElBQUlELElBQUVJLEVBQUU0VixRQUFGLENBQVc1VixDQUFYLEVBQWM0VixRQUFkLENBQXVCNVYsQ0FBdkIsRUFBMEJzVSxHQUExQixDQUE4QnhVLEVBQUU4VixRQUFGLENBQVc1VixDQUFYLENBQTlCLEVBQTZDc1UsR0FBN0MsQ0FBaUQvVCxDQUFqRCxFQUFvRDRNLEdBQXBELENBQXdEdE4sQ0FBeEQsQ0FBTixDQUFpRSxPQUFPUyxFQUFFNFUsTUFBRixDQUFTdFYsQ0FBVCxDQUFQO0FBQW1CLENBQWhVLENBQWlVbWEsVUFBVTlaLFNBQVYsQ0FBb0IyQixRQUFwQixHQUE2QixZQUFVO0FBQUMsU0FBTSxNQUFJLEtBQUttWixJQUFMLEdBQVlyQixZQUFaLEdBQTJCOVgsUUFBM0IsRUFBSixHQUEwQyxHQUExQyxHQUE4QyxLQUFLb1osSUFBTCxHQUFZdEIsWUFBWixHQUEyQjlYLFFBQTNCLEVBQTlDLEdBQW9GLEdBQTFGO0FBQThGLENBQXRJLENBQXVJbVksVUFBVTlaLFNBQVYsQ0FBb0J5YyxRQUFwQixHQUE2QixZQUFVO0FBQUMsTUFBSW5jLElBQUUsS0FBS3laLEtBQUwsQ0FBVzJCLElBQVgsRUFBTixDQUF3QixJQUFHLEtBQUtyQixVQUFMLEVBQUgsRUFBcUI7QUFBQyxVQUFNLElBQUl2YSxLQUFKLENBQVUsdUJBQVYsQ0FBTjtBQUF5QyxPQUFJZSxJQUFFLEtBQUtpYSxJQUFMLEdBQVlyQixZQUFaLEVBQU4sQ0FBaUMsSUFBSXJaLElBQUUsS0FBSzJhLElBQUwsR0FBWXRCLFlBQVosRUFBTixDQUFpQyxJQUFHNVksRUFBRTZMLFNBQUYsQ0FBWWxELFdBQVdtRCxHQUF2QixJQUE0QixDQUE1QixJQUErQjlMLEVBQUU2TCxTQUFGLENBQVlwTSxFQUFFOFQsUUFBRixDQUFXNUssV0FBV21ELEdBQXRCLENBQVosSUFBd0MsQ0FBMUUsRUFBNEU7QUFBQyxVQUFNLElBQUk3TSxLQUFKLENBQVUsNEJBQVYsQ0FBTjtBQUE4QyxPQUFHTSxFQUFFc00sU0FBRixDQUFZbEQsV0FBV21ELEdBQXZCLElBQTRCLENBQTVCLElBQStCdk0sRUFBRXNNLFNBQUYsQ0FBWXBNLEVBQUU4VCxRQUFGLENBQVc1SyxXQUFXbUQsR0FBdEIsQ0FBWixJQUF3QyxDQUExRSxFQUE0RTtBQUFDLFVBQU0sSUFBSTdNLEtBQUosQ0FBVSw0QkFBVixDQUFOO0FBQThDLE9BQUcsQ0FBQyxLQUFLMGMsU0FBTCxFQUFKLEVBQXFCO0FBQUMsVUFBTSxJQUFJMWMsS0FBSixDQUFVLDRCQUFWLENBQU47QUFBOEMsT0FBRyxLQUFLNlYsUUFBTCxDQUFjclYsQ0FBZCxFQUFpQitaLFVBQWpCLEVBQUgsRUFBaUM7QUFBQyxVQUFNLElBQUl2YSxLQUFKLENBQVUsc0NBQVYsQ0FBTjtBQUF3RCxVQUFPLElBQVA7QUFBWSxDQUFqbUI7QUFDbmtGOztBQUVBLElBQUk0YyxZQUFXLFlBQVU7QUFBQyxNQUFJcmMsSUFBRSxpRUFBTixDQUF3RSxJQUFJRyxJQUFFLHdFQUFOLENBQStFLElBQUlDLElBQUUsU0FBT0QsQ0FBUCxHQUFTLEtBQWYsQ0FBcUIsSUFBSVQsSUFBRSxJQUFJNGMsTUFBSixDQUFXLHVDQUFxQ3RjLENBQXJDLEdBQXVDLEdBQXZDLEdBQTJDSSxDQUEzQyxHQUE2QyxHQUF4RCxFQUE0RCxHQUE1RCxDQUFOLENBQXVFLElBQUlHLElBQUUsSUFBSStiLE1BQUosQ0FBVyx3QkFBWCxFQUFvQyxHQUFwQyxDQUFOLENBQStDLElBQUloZCxJQUFFLEVBQUMsS0FBSSxHQUFMLEVBQVMsS0FBSSxHQUFiLEVBQWlCLE1BQUssSUFBdEIsRUFBMkJTLEdBQUUsSUFBN0IsRUFBa0NQLEdBQUUsSUFBcEMsRUFBeUNvQixHQUFFLElBQTNDLEVBQWdEcUIsR0FBRSxJQUFsRCxFQUF1REosR0FBRSxJQUF6RCxFQUFOLENBQXFFLFNBQVN0QyxDQUFULENBQVdlLENBQVgsRUFBYWlDLENBQWIsRUFBZTNCLENBQWYsRUFBaUI7QUFBQyxXQUFPMkIsSUFBRWpELEVBQUVpRCxDQUFGLENBQUYsR0FBT1EsT0FBT0MsWUFBUCxDQUFvQkosU0FBU2hDLENBQVQsRUFBVyxFQUFYLENBQXBCLENBQWQ7QUFBa0QsT0FBSVgsSUFBRSxJQUFJOEMsTUFBSixDQUFXLEVBQVgsQ0FBTixDQUFxQixJQUFJdkMsSUFBRSxJQUFOLENBQVcsSUFBSWhCLElBQUUsRUFBQyxLQUFJTSxNQUFMLEVBQVksS0FBSWlKLEtBQWhCLEVBQU4sQ0FBNkIsSUFBSWhKLElBQUVELE9BQU9rQixjQUFiLENBQTRCLE9BQU8sVUFBU2lELENBQVQsRUFBV25DLENBQVgsRUFBYTtBQUFDLFFBQUlqQixJQUFFb0QsRUFBRXNZLEtBQUYsQ0FBUTdjLENBQVIsQ0FBTixDQUFpQixJQUFJb0UsQ0FBSixDQUFNLElBQUlFLElBQUVuRCxFQUFFLENBQUYsQ0FBTixDQUFXLElBQUlQLElBQUUsS0FBTixDQUFZLElBQUcsUUFBTTBELENBQVQsRUFBVztBQUFDRixVQUFFLEVBQUY7QUFBSyxLQUFqQixNQUFxQjtBQUFDLFVBQUcsUUFBTUUsQ0FBVCxFQUFXO0FBQUNGLFlBQUUsRUFBRjtBQUFLLE9BQWpCLE1BQXFCO0FBQUNBLFlBQUUsRUFBRixDQUFLeEQsSUFBRSxJQUFGO0FBQU87QUFBQyxTQUFJdUIsQ0FBSixDQUFNLElBQUlJLElBQUUsQ0FBQzZCLENBQUQsQ0FBTixDQUFVLEtBQUksSUFBSWhELElBQUUsSUFBRVIsQ0FBUixFQUFVaUMsSUFBRTFCLEVBQUVSLE1BQWxCLEVBQXlCUyxJQUFFeUIsQ0FBM0IsRUFBNkIsRUFBRXpCLENBQS9CLEVBQWlDO0FBQUNrRCxVQUFFbkQsRUFBRUMsQ0FBRixDQUFGLENBQU8sSUFBSStDLENBQUosQ0FBTSxRQUFPRyxFQUFFZixVQUFGLENBQWEsQ0FBYixDQUFQLEdBQXdCO0FBQVFZLGNBQUU1QixFQUFFLENBQUYsQ0FBRixDQUFPNEIsRUFBRWhDLEtBQUdnQyxFQUFFeEQsTUFBUCxJQUFlLENBQUUyRCxDQUFqQixDQUFvQm5DLElBQUUsS0FBSyxDQUFQLENBQVMsTUFBTSxLQUFLLEVBQUw7QUFBUW1DLGNBQUVBLEVBQUUyRSxTQUFGLENBQVksQ0FBWixFQUFjM0UsRUFBRTNELE1BQUYsR0FBUyxDQUF2QixDQUFGLENBQTRCLElBQUcyRCxFQUFFMEIsT0FBRixDQUFVbEYsQ0FBVixNQUFlLENBQUMsQ0FBbkIsRUFBcUI7QUFBQ3dELGdCQUFFQSxFQUFFd1ksT0FBRixDQUFVamMsQ0FBVixFQUFZaEIsQ0FBWixDQUFGO0FBQWlCLGVBQUUwQyxFQUFFLENBQUYsQ0FBRixDQUFPLElBQUcsQ0FBQ0osQ0FBSixFQUFNO0FBQUMsZ0JBQUdnQyxhQUFha0YsS0FBaEIsRUFBc0I7QUFBQ2xILGtCQUFFZ0MsRUFBRXhELE1BQUo7QUFBVyxhQUFsQyxNQUFzQztBQUFDd0Isa0JBQUVtQyxLQUFHL0QsQ0FBTCxDQUFPO0FBQU07QUFBQyxhQUFFNEIsQ0FBRixJQUFLbUMsQ0FBTCxDQUFPbkMsSUFBRSxLQUFLLENBQVAsQ0FBUyxNQUFNLEtBQUssRUFBTDtBQUFRZ0MsY0FBRTVCLEVBQUUsQ0FBRixDQUFGLENBQU9BLEVBQUUyWixPQUFGLENBQVUvWCxFQUFFaEMsS0FBR2dDLEVBQUV4RCxNQUFQLElBQWUsRUFBekIsRUFBNkJ3QixJQUFFLEtBQUssQ0FBUCxDQUFTLE1BQU0sS0FBSyxFQUFMO0FBQVFJLFlBQUV3YSxLQUFGLEdBQVUsTUFBTSxLQUFLLEdBQUw7QUFBUzVZLGNBQUU1QixFQUFFLENBQUYsQ0FBRixDQUFPNEIsRUFBRWhDLEtBQUdnQyxFQUFFeEQsTUFBUCxJQUFlLEtBQWYsQ0FBcUJ3QixJQUFFLEtBQUssQ0FBUCxDQUFTLE1BQU0sS0FBSyxHQUFMO0FBQVNnQyxjQUFFNUIsRUFBRSxDQUFGLENBQUYsQ0FBTzRCLEVBQUVoQyxLQUFHZ0MsRUFBRXhELE1BQVAsSUFBZSxJQUFmLENBQW9Cd0IsSUFBRSxLQUFLLENBQVAsQ0FBUyxNQUFNLEtBQUssR0FBTDtBQUFTZ0MsY0FBRTVCLEVBQUUsQ0FBRixDQUFGLENBQU80QixFQUFFaEMsS0FBR2dDLEVBQUV4RCxNQUFQLElBQWUsSUFBZixDQUFvQndCLElBQUUsS0FBSyxDQUFQLENBQVMsTUFBTSxLQUFLLEdBQUw7QUFBU2dDLGNBQUU1QixFQUFFLENBQUYsQ0FBRixDQUFPQSxFQUFFMlosT0FBRixDQUFVL1gsRUFBRWhDLEtBQUdnQyxFQUFFeEQsTUFBUCxJQUFlLEVBQXpCLEVBQTZCd0IsSUFBRSxLQUFLLENBQVAsQ0FBUyxNQUFNLEtBQUssR0FBTDtBQUFTSSxZQUFFd2EsS0FBRixHQUFVLE1BQTFpQjtBQUFpakIsU0FBR25jLENBQUgsRUFBSztBQUFDLFVBQUcyQixFQUFFNUIsTUFBRixLQUFXLENBQWQsRUFBZ0I7QUFBQyxjQUFNLElBQUlaLEtBQUosRUFBTjtBQUFrQixXQUFFcUUsRUFBRSxDQUFGLENBQUY7QUFBTyxLQUFoRCxNQUFvRDtBQUFDLFVBQUc3QixFQUFFNUIsTUFBTCxFQUFZO0FBQUMsY0FBTSxJQUFJWixLQUFKLEVBQU47QUFBa0I7QUFBQyxTQUFHcUMsQ0FBSCxFQUFLO0FBQUMsVUFBSUMsSUFBRSxTQUFGQSxDQUFFLENBQVM4RixDQUFULEVBQVdGLENBQVgsRUFBYTtBQUFDLFlBQUlJLElBQUVGLEVBQUVGLENBQUYsQ0FBTixDQUFXLElBQUdJLEtBQUcsUUFBT0EsQ0FBUCx5Q0FBT0EsQ0FBUCxPQUFXLFFBQWpCLEVBQTBCO0FBQUMsY0FBSW5ILElBQUUsSUFBTixDQUFXLEtBQUksSUFBSTJHLENBQVIsSUFBYVEsQ0FBYixFQUFlO0FBQUMsZ0JBQUdoSSxFQUFFb0MsSUFBRixDQUFPNEYsQ0FBUCxFQUFTUixDQUFULEtBQWFRLE1BQUlGLENBQXBCLEVBQXNCO0FBQUMsa0JBQUlKLElBQUUxRixFQUFFZ0csQ0FBRixFQUFJUixDQUFKLENBQU4sQ0FBYSxJQUFHRSxNQUFJLEtBQUssQ0FBWixFQUFjO0FBQUNNLGtCQUFFUixDQUFGLElBQUtFLENBQUw7QUFBTyxlQUF0QixNQUEwQjtBQUFDLG9CQUFHLENBQUM3RyxDQUFKLEVBQU07QUFBQ0Esc0JBQUUsRUFBRjtBQUFLLG1CQUFFMEIsSUFBRixDQUFPaUYsQ0FBUDtBQUFVO0FBQUM7QUFBQyxlQUFHM0csQ0FBSCxFQUFLO0FBQUMsaUJBQUksSUFBSTRHLElBQUU1RyxFQUFFUCxNQUFaLEVBQW1CLEVBQUVtSCxDQUFGLElBQUssQ0FBeEIsR0FBMkI7QUFBQyxxQkFBT08sRUFBRW5ILEVBQUU0RyxDQUFGLENBQUYsQ0FBUDtBQUFlO0FBQUM7QUFBQyxnQkFBTzFGLEVBQUVLLElBQUYsQ0FBTzBGLENBQVAsRUFBU0YsQ0FBVCxFQUFXSSxDQUFYLENBQVA7QUFBcUIsT0FBcFAsQ0FBcVBqRSxJQUFFL0IsRUFBRSxFQUFDLElBQUcrQixDQUFKLEVBQUYsRUFBUyxFQUFULENBQUY7QUFBZSxZQUFPQSxDQUFQO0FBQVMsR0FBcGxDO0FBQXFsQyxDQUFybUQsRUFBZDtBQUNBLElBQUcsT0FBTzBULElBQVAsSUFBYSxXQUFiLElBQTBCLENBQUNBLElBQTlCLEVBQW1DO0FBQUMsVUE2RTNCQSxJQTdFMkIsVUFBSyxFQUFMO0FBQVEsS0FBRyxPQUFPQSxLQUFLa0YsSUFBWixJQUFrQixXQUFsQixJQUErQixDQUFDbEYsS0FBS2tGLElBQXhDLEVBQTZDO0FBQUNsRixPQUFLa0YsSUFBTCxHQUFVLEVBQVY7QUFBYSxNQUFLQSxJQUFMLENBQVVDLFFBQVYsR0FBbUIsSUFBSSxZQUFVO0FBQUMsT0FBS0MsZ0JBQUwsR0FBc0IsVUFBU3BjLENBQVQsRUFBVztBQUFDLFFBQUlULElBQUVTLEVBQUVjLFFBQUYsQ0FBVyxFQUFYLENBQU4sQ0FBcUIsSUFBSXZCLEVBQUVNLE1BQUYsR0FBUyxDQUFWLElBQWMsQ0FBakIsRUFBbUI7QUFBQ04sVUFBRSxNQUFJQSxDQUFOO0FBQVEsWUFBT0EsQ0FBUDtBQUFTLEdBQTVGLENBQTZGLEtBQUs4Yyw2QkFBTCxHQUFtQyxVQUFTMWMsQ0FBVCxFQUFXO0FBQUMsUUFBSVgsSUFBRVcsRUFBRW1CLFFBQUYsQ0FBVyxFQUFYLENBQU4sQ0FBcUIsSUFBRzlCLEVBQUVxRCxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsS0FBZSxHQUFsQixFQUFzQjtBQUFDLFVBQUdyRCxFQUFFYSxNQUFGLEdBQVMsQ0FBVCxJQUFZLENBQWYsRUFBaUI7QUFBQ2IsWUFBRSxNQUFJQSxDQUFOO0FBQVEsT0FBMUIsTUFBOEI7QUFBQyxZQUFHLENBQUNBLEVBQUUrYyxLQUFGLENBQVEsUUFBUixDQUFKLEVBQXNCO0FBQUMvYyxjQUFFLE9BQUtBLENBQVA7QUFBUztBQUFDO0FBQUMsS0FBeEYsTUFBNEY7QUFBQyxVQUFJZ0IsSUFBRWhCLEVBQUVxRCxNQUFGLENBQVMsQ0FBVCxDQUFOLENBQWtCLElBQUk3QyxJQUFFUSxFQUFFSCxNQUFSLENBQWUsSUFBR0wsSUFBRSxDQUFGLElBQUssQ0FBUixFQUFVO0FBQUNBLGFBQUcsQ0FBSDtBQUFLLE9BQWhCLE1BQW9CO0FBQUMsWUFBRyxDQUFDUixFQUFFK2MsS0FBRixDQUFRLFFBQVIsQ0FBSixFQUFzQjtBQUFDdmMsZUFBRyxDQUFIO0FBQUs7QUFBQyxXQUFJVixJQUFFLEVBQU4sQ0FBUyxLQUFJLElBQUlJLElBQUUsQ0FBVixFQUFZQSxJQUFFTSxDQUFkLEVBQWdCTixHQUFoQixFQUFvQjtBQUFDSixhQUFHLEdBQUg7QUFBTyxXQUFJVyxJQUFFLElBQUlrSixVQUFKLENBQWU3SixDQUFmLEVBQWlCLEVBQWpCLENBQU4sQ0FBMkIsSUFBSVMsSUFBRUUsRUFBRThVLEdBQUYsQ0FBTTVVLENBQU4sRUFBUzZULEdBQVQsQ0FBYTdLLFdBQVdtRCxHQUF4QixDQUFOLENBQW1DOU0sSUFBRU8sRUFBRXVCLFFBQUYsQ0FBVyxFQUFYLEVBQWVrYixPQUFmLENBQXVCLElBQXZCLEVBQTRCLEVBQTVCLENBQUY7QUFBa0MsWUFBT2hkLENBQVA7QUFBUyxHQUFsWSxDQUFtWSxLQUFLc2QsbUJBQUwsR0FBeUIsVUFBU3RjLENBQVQsRUFBV1QsQ0FBWCxFQUFhO0FBQUMsV0FBT2dkLFNBQVN2YyxDQUFULEVBQVdULENBQVgsQ0FBUDtBQUFxQixHQUE1RCxDQUE2RCxLQUFLaWQsU0FBTCxHQUFlLFVBQVN6YyxDQUFULEVBQVc7QUFBQyxRQUFJd0gsSUFBRXlQLElBQU47QUFBQSxRQUFXNVcsSUFBRW1ILEVBQUUyVSxJQUFmO0FBQUEsUUFBb0JuVixJQUFFM0csRUFBRXFjLFVBQXhCO0FBQUEsUUFBbUNqZCxJQUFFWSxFQUFFc2MsVUFBdkM7QUFBQSxRQUFrRG5iLElBQUVuQixFQUFFdWMsWUFBdEQ7QUFBQSxRQUFtRTVkLElBQUVxQixFQUFFd2MsY0FBdkU7QUFBQSxRQUFzRnBaLElBQUVwRCxFQUFFeWMsT0FBMUY7QUFBQSxRQUFrR3haLElBQUVqRCxFQUFFMGMsbUJBQXRHO0FBQUEsUUFBMEhoZCxJQUFFTSxFQUFFMmMsYUFBOUg7QUFBQSxRQUE0SWplLElBQUVzQixFQUFFNGMsYUFBaEo7QUFBQSxRQUE4SmhlLElBQUVvQixFQUFFNmMsZ0JBQWxLO0FBQUEsUUFBbUxoVyxJQUFFN0csRUFBRThjLGtCQUF2TDtBQUFBLFFBQTBNelosSUFBRXJELEVBQUUrYyxnQkFBOU07QUFBQSxRQUErTjljLElBQUVELEVBQUVnZCxZQUFuTztBQUFBLFFBQWdQL1YsSUFBRWpILEVBQUVpZCxVQUFwUDtBQUFBLFFBQStQMWQsSUFBRVMsRUFBRWtkLGtCQUFuUTtBQUFBLFFBQXNSdmIsSUFBRTNCLEVBQUVtZCxXQUExUjtBQUFBLFFBQXNTOWQsSUFBRVcsRUFBRW9kLE1BQTFTO0FBQUEsUUFBaVQvYixJQUFFckIsRUFBRXFkLGVBQXJUO0FBQUEsUUFBcVVuZCxJQUFFRixFQUFFK2IsUUFBRixDQUFXSyxTQUFsVixDQUE0VixJQUFJbmIsSUFBRS9CLE9BQU9vZSxJQUFQLENBQVkzZCxDQUFaLENBQU4sQ0FBcUIsSUFBR3NCLEVBQUV4QixNQUFGLElBQVUsQ0FBYixFQUFlO0FBQUMsWUFBSyxpQ0FBTDtBQUF1QyxTQUFJK0YsSUFBRXZFLEVBQUUsQ0FBRixDQUFOLENBQVcsSUFBRyx5R0FBeUc2RCxPQUF6RyxDQUFpSCxNQUFJVSxDQUFKLEdBQU0sR0FBdkgsS0FBNkgsQ0FBQyxDQUFqSSxFQUFtSTtBQUFDLFlBQUssb0JBQWtCQSxDQUF2QjtBQUF5QixTQUFHQSxLQUFHLE1BQU4sRUFBYTtBQUFDLGFBQU8sSUFBSW1CLENBQUosQ0FBTWhILEVBQUU2RixDQUFGLENBQU4sQ0FBUDtBQUFtQixTQUFHQSxLQUFHLEtBQU4sRUFBWTtBQUFDLGFBQU8sSUFBSXBHLENBQUosQ0FBTU8sRUFBRTZGLENBQUYsQ0FBTixDQUFQO0FBQW1CLFNBQUdBLEtBQUcsUUFBTixFQUFlO0FBQUMsYUFBTyxJQUFJckUsQ0FBSixDQUFNeEIsRUFBRTZGLENBQUYsQ0FBTixDQUFQO0FBQW1CLFNBQUdBLEtBQUcsUUFBTixFQUFlO0FBQUMsYUFBTyxJQUFJN0csQ0FBSixDQUFNZ0IsRUFBRTZGLENBQUYsQ0FBTixDQUFQO0FBQW1CLFNBQUdBLEtBQUcsTUFBTixFQUFhO0FBQUMsYUFBTyxJQUFJcEMsQ0FBSixDQUFNekQsRUFBRTZGLENBQUYsQ0FBTixDQUFQO0FBQW1CLFNBQUdBLEtBQUcsS0FBTixFQUFZO0FBQUMsYUFBTyxJQUFJdkMsQ0FBSixDQUFNdEQsRUFBRTZGLENBQUYsQ0FBTixDQUFQO0FBQW1CLFNBQUdBLEtBQUcsTUFBTixFQUFhO0FBQUMsYUFBTyxJQUFJOUYsQ0FBSixDQUFNQyxFQUFFNkYsQ0FBRixDQUFOLENBQVA7QUFBbUIsU0FBR0EsS0FBRyxTQUFOLEVBQWdCO0FBQUMsYUFBTyxJQUFJOUcsQ0FBSixDQUFNaUIsRUFBRTZGLENBQUYsQ0FBTixDQUFQO0FBQW1CLFNBQUdBLEtBQUcsUUFBTixFQUFlO0FBQUMsYUFBTyxJQUFJNUcsQ0FBSixDQUFNZSxFQUFFNkYsQ0FBRixDQUFOLENBQVA7QUFBbUIsU0FBR0EsS0FBRyxRQUFOLEVBQWU7QUFBQyxhQUFPLElBQUlxQixDQUFKLENBQU1sSCxFQUFFNkYsQ0FBRixDQUFOLENBQVA7QUFBbUIsU0FBR0EsS0FBRyxRQUFOLEVBQWU7QUFBQyxhQUFPLElBQUluQyxDQUFKLENBQU0xRCxFQUFFNkYsQ0FBRixDQUFOLENBQVA7QUFBbUIsU0FBR0EsS0FBRyxRQUFOLEVBQWU7QUFBQyxhQUFPLElBQUl2RixDQUFKLENBQU1OLEVBQUU2RixDQUFGLENBQU4sQ0FBUDtBQUFtQixTQUFHQSxLQUFHLFNBQU4sRUFBZ0I7QUFBQyxhQUFPLElBQUl5QixDQUFKLENBQU10SCxFQUFFNkYsQ0FBRixDQUFOLENBQVA7QUFBbUIsU0FBR0EsS0FBRyxTQUFOLEVBQWdCO0FBQUMsYUFBTyxJQUFJakcsQ0FBSixDQUFNSSxFQUFFNkYsQ0FBRixDQUFOLENBQVA7QUFBbUIsU0FBR0EsS0FBRyxLQUFOLEVBQVk7QUFBQyxVQUFJMUcsSUFBRWEsRUFBRTZGLENBQUYsQ0FBTixDQUFXLElBQUk2QixJQUFFLEVBQU4sQ0FBUyxLQUFJLElBQUluRSxJQUFFLENBQVYsRUFBWUEsSUFBRXBFLEVBQUVXLE1BQWhCLEVBQXVCeUQsR0FBdkIsRUFBMkI7QUFBQyxZQUFJNkQsSUFBRTdHLEVBQUVwQixFQUFFb0UsQ0FBRixDQUFGLENBQU4sQ0FBY21FLEVBQUUzRixJQUFGLENBQU9xRixDQUFQO0FBQVUsY0FBTyxJQUFJcEYsQ0FBSixDQUFNLEVBQUM0YixPQUFNbFcsQ0FBUCxFQUFOLENBQVA7QUFBd0IsU0FBRzdCLEtBQUcsS0FBTixFQUFZO0FBQUMsVUFBSTFHLElBQUVhLEVBQUU2RixDQUFGLENBQU4sQ0FBVyxJQUFJNkIsSUFBRSxFQUFOLENBQVMsS0FBSSxJQUFJbkUsSUFBRSxDQUFWLEVBQVlBLElBQUVwRSxFQUFFVyxNQUFoQixFQUF1QnlELEdBQXZCLEVBQTJCO0FBQUMsWUFBSTZELElBQUU3RyxFQUFFcEIsRUFBRW9FLENBQUYsQ0FBRixDQUFOLENBQWNtRSxFQUFFM0YsSUFBRixDQUFPcUYsQ0FBUDtBQUFVLGNBQU8sSUFBSTFILENBQUosQ0FBTSxFQUFDa2UsT0FBTWxXLENBQVAsRUFBTixDQUFQO0FBQXdCLFNBQUc3QixLQUFHLEtBQU4sRUFBWTtBQUFDLFVBQUlvQixJQUFFakgsRUFBRTZGLENBQUYsQ0FBTixDQUFXLElBQUd0RyxPQUFPSCxTQUFQLENBQWlCMkIsUUFBakIsQ0FBMEJhLElBQTFCLENBQStCcUYsQ0FBL0IsTUFBb0MsZ0JBQXBDLElBQXNEQSxFQUFFbkgsTUFBRixJQUFVLENBQW5FLEVBQXFFO0FBQUMsWUFBSXlCLElBQUVoQixFQUFFMEcsRUFBRSxDQUFGLENBQUYsQ0FBTixDQUFjLE9BQU8sSUFBSXZGLENBQUosQ0FBTSxFQUFDbWMsS0FBSTVXLEVBQUUsQ0FBRixDQUFMLEVBQVU2VyxVQUFTN1csRUFBRSxDQUFGLENBQW5CLEVBQXdCOFcsS0FBSXhjLENBQTVCLEVBQU4sQ0FBUDtBQUE2QyxPQUFqSSxNQUFxSTtBQUFDLFlBQUkvQixJQUFFLEVBQU4sQ0FBUyxJQUFHeUgsRUFBRTZXLFFBQUYsS0FBYWxmLFNBQWhCLEVBQTBCO0FBQUNZLFlBQUVzZSxRQUFGLEdBQVc3VyxFQUFFNlcsUUFBYjtBQUFzQixhQUFHN1csRUFBRTRXLEdBQUYsS0FBUWpmLFNBQVgsRUFBcUI7QUFBQ1ksWUFBRXFlLEdBQUYsR0FBTTVXLEVBQUU0VyxHQUFSO0FBQVksYUFBRzVXLEVBQUU4VyxHQUFGLEtBQVFuZixTQUFYLEVBQXFCO0FBQUMsZ0JBQUssbUNBQUw7QUFBeUMsV0FBRW1mLEdBQUYsR0FBTXhkLEVBQUUwRyxFQUFFOFcsR0FBSixDQUFOLENBQWUsT0FBTyxJQUFJcmMsQ0FBSixDQUFNbEMsQ0FBTixDQUFQO0FBQWdCO0FBQUM7QUFBQyxHQUFob0QsQ0FBaW9ELEtBQUt3ZSxhQUFMLEdBQW1CLFVBQVN4ZSxDQUFULEVBQVc7QUFBQyxRQUFJUyxJQUFFLEtBQUt3YyxTQUFMLENBQWVqZCxDQUFmLENBQU4sQ0FBd0IsT0FBT1MsRUFBRWdlLGFBQUYsRUFBUDtBQUF5QixHQUFoRjtBQUFpRixDQUE5dkUsRUFBbkIsQ0FBa3hFaEgsS0FBS2tGLElBQUwsQ0FBVUMsUUFBVixDQUFtQjhCLFdBQW5CLEdBQStCLFVBQVNqZSxDQUFULEVBQVc7QUFBQyxNQUFJTCxJQUFFLEVBQU4sQ0FBUyxJQUFJSSxJQUFFcUMsU0FBU3BDLEVBQUVxQyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBVCxFQUF1QixFQUF2QixDQUFOLENBQWlDLElBQUluRCxJQUFFdUYsS0FBS2MsS0FBTCxDQUFXeEYsSUFBRSxFQUFiLENBQU4sQ0FBdUIsSUFBSU4sSUFBRU0sSUFBRSxFQUFSLENBQVcsSUFBSUosSUFBRVQsSUFBRSxHQUFGLEdBQU1PLENBQVosQ0FBYyxJQUFJRCxJQUFFLEVBQU4sQ0FBUyxLQUFJLElBQUlSLElBQUUsQ0FBVixFQUFZQSxJQUFFZ0IsRUFBRUgsTUFBaEIsRUFBdUJiLEtBQUcsQ0FBMUIsRUFBNEI7QUFBQyxRQUFJRixJQUFFc0QsU0FBU3BDLEVBQUVxQyxNQUFGLENBQVNyRCxDQUFULEVBQVcsQ0FBWCxDQUFULEVBQXVCLEVBQXZCLENBQU4sQ0FBaUMsSUFBSUQsSUFBRSxDQUFDLGFBQVdELEVBQUVnQyxRQUFGLENBQVcsQ0FBWCxDQUFaLEVBQTJCYyxLQUEzQixDQUFpQyxDQUFDLENBQWxDLENBQU4sQ0FBMkNwQyxJQUFFQSxJQUFFVCxFQUFFc0QsTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLENBQUosQ0FBa0IsSUFBR3RELEVBQUVzRCxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsS0FBZSxHQUFsQixFQUFzQjtBQUFDLFVBQUk5QyxJQUFFLElBQUlvSixVQUFKLENBQWVuSixDQUFmLEVBQWlCLENBQWpCLENBQU4sQ0FBMEJHLElBQUVBLElBQUUsR0FBRixHQUFNSixFQUFFdUIsUUFBRixDQUFXLEVBQVgsQ0FBUixDQUF1QnRCLElBQUUsRUFBRjtBQUFLO0FBQUMsVUFBT0csQ0FBUDtBQUFTLENBQWhXLENBQWlXcVgsS0FBS2tGLElBQUwsQ0FBVUMsUUFBVixDQUFtQitCLFdBQW5CLEdBQStCLFVBQVNsZixDQUFULEVBQVc7QUFBQyxNQUFJUSxJQUFFLFNBQUZBLENBQUUsQ0FBU1EsQ0FBVCxFQUFXO0FBQUMsUUFBSUQsSUFBRUMsRUFBRWMsUUFBRixDQUFXLEVBQVgsQ0FBTixDQUFxQixJQUFHZixFQUFFRixNQUFGLElBQVUsQ0FBYixFQUFlO0FBQUNFLFVBQUUsTUFBSUEsQ0FBTjtBQUFRLFlBQU9BLENBQVA7QUFBUyxHQUF4RSxDQUF5RSxJQUFJYixJQUFFLFNBQUZBLENBQUUsQ0FBU29CLENBQVQsRUFBVztBQUFDLFFBQUlGLElBQUUsRUFBTixDQUFTLElBQUlMLElBQUUsSUFBSTRJLFVBQUosQ0FBZXJJLENBQWYsRUFBaUIsRUFBakIsQ0FBTixDQUEyQixJQUFJTixJQUFFRCxFQUFFZSxRQUFGLENBQVcsQ0FBWCxDQUFOLENBQW9CLElBQUloQixJQUFFLElBQUVFLEVBQUVILE1BQUYsR0FBUyxDQUFqQixDQUFtQixJQUFHQyxLQUFHLENBQU4sRUFBUTtBQUFDQSxVQUFFLENBQUY7QUFBSSxTQUFJd0IsSUFBRSxFQUFOLENBQVMsS0FBSSxJQUFJUyxJQUFFLENBQVYsRUFBWUEsSUFBRWpDLENBQWQsRUFBZ0JpQyxHQUFoQixFQUFvQjtBQUFDVCxXQUFHLEdBQUg7QUFBTyxTQUFFQSxJQUFFdEIsQ0FBSixDQUFNLEtBQUksSUFBSStCLElBQUUsQ0FBVixFQUFZQSxJQUFFL0IsRUFBRUgsTUFBRixHQUFTLENBQXZCLEVBQXlCa0MsS0FBRyxDQUE1QixFQUE4QjtBQUFDLFVBQUkxQixJQUFFTCxFQUFFcUMsTUFBRixDQUFTTixDQUFULEVBQVcsQ0FBWCxDQUFOLENBQW9CLElBQUdBLEtBQUcvQixFQUFFSCxNQUFGLEdBQVMsQ0FBZixFQUFpQjtBQUFDUSxZQUFFLE1BQUlBLENBQU47QUFBUSxZQUFHYixFQUFFNEMsU0FBUy9CLENBQVQsRUFBVyxDQUFYLENBQUYsQ0FBSDtBQUFvQixZQUFPRCxDQUFQO0FBQVMsR0FBL1AsQ0FBZ1EsSUFBRyxDQUFDcEIsRUFBRStjLEtBQUYsQ0FBUSxXQUFSLENBQUosRUFBeUI7QUFBQyxVQUFLLDJCQUF5Qi9jLENBQTlCO0FBQWdDLE9BQUlGLElBQUUsRUFBTixDQUFTLElBQUlTLElBQUVQLEVBQUVtZixLQUFGLENBQVEsR0FBUixDQUFOLENBQW1CLElBQUl4ZSxJQUFFeUMsU0FBUzdDLEVBQUUsQ0FBRixDQUFULElBQWUsRUFBZixHQUFrQjZDLFNBQVM3QyxFQUFFLENBQUYsQ0FBVCxDQUF4QixDQUF1Q1QsS0FBR1UsRUFBRUcsQ0FBRixDQUFILENBQVFKLEVBQUV1RSxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsRUFBYyxLQUFJLElBQUlyRSxJQUFFLENBQVYsRUFBWUEsSUFBRUYsRUFBRU0sTUFBaEIsRUFBdUJKLEdBQXZCLEVBQTJCO0FBQUNYLFNBQUdJLEVBQUVLLEVBQUVFLENBQUYsQ0FBRixDQUFIO0FBQVcsVUFBT1gsQ0FBUDtBQUFTLENBQXZqQixDQUF3akJrWSxLQUFLa0YsSUFBTCxDQUFVa0MsVUFBVixHQUFxQixZQUFVO0FBQUMsTUFBSTNlLElBQUUsSUFBTixDQUFXLElBQUlGLElBQUUsSUFBTixDQUFXLElBQUlMLElBQUUsSUFBTixDQUFXLElBQUlNLElBQUUsSUFBTixDQUFXLElBQUlRLElBQUUsRUFBTixDQUFTLEtBQUtxZSxxQkFBTCxHQUEyQixZQUFVO0FBQUMsUUFBRyxPQUFPLEtBQUtDLEVBQVosSUFBZ0IsV0FBaEIsSUFBNkIsS0FBS0EsRUFBTCxJQUFTLElBQXpDLEVBQThDO0FBQUMsWUFBSywrQkFBTDtBQUFxQyxTQUFHLEtBQUtBLEVBQUwsQ0FBUXplLE1BQVIsR0FBZSxDQUFmLElBQWtCLENBQXJCLEVBQXVCO0FBQUMsWUFBSyxzQ0FBb0NHLEVBQUVILE1BQXRDLEdBQTZDLEtBQTdDLEdBQW1ELEtBQUt5ZSxFQUE3RDtBQUFnRSxTQUFJMWUsSUFBRSxLQUFLMGUsRUFBTCxDQUFRemUsTUFBUixHQUFlLENBQXJCLENBQXVCLElBQUlkLElBQUVhLEVBQUVrQixRQUFGLENBQVcsRUFBWCxDQUFOLENBQXFCLElBQUcvQixFQUFFYyxNQUFGLEdBQVMsQ0FBVCxJQUFZLENBQWYsRUFBaUI7QUFBQ2QsVUFBRSxNQUFJQSxDQUFOO0FBQVEsU0FBR2EsSUFBRSxHQUFMLEVBQVM7QUFBQyxhQUFPYixDQUFQO0FBQVMsS0FBbkIsTUFBdUI7QUFBQyxVQUFJRCxJQUFFQyxFQUFFYyxNQUFGLEdBQVMsQ0FBZixDQUFpQixJQUFHZixJQUFFLEVBQUwsRUFBUTtBQUFDLGNBQUssbURBQWlEYyxFQUFFa0IsUUFBRixDQUFXLEVBQVgsQ0FBdEQ7QUFBcUUsV0FBSTlCLElBQUUsTUFBSUYsQ0FBVixDQUFZLE9BQU9FLEVBQUU4QixRQUFGLENBQVcsRUFBWCxJQUFlL0IsQ0FBdEI7QUFBd0I7QUFBQyxHQUFwYixDQUFxYixLQUFLaWYsYUFBTCxHQUFtQixZQUFVO0FBQUMsUUFBRyxLQUFLTyxJQUFMLElBQVcsSUFBWCxJQUFpQixLQUFLQyxVQUF6QixFQUFvQztBQUFDLFdBQUtGLEVBQUwsR0FBUSxLQUFLRyxnQkFBTCxFQUFSLENBQWdDLEtBQUtDLEVBQUwsR0FBUSxLQUFLTCxxQkFBTCxFQUFSLENBQXFDLEtBQUtFLElBQUwsR0FBVSxLQUFLSSxFQUFMLEdBQVEsS0FBS0QsRUFBYixHQUFnQixLQUFLSixFQUEvQixDQUFrQyxLQUFLRSxVQUFMLEdBQWdCLEtBQWhCO0FBQXNCLFlBQU8sS0FBS0QsSUFBWjtBQUFpQixHQUFqTixDQUFrTixLQUFLSyxXQUFMLEdBQWlCLFlBQVU7QUFBQyxTQUFLWixhQUFMLEdBQXFCLE9BQU8sS0FBS00sRUFBWjtBQUFlLEdBQWhFLENBQWlFLEtBQUtHLGdCQUFMLEdBQXNCLFlBQVU7QUFBQyxXQUFNLEVBQU47QUFBUyxHQUExQztBQUEyQyxDQUF4MEIsQ0FBeTBCekgsS0FBS2tGLElBQUwsQ0FBVTJDLGlCQUFWLEdBQTRCLFVBQVNwZixDQUFULEVBQVc7QUFBQ3VYLE9BQUtrRixJQUFMLENBQVUyQyxpQkFBVixDQUE0QnhmLFVBQTVCLENBQXVDRCxXQUF2QyxDQUFtRHVDLElBQW5ELENBQXdELElBQXhELEVBQThELElBQUlwQyxJQUFFLElBQU4sQ0FBVyxJQUFJUyxJQUFFLElBQU4sQ0FBVyxLQUFLOGUsU0FBTCxHQUFlLFlBQVU7QUFBQyxXQUFPLEtBQUt2ZCxDQUFaO0FBQWMsR0FBeEMsQ0FBeUMsS0FBS3dkLFNBQUwsR0FBZSxVQUFTN2YsQ0FBVCxFQUFXO0FBQUMsU0FBS3FmLElBQUwsR0FBVSxJQUFWLENBQWUsS0FBS0MsVUFBTCxHQUFnQixJQUFoQixDQUFxQixLQUFLamQsQ0FBTCxHQUFPckMsQ0FBUCxDQUFTLEtBQUtvZixFQUFMLEdBQVFVLFVBQVUsS0FBS3pkLENBQWYsRUFBa0IwZCxXQUFsQixFQUFSO0FBQXdDLEdBQWhILENBQWlILEtBQUtDLFlBQUwsR0FBa0IsVUFBU2hnQixDQUFULEVBQVc7QUFBQyxTQUFLcWYsSUFBTCxHQUFVLElBQVYsQ0FBZSxLQUFLQyxVQUFMLEdBQWdCLElBQWhCLENBQXFCLEtBQUtqZCxDQUFMLEdBQU8sSUFBUCxDQUFZLEtBQUsrYyxFQUFMLEdBQVFwZixDQUFSO0FBQVUsR0FBeEYsQ0FBeUYsS0FBS3VmLGdCQUFMLEdBQXNCLFlBQVU7QUFBQyxXQUFPLEtBQUtILEVBQVo7QUFBZSxHQUFoRCxDQUFpRCxJQUFHLE9BQU83ZSxDQUFQLElBQVUsV0FBYixFQUF5QjtBQUFDLFFBQUcsT0FBT0EsQ0FBUCxJQUFVLFFBQWIsRUFBc0I7QUFBQyxXQUFLc2YsU0FBTCxDQUFldGYsQ0FBZjtBQUFrQixLQUF6QyxNQUE2QztBQUFDLFVBQUcsT0FBT0EsRUFBRTBmLEdBQVQsSUFBYyxXQUFqQixFQUE2QjtBQUFDLGFBQUtKLFNBQUwsQ0FBZXRmLEVBQUUwZixHQUFqQjtBQUFzQixPQUFwRCxNQUF3RDtBQUFDLFlBQUcsT0FBTzFmLEVBQUUyZixHQUFULElBQWMsV0FBakIsRUFBNkI7QUFBQyxlQUFLRixZQUFMLENBQWtCemYsRUFBRTJmLEdBQXBCO0FBQXlCO0FBQUM7QUFBQztBQUFDO0FBQUMsQ0FBNWxCLENBQTZsQjFnQixNQUFNRSxJQUFOLENBQVdDLE1BQVgsQ0FBa0JtWSxLQUFLa0YsSUFBTCxDQUFVMkMsaUJBQTVCLEVBQThDN0gsS0FBS2tGLElBQUwsQ0FBVWtDLFVBQXhELEVBQW9FcEgsS0FBS2tGLElBQUwsQ0FBVW1ELGVBQVYsR0FBMEIsVUFBUzVmLENBQVQsRUFBVztBQUFDdVgsT0FBS2tGLElBQUwsQ0FBVW1ELGVBQVYsQ0FBMEJoZ0IsVUFBMUIsQ0FBcUNELFdBQXJDLENBQWlEdUMsSUFBakQsQ0FBc0QsSUFBdEQsRUFBNEQsSUFBSXBDLElBQUUsSUFBTixDQUFXLElBQUlTLElBQUUsSUFBTixDQUFXLEtBQUtzZixjQUFMLEdBQW9CLFVBQVN0Z0IsQ0FBVCxFQUFXO0FBQUN1Z0IsVUFBSXZnQixFQUFFZ1gsT0FBRixLQUFhaFgsRUFBRXdnQixpQkFBRixLQUFzQixLQUF2QyxDQUE4QyxJQUFJaGdCLElBQUUsSUFBSXVXLElBQUosQ0FBU3dKLEdBQVQsQ0FBTixDQUFvQixPQUFPL2YsQ0FBUDtBQUFTLEdBQTNHLENBQTRHLEtBQUtpZ0IsVUFBTCxHQUFnQixVQUFTMWQsQ0FBVCxFQUFXekIsQ0FBWCxFQUFhZCxDQUFiLEVBQWU7QUFBQyxRQUFJVixJQUFFLEtBQUs0Z0IsV0FBWCxDQUF1QixJQUFJdGYsSUFBRSxLQUFLa2YsY0FBTCxDQUFvQnZkLENBQXBCLENBQU4sQ0FBNkIsSUFBSTFCLElBQUVrQyxPQUFPbkMsRUFBRXVmLFdBQUYsRUFBUCxDQUFOLENBQThCLElBQUdyZixLQUFHLEtBQU4sRUFBWTtBQUFDRCxVQUFFQSxFQUFFZ0MsTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLENBQUY7QUFBZ0IsU0FBSXZDLElBQUVoQixFQUFFeUQsT0FBT25DLEVBQUV3ZixRQUFGLEtBQWEsQ0FBcEIsQ0FBRixFQUF5QixDQUF6QixDQUFOLENBQWtDLElBQUl0ZSxJQUFFeEMsRUFBRXlELE9BQU9uQyxFQUFFeWYsT0FBRixFQUFQLENBQUYsRUFBc0IsQ0FBdEIsQ0FBTixDQUErQixJQUFJOWdCLElBQUVELEVBQUV5RCxPQUFPbkMsRUFBRTBmLFFBQUYsRUFBUCxDQUFGLEVBQXVCLENBQXZCLENBQU4sQ0FBZ0MsSUFBSWxnQixJQUFFZCxFQUFFeUQsT0FBT25DLEVBQUUyZixVQUFGLEVBQVAsQ0FBRixFQUF5QixDQUF6QixDQUFOLENBQWtDLElBQUlwZ0IsSUFBRWIsRUFBRXlELE9BQU9uQyxFQUFFNGYsVUFBRixFQUFQLENBQUYsRUFBeUIsQ0FBekIsQ0FBTixDQUFrQyxJQUFJdmUsSUFBRXBCLElBQUVQLENBQUYsR0FBSXdCLENBQUosR0FBTXZDLENBQU4sR0FBUWEsQ0FBUixHQUFVRCxDQUFoQixDQUFrQixJQUFHSCxNQUFJLElBQVAsRUFBWTtBQUFDLFVBQUlSLElBQUVvQixFQUFFNmYsZUFBRixFQUFOLENBQTBCLElBQUdqaEIsS0FBRyxDQUFOLEVBQVE7QUFBQyxZQUFJZSxJQUFFakIsRUFBRXlELE9BQU92RCxDQUFQLENBQUYsRUFBWSxDQUFaLENBQU4sQ0FBcUJlLElBQUVBLEVBQUVpYyxPQUFGLENBQVUsT0FBVixFQUFrQixFQUFsQixDQUFGLENBQXdCdmEsSUFBRUEsSUFBRSxHQUFGLEdBQU0xQixDQUFSO0FBQVU7QUFBQyxZQUFPMEIsSUFBRSxHQUFUO0FBQWEsR0FBM2IsQ0FBNGIsS0FBS2llLFdBQUwsR0FBaUIsVUFBU2xnQixDQUFULEVBQVdOLENBQVgsRUFBYTtBQUFDLFFBQUdNLEVBQUVLLE1BQUYsSUFBVVgsQ0FBYixFQUFlO0FBQUMsYUFBT00sQ0FBUDtBQUFTLFlBQU8sSUFBSStJLEtBQUosQ0FBVXJKLElBQUVNLEVBQUVLLE1BQUosR0FBVyxDQUFyQixFQUF3QnFDLElBQXhCLENBQTZCLEdBQTdCLElBQWtDMUMsQ0FBekM7QUFBMkMsR0FBbkcsQ0FBb0csS0FBS3NmLFNBQUwsR0FBZSxZQUFVO0FBQUMsV0FBTyxLQUFLdmQsQ0FBWjtBQUFjLEdBQXhDLENBQXlDLEtBQUt3ZCxTQUFMLEdBQWUsVUFBUzdmLENBQVQsRUFBVztBQUFDLFNBQUtxZixJQUFMLEdBQVUsSUFBVixDQUFlLEtBQUtDLFVBQUwsR0FBZ0IsSUFBaEIsQ0FBcUIsS0FBS2pkLENBQUwsR0FBT3JDLENBQVAsQ0FBUyxLQUFLb2YsRUFBTCxHQUFRNEIsT0FBT2hoQixDQUFQLENBQVI7QUFBa0IsR0FBMUYsQ0FBMkYsS0FBS2loQixjQUFMLEdBQW9CLFVBQVNwaEIsQ0FBVCxFQUFXWSxDQUFYLEVBQWFILENBQWIsRUFBZU4sQ0FBZixFQUFpQkYsQ0FBakIsRUFBbUJGLENBQW5CLEVBQXFCO0FBQUMsUUFBSWMsSUFBRSxJQUFJbVcsSUFBSixDQUFTQSxLQUFLcUssR0FBTCxDQUFTcmhCLENBQVQsRUFBV1ksSUFBRSxDQUFiLEVBQWVILENBQWYsRUFBaUJOLENBQWpCLEVBQW1CRixDQUFuQixFQUFxQkYsQ0FBckIsRUFBdUIsQ0FBdkIsQ0FBVCxDQUFOLENBQTBDLEtBQUt1aEIsU0FBTCxDQUFlemdCLENBQWY7QUFBa0IsR0FBdEcsQ0FBdUcsS0FBSzZlLGdCQUFMLEdBQXNCLFlBQVU7QUFBQyxXQUFPLEtBQUtILEVBQVo7QUFBZSxHQUFoRDtBQUFpRCxDQUFoaUMsQ0FBaWlDNWYsTUFBTUUsSUFBTixDQUFXQyxNQUFYLENBQWtCbVksS0FBS2tGLElBQUwsQ0FBVW1ELGVBQTVCLEVBQTRDckksS0FBS2tGLElBQUwsQ0FBVWtDLFVBQXRELEVBQWtFcEgsS0FBS2tGLElBQUwsQ0FBVW9FLHFCQUFWLEdBQWdDLFVBQVMvZ0IsQ0FBVCxFQUFXO0FBQUN5WCxPQUFLa0YsSUFBTCxDQUFVMkMsaUJBQVYsQ0FBNEJ4ZixVQUE1QixDQUF1Q0QsV0FBdkMsQ0FBbUR1QyxJQUFuRCxDQUF3RCxJQUF4RCxFQUE4RCxJQUFJM0IsSUFBRSxJQUFOLENBQVcsS0FBS3VnQixvQkFBTCxHQUEwQixVQUFTOWdCLENBQVQsRUFBVztBQUFDLFNBQUs4ZSxJQUFMLEdBQVUsSUFBVixDQUFlLEtBQUtDLFVBQUwsR0FBZ0IsSUFBaEIsQ0FBcUIsS0FBS2dDLFNBQUwsR0FBZS9nQixDQUFmO0FBQWlCLEdBQTNGLENBQTRGLEtBQUtnaEIsZ0JBQUwsR0FBc0IsVUFBU2hoQixDQUFULEVBQVc7QUFBQyxTQUFLOGUsSUFBTCxHQUFVLElBQVYsQ0FBZSxLQUFLQyxVQUFMLEdBQWdCLElBQWhCLENBQXFCLEtBQUtnQyxTQUFMLENBQWUxZSxJQUFmLENBQW9CckMsQ0FBcEI7QUFBdUIsR0FBN0YsQ0FBOEYsS0FBSytnQixTQUFMLEdBQWUsSUFBSWpZLEtBQUosRUFBZixDQUEyQixJQUFHLE9BQU9oSixDQUFQLElBQVUsV0FBYixFQUF5QjtBQUFDLFFBQUcsT0FBT0EsRUFBRW9lLEtBQVQsSUFBZ0IsV0FBbkIsRUFBK0I7QUFBQyxXQUFLNkMsU0FBTCxHQUFlamhCLEVBQUVvZSxLQUFqQjtBQUF1QjtBQUFDO0FBQUMsQ0FBN1osQ0FBOFpqZixNQUFNRSxJQUFOLENBQVdDLE1BQVgsQ0FBa0JtWSxLQUFLa0YsSUFBTCxDQUFVb0UscUJBQTVCLEVBQWtEdEosS0FBS2tGLElBQUwsQ0FBVWtDLFVBQTVELEVBQXdFcEgsS0FBS2tGLElBQUwsQ0FBVU8sVUFBVixHQUFxQixZQUFVO0FBQUN6RixPQUFLa0YsSUFBTCxDQUFVTyxVQUFWLENBQXFCcGQsVUFBckIsQ0FBZ0NELFdBQWhDLENBQTRDdUMsSUFBNUMsQ0FBaUQsSUFBakQsRUFBdUQsS0FBS2dkLEVBQUwsR0FBUSxJQUFSLENBQWEsS0FBS0osSUFBTCxHQUFVLFFBQVY7QUFBbUIsQ0FBdkgsQ0FBd0g3ZixNQUFNRSxJQUFOLENBQVdDLE1BQVgsQ0FBa0JtWSxLQUFLa0YsSUFBTCxDQUFVTyxVQUE1QixFQUF1Q3pGLEtBQUtrRixJQUFMLENBQVVrQyxVQUFqRCxFQUE2RHBILEtBQUtrRixJQUFMLENBQVVRLFVBQVYsR0FBcUIsVUFBUzFjLENBQVQsRUFBVztBQUFDZ1gsT0FBS2tGLElBQUwsQ0FBVVEsVUFBVixDQUFxQnJkLFVBQXJCLENBQWdDRCxXQUFoQyxDQUE0Q3VDLElBQTVDLENBQWlELElBQWpELEVBQXVELEtBQUtnZCxFQUFMLEdBQVEsSUFBUixDQUFhLEtBQUsrQixlQUFMLEdBQXFCLFVBQVNuaEIsQ0FBVCxFQUFXO0FBQUMsU0FBS2dmLElBQUwsR0FBVSxJQUFWLENBQWUsS0FBS0MsVUFBTCxHQUFnQixJQUFoQixDQUFxQixLQUFLRixFQUFMLEdBQVF0SCxLQUFLa0YsSUFBTCxDQUFVQyxRQUFWLENBQW1CRSw2QkFBbkIsQ0FBaUQ5YyxDQUFqRCxDQUFSO0FBQTRELEdBQWpJLENBQWtJLEtBQUtvaEIsWUFBTCxHQUFrQixVQUFTbGhCLENBQVQsRUFBVztBQUFDLFFBQUlGLElBQUUsSUFBSW9KLFVBQUosQ0FBZXBHLE9BQU85QyxDQUFQLENBQWYsRUFBeUIsRUFBekIsQ0FBTixDQUFtQyxLQUFLaWhCLGVBQUwsQ0FBcUJuaEIsQ0FBckI7QUFBd0IsR0FBekYsQ0FBMEYsS0FBS3FoQixXQUFMLEdBQWlCLFVBQVNyaEIsQ0FBVCxFQUFXO0FBQUMsU0FBSytlLEVBQUwsR0FBUS9lLENBQVI7QUFBVSxHQUF2QyxDQUF3QyxLQUFLa2YsZ0JBQUwsR0FBc0IsWUFBVTtBQUFDLFdBQU8sS0FBS0gsRUFBWjtBQUFlLEdBQWhELENBQWlELElBQUcsT0FBT3RlLENBQVAsSUFBVSxXQUFiLEVBQXlCO0FBQUMsUUFBRyxPQUFPQSxFQUFFNmdCLE1BQVQsSUFBaUIsV0FBcEIsRUFBZ0M7QUFBQyxXQUFLSCxlQUFMLENBQXFCMWdCLEVBQUU2Z0IsTUFBdkI7QUFBK0IsS0FBaEUsTUFBb0U7QUFBQyxVQUFHLE9BQU83Z0IsRUFBRSxLQUFGLENBQVAsSUFBaUIsV0FBcEIsRUFBZ0M7QUFBQyxhQUFLMmdCLFlBQUwsQ0FBa0IzZ0IsRUFBRSxLQUFGLENBQWxCO0FBQTRCLE9BQTdELE1BQWlFO0FBQUMsWUFBRyxPQUFPQSxDQUFQLElBQVUsUUFBYixFQUFzQjtBQUFDLGVBQUsyZ0IsWUFBTCxDQUFrQjNnQixDQUFsQjtBQUFxQixTQUE1QyxNQUFnRDtBQUFDLGNBQUcsT0FBT0EsRUFBRW9mLEdBQVQsSUFBYyxXQUFqQixFQUE2QjtBQUFDLGlCQUFLd0IsV0FBTCxDQUFpQjVnQixFQUFFb2YsR0FBbkI7QUFBd0I7QUFBQztBQUFDO0FBQUM7QUFBQztBQUFDLENBQXZxQixDQUF3cUIxZ0IsTUFBTUUsSUFBTixDQUFXQyxNQUFYLENBQWtCbVksS0FBS2tGLElBQUwsQ0FBVVEsVUFBNUIsRUFBdUMxRixLQUFLa0YsSUFBTCxDQUFVa0MsVUFBakQsRUFBNkRwSCxLQUFLa0YsSUFBTCxDQUFVUyxZQUFWLEdBQXVCLFVBQVNwZCxDQUFULEVBQVc7QUFBQyxNQUFHQSxNQUFJWixTQUFKLElBQWUsT0FBT1ksRUFBRXVlLEdBQVQsS0FBZSxXQUFqQyxFQUE2QztBQUFDLFFBQUk5ZCxJQUFFZ1gsS0FBS2tGLElBQUwsQ0FBVUMsUUFBVixDQUFtQkssU0FBbkIsQ0FBNkJqZCxFQUFFdWUsR0FBL0IsQ0FBTixDQUEwQ3ZlLEVBQUU2ZixHQUFGLEdBQU0sT0FBS3BmLEVBQUVnZSxhQUFGLEVBQVg7QUFBNkIsUUFBSzlCLElBQUwsQ0FBVVMsWUFBVixDQUF1QnRkLFVBQXZCLENBQWtDRCxXQUFsQyxDQUE4Q3VDLElBQTlDLENBQW1ELElBQW5ELEVBQXlELEtBQUtnZCxFQUFMLEdBQVEsSUFBUixDQUFhLEtBQUttQyw4QkFBTCxHQUFvQyxVQUFTcmhCLENBQVQsRUFBVztBQUFDLFNBQUs4ZSxJQUFMLEdBQVUsSUFBVixDQUFlLEtBQUtDLFVBQUwsR0FBZ0IsSUFBaEIsQ0FBcUIsS0FBS0YsRUFBTCxHQUFRN2UsQ0FBUjtBQUFVLEdBQTlGLENBQStGLEtBQUtzaEIsd0JBQUwsR0FBOEIsVUFBU3RoQixDQUFULEVBQVdELENBQVgsRUFBYTtBQUFDLFFBQUdDLElBQUUsQ0FBRixJQUFLLElBQUVBLENBQVYsRUFBWTtBQUFDLFlBQUssMkNBQXlDQSxDQUE5QztBQUFnRCxTQUFJUCxJQUFFLE1BQUlPLENBQVYsQ0FBWSxLQUFLOGUsSUFBTCxHQUFVLElBQVYsQ0FBZSxLQUFLQyxVQUFMLEdBQWdCLElBQWhCLENBQXFCLEtBQUtGLEVBQUwsR0FBUXBmLElBQUVNLENBQVY7QUFBWSxHQUFySyxDQUFzSyxLQUFLd2hCLGlCQUFMLEdBQXVCLFVBQVN4aEIsQ0FBVCxFQUFXO0FBQUNBLFFBQUVBLEVBQUV3YyxPQUFGLENBQVUsS0FBVixFQUFnQixFQUFoQixDQUFGLENBQXNCLElBQUloZCxJQUFFLElBQUVRLEVBQUVLLE1BQUYsR0FBUyxDQUFqQixDQUFtQixJQUFHYixLQUFHLENBQU4sRUFBUTtBQUFDQSxVQUFFLENBQUY7QUFBSSxVQUFJLElBQUlGLElBQUUsQ0FBVixFQUFZQSxLQUFHRSxDQUFmLEVBQWlCRixHQUFqQixFQUFxQjtBQUFDVSxXQUFHLEdBQUg7QUFBTyxTQUFJRyxJQUFFLEVBQU4sQ0FBUyxLQUFJLElBQUliLElBQUUsQ0FBVixFQUFZQSxJQUFFVSxFQUFFSyxNQUFGLEdBQVMsQ0FBdkIsRUFBeUJmLEtBQUcsQ0FBNUIsRUFBOEI7QUFBQyxVQUFJSSxJQUFFTSxFQUFFNkMsTUFBRixDQUFTdkQsQ0FBVCxFQUFXLENBQVgsQ0FBTixDQUFvQixJQUFJVyxJQUFFMkMsU0FBU2xELENBQVQsRUFBVyxDQUFYLEVBQWM0QixRQUFkLENBQXVCLEVBQXZCLENBQU4sQ0FBaUMsSUFBR3JCLEVBQUVJLE1BQUYsSUFBVSxDQUFiLEVBQWU7QUFBQ0osWUFBRSxNQUFJQSxDQUFOO0FBQVEsWUFBR0EsQ0FBSDtBQUFLLFVBQUs4ZSxJQUFMLEdBQVUsSUFBVixDQUFlLEtBQUtDLFVBQUwsR0FBZ0IsSUFBaEIsQ0FBcUIsS0FBS0YsRUFBTCxHQUFRLE1BQUl0ZixDQUFKLEdBQU1XLENBQWQ7QUFBZ0IsR0FBcFMsQ0FBcVMsS0FBS3NoQixpQkFBTCxHQUF1QixVQUFTemhCLENBQVQsRUFBVztBQUFDLFFBQUlOLElBQUUsRUFBTixDQUFTLEtBQUksSUFBSU8sSUFBRSxDQUFWLEVBQVlBLElBQUVELEVBQUVLLE1BQWhCLEVBQXVCSixHQUF2QixFQUEyQjtBQUFDLFVBQUdELEVBQUVDLENBQUYsS0FBTSxJQUFULEVBQWM7QUFBQ1AsYUFBRyxHQUFIO0FBQU8sT0FBdEIsTUFBMEI7QUFBQ0EsYUFBRyxHQUFIO0FBQU87QUFBQyxVQUFLOGhCLGlCQUFMLENBQXVCOWhCLENBQXZCO0FBQTBCLEdBQXJJLENBQXNJLEtBQUtnaUIsYUFBTCxHQUFtQixVQUFTMWhCLENBQVQsRUFBVztBQUFDLFFBQUlDLElBQUUsSUFBSThJLEtBQUosQ0FBVS9JLENBQVYsQ0FBTixDQUFtQixLQUFJLElBQUlOLElBQUUsQ0FBVixFQUFZQSxJQUFFTSxDQUFkLEVBQWdCTixHQUFoQixFQUFvQjtBQUFDTyxRQUFFUCxDQUFGLElBQUssS0FBTDtBQUFXLFlBQU9PLENBQVA7QUFBUyxHQUEzRixDQUE0RixLQUFLZ2YsZ0JBQUwsR0FBc0IsWUFBVTtBQUFDLFdBQU8sS0FBS0gsRUFBWjtBQUFlLEdBQWhELENBQWlELElBQUcsT0FBTy9lLENBQVAsSUFBVSxXQUFiLEVBQXlCO0FBQUMsUUFBRyxPQUFPQSxDQUFQLElBQVUsUUFBVixJQUFvQkEsRUFBRTBmLFdBQUYsR0FBZ0JsRCxLQUFoQixDQUFzQixhQUF0QixDQUF2QixFQUE0RDtBQUFDLFdBQUsrRSw4QkFBTCxDQUFvQ3ZoQixDQUFwQztBQUF1QyxLQUFwRyxNQUF3RztBQUFDLFVBQUcsT0FBT0EsRUFBRTZmLEdBQVQsSUFBYyxXQUFqQixFQUE2QjtBQUFDLGFBQUswQiw4QkFBTCxDQUFvQ3ZoQixFQUFFNmYsR0FBdEM7QUFBMkMsT0FBekUsTUFBNkU7QUFBQyxZQUFHLE9BQU83ZixFQUFFNGhCLEdBQVQsSUFBYyxXQUFqQixFQUE2QjtBQUFDLGVBQUtILGlCQUFMLENBQXVCemhCLEVBQUU0aEIsR0FBekI7QUFBOEIsU0FBNUQsTUFBZ0U7QUFBQyxjQUFHLE9BQU81aEIsRUFBRW9lLEtBQVQsSUFBZ0IsV0FBbkIsRUFBK0I7QUFBQyxpQkFBS3NELGlCQUFMLENBQXVCMWhCLEVBQUVvZSxLQUF6QjtBQUFnQztBQUFDO0FBQUM7QUFBQztBQUFDO0FBQUMsQ0FBbDNDLENBQW0zQ2pmLE1BQU1FLElBQU4sQ0FBV0MsTUFBWCxDQUFrQm1ZLEtBQUtrRixJQUFMLENBQVVTLFlBQTVCLEVBQXlDM0YsS0FBS2tGLElBQUwsQ0FBVWtDLFVBQW5ELEVBQStEcEgsS0FBS2tGLElBQUwsQ0FBVVUsY0FBVixHQUF5QixVQUFTcmQsQ0FBVCxFQUFXO0FBQUMsTUFBR0EsTUFBSVosU0FBSixJQUFlLE9BQU9ZLEVBQUV1ZSxHQUFULEtBQWUsV0FBakMsRUFBNkM7QUFBQyxRQUFJOWQsSUFBRWdYLEtBQUtrRixJQUFMLENBQVVDLFFBQVYsQ0FBbUJLLFNBQW5CLENBQTZCamQsRUFBRXVlLEdBQS9CLENBQU4sQ0FBMEN2ZSxFQUFFNmYsR0FBRixHQUFNcGYsRUFBRWdlLGFBQUYsRUFBTjtBQUF3QixRQUFLOUIsSUFBTCxDQUFVVSxjQUFWLENBQXlCdmQsVUFBekIsQ0FBb0NELFdBQXBDLENBQWdEdUMsSUFBaEQsQ0FBcUQsSUFBckQsRUFBMERwQyxDQUExRCxFQUE2RCxLQUFLb2YsRUFBTCxHQUFRLElBQVI7QUFBYSxDQUEvTixDQUFnT2pnQixNQUFNRSxJQUFOLENBQVdDLE1BQVgsQ0FBa0JtWSxLQUFLa0YsSUFBTCxDQUFVVSxjQUE1QixFQUEyQzVGLEtBQUtrRixJQUFMLENBQVUyQyxpQkFBckQsRUFBd0U3SCxLQUFLa0YsSUFBTCxDQUFVVyxPQUFWLEdBQWtCLFlBQVU7QUFBQzdGLE9BQUtrRixJQUFMLENBQVVXLE9BQVYsQ0FBa0J4ZCxVQUFsQixDQUE2QkQsV0FBN0IsQ0FBeUN1QyxJQUF6QyxDQUE4QyxJQUE5QyxFQUFvRCxLQUFLZ2QsRUFBTCxHQUFRLElBQVIsQ0FBYSxLQUFLSixJQUFMLEdBQVUsTUFBVjtBQUFpQixDQUEvRyxDQUFnSDdmLE1BQU1FLElBQU4sQ0FBV0MsTUFBWCxDQUFrQm1ZLEtBQUtrRixJQUFMLENBQVVXLE9BQTVCLEVBQW9DN0YsS0FBS2tGLElBQUwsQ0FBVWtDLFVBQTlDLEVBQTBEcEgsS0FBS2tGLElBQUwsQ0FBVVksbUJBQVYsR0FBOEIsVUFBU3JkLENBQVQsRUFBVztBQUFDLE1BQUlGLElBQUUsU0FBRkEsQ0FBRSxDQUFTTCxDQUFULEVBQVc7QUFBQyxRQUFJTSxJQUFFTixFQUFFNEIsUUFBRixDQUFXLEVBQVgsQ0FBTixDQUFxQixJQUFHdEIsRUFBRUssTUFBRixJQUFVLENBQWIsRUFBZTtBQUFDTCxVQUFFLE1BQUlBLENBQU47QUFBUSxZQUFPQSxDQUFQO0FBQVMsR0FBeEUsQ0FBeUUsSUFBSVEsSUFBRSxTQUFGQSxDQUFFLENBQVNELENBQVQsRUFBVztBQUFDLFFBQUlKLElBQUUsRUFBTixDQUFTLElBQUlILElBQUUsSUFBSW1KLFVBQUosQ0FBZTVJLENBQWYsRUFBaUIsRUFBakIsQ0FBTixDQUEyQixJQUFJYixJQUFFTSxFQUFFc0IsUUFBRixDQUFXLENBQVgsQ0FBTixDQUFvQixJQUFJOUIsSUFBRSxJQUFFRSxFQUFFVyxNQUFGLEdBQVMsQ0FBakIsQ0FBbUIsSUFBR2IsS0FBRyxDQUFOLEVBQVE7QUFBQ0EsVUFBRSxDQUFGO0FBQUksU0FBSStDLElBQUUsRUFBTixDQUFTLEtBQUksSUFBSWpELElBQUUsQ0FBVixFQUFZQSxJQUFFRSxDQUFkLEVBQWdCRixHQUFoQixFQUFvQjtBQUFDaUQsV0FBRyxHQUFIO0FBQU8sU0FBRUEsSUFBRTdDLENBQUosQ0FBTSxLQUFJLElBQUlKLElBQUUsQ0FBVixFQUFZQSxJQUFFSSxFQUFFVyxNQUFGLEdBQVMsQ0FBdkIsRUFBeUJmLEtBQUcsQ0FBNUIsRUFBOEI7QUFBQyxVQUFJZ0IsSUFBRVosRUFBRW1ELE1BQUYsQ0FBU3ZELENBQVQsRUFBVyxDQUFYLENBQU4sQ0FBb0IsSUFBR0EsS0FBR0ksRUFBRVcsTUFBRixHQUFTLENBQWYsRUFBaUI7QUFBQ0MsWUFBRSxNQUFJQSxDQUFOO0FBQVEsWUFBR1AsRUFBRTZDLFNBQVN0QyxDQUFULEVBQVcsQ0FBWCxDQUFGLENBQUg7QUFBb0IsWUFBT0gsQ0FBUDtBQUFTLEdBQS9QLENBQWdRcVgsS0FBS2tGLElBQUwsQ0FBVVksbUJBQVYsQ0FBOEJ6ZCxVQUE5QixDQUF5Q0QsV0FBekMsQ0FBcUR1QyxJQUFyRCxDQUEwRCxJQUExRCxFQUFnRSxLQUFLZ2QsRUFBTCxHQUFRLElBQVIsQ0FBYSxLQUFLaUMsV0FBTCxHQUFpQixVQUFTMWhCLENBQVQsRUFBVztBQUFDLFNBQUtxZixJQUFMLEdBQVUsSUFBVixDQUFlLEtBQUtDLFVBQUwsR0FBZ0IsSUFBaEIsQ0FBcUIsS0FBS2pkLENBQUwsR0FBTyxJQUFQLENBQVksS0FBSytjLEVBQUwsR0FBUXBmLENBQVI7QUFBVSxHQUF2RixDQUF3RixLQUFLa2lCLGlCQUFMLEdBQXVCLFVBQVNwaUIsQ0FBVCxFQUFXO0FBQUMsUUFBRyxDQUFDQSxFQUFFK2MsS0FBRixDQUFRLFdBQVIsQ0FBSixFQUF5QjtBQUFDLFlBQUssMkJBQXlCL2MsQ0FBOUI7QUFBZ0MsU0FBSUYsSUFBRSxFQUFOLENBQVMsSUFBSUksSUFBRUYsRUFBRW1mLEtBQUYsQ0FBUSxHQUFSLENBQU4sQ0FBbUIsSUFBSXhlLElBQUV5QyxTQUFTbEQsRUFBRSxDQUFGLENBQVQsSUFBZSxFQUFmLEdBQWtCa0QsU0FBU2xELEVBQUUsQ0FBRixDQUFULENBQXhCLENBQXVDSixLQUFHUyxFQUFFSSxDQUFGLENBQUgsQ0FBUVQsRUFBRTRFLE1BQUYsQ0FBUyxDQUFULEVBQVcsQ0FBWCxFQUFjLEtBQUksSUFBSXRFLElBQUUsQ0FBVixFQUFZQSxJQUFFTixFQUFFVyxNQUFoQixFQUF1QkwsR0FBdkIsRUFBMkI7QUFBQ1YsV0FBR2tCLEVBQUVkLEVBQUVNLENBQUYsQ0FBRixDQUFIO0FBQVcsVUFBSytlLElBQUwsR0FBVSxJQUFWLENBQWUsS0FBS0MsVUFBTCxHQUFnQixJQUFoQixDQUFxQixLQUFLamQsQ0FBTCxHQUFPLElBQVAsQ0FBWSxLQUFLK2MsRUFBTCxHQUFReGYsQ0FBUjtBQUFVLEdBQXZSLENBQXdSLEtBQUt1aUIsWUFBTCxHQUFrQixVQUFTN2hCLENBQVQsRUFBVztBQUFDLFFBQUlOLElBQUU4WCxLQUFLa0YsSUFBTCxDQUFVb0YsSUFBVixDQUFlQyxHQUFmLENBQW1CQyxRQUFuQixDQUE0QmhpQixDQUE1QixDQUFOLENBQXFDLElBQUdOLE1BQUksRUFBUCxFQUFVO0FBQUMsV0FBS2tpQixpQkFBTCxDQUF1QmxpQixDQUF2QjtBQUEwQixLQUFyQyxNQUF5QztBQUFDLFlBQUssNENBQTBDTSxDQUEvQztBQUFpRDtBQUFDLEdBQS9KLENBQWdLLEtBQUtpZixnQkFBTCxHQUFzQixZQUFVO0FBQUMsV0FBTyxLQUFLSCxFQUFaO0FBQWUsR0FBaEQsQ0FBaUQsSUFBRzdlLE1BQUlkLFNBQVAsRUFBaUI7QUFBQyxRQUFHLE9BQU9jLENBQVAsS0FBVyxRQUFkLEVBQXVCO0FBQUMsVUFBR0EsRUFBRXNjLEtBQUYsQ0FBUSxpQkFBUixDQUFILEVBQThCO0FBQUMsYUFBS3FGLGlCQUFMLENBQXVCM2hCLENBQXZCO0FBQTBCLE9BQXpELE1BQTZEO0FBQUMsYUFBSzRoQixZQUFMLENBQWtCNWhCLENBQWxCO0FBQXFCO0FBQUMsS0FBNUcsTUFBZ0g7QUFBQyxVQUFHQSxFQUFFZ2lCLEdBQUYsS0FBUTlpQixTQUFYLEVBQXFCO0FBQUMsYUFBS3lpQixpQkFBTCxDQUF1QjNoQixFQUFFZ2lCLEdBQXpCO0FBQThCLE9BQXBELE1BQXdEO0FBQUMsWUFBR2hpQixFQUFFMmYsR0FBRixLQUFRemdCLFNBQVgsRUFBcUI7QUFBQyxlQUFLaWlCLFdBQUwsQ0FBaUJuaEIsRUFBRTJmLEdBQW5CO0FBQXdCLFNBQTlDLE1BQWtEO0FBQUMsY0FBRzNmLEVBQUVpaUIsSUFBRixLQUFTL2lCLFNBQVosRUFBc0I7QUFBQyxpQkFBSzBpQixZQUFMLENBQWtCNWhCLEVBQUVpaUIsSUFBcEI7QUFBMEI7QUFBQztBQUFDO0FBQUM7QUFBQztBQUFDLENBQXR5QyxDQUF1eUNoakIsTUFBTUUsSUFBTixDQUFXQyxNQUFYLENBQWtCbVksS0FBS2tGLElBQUwsQ0FBVVksbUJBQTVCLEVBQWdEOUYsS0FBS2tGLElBQUwsQ0FBVWtDLFVBQTFELEVBQXNFcEgsS0FBS2tGLElBQUwsQ0FBVWEsYUFBVixHQUF3QixVQUFTL2MsQ0FBVCxFQUFXO0FBQUNnWCxPQUFLa0YsSUFBTCxDQUFVYSxhQUFWLENBQXdCMWQsVUFBeEIsQ0FBbUNELFdBQW5DLENBQStDdUMsSUFBL0MsQ0FBb0QsSUFBcEQsRUFBMEQsS0FBS2dkLEVBQUwsR0FBUSxJQUFSLENBQWEsS0FBSytCLGVBQUwsR0FBcUIsVUFBU25oQixDQUFULEVBQVc7QUFBQyxTQUFLZ2YsSUFBTCxHQUFVLElBQVYsQ0FBZSxLQUFLQyxVQUFMLEdBQWdCLElBQWhCLENBQXFCLEtBQUtGLEVBQUwsR0FBUXRILEtBQUtrRixJQUFMLENBQVVDLFFBQVYsQ0FBbUJFLDZCQUFuQixDQUFpRDljLENBQWpELENBQVI7QUFBNEQsR0FBakksQ0FBa0ksS0FBS29oQixZQUFMLEdBQWtCLFVBQVNsaEIsQ0FBVCxFQUFXO0FBQUMsUUFBSUYsSUFBRSxJQUFJb0osVUFBSixDQUFlcEcsT0FBTzlDLENBQVAsQ0FBZixFQUF5QixFQUF6QixDQUFOLENBQW1DLEtBQUtpaEIsZUFBTCxDQUFxQm5oQixDQUFyQjtBQUF3QixHQUF6RixDQUEwRixLQUFLcWhCLFdBQUwsR0FBaUIsVUFBU3JoQixDQUFULEVBQVc7QUFBQyxTQUFLK2UsRUFBTCxHQUFRL2UsQ0FBUjtBQUFVLEdBQXZDLENBQXdDLEtBQUtrZixnQkFBTCxHQUFzQixZQUFVO0FBQUMsV0FBTyxLQUFLSCxFQUFaO0FBQWUsR0FBaEQsQ0FBaUQsSUFBRyxPQUFPdGUsQ0FBUCxJQUFVLFdBQWIsRUFBeUI7QUFBQyxRQUFHLE9BQU9BLEVBQUUsS0FBRixDQUFQLElBQWlCLFdBQXBCLEVBQWdDO0FBQUMsV0FBSzJnQixZQUFMLENBQWtCM2dCLEVBQUUsS0FBRixDQUFsQjtBQUE0QixLQUE3RCxNQUFpRTtBQUFDLFVBQUcsT0FBT0EsQ0FBUCxJQUFVLFFBQWIsRUFBc0I7QUFBQyxhQUFLMmdCLFlBQUwsQ0FBa0IzZ0IsQ0FBbEI7QUFBcUIsT0FBNUMsTUFBZ0Q7QUFBQyxZQUFHLE9BQU9BLEVBQUVvZixHQUFULElBQWMsV0FBakIsRUFBNkI7QUFBQyxlQUFLd0IsV0FBTCxDQUFpQjVnQixFQUFFb2YsR0FBbkI7QUFBd0I7QUFBQztBQUFDO0FBQUM7QUFBQyxDQUF2bUIsQ0FBd21CMWdCLE1BQU1FLElBQU4sQ0FBV0MsTUFBWCxDQUFrQm1ZLEtBQUtrRixJQUFMLENBQVVhLGFBQTVCLEVBQTBDL0YsS0FBS2tGLElBQUwsQ0FBVWtDLFVBQXBELEVBQWdFcEgsS0FBS2tGLElBQUwsQ0FBVWMsYUFBVixHQUF3QixVQUFTaGQsQ0FBVCxFQUFXO0FBQUNnWCxPQUFLa0YsSUFBTCxDQUFVYyxhQUFWLENBQXdCM2QsVUFBeEIsQ0FBbUNELFdBQW5DLENBQStDdUMsSUFBL0MsQ0FBb0QsSUFBcEQsRUFBeUQzQixDQUF6RCxFQUE0RCxLQUFLMmUsRUFBTCxHQUFRLElBQVI7QUFBYSxDQUE3RyxDQUE4R2pnQixNQUFNRSxJQUFOLENBQVdDLE1BQVgsQ0FBa0JtWSxLQUFLa0YsSUFBTCxDQUFVYyxhQUE1QixFQUEwQ2hHLEtBQUtrRixJQUFMLENBQVUyQyxpQkFBcEQsRUFBdUU3SCxLQUFLa0YsSUFBTCxDQUFVZSxnQkFBVixHQUEyQixVQUFTamQsQ0FBVCxFQUFXO0FBQUNnWCxPQUFLa0YsSUFBTCxDQUFVZSxnQkFBVixDQUEyQjVkLFVBQTNCLENBQXNDRCxXQUF0QyxDQUFrRHVDLElBQWxELENBQXVELElBQXZELEVBQTREM0IsQ0FBNUQsRUFBK0QsS0FBSzJlLEVBQUwsR0FBUSxJQUFSO0FBQWEsQ0FBbkgsQ0FBb0hqZ0IsTUFBTUUsSUFBTixDQUFXQyxNQUFYLENBQWtCbVksS0FBS2tGLElBQUwsQ0FBVWUsZ0JBQTVCLEVBQTZDakcsS0FBS2tGLElBQUwsQ0FBVTJDLGlCQUF2RCxFQUEwRTdILEtBQUtrRixJQUFMLENBQVVnQixrQkFBVixHQUE2QixVQUFTbGQsQ0FBVCxFQUFXO0FBQUNnWCxPQUFLa0YsSUFBTCxDQUFVZ0Isa0JBQVYsQ0FBNkI3ZCxVQUE3QixDQUF3Q0QsV0FBeEMsQ0FBb0R1QyxJQUFwRCxDQUF5RCxJQUF6RCxFQUE4RDNCLENBQTlELEVBQWlFLEtBQUsyZSxFQUFMLEdBQVEsSUFBUjtBQUFhLENBQXZILENBQXdIamdCLE1BQU1FLElBQU4sQ0FBV0MsTUFBWCxDQUFrQm1ZLEtBQUtrRixJQUFMLENBQVVnQixrQkFBNUIsRUFBK0NsRyxLQUFLa0YsSUFBTCxDQUFVMkMsaUJBQXpELEVBQTRFN0gsS0FBS2tGLElBQUwsQ0FBVWlCLGdCQUFWLEdBQTJCLFVBQVNuZCxDQUFULEVBQVc7QUFBQ2dYLE9BQUtrRixJQUFMLENBQVVpQixnQkFBVixDQUEyQjlkLFVBQTNCLENBQXNDRCxXQUF0QyxDQUFrRHVDLElBQWxELENBQXVELElBQXZELEVBQTREM0IsQ0FBNUQsRUFBK0QsS0FBSzJlLEVBQUwsR0FBUSxJQUFSO0FBQWEsQ0FBbkgsQ0FBb0hqZ0IsTUFBTUUsSUFBTixDQUFXQyxNQUFYLENBQWtCbVksS0FBS2tGLElBQUwsQ0FBVWlCLGdCQUE1QixFQUE2Q25HLEtBQUtrRixJQUFMLENBQVUyQyxpQkFBdkQsRUFBMEU3SCxLQUFLa0YsSUFBTCxDQUFVa0IsWUFBVixHQUF1QixVQUFTcGQsQ0FBVCxFQUFXO0FBQUNnWCxPQUFLa0YsSUFBTCxDQUFVa0IsWUFBVixDQUF1Qi9kLFVBQXZCLENBQWtDRCxXQUFsQyxDQUE4Q3VDLElBQTlDLENBQW1ELElBQW5ELEVBQXdEM0IsQ0FBeEQsRUFBMkQsS0FBSzJlLEVBQUwsR0FBUSxJQUFSO0FBQWEsQ0FBM0csQ0FBNEdqZ0IsTUFBTUUsSUFBTixDQUFXQyxNQUFYLENBQWtCbVksS0FBS2tGLElBQUwsQ0FBVWtCLFlBQTVCLEVBQXlDcEcsS0FBS2tGLElBQUwsQ0FBVTJDLGlCQUFuRCxFQUFzRTdILEtBQUtrRixJQUFMLENBQVVtQixVQUFWLEdBQXFCLFVBQVNyZCxDQUFULEVBQVc7QUFBQ2dYLE9BQUtrRixJQUFMLENBQVVtQixVQUFWLENBQXFCaGUsVUFBckIsQ0FBZ0NELFdBQWhDLENBQTRDdUMsSUFBNUMsQ0FBaUQsSUFBakQsRUFBc0QzQixDQUF0RCxFQUF5RCxLQUFLMmUsRUFBTCxHQUFRLElBQVIsQ0FBYSxLQUFLMEIsU0FBTCxHQUFlLFVBQVM5Z0IsQ0FBVCxFQUFXO0FBQUMsU0FBS2dmLElBQUwsR0FBVSxJQUFWLENBQWUsS0FBS0MsVUFBTCxHQUFnQixJQUFoQixDQUFxQixLQUFLbUQsSUFBTCxHQUFVcGlCLENBQVYsQ0FBWSxLQUFLZ0MsQ0FBTCxHQUFPLEtBQUtrZSxVQUFMLENBQWdCLEtBQUtrQyxJQUFyQixFQUEwQixLQUExQixDQUFQLENBQXdDLEtBQUtyRCxFQUFMLEdBQVE0QixPQUFPLEtBQUszZSxDQUFaLENBQVI7QUFBdUIsR0FBMUksQ0FBMkksS0FBS2tkLGdCQUFMLEdBQXNCLFlBQVU7QUFBQyxRQUFHLE9BQU8sS0FBS2tELElBQVosSUFBa0IsV0FBbEIsSUFBK0IsT0FBTyxLQUFLcGdCLENBQVosSUFBZSxXQUFqRCxFQUE2RDtBQUFDLFdBQUtvZ0IsSUFBTCxHQUFVLElBQUk1TCxJQUFKLEVBQVYsQ0FBcUIsS0FBS3hVLENBQUwsR0FBTyxLQUFLa2UsVUFBTCxDQUFnQixLQUFLa0MsSUFBckIsRUFBMEIsS0FBMUIsQ0FBUCxDQUF3QyxLQUFLckQsRUFBTCxHQUFRNEIsT0FBTyxLQUFLM2UsQ0FBWixDQUFSO0FBQXVCLFlBQU8sS0FBSytjLEVBQVo7QUFBZSxHQUFsTSxDQUFtTSxJQUFHdGUsTUFBSXJCLFNBQVAsRUFBaUI7QUFBQyxRQUFHcUIsRUFBRW1mLEdBQUYsS0FBUXhnQixTQUFYLEVBQXFCO0FBQUMsV0FBS29nQixTQUFMLENBQWUvZSxFQUFFbWYsR0FBakI7QUFBc0IsS0FBNUMsTUFBZ0Q7QUFBQyxVQUFHLE9BQU9uZixDQUFQLElBQVUsUUFBVixJQUFvQkEsRUFBRStiLEtBQUYsQ0FBUSxjQUFSLENBQXZCLEVBQStDO0FBQUMsYUFBS2dELFNBQUwsQ0FBZS9lLENBQWY7QUFBa0IsT0FBbEUsTUFBc0U7QUFBQyxZQUFHQSxFQUFFb2YsR0FBRixLQUFRemdCLFNBQVgsRUFBcUI7QUFBQyxlQUFLdWdCLFlBQUwsQ0FBa0JsZixFQUFFb2YsR0FBcEI7QUFBeUIsU0FBL0MsTUFBbUQ7QUFBQyxjQUFHcGYsRUFBRTJoQixJQUFGLEtBQVNoakIsU0FBWixFQUFzQjtBQUFDLGlCQUFLMGhCLFNBQUwsQ0FBZXJnQixFQUFFMmhCLElBQWpCO0FBQXVCO0FBQUM7QUFBQztBQUFDO0FBQUM7QUFBQyxDQUF0cUIsQ0FBdXFCampCLE1BQU1FLElBQU4sQ0FBV0MsTUFBWCxDQUFrQm1ZLEtBQUtrRixJQUFMLENBQVVtQixVQUE1QixFQUF1Q3JHLEtBQUtrRixJQUFMLENBQVVtRCxlQUFqRCxFQUFrRXJJLEtBQUtrRixJQUFMLENBQVVvQixrQkFBVixHQUE2QixVQUFTdGQsQ0FBVCxFQUFXO0FBQUNnWCxPQUFLa0YsSUFBTCxDQUFVb0Isa0JBQVYsQ0FBNkJqZSxVQUE3QixDQUF3Q0QsV0FBeEMsQ0FBb0R1QyxJQUFwRCxDQUF5RCxJQUF6RCxFQUE4RDNCLENBQTlELEVBQWlFLEtBQUsyZSxFQUFMLEdBQVEsSUFBUixDQUFhLEtBQUtpRCxVQUFMLEdBQWdCLEtBQWhCLENBQXNCLEtBQUt2QixTQUFMLEdBQWUsVUFBUzlnQixDQUFULEVBQVc7QUFBQyxTQUFLZ2YsSUFBTCxHQUFVLElBQVYsQ0FBZSxLQUFLQyxVQUFMLEdBQWdCLElBQWhCLENBQXFCLEtBQUttRCxJQUFMLEdBQVVwaUIsQ0FBVixDQUFZLEtBQUtnQyxDQUFMLEdBQU8sS0FBS2tlLFVBQUwsQ0FBZ0IsS0FBS2tDLElBQXJCLEVBQTBCLEtBQTFCLEVBQWdDLEtBQUtDLFVBQXJDLENBQVAsQ0FBd0QsS0FBS3RELEVBQUwsR0FBUTRCLE9BQU8sS0FBSzNlLENBQVosQ0FBUjtBQUF1QixHQUExSixDQUEySixLQUFLa2QsZ0JBQUwsR0FBc0IsWUFBVTtBQUFDLFFBQUcsS0FBS2tELElBQUwsS0FBWWhqQixTQUFaLElBQXVCLEtBQUs0QyxDQUFMLEtBQVM1QyxTQUFuQyxFQUE2QztBQUFDLFdBQUtnakIsSUFBTCxHQUFVLElBQUk1TCxJQUFKLEVBQVYsQ0FBcUIsS0FBS3hVLENBQUwsR0FBTyxLQUFLa2UsVUFBTCxDQUFnQixLQUFLa0MsSUFBckIsRUFBMEIsS0FBMUIsRUFBZ0MsS0FBS0MsVUFBckMsQ0FBUCxDQUF3RCxLQUFLdEQsRUFBTCxHQUFRNEIsT0FBTyxLQUFLM2UsQ0FBWixDQUFSO0FBQXVCLFlBQU8sS0FBSytjLEVBQVo7QUFBZSxHQUFsTSxDQUFtTSxJQUFHdGUsTUFBSXJCLFNBQVAsRUFBaUI7QUFBQyxRQUFHcUIsRUFBRW1mLEdBQUYsS0FBUXhnQixTQUFYLEVBQXFCO0FBQUMsV0FBS29nQixTQUFMLENBQWUvZSxFQUFFbWYsR0FBakI7QUFBc0IsS0FBNUMsTUFBZ0Q7QUFBQyxVQUFHLE9BQU9uZixDQUFQLElBQVUsUUFBVixJQUFvQkEsRUFBRStiLEtBQUYsQ0FBUSxjQUFSLENBQXZCLEVBQStDO0FBQUMsYUFBS2dELFNBQUwsQ0FBZS9lLENBQWY7QUFBa0IsT0FBbEUsTUFBc0U7QUFBQyxZQUFHQSxFQUFFb2YsR0FBRixLQUFRemdCLFNBQVgsRUFBcUI7QUFBQyxlQUFLdWdCLFlBQUwsQ0FBa0JsZixFQUFFb2YsR0FBcEI7QUFBeUIsU0FBL0MsTUFBbUQ7QUFBQyxjQUFHcGYsRUFBRTJoQixJQUFGLEtBQVNoakIsU0FBWixFQUFzQjtBQUFDLGlCQUFLMGhCLFNBQUwsQ0FBZXJnQixFQUFFMmhCLElBQWpCO0FBQXVCO0FBQUM7QUFBQztBQUFDLFNBQUczaEIsRUFBRTZoQixNQUFGLEtBQVcsSUFBZCxFQUFtQjtBQUFDLFdBQUtELFVBQUwsR0FBZ0IsSUFBaEI7QUFBcUI7QUFBQztBQUFDLENBQXJ3QixDQUFzd0JsakIsTUFBTUUsSUFBTixDQUFXQyxNQUFYLENBQWtCbVksS0FBS2tGLElBQUwsQ0FBVW9CLGtCQUE1QixFQUErQ3RHLEtBQUtrRixJQUFMLENBQVVtRCxlQUF6RCxFQUEwRXJJLEtBQUtrRixJQUFMLENBQVVxQixXQUFWLEdBQXNCLFVBQVN2ZCxDQUFULEVBQVc7QUFBQ2dYLE9BQUtrRixJQUFMLENBQVVxQixXQUFWLENBQXNCbGUsVUFBdEIsQ0FBaUNELFdBQWpDLENBQTZDdUMsSUFBN0MsQ0FBa0QsSUFBbEQsRUFBdUQzQixDQUF2RCxFQUEwRCxLQUFLMmUsRUFBTCxHQUFRLElBQVIsQ0FBYSxLQUFLRixnQkFBTCxHQUFzQixZQUFVO0FBQUMsUUFBSWhmLElBQUUsRUFBTixDQUFTLEtBQUksSUFBSUYsSUFBRSxDQUFWLEVBQVlBLElBQUUsS0FBS2loQixTQUFMLENBQWUzZ0IsTUFBN0IsRUFBb0NOLEdBQXBDLEVBQXdDO0FBQUMsVUFBSUwsSUFBRSxLQUFLc2hCLFNBQUwsQ0FBZWpoQixDQUFmLENBQU4sQ0FBd0JFLEtBQUdQLEVBQUU4ZSxhQUFGLEVBQUg7QUFBcUIsVUFBS00sRUFBTCxHQUFRN2UsQ0FBUixDQUFVLE9BQU8sS0FBSzZlLEVBQVo7QUFBZSxHQUF6SjtBQUEwSixDQUFuUSxDQUFvUTVmLE1BQU1FLElBQU4sQ0FBV0MsTUFBWCxDQUFrQm1ZLEtBQUtrRixJQUFMLENBQVVxQixXQUE1QixFQUF3Q3ZHLEtBQUtrRixJQUFMLENBQVVvRSxxQkFBbEQsRUFBeUV0SixLQUFLa0YsSUFBTCxDQUFVc0IsTUFBVixHQUFpQixVQUFTeGQsQ0FBVCxFQUFXO0FBQUNnWCxPQUFLa0YsSUFBTCxDQUFVc0IsTUFBVixDQUFpQm5lLFVBQWpCLENBQTRCRCxXQUE1QixDQUF3Q3VDLElBQXhDLENBQTZDLElBQTdDLEVBQWtEM0IsQ0FBbEQsRUFBcUQsS0FBSzJlLEVBQUwsR0FBUSxJQUFSLENBQWEsS0FBS21ELFFBQUwsR0FBYyxJQUFkLENBQW1CLEtBQUtyRCxnQkFBTCxHQUFzQixZQUFVO0FBQUMsUUFBSWxmLElBQUUsSUFBSWdKLEtBQUosRUFBTixDQUFrQixLQUFJLElBQUk5SSxJQUFFLENBQVYsRUFBWUEsSUFBRSxLQUFLK2dCLFNBQUwsQ0FBZTNnQixNQUE3QixFQUFvQ0osR0FBcEMsRUFBd0M7QUFBQyxVQUFJUCxJQUFFLEtBQUtzaEIsU0FBTCxDQUFlL2dCLENBQWYsQ0FBTixDQUF3QkYsRUFBRXVDLElBQUYsQ0FBTzVDLEVBQUU4ZSxhQUFGLEVBQVA7QUFBMEIsU0FBRyxLQUFLOEQsUUFBTCxJQUFlLElBQWxCLEVBQXVCO0FBQUN2aUIsUUFBRXdpQixJQUFGO0FBQVMsVUFBS3pELEVBQUwsR0FBUS9lLEVBQUUyQyxJQUFGLENBQU8sRUFBUCxDQUFSLENBQW1CLE9BQU8sS0FBS29jLEVBQVo7QUFBZSxHQUFqTixDQUFrTixJQUFHLE9BQU90ZSxDQUFQLElBQVUsV0FBYixFQUF5QjtBQUFDLFFBQUcsT0FBT0EsRUFBRWdpQixRQUFULElBQW1CLFdBQW5CLElBQWdDaGlCLEVBQUVnaUIsUUFBRixJQUFZLEtBQS9DLEVBQXFEO0FBQUMsV0FBS0YsUUFBTCxHQUFjLEtBQWQ7QUFBb0I7QUFBQztBQUFDLENBQTFhLENBQTJhcGpCLE1BQU1FLElBQU4sQ0FBV0MsTUFBWCxDQUFrQm1ZLEtBQUtrRixJQUFMLENBQVVzQixNQUE1QixFQUFtQ3hHLEtBQUtrRixJQUFMLENBQVVvRSxxQkFBN0MsRUFBb0V0SixLQUFLa0YsSUFBTCxDQUFVdUIsZUFBVixHQUEwQixVQUFTemQsQ0FBVCxFQUFXO0FBQUNnWCxPQUFLa0YsSUFBTCxDQUFVdUIsZUFBVixDQUEwQnBlLFVBQTFCLENBQXFDRCxXQUFyQyxDQUFpRHVDLElBQWpELENBQXNELElBQXRELEVBQTRELEtBQUtnZCxFQUFMLEdBQVEsSUFBUixDQUFhLEtBQUtMLEVBQUwsR0FBUSxFQUFSLENBQVcsS0FBSzJELFVBQUwsR0FBZ0IsSUFBaEIsQ0FBcUIsS0FBS0MsVUFBTCxHQUFnQixJQUFoQixDQUFxQixLQUFLQyxhQUFMLEdBQW1CLFVBQVM1aUIsQ0FBVCxFQUFXRSxDQUFYLEVBQWFQLENBQWIsRUFBZTtBQUFDLFNBQUt5ZixFQUFMLEdBQVFsZixDQUFSLENBQVUsS0FBS3dpQixVQUFMLEdBQWdCMWlCLENBQWhCLENBQWtCLEtBQUsyaUIsVUFBTCxHQUFnQmhqQixDQUFoQixDQUFrQixJQUFHLEtBQUsraUIsVUFBUixFQUFtQjtBQUFDLFdBQUszRCxFQUFMLEdBQVEsS0FBSzRELFVBQUwsQ0FBZ0JsRSxhQUFoQixFQUFSLENBQXdDLEtBQUtPLElBQUwsR0FBVSxJQUFWLENBQWUsS0FBS0MsVUFBTCxHQUFnQixJQUFoQjtBQUFxQixLQUFoRyxNQUFvRztBQUFDLFdBQUtGLEVBQUwsR0FBUSxJQUFSLENBQWEsS0FBS0MsSUFBTCxHQUFVcmYsRUFBRThlLGFBQUYsRUFBVixDQUE0QixLQUFLTyxJQUFMLEdBQVUsS0FBS0EsSUFBTCxDQUFVdkMsT0FBVixDQUFrQixLQUFsQixFQUF3QnZjLENBQXhCLENBQVYsQ0FBcUMsS0FBSytlLFVBQUwsR0FBZ0IsS0FBaEI7QUFBc0I7QUFBQyxHQUEzUixDQUE0UixLQUFLQyxnQkFBTCxHQUFzQixZQUFVO0FBQUMsV0FBTyxLQUFLSCxFQUFaO0FBQWUsR0FBaEQsQ0FBaUQsSUFBRyxPQUFPdGUsQ0FBUCxJQUFVLFdBQWIsRUFBeUI7QUFBQyxRQUFHLE9BQU9BLEVBQUU0ZCxHQUFULElBQWMsV0FBakIsRUFBNkI7QUFBQyxXQUFLZSxFQUFMLEdBQVEzZSxFQUFFNGQsR0FBVjtBQUFjLFNBQUcsT0FBTzVkLEVBQUU2ZCxRQUFULElBQW1CLFdBQXRCLEVBQWtDO0FBQUMsV0FBS29FLFVBQUwsR0FBZ0JqaUIsRUFBRTZkLFFBQWxCO0FBQTJCLFNBQUcsT0FBTzdkLEVBQUU4ZCxHQUFULElBQWMsV0FBakIsRUFBNkI7QUFBQyxXQUFLb0UsVUFBTCxHQUFnQmxpQixFQUFFOGQsR0FBbEIsQ0FBc0IsS0FBS3FFLGFBQUwsQ0FBbUIsS0FBS0YsVUFBeEIsRUFBbUMsS0FBS3RELEVBQXhDLEVBQTJDLEtBQUt1RCxVQUFoRDtBQUE0RDtBQUFDO0FBQUMsQ0FBdnVCLENBQXd1QnhqQixNQUFNRSxJQUFOLENBQVdDLE1BQVgsQ0FBa0JtWSxLQUFLa0YsSUFBTCxDQUFVdUIsZUFBNUIsRUFBNEN6RyxLQUFLa0YsSUFBTCxDQUFVa0MsVUFBdEQ7QUFDNW5lLElBQUlnRSxVQUFRLElBQUksWUFBVSxDQUFFLENBQWhCLEVBQVosQ0FBNkJBLFFBQVFDLFFBQVIsR0FBaUIsVUFBUzVpQixDQUFULEVBQVdPLENBQVgsRUFBYTtBQUFDLE1BQUdQLEVBQUU0QyxNQUFGLENBQVNyQyxJQUFFLENBQVgsRUFBYSxDQUFiLEtBQWlCLEdBQXBCLEVBQXdCO0FBQUMsV0FBTyxDQUFQO0FBQVMsT0FBSVQsSUFBRTZDLFNBQVMzQyxFQUFFNEMsTUFBRixDQUFTckMsSUFBRSxDQUFYLEVBQWEsQ0FBYixDQUFULENBQU4sQ0FBZ0MsSUFBR1QsS0FBRyxDQUFOLEVBQVE7QUFBQyxXQUFPLENBQUMsQ0FBUjtBQUFVLE9BQUcsSUFBRUEsQ0FBRixJQUFLQSxJQUFFLEVBQVYsRUFBYTtBQUFDLFdBQU9BLElBQUUsQ0FBVDtBQUFXLFVBQU8sQ0FBQyxDQUFSO0FBQVUsQ0FBdkosQ0FBd0o2aUIsUUFBUUUsSUFBUixHQUFhLFVBQVM3aUIsQ0FBVCxFQUFXRixDQUFYLEVBQWE7QUFBQyxNQUFJUyxJQUFFb2lCLFFBQVFDLFFBQVIsQ0FBaUI1aUIsQ0FBakIsRUFBbUJGLENBQW5CLENBQU4sQ0FBNEIsSUFBR1MsSUFBRSxDQUFMLEVBQU87QUFBQyxXQUFNLEVBQU47QUFBUyxVQUFPUCxFQUFFNEMsTUFBRixDQUFTOUMsSUFBRSxDQUFYLEVBQWFTLElBQUUsQ0FBZixDQUFQO0FBQXlCLENBQWpHLENBQWtHb2lCLFFBQVFHLFFBQVIsR0FBaUIsVUFBU3JqQixDQUFULEVBQVdjLENBQVgsRUFBYTtBQUFDLE1BQUlQLENBQUosRUFBTUYsQ0FBTixDQUFRRSxJQUFFMmlCLFFBQVFFLElBQVIsQ0FBYXBqQixDQUFiLEVBQWVjLENBQWYsQ0FBRixDQUFvQixJQUFHUCxLQUFHLEVBQU4sRUFBUztBQUFDLFdBQU8sQ0FBQyxDQUFSO0FBQVUsT0FBR0EsRUFBRTRDLE1BQUYsQ0FBUyxDQUFULEVBQVcsQ0FBWCxNQUFnQixHQUFuQixFQUF1QjtBQUFDOUMsUUFBRSxJQUFJb0osVUFBSixDQUFlbEosRUFBRTRDLE1BQUYsQ0FBUyxDQUFULENBQWYsRUFBMkIsRUFBM0IsQ0FBRjtBQUFpQyxHQUF6RCxNQUE2RDtBQUFDOUMsUUFBRSxJQUFJb0osVUFBSixDQUFlbEosQ0FBZixFQUFpQixFQUFqQixDQUFGO0FBQXVCLFVBQU9GLEVBQUV5UCxRQUFGLEVBQVA7QUFBb0IsQ0FBeEwsQ0FBeUxvVCxRQUFRSSxPQUFSLEdBQWdCLFVBQVMvaUIsQ0FBVCxFQUFXRixDQUFYLEVBQWE7QUFBQyxNQUFJUyxJQUFFb2lCLFFBQVFDLFFBQVIsQ0FBaUI1aUIsQ0FBakIsRUFBbUJGLENBQW5CLENBQU4sQ0FBNEIsSUFBR1MsSUFBRSxDQUFMLEVBQU87QUFBQyxXQUFPQSxDQUFQO0FBQVMsVUFBT1QsSUFBRSxDQUFDUyxJQUFFLENBQUgsSUFBTSxDQUFmO0FBQWlCLENBQTVGLENBQTZGb2lCLFFBQVFLLElBQVIsR0FBYSxVQUFTdmpCLENBQVQsRUFBV2MsQ0FBWCxFQUFhO0FBQUMsTUFBSVAsSUFBRTJpQixRQUFRSSxPQUFSLENBQWdCdGpCLENBQWhCLEVBQWtCYyxDQUFsQixDQUFOLENBQTJCLElBQUlULElBQUU2aUIsUUFBUUcsUUFBUixDQUFpQnJqQixDQUFqQixFQUFtQmMsQ0FBbkIsQ0FBTixDQUE0QixPQUFPZCxFQUFFbUQsTUFBRixDQUFTNUMsQ0FBVCxFQUFXRixJQUFFLENBQWIsQ0FBUDtBQUF1QixDQUF6RyxDQUEwRzZpQixRQUFRTSxNQUFSLEdBQWUsVUFBU25qQixDQUFULEVBQVdTLENBQVgsRUFBYTtBQUFDLFNBQU9ULEVBQUU4QyxNQUFGLENBQVNyQyxDQUFULEVBQVcsQ0FBWCxJQUFjb2lCLFFBQVFFLElBQVIsQ0FBYS9pQixDQUFiLEVBQWVTLENBQWYsQ0FBZCxHQUFnQ29pQixRQUFRSyxJQUFSLENBQWFsakIsQ0FBYixFQUFlUyxDQUFmLENBQXZDO0FBQXlELENBQXRGLENBQXVGb2lCLFFBQVFPLGlCQUFSLEdBQTBCLFVBQVN6akIsQ0FBVCxFQUFXYyxDQUFYLEVBQWE7QUFBQyxNQUFJUCxJQUFFMmlCLFFBQVFJLE9BQVIsQ0FBZ0J0akIsQ0FBaEIsRUFBa0JjLENBQWxCLENBQU4sQ0FBMkIsSUFBSVQsSUFBRTZpQixRQUFRRyxRQUFSLENBQWlCcmpCLENBQWpCLEVBQW1CYyxDQUFuQixDQUFOLENBQTRCLE9BQU9QLElBQUVGLElBQUUsQ0FBWDtBQUFhLENBQTVHLENBQTZHNmlCLFFBQVFRLFdBQVIsR0FBb0IsVUFBU3BqQixDQUFULEVBQVdSLENBQVgsRUFBYTtBQUFDLE1BQUlXLElBQUV5aUIsT0FBTixDQUFjLElBQUl0akIsSUFBRSxJQUFJeUosS0FBSixFQUFOLENBQWtCLElBQUkzSSxJQUFFRCxFQUFFNmlCLE9BQUYsQ0FBVWhqQixDQUFWLEVBQVlSLENBQVosQ0FBTixDQUFxQixJQUFHUSxFQUFFNkMsTUFBRixDQUFTckQsQ0FBVCxFQUFXLENBQVgsS0FBZSxJQUFsQixFQUF1QjtBQUFDRixNQUFFZ0QsSUFBRixDQUFPbEMsSUFBRSxDQUFUO0FBQVksR0FBcEMsTUFBd0M7QUFBQ2QsTUFBRWdELElBQUYsQ0FBT2xDLENBQVA7QUFBVSxPQUFJRSxJQUFFSCxFQUFFNGlCLFFBQUYsQ0FBVy9pQixDQUFYLEVBQWFSLENBQWIsQ0FBTixDQUFzQixJQUFJUyxJQUFFRyxDQUFOLENBQVEsSUFBSVYsSUFBRSxDQUFOLENBQVEsT0FBTSxDQUFOLEVBQVE7QUFBQyxRQUFJSyxJQUFFSSxFQUFFZ2pCLGlCQUFGLENBQW9CbmpCLENBQXBCLEVBQXNCQyxDQUF0QixDQUFOLENBQStCLElBQUdGLEtBQUcsSUFBSCxJQUFVQSxJQUFFSyxDQUFGLElBQU1FLElBQUUsQ0FBckIsRUFBeUI7QUFBQztBQUFNLFNBQUdaLEtBQUcsR0FBTixFQUFVO0FBQUM7QUFBTSxPQUFFNEMsSUFBRixDQUFPdkMsQ0FBUCxFQUFVRSxJQUFFRixDQUFGLENBQUlMO0FBQUksVUFBT0osQ0FBUDtBQUFTLENBQXBTLENBQXFTc2pCLFFBQVFTLGNBQVIsR0FBdUIsVUFBUzNqQixDQUFULEVBQVdLLENBQVgsRUFBYUMsQ0FBYixFQUFlO0FBQUMsTUFBSUMsSUFBRTJpQixRQUFRUSxXQUFSLENBQW9CMWpCLENBQXBCLEVBQXNCSyxDQUF0QixDQUFOLENBQStCLE9BQU9FLEVBQUVELENBQUYsQ0FBUDtBQUFZLENBQWxGLENBQW1GNGlCLFFBQVFVLFlBQVIsR0FBcUIsVUFBU3RqQixDQUFULEVBQVdOLENBQVgsRUFBYU8sQ0FBYixFQUFlRyxDQUFmLEVBQWlCO0FBQUMsTUFBSWQsSUFBRXNqQixPQUFOLENBQWMsSUFBSXBqQixDQUFKLEVBQU1PLENBQU4sQ0FBUSxJQUFHRSxFQUFFSSxNQUFGLElBQVUsQ0FBYixFQUFlO0FBQUMsUUFBR0QsTUFBSWpCLFNBQVAsRUFBaUI7QUFBQyxVQUFHYSxFQUFFNkMsTUFBRixDQUFTbkQsQ0FBVCxFQUFXLENBQVgsTUFBZ0JVLENBQW5CLEVBQXFCO0FBQUMsY0FBSyxpQ0FBK0JKLEVBQUU2QyxNQUFGLENBQVNuRCxDQUFULEVBQVcsQ0FBWCxDQUEvQixHQUE2QyxJQUE3QyxHQUFrRFUsQ0FBdkQ7QUFBeUQ7QUFBQyxZQUFPVixDQUFQO0FBQVMsT0FBRU8sRUFBRXdjLEtBQUYsRUFBRixDQUFZMWMsSUFBRVQsRUFBRThqQixXQUFGLENBQWNwakIsQ0FBZCxFQUFnQk4sQ0FBaEIsQ0FBRixDQUFxQixPQUFPSixFQUFFZ2tCLFlBQUYsQ0FBZXRqQixDQUFmLEVBQWlCRCxFQUFFUCxDQUFGLENBQWpCLEVBQXNCUyxDQUF0QixFQUF3QkcsQ0FBeEIsQ0FBUDtBQUFrQyxDQUEzUCxDQUE0UHdpQixRQUFRVyxZQUFSLEdBQXFCLFVBQVM3akIsQ0FBVCxFQUFXTyxDQUFYLEVBQWFGLENBQWIsRUFBZVAsQ0FBZixFQUFpQjtBQUFDLE1BQUlRLElBQUU0aUIsT0FBTixDQUFjLElBQUlwaUIsSUFBRVIsRUFBRXNqQixZQUFGLENBQWU1akIsQ0FBZixFQUFpQk8sQ0FBakIsRUFBbUJGLENBQW5CLENBQU4sQ0FBNEIsSUFBR1MsTUFBSXJCLFNBQVAsRUFBaUI7QUFBQyxVQUFLLDJCQUFMO0FBQWlDLE9BQUdLLE1BQUlMLFNBQVAsRUFBaUI7QUFBQyxRQUFHTyxFQUFFbUQsTUFBRixDQUFTckMsQ0FBVCxFQUFXLENBQVgsS0FBZWhCLENBQWxCLEVBQW9CO0FBQUMsWUFBSyxpQ0FBK0JFLEVBQUVtRCxNQUFGLENBQVNyQyxDQUFULEVBQVcsQ0FBWCxDQUEvQixHQUE2QyxJQUE3QyxHQUFrRGhCLENBQXZEO0FBQXlEO0FBQUMsVUFBT1EsRUFBRWtqQixNQUFGLENBQVN4akIsQ0FBVCxFQUFXYyxDQUFYLENBQVA7QUFBcUIsQ0FBMVAsQ0FBMlBvaUIsUUFBUVksVUFBUixHQUFtQixVQUFTeGpCLENBQVQsRUFBV0MsQ0FBWCxFQUFhRixDQUFiLEVBQWVULENBQWYsRUFBaUJjLENBQWpCLEVBQW1CO0FBQUMsTUFBSVosSUFBRW9qQixPQUFOLENBQWMsSUFBSXBpQixDQUFKLEVBQU1kLENBQU4sQ0FBUWMsSUFBRWhCLEVBQUU4akIsWUFBRixDQUFldGpCLENBQWYsRUFBaUJDLENBQWpCLEVBQW1CRixDQUFuQixFQUFxQlQsQ0FBckIsQ0FBRixDQUEwQixJQUFHa0IsTUFBSXJCLFNBQVAsRUFBaUI7QUFBQyxVQUFLLDJCQUFMO0FBQWlDLE9BQUVLLEVBQUV5akIsSUFBRixDQUFPampCLENBQVAsRUFBU1EsQ0FBVCxDQUFGLENBQWMsSUFBR0osTUFBSSxJQUFQLEVBQVk7QUFBQ1YsUUFBRUEsRUFBRW1ELE1BQUYsQ0FBUyxDQUFULENBQUY7QUFBYyxVQUFPbkQsQ0FBUDtBQUFTLENBQTVMLENBQTZMa2pCLFFBQVFhLFdBQVIsR0FBb0IsVUFBU3pqQixDQUFULEVBQVc7QUFBQyxNQUFJVCxJQUFFLFNBQUZBLENBQUUsQ0FBU1EsQ0FBVCxFQUFXUyxDQUFYLEVBQWE7QUFBQyxRQUFHVCxFQUFFTSxNQUFGLElBQVVHLENBQWIsRUFBZTtBQUFDLGFBQU9ULENBQVA7QUFBUyxZQUFPLElBQUlnSixLQUFKLENBQVV2SSxJQUFFVCxFQUFFTSxNQUFKLEdBQVcsQ0FBckIsRUFBd0JxQyxJQUF4QixDQUE2QixHQUE3QixJQUFrQzNDLENBQXpDO0FBQTJDLEdBQXhGLENBQXlGLElBQUlPLElBQUUsRUFBTixDQUFTLElBQUlRLElBQUVkLEVBQUU2QyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBTixDQUFvQixJQUFJckQsSUFBRW9ELFNBQVM5QixDQUFULEVBQVcsRUFBWCxDQUFOLENBQXFCUixFQUFFLENBQUYsSUFBSyxJQUFJeUMsTUFBSixDQUFXa0MsS0FBS2MsS0FBTCxDQUFXdkcsSUFBRSxFQUFiLENBQVgsQ0FBTCxDQUFrQ2MsRUFBRSxDQUFGLElBQUssSUFBSXlDLE1BQUosQ0FBV3ZELElBQUUsRUFBYixDQUFMLENBQXNCLElBQUkrQyxJQUFFdkMsRUFBRTZDLE1BQUYsQ0FBUyxDQUFULENBQU4sQ0FBa0IsSUFBSXRDLElBQUUsRUFBTixDQUFTLEtBQUksSUFBSWpCLElBQUUsQ0FBVixFQUFZQSxJQUFFaUQsRUFBRWxDLE1BQUYsR0FBUyxDQUF2QixFQUF5QmYsR0FBekIsRUFBNkI7QUFBQ2lCLE1BQUUrQixJQUFGLENBQU9NLFNBQVNMLEVBQUVNLE1BQUYsQ0FBU3ZELElBQUUsQ0FBWCxFQUFhLENBQWIsQ0FBVCxFQUF5QixFQUF6QixDQUFQO0FBQXFDLE9BQUlhLElBQUUsRUFBTixDQUFTLElBQUlULElBQUUsRUFBTixDQUFTLEtBQUksSUFBSUosSUFBRSxDQUFWLEVBQVlBLElBQUVpQixFQUFFRixNQUFoQixFQUF1QmYsR0FBdkIsRUFBMkI7QUFBQyxRQUFHaUIsRUFBRWpCLENBQUYsSUFBSyxHQUFSLEVBQVk7QUFBQ0ksVUFBRUEsSUFBRUgsRUFBRSxDQUFDZ0IsRUFBRWpCLENBQUYsSUFBSyxHQUFOLEVBQVdnQyxRQUFYLENBQW9CLENBQXBCLENBQUYsRUFBeUIsQ0FBekIsQ0FBSjtBQUFnQyxLQUE3QyxNQUFpRDtBQUFDNUIsVUFBRUEsSUFBRUgsRUFBRSxDQUFDZ0IsRUFBRWpCLENBQUYsSUFBSyxHQUFOLEVBQVdnQyxRQUFYLENBQW9CLENBQXBCLENBQUYsRUFBeUIsQ0FBekIsQ0FBSixDQUFnQ25CLEVBQUVtQyxJQUFGLENBQU8sSUFBSVMsTUFBSixDQUFXSCxTQUFTbEQsQ0FBVCxFQUFXLENBQVgsQ0FBWCxDQUFQLEVBQWtDQSxJQUFFLEVBQUY7QUFBSztBQUFDLE9BQUlrQixJQUFFTixFQUFFb0MsSUFBRixDQUFPLEdBQVAsQ0FBTixDQUFrQixJQUFHdkMsRUFBRUUsTUFBRixHQUFTLENBQVosRUFBYztBQUFDTyxRQUFFQSxJQUFFLEdBQUYsR0FBTVQsRUFBRXVDLElBQUYsQ0FBTyxHQUFQLENBQVI7QUFBb0IsVUFBTzlCLENBQVA7QUFBUyxDQUF2aUIsQ0FBd2lCZ2lCLFFBQVFjLElBQVIsR0FBYSxVQUFTN2hCLENBQVQsRUFBVzVCLENBQVgsRUFBYUssQ0FBYixFQUFlaEIsQ0FBZixFQUFpQjtBQUFDLE1BQUl1QixJQUFFK2hCLE9BQU4sQ0FBYyxJQUFJemlCLElBQUVVLEVBQUVvaUIsSUFBUixDQUFhLElBQUl4YixJQUFFNUcsRUFBRTZpQixJQUFSLENBQWEsSUFBSTdmLElBQUVoRCxFQUFFdWlCLFdBQVIsQ0FBb0IsSUFBSXBqQixJQUFFNkIsQ0FBTixDQUFRLElBQUdBLGFBQWEyVixLQUFLa0YsSUFBTCxDQUFVa0MsVUFBMUIsRUFBcUM7QUFBQzVlLFFBQUU2QixFQUFFMmMsYUFBRixFQUFGO0FBQW9CLE9BQUkxYyxJQUFFLFNBQUZBLENBQUUsQ0FBUzBGLENBQVQsRUFBV3BILENBQVgsRUFBYTtBQUFDLFFBQUdvSCxFQUFFbkgsTUFBRixJQUFVRCxJQUFFLENBQWYsRUFBaUI7QUFBQyxhQUFPb0gsQ0FBUDtBQUFTLEtBQTNCLE1BQStCO0FBQUMsVUFBSXhELElBQUV3RCxFQUFFM0UsTUFBRixDQUFTLENBQVQsRUFBV3pDLENBQVgsSUFBYyxXQUFkLEdBQTBCb0gsRUFBRW5ILE1BQUYsR0FBUyxDQUFuQyxHQUFxQyxVQUFyQyxHQUFnRG1ILEVBQUUzRSxNQUFGLENBQVMyRSxFQUFFbkgsTUFBRixHQUFTRCxDQUFsQixFQUFvQkEsQ0FBcEIsQ0FBdEQsQ0FBNkUsT0FBTzRELENBQVA7QUFBUztBQUFDLEdBQTNJLENBQTRJLElBQUcvRCxNQUFJZCxTQUFQLEVBQWlCO0FBQUNjLFFBQUUsRUFBQzBqQixrQkFBaUIsRUFBbEIsRUFBRjtBQUF3QixPQUFHcmpCLE1BQUluQixTQUFQLEVBQWlCO0FBQUNtQixRQUFFLENBQUY7QUFBSSxPQUFHaEIsTUFBSUgsU0FBUCxFQUFpQjtBQUFDRyxRQUFFLEVBQUY7QUFBSyxPQUFJd0UsSUFBRTdELEVBQUUwakIsZ0JBQVIsQ0FBeUIsSUFBRzNqQixFQUFFNkMsTUFBRixDQUFTdkMsQ0FBVCxFQUFXLENBQVgsS0FBZSxJQUFsQixFQUF1QjtBQUFDLFFBQUlmLElBQUVZLEVBQUVILENBQUYsRUFBSU0sQ0FBSixDQUFOLENBQWEsSUFBR2YsS0FBRyxJQUFOLEVBQVc7QUFBQyxhQUFPRCxJQUFFLGlCQUFUO0FBQTJCLEtBQXZDLE1BQTJDO0FBQUMsYUFBT0EsSUFBRSxnQkFBVDtBQUEwQjtBQUFDLE9BQUdVLEVBQUU2QyxNQUFGLENBQVN2QyxDQUFULEVBQVcsQ0FBWCxLQUFlLElBQWxCLEVBQXVCO0FBQUMsUUFBSWYsSUFBRVksRUFBRUgsQ0FBRixFQUFJTSxDQUFKLENBQU4sQ0FBYSxPQUFPaEIsSUFBRSxVQUFGLEdBQWF3QyxFQUFFdkMsQ0FBRixFQUFJdUUsQ0FBSixDQUFiLEdBQW9CLElBQTNCO0FBQWdDLE9BQUc5RCxFQUFFNkMsTUFBRixDQUFTdkMsQ0FBVCxFQUFXLENBQVgsS0FBZSxJQUFsQixFQUF1QjtBQUFDLFFBQUlmLElBQUVZLEVBQUVILENBQUYsRUFBSU0sQ0FBSixDQUFOLENBQWEsT0FBT2hCLElBQUUsWUFBRixHQUFld0MsRUFBRXZDLENBQUYsRUFBSXVFLENBQUosQ0FBZixHQUFzQixJQUE3QjtBQUFrQyxPQUFHOUQsRUFBRTZDLE1BQUYsQ0FBU3ZDLENBQVQsRUFBVyxDQUFYLEtBQWUsSUFBbEIsRUFBdUI7QUFBQyxRQUFJZixJQUFFWSxFQUFFSCxDQUFGLEVBQUlNLENBQUosQ0FBTixDQUFhLElBQUdPLEVBQUUraUIsU0FBRixDQUFZcmtCLENBQVosQ0FBSCxFQUFrQjtBQUFDLFVBQUlnQixJQUFFakIsSUFBRSw2QkFBUixDQUFzQ2lCLElBQUVBLElBQUVrSCxFQUFFbEksQ0FBRixFQUFJVSxDQUFKLEVBQU0sQ0FBTixFQUFRWCxJQUFFLElBQVYsQ0FBSixDQUFvQixPQUFPaUIsQ0FBUDtBQUFTLEtBQXRGLE1BQTBGO0FBQUMsYUFBT2pCLElBQUUsY0FBRixHQUFpQndDLEVBQUV2QyxDQUFGLEVBQUl1RSxDQUFKLENBQWpCLEdBQXdCLElBQS9CO0FBQW9DO0FBQUMsT0FBRzlELEVBQUU2QyxNQUFGLENBQVN2QyxDQUFULEVBQVcsQ0FBWCxLQUFlLElBQWxCLEVBQXVCO0FBQUMsV0FBT2hCLElBQUUsUUFBVDtBQUFrQixPQUFHVSxFQUFFNkMsTUFBRixDQUFTdkMsQ0FBVCxFQUFXLENBQVgsS0FBZSxJQUFsQixFQUF1QjtBQUFDLFFBQUlpQyxJQUFFcEMsRUFBRUgsQ0FBRixFQUFJTSxDQUFKLENBQU4sQ0FBYSxJQUFJRSxJQUFFZ1gsS0FBS2tGLElBQUwsQ0FBVUMsUUFBVixDQUFtQjhCLFdBQW5CLENBQStCbGMsQ0FBL0IsQ0FBTixDQUF3QyxJQUFJekIsSUFBRTBXLEtBQUtrRixJQUFMLENBQVVvRixJQUFWLENBQWVDLEdBQWYsQ0FBbUI4QixRQUFuQixDQUE0QnJqQixDQUE1QixDQUFOLENBQXFDLElBQUlULElBQUVTLEVBQUVnYyxPQUFGLENBQVUsS0FBVixFQUFnQixHQUFoQixDQUFOLENBQTJCLElBQUcxYixLQUFHLEVBQU4sRUFBUztBQUFDLGFBQU94QixJQUFFLG1CQUFGLEdBQXNCd0IsQ0FBdEIsR0FBd0IsSUFBeEIsR0FBNkJmLENBQTdCLEdBQStCLEtBQXRDO0FBQTRDLEtBQXRELE1BQTBEO0FBQUMsYUFBT1QsSUFBRSxvQkFBRixHQUF1QlMsQ0FBdkIsR0FBeUIsS0FBaEM7QUFBc0M7QUFBQyxPQUFHQyxFQUFFNkMsTUFBRixDQUFTdkMsQ0FBVCxFQUFXLENBQVgsS0FBZSxJQUFsQixFQUF1QjtBQUFDLFdBQU9oQixJQUFFLGNBQUYsR0FBaUJ3a0IsVUFBVTNqQixFQUFFSCxDQUFGLEVBQUlNLENBQUosQ0FBVixDQUFqQixHQUFtQyxLQUExQztBQUFnRCxPQUFHTixFQUFFNkMsTUFBRixDQUFTdkMsQ0FBVCxFQUFXLENBQVgsS0FBZSxJQUFsQixFQUF1QjtBQUFDLFdBQU9oQixJQUFFLG1CQUFGLEdBQXNCd2tCLFVBQVUzakIsRUFBRUgsQ0FBRixFQUFJTSxDQUFKLENBQVYsQ0FBdEIsR0FBd0MsS0FBL0M7QUFBcUQsT0FBR04sRUFBRTZDLE1BQUYsQ0FBU3ZDLENBQVQsRUFBVyxDQUFYLEtBQWUsSUFBbEIsRUFBdUI7QUFBQyxXQUFPaEIsSUFBRSxpQkFBRixHQUFvQndrQixVQUFVM2pCLEVBQUVILENBQUYsRUFBSU0sQ0FBSixDQUFWLENBQXBCLEdBQXNDLEtBQTdDO0FBQW1ELE9BQUdOLEVBQUU2QyxNQUFGLENBQVN2QyxDQUFULEVBQVcsQ0FBWCxLQUFlLElBQWxCLEVBQXVCO0FBQUMsV0FBT2hCLElBQUUsYUFBRixHQUFnQndrQixVQUFVM2pCLEVBQUVILENBQUYsRUFBSU0sQ0FBSixDQUFWLENBQWhCLEdBQWtDLEtBQXpDO0FBQStDLE9BQUdOLEVBQUU2QyxNQUFGLENBQVN2QyxDQUFULEVBQVcsQ0FBWCxLQUFlLElBQWxCLEVBQXVCO0FBQUMsV0FBT2hCLElBQUUsVUFBRixHQUFhd2tCLFVBQVUzakIsRUFBRUgsQ0FBRixFQUFJTSxDQUFKLENBQVYsQ0FBYixHQUErQixJQUF0QztBQUEyQyxPQUFHTixFQUFFNkMsTUFBRixDQUFTdkMsQ0FBVCxFQUFXLENBQVgsS0FBZSxJQUFsQixFQUF1QjtBQUFDLFdBQU9oQixJQUFFLGtCQUFGLEdBQXFCd2tCLFVBQVUzakIsRUFBRUgsQ0FBRixFQUFJTSxDQUFKLENBQVYsQ0FBckIsR0FBdUMsSUFBOUM7QUFBbUQsT0FBR04sRUFBRTZDLE1BQUYsQ0FBU3ZDLENBQVQsRUFBVyxDQUFYLEtBQWUsSUFBbEIsRUFBdUI7QUFBQyxRQUFHTixFQUFFNkMsTUFBRixDQUFTdkMsQ0FBVCxFQUFXLENBQVgsS0FBZSxNQUFsQixFQUF5QjtBQUFDLGFBQU9oQixJQUFFLGVBQVQ7QUFBeUIsU0FBSWlCLElBQUVqQixJQUFFLFlBQVIsQ0FBcUIsSUFBSUksSUFBRW1FLEVBQUU3RCxDQUFGLEVBQUlNLENBQUosQ0FBTixDQUFhLElBQUlkLElBQUVTLENBQU4sQ0FBUSxJQUFHLENBQUNQLEVBQUVXLE1BQUYsSUFBVSxDQUFWLElBQWFYLEVBQUVXLE1BQUYsSUFBVSxDQUF4QixLQUE0QkwsRUFBRTZDLE1BQUYsQ0FBU25ELEVBQUUsQ0FBRixDQUFULEVBQWMsQ0FBZCxLQUFrQixJQUE5QyxJQUFvRE0sRUFBRTZDLE1BQUYsQ0FBU25ELEVBQUVBLEVBQUVXLE1BQUYsR0FBUyxDQUFYLENBQVQsRUFBdUIsQ0FBdkIsS0FBMkIsSUFBbEYsRUFBdUY7QUFBQyxVQUFJUyxJQUFFRCxFQUFFa2pCLE9BQUYsQ0FBVTVqQixFQUFFSCxDQUFGLEVBQUlOLEVBQUUsQ0FBRixDQUFKLENBQVYsQ0FBTixDQUEyQixJQUFJdUMsSUFBRStoQixLQUFLcmhCLEtBQUwsQ0FBV3FoQixLQUFLcmlCLFNBQUwsQ0FBZTFCLENBQWYsQ0FBWCxDQUFOLENBQW9DZ0MsRUFBRWdpQixXQUFGLEdBQWNuakIsQ0FBZCxDQUFnQnRCLElBQUV5QyxDQUFGO0FBQUksVUFBSSxJQUFJZ0MsSUFBRSxDQUFWLEVBQVlBLElBQUV2RSxFQUFFVyxNQUFoQixFQUF1QjRELEdBQXZCLEVBQTJCO0FBQUMxRCxVQUFFQSxJQUFFa0gsRUFBRXpILENBQUYsRUFBSVIsQ0FBSixFQUFNRSxFQUFFdUUsQ0FBRixDQUFOLEVBQVczRSxJQUFFLElBQWIsQ0FBSjtBQUF1QixZQUFPaUIsQ0FBUDtBQUFTLE9BQUdQLEVBQUU2QyxNQUFGLENBQVN2QyxDQUFULEVBQVcsQ0FBWCxLQUFlLElBQWxCLEVBQXVCO0FBQUMsUUFBSUMsSUFBRWpCLElBQUUsT0FBUixDQUFnQixJQUFJSSxJQUFFbUUsRUFBRTdELENBQUYsRUFBSU0sQ0FBSixDQUFOLENBQWEsS0FBSSxJQUFJMkQsSUFBRSxDQUFWLEVBQVlBLElBQUV2RSxFQUFFVyxNQUFoQixFQUF1QjRELEdBQXZCLEVBQTJCO0FBQUMxRCxVQUFFQSxJQUFFa0gsRUFBRXpILENBQUYsRUFBSUMsQ0FBSixFQUFNUCxFQUFFdUUsQ0FBRixDQUFOLEVBQVczRSxJQUFFLElBQWIsQ0FBSjtBQUF1QixZQUFPaUIsQ0FBUDtBQUFTLE9BQUlnSCxJQUFFM0UsU0FBUzVDLEVBQUU2QyxNQUFGLENBQVN2QyxDQUFULEVBQVcsQ0FBWCxDQUFULEVBQXVCLEVBQXZCLENBQU4sQ0FBaUMsSUFBRyxDQUFDaUgsSUFBRSxHQUFILEtBQVMsQ0FBWixFQUFjO0FBQUMsUUFBSTNHLElBQUUyRyxJQUFFLEVBQVIsQ0FBVyxJQUFHLENBQUNBLElBQUUsRUFBSCxLQUFRLENBQVgsRUFBYTtBQUFDLFVBQUloSCxJQUFFakIsSUFBRSxHQUFGLEdBQU1zQixDQUFOLEdBQVEsS0FBZCxDQUFvQixJQUFJbEIsSUFBRW1FLEVBQUU3RCxDQUFGLEVBQUlNLENBQUosQ0FBTixDQUFhLEtBQUksSUFBSTJELElBQUUsQ0FBVixFQUFZQSxJQUFFdkUsRUFBRVcsTUFBaEIsRUFBdUI0RCxHQUF2QixFQUEyQjtBQUFDMUQsWUFBRUEsSUFBRWtILEVBQUV6SCxDQUFGLEVBQUlDLENBQUosRUFBTVAsRUFBRXVFLENBQUYsQ0FBTixFQUFXM0UsSUFBRSxJQUFiLENBQUo7QUFBdUIsY0FBT2lCLENBQVA7QUFBUyxLQUEzRyxNQUErRztBQUFDLFVBQUloQixJQUFFWSxFQUFFSCxDQUFGLEVBQUlNLENBQUosQ0FBTixDQUFhLElBQUdmLEVBQUVzRCxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsS0FBZSxVQUFsQixFQUE2QjtBQUFDdEQsWUFBRXVrQixVQUFVdmtCLENBQVYsQ0FBRjtBQUFlLFdBQUdVLEVBQUVna0IsV0FBRixLQUFnQixnQkFBaEIsSUFBa0NyakIsS0FBRyxDQUF4QyxFQUEwQztBQUFDckIsWUFBRXVrQixVQUFVdmtCLENBQVYsQ0FBRjtBQUFlLFdBQUlnQixJQUFFakIsSUFBRSxHQUFGLEdBQU1zQixDQUFOLEdBQVEsSUFBUixHQUFhckIsQ0FBYixHQUFlLElBQXJCLENBQTBCLE9BQU9nQixDQUFQO0FBQVM7QUFBQyxVQUFPakIsSUFBRSxVQUFGLEdBQWFVLEVBQUU2QyxNQUFGLENBQVN2QyxDQUFULEVBQVcsQ0FBWCxDQUFiLEdBQTJCLElBQTNCLEdBQWdDSCxFQUFFSCxDQUFGLEVBQUlNLENBQUosQ0FBaEMsR0FBdUMsSUFBOUM7QUFBbUQsQ0FBdjBFLENBQXcwRXNpQixRQUFRZ0IsU0FBUixHQUFrQixVQUFTNWpCLENBQVQsRUFBVztBQUFDLE1BQUlOLElBQUVrakIsT0FBTixDQUFjLElBQUc1aUIsRUFBRUssTUFBRixHQUFTLENBQVQsSUFBWSxDQUFmLEVBQWlCO0FBQUMsV0FBTyxLQUFQO0FBQWEsT0FBSUosSUFBRVAsRUFBRXFqQixRQUFGLENBQVcvaUIsQ0FBWCxFQUFhLENBQWIsQ0FBTixDQUFzQixJQUFJRCxJQUFFQyxFQUFFNkMsTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLENBQU4sQ0FBb0IsSUFBSXJELElBQUVFLEVBQUVvakIsSUFBRixDQUFPOWlCLENBQVAsRUFBUyxDQUFULENBQU4sQ0FBa0IsSUFBSVEsSUFBRVIsRUFBRUssTUFBRixHQUFTTixFQUFFTSxNQUFYLEdBQWtCYixFQUFFYSxNQUExQixDQUFpQyxJQUFHRyxLQUFHUCxJQUFFLENBQVIsRUFBVTtBQUFDLFdBQU8sSUFBUDtBQUFZLFVBQU8sS0FBUDtBQUFhLENBQTVNLENBQTZNMmlCLFFBQVFtQixPQUFSLEdBQWdCLFVBQVN2akIsQ0FBVCxFQUFXO0FBQUMsTUFBSVAsSUFBRXVYLEtBQUtrRixJQUFYLENBQWdCLElBQUdsRixLQUFLcFksSUFBTCxDQUFVMkQsTUFBVixDQUFpQm1oQixLQUFqQixDQUF1QjFqQixDQUF2QixDQUFILEVBQTZCO0FBQUNBLFFBQUVQLEVBQUUwYyxRQUFGLENBQVc4QixXQUFYLENBQXVCamUsQ0FBdkIsQ0FBRjtBQUE0QixPQUFJVCxJQUFFRSxFQUFFNmhCLElBQUYsQ0FBT0MsR0FBUCxDQUFXOEIsUUFBWCxDQUFvQnJqQixDQUFwQixDQUFOLENBQTZCLElBQUdULE1BQUksRUFBUCxFQUFVO0FBQUNBLFFBQUVTLENBQUY7QUFBSSxVQUFPVCxDQUFQO0FBQVMsQ0FBM0o7QUFDcDhKLElBQUl5WCxJQUFKLENBQVMsSUFBRyxPQUFPQSxJQUFQLElBQWEsV0FBYixJQUEwQixDQUFDQSxJQUE5QixFQUFtQztBQUFDLFVBMkVwQ0EsSUEzRW9DLFVBQUssRUFBTDtBQUFRLEtBQUcsT0FBT0EsS0FBS3BZLElBQVosSUFBa0IsV0FBbEIsSUFBK0IsQ0FBQ29ZLEtBQUtwWSxJQUF4QyxFQUE2QztBQUFDb1ksT0FBS3BZLElBQUwsR0FBVSxFQUFWO0FBQWEsTUFBS0EsSUFBTCxDQUFVMkQsTUFBVixHQUFpQixZQUFVLENBQUUsQ0FBN0IsQ0FBOEIsU0FBU29oQixPQUFULEdBQWtCLENBQUUsVUFBU0MsS0FBVCxDQUFlMWtCLENBQWYsRUFBaUI7QUFBQyxNQUFJSyxJQUFFLElBQUlnSixLQUFKLEVBQU4sQ0FBa0IsS0FBSSxJQUFJOUksSUFBRSxDQUFWLEVBQVlBLElBQUVQLEVBQUVXLE1BQWhCLEVBQXVCSixHQUF2QixFQUEyQjtBQUFDRixNQUFFRSxDQUFGLElBQUtQLEVBQUV1RCxVQUFGLENBQWFoRCxDQUFiLENBQUw7QUFBcUIsVUFBT0YsQ0FBUDtBQUFTLFVBQVNza0IsS0FBVCxDQUFldGtCLENBQWYsRUFBaUI7QUFBQyxNQUFJTCxJQUFFLEVBQU4sQ0FBUyxLQUFJLElBQUlPLElBQUUsQ0FBVixFQUFZQSxJQUFFRixFQUFFTSxNQUFoQixFQUF1QkosR0FBdkIsRUFBMkI7QUFBQ1AsUUFBRUEsSUFBRXFELE9BQU9DLFlBQVAsQ0FBb0JqRCxFQUFFRSxDQUFGLENBQXBCLENBQUo7QUFBOEIsVUFBT1AsQ0FBUDtBQUFTLFVBQVM0a0IsT0FBVCxDQUFpQnZrQixDQUFqQixFQUFtQjtBQUFDLE1BQUlDLElBQUUsRUFBTixDQUFTLEtBQUksSUFBSU4sSUFBRSxDQUFWLEVBQVlBLElBQUVLLEVBQUVNLE1BQWhCLEVBQXVCWCxHQUF2QixFQUEyQjtBQUFDLFFBQUlPLElBQUVGLEVBQUVMLENBQUYsRUFBSzRCLFFBQUwsQ0FBYyxFQUFkLENBQU4sQ0FBd0IsSUFBR3JCLEVBQUVJLE1BQUYsSUFBVSxDQUFiLEVBQWU7QUFBQ0osVUFBRSxNQUFJQSxDQUFOO0FBQVEsU0FBRUQsSUFBRUMsQ0FBSjtBQUFNLFVBQU9ELENBQVA7QUFBUyxVQUFTMGdCLE1BQVQsQ0FBZ0JsZ0IsQ0FBaEIsRUFBa0I7QUFBQyxTQUFPOGpCLFFBQVFGLE1BQU01akIsQ0FBTixDQUFSLENBQVA7QUFBeUIsVUFBUytqQixNQUFULENBQWdCL2pCLENBQWhCLEVBQWtCO0FBQUMsU0FBT2tJLFFBQVFnWSxPQUFPbGdCLENBQVAsQ0FBUixDQUFQO0FBQTBCLFVBQVNna0IsT0FBVCxDQUFpQmhrQixDQUFqQixFQUFtQjtBQUFDLFNBQU9pa0IsVUFBVS9iLFFBQVFnWSxPQUFPbGdCLENBQVAsQ0FBUixDQUFWLENBQVA7QUFBcUMsVUFBU2trQixPQUFULENBQWlCbGtCLENBQWpCLEVBQW1CO0FBQUMsU0FBTzZqQixNQUFNdmIsUUFBUTZiLFVBQVVua0IsQ0FBVixDQUFSLENBQU4sQ0FBUDtBQUFvQyxVQUFTaWtCLFNBQVQsQ0FBbUJqa0IsQ0FBbkIsRUFBcUI7QUFBQ0EsTUFBRUEsRUFBRWdjLE9BQUYsQ0FBVSxLQUFWLEVBQWdCLEVBQWhCLENBQUYsQ0FBc0JoYyxJQUFFQSxFQUFFZ2MsT0FBRixDQUFVLEtBQVYsRUFBZ0IsR0FBaEIsQ0FBRixDQUF1QmhjLElBQUVBLEVBQUVnYyxPQUFGLENBQVUsS0FBVixFQUFnQixHQUFoQixDQUFGLENBQXVCLE9BQU9oYyxDQUFQO0FBQVMsVUFBU21rQixTQUFULENBQW1CbmtCLENBQW5CLEVBQXFCO0FBQUMsTUFBR0EsRUFBRUgsTUFBRixHQUFTLENBQVQsSUFBWSxDQUFmLEVBQWlCO0FBQUNHLFFBQUVBLElBQUUsSUFBSjtBQUFTLEdBQTNCLE1BQStCO0FBQUMsUUFBR0EsRUFBRUgsTUFBRixHQUFTLENBQVQsSUFBWSxDQUFmLEVBQWlCO0FBQUNHLFVBQUVBLElBQUUsR0FBSjtBQUFRO0FBQUMsT0FBRUEsRUFBRWdjLE9BQUYsQ0FBVSxJQUFWLEVBQWUsR0FBZixDQUFGLENBQXNCaGMsSUFBRUEsRUFBRWdjLE9BQUYsQ0FBVSxJQUFWLEVBQWUsR0FBZixDQUFGLENBQXNCLE9BQU9oYyxDQUFQO0FBQVMsVUFBU29rQixTQUFULENBQW1CcGtCLENBQW5CLEVBQXFCO0FBQUMsTUFBR0EsRUFBRUgsTUFBRixHQUFTLENBQVQsSUFBWSxDQUFmLEVBQWlCO0FBQUNHLFFBQUUsTUFBSUEsQ0FBTjtBQUFRLFVBQU9pa0IsVUFBVS9iLFFBQVFsSSxDQUFSLENBQVYsQ0FBUDtBQUE2QixVQUFTcWtCLFNBQVQsQ0FBbUJya0IsQ0FBbkIsRUFBcUI7QUFBQyxTQUFPb0ksU0FBUytiLFVBQVVua0IsQ0FBVixDQUFULENBQVA7QUFBOEIsS0FBSXNrQixVQUFKLEVBQWVDLFVBQWYsQ0FBMEIsSUFBRyxPQUFPQyxNQUFQLEtBQWdCLFVBQW5CLEVBQThCO0FBQUMsVUEwQzFqQ0YsVUExQzBqQyxnQkFBVyxvQkFBU3RrQixDQUFULEVBQVc7QUFBQyxXQUFPaWtCLFVBQVUsSUFBSU8sTUFBSixDQUFXeGtCLENBQVgsRUFBYSxNQUFiLEVBQXFCYyxRQUFyQixDQUE4QixRQUE5QixDQUFWLENBQVA7QUFBMEQsR0FBakYsQ0FBa0YsUUEyQzVvQ3lqQixVQTNDNG9DLGdCQUFXLG9CQUFTdmtCLENBQVQsRUFBVztBQUFDLFdBQU8sSUFBSXdrQixNQUFKLENBQVdMLFVBQVVua0IsQ0FBVixDQUFYLEVBQXdCLFFBQXhCLEVBQWtDYyxRQUFsQyxDQUEyQyxNQUEzQyxDQUFQO0FBQTBELEdBQWpGO0FBQWtGLENBQW5NLE1BQXVNO0FBQUMsVUEwQ251Q3dqQixVQTFDbXVDLGdCQUFXLG9CQUFTdGtCLENBQVQsRUFBVztBQUFDLFdBQU9va0IsVUFBVUssWUFBWUMsc0JBQXNCMWtCLENBQXRCLENBQVosQ0FBVixDQUFQO0FBQXdELEdBQS9FLENBQWdGLFFBMkNuekN1a0IsVUEzQ216QyxnQkFBVyxvQkFBU3ZrQixDQUFULEVBQVc7QUFBQyxXQUFPMkMsbUJBQW1CZ2lCLFlBQVlOLFVBQVVya0IsQ0FBVixDQUFaLENBQW5CLENBQVA7QUFBcUQsR0FBNUU7QUFBNkUsVUFBUzRrQixTQUFULENBQW1CNWtCLENBQW5CLEVBQXFCO0FBQUMsU0FBT2tJLFFBQVF1YyxZQUFZQyxzQkFBc0Ixa0IsQ0FBdEIsQ0FBWixDQUFSLENBQVA7QUFBc0QsVUFBUzZrQixTQUFULENBQW1CN2tCLENBQW5CLEVBQXFCO0FBQUMsU0FBTzJDLG1CQUFtQmdpQixZQUFZdmMsU0FBU3BJLENBQVQsQ0FBWixDQUFuQixDQUFQO0FBQW9ELFVBQVNnZixTQUFULENBQW1CaGYsQ0FBbkIsRUFBcUI7QUFBQyxTQUFPeWtCLFlBQVlDLHNCQUFzQjFrQixDQUF0QixDQUFaLENBQVA7QUFBNkMsVUFBU3NqQixTQUFULENBQW1CdGpCLENBQW5CLEVBQXFCO0FBQUMsU0FBTzJDLG1CQUFtQmdpQixZQUFZM2tCLENBQVosQ0FBbkIsQ0FBUDtBQUEwQyxVQUFTcVgsU0FBVCxDQUFtQjVYLENBQW5CLEVBQXFCO0FBQUMsTUFBSUYsSUFBRSxFQUFOLENBQVMsS0FBSSxJQUFJUyxJQUFFLENBQVYsRUFBWUEsSUFBRVAsRUFBRUksTUFBRixHQUFTLENBQXZCLEVBQXlCRyxLQUFHLENBQTVCLEVBQThCO0FBQUNULFNBQUdnRCxPQUFPQyxZQUFQLENBQW9CSixTQUFTM0MsRUFBRTRDLE1BQUYsQ0FBU3JDLENBQVQsRUFBVyxDQUFYLENBQVQsRUFBdUIsRUFBdkIsQ0FBcEIsQ0FBSDtBQUFtRCxVQUFPVCxDQUFQO0FBQVMsVUFBU2dZLFNBQVQsQ0FBbUI5WCxDQUFuQixFQUFxQjtBQUFDLE1BQUlPLElBQUUsRUFBTixDQUFTLEtBQUksSUFBSVQsSUFBRSxDQUFWLEVBQVlBLElBQUVFLEVBQUVJLE1BQWhCLEVBQXVCTixHQUF2QixFQUEyQjtBQUFDUyxTQUFHLENBQUMsTUFBSVAsRUFBRWdELFVBQUYsQ0FBYWxELENBQWIsRUFBZ0J1QixRQUFoQixDQUF5QixFQUF6QixDQUFMLEVBQW1DYyxLQUFuQyxDQUF5QyxDQUFDLENBQTFDLENBQUg7QUFBZ0QsVUFBTzVCLENBQVA7QUFBUyxVQUFTOGtCLFFBQVQsQ0FBa0I5a0IsQ0FBbEIsRUFBb0I7QUFBQyxTQUFPa0ksUUFBUWxJLENBQVIsQ0FBUDtBQUFrQixVQUFTK2tCLFVBQVQsQ0FBb0J4bEIsQ0FBcEIsRUFBc0I7QUFBQyxNQUFJUyxJQUFFOGtCLFNBQVN2bEIsQ0FBVCxDQUFOLENBQWtCLElBQUlFLElBQUVPLEVBQUVnYyxPQUFGLENBQVUsVUFBVixFQUFxQixRQUFyQixDQUFOLENBQXFDdmMsSUFBRUEsRUFBRXVjLE9BQUYsQ0FBVSxPQUFWLEVBQWtCLEVBQWxCLENBQUYsQ0FBd0IsT0FBT3ZjLENBQVA7QUFBUyxVQUFTdWxCLFVBQVQsQ0FBb0J6bEIsQ0FBcEIsRUFBc0I7QUFBQyxNQUFJUyxJQUFFVCxFQUFFeWMsT0FBRixDQUFVLG9CQUFWLEVBQStCLEVBQS9CLENBQU4sQ0FBeUMsSUFBSXZjLElBQUUySSxTQUFTcEksQ0FBVCxDQUFOLENBQWtCLE9BQU9QLENBQVA7QUFBUyxVQUFTOGMsUUFBVCxDQUFrQnZjLENBQWxCLEVBQW9CVCxDQUFwQixFQUFzQjtBQUFDLE1BQUlFLElBQUVzbEIsV0FBVy9rQixDQUFYLENBQU4sQ0FBb0IsT0FBTSxnQkFBY1QsQ0FBZCxHQUFnQixXQUFoQixHQUE0QkUsQ0FBNUIsR0FBOEIsZUFBOUIsR0FBOENGLENBQTlDLEdBQWdELFdBQXREO0FBQWtFLFVBQVMwbEIsUUFBVCxDQUFrQmpsQixDQUFsQixFQUFvQlQsQ0FBcEIsRUFBc0I7QUFBQyxNQUFHUyxFQUFFa0YsT0FBRixDQUFVLGFBQVYsS0FBMEIsQ0FBQyxDQUE5QixFQUFnQztBQUFDLFVBQUssNEJBQTBCM0YsQ0FBL0I7QUFBaUMsT0FBR0EsTUFBSVosU0FBUCxFQUFpQjtBQUFDcUIsUUFBRUEsRUFBRWdjLE9BQUYsQ0FBVSxnQkFBY3pjLENBQWQsR0FBZ0IsT0FBMUIsRUFBa0MsRUFBbEMsQ0FBRixDQUF3Q1MsSUFBRUEsRUFBRWdjLE9BQUYsQ0FBVSxjQUFZemMsQ0FBWixHQUFjLE9BQXhCLEVBQWdDLEVBQWhDLENBQUY7QUFBc0MsR0FBaEcsTUFBb0c7QUFBQ1MsUUFBRUEsRUFBRWdjLE9BQUYsQ0FBVSx1QkFBVixFQUFrQyxFQUFsQyxDQUFGLENBQXdDaGMsSUFBRUEsRUFBRWdjLE9BQUYsQ0FBVSxxQkFBVixFQUFnQyxFQUFoQyxDQUFGO0FBQXNDLFVBQU9nSixXQUFXaGxCLENBQVgsQ0FBUDtBQUFxQixVQUFTa2xCLGdCQUFULENBQTBCaG1CLENBQTFCLEVBQTRCO0FBQUMsTUFBR0EsRUFBRVcsTUFBRixHQUFTLENBQVQsSUFBWSxDQUFmLEVBQWlCO0FBQUMsVUFBSywwQkFBTDtBQUFnQyxPQUFHWCxFQUFFNmMsS0FBRixDQUFRLGdCQUFSLEtBQTJCLElBQTlCLEVBQW1DO0FBQUMsVUFBSywwQkFBTDtBQUFnQyxPQUFJeGMsSUFBRSxJQUFJNGxCLFdBQUosQ0FBZ0JqbUIsRUFBRVcsTUFBRixHQUFTLENBQXpCLENBQU4sQ0FBa0MsSUFBSUcsSUFBRSxJQUFJb2xCLFFBQUosQ0FBYTdsQixDQUFiLENBQU4sQ0FBc0IsS0FBSSxJQUFJRSxJQUFFLENBQVYsRUFBWUEsSUFBRVAsRUFBRVcsTUFBRixHQUFTLENBQXZCLEVBQXlCSixHQUF6QixFQUE2QjtBQUFDTyxNQUFFcWxCLFFBQUYsQ0FBVzVsQixDQUFYLEVBQWEyQyxTQUFTbEQsRUFBRW1ELE1BQUYsQ0FBUzVDLElBQUUsQ0FBWCxFQUFhLENBQWIsQ0FBVCxFQUF5QixFQUF6QixDQUFiO0FBQTJDLFVBQU9GLENBQVA7QUFBUyxVQUFTK2xCLGdCQUFULENBQTBCL2xCLENBQTFCLEVBQTRCO0FBQUMsTUFBSUwsSUFBRSxFQUFOLENBQVMsSUFBSWMsSUFBRSxJQUFJb2xCLFFBQUosQ0FBYTdsQixDQUFiLENBQU4sQ0FBc0IsS0FBSSxJQUFJRSxJQUFFLENBQVYsRUFBWUEsSUFBRUYsRUFBRWdtQixVQUFoQixFQUEyQjlsQixHQUEzQixFQUErQjtBQUFDUCxTQUFHLENBQUMsT0FBS2MsRUFBRXdsQixRQUFGLENBQVcvbEIsQ0FBWCxFQUFjcUIsUUFBZCxDQUF1QixFQUF2QixDQUFOLEVBQWtDYyxLQUFsQyxDQUF3QyxDQUFDLENBQXpDLENBQUg7QUFBK0MsVUFBTzFDLENBQVA7QUFBUyxVQUFTdW1CLFVBQVQsQ0FBb0JybEIsQ0FBcEIsRUFBc0I7QUFBQyxNQUFJTixDQUFKLEVBQU1ILENBQU4sRUFBUW9DLENBQVIsRUFBVXZDLENBQVYsRUFBWVIsQ0FBWixFQUFjWSxDQUFkLEVBQWdCTCxDQUFoQixFQUFrQlEsQ0FBbEIsQ0FBb0IsSUFBSUMsQ0FBSixFQUFNakIsQ0FBTixFQUFRRCxDQUFSLEVBQVVXLENBQVYsQ0FBWUEsSUFBRVcsRUFBRTJiLEtBQUYsQ0FBUSx3REFBUixDQUFGLENBQW9FLElBQUd0YyxDQUFILEVBQUs7QUFBQ08sUUFBRVAsRUFBRSxDQUFGLENBQUYsQ0FBT0ssSUFBRXNDLFNBQVNwQyxDQUFULENBQUYsQ0FBYyxJQUFHQSxFQUFFSCxNQUFGLEtBQVcsQ0FBZCxFQUFnQjtBQUFDLFVBQUcsTUFBSUMsQ0FBSixJQUFPQSxJQUFFLEdBQVosRUFBZ0I7QUFBQ0EsWUFBRSxPQUFLQSxDQUFQO0FBQVMsT0FBMUIsTUFBOEI7QUFBQyxZQUFHLEtBQUdBLENBQUgsSUFBTUEsSUFBRSxFQUFYLEVBQWM7QUFBQ0EsY0FBRSxPQUFLQSxDQUFQO0FBQVM7QUFBQztBQUFDLFNBQUVzQyxTQUFTM0MsRUFBRSxDQUFGLENBQVQsSUFBZSxDQUFqQixDQUFtQnNDLElBQUVLLFNBQVMzQyxFQUFFLENBQUYsQ0FBVCxDQUFGLENBQWlCRCxJQUFFNEMsU0FBUzNDLEVBQUUsQ0FBRixDQUFULENBQUYsQ0FBaUJULElBQUVvRCxTQUFTM0MsRUFBRSxDQUFGLENBQVQsQ0FBRixDQUFpQkcsSUFBRXdDLFNBQVMzQyxFQUFFLENBQUYsQ0FBVCxDQUFGLENBQWlCRixJQUFFLENBQUYsQ0FBSVIsSUFBRVUsRUFBRSxDQUFGLENBQUYsQ0FBTyxJQUFHVixNQUFJLEVBQVAsRUFBVTtBQUFDRCxVQUFFLENBQUNDLEVBQUVzRCxNQUFGLENBQVMsQ0FBVCxJQUFZLElBQWIsRUFBbUJBLE1BQW5CLENBQTBCLENBQTFCLEVBQTRCLENBQTVCLENBQUYsQ0FBaUM5QyxJQUFFNkMsU0FBU3RELENBQVQsQ0FBRjtBQUFjLFlBQU9pWCxLQUFLcUssR0FBTCxDQUFTdGdCLENBQVQsRUFBV0gsQ0FBWCxFQUFhb0MsQ0FBYixFQUFldkMsQ0FBZixFQUFpQlIsQ0FBakIsRUFBbUJZLENBQW5CLEVBQXFCTCxDQUFyQixDQUFQO0FBQStCLFNBQUssOEJBQTRCYSxDQUFqQztBQUFtQyxVQUFTc2xCLFNBQVQsQ0FBbUIxbEIsQ0FBbkIsRUFBcUI7QUFBQyxNQUFJVCxJQUFFa21CLFdBQVd6bEIsQ0FBWCxDQUFOLENBQW9CLE9BQU8sQ0FBQyxFQUFFVCxJQUFFLElBQUosQ0FBUjtBQUFrQixVQUFTb21CLFVBQVQsQ0FBb0IzbEIsQ0FBcEIsRUFBc0I7QUFBQyxTQUFPLElBQUkrVixJQUFKLENBQVMwUCxXQUFXemxCLENBQVgsQ0FBVCxDQUFQO0FBQStCLFVBQVM0bEIsVUFBVCxDQUFvQjltQixDQUFwQixFQUFzQlUsQ0FBdEIsRUFBd0JSLENBQXhCLEVBQTBCO0FBQUMsTUFBSU8sQ0FBSixDQUFNLElBQUlTLElBQUVsQixFQUFFK21CLGNBQUYsRUFBTixDQUF5QixJQUFHcm1CLENBQUgsRUFBSztBQUFDLFFBQUdRLElBQUUsSUFBRixJQUFRLE9BQUtBLENBQWhCLEVBQWtCO0FBQUMsWUFBSyxrQ0FBZ0NBLENBQXJDO0FBQXVDLFNBQUUsQ0FBQyxLQUFHQSxDQUFKLEVBQU80QixLQUFQLENBQWEsQ0FBQyxDQUFkLENBQUY7QUFBbUIsR0FBbkYsTUFBdUY7QUFBQ3JDLFFBQUUsQ0FBQyxRQUFNUyxDQUFQLEVBQVU0QixLQUFWLENBQWdCLENBQUMsQ0FBakIsQ0FBRjtBQUFzQixRQUFHLENBQUMsT0FBSzlDLEVBQUVnbkIsV0FBRixLQUFnQixDQUFyQixDQUFELEVBQTBCbGtCLEtBQTFCLENBQWdDLENBQUMsQ0FBakMsQ0FBSCxDQUF1Q3JDLEtBQUcsQ0FBQyxNQUFJVCxFQUFFaW5CLFVBQUYsRUFBTCxFQUFxQm5rQixLQUFyQixDQUEyQixDQUFDLENBQTVCLENBQUgsQ0FBa0NyQyxLQUFHLENBQUMsTUFBSVQsRUFBRWtuQixXQUFGLEVBQUwsRUFBc0Jwa0IsS0FBdEIsQ0FBNEIsQ0FBQyxDQUE3QixDQUFILENBQW1DckMsS0FBRyxDQUFDLE1BQUlULEVBQUVtbkIsYUFBRixFQUFMLEVBQXdCcmtCLEtBQXhCLENBQThCLENBQUMsQ0FBL0IsQ0FBSCxDQUFxQ3JDLEtBQUcsQ0FBQyxNQUFJVCxFQUFFb25CLGFBQUYsRUFBTCxFQUF3QnRrQixLQUF4QixDQUE4QixDQUFDLENBQS9CLENBQUgsQ0FBcUMsSUFBRzVDLENBQUgsRUFBSztBQUFDLFFBQUlTLElBQUVYLEVBQUVxbkIsa0JBQUYsRUFBTixDQUE2QixJQUFHMW1CLE1BQUksQ0FBUCxFQUFTO0FBQUNBLFVBQUUsQ0FBQyxPQUFLQSxDQUFOLEVBQVNtQyxLQUFULENBQWUsQ0FBQyxDQUFoQixDQUFGLENBQXFCbkMsSUFBRUEsRUFBRXVjLE9BQUYsQ0FBVSxNQUFWLEVBQWlCLEVBQWpCLENBQUYsQ0FBdUJ6YyxLQUFHLE1BQUlFLENBQVA7QUFBUztBQUFDLFFBQUcsR0FBSCxDQUFPLE9BQU9GLENBQVA7QUFBUyxVQUFTa2xCLFdBQVQsQ0FBcUJ6a0IsQ0FBckIsRUFBdUI7QUFBQyxTQUFPQSxFQUFFZ2MsT0FBRixDQUFVLElBQVYsRUFBZSxFQUFmLENBQVA7QUFBMEIsVUFBUzJJLFdBQVQsQ0FBcUIza0IsQ0FBckIsRUFBdUI7QUFBQyxTQUFPQSxFQUFFZ2MsT0FBRixDQUFVLE9BQVYsRUFBa0IsS0FBbEIsQ0FBUDtBQUFnQyxVQUFTb0ssU0FBVCxDQUFtQnRuQixDQUFuQixFQUFxQjtBQUFDLE1BQUlTLElBQUUsd0JBQU4sQ0FBK0IsSUFBRyxDQUFDVCxFQUFFaWQsS0FBRixDQUFRLGlCQUFSLENBQUosRUFBK0I7QUFBQyxVQUFNeGMsQ0FBTjtBQUFRLE9BQUVULEVBQUVtZ0IsV0FBRixFQUFGLENBQWtCLElBQUkvZixJQUFFSixFQUFFcWYsS0FBRixDQUFRLEdBQVIsRUFBYXRlLE1BQWIsR0FBb0IsQ0FBMUIsQ0FBNEIsSUFBR1gsSUFBRSxDQUFMLEVBQU87QUFBQyxVQUFNSyxDQUFOO0FBQVEsT0FBSUMsSUFBRSxJQUFJNm1CLE1BQUosQ0FBVyxJQUFFbm5CLENBQUYsR0FBSSxDQUFmLENBQU4sQ0FBd0JKLElBQUVBLEVBQUVrZCxPQUFGLENBQVUsSUFBVixFQUFleGMsQ0FBZixDQUFGLENBQW9CLElBQUlDLElBQUVYLEVBQUVxZixLQUFGLENBQVEsR0FBUixDQUFOLENBQW1CLElBQUcxZSxFQUFFSSxNQUFGLElBQVUsQ0FBYixFQUFlO0FBQUMsVUFBTU4sQ0FBTjtBQUFRLFFBQUksSUFBSVAsSUFBRSxDQUFWLEVBQVlBLElBQUUsQ0FBZCxFQUFnQkEsR0FBaEIsRUFBb0I7QUFBQ1MsTUFBRVQsQ0FBRixJQUFLLENBQUMsU0FBT1MsRUFBRVQsQ0FBRixDQUFSLEVBQWM0QyxLQUFkLENBQW9CLENBQUMsQ0FBckIsQ0FBTDtBQUE2QixVQUFPbkMsRUFBRXlDLElBQUYsQ0FBTyxFQUFQLENBQVA7QUFBa0IsVUFBU29rQixTQUFULENBQW1COW1CLENBQW5CLEVBQXFCO0FBQUMsTUFBRyxDQUFDQSxFQUFFdWMsS0FBRixDQUFRLG1CQUFSLENBQUosRUFBaUM7QUFBQyxVQUFLLDhCQUFMO0FBQW9DLE9BQUV2YyxFQUFFeWYsV0FBRixFQUFGLENBQWtCLElBQUkxZixJQUFFQyxFQUFFdWMsS0FBRixDQUFRLFNBQVIsQ0FBTixDQUF5QixLQUFJLElBQUk3YyxJQUFFLENBQVYsRUFBWUEsSUFBRSxDQUFkLEVBQWdCQSxHQUFoQixFQUFvQjtBQUFDSyxNQUFFTCxDQUFGLElBQUtLLEVBQUVMLENBQUYsRUFBSzhjLE9BQUwsQ0FBYSxLQUFiLEVBQW1CLEVBQW5CLENBQUwsQ0FBNEIsSUFBR3pjLEVBQUVMLENBQUYsS0FBTSxFQUFULEVBQVk7QUFBQ0ssUUFBRUwsQ0FBRixJQUFLLEdBQUw7QUFBUztBQUFDLE9BQUUsTUFBSUssRUFBRTJDLElBQUYsQ0FBTyxHQUFQLENBQUosR0FBZ0IsR0FBbEIsQ0FBc0IsSUFBSXpDLElBQUVELEVBQUV1YyxLQUFGLENBQVEsWUFBUixDQUFOLENBQTRCLElBQUd0YyxNQUFJLElBQVAsRUFBWTtBQUFDLFdBQU9ELEVBQUVvQyxLQUFGLENBQVEsQ0FBUixFQUFVLENBQUMsQ0FBWCxDQUFQO0FBQXFCLE9BQUk1QyxJQUFFLEVBQU4sQ0FBUyxLQUFJLElBQUlFLElBQUUsQ0FBVixFQUFZQSxJQUFFTyxFQUFFSSxNQUFoQixFQUF1QlgsR0FBdkIsRUFBMkI7QUFBQyxRQUFHTyxFQUFFUCxDQUFGLEVBQUtXLE1BQUwsR0FBWWIsRUFBRWEsTUFBakIsRUFBd0I7QUFBQ2IsVUFBRVMsRUFBRVAsQ0FBRixDQUFGO0FBQU87QUFBQyxPQUFFTSxFQUFFd2MsT0FBRixDQUFVaGQsQ0FBVixFQUFZLElBQVosQ0FBRixDQUFvQixPQUFPUSxFQUFFb0MsS0FBRixDQUFRLENBQVIsRUFBVSxDQUFDLENBQVgsQ0FBUDtBQUFxQixVQUFTMmtCLE9BQVQsQ0FBaUJobkIsQ0FBakIsRUFBbUI7QUFBQyxNQUFJTCxJQUFFLHFCQUFOLENBQTRCLElBQUcsQ0FBQ0ssRUFBRXdjLEtBQUYsQ0FBUSxnQ0FBUixDQUFKLEVBQThDO0FBQUMsVUFBTTdjLENBQU47QUFBUSxPQUFHSyxFQUFFTSxNQUFGLElBQVUsQ0FBYixFQUFlO0FBQUMsUUFBSUosQ0FBSixDQUFNLElBQUc7QUFBQ0EsVUFBRTJDLFNBQVM3QyxFQUFFOEMsTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLENBQVQsRUFBdUIsRUFBdkIsSUFBMkIsR0FBM0IsR0FBK0JELFNBQVM3QyxFQUFFOEMsTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLENBQVQsRUFBdUIsRUFBdkIsQ0FBL0IsR0FBMEQsR0FBMUQsR0FBOERELFNBQVM3QyxFQUFFOEMsTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLENBQVQsRUFBdUIsRUFBdkIsQ0FBOUQsR0FBeUYsR0FBekYsR0FBNkZELFNBQVM3QyxFQUFFOEMsTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLENBQVQsRUFBdUIsRUFBdkIsQ0FBL0YsQ0FBMEgsT0FBTzVDLENBQVA7QUFBUyxLQUF2SSxDQUF1SSxPQUFNTyxDQUFOLEVBQVE7QUFBQyxZQUFNZCxDQUFOO0FBQVE7QUFBQyxHQUEvSyxNQUFtTDtBQUFDLFFBQUdLLEVBQUVNLE1BQUYsSUFBVSxFQUFiLEVBQWdCO0FBQUMsYUFBT3ltQixVQUFVL21CLENBQVYsQ0FBUDtBQUFvQixLQUFyQyxNQUF5QztBQUFDLGFBQU9BLENBQVA7QUFBUztBQUFDO0FBQUMsVUFBU2luQixPQUFULENBQWlCeG5CLENBQWpCLEVBQW1CO0FBQUMsTUFBSVcsSUFBRSxzQkFBTixDQUE2QlgsSUFBRUEsRUFBRWlnQixXQUFGLENBQWNqZ0IsQ0FBZCxDQUFGLENBQW1CLElBQUdBLEVBQUUrYyxLQUFGLENBQVEsV0FBUixDQUFILEVBQXdCO0FBQUMsUUFBSXhjLElBQUVQLEVBQUVtZixLQUFGLENBQVEsR0FBUixDQUFOLENBQW1CLElBQUc1ZSxFQUFFTSxNQUFGLEtBQVcsQ0FBZCxFQUFnQjtBQUFDLFlBQU1GLENBQU47QUFBUSxTQUFJYixJQUFFLEVBQU4sQ0FBUyxJQUFHO0FBQUMsV0FBSSxJQUFJVSxJQUFFLENBQVYsRUFBWUEsSUFBRSxDQUFkLEVBQWdCQSxHQUFoQixFQUFvQjtBQUFDLFlBQUlULElBQUVxRCxTQUFTN0MsRUFBRUMsQ0FBRixDQUFULENBQU4sQ0FBcUJWLEtBQUcsQ0FBQyxNQUFJQyxFQUFFK0IsUUFBRixDQUFXLEVBQVgsQ0FBTCxFQUFxQmMsS0FBckIsQ0FBMkIsQ0FBQyxDQUE1QixDQUFIO0FBQWtDLGNBQU85QyxDQUFQO0FBQVMsS0FBekYsQ0FBeUYsT0FBTVcsQ0FBTixFQUFRO0FBQUMsWUFBTUUsQ0FBTjtBQUFRO0FBQUMsR0FBekwsTUFBNkw7QUFBQyxRQUFHWCxFQUFFK2MsS0FBRixDQUFRLGNBQVIsS0FBeUIvYyxFQUFFa0csT0FBRixDQUFVLEdBQVYsTUFBaUIsQ0FBQyxDQUE5QyxFQUFnRDtBQUFDLGFBQU9raEIsVUFBVXBuQixDQUFWLENBQVA7QUFBb0IsS0FBckUsTUFBeUU7QUFBQyxZQUFNVyxDQUFOO0FBQVE7QUFBQztBQUFDLFVBQVMra0IscUJBQVQsQ0FBK0Ixa0IsQ0FBL0IsRUFBaUM7QUFBQyxNQUFJZCxJQUFFNEQsbUJBQW1COUMsQ0FBbkIsQ0FBTixDQUE0QixJQUFJVCxJQUFFLEVBQU4sQ0FBUyxLQUFJLElBQUlFLElBQUUsQ0FBVixFQUFZQSxJQUFFUCxFQUFFVyxNQUFoQixFQUF1QkosR0FBdkIsRUFBMkI7QUFBQyxRQUFHUCxFQUFFTyxDQUFGLEtBQU0sR0FBVCxFQUFhO0FBQUNGLFVBQUVBLElBQUVMLEVBQUVtRCxNQUFGLENBQVM1QyxDQUFULEVBQVcsQ0FBWCxDQUFKLENBQWtCQSxJQUFFQSxJQUFFLENBQUo7QUFBTSxLQUF0QyxNQUEwQztBQUFDRixVQUFFQSxJQUFFLEdBQUYsR0FBTTJnQixPQUFPaGhCLEVBQUVPLENBQUYsQ0FBUCxDQUFSO0FBQXFCO0FBQUMsVUFBT0YsQ0FBUDtBQUFTLFVBQVNrbkIsY0FBVCxDQUF3QnptQixDQUF4QixFQUEwQjtBQUFDQSxNQUFFQSxFQUFFZ2MsT0FBRixDQUFVLFFBQVYsRUFBbUIsSUFBbkIsQ0FBRixDQUEyQixPQUFPaGMsQ0FBUDtBQUFTLFVBQVMwbUIsYUFBVCxDQUF1QjFtQixDQUF2QixFQUF5QjtBQUFDQSxNQUFFQSxFQUFFZ2MsT0FBRixDQUFVLFFBQVYsRUFBbUIsSUFBbkIsQ0FBRixDQUEyQmhjLElBQUVBLEVBQUVnYyxPQUFGLENBQVUsTUFBVixFQUFpQixNQUFqQixDQUFGLENBQTJCLE9BQU9oYyxDQUFQO0FBQVMsTUFBS3BCLElBQUwsQ0FBVTJELE1BQVYsQ0FBaUJva0IsU0FBakIsR0FBMkIsVUFBUzNtQixDQUFULEVBQVc7QUFBQyxNQUFHQSxFQUFFK2IsS0FBRixDQUFRLFVBQVIsQ0FBSCxFQUF1QjtBQUFDLFdBQU8sSUFBUDtBQUFZLEdBQXBDLE1BQXdDO0FBQUMsUUFBRy9iLEVBQUUrYixLQUFGLENBQVEsV0FBUixDQUFILEVBQXdCO0FBQUMsYUFBTyxJQUFQO0FBQVksS0FBckMsTUFBeUM7QUFBQyxhQUFPLEtBQVA7QUFBYTtBQUFDO0FBQUMsQ0FBekksQ0FBMEkvRSxLQUFLcFksSUFBTCxDQUFVMkQsTUFBVixDQUFpQm1oQixLQUFqQixHQUF1QixVQUFTMWpCLENBQVQsRUFBVztBQUFDLE1BQUdBLEVBQUVILE1BQUYsR0FBUyxDQUFULElBQVksQ0FBWixLQUFnQkcsRUFBRStiLEtBQUYsQ0FBUSxhQUFSLEtBQXdCL2IsRUFBRStiLEtBQUYsQ0FBUSxhQUFSLENBQXhDLENBQUgsRUFBbUU7QUFBQyxXQUFPLElBQVA7QUFBWSxHQUFoRixNQUFvRjtBQUFDLFdBQU8sS0FBUDtBQUFhO0FBQUMsQ0FBdEksQ0FBdUkvRSxLQUFLcFksSUFBTCxDQUFVMkQsTUFBVixDQUFpQnFrQixRQUFqQixHQUEwQixVQUFTNW1CLENBQVQsRUFBVztBQUFDQSxNQUFFQSxFQUFFZ2MsT0FBRixDQUFVLE1BQVYsRUFBaUIsRUFBakIsQ0FBRixDQUF1QixJQUFHaGMsRUFBRStiLEtBQUYsQ0FBUSx5QkFBUixLQUFvQy9iLEVBQUVILE1BQUYsR0FBUyxDQUFULElBQVksQ0FBbkQsRUFBcUQ7QUFBQyxXQUFPLElBQVA7QUFBWSxHQUFsRSxNQUFzRTtBQUFDLFdBQU8sS0FBUDtBQUFhO0FBQUMsQ0FBbEosQ0FBbUptWCxLQUFLcFksSUFBTCxDQUFVMkQsTUFBVixDQUFpQnNrQixXQUFqQixHQUE2QixVQUFTN21CLENBQVQsRUFBVztBQUFDLE1BQUdBLEVBQUUrYixLQUFGLENBQVEsT0FBUixDQUFILEVBQW9CO0FBQUMsV0FBTyxLQUFQO0FBQWEsT0FBRW9JLFVBQVVua0IsQ0FBVixDQUFGLENBQWUsT0FBT2dYLEtBQUtwWSxJQUFMLENBQVUyRCxNQUFWLENBQWlCcWtCLFFBQWpCLENBQTBCNW1CLENBQTFCLENBQVA7QUFBb0MsQ0FBOUgsQ0FBK0hnWCxLQUFLcFksSUFBTCxDQUFVMkQsTUFBVixDQUFpQnVrQixjQUFqQixHQUFnQyxVQUFTOW1CLENBQVQsRUFBVztBQUFDQSxNQUFFQSxFQUFFZ2MsT0FBRixDQUFVLE1BQVYsRUFBaUIsRUFBakIsQ0FBRixDQUF1QixJQUFHaGMsRUFBRStiLEtBQUYsQ0FBUSxlQUFSLENBQUgsRUFBNEI7QUFBQyxXQUFPLElBQVA7QUFBWSxHQUF6QyxNQUE2QztBQUFDLFdBQU8sS0FBUDtBQUFhO0FBQUMsQ0FBL0gsQ0FBZ0ksU0FBU2dMLFdBQVQsQ0FBcUIvbUIsQ0FBckIsRUFBdUI7QUFBQyxNQUFHQSxFQUFFSCxNQUFGLEdBQVMsQ0FBVCxJQUFZLENBQWYsRUFBaUI7QUFBQyxXQUFNLE1BQUlHLENBQVY7QUFBWSxPQUFHQSxFQUFFcUMsTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLElBQWMsR0FBakIsRUFBcUI7QUFBQyxXQUFNLE9BQUtyQyxDQUFYO0FBQWEsVUFBT0EsQ0FBUDtBQUFTLFVBQVNnbkIsY0FBVCxDQUF3QnpuQixDQUF4QixFQUEwQjtBQUFDQSxNQUFFQSxFQUFFeWMsT0FBRixDQUFVLFdBQVYsRUFBc0IsRUFBdEIsQ0FBRixDQUE0QnpjLElBQUVBLEVBQUV5YyxPQUFGLENBQVUsV0FBVixFQUFzQixFQUF0QixDQUFGLENBQTRCemMsSUFBRUEsRUFBRXljLE9BQUYsQ0FBVSxNQUFWLEVBQWlCLEVBQWpCLENBQUYsQ0FBdUIsSUFBRztBQUFDLFFBQUl2YyxJQUFFRixFQUFFNGUsS0FBRixDQUFRLEdBQVIsRUFBYThJLEdBQWIsQ0FBaUIsVUFBU25vQixDQUFULEVBQVdVLENBQVgsRUFBYVQsQ0FBYixFQUFlO0FBQUMsVUFBSUMsSUFBRW9ELFNBQVN0RCxDQUFULENBQU4sQ0FBa0IsSUFBR0UsSUFBRSxDQUFGLElBQUssTUFBSUEsQ0FBWixFQUFjO0FBQUMsY0FBSyw0QkFBTDtBQUFrQyxXQUFJRSxJQUFFLENBQUMsT0FBS0YsRUFBRThCLFFBQUYsQ0FBVyxFQUFYLENBQU4sRUFBc0JjLEtBQXRCLENBQTRCLENBQUMsQ0FBN0IsQ0FBTixDQUFzQyxPQUFPMUMsQ0FBUDtBQUFTLEtBQW5KLEVBQXFKZ0QsSUFBckosQ0FBMEosRUFBMUosQ0FBTixDQUFvSyxPQUFPekMsQ0FBUDtBQUFTLEdBQWpMLENBQWlMLE9BQU1PLENBQU4sRUFBUTtBQUFDLFVBQUsscUNBQW1DQSxDQUF4QztBQUEwQztBQUFDLEtBQUlrbkIsYUFBVyxTQUFYQSxVQUFXLENBQVN6bkIsQ0FBVCxFQUFXTyxDQUFYLEVBQWE7QUFBQyxNQUFJZCxJQUFFTyxFQUFFSSxNQUFSLENBQWUsSUFBR0osRUFBRUksTUFBRixHQUFTRyxFQUFFSCxNQUFkLEVBQXFCO0FBQUNYLFFBQUVjLEVBQUVILE1BQUo7QUFBVyxRQUFJLElBQUlOLElBQUUsQ0FBVixFQUFZQSxJQUFFTCxDQUFkLEVBQWdCSyxHQUFoQixFQUFvQjtBQUFDLFFBQUdFLEVBQUVnRCxVQUFGLENBQWFsRCxDQUFiLEtBQWlCUyxFQUFFeUMsVUFBRixDQUFhbEQsQ0FBYixDQUFwQixFQUFvQztBQUFDLGFBQU9BLENBQVA7QUFBUztBQUFDLE9BQUdFLEVBQUVJLE1BQUYsSUFBVUcsRUFBRUgsTUFBZixFQUFzQjtBQUFDLFdBQU9YLENBQVA7QUFBUyxVQUFPLENBQUMsQ0FBUjtBQUFVLENBQTNMO0FBQ2x6TixJQUFHLE9BQU84WCxJQUFQLElBQWEsV0FBYixJQUEwQixDQUFDQSxJQUE5QixFQUFtQztBQUFDLFVBMEUzQkEsSUExRTJCLFVBQUssRUFBTDtBQUFRLEtBQUcsT0FBT0EsS0FBS2YsTUFBWixJQUFvQixXQUFwQixJQUFpQyxDQUFDZSxLQUFLZixNQUExQyxFQUFpRDtBQUFDZSxPQUFLZixNQUFMLEdBQVksRUFBWjtBQUFlLE1BQUtBLE1BQUwsQ0FBWWlCLElBQVosR0FBaUIsSUFBSSxZQUFVO0FBQUMsT0FBS2lRLGNBQUwsR0FBb0IsRUFBQ0MsTUFBSyxnQ0FBTixFQUF1Q0MsUUFBTyx3Q0FBOUMsRUFBdUZDLFFBQU8sd0NBQTlGLEVBQXVJQyxRQUFPLHdDQUE5SSxFQUF1TEMsUUFBTyx3Q0FBOUwsRUFBdU9DLEtBQUksc0NBQTNPLEVBQWtSQyxLQUFJLHNDQUF0UixFQUE2VEMsV0FBVSxnQ0FBdlUsRUFBcEIsQ0FBOFgsS0FBS0MsZUFBTCxHQUFxQixFQUFDRixLQUFJLFVBQUwsRUFBZ0JOLE1BQUssVUFBckIsRUFBZ0NDLFFBQU8sVUFBdkMsRUFBa0RDLFFBQU8sVUFBekQsRUFBb0VDLFFBQU8sVUFBM0UsRUFBc0ZDLFFBQU8sVUFBN0YsRUFBd0dHLFdBQVUsVUFBbEgsRUFBNkhFLFNBQVEsVUFBckksRUFBZ0pDLFVBQVMsVUFBekosRUFBb0tDLFlBQVcsVUFBL0ssRUFBMExDLFlBQVcsVUFBck0sRUFBZ05DLFlBQVcsVUFBM04sRUFBc09DLFlBQVcsVUFBalAsRUFBNFBDLGVBQWMsVUFBMVEsRUFBcVJDLFlBQVcsZ0JBQWhTLEVBQWlUQyxhQUFZLGdCQUE3VCxFQUE4VUMsZUFBYyxnQkFBNVYsRUFBNldDLGVBQWMsZ0JBQTNYLEVBQTRZQyxlQUFjLGdCQUExWixFQUEyYUMsZUFBYyxnQkFBemIsRUFBMGNDLGtCQUFpQixnQkFBM2QsRUFBNGVDLGNBQWEsZ0JBQXpmLEVBQTBnQkMsZUFBYyxnQkFBeGhCLEVBQXlpQkMsaUJBQWdCLGdCQUF6akIsRUFBMGtCQyxpQkFBZ0IsZ0JBQTFsQixFQUEybUJDLGlCQUFnQixnQkFBM25CLEVBQTRvQkMsaUJBQWdCLGdCQUE1cEIsRUFBNnFCQyxvQkFBbUIsZ0JBQWhzQixFQUFpdEJDLGFBQVksZ0JBQTd0QixFQUE4dUJDLGVBQWMsZ0JBQTV2QixFQUE2d0JDLGVBQWMsZ0JBQTN4QixFQUE0eUJDLG1CQUFrQixnQkFBOXpCLEVBQSswQkMsb0JBQW1CLGdCQUFsMkIsRUFBbTNCQyxzQkFBcUIsZ0JBQXg0QixFQUF5NUJDLHNCQUFxQixnQkFBOTZCLEVBQSs3QkMsc0JBQXFCLGdCQUFwOUIsRUFBcStCQyxzQkFBcUIsZ0JBQTEvQixFQUEyZ0NDLHlCQUF3QixnQkFBbmlDLEVBQXJCLENBQTJrQyxLQUFLQyx5QkFBTCxHQUErQixFQUFDbEMsS0FBSXpuQixTQUFTdUUsSUFBVCxDQUFjcWxCLEdBQW5CLEVBQXVCekMsTUFBS25uQixTQUFTdUUsSUFBVCxDQUFjc2xCLElBQTFDLEVBQStDekMsUUFBT3BuQixTQUFTdUUsSUFBVCxDQUFjdWxCLE1BQXBFLEVBQTJFekMsUUFBT3JuQixTQUFTdUUsSUFBVCxDQUFjYSxNQUFoRyxFQUF1R2tpQixRQUFPdG5CLFNBQVN1RSxJQUFULENBQWNzRCxNQUE1SCxFQUFtSTBmLFFBQU92bkIsU0FBU3VFLElBQVQsQ0FBY21CLE1BQXhKLEVBQStKZ2lCLFdBQVUxbkIsU0FBU3VFLElBQVQsQ0FBY3dsQixTQUF2TCxFQUEvQixDQUFpTyxLQUFLQyxnQkFBTCxHQUFzQixVQUFTanFCLENBQVQsRUFBV1QsQ0FBWCxFQUFhO0FBQUMsUUFBRyxPQUFPLEtBQUs0bkIsY0FBTCxDQUFvQjVuQixDQUFwQixDQUFQLElBQStCLFdBQWxDLEVBQThDO0FBQUMsWUFBSywrQ0FBNkNBLENBQWxEO0FBQW9ELFlBQU8sS0FBSzRuQixjQUFMLENBQW9CNW5CLENBQXBCLElBQXVCUyxDQUE5QjtBQUFnQyxHQUF2SyxDQUF3SyxLQUFLa3FCLHNCQUFMLEdBQTRCLFVBQVNuckIsQ0FBVCxFQUFXaUIsQ0FBWCxFQUFhTCxDQUFiLEVBQWU7QUFBQyxRQUFJRixJQUFFLEtBQUt3cUIsZ0JBQUwsQ0FBc0JsckIsQ0FBdEIsRUFBd0JpQixDQUF4QixDQUFOLENBQWlDLElBQUlkLElBQUVTLElBQUUsQ0FBUixDQUFVLElBQUdGLEVBQUVJLE1BQUYsR0FBUyxFQUFULEdBQVlYLENBQWYsRUFBaUI7QUFBQyxZQUFLLHlDQUF1Q1MsQ0FBdkMsR0FBeUMsR0FBekMsR0FBNkNLLENBQWxEO0FBQW9ELFNBQUlULElBQUUsTUFBTixDQUFhLElBQUlRLElBQUUsT0FBS04sQ0FBWCxDQUFhLElBQUlYLElBQUUsRUFBTixDQUFTLElBQUlnQixJQUFFWixJQUFFSyxFQUFFTSxNQUFKLEdBQVdFLEVBQUVGLE1BQW5CLENBQTBCLEtBQUksSUFBSWIsSUFBRSxDQUFWLEVBQVlBLElBQUVjLENBQWQsRUFBZ0JkLEtBQUcsQ0FBbkIsRUFBcUI7QUFBQ0YsV0FBRyxJQUFIO0FBQVEsU0FBSVUsSUFBRUQsSUFBRVQsQ0FBRixHQUFJaUIsQ0FBVixDQUFZLE9BQU9QLENBQVA7QUFBUyxHQUE3USxDQUE4USxLQUFLMnFCLFVBQUwsR0FBZ0IsVUFBU25xQixDQUFULEVBQVdQLENBQVgsRUFBYTtBQUFDLFFBQUlGLElBQUUsSUFBSXlYLEtBQUtmLE1BQUwsQ0FBWWdCLGFBQWhCLENBQThCLEVBQUNtVCxLQUFJM3FCLENBQUwsRUFBOUIsQ0FBTixDQUE2QyxPQUFPRixFQUFFOHFCLFlBQUYsQ0FBZXJxQixDQUFmLENBQVA7QUFBeUIsR0FBcEcsQ0FBcUcsS0FBS3NYLE9BQUwsR0FBYSxVQUFTL1gsQ0FBVCxFQUFXRSxDQUFYLEVBQWE7QUFBQyxRQUFJTyxJQUFFLElBQUlnWCxLQUFLZixNQUFMLENBQVlnQixhQUFoQixDQUE4QixFQUFDbVQsS0FBSTNxQixDQUFMLEVBQTlCLENBQU4sQ0FBNkMsT0FBT08sRUFBRXNxQixTQUFGLENBQVkvcUIsQ0FBWixDQUFQO0FBQXNCLEdBQTlGLENBQStGLEtBQUs2bkIsSUFBTCxHQUFVLFVBQVNwbkIsQ0FBVCxFQUFXO0FBQUMsUUFBSVQsSUFBRSxJQUFJeVgsS0FBS2YsTUFBTCxDQUFZZ0IsYUFBaEIsQ0FBOEIsRUFBQ21ULEtBQUksTUFBTCxFQUFZRyxNQUFLLFVBQWpCLEVBQTlCLENBQU4sQ0FBa0UsT0FBT2hyQixFQUFFOHFCLFlBQUYsQ0FBZXJxQixDQUFmLENBQVA7QUFBeUIsR0FBakgsQ0FBa0gsS0FBS3NuQixNQUFMLEdBQVksVUFBU3RuQixDQUFULEVBQVc7QUFBQyxRQUFJVCxJQUFFLElBQUl5WCxLQUFLZixNQUFMLENBQVlnQixhQUFoQixDQUE4QixFQUFDbVQsS0FBSSxRQUFMLEVBQWNHLE1BQUssVUFBbkIsRUFBOUIsQ0FBTixDQUFvRSxPQUFPaHJCLEVBQUU4cUIsWUFBRixDQUFlcnFCLENBQWYsQ0FBUDtBQUF5QixHQUFySCxDQUFzSCxLQUFLd3FCLFNBQUwsR0FBZSxVQUFTeHFCLENBQVQsRUFBVztBQUFDLFFBQUlULElBQUUsSUFBSXlYLEtBQUtmLE1BQUwsQ0FBWWdCLGFBQWhCLENBQThCLEVBQUNtVCxLQUFJLFFBQUwsRUFBY0csTUFBSyxVQUFuQixFQUE5QixDQUFOLENBQW9FLE9BQU9ockIsRUFBRStxQixTQUFGLENBQVl0cUIsQ0FBWixDQUFQO0FBQXNCLEdBQXJILENBQXNILEtBQUt3bkIsTUFBTCxHQUFZLFVBQVN4bkIsQ0FBVCxFQUFXO0FBQUMsUUFBSVQsSUFBRSxJQUFJeVgsS0FBS2YsTUFBTCxDQUFZZ0IsYUFBaEIsQ0FBOEIsRUFBQ21ULEtBQUksUUFBTCxFQUFjRyxNQUFLLFVBQW5CLEVBQTlCLENBQU4sQ0FBb0UsT0FBT2hyQixFQUFFOHFCLFlBQUYsQ0FBZXJxQixDQUFmLENBQVA7QUFBeUIsR0FBckgsQ0FBc0gsS0FBS3lxQixTQUFMLEdBQWUsVUFBU3pxQixDQUFULEVBQVc7QUFBQyxRQUFJVCxJQUFFLElBQUl5WCxLQUFLZixNQUFMLENBQVlnQixhQUFoQixDQUE4QixFQUFDbVQsS0FBSSxRQUFMLEVBQWNHLE1BQUssVUFBbkIsRUFBOUIsQ0FBTixDQUFvRSxPQUFPaHJCLEVBQUUrcUIsU0FBRixDQUFZdHFCLENBQVosQ0FBUDtBQUFzQixHQUFySDtBQUFzSCxDQUE3M0YsRUFBakIsQ0FBKzRGZ1gsS0FBS2YsTUFBTCxDQUFZaUIsSUFBWixDQUFpQndRLEdBQWpCLEdBQXFCLFVBQVMxbkIsQ0FBVCxFQUFXO0FBQUMsTUFBSVQsSUFBRSxJQUFJeVgsS0FBS2YsTUFBTCxDQUFZZ0IsYUFBaEIsQ0FBOEIsRUFBQ21ULEtBQUksS0FBTCxFQUFXRyxNQUFLLFVBQWhCLEVBQTlCLENBQU4sQ0FBaUUsT0FBT2hyQixFQUFFOHFCLFlBQUYsQ0FBZXJxQixDQUFmLENBQVA7QUFBeUIsQ0FBM0gsQ0FBNEhnWCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCeVEsU0FBakIsR0FBMkIsVUFBUzNuQixDQUFULEVBQVc7QUFBQyxNQUFJVCxJQUFFLElBQUl5WCxLQUFLZixNQUFMLENBQVlnQixhQUFoQixDQUE4QixFQUFDbVQsS0FBSSxXQUFMLEVBQWlCRyxNQUFLLFVBQXRCLEVBQTlCLENBQU4sQ0FBdUUsT0FBT2hyQixFQUFFOHFCLFlBQUYsQ0FBZXJxQixDQUFmLENBQVA7QUFBeUIsQ0FBdkksQ0FBd0lnWCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCd1QsZUFBakIsR0FBaUMsSUFBSWpVLFlBQUosRUFBakMsQ0FBb0RPLEtBQUtmLE1BQUwsQ0FBWWlCLElBQVosQ0FBaUJ5VCxvQkFBakIsR0FBc0MsVUFBU3ByQixDQUFULEVBQVc7QUFBQyxNQUFJUyxJQUFFLElBQUl1SSxLQUFKLENBQVVoSixDQUFWLENBQU4sQ0FBbUJ5WCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCd1QsZUFBakIsQ0FBaUNoYixTQUFqQyxDQUEyQzFQLENBQTNDLEVBQThDLE9BQU84akIsUUFBUTlqQixDQUFSLENBQVA7QUFBa0IsQ0FBckksQ0FBc0lnWCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCMFQsMkJBQWpCLEdBQTZDLFVBQVM1cUIsQ0FBVCxFQUFXO0FBQUMsU0FBTyxJQUFJMkksVUFBSixDQUFlcU8sS0FBS2YsTUFBTCxDQUFZaUIsSUFBWixDQUFpQnlULG9CQUFqQixDQUFzQzNxQixDQUF0QyxDQUFmLEVBQXdELEVBQXhELENBQVA7QUFBbUUsQ0FBNUgsQ0FBNkhnWCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCMlQsbUJBQWpCLEdBQXFDLFVBQVMzckIsQ0FBVCxFQUFXO0FBQUMsTUFBSU8sSUFBRVAsSUFBRSxDQUFSLENBQVUsSUFBSWMsSUFBRSxDQUFDZCxJQUFFTyxDQUFILElBQU0sQ0FBWixDQUFjLElBQUlGLElBQUUsSUFBSWdKLEtBQUosQ0FBVXZJLElBQUUsQ0FBWixDQUFOLENBQXFCZ1gsS0FBS2YsTUFBTCxDQUFZaUIsSUFBWixDQUFpQndULGVBQWpCLENBQWlDaGIsU0FBakMsQ0FBMkNuUSxDQUEzQyxFQUE4Q0EsRUFBRSxDQUFGLElBQUssQ0FBRyxPQUFLRSxDQUFOLEdBQVMsR0FBVixHQUFlLEdBQWhCLElBQXFCRixFQUFFLENBQUYsQ0FBMUIsQ0FBK0IsT0FBT3VrQixRQUFRdmtCLENBQVIsQ0FBUDtBQUFrQixDQUE3TCxDQUE4THlYLEtBQUtmLE1BQUwsQ0FBWWlCLElBQVosQ0FBaUI0VCwwQkFBakIsR0FBNEMsVUFBUzlxQixDQUFULEVBQVc7QUFBQyxTQUFPLElBQUkySSxVQUFKLENBQWVxTyxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCMlQsbUJBQWpCLENBQXFDN3FCLENBQXJDLENBQWYsRUFBdUQsRUFBdkQsQ0FBUDtBQUFrRSxDQUExSCxDQUEySGdYLEtBQUtmLE1BQUwsQ0FBWWlCLElBQVosQ0FBaUI2VCw0QkFBakIsR0FBOEMsVUFBU3hyQixDQUFULEVBQVc7QUFBQyxNQUFJUyxJQUFFVCxFQUFFNE8sU0FBRixFQUFOLENBQW9CLE9BQU0sQ0FBTixFQUFRO0FBQUMsUUFBSTFPLElBQUV1WCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCNFQsMEJBQWpCLENBQTRDOXFCLENBQTVDLENBQU4sQ0FBcUQsSUFBR1QsRUFBRXNNLFNBQUYsQ0FBWXBNLENBQVosS0FBZ0IsQ0FBQyxDQUFwQixFQUFzQjtBQUFDLGFBQU9BLENBQVA7QUFBUztBQUFDO0FBQUMsQ0FBOUssQ0FBK0t1WCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCOFQsMkJBQWpCLEdBQTZDLFVBQVN4ckIsQ0FBVCxFQUFXRCxDQUFYLEVBQWE7QUFBQyxNQUFJRSxJQUFFRCxFQUFFcU0sU0FBRixDQUFZdE0sQ0FBWixDQUFOLENBQXFCLElBQUdFLEtBQUcsQ0FBTixFQUFRO0FBQUMsVUFBSyw2QkFBTDtBQUFtQyxPQUFHQSxLQUFHLENBQU4sRUFBUTtBQUFDLFdBQU9ELENBQVA7QUFBUyxPQUFJUSxJQUFFVCxFQUFFZ1UsUUFBRixDQUFXL1QsQ0FBWCxDQUFOLENBQW9CLElBQUlOLElBQUU4WCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCNlQsNEJBQWpCLENBQThDL3FCLENBQTlDLENBQU4sQ0FBdUQsT0FBT2QsRUFBRXNVLEdBQUYsQ0FBTWhVLENBQU4sQ0FBUDtBQUFnQixDQUF6TyxDQUEwT3dYLEtBQUtmLE1BQUwsQ0FBWWdCLGFBQVosR0FBMEIsVUFBU3hYLENBQVQsRUFBVztBQUFDLE1BQUlGLElBQUUsSUFBTixDQUFXLElBQUlTLElBQUUsSUFBTixDQUFXLElBQUlkLElBQUUsSUFBTixDQUFXLEtBQUsrckIsaUJBQUwsR0FBdUIsVUFBU25zQixDQUFULEVBQVdFLENBQVgsRUFBYTtBQUFDRixRQUFFa1ksS0FBS2YsTUFBTCxDQUFZZ0IsYUFBWixDQUEwQkUsbUJBQTFCLENBQThDclksQ0FBOUMsQ0FBRixDQUFtRCxJQUFHQSxNQUFJLElBQUosSUFBVUUsTUFBSUwsU0FBakIsRUFBMkI7QUFBQ0ssVUFBRWdZLEtBQUtmLE1BQUwsQ0FBWWlCLElBQVosQ0FBaUIwUSxlQUFqQixDQUFpQzlvQixDQUFqQyxDQUFGO0FBQXNDLFNBQUcsbURBQW1Eb0csT0FBbkQsQ0FBMkRwRyxDQUEzRCxLQUErRCxDQUFDLENBQWhFLElBQW1FRSxLQUFHLFVBQXpFLEVBQW9GO0FBQUMsVUFBRztBQUFDLGFBQUtrc0IsRUFBTCxHQUFRbFUsS0FBS2YsTUFBTCxDQUFZaUIsSUFBWixDQUFpQjBTLHlCQUFqQixDQUEyQzlxQixDQUEzQyxFQUE4QytCLE1BQTlDLEVBQVI7QUFBK0QsT0FBbkUsQ0FBbUUsT0FBTXJCLENBQU4sRUFBUTtBQUFDLGNBQUssNkNBQTJDVixDQUEzQyxHQUE2QyxHQUE3QyxHQUFpRFUsQ0FBdEQ7QUFBd0QsWUFBSzJyQixZQUFMLEdBQWtCLFVBQVNwc0IsQ0FBVCxFQUFXO0FBQUMsYUFBS21zQixFQUFMLENBQVFobkIsTUFBUixDQUFlbkYsQ0FBZjtBQUFrQixPQUFoRCxDQUFpRCxLQUFLcXNCLFNBQUwsR0FBZSxVQUFTcnNCLENBQVQsRUFBVztBQUFDLFlBQUlhLElBQUVLLFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJFLEtBQWpCLENBQXVCcEQsQ0FBdkIsQ0FBTixDQUFnQyxLQUFLbXNCLEVBQUwsQ0FBUWhuQixNQUFSLENBQWV0RSxDQUFmO0FBQWtCLE9BQTdFLENBQThFLEtBQUt5ckIsTUFBTCxHQUFZLFlBQVU7QUFBQyxZQUFJdHNCLElBQUUsS0FBS21zQixFQUFMLENBQVEvbUIsUUFBUixFQUFOLENBQXlCLE9BQU9wRixFQUFFK0IsUUFBRixDQUFXYixTQUFTK0IsR0FBVCxDQUFhQyxHQUF4QixDQUFQO0FBQW9DLE9BQXBGLENBQXFGLEtBQUtvb0IsWUFBTCxHQUFrQixVQUFTdHJCLENBQVQsRUFBVztBQUFDLGFBQUtvc0IsWUFBTCxDQUFrQnBzQixDQUFsQixFQUFxQixPQUFPLEtBQUtzc0IsTUFBTCxFQUFQO0FBQXFCLE9BQXhFLENBQXlFLEtBQUtmLFNBQUwsR0FBZSxVQUFTdnJCLENBQVQsRUFBVztBQUFDLGFBQUtxc0IsU0FBTCxDQUFlcnNCLENBQWYsRUFBa0IsT0FBTyxLQUFLc3NCLE1BQUwsRUFBUDtBQUFxQixPQUFsRTtBQUFtRSxTQUFHLFdBQVdubUIsT0FBWCxDQUFtQnBHLENBQW5CLEtBQXVCLENBQUMsQ0FBeEIsSUFBMkJFLEtBQUcsTUFBakMsRUFBd0M7QUFBQyxVQUFHO0FBQUMsYUFBS2tzQixFQUFMLEdBQVEsSUFBSUksS0FBS0MsSUFBTCxDQUFVakUsTUFBZCxFQUFSO0FBQStCLE9BQW5DLENBQW1DLE9BQU05bkIsQ0FBTixFQUFRO0FBQUMsY0FBSyw2Q0FBMkNWLENBQTNDLEdBQTZDLEdBQTdDLEdBQWlEVSxDQUF0RDtBQUF3RCxZQUFLMnJCLFlBQUwsR0FBa0IsVUFBU3BzQixDQUFULEVBQVc7QUFBQyxhQUFLbXNCLEVBQUwsQ0FBUWhuQixNQUFSLENBQWVuRixDQUFmO0FBQWtCLE9BQWhELENBQWlELEtBQUtxc0IsU0FBTCxHQUFlLFVBQVN4ckIsQ0FBVCxFQUFXO0FBQUMsWUFBSWIsSUFBRXVzQixLQUFLRSxLQUFMLENBQVdwTSxHQUFYLENBQWVxTSxNQUFmLENBQXNCN3JCLENBQXRCLENBQU4sQ0FBK0IsS0FBS3NyQixFQUFMLENBQVFobkIsTUFBUixDQUFlbkYsQ0FBZjtBQUFrQixPQUE1RSxDQUE2RSxLQUFLc3NCLE1BQUwsR0FBWSxZQUFVO0FBQUMsWUFBSXRzQixJQUFFLEtBQUttc0IsRUFBTCxDQUFRL21CLFFBQVIsRUFBTixDQUF5QixPQUFPbW5CLEtBQUtFLEtBQUwsQ0FBV3BNLEdBQVgsQ0FBZXNNLFFBQWYsQ0FBd0Izc0IsQ0FBeEIsQ0FBUDtBQUFrQyxPQUFsRixDQUFtRixLQUFLc3JCLFlBQUwsR0FBa0IsVUFBU3RyQixDQUFULEVBQVc7QUFBQyxhQUFLb3NCLFlBQUwsQ0FBa0Jwc0IsQ0FBbEIsRUFBcUIsT0FBTyxLQUFLc3NCLE1BQUwsRUFBUDtBQUFxQixPQUF4RSxDQUF5RSxLQUFLZixTQUFMLEdBQWUsVUFBU3ZyQixDQUFULEVBQVc7QUFBQyxhQUFLcXNCLFNBQUwsQ0FBZXJzQixDQUFmLEVBQWtCLE9BQU8sS0FBS3NzQixNQUFMLEVBQVA7QUFBcUIsT0FBbEU7QUFBbUU7QUFBQyxHQUE5ckMsQ0FBK3JDLEtBQUtGLFlBQUwsR0FBa0IsVUFBUzNyQixDQUFULEVBQVc7QUFBQyxVQUFLLHdEQUFzRCxLQUFLbXNCLE9BQTNELEdBQW1FLEdBQW5FLEdBQXVFLEtBQUtDLFFBQWpGO0FBQTBGLEdBQXhILENBQXlILEtBQUtSLFNBQUwsR0FBZSxVQUFTNXJCLENBQVQsRUFBVztBQUFDLFVBQUsscURBQW1ELEtBQUttc0IsT0FBeEQsR0FBZ0UsR0FBaEUsR0FBb0UsS0FBS0MsUUFBOUU7QUFBdUYsR0FBbEgsQ0FBbUgsS0FBS1AsTUFBTCxHQUFZLFlBQVU7QUFBQyxVQUFLLCtDQUE2QyxLQUFLTSxPQUFsRCxHQUEwRCxHQUExRCxHQUE4RCxLQUFLQyxRQUF4RTtBQUFpRixHQUF4RyxDQUF5RyxLQUFLdkIsWUFBTCxHQUFrQixVQUFTN3FCLENBQVQsRUFBVztBQUFDLFVBQUssd0RBQXNELEtBQUttc0IsT0FBM0QsR0FBbUUsR0FBbkUsR0FBdUUsS0FBS0MsUUFBakY7QUFBMEYsR0FBeEgsQ0FBeUgsS0FBS3RCLFNBQUwsR0FBZSxVQUFTOXFCLENBQVQsRUFBVztBQUFDLFVBQUsscURBQW1ELEtBQUttc0IsT0FBeEQsR0FBZ0UsR0FBaEUsR0FBb0UsS0FBS0MsUUFBOUU7QUFBdUYsR0FBbEgsQ0FBbUgsSUFBR25zQixNQUFJZCxTQUFQLEVBQWlCO0FBQUMsUUFBR2MsRUFBRTJxQixHQUFGLEtBQVF6ckIsU0FBWCxFQUFxQjtBQUFDLFdBQUtndEIsT0FBTCxHQUFhbHNCLEVBQUUycUIsR0FBZixDQUFtQixJQUFHM3FCLEVBQUU4cUIsSUFBRixLQUFTNXJCLFNBQVosRUFBc0I7QUFBQyxhQUFLaXRCLFFBQUwsR0FBYzVVLEtBQUtmLE1BQUwsQ0FBWWlCLElBQVosQ0FBaUIwUSxlQUFqQixDQUFpQyxLQUFLK0QsT0FBdEMsQ0FBZDtBQUE2RCxZQUFLVixpQkFBTCxDQUF1QixLQUFLVSxPQUE1QixFQUFvQyxLQUFLQyxRQUF6QztBQUFtRDtBQUFDO0FBQUMsQ0FBM2dFLENBQTRnRTVVLEtBQUtmLE1BQUwsQ0FBWWdCLGFBQVosQ0FBMEJFLG1CQUExQixHQUE4QyxVQUFTblgsQ0FBVCxFQUFXO0FBQUMsTUFBRyxPQUFPQSxDQUFQLEtBQVcsUUFBZCxFQUF1QjtBQUFDQSxRQUFFQSxFQUFFaWYsV0FBRixFQUFGLENBQWtCamYsSUFBRUEsRUFBRWdjLE9BQUYsQ0FBVSxHQUFWLEVBQWMsRUFBZCxDQUFGO0FBQW9CLFVBQU9oYyxDQUFQO0FBQVMsQ0FBakksQ0FBa0lnWCxLQUFLZixNQUFMLENBQVlnQixhQUFaLENBQTBCRyxhQUExQixHQUF3QyxVQUFTM1gsQ0FBVCxFQUFXO0FBQUMsTUFBSUYsSUFBRXlYLEtBQUtmLE1BQUwsQ0FBWWdCLGFBQWxCLENBQWdDLElBQUlqWCxJQUFFVCxFQUFFNFgsbUJBQUYsQ0FBc0IxWCxDQUF0QixDQUFOLENBQStCLElBQUdGLEVBQUVzc0IsVUFBRixDQUFhN3JCLENBQWIsTUFBa0JyQixTQUFyQixFQUErQjtBQUFDLFVBQUssOEJBQTRCYyxDQUFqQztBQUFtQyxVQUFPRixFQUFFc3NCLFVBQUYsQ0FBYTdyQixDQUFiLENBQVA7QUFBdUIsQ0FBN00sQ0FBOE1nWCxLQUFLZixNQUFMLENBQVlnQixhQUFaLENBQTBCNFUsVUFBMUIsR0FBcUMsRUFBQ25FLEtBQUksRUFBTCxFQUFRTixNQUFLLEVBQWIsRUFBZ0JDLFFBQU8sRUFBdkIsRUFBMEJDLFFBQU8sRUFBakMsRUFBb0NDLFFBQU8sRUFBM0MsRUFBOENDLFFBQU8sRUFBckQsRUFBd0RHLFdBQVUsRUFBbEUsRUFBckMsQ0FBMkczUSxLQUFLZixNQUFMLENBQVk2VixHQUFaLEdBQWdCLFVBQVM1c0IsQ0FBVCxFQUFXO0FBQUMsTUFBSUYsSUFBRSxJQUFOLENBQVcsSUFBSVMsSUFBRSxJQUFOLENBQVcsSUFBSU8sSUFBRSxJQUFOLENBQVcsSUFBSVIsSUFBRSxJQUFOLENBQVcsSUFBSUQsSUFBRSxJQUFOLENBQVcsS0FBSzByQixpQkFBTCxHQUF1QixVQUFTbHJCLENBQVQsRUFBV0gsQ0FBWCxFQUFhO0FBQUNHLFFBQUVBLEVBQUVrZixXQUFGLEVBQUYsQ0FBa0IsSUFBR2xmLEtBQUcsSUFBTixFQUFXO0FBQUNBLFVBQUUsVUFBRjtBQUFhLFNBQUVBLEVBQUVrZixXQUFGLEVBQUYsQ0FBa0IsSUFBR2xmLEVBQUVzQyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsS0FBZSxNQUFsQixFQUF5QjtBQUFDLFlBQUssNkNBQTJDdEMsQ0FBaEQ7QUFBa0QsU0FBR0gsTUFBSWpCLFNBQVAsRUFBaUI7QUFBQ2lCLFVBQUVvWCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCMFEsZUFBakIsQ0FBaUM3bkIsQ0FBakMsQ0FBRjtBQUFzQyxVQUFLZ3NCLE9BQUwsR0FBYWhzQixJQUFFLEdBQUYsR0FBTUgsQ0FBbkIsQ0FBcUIsSUFBSWQsSUFBRWlCLEVBQUVzQyxNQUFGLENBQVMsQ0FBVCxDQUFOLENBQWtCLElBQUcsbURBQW1ENkMsT0FBbkQsQ0FBMkRwRyxDQUEzRCxLQUErRCxDQUFDLENBQWhFLElBQW1FYyxLQUFHLFVBQXpFLEVBQW9GO0FBQUMsVUFBRztBQUFDLFlBQUlELElBQUVxWCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCMFMseUJBQWpCLENBQTJDOXFCLENBQTNDLENBQU4sQ0FBb0QsS0FBS2t0QixHQUFMLEdBQVMvckIsU0FBU3VFLElBQVQsQ0FBY0QsSUFBZCxDQUFtQjFELE1BQW5CLENBQTBCbEIsQ0FBMUIsRUFBNEIsS0FBS3NzQixJQUFqQyxDQUFUO0FBQWdELE9BQXhHLENBQXdHLE9BQU1sdEIsQ0FBTixFQUFRO0FBQUMsY0FBSyxpREFBK0NELENBQS9DLEdBQWlELEdBQWpELEdBQXFEQyxDQUExRDtBQUE0RCxZQUFLb3NCLFlBQUwsR0FBa0IsVUFBU3JyQixDQUFULEVBQVc7QUFBQyxhQUFLa3NCLEdBQUwsQ0FBUzluQixNQUFULENBQWdCcEUsQ0FBaEI7QUFBbUIsT0FBakQsQ0FBa0QsS0FBS3NyQixTQUFMLEdBQWUsVUFBU3RyQixDQUFULEVBQVc7QUFBQyxZQUFJaUMsSUFBRTlCLFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJFLEtBQWpCLENBQXVCckMsQ0FBdkIsQ0FBTixDQUFnQyxLQUFLa3NCLEdBQUwsQ0FBUzluQixNQUFULENBQWdCbkMsQ0FBaEI7QUFBbUIsT0FBOUUsQ0FBK0UsS0FBS21xQixPQUFMLEdBQWEsWUFBVTtBQUFDLFlBQUlwc0IsSUFBRSxLQUFLa3NCLEdBQUwsQ0FBUzduQixRQUFULEVBQU4sQ0FBMEIsT0FBT3JFLEVBQUVnQixRQUFGLENBQVdiLFNBQVMrQixHQUFULENBQWFDLEdBQXhCLENBQVA7QUFBb0MsT0FBdEYsQ0FBdUYsS0FBS2txQixhQUFMLEdBQW1CLFVBQVNyc0IsQ0FBVCxFQUFXO0FBQUMsYUFBS3FyQixZQUFMLENBQWtCcnJCLENBQWxCLEVBQXFCLE9BQU8sS0FBS29zQixPQUFMLEVBQVA7QUFBc0IsT0FBMUUsQ0FBMkUsS0FBS0UsVUFBTCxHQUFnQixVQUFTdHNCLENBQVQsRUFBVztBQUFDLGFBQUtzckIsU0FBTCxDQUFldHJCLENBQWYsRUFBa0IsT0FBTyxLQUFLb3NCLE9BQUwsRUFBUDtBQUFzQixPQUFwRTtBQUFxRTtBQUFDLEdBQXgzQixDQUF5M0IsS0FBS2YsWUFBTCxHQUFrQixVQUFTcnNCLENBQVQsRUFBVztBQUFDLFVBQUssd0RBQXNELEtBQUtpdEIsT0FBaEU7QUFBd0UsR0FBdEcsQ0FBdUcsS0FBS1gsU0FBTCxHQUFlLFVBQVN0c0IsQ0FBVCxFQUFXO0FBQUMsVUFBSyxxREFBbUQsS0FBS2l0QixPQUE3RDtBQUFxRSxHQUFoRyxDQUFpRyxLQUFLRyxPQUFMLEdBQWEsWUFBVTtBQUFDLFVBQUssK0NBQTZDLEtBQUtILE9BQXZEO0FBQStELEdBQXZGLENBQXdGLEtBQUtJLGFBQUwsR0FBbUIsVUFBU3J0QixDQUFULEVBQVc7QUFBQyxVQUFLLHdEQUFzRCxLQUFLaXRCLE9BQWhFO0FBQXdFLEdBQXZHLENBQXdHLEtBQUtLLFVBQUwsR0FBZ0IsVUFBU3R0QixDQUFULEVBQVc7QUFBQyxVQUFLLHFEQUFtRCxLQUFLaXRCLE9BQTdEO0FBQXFFLEdBQWpHLENBQWtHLEtBQUtNLFdBQUwsR0FBaUIsVUFBU3R0QixDQUFULEVBQVc7QUFBQyxRQUFHLE9BQU9BLENBQVAsSUFBVSxRQUFiLEVBQXNCO0FBQUMsVUFBSUQsSUFBRUMsQ0FBTixDQUFRLElBQUdBLEVBQUVjLE1BQUYsR0FBUyxDQUFULElBQVksQ0FBWixJQUFlLENBQUNkLEVBQUVnZCxLQUFGLENBQVEsZ0JBQVIsQ0FBbkIsRUFBNkM7QUFBQ2pkLFlBQUV5WSxVQUFVeFksQ0FBVixDQUFGO0FBQWUsWUFBS2t0QixJQUFMLEdBQVVoc0IsU0FBUytCLEdBQVQsQ0FBYUMsR0FBYixDQUFpQkUsS0FBakIsQ0FBdUJyRCxDQUF2QixDQUFWLENBQW9DO0FBQU8sU0FBRyxRQUFPQyxDQUFQLHlDQUFPQSxDQUFQLE1BQVUsUUFBYixFQUFzQjtBQUFDLFlBQUssZ0RBQThDQSxDQUFuRDtBQUFxRCxTQUFJRCxJQUFFLElBQU4sQ0FBVyxJQUFHQyxFQUFFcWdCLEdBQUYsS0FBUXpnQixTQUFYLEVBQXFCO0FBQUMsVUFBR0ksRUFBRXFnQixHQUFGLENBQU12ZixNQUFOLEdBQWEsQ0FBYixJQUFnQixDQUFoQixJQUFtQixDQUFDZCxFQUFFcWdCLEdBQUYsQ0FBTXJELEtBQU4sQ0FBWSxnQkFBWixDQUF2QixFQUFxRDtBQUFDLGNBQUssOEJBQTRCaGQsRUFBRXFnQixHQUFuQztBQUF1QyxXQUFFcmdCLEVBQUVxZ0IsR0FBSjtBQUFRLFNBQUdyZ0IsRUFBRXV0QixJQUFGLEtBQVMzdEIsU0FBWixFQUFzQjtBQUFDRyxVQUFFa2dCLFVBQVVqZ0IsRUFBRXV0QixJQUFaLENBQUY7QUFBb0IsU0FBR3Z0QixFQUFFd3RCLElBQUYsS0FBUzV0QixTQUFaLEVBQXNCO0FBQUNHLFVBQUV5WSxVQUFVeFksRUFBRXd0QixJQUFaLENBQUY7QUFBb0IsU0FBR3h0QixFQUFFeXRCLEdBQUYsS0FBUTd0QixTQUFYLEVBQXFCO0FBQUNHLFVBQUVzSixTQUFTckosRUFBRXl0QixHQUFYLENBQUY7QUFBa0IsU0FBR3p0QixFQUFFMHRCLElBQUYsS0FBUzl0QixTQUFaLEVBQXNCO0FBQUNHLFVBQUV1bEIsVUFBVXRsQixFQUFFMHRCLElBQVosQ0FBRjtBQUFvQixTQUFHM3RCLEtBQUcsSUFBTixFQUFXO0FBQUMsWUFBSyxnREFBOENDLENBQW5EO0FBQXFELFVBQUtrdEIsSUFBTCxHQUFVaHNCLFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJFLEtBQWpCLENBQXVCckQsQ0FBdkIsQ0FBVjtBQUFvQyxHQUFwb0IsQ0FBcW9CLElBQUdJLE1BQUlQLFNBQVAsRUFBaUI7QUFBQyxRQUFHTyxFQUFFK3NCLElBQUYsS0FBU3R0QixTQUFaLEVBQXNCO0FBQUMsV0FBSzB0QixXQUFMLENBQWlCbnRCLEVBQUUrc0IsSUFBbkI7QUFBeUIsU0FBRy9zQixFQUFFa3JCLEdBQUYsS0FBUXpyQixTQUFYLEVBQXFCO0FBQUMsV0FBS2d0QixPQUFMLEdBQWF6c0IsRUFBRWtyQixHQUFmLENBQW1CLElBQUdsckIsRUFBRXFyQixJQUFGLEtBQVM1ckIsU0FBWixFQUFzQjtBQUFDLGFBQUtpdEIsUUFBTCxHQUFjNVUsS0FBS2YsTUFBTCxDQUFZaUIsSUFBWixDQUFpQjBRLGVBQWpCLENBQWlDLEtBQUsrRCxPQUF0QyxDQUFkO0FBQTZELFlBQUtWLGlCQUFMLENBQXVCLEtBQUtVLE9BQTVCLEVBQW9DLEtBQUtDLFFBQXpDO0FBQW1EO0FBQUM7QUFBQyxDQUEveUUsQ0FBZ3pFNVUsS0FBS2YsTUFBTCxDQUFZeVcsU0FBWixHQUFzQixVQUFTcHNCLENBQVQsRUFBVztBQUFDLE1BQUlnQixJQUFFLElBQU4sQ0FBVyxJQUFJbEIsSUFBRSxJQUFOLENBQVcsSUFBSXFCLElBQUUsSUFBTixDQUFXLElBQUloQyxJQUFFLElBQU4sQ0FBVyxJQUFJSyxJQUFFLElBQU4sQ0FBVyxJQUFJWixJQUFFLElBQU4sQ0FBVyxJQUFJYSxJQUFFLElBQU4sQ0FBVyxJQUFJaEIsSUFBRSxJQUFOLENBQVcsSUFBSXNCLElBQUUsSUFBTixDQUFXLElBQUliLElBQUUsSUFBTixDQUFXLElBQUlELElBQUUsQ0FBQyxDQUFQLENBQVMsSUFBSVQsSUFBRSxJQUFOLENBQVcsSUFBSWEsSUFBRSxJQUFOLENBQVcsSUFBSUssSUFBRSxJQUFOLENBQVcsSUFBSUosSUFBRSxJQUFOLENBQVcsSUFBSVosSUFBRSxJQUFOLENBQVcsS0FBSzJ0QixZQUFMLEdBQWtCLFlBQVU7QUFBQyxRQUFJcHJCLElBQUUsS0FBS29xQixPQUFMLENBQWE1UCxLQUFiLENBQW1CLGdCQUFuQixDQUFOLENBQTJDLElBQUd4YSxDQUFILEVBQUs7QUFBQyxXQUFLcXJCLFNBQUwsR0FBZXJyQixFQUFFLENBQUYsRUFBSzBkLFdBQUwsRUFBZixDQUFrQyxLQUFLNE4sYUFBTCxHQUFtQnRyQixFQUFFLENBQUYsRUFBSzBkLFdBQUwsRUFBbkI7QUFBc0M7QUFBQyxHQUF2SixDQUF3SixLQUFLNk4sdUJBQUwsR0FBNkIsVUFBU3hwQixDQUFULEVBQVdELENBQVgsRUFBYTtBQUFDLFFBQUlHLElBQUUsRUFBTixDQUFTLElBQUluQyxJQUFFZ0MsSUFBRSxDQUFGLEdBQUlDLEVBQUV6RCxNQUFaLENBQW1CLEtBQUksSUFBSTRELElBQUUsQ0FBVixFQUFZQSxJQUFFcEMsQ0FBZCxFQUFnQm9DLEdBQWhCLEVBQW9CO0FBQUNELFVBQUVBLElBQUUsR0FBSjtBQUFRLFlBQU9BLElBQUVGLENBQVQ7QUFBVyxHQUEvRyxDQUFnSCxLQUFLMm5CLGlCQUFMLEdBQXVCLFVBQVN4bkIsQ0FBVCxFQUFXcEMsQ0FBWCxFQUFhO0FBQUMsU0FBS3NyQixZQUFMLEdBQW9CLElBQUd0ckIsS0FBRyxnQkFBTixFQUF1QjtBQUFDLFlBQUssNkJBQTJCQSxDQUFoQztBQUFrQyxTQUFHLG1EQUFtRDZELE9BQW5ELENBQTJELEtBQUswbkIsU0FBaEUsS0FBNEUsQ0FBQyxDQUFoRixFQUFrRjtBQUFDLFVBQUc7QUFBQyxhQUFLMUIsRUFBTCxHQUFRLElBQUlsVSxLQUFLZixNQUFMLENBQVlnQixhQUFoQixDQUE4QixFQUFDbVQsS0FBSSxLQUFLd0MsU0FBVixFQUE5QixDQUFSO0FBQTRELE9BQWhFLENBQWdFLE9BQU1yckIsQ0FBTixFQUFRO0FBQUMsY0FBSyw2Q0FBMkMsS0FBS3FyQixTQUFoRCxHQUEwRCxHQUExRCxHQUE4RHJyQixDQUFuRTtBQUFxRSxZQUFLZCxJQUFMLEdBQVUsVUFBUzRDLENBQVQsRUFBV0MsQ0FBWCxFQUFhO0FBQUMsWUFBSTJELElBQUUsSUFBTixDQUFXLElBQUc7QUFBQyxjQUFHM0QsTUFBSTNFLFNBQVAsRUFBaUI7QUFBQ3NJLGdCQUFFOGxCLFFBQVFDLE1BQVIsQ0FBZTNwQixDQUFmLENBQUY7QUFBb0IsV0FBdEMsTUFBMEM7QUFBQzRELGdCQUFFOGxCLFFBQVFDLE1BQVIsQ0FBZTNwQixDQUFmLEVBQWlCQyxDQUFqQixDQUFGO0FBQXNCO0FBQUMsU0FBdEUsQ0FBc0UsT0FBTUUsQ0FBTixFQUFRO0FBQUMsZ0JBQUssaUJBQWVBLENBQXBCO0FBQXNCLGFBQUd5RCxFQUFFNlEsU0FBRixLQUFjLElBQWpCLEVBQXNCO0FBQUMsZUFBS21WLE1BQUwsR0FBWWhtQixDQUFaLENBQWMsS0FBS2ltQixLQUFMLEdBQVcsTUFBWDtBQUFrQixTQUF2RCxNQUEyRDtBQUFDLGNBQUdqbUIsRUFBRTRRLFFBQUYsS0FBYSxJQUFoQixFQUFxQjtBQUFDLGlCQUFLc1YsTUFBTCxHQUFZbG1CLENBQVosQ0FBYyxLQUFLaW1CLEtBQUwsR0FBVyxRQUFYO0FBQW9CLFdBQXhELE1BQTREO0FBQUMsa0JBQUssa0JBQWdCam1CLENBQXJCO0FBQXVCO0FBQUM7QUFBQyxPQUExUixDQUEyUixLQUFLa2tCLFlBQUwsR0FBa0IsVUFBUzNuQixDQUFULEVBQVc7QUFBQyxhQUFLMG5CLEVBQUwsQ0FBUUMsWUFBUixDQUFxQjNuQixDQUFyQjtBQUF3QixPQUF0RCxDQUF1RCxLQUFLNG5CLFNBQUwsR0FBZSxVQUFTNW5CLENBQVQsRUFBVztBQUFDLGFBQUswbkIsRUFBTCxDQUFRRSxTQUFSLENBQWtCNW5CLENBQWxCO0FBQXFCLE9BQWhELENBQWlELEtBQUs0cEIsSUFBTCxHQUFVLFlBQVU7QUFBQyxhQUFLQyxRQUFMLEdBQWMsS0FBS25DLEVBQUwsQ0FBUUcsTUFBUixFQUFkLENBQStCLElBQUcsT0FBTyxLQUFLaUMsUUFBWixJQUFzQixXQUF0QixJQUFtQyxPQUFPLEtBQUtDLFdBQVosSUFBeUIsV0FBL0QsRUFBMkU7QUFBQyxjQUFJL3BCLElBQUUsSUFBSXdULEtBQUtmLE1BQUwsQ0FBWXVYLEtBQWhCLENBQXNCLEVBQUN0VSxPQUFNLEtBQUtxVSxXQUFaLEVBQXRCLENBQU4sQ0FBc0QsS0FBS0UsS0FBTCxHQUFXanFCLEVBQUVrcUIsT0FBRixDQUFVLEtBQUtMLFFBQWYsRUFBd0IsS0FBS0MsUUFBN0IsQ0FBWDtBQUFrRCxTQUFwTCxNQUF3TDtBQUFDLGNBQUcsS0FBS0wsTUFBTCxZQUF1QnpWLE1BQXZCLElBQStCLEtBQUtxVixhQUFMLEtBQXFCLFlBQXZELEVBQW9FO0FBQUMsaUJBQUtZLEtBQUwsR0FBVyxLQUFLUixNQUFMLENBQVlVLHNCQUFaLENBQW1DLEtBQUtOLFFBQXhDLEVBQWlELEtBQUtULFNBQXRELEVBQWdFLEtBQUtnQixVQUFyRSxDQUFYO0FBQTRGLFdBQWpLLE1BQXFLO0FBQUMsZ0JBQUcsS0FBS1gsTUFBTCxZQUF1QnpWLE1BQXZCLElBQStCLEtBQUtxVixhQUFMLEtBQXFCLEtBQXZELEVBQTZEO0FBQUMsbUJBQUtZLEtBQUwsR0FBVyxLQUFLUixNQUFMLENBQVlZLG1CQUFaLENBQWdDLEtBQUtSLFFBQXJDLEVBQThDLEtBQUtULFNBQW5ELENBQVg7QUFBeUUsYUFBdkksTUFBMkk7QUFBQyxrQkFBRyxLQUFLSyxNQUFMLFlBQXVCalcsS0FBS2YsTUFBTCxDQUFZdVgsS0FBdEMsRUFBNEM7QUFBQyxxQkFBS0MsS0FBTCxHQUFXLEtBQUtSLE1BQUwsQ0FBWVksbUJBQVosQ0FBZ0MsS0FBS1IsUUFBckMsQ0FBWDtBQUEwRCxlQUF2RyxNQUEyRztBQUFDLG9CQUFHLEtBQUtKLE1BQUwsWUFBdUJqVyxLQUFLZixNQUFMLENBQVk2WCxHQUF0QyxFQUEwQztBQUFDLHVCQUFLTCxLQUFMLEdBQVcsS0FBS1IsTUFBTCxDQUFZWSxtQkFBWixDQUFnQyxLQUFLUixRQUFyQyxDQUFYO0FBQTBELGlCQUFyRyxNQUF5RztBQUFDLHdCQUFLLDZDQUEyQyxLQUFLUixhQUFyRDtBQUFtRTtBQUFDO0FBQUM7QUFBQztBQUFDLGdCQUFPLEtBQUtZLEtBQVo7QUFBa0IsT0FBOTBCLENBQSswQixLQUFLTSxVQUFMLEdBQWdCLFVBQVN2cUIsQ0FBVCxFQUFXO0FBQUMsYUFBSzJuQixZQUFMLENBQWtCM25CLENBQWxCLEVBQXFCLE9BQU8sS0FBSzRwQixJQUFMLEVBQVA7QUFBbUIsT0FBcEUsQ0FBcUUsS0FBS00sT0FBTCxHQUFhLFVBQVNscUIsQ0FBVCxFQUFXO0FBQUMsYUFBSzRuQixTQUFMLENBQWU1bkIsQ0FBZixFQUFrQixPQUFPLEtBQUs0cEIsSUFBTCxFQUFQO0FBQW1CLE9BQTlELENBQStELEtBQUtZLE1BQUwsR0FBWSxVQUFTeHFCLENBQVQsRUFBVztBQUFDLGFBQUs2cEIsUUFBTCxHQUFjLEtBQUtuQyxFQUFMLENBQVFHLE1BQVIsRUFBZCxDQUErQixJQUFHLE9BQU8sS0FBSzRDLFFBQVosSUFBc0IsV0FBdEIsSUFBbUMsT0FBTyxLQUFLVixXQUFaLElBQXlCLFdBQS9ELEVBQTJFO0FBQUMsY0FBSWxxQixJQUFFLElBQUkyVCxLQUFLZixNQUFMLENBQVl1WCxLQUFoQixDQUFzQixFQUFDdFUsT0FBTSxLQUFLcVUsV0FBWixFQUF0QixDQUFOLENBQXNELE9BQU9scUIsRUFBRTZxQixTQUFGLENBQVksS0FBS2IsUUFBakIsRUFBMEI3cEIsQ0FBMUIsRUFBNEIsS0FBS3lxQixRQUFqQyxDQUFQO0FBQWtELFNBQXBMLE1BQXdMO0FBQUMsY0FBRyxLQUFLZCxNQUFMLFlBQXVCM1YsTUFBdkIsSUFBK0IsS0FBS3FWLGFBQUwsS0FBcUIsWUFBdkQsRUFBb0U7QUFBQyxtQkFBTyxLQUFLTSxNQUFMLENBQVlnQix3QkFBWixDQUFxQyxLQUFLZCxRQUExQyxFQUFtRDdwQixDQUFuRCxFQUFxRCxLQUFLb3BCLFNBQTFELEVBQW9FLEtBQUtnQixVQUF6RSxDQUFQO0FBQTRGLFdBQWpLLE1BQXFLO0FBQUMsZ0JBQUcsS0FBS1QsTUFBTCxZQUF1QjNWLE1BQXZCLElBQStCLEtBQUtxVixhQUFMLEtBQXFCLEtBQXZELEVBQTZEO0FBQUMscUJBQU8sS0FBS00sTUFBTCxDQUFZaUIscUJBQVosQ0FBa0MsS0FBS2YsUUFBdkMsRUFBZ0Q3cEIsQ0FBaEQsQ0FBUDtBQUEwRCxhQUF4SCxNQUE0SDtBQUFDLGtCQUFHd1QsS0FBS2YsTUFBTCxDQUFZdVgsS0FBWixLQUFvQjd1QixTQUFwQixJQUErQixLQUFLd3VCLE1BQUwsWUFBdUJuVyxLQUFLZixNQUFMLENBQVl1WCxLQUFyRSxFQUEyRTtBQUFDLHVCQUFPLEtBQUtMLE1BQUwsQ0FBWWlCLHFCQUFaLENBQWtDLEtBQUtmLFFBQXZDLEVBQWdEN3BCLENBQWhELENBQVA7QUFBMEQsZUFBdEksTUFBMEk7QUFBQyxvQkFBR3dULEtBQUtmLE1BQUwsQ0FBWTZYLEdBQVosS0FBa0JudkIsU0FBbEIsSUFBNkIsS0FBS3d1QixNQUFMLFlBQXVCblcsS0FBS2YsTUFBTCxDQUFZNlgsR0FBbkUsRUFBdUU7QUFBQyx5QkFBTyxLQUFLWCxNQUFMLENBQVlpQixxQkFBWixDQUFrQyxLQUFLZixRQUF2QyxFQUFnRDdwQixDQUFoRCxDQUFQO0FBQTBELGlCQUFsSSxNQUFzSTtBQUFDLHdCQUFLLDRDQUEwQyxLQUFLcXBCLGFBQXBEO0FBQWtFO0FBQUM7QUFBQztBQUFDO0FBQUM7QUFBQyxPQUE1MkI7QUFBNjJCO0FBQUMsR0FBeGhGLENBQXloRixLQUFLcHNCLElBQUwsR0FBVSxVQUFTYyxDQUFULEVBQVdGLENBQVgsRUFBYTtBQUFDLFVBQUsscURBQW1ELEtBQUtndEIsV0FBN0Q7QUFBeUUsR0FBakcsQ0FBa0csS0FBS2xELFlBQUwsR0FBa0IsVUFBUzVwQixDQUFULEVBQVc7QUFBQyxVQUFLLHVEQUFxRCxLQUFLOHNCLFdBQS9EO0FBQTJFLEdBQXpHLENBQTBHLEtBQUtqRCxTQUFMLEdBQWUsVUFBUzdwQixDQUFULEVBQVc7QUFBQyxVQUFLLG9EQUFrRCxLQUFLOHNCLFdBQTVEO0FBQXdFLEdBQW5HLENBQW9HLEtBQUtqQixJQUFMLEdBQVUsWUFBVTtBQUFDLFVBQUssNENBQTBDLEtBQUtpQixXQUFwRDtBQUFnRSxHQUFyRixDQUFzRixLQUFLTixVQUFMLEdBQWdCLFVBQVN4c0IsQ0FBVCxFQUFXO0FBQUMsVUFBSyx1REFBcUQsS0FBSzhzQixXQUEvRDtBQUEyRSxHQUF2RyxDQUF3RyxLQUFLWCxPQUFMLEdBQWEsVUFBU25zQixDQUFULEVBQVc7QUFBQyxVQUFLLG9EQUFrRCxLQUFLOHNCLFdBQTVEO0FBQXdFLEdBQWpHLENBQWtHLEtBQUtMLE1BQUwsR0FBWSxVQUFTenNCLENBQVQsRUFBVztBQUFDLFVBQUsscURBQW1ELEtBQUs4c0IsV0FBN0Q7QUFBeUUsR0FBakcsQ0FBa0csS0FBS0MsVUFBTCxHQUFnQmh1QixDQUFoQixDQUFrQixJQUFHQSxNQUFJM0IsU0FBUCxFQUFpQjtBQUFDLFFBQUcyQixFQUFFOHBCLEdBQUYsS0FBUXpyQixTQUFYLEVBQXFCO0FBQUMsV0FBS2d0QixPQUFMLEdBQWFyckIsRUFBRThwQixHQUFmLENBQW1CLElBQUc5cEIsRUFBRWlxQixJQUFGLEtBQVM1ckIsU0FBWixFQUFzQjtBQUFDLGFBQUtpdEIsUUFBTCxHQUFjNVUsS0FBS2YsTUFBTCxDQUFZaUIsSUFBWixDQUFpQjBRLGVBQWpCLENBQWlDLEtBQUsrRCxPQUF0QyxDQUFkO0FBQTZELE9BQXBGLE1BQXdGO0FBQUMsYUFBS0MsUUFBTCxHQUFjdHJCLEVBQUVpcUIsSUFBaEI7QUFBcUIsWUFBSzhELFdBQUwsR0FBaUIsS0FBSzFDLE9BQUwsR0FBYSxHQUFiLEdBQWlCLEtBQUtDLFFBQXZDLENBQWdELEtBQUtYLGlCQUFMLENBQXVCLEtBQUtVLE9BQTVCLEVBQW9DLEtBQUtDLFFBQXpDLEVBQW1ELEtBQUtlLFlBQUw7QUFBb0IsU0FBR3JzQixFQUFFaXVCLFVBQUYsS0FBZTV2QixTQUFsQixFQUE0QjtBQUFDLFdBQUtpdkIsVUFBTCxHQUFnQnR0QixFQUFFaXVCLFVBQWxCO0FBQTZCLFNBQUdqdUIsRUFBRWt1QixTQUFGLEtBQWM3dkIsU0FBakIsRUFBMkI7QUFBQyxVQUFHMkIsRUFBRW11QixTQUFGLEtBQWM5dkIsU0FBakIsRUFBMkI7QUFBQyxjQUFLLHVEQUFMO0FBQTZELE9BQXpGLE1BQTZGO0FBQUMsWUFBRztBQUFDLGNBQUkyQyxJQUFFeXJCLFFBQVFDLE1BQVIsQ0FBZTFzQixFQUFFa3VCLFNBQWpCLENBQU4sQ0FBa0MsS0FBSy90QixJQUFMLENBQVVhLENBQVY7QUFBYSxTQUFuRCxDQUFtRCxPQUFNUyxDQUFOLEVBQVE7QUFBQyxnQkFBSywwQ0FBd0NBLENBQTdDO0FBQStDO0FBQUM7QUFBQztBQUFDO0FBQUMsQ0FBeHZJLENBQXl2SWlWLEtBQUtmLE1BQUwsQ0FBWXlZLE1BQVosR0FBbUIsVUFBUzF1QixDQUFULEVBQVcsQ0FBRSxDQUFoQyxDQUFpQ2dYLEtBQUtmLE1BQUwsQ0FBWXlZLE1BQVosQ0FBbUJ0VyxPQUFuQixHQUEyQixVQUFTNVksQ0FBVCxFQUFXUixDQUFYLEVBQWFFLENBQWIsRUFBZTtBQUFDLE1BQUdGLGFBQWF3WSxNQUFiLElBQXFCeFksRUFBRTZZLFFBQTFCLEVBQW1DO0FBQUMsUUFBSXBZLElBQUV1WCxLQUFLZixNQUFMLENBQVl5WSxNQUFaLENBQW1CQyxrQkFBbkIsQ0FBc0MzdkIsQ0FBdEMsRUFBd0NFLENBQXhDLENBQU4sQ0FBaUQsSUFBR08sTUFBSSxLQUFQLEVBQWE7QUFBQyxhQUFPVCxFQUFFb1osT0FBRixDQUFVNVksQ0FBVixDQUFQO0FBQW9CLFNBQUdDLE1BQUksU0FBUCxFQUFpQjtBQUFDLGFBQU9ULEVBQUVxWixXQUFGLENBQWM3WSxDQUFkLEVBQWdCLE1BQWhCLENBQVA7QUFBK0IsU0FBSUQsSUFBRUUsRUFBRXNjLEtBQUYsQ0FBUSxnQkFBUixDQUFOLENBQWdDLElBQUd4YyxNQUFJLElBQVAsRUFBWTtBQUFDLGFBQU9QLEVBQUVxWixXQUFGLENBQWM3WSxDQUFkLEVBQWdCLFFBQU1ELEVBQUUsQ0FBRixDQUF0QixDQUFQO0FBQW1DLFdBQUssdURBQXFETCxDQUExRDtBQUE0RCxHQUFwVCxNQUF3VDtBQUFDLFVBQUssOENBQUw7QUFBb0Q7QUFBQyxDQUF6WixDQUEwWjhYLEtBQUtmLE1BQUwsQ0FBWXlZLE1BQVosQ0FBbUJFLE9BQW5CLEdBQTJCLFVBQVNwdkIsQ0FBVCxFQUFXUixDQUFYLEVBQWFFLENBQWIsRUFBZTtBQUFDLE1BQUdGLGFBQWF3WSxNQUFiLElBQXFCeFksRUFBRThZLFNBQTFCLEVBQW9DO0FBQUMsUUFBSXJZLElBQUV1WCxLQUFLZixNQUFMLENBQVl5WSxNQUFaLENBQW1CQyxrQkFBbkIsQ0FBc0MzdkIsQ0FBdEMsRUFBd0NFLENBQXhDLENBQU4sQ0FBaUQsSUFBR08sTUFBSSxLQUFQLEVBQWE7QUFBQyxhQUFPVCxFQUFFNHZCLE9BQUYsQ0FBVXB2QixDQUFWLENBQVA7QUFBb0IsU0FBR0MsTUFBSSxTQUFQLEVBQWlCO0FBQUMsYUFBT1QsRUFBRTZ2QixXQUFGLENBQWNydkIsQ0FBZCxFQUFnQixNQUFoQixDQUFQO0FBQStCLFNBQUlELElBQUVFLEVBQUVzYyxLQUFGLENBQVEsZ0JBQVIsQ0FBTixDQUFnQyxJQUFHeGMsTUFBSSxJQUFQLEVBQVk7QUFBQyxhQUFPUCxFQUFFNnZCLFdBQUYsQ0FBY3J2QixDQUFkLEVBQWdCLFFBQU1ELEVBQUUsQ0FBRixDQUF0QixDQUFQO0FBQW1DLFdBQUssdURBQXFETCxDQUExRDtBQUE0RCxHQUFyVCxNQUF5VDtBQUFDLFVBQUssOENBQUw7QUFBb0Q7QUFBQyxDQUExWixDQUEyWjhYLEtBQUtmLE1BQUwsQ0FBWXlZLE1BQVosQ0FBbUJDLGtCQUFuQixHQUFzQyxVQUFTcHZCLENBQVQsRUFBV1MsQ0FBWCxFQUFhO0FBQUMsTUFBR1QsYUFBYWlZLE1BQWhCLEVBQXVCO0FBQUMsUUFBRyw0REFBNER0UyxPQUE1RCxDQUFvRWxGLENBQXBFLEtBQXdFLENBQUMsQ0FBNUUsRUFBOEU7QUFBQyxhQUFPQSxDQUFQO0FBQVMsU0FBR0EsTUFBSSxJQUFKLElBQVVBLE1BQUlyQixTQUFqQixFQUEyQjtBQUFDLGFBQU0sS0FBTjtBQUFZLFdBQUssa0VBQWdFcUIsQ0FBckU7QUFBdUUsU0FBSyx1REFBcURBLENBQTFEO0FBQTRELENBQS9VLENBQWdWZ1gsS0FBS2YsTUFBTCxDQUFZc0wsR0FBWixHQUFnQixJQUFJLFlBQVU7QUFBQyxPQUFLdU4sV0FBTCxHQUFpQixFQUFDLHNCQUFxQixlQUF0QixFQUFzQyxrQkFBaUIsYUFBdkQsRUFBcUUsa0JBQWlCLEtBQXRGLEVBQTRGLG9CQUFtQixXQUEvRyxFQUEySCxjQUFhLFdBQXhJLEVBQW9KLGNBQWEsV0FBakssRUFBNkssY0FBYSxXQUExTCxFQUFzTSxjQUFhLFdBQW5OLEVBQStOLGNBQWEsV0FBNU8sRUFBd1Asa0JBQWlCLGFBQXpRLEVBQXVSLHNCQUFxQixlQUE1UyxFQUE0VCxzQkFBcUIsZUFBalYsRUFBakI7QUFBb1gsQ0FBblksRUFBaEI7QUFDLzVjLElBQUcsT0FBTzlYLElBQVAsSUFBYSxXQUFiLElBQTBCLENBQUNBLElBQTlCLEVBQW1DO0FBQUMsVUF5RTNCQSxJQXpFMkIsVUFBSyxFQUFMO0FBQVEsS0FBRyxPQUFPQSxLQUFLZixNQUFaLElBQW9CLFdBQXBCLElBQWlDLENBQUNlLEtBQUtmLE1BQTFDLEVBQWlEO0FBQUNlLE9BQUtmLE1BQUwsR0FBWSxFQUFaO0FBQWUsTUFBS0EsTUFBTCxDQUFZdVgsS0FBWixHQUFrQixVQUFTenVCLENBQVQsRUFBVztBQUFDLE1BQUlTLElBQUUsV0FBTixDQUFrQixJQUFJVixJQUFFLElBQU4sQ0FBVyxJQUFJUyxJQUFFLElBQU4sQ0FBVyxJQUFJUCxJQUFFLElBQU4sQ0FBVyxJQUFJZ0IsSUFBRSxJQUFJeVcsWUFBSixFQUFOLENBQXlCLElBQUl2WCxJQUFFLElBQU4sQ0FBVyxLQUFLb1osSUFBTCxHQUFVLElBQVYsQ0FBZSxLQUFLUixTQUFMLEdBQWUsS0FBZixDQUFxQixLQUFLRCxRQUFMLEdBQWMsS0FBZCxDQUFvQixTQUFTcFksQ0FBVCxDQUFXOEIsQ0FBWCxFQUFhakIsQ0FBYixFQUFlbUIsQ0FBZixFQUFpQnJCLENBQWpCLEVBQW1CO0FBQUMsUUFBSVQsSUFBRThFLEtBQUtmLEdBQUwsQ0FBU3BELEVBQUU2TixTQUFGLEVBQVQsRUFBdUIvTixFQUFFK04sU0FBRixFQUF2QixDQUFOLENBQTRDLElBQUk5TSxJQUFFRSxFQUFFZ2EsS0FBRixDQUFROVosQ0FBUixDQUFOLENBQWlCLElBQUlILElBQUVDLEVBQUUyWCxLQUFGLENBQVFXLFdBQVIsRUFBTixDQUE0QixLQUFJLElBQUl4WixJQUFFVixJQUFFLENBQVosRUFBY1UsS0FBRyxDQUFqQixFQUFtQixFQUFFQSxDQUFyQixFQUF1QjtBQUFDaUIsVUFBRUEsRUFBRWthLE9BQUYsRUFBRixDQUFjbGEsRUFBRXlGLENBQUYsR0FBSTRCLFdBQVdtRCxHQUFmLENBQW1CLElBQUd4TCxFQUFFK08sT0FBRixDQUFVaFAsQ0FBVixDQUFILEVBQWdCO0FBQUMsWUFBR0QsRUFBRWlQLE9BQUYsQ0FBVWhQLENBQVYsQ0FBSCxFQUFnQjtBQUFDaUIsY0FBRUEsRUFBRWlhLEtBQUYsQ0FBUWxhLENBQVIsQ0FBRjtBQUFhLFNBQTlCLE1BQWtDO0FBQUNDLGNBQUVBLEVBQUVpYSxLQUFGLENBQVFoYSxDQUFSLENBQUY7QUFBYTtBQUFDLE9BQWxFLE1BQXNFO0FBQUMsWUFBR25CLEVBQUVpUCxPQUFGLENBQVVoUCxDQUFWLENBQUgsRUFBZ0I7QUFBQ2lCLGNBQUVBLEVBQUVpYSxLQUFGLENBQVE5WixDQUFSLENBQUY7QUFBYTtBQUFDO0FBQUMsWUFBT0gsQ0FBUDtBQUFTLFFBQUt5dEIsWUFBTCxHQUFrQixVQUFTbnZCLENBQVQsRUFBVztBQUFDLFdBQU8sSUFBSStJLFVBQUosQ0FBZS9JLEVBQUV1TyxTQUFGLEVBQWYsRUFBNkJuTyxDQUE3QixFQUFnQ3FNLEdBQWhDLENBQW9Dek0sRUFBRTJULFFBQUYsQ0FBVzVLLFdBQVdtRCxHQUF0QixDQUFwQyxFQUFnRTBILEdBQWhFLENBQW9FN0ssV0FBV21ELEdBQS9FLENBQVA7QUFBMkYsR0FBekgsQ0FBMEgsS0FBS2tqQixhQUFMLEdBQW1CLFVBQVNwdkIsQ0FBVCxFQUFXO0FBQUMsU0FBS3F2QixRQUFMLEdBQWNqWSxLQUFLZixNQUFMLENBQVlpWixhQUFaLENBQTBCQyxTQUExQixDQUFvQ3Z2QixDQUFwQyxDQUFkLENBQXFELEtBQUt3dkIsU0FBTCxHQUFlLElBQWYsQ0FBb0IsS0FBS0MsU0FBTCxHQUFlLElBQWYsQ0FBb0IsS0FBS0MsU0FBTCxHQUFlMXZCLENBQWY7QUFBaUIsR0FBN0ksQ0FBOEksS0FBSzJ2QixnQkFBTCxHQUFzQixVQUFTM3ZCLENBQVQsRUFBVztBQUFDLFNBQUtrWSxTQUFMLEdBQWUsSUFBZixDQUFvQixLQUFLc1gsU0FBTCxHQUFleHZCLENBQWY7QUFBaUIsR0FBdkUsQ0FBd0UsS0FBSzR2QixlQUFMLEdBQXFCLFVBQVM1dkIsQ0FBVCxFQUFXO0FBQUMsU0FBS2lZLFFBQUwsR0FBYyxJQUFkLENBQW1CLEtBQUt3WCxTQUFMLEdBQWV6dkIsQ0FBZjtBQUFpQixHQUFyRSxDQUFzRSxLQUFLNnZCLGlCQUFMLEdBQXVCLFlBQVU7QUFBQyxRQUFJMXZCLElBQUUsS0FBS3N2QixTQUFYLENBQXFCLElBQUd0dkIsRUFBRXNDLE1BQUYsQ0FBUyxDQUFULEVBQVcsQ0FBWCxNQUFnQixJQUFuQixFQUF3QjtBQUFDLFlBQUssbURBQUw7QUFBeUQsU0FBSTFDLElBQUUsS0FBS3N2QixRQUFMLENBQWNTLE1BQWQsR0FBcUIsQ0FBM0IsQ0FBNkIsSUFBRzN2QixFQUFFRixNQUFGLEtBQVcsSUFBRUYsSUFBRSxDQUFsQixFQUFvQjtBQUFDLFlBQUssaUNBQUw7QUFBdUMsU0FBSUMsSUFBRSxFQUFOLENBQVNBLEVBQUUwRCxDQUFGLEdBQUl2RCxFQUFFc0MsTUFBRixDQUFTLENBQVQsRUFBVzFDLENBQVgsQ0FBSixDQUFrQkMsRUFBRXFILENBQUYsR0FBSWxILEVBQUVzQyxNQUFGLENBQVMsSUFBRTFDLENBQVgsQ0FBSixDQUFrQixPQUFPQyxDQUFQO0FBQVMsR0FBeFIsQ0FBeVIsS0FBSyt2QixzQkFBTCxHQUE0QixZQUFVO0FBQUMsUUFBSS92QixJQUFFLEtBQUswdkIsU0FBWCxDQUFxQixJQUFHMXZCLE1BQUksV0FBSixJQUFpQkEsTUFBSSxZQUFyQixJQUFtQ0EsTUFBSSxPQUF2QyxJQUFnREEsTUFBSSxZQUF2RCxFQUFvRTtBQUFDLGFBQU0sT0FBTjtBQUFjLFNBQUdBLE1BQUksV0FBSixJQUFpQkEsTUFBSSxZQUFyQixJQUFtQ0EsTUFBSSxPQUExQyxFQUFrRDtBQUFDLGFBQU0sT0FBTjtBQUFjLFlBQU8sSUFBUDtBQUFZLEdBQTVOLENBQTZOLEtBQUtnd0Isa0JBQUwsR0FBd0IsWUFBVTtBQUFDLFFBQUk3dkIsSUFBRSxLQUFLa3ZCLFFBQUwsQ0FBYzd1QixDQUFwQixDQUFzQixJQUFJQSxJQUFFLEtBQUsydUIsWUFBTCxDQUFrQmh2QixDQUFsQixDQUFOLENBQTJCLElBQUlELElBQUUsS0FBS212QixRQUFMLENBQWNwcEIsQ0FBZCxDQUFnQmlQLFFBQWhCLENBQXlCMVUsQ0FBekIsQ0FBTixDQUFrQyxJQUFJa0IsSUFBRXhCLEVBQUVtYSxJQUFGLEdBQVNyQixZQUFULEVBQU4sQ0FBOEIsSUFBSXRZLElBQUVSLEVBQUVvYSxJQUFGLEdBQVN0QixZQUFULEVBQU4sQ0FBOEIsSUFBSWhaLElBQUUsS0FBS3F2QixRQUFMLENBQWNTLE1BQWQsR0FBcUIsQ0FBM0IsQ0FBNkIsSUFBSTN0QixJQUFFLENBQUMsZUFBYTNCLEVBQUVVLFFBQUYsQ0FBVyxFQUFYLENBQWQsRUFBOEJjLEtBQTlCLENBQW9DLENBQUNoQyxDQUFyQyxDQUFOLENBQThDLElBQUk2QixJQUFFLENBQUMsZUFBYUgsRUFBRVIsUUFBRixDQUFXLEVBQVgsQ0FBZCxFQUE4QmMsS0FBOUIsQ0FBb0MsQ0FBQ2hDLENBQXJDLENBQU4sQ0FBOEMsSUFBSVMsSUFBRSxDQUFDLGVBQWFDLEVBQUVRLFFBQUYsQ0FBVyxFQUFYLENBQWQsRUFBOEJjLEtBQTlCLENBQW9DLENBQUNoQyxDQUFyQyxDQUFOLENBQThDLElBQUlELElBQUUsT0FBSzhCLENBQUwsR0FBT3BCLENBQWIsQ0FBZSxLQUFLa3ZCLGdCQUFMLENBQXNCeHRCLENBQXRCLEVBQXlCLEtBQUt5dEIsZUFBTCxDQUFxQjd2QixDQUFyQixFQUF3QixPQUFNLEVBQUMydEIsVUFBU3ZyQixDQUFWLEVBQVlrc0IsVUFBU3R1QixDQUFyQixFQUFOO0FBQThCLEdBQXZiLENBQXdiLEtBQUtrdUIsbUJBQUwsR0FBeUIsVUFBU2p1QixDQUFULEVBQVc7QUFBQyxXQUFPLEtBQUs4dEIsT0FBTCxDQUFhOXRCLENBQWIsRUFBZSxLQUFLd3ZCLFNBQXBCLENBQVA7QUFBc0MsR0FBM0UsQ0FBNEUsS0FBSzFCLE9BQUwsR0FBYSxVQUFTcHRCLENBQVQsRUFBV1gsQ0FBWCxFQUFhO0FBQUMsUUFBSTBCLElBQUUsSUFBSXNILFVBQUosQ0FBZWhKLENBQWYsRUFBaUIsRUFBakIsQ0FBTixDQUEyQixJQUFJRyxJQUFFLEtBQUttdkIsUUFBTCxDQUFjN3VCLENBQXBCLENBQXNCLElBQUlrQixJQUFFLElBQUlxSCxVQUFKLENBQWVySSxDQUFmLEVBQWlCLEVBQWpCLENBQU4sQ0FBMkIsR0FBRTtBQUFDLFVBQUl5QixJQUFFLEtBQUtndEIsWUFBTCxDQUFrQmp2QixDQUFsQixDQUFOLENBQTJCLElBQUkyRCxJQUFFLEtBQUt3ckIsUUFBTCxDQUFjcHBCLENBQXBCLENBQXNCLElBQUl4RixJQUFFb0QsRUFBRXFSLFFBQUYsQ0FBVy9TLENBQVgsQ0FBTixDQUFvQixJQUFJbkMsSUFBRVMsRUFBRTRaLElBQUYsR0FBU3JCLFlBQVQsR0FBd0J2TSxHQUF4QixDQUE0QnZNLENBQTVCLENBQU47QUFBcUMsS0FBN0csUUFBbUhGLEVBQUVpTSxTQUFGLENBQVlsRCxXQUFXMkIsSUFBdkIsS0FBOEIsQ0FBakosRUFBb0osSUFBSTlHLElBQUV6QixFQUFFa1QsVUFBRixDQUFhblYsQ0FBYixFQUFnQmdWLFFBQWhCLENBQXlCeFQsRUFBRWtTLEdBQUYsQ0FBTW5TLEVBQUV5VCxRQUFGLENBQVdsVixDQUFYLENBQU4sQ0FBekIsRUFBK0N5TSxHQUEvQyxDQUFtRHZNLENBQW5ELENBQU4sQ0FBNEQsT0FBT2tYLEtBQUtmLE1BQUwsQ0FBWXVYLEtBQVosQ0FBa0JxQyxnQkFBbEIsQ0FBbUNqd0IsQ0FBbkMsRUFBcUM0RCxDQUFyQyxDQUFQO0FBQStDLEdBQXRXLENBQXVXLEtBQUs0cEIsSUFBTCxHQUFVLFVBQVNyckIsQ0FBVCxFQUFXMEIsQ0FBWCxFQUFhO0FBQUMsUUFBSW5DLElBQUVtQyxDQUFOLENBQVEsSUFBSTlELElBQUUsS0FBS3N2QixRQUFMLENBQWM3dUIsQ0FBcEIsQ0FBc0IsSUFBSUMsSUFBRXNJLFdBQVdtbkIscUJBQVgsQ0FBaUMvdEIsQ0FBakMsQ0FBTixDQUEwQyxHQUFFO0FBQUMsVUFBSWpDLElBQUUsS0FBS2l2QixZQUFMLENBQWtCcHZCLENBQWxCLENBQU4sQ0FBMkIsSUFBSTBCLElBQUUsS0FBSzR0QixRQUFMLENBQWNwcEIsQ0FBcEIsQ0FBc0IsSUFBSXZGLElBQUVlLEVBQUV5VCxRQUFGLENBQVdoVixDQUFYLENBQU4sQ0FBb0IsSUFBSUYsSUFBRVUsRUFBRTJaLElBQUYsR0FBU3JCLFlBQVQsR0FBd0J2TSxHQUF4QixDQUE0QjFNLENBQTVCLENBQU47QUFBcUMsS0FBN0csUUFBbUhDLEVBQUVpTSxTQUFGLENBQVlsRCxXQUFXMkIsSUFBdkIsS0FBOEIsQ0FBakosRUFBb0osSUFBSTlHLElBQUUxRCxFQUFFbVYsVUFBRixDQUFhdFYsQ0FBYixFQUFnQm1WLFFBQWhCLENBQXlCelUsRUFBRW1ULEdBQUYsQ0FBTWxTLEVBQUV3VCxRQUFGLENBQVdsVixDQUFYLENBQU4sQ0FBekIsRUFBK0N5TSxHQUEvQyxDQUFtRDFNLENBQW5ELENBQU4sQ0FBNEQsT0FBTyxLQUFLb3dCLFlBQUwsQ0FBa0Jud0IsQ0FBbEIsRUFBb0I0RCxDQUFwQixDQUFQO0FBQThCLEdBQTlVLENBQStVLEtBQUs0cUIscUJBQUwsR0FBMkIsVUFBU3p1QixDQUFULEVBQVdDLENBQVgsRUFBYTtBQUFDLFdBQU8sS0FBS3N1QixTQUFMLENBQWV2dUIsQ0FBZixFQUFpQkMsQ0FBakIsRUFBbUIsS0FBS3l2QixTQUF4QixDQUFQO0FBQTBDLEdBQW5GLENBQW9GLEtBQUtuQixTQUFMLEdBQWUsVUFBU25zQixDQUFULEVBQVduQyxDQUFYLEVBQWFTLENBQWIsRUFBZTtBQUFDLFFBQUlQLENBQUosRUFBTUgsQ0FBTixDQUFRLElBQUlXLElBQUUwVyxLQUFLZixNQUFMLENBQVl1WCxLQUFaLENBQWtCd0MsV0FBbEIsQ0FBOEJwd0IsQ0FBOUIsQ0FBTixDQUF1Q0UsSUFBRVEsRUFBRW1CLENBQUosQ0FBTTlCLElBQUVXLEVBQUVpQixDQUFKLENBQU0sSUFBSXhCLENBQUosQ0FBTUEsSUFBRWtaLFVBQVVxQyxhQUFWLENBQXdCLEtBQUsyVCxRQUFMLENBQWMvVixLQUF0QyxFQUE0QzdZLENBQTVDLENBQUYsQ0FBaUQsSUFBSUQsSUFBRSxJQUFJdUksVUFBSixDQUFlNUcsQ0FBZixFQUFpQixFQUFqQixDQUFOLENBQTJCLE9BQU8sS0FBS2t1QixTQUFMLENBQWU3dkIsQ0FBZixFQUFpQk4sQ0FBakIsRUFBbUJILENBQW5CLEVBQXFCSSxDQUFyQixDQUFQO0FBQStCLEdBQTNNLENBQTRNLEtBQUtpdUIsTUFBTCxHQUFZLFVBQVMxdEIsQ0FBVCxFQUFXRCxDQUFYLEVBQWFWLENBQWIsRUFBZTtBQUFDLFFBQUlHLENBQUosRUFBTUYsQ0FBTixDQUFRLElBQUdzd0IsUUFBUWhaLElBQVIsQ0FBYWlaLE9BQWIsQ0FBcUI5dkIsQ0FBckIsQ0FBSCxFQUEyQjtBQUFDLFVBQUlELElBQUUsS0FBS2d3QixRQUFMLENBQWMvdkIsQ0FBZCxDQUFOLENBQXVCUCxJQUFFTSxFQUFFcUIsQ0FBSixDQUFNN0IsSUFBRVEsRUFBRW1CLENBQUo7QUFBTSxLQUEvRCxNQUFtRTtBQUFDLFVBQUcscUJBQWtCbEIsQ0FBbEIseUNBQWtCQSxDQUFsQixNQUFxQkEsRUFBRW9CLENBQXZCLElBQTBCcEIsRUFBRWtCLENBQS9CLEVBQWlDO0FBQUN6QixZQUFFTyxFQUFFb0IsQ0FBSixDQUFNN0IsSUFBRVMsRUFBRWtCLENBQUo7QUFBTSxPQUE5QyxNQUFrRDtBQUFDLGNBQUssNkJBQUw7QUFBbUM7QUFBQyxTQUFJeEIsQ0FBSixDQUFNLElBQUdKLGFBQWFzWixTQUFoQixFQUEwQjtBQUFDbFosVUFBRUosQ0FBRjtBQUFJLEtBQS9CLE1BQW1DO0FBQUMsVUFBR3V3QixRQUFRaFosSUFBUixDQUFhaVosT0FBYixDQUFxQnh3QixDQUFyQixDQUFILEVBQTJCO0FBQUNJLFlBQUVrWixVQUFVb0MsVUFBVixDQUFxQixLQUFLNFQsUUFBTCxDQUFjL1YsS0FBbkMsRUFBeUN2WixDQUF6QyxDQUFGO0FBQThDLE9BQTFFLE1BQThFO0FBQUMsY0FBSyxrRUFBTDtBQUF3RTtBQUFDLFNBQUlvQyxJQUFFNEcsV0FBV21uQixxQkFBWCxDQUFpQ3h2QixDQUFqQyxDQUFOLENBQTBDLE9BQU8sS0FBSzJ2QixTQUFMLENBQWVsdUIsQ0FBZixFQUFpQmpDLENBQWpCLEVBQW1CRixDQUFuQixFQUFxQkcsQ0FBckIsQ0FBUDtBQUErQixHQUExYyxDQUEyYyxLQUFLa3dCLFNBQUwsR0FBZSxVQUFTM3ZCLENBQVQsRUFBV1YsQ0FBWCxFQUFheUQsQ0FBYixFQUFldEIsQ0FBZixFQUFpQjtBQUFDLFFBQUlqQyxJQUFFLEtBQUttdkIsUUFBTCxDQUFjN3VCLENBQXBCLENBQXNCLElBQUlxRCxJQUFFLEtBQUt3ckIsUUFBTCxDQUFjcHBCLENBQXBCLENBQXNCLElBQUdqRyxFQUFFaU0sU0FBRixDQUFZbEQsV0FBV21ELEdBQXZCLElBQTRCLENBQTVCLElBQStCbE0sRUFBRWlNLFNBQUYsQ0FBWS9MLENBQVosS0FBZ0IsQ0FBbEQsRUFBb0Q7QUFBQyxhQUFPLEtBQVA7QUFBYSxTQUFHdUQsRUFBRXdJLFNBQUYsQ0FBWWxELFdBQVdtRCxHQUF2QixJQUE0QixDQUE1QixJQUErQnpJLEVBQUV3SSxTQUFGLENBQVkvTCxDQUFaLEtBQWdCLENBQWxELEVBQW9EO0FBQUMsYUFBTyxLQUFQO0FBQWEsU0FBSU8sSUFBRWdELEVBQUU0UixVQUFGLENBQWFuVixDQUFiLENBQU4sQ0FBc0IsSUFBSUMsSUFBRU8sRUFBRXdVLFFBQUYsQ0FBV3pVLENBQVgsRUFBY2dNLEdBQWQsQ0FBa0J2TSxDQUFsQixDQUFOLENBQTJCLElBQUlILElBQUVDLEVBQUVrVixRQUFGLENBQVd6VSxDQUFYLEVBQWNnTSxHQUFkLENBQWtCdk0sQ0FBbEIsQ0FBTixDQUEyQixJQUFJd0IsSUFBRW1DLEVBQUVxUixRQUFGLENBQVcvVSxDQUFYLEVBQWN5VCxHQUFkLENBQWtCelIsRUFBRStTLFFBQUYsQ0FBV25WLENBQVgsQ0FBbEIsQ0FBTixDQUF1QyxJQUFJMEIsSUFBRUMsRUFBRTJZLElBQUYsR0FBU3JCLFlBQVQsR0FBd0J2TSxHQUF4QixDQUE0QnZNLENBQTVCLENBQU4sQ0FBcUMsT0FBT3VCLEVBQUUrUyxNQUFGLENBQVN4VSxDQUFULENBQVA7QUFBbUIsR0FBNVgsQ0FBNlgsS0FBS213QixZQUFMLEdBQWtCLFVBQVNod0IsQ0FBVCxFQUFXSixDQUFYLEVBQWE7QUFBQyxRQUFJRyxJQUFFQyxFQUFFc3dCLGlCQUFGLEVBQU4sQ0FBNEIsSUFBSXp3QixJQUFFRCxFQUFFMHdCLGlCQUFGLEVBQU4sQ0FBNEIsSUFBSXR1QixJQUFFLEVBQU4sQ0FBU0EsRUFBRUQsSUFBRixDQUFPLENBQVAsRUFBVUMsRUFBRUQsSUFBRixDQUFPaEMsRUFBRUQsTUFBVCxFQUFpQmtDLElBQUVBLEVBQUVYLE1BQUYsQ0FBU3RCLENBQVQsQ0FBRixDQUFjaUMsRUFBRUQsSUFBRixDQUFPLENBQVAsRUFBVUMsRUFBRUQsSUFBRixDQUFPbEMsRUFBRUMsTUFBVCxFQUFpQmtDLElBQUVBLEVBQUVYLE1BQUYsQ0FBU3hCLENBQVQsQ0FBRixDQUFjbUMsRUFBRXFaLE9BQUYsQ0FBVXJaLEVBQUVsQyxNQUFaLEVBQW9Ca0MsRUFBRXFaLE9BQUYsQ0FBVSxFQUFWLEVBQWMsT0FBT3JaLENBQVA7QUFBUyxHQUE5TixDQUErTixLQUFLcXVCLFFBQUwsR0FBYyxVQUFTaHdCLENBQVQsRUFBVztBQUFDLFFBQUkyQixDQUFKLENBQU0sSUFBRzNCLEVBQUUsQ0FBRixLQUFNLEVBQVQsRUFBWTtBQUFDLFlBQU0sSUFBSW5CLEtBQUosQ0FBVSxtQ0FBVixDQUFOO0FBQXFELFNBQUUsQ0FBRixDQUFJLElBQUdtQixFQUFFMkIsQ0FBRixLQUFNLENBQVQsRUFBVztBQUFDLFlBQU0sSUFBSTlDLEtBQUosQ0FBVSxpREFBVixDQUFOO0FBQW1FLFNBQUlhLElBQUVNLEVBQUV3QixLQUFGLENBQVFHLElBQUUsQ0FBVixFQUFZQSxJQUFFLENBQUYsR0FBSTNCLEVBQUUyQixJQUFFLENBQUosQ0FBaEIsQ0FBTixDQUE4QkEsS0FBRyxJQUFFM0IsRUFBRTJCLElBQUUsQ0FBSixDQUFMLENBQVksSUFBRzNCLEVBQUUyQixDQUFGLEtBQU0sQ0FBVCxFQUFXO0FBQUMsWUFBTSxJQUFJOUMsS0FBSixDQUFVLGtEQUFWLENBQU47QUFBb0UsU0FBSVcsSUFBRVEsRUFBRXdCLEtBQUYsQ0FBUUcsSUFBRSxDQUFWLEVBQVlBLElBQUUsQ0FBRixHQUFJM0IsRUFBRTJCLElBQUUsQ0FBSixDQUFoQixDQUFOLENBQThCQSxLQUFHLElBQUUzQixFQUFFMkIsSUFBRSxDQUFKLENBQUwsQ0FBWSxJQUFJaEMsSUFBRTRJLFdBQVdtbkIscUJBQVgsQ0FBaUNod0IsQ0FBakMsQ0FBTixDQUEwQyxJQUFJSCxJQUFFZ0osV0FBV21uQixxQkFBWCxDQUFpQ2x3QixDQUFqQyxDQUFOLENBQTBDLE9BQU0sRUFBQzZCLEdBQUUxQixDQUFILEVBQUt3QixHQUFFNUIsQ0FBUCxFQUFOO0FBQWdCLEdBQTdiLENBQThiLEtBQUsyd0IsZUFBTCxHQUFxQixVQUFTdnVCLENBQVQsRUFBVztBQUFDLFFBQUdBLEVBQUVsQyxNQUFGLEtBQVcsRUFBZCxFQUFpQjtBQUFDLFlBQUssZ0NBQUw7QUFBc0MsU0FBSUYsSUFBRW9DLEVBQUUsQ0FBRixJQUFLLEVBQVgsQ0FBYyxJQUFHcEMsSUFBRSxDQUFGLElBQUtBLElBQUUsQ0FBVixFQUFZO0FBQUMsWUFBSyx3QkFBTDtBQUE4QixTQUFJVyxJQUFFLEtBQUsydUIsUUFBTCxDQUFjN3VCLENBQXBCLENBQXNCLElBQUlOLElBQUU2SSxXQUFXbW5CLHFCQUFYLENBQWlDL3RCLEVBQUVILEtBQUYsQ0FBUSxDQUFSLEVBQVUsRUFBVixDQUFqQyxFQUFnRHlLLEdBQWhELENBQW9EL0wsQ0FBcEQsQ0FBTixDQUE2RCxJQUFJUCxJQUFFNEksV0FBV21uQixxQkFBWCxDQUFpQy90QixFQUFFSCxLQUFGLENBQVEsRUFBUixFQUFXLEVBQVgsQ0FBakMsRUFBaUR5SyxHQUFqRCxDQUFxRC9MLENBQXJELENBQU4sQ0FBOEQsT0FBTSxFQUFDbUIsR0FBRTNCLENBQUgsRUFBS3lCLEdBQUV4QixDQUFQLEVBQVNILEdBQUVELENBQVgsRUFBTjtBQUFvQixHQUF2VCxDQUF3VCxLQUFLNHdCLGtCQUFMLEdBQXdCLFVBQVN6d0IsQ0FBVCxFQUFXO0FBQUMsUUFBSU0sSUFBRWdpQixPQUFOLENBQWMsSUFBSXJnQixJQUFFaVYsS0FBS2YsTUFBTCxDQUFZdVgsS0FBWixDQUFrQmdELE9BQXhCLENBQWdDLElBQUlud0IsSUFBRUQsRUFBRTRpQixVQUFSLENBQW1CLElBQUc1aUIsRUFBRWdqQixTQUFGLENBQVl0akIsQ0FBWixNQUFpQixLQUFwQixFQUEwQjtBQUFDLFlBQUssc0JBQUw7QUFBNEIsU0FBSUYsQ0FBSixFQUFNRyxDQUFOLEVBQVFPLENBQVIsQ0FBVSxJQUFHO0FBQUNWLFVBQUVTLEVBQUVQLENBQUYsRUFBSSxDQUFKLEVBQU0sQ0FBQyxDQUFELEVBQUcsQ0FBSCxDQUFOLEVBQVksSUFBWixDQUFGLENBQW9CQyxJQUFFTSxFQUFFUCxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxDQUFOLEVBQVUsSUFBVixDQUFGLENBQWtCLElBQUc7QUFBQ1EsWUFBRUQsRUFBRVAsQ0FBRixFQUFJLENBQUosRUFBTSxDQUFDLENBQUQsRUFBRyxDQUFILENBQU4sRUFBWSxJQUFaLEVBQWtCdUMsTUFBbEIsQ0FBeUIsQ0FBekIsQ0FBRjtBQUE4QixPQUFsQyxDQUFrQyxPQUFNMUMsQ0FBTixFQUFRLENBQUU7QUFBQyxLQUF2RixDQUF1RixPQUFNQSxDQUFOLEVBQVE7QUFBQyxZQUFLLDBDQUFMO0FBQWdELFVBQUsydkIsU0FBTCxHQUFldnRCLEVBQUVuQyxDQUFGLENBQWYsQ0FBb0IsSUFBRyxLQUFLMHZCLFNBQUwsS0FBaUIzd0IsU0FBcEIsRUFBOEI7QUFBQyxZQUFLLHdCQUFMO0FBQThCLFVBQUtxd0IsYUFBTCxDQUFtQixLQUFLTSxTQUF4QixFQUFtQyxLQUFLRSxlQUFMLENBQXFCbHZCLENBQXJCLEVBQXdCLEtBQUtpdkIsZ0JBQUwsQ0FBc0J4dkIsQ0FBdEIsRUFBeUIsS0FBSzhYLFFBQUwsR0FBYyxLQUFkO0FBQW9CLEdBQS9lLENBQWdmLEtBQUs0WSxrQkFBTCxHQUF3QixVQUFTM3dCLENBQVQsRUFBVztBQUFDLFFBQUl3QixJQUFFOGdCLE9BQU4sQ0FBYyxJQUFJeGlCLElBQUVvWCxLQUFLZixNQUFMLENBQVl1WCxLQUFaLENBQWtCZ0QsT0FBeEIsQ0FBZ0MsSUFBSXB3QixJQUFFa0IsRUFBRTBoQixVQUFSLENBQW1CLElBQUcxaEIsRUFBRThoQixTQUFGLENBQVl0akIsQ0FBWixNQUFpQixLQUFwQixFQUEwQjtBQUFDLFlBQUssc0JBQUw7QUFBNEIsU0FBSUgsQ0FBSixFQUFNVSxDQUFOLEVBQVEwQixDQUFSLEVBQVVoQyxDQUFWLENBQVksSUFBRztBQUFDSixVQUFFUyxFQUFFTixDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxFQUFHLENBQUgsQ0FBTixFQUFZLElBQVosQ0FBRixDQUFvQk8sSUFBRUQsRUFBRU4sQ0FBRixFQUFJLENBQUosRUFBTSxDQUFDLENBQUQsRUFBRyxDQUFILENBQU4sRUFBWSxJQUFaLENBQUYsQ0FBb0JpQyxJQUFFM0IsRUFBRU4sQ0FBRixFQUFJLENBQUosRUFBTSxDQUFDLENBQUQsRUFBRyxDQUFILEVBQUssQ0FBTCxDQUFOLEVBQWMsSUFBZCxDQUFGLENBQXNCLElBQUc7QUFBQ0MsWUFBRUssRUFBRU4sQ0FBRixFQUFJLENBQUosRUFBTSxDQUFDLENBQUQsRUFBRyxDQUFILEVBQUssQ0FBTCxFQUFPLENBQVAsQ0FBTixFQUFnQixJQUFoQixFQUFzQnVDLE1BQXRCLENBQTZCLENBQTdCLENBQUY7QUFBa0MsT0FBdEMsQ0FBc0MsT0FBTS9CLENBQU4sRUFBUSxDQUFFO0FBQUMsS0FBbkgsQ0FBbUgsT0FBTUEsQ0FBTixFQUFRO0FBQUMsWUFBSyx3Q0FBTDtBQUE4QyxVQUFLZ3ZCLFNBQUwsR0FBZTF2QixFQUFFUyxDQUFGLENBQWYsQ0FBb0IsSUFBRyxLQUFLaXZCLFNBQUwsS0FBaUIzd0IsU0FBcEIsRUFBOEI7QUFBQyxZQUFLLHdCQUFMO0FBQThCLFVBQUtxd0IsYUFBTCxDQUFtQixLQUFLTSxTQUF4QixFQUFtQyxLQUFLRSxlQUFMLENBQXFCenZCLENBQXJCLEVBQXdCLEtBQUt3dkIsZ0JBQUwsQ0FBc0J4dEIsQ0FBdEIsRUFBeUIsS0FBSzhWLFFBQUwsR0FBYyxLQUFkO0FBQW9CLEdBQTNnQixDQUE0Z0IsS0FBSzZZLGtCQUFMLEdBQXdCLFVBQVM1d0IsQ0FBVCxFQUFXO0FBQUMsUUFBSU0sSUFBRWdpQixPQUFOLENBQWMsSUFBSXJnQixJQUFFaVYsS0FBS2YsTUFBTCxDQUFZdVgsS0FBWixDQUFrQmdELE9BQXhCLENBQWdDLElBQUlud0IsSUFBRUQsRUFBRTRpQixVQUFSLENBQW1CLElBQUc1aUIsRUFBRWdqQixTQUFGLENBQVl0akIsQ0FBWixNQUFpQixLQUFwQixFQUEwQjtBQUFDLFlBQUssc0JBQUw7QUFBNEIsU0FBSUMsQ0FBSixFQUFNSCxDQUFOLEVBQVFVLENBQVIsQ0FBVSxJQUFHO0FBQUNQLFVBQUVNLEVBQUVQLENBQUYsRUFBSSxDQUFKLEVBQU0sQ0FBQyxDQUFELEVBQUcsQ0FBSCxDQUFOLEVBQVksSUFBWixDQUFGLENBQW9CRixJQUFFUyxFQUFFUCxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxFQUFHLENBQUgsQ0FBTixFQUFZLElBQVosQ0FBRixDQUFvQlEsSUFBRUQsRUFBRVAsQ0FBRixFQUFJLENBQUosRUFBTSxDQUFDLENBQUQsQ0FBTixFQUFVLElBQVYsRUFBZ0J1QyxNQUFoQixDQUF1QixDQUF2QixDQUFGO0FBQTRCLEtBQXhFLENBQXdFLE9BQU0xQyxDQUFOLEVBQVE7QUFBQyxZQUFLLGlDQUFMO0FBQXVDLFVBQUsydkIsU0FBTCxHQUFldnRCLEVBQUVuQyxDQUFGLENBQWYsQ0FBb0IsSUFBRyxLQUFLMHZCLFNBQUwsS0FBaUIsSUFBcEIsRUFBeUI7QUFBQyxZQUFLLHdCQUFMO0FBQThCLFVBQUtOLGFBQUwsQ0FBbUIsS0FBS00sU0FBeEIsRUFBbUMsS0FBS0UsZUFBTCxDQUFxQmx2QixDQUFyQjtBQUF3QixHQUFyYSxDQUFzYSxLQUFLcXdCLGlCQUFMLEdBQXVCLFVBQVM1d0IsQ0FBVCxFQUFXTSxDQUFYLEVBQWE7QUFBQyxRQUFHQSxNQUFJLENBQVAsRUFBUztBQUFDQSxVQUFFLENBQUY7QUFBSSxTQUFJMEIsSUFBRXFnQixPQUFOLENBQWMsSUFBSXRpQixJQUFFa1gsS0FBS2YsTUFBTCxDQUFZdVgsS0FBWixDQUFrQmdELE9BQXhCLENBQWdDLElBQUlsd0IsSUFBRXlCLEVBQUVpaEIsVUFBUixDQUFtQixJQUFHamhCLEVBQUVxaEIsU0FBRixDQUFZcmpCLENBQVosTUFBaUIsS0FBcEIsRUFBMEI7QUFBQyxZQUFLLHNCQUFMO0FBQTRCLFNBQUlILENBQUosRUFBTVEsQ0FBTixDQUFRLElBQUc7QUFBQ1IsVUFBRVUsRUFBRVAsQ0FBRixFQUFJLENBQUosRUFBTSxDQUFDLENBQUQsRUFBR00sQ0FBSCxFQUFLLENBQUwsRUFBTyxDQUFQLENBQU4sRUFBZ0IsSUFBaEIsQ0FBRixDQUF3QkQsSUFBRUUsRUFBRVAsQ0FBRixFQUFJLENBQUosRUFBTSxDQUFDLENBQUQsRUFBR00sQ0FBSCxFQUFLLENBQUwsQ0FBTixFQUFjLElBQWQsRUFBb0JnQyxNQUFwQixDQUEyQixDQUEzQixDQUFGO0FBQWdDLEtBQTVELENBQTRELE9BQU0xQyxDQUFOLEVBQVE7QUFBQyxZQUFLLDRDQUFMO0FBQWtELFVBQUsydkIsU0FBTCxHQUFleHZCLEVBQUVGLENBQUYsQ0FBZixDQUFvQixJQUFHLEtBQUswdkIsU0FBTCxLQUFpQixJQUFwQixFQUF5QjtBQUFDLFlBQUssd0JBQUw7QUFBOEIsVUFBS04sYUFBTCxDQUFtQixLQUFLTSxTQUF4QixFQUFtQyxLQUFLRSxlQUFMLENBQXFCcHZCLENBQXJCO0FBQXdCLEdBQWpiLENBQWtiLElBQUdyQixNQUFJSixTQUFQLEVBQWlCO0FBQUMsUUFBR0ksRUFBRW1hLEtBQUYsS0FBVXZhLFNBQWIsRUFBdUI7QUFBQyxXQUFLMndCLFNBQUwsR0FBZXZ3QixFQUFFbWEsS0FBakI7QUFBdUI7QUFBQyxPQUFHLEtBQUtvVyxTQUFMLEtBQWlCM3dCLFNBQXBCLEVBQThCO0FBQUMsU0FBSzJ3QixTQUFMLEdBQWU5dkIsQ0FBZjtBQUFpQixRQUFLd3ZCLGFBQUwsQ0FBbUIsS0FBS00sU0FBeEIsRUFBbUMsSUFBR3Z3QixNQUFJSixTQUFQLEVBQWlCO0FBQUMsUUFBR0ksRUFBRTZ4QixHQUFGLEtBQVFqeUIsU0FBWCxFQUFxQjtBQUFDLFdBQUs0d0IsZ0JBQUwsQ0FBc0J4d0IsRUFBRTZ4QixHQUF4QjtBQUE2QixTQUFHN3hCLEVBQUU4eEIsR0FBRixLQUFRbHlCLFNBQVgsRUFBcUI7QUFBQyxXQUFLNndCLGVBQUwsQ0FBcUJ6d0IsRUFBRTh4QixHQUF2QjtBQUE0QjtBQUFDO0FBQUMsQ0FBeHFOLENBQXlxTjdaLEtBQUtmLE1BQUwsQ0FBWXVYLEtBQVosQ0FBa0J3QyxXQUFsQixHQUE4QixVQUFTaHdCLENBQVQsRUFBVztBQUFDLE1BQUlULElBQUV5WCxLQUFLZixNQUFMLENBQVl1WCxLQUFaLENBQWtCc0Qsa0JBQWxCLENBQXFDOXdCLENBQXJDLENBQU4sQ0FBOEMsSUFBSWQsSUFBRSxJQUFJeUosVUFBSixDQUFlcEosRUFBRWtDLENBQWpCLEVBQW1CLEVBQW5CLENBQU4sQ0FBNkIsSUFBSWhDLElBQUUsSUFBSWtKLFVBQUosQ0FBZXBKLEVBQUVnQyxDQUFqQixFQUFtQixFQUFuQixDQUFOLENBQTZCLE9BQU0sRUFBQ0UsR0FBRXZDLENBQUgsRUFBS3FDLEdBQUU5QixDQUFQLEVBQU47QUFBZ0IsQ0FBbEssQ0FBbUt1WCxLQUFLZixNQUFMLENBQVl1WCxLQUFaLENBQWtCc0Qsa0JBQWxCLEdBQXFDLFVBQVM5eEIsQ0FBVCxFQUFXO0FBQUMsTUFBSVcsSUFBRXlpQixPQUFOLENBQWMsSUFBSXhpQixJQUFFRCxFQUFFaWpCLFdBQVIsQ0FBb0IsSUFBSTlqQixJQUFFYSxFQUFFOGlCLElBQVIsQ0FBYSxJQUFHempCLEVBQUVxRCxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsS0FBZSxJQUFsQixFQUF1QjtBQUFDLFVBQUssbUNBQUw7QUFBeUMsT0FBSXRELElBQUVhLEVBQUVaLENBQUYsRUFBSSxDQUFKLENBQU4sQ0FBYSxJQUFHRCxFQUFFYyxNQUFGLElBQVUsQ0FBYixFQUFlO0FBQUMsVUFBSyx3REFBTDtBQUE4RCxPQUFJTCxJQUFFVCxFQUFFLENBQUYsQ0FBTixDQUFXLElBQUlHLElBQUVILEVBQUUsQ0FBRixDQUFOLENBQVcsSUFBR0MsRUFBRXFELE1BQUYsQ0FBUzdDLENBQVQsRUFBVyxDQUFYLEtBQWUsSUFBbEIsRUFBdUI7QUFBQyxVQUFLLHVEQUFMO0FBQTZELE9BQUdSLEVBQUVxRCxNQUFGLENBQVNuRCxDQUFULEVBQVcsQ0FBWCxLQUFlLElBQWxCLEVBQXVCO0FBQUMsVUFBSyx1REFBTDtBQUE2RCxPQUFJTyxJQUFFWCxFQUFFRSxDQUFGLEVBQUlRLENBQUosQ0FBTixDQUFhLElBQUlELElBQUVULEVBQUVFLENBQUYsRUFBSUUsQ0FBSixDQUFOLENBQWEsT0FBTSxFQUFDdUMsR0FBRWhDLENBQUgsRUFBSzhCLEdBQUVoQyxDQUFQLEVBQU47QUFBZ0IsQ0FBdGUsQ0FBdWV5WCxLQUFLZixNQUFMLENBQVl1WCxLQUFaLENBQWtCdUQsa0JBQWxCLEdBQXFDLFVBQVN0eEIsQ0FBVCxFQUFXO0FBQUMsTUFBSVAsSUFBRThYLEtBQUtmLE1BQUwsQ0FBWXVYLEtBQVosQ0FBa0JzRCxrQkFBbEIsQ0FBcUNyeEIsQ0FBckMsQ0FBTixDQUE4QyxJQUFJRixJQUFFTCxFQUFFdUMsQ0FBUixDQUFVLElBQUl6QixJQUFFZCxFQUFFcUMsQ0FBUixDQUFVLElBQUdoQyxFQUFFOEMsTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLEtBQWUsSUFBZixJQUFzQjlDLEVBQUVNLE1BQUYsR0FBUyxFQUFWLElBQWUsQ0FBdkMsRUFBeUM7QUFBQ04sUUFBRUEsRUFBRThDLE1BQUYsQ0FBUyxDQUFULENBQUY7QUFBYyxPQUFHckMsRUFBRXFDLE1BQUYsQ0FBUyxDQUFULEVBQVcsQ0FBWCxLQUFlLElBQWYsSUFBc0JyQyxFQUFFSCxNQUFGLEdBQVMsRUFBVixJQUFlLENBQXZDLEVBQXlDO0FBQUNHLFFBQUVBLEVBQUVxQyxNQUFGLENBQVMsQ0FBVCxDQUFGO0FBQWMsT0FBSTlDLEVBQUVNLE1BQUYsR0FBUyxFQUFWLElBQWUsRUFBbEIsRUFBcUI7QUFBQ04sUUFBRSxPQUFLQSxDQUFQO0FBQVMsT0FBSVMsRUFBRUgsTUFBRixHQUFTLEVBQVYsSUFBZSxFQUFsQixFQUFxQjtBQUFDRyxRQUFFLE9BQUtBLENBQVA7QUFBUyxPQUFHVCxFQUFFTSxNQUFGLEdBQVMsRUFBVCxJQUFhLENBQWhCLEVBQWtCO0FBQUMsVUFBSyxrQ0FBTDtBQUF3QyxPQUFHRyxFQUFFSCxNQUFGLEdBQVMsRUFBVCxJQUFhLENBQWhCLEVBQWtCO0FBQUMsVUFBSyxrQ0FBTDtBQUF3QyxVQUFPTixJQUFFUyxDQUFUO0FBQVcsQ0FBbGEsQ0FBbWFnWCxLQUFLZixNQUFMLENBQVl1WCxLQUFaLENBQWtCd0Qsa0JBQWxCLEdBQXFDLFVBQVNoeEIsQ0FBVCxFQUFXO0FBQUMsTUFBTUEsRUFBRUgsTUFBRixHQUFTLENBQVYsR0FBYSxDQUFkLElBQWtCLEtBQUcsQ0FBckIsQ0FBRCxJQUEyQixDQUE5QixFQUFnQztBQUFDLFVBQUssa0RBQUw7QUFBd0QsT0FBSUosSUFBRU8sRUFBRXFDLE1BQUYsQ0FBUyxDQUFULEVBQVdyQyxFQUFFSCxNQUFGLEdBQVMsQ0FBcEIsQ0FBTixDQUE2QixJQUFJTixJQUFFUyxFQUFFcUMsTUFBRixDQUFTckMsRUFBRUgsTUFBRixHQUFTLENBQWxCLENBQU4sQ0FBMkIsT0FBT21YLEtBQUtmLE1BQUwsQ0FBWXVYLEtBQVosQ0FBa0J5RCxpQkFBbEIsQ0FBb0N4eEIsQ0FBcEMsRUFBc0NGLENBQXRDLENBQVA7QUFBZ0QsQ0FBbFAsQ0FBbVB5WCxLQUFLZixNQUFMLENBQVl1WCxLQUFaLENBQWtCeUQsaUJBQWxCLEdBQW9DLFVBQVMxeEIsQ0FBVCxFQUFXUyxDQUFYLEVBQWE7QUFBQyxNQUFJZCxJQUFFLElBQUl5SixVQUFKLENBQWVwSixDQUFmLEVBQWlCLEVBQWpCLENBQU4sQ0FBMkIsSUFBSUUsSUFBRSxJQUFJa0osVUFBSixDQUFlM0ksQ0FBZixFQUFpQixFQUFqQixDQUFOLENBQTJCLE9BQU9nWCxLQUFLZixNQUFMLENBQVl1WCxLQUFaLENBQWtCcUMsZ0JBQWxCLENBQW1DM3dCLENBQW5DLEVBQXFDTyxDQUFyQyxDQUFQO0FBQStDLENBQXZKLENBQXdKdVgsS0FBS2YsTUFBTCxDQUFZdVgsS0FBWixDQUFrQnFDLGdCQUFsQixHQUFtQyxVQUFTN3dCLENBQVQsRUFBV0UsQ0FBWCxFQUFhO0FBQUMsTUFBSU8sSUFBRXVYLEtBQUtrRixJQUFYLENBQWdCLElBQUkzYyxJQUFFLElBQUlFLEVBQUVpZCxVQUFOLENBQWlCLEVBQUNtRSxRQUFPN2hCLENBQVIsRUFBakIsQ0FBTixDQUFtQyxJQUFJZ0IsSUFBRSxJQUFJUCxFQUFFaWQsVUFBTixDQUFpQixFQUFDbUUsUUFBTzNoQixDQUFSLEVBQWpCLENBQU4sQ0FBbUMsSUFBSU0sSUFBRSxJQUFJQyxFQUFFOGQsV0FBTixDQUFrQixFQUFDSSxPQUFNLENBQUNwZSxDQUFELEVBQUdTLENBQUgsQ0FBUCxFQUFsQixDQUFOLENBQXVDLE9BQU9SLEVBQUV3ZSxhQUFGLEVBQVA7QUFBeUIsQ0FBdk0sQ0FBd01oSCxLQUFLZixNQUFMLENBQVl1WCxLQUFaLENBQWtCZ0QsT0FBbEIsR0FBMEIsVUFBU3h3QixDQUFULEVBQVc7QUFBQyxNQUFHQSxNQUFJLGtCQUFQLEVBQTBCO0FBQUMsV0FBTSxXQUFOO0FBQWtCLE9BQUdBLE1BQUksWUFBUCxFQUFvQjtBQUFDLFdBQU0sV0FBTjtBQUFrQixPQUFHQSxNQUFJLFlBQVAsRUFBb0I7QUFBQyxXQUFNLFdBQU47QUFBa0IsT0FBRywwQ0FBMENrRixPQUExQyxDQUFrRGxGLENBQWxELE1BQXVELENBQUMsQ0FBM0QsRUFBNkQ7QUFBQyxXQUFNLFdBQU47QUFBa0IsT0FBRyxjQUFja0YsT0FBZCxDQUFzQmxGLENBQXRCLE1BQTJCLENBQUMsQ0FBL0IsRUFBaUM7QUFBQyxXQUFNLFdBQU47QUFBa0IsT0FBRywrQkFBK0JrRixPQUEvQixDQUF1Q2xGLENBQXZDLE1BQTRDLENBQUMsQ0FBaEQsRUFBa0Q7QUFBQyxXQUFNLFdBQU47QUFBa0IsVUFBTyxJQUFQO0FBQVksQ0FBdFg7QUFDdDVRLElBQUcsT0FBT2dYLElBQVAsSUFBYSxXQUFiLElBQTBCLENBQUNBLElBQTlCLEVBQW1DO0FBQUMsVUF3RTNCQSxJQXhFMkIsVUFBSyxFQUFMO0FBQVEsS0FBRyxPQUFPQSxLQUFLZixNQUFaLElBQW9CLFdBQXBCLElBQWlDLENBQUNlLEtBQUtmLE1BQTFDLEVBQWlEO0FBQUNlLE9BQUtmLE1BQUwsR0FBWSxFQUFaO0FBQWUsTUFBS0EsTUFBTCxDQUFZaVosYUFBWixHQUEwQixJQUFJLFlBQVU7QUFBQyxNQUFJM3ZCLElBQUUsRUFBTixDQUFTLElBQUlFLElBQUUsRUFBTixDQUFTLFNBQVNPLENBQVQsQ0FBV2QsQ0FBWCxFQUFhO0FBQUMsV0FBTyxJQUFJeUosVUFBSixDQUFlekosQ0FBZixFQUFpQixFQUFqQixDQUFQO0FBQTRCLFFBQUtpd0IsU0FBTCxHQUFlLFVBQVMzdkIsQ0FBVCxFQUFXO0FBQUMsUUFBSU4sSUFBRU0sQ0FBTixDQUFRLElBQUcsT0FBT0MsRUFBRVAsQ0FBRixDQUFQLElBQWEsV0FBaEIsRUFBNEI7QUFBQ0EsVUFBRU8sRUFBRUQsQ0FBRixDQUFGO0FBQU8sU0FBRyxPQUFPRCxFQUFFTCxDQUFGLENBQVAsSUFBYSxXQUFoQixFQUE0QjtBQUFDLGFBQU9LLEVBQUVMLENBQUYsQ0FBUDtBQUFZLFdBQUssaUNBQStCQSxDQUFwQztBQUFzQyxHQUF0SixDQUF1SixLQUFLZ3lCLE1BQUwsR0FBWSxVQUFTbHFCLENBQVQsRUFBV2xILENBQVgsRUFBYVEsQ0FBYixFQUFleEIsQ0FBZixFQUFpQmlELENBQWpCLEVBQW1CdkMsQ0FBbkIsRUFBcUJHLENBQXJCLEVBQXVCWCxDQUF2QixFQUF5QmUsQ0FBekIsRUFBMkIwRCxDQUEzQixFQUE2QnZFLENBQTdCLEVBQStCb0UsQ0FBL0IsRUFBaUM7QUFBQy9ELE1BQUV5SCxDQUFGLElBQUssRUFBTCxDQUFRLElBQUl6RixJQUFFdkIsRUFBRU0sQ0FBRixDQUFOLENBQVcsSUFBSXlHLElBQUUvRyxFQUFFbEIsQ0FBRixDQUFOLENBQVcsSUFBSW1JLElBQUVqSCxFQUFFK0IsQ0FBRixDQUFOLENBQVcsSUFBSVYsSUFBRXJCLEVBQUVSLENBQUYsQ0FBTixDQUFXLElBQUk2RCxJQUFFckQsRUFBRUwsQ0FBRixDQUFOLENBQVcsSUFBSThCLElBQUUsSUFBSTJZLFNBQUosQ0FBYzdZLENBQWQsRUFBZ0J3RixDQUFoQixFQUFrQkUsQ0FBbEIsQ0FBTixDQUEyQixJQUFJM0YsSUFBRUcsRUFBRXVaLGNBQUYsQ0FBaUIsT0FBS2hjLENBQUwsR0FBT2UsQ0FBeEIsQ0FBTixDQUFpQ1IsRUFBRXlILENBQUYsRUFBSyxNQUFMLElBQWFBLENBQWIsQ0FBZXpILEVBQUV5SCxDQUFGLEVBQUssUUFBTCxJQUFlbEgsQ0FBZixDQUFpQlAsRUFBRXlILENBQUYsRUFBSyxPQUFMLElBQWN2RixDQUFkLENBQWdCbEMsRUFBRXlILENBQUYsRUFBSyxHQUFMLElBQVUxRixDQUFWLENBQVkvQixFQUFFeUgsQ0FBRixFQUFLLEdBQUwsSUFBVTNGLENBQVYsQ0FBWTlCLEVBQUV5SCxDQUFGLEVBQUssR0FBTCxJQUFVM0QsQ0FBVixDQUFZOUQsRUFBRXlILENBQUYsRUFBSyxLQUFMLElBQVk5SCxDQUFaLENBQWNLLEVBQUV5SCxDQUFGLEVBQUssTUFBTCxJQUFhMUQsQ0FBYixDQUFlLEtBQUksSUFBSUUsSUFBRSxDQUFWLEVBQVlBLElBQUVDLEVBQUU1RCxNQUFoQixFQUF1QjJELEdBQXZCLEVBQTJCO0FBQUMvRCxRQUFFZ0UsRUFBRUQsQ0FBRixDQUFGLElBQVF3RCxDQUFSO0FBQVU7QUFBQyxHQUFqVTtBQUFrVSxDQUFwaUIsRUFBMUIsQ0FBK2pCZ1EsS0FBS2YsTUFBTCxDQUFZaVosYUFBWixDQUEwQmdDLE1BQTFCLENBQWlDLFdBQWpDLEVBQTZDLEdBQTdDLEVBQWlELGtDQUFqRCxFQUFvRixrQ0FBcEYsRUFBdUgsa0NBQXZILEVBQTBKLGtDQUExSixFQUE2TCxHQUE3TCxFQUFpTSxrQ0FBak0sRUFBb08sa0NBQXBPLEVBQXVRLEVBQXZRLEVBQTBRLEVBQTFRLEVBQTZRLG1EQUE3USxFQUFrVWxhLEtBQUtmLE1BQUwsQ0FBWWlaLGFBQVosQ0FBMEJnQyxNQUExQixDQUFpQyxXQUFqQyxFQUE2QyxHQUE3QyxFQUFpRCwwQ0FBakQsRUFBNEYsR0FBNUYsRUFBZ0csR0FBaEcsRUFBb0csNENBQXBHLEVBQWlKLEdBQWpKLEVBQXFKLDBDQUFySixFQUFnTSwwQ0FBaE0sRUFBMk8sRUFBM08sRUFBOE8sRUFBOU8sRUFBaVAsbURBQWpQLEVBQXNTbGEsS0FBS2YsTUFBTCxDQUFZaVosYUFBWixDQUEwQmdDLE1BQTFCLENBQWlDLFdBQWpDLEVBQTZDLEdBQTdDLEVBQWlELDBDQUFqRCxFQUE0RiwwQ0FBNUYsRUFBdUksMENBQXZJLEVBQWtMLDRDQUFsTCxFQUErTixHQUEvTixFQUFtTywwQ0FBbk8sRUFBOFEsMENBQTlRLEVBQXlULEVBQXpULEVBQTRULEVBQTVULEVBQStULG1EQUEvVCxFQUFvWGxhLEtBQUtmLE1BQUwsQ0FBWWlaLGFBQVosQ0FBMEJnQyxNQUExQixDQUFpQyxXQUFqQyxFQUE2QyxHQUE3QyxFQUFpRCxrREFBakQsRUFBb0csR0FBcEcsRUFBd0csR0FBeEcsRUFBNEcsa0RBQTVHLEVBQStKLEdBQS9KLEVBQW1LLGtEQUFuSyxFQUFzTixrREFBdE4sRUFBeVEsRUFBelEsRUFBNlFsYSxLQUFLZixNQUFMLENBQVlpWixhQUFaLENBQTBCZ0MsTUFBMUIsQ0FBaUMsV0FBakMsRUFBNkMsR0FBN0MsRUFBaUQsa0RBQWpELEVBQW9HLGtEQUFwRyxFQUF1SixrREFBdkosRUFBME0sa0RBQTFNLEVBQTZQLEdBQTdQLEVBQWlRLGtEQUFqUSxFQUFvVCxrREFBcFQsRUFBdVcsRUFBdlcsRUFBMldsYSxLQUFLZixNQUFMLENBQVlpWixhQUFaLENBQTBCZ0MsTUFBMUIsQ0FBaUMsV0FBakMsRUFBNkMsR0FBN0MsRUFBaUQsMERBQWpELEVBQTRHLDBEQUE1RyxFQUF1SywwREFBdkssRUFBa08sMERBQWxPLEVBQTZSLEdBQTdSLEVBQWlTLDBEQUFqUyxFQUE0ViwwREFBNVYsRUFBdVosRUFBdlosRUFBMlpsYSxLQUFLZixNQUFMLENBQVlpWixhQUFaLENBQTBCZ0MsTUFBMUIsQ0FBaUMsV0FBakMsRUFBNkMsR0FBN0MsRUFBaUQsa0VBQWpELEVBQW9ILEdBQXBILEVBQXdILEdBQXhILEVBQTRILGtFQUE1SCxFQUErTCxHQUEvTCxFQUFtTSxrRUFBbk0sRUFBc1Esa0VBQXRRLEVBQXlVLEVBQXpVLEVBQTZVbGEsS0FBS2YsTUFBTCxDQUFZaVosYUFBWixDQUEwQmdDLE1BQTFCLENBQWlDLFdBQWpDLEVBQTZDLEdBQTdDLEVBQWlELGtFQUFqRCxFQUFvSCxrRUFBcEgsRUFBdUwsa0VBQXZMLEVBQTBQLGtFQUExUCxFQUE2VCxHQUE3VCxFQUFpVSxrRUFBalUsRUFBb1ksa0VBQXBZLEVBQXVjLENBQUMsWUFBRCxFQUFjLE9BQWQsRUFBc0IsWUFBdEIsQ0FBdmMsRUFBNGVsYSxLQUFLZixNQUFMLENBQVlpWixhQUFaLENBQTBCZ0MsTUFBMUIsQ0FBaUMsV0FBakMsRUFBNkMsR0FBN0MsRUFBaUQsa0dBQWpELEVBQW9KLGtHQUFwSixFQUF1UCxrR0FBdlAsRUFBMFYsa0dBQTFWLEVBQTZiLEdBQTdiLEVBQWljLGtHQUFqYyxFQUFvaUIsa0dBQXBpQixFQUF1b0IsQ0FBQyxZQUFELEVBQWMsT0FBZCxDQUF2b0IsRUFBK3BCbGEsS0FBS2YsTUFBTCxDQUFZaVosYUFBWixDQUEwQmdDLE1BQTFCLENBQWlDLFdBQWpDLEVBQTZDLEdBQTdDLEVBQWlELHFJQUFqRCxFQUF1TCxxSUFBdkwsRUFBNlQscUlBQTdULEVBQW1jLHFJQUFuYyxFQUF5a0IsR0FBemtCLEVBQTZrQixvSUFBN2tCLEVBQWt0QixzSUFBbHRCLEVBQXkxQixDQUFDLFlBQUQsRUFBYyxPQUFkLENBQXoxQjtBQUNubkksSUFBSW5FLFVBQVEsWUFBVTtBQUFDLE1BQUk3dEIsSUFBRSxTQUFGQSxDQUFFLENBQVNtQixDQUFULEVBQVdvQixDQUFYLEVBQWFILENBQWIsRUFBZTtBQUFDLFdBQU92QixFQUFFRSxTQUFTa3hCLEdBQVgsRUFBZTl3QixDQUFmLEVBQWlCb0IsQ0FBakIsRUFBbUJILENBQW5CLENBQVA7QUFBNkIsR0FBbkQsQ0FBb0QsSUFBSTlCLElBQUUsU0FBRkEsQ0FBRSxDQUFTYSxDQUFULEVBQVdvQixDQUFYLEVBQWFILENBQWIsRUFBZTtBQUFDLFdBQU92QixFQUFFRSxTQUFTbXhCLFNBQVgsRUFBcUIvd0IsQ0FBckIsRUFBdUJvQixDQUF2QixFQUF5QkgsQ0FBekIsQ0FBUDtBQUFtQyxHQUF6RCxDQUEwRCxJQUFJdEIsSUFBRSxTQUFGQSxDQUFFLENBQVNLLENBQVQsRUFBV29CLENBQVgsRUFBYUgsQ0FBYixFQUFlO0FBQUMsV0FBT3ZCLEVBQUVFLFNBQVNveEIsR0FBWCxFQUFlaHhCLENBQWYsRUFBaUJvQixDQUFqQixFQUFtQkgsQ0FBbkIsQ0FBUDtBQUE2QixHQUFuRCxDQUFvRCxJQUFJdkIsSUFBRSxTQUFGQSxDQUFFLENBQVN3QixDQUFULEVBQVcrQixDQUFYLEVBQWFHLENBQWIsRUFBZW5DLENBQWYsRUFBaUI7QUFBQyxRQUFJRyxJQUFFeEIsU0FBUytCLEdBQVQsQ0FBYUMsR0FBYixDQUFpQkUsS0FBakIsQ0FBdUJtQixDQUF2QixDQUFOLENBQWdDLElBQUlELElBQUVwRCxTQUFTK0IsR0FBVCxDQUFhQyxHQUFiLENBQWlCRSxLQUFqQixDQUF1QnNCLENBQXZCLENBQU4sQ0FBZ0MsSUFBSXBELElBQUVKLFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJFLEtBQWpCLENBQXVCYixDQUF2QixDQUFOLENBQWdDLElBQUlELElBQUUsRUFBTixDQUFTQSxFQUFFaXdCLEdBQUYsR0FBTWp1QixDQUFOLENBQVFoQyxFQUFFa3dCLEVBQUYsR0FBS2x4QixDQUFMLENBQU9nQixFQUFFbXdCLFVBQUYsR0FBYS92QixDQUFiLENBQWUsSUFBSStCLElBQUVqQyxFQUFFcXRCLE9BQUYsQ0FBVXZ0QixDQUFWLEVBQVlnQyxDQUFaLEVBQWMsRUFBQ2t1QixJQUFHbHhCLENBQUosRUFBZCxDQUFOLENBQTRCLE9BQU9KLFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJkLFNBQWpCLENBQTJCcUMsQ0FBM0IsQ0FBUDtBQUFxQyxHQUFoTyxDQUFpTyxJQUFJMUQsSUFBRSxTQUFGQSxDQUFFLENBQVNPLENBQVQsRUFBV29CLENBQVgsRUFBYUgsQ0FBYixFQUFlO0FBQUMsV0FBT3hDLEVBQUVtQixTQUFTa3hCLEdBQVgsRUFBZTl3QixDQUFmLEVBQWlCb0IsQ0FBakIsRUFBbUJILENBQW5CLENBQVA7QUFBNkIsR0FBbkQsQ0FBb0QsSUFBSWhCLElBQUUsU0FBRkEsQ0FBRSxDQUFTRCxDQUFULEVBQVdvQixDQUFYLEVBQWFILENBQWIsRUFBZTtBQUFDLFdBQU94QyxFQUFFbUIsU0FBU214QixTQUFYLEVBQXFCL3dCLENBQXJCLEVBQXVCb0IsQ0FBdkIsRUFBeUJILENBQXpCLENBQVA7QUFBbUMsR0FBekQsQ0FBMEQsSUFBSXRDLElBQUUsU0FBRkEsQ0FBRSxDQUFTcUIsQ0FBVCxFQUFXb0IsQ0FBWCxFQUFhSCxDQUFiLEVBQWU7QUFBQyxXQUFPeEMsRUFBRW1CLFNBQVNveEIsR0FBWCxFQUFlaHhCLENBQWYsRUFBaUJvQixDQUFqQixFQUFtQkgsQ0FBbkIsQ0FBUDtBQUE2QixHQUFuRCxDQUFvRCxJQUFJeEMsSUFBRSxTQUFGQSxDQUFFLENBQVN1QyxDQUFULEVBQVc0RixDQUFYLEVBQWF6RCxDQUFiLEVBQWVsQyxDQUFmLEVBQWlCO0FBQUMsUUFBSUMsSUFBRXRCLFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJFLEtBQWpCLENBQXVCOEUsQ0FBdkIsQ0FBTixDQUFnQyxJQUFJM0QsSUFBRXJELFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJFLEtBQWpCLENBQXVCcUIsQ0FBdkIsQ0FBTixDQUFnQyxJQUFJbkQsSUFBRUosU0FBUytCLEdBQVQsQ0FBYUMsR0FBYixDQUFpQkUsS0FBakIsQ0FBdUJiLENBQXZCLENBQU4sQ0FBZ0MsSUFBSStCLElBQUVoQyxFQUFFK1csT0FBRixDQUFVN1csQ0FBVixFQUFZK0IsQ0FBWixFQUFjLEVBQUNpdUIsSUFBR2x4QixDQUFKLEVBQWQsQ0FBTixDQUE0QixJQUFJb0IsSUFBRXhCLFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJFLEtBQWpCLENBQXVCa0IsRUFBRXZDLFFBQUYsRUFBdkIsQ0FBTixDQUEyQyxJQUFJMkMsSUFBRXhELFNBQVMrQixHQUFULENBQWErQyxNQUFiLENBQW9CNUQsU0FBcEIsQ0FBOEJNLENBQTlCLENBQU4sQ0FBdUMsT0FBT2dDLENBQVA7QUFBUyxHQUEvTyxDQUFnUCxJQUFJN0QsSUFBRSxFQUFDLGVBQWMsRUFBQzZ4QixNQUFLdnlCLENBQU4sRUFBUXd5QixPQUFNNXhCLENBQWQsRUFBZ0I0dkIsUUFBTyxFQUF2QixFQUEwQmlDLE9BQU0sRUFBaEMsRUFBZixFQUFtRCxlQUFjLEVBQUNGLE1BQUt2eUIsQ0FBTixFQUFRd3lCLE9BQU01eEIsQ0FBZCxFQUFnQjR2QixRQUFPLEVBQXZCLEVBQTBCaUMsT0FBTSxFQUFoQyxFQUFqRSxFQUFxRyxlQUFjLEVBQUNGLE1BQUt2eUIsQ0FBTixFQUFRd3lCLE9BQU01eEIsQ0FBZCxFQUFnQjR2QixRQUFPLEVBQXZCLEVBQTBCaUMsT0FBTSxFQUFoQyxFQUFuSCxFQUF1SixnQkFBZSxFQUFDRixNQUFLanlCLENBQU4sRUFBUWt5QixPQUFNcHhCLENBQWQsRUFBZ0JvdkIsUUFBTyxFQUF2QixFQUEwQmlDLE9BQU0sQ0FBaEMsRUFBdEssRUFBeU0sV0FBVSxFQUFDRixNQUFLenhCLENBQU4sRUFBUTB4QixPQUFNMXlCLENBQWQsRUFBZ0Iwd0IsUUFBTyxDQUF2QixFQUF5QmlDLE9BQU0sQ0FBL0IsRUFBbk4sRUFBTixDQUE0UCxJQUFJbHlCLElBQUUsU0FBRkEsQ0FBRSxDQUFTWSxDQUFULEVBQVc7QUFBQyxXQUFPVCxFQUFFUyxDQUFGLEVBQUssTUFBTCxDQUFQO0FBQW9CLEdBQXRDLENBQXVDLElBQUkwQixJQUFFLFNBQUZBLENBQUUsQ0FBUzFCLENBQVQsRUFBVztBQUFDLFFBQUlvQixJQUFFeEIsU0FBU0MsR0FBVCxDQUFhYyxTQUFiLENBQXVCYSxNQUF2QixDQUE4QnhCLENBQTlCLENBQU4sQ0FBdUMsSUFBSWlCLElBQUVyQixTQUFTK0IsR0FBVCxDQUFhQyxHQUFiLENBQWlCZCxTQUFqQixDQUEyQk0sQ0FBM0IsQ0FBTixDQUFvQyxPQUFPSCxDQUFQO0FBQVMsR0FBdEcsQ0FBdUcsSUFBSWxCLElBQUUsU0FBRkEsQ0FBRSxDQUFTb0QsQ0FBVCxFQUFXO0FBQUMsUUFBSUgsSUFBRSxFQUFOLENBQVMsSUFBSS9CLElBQUVrQyxFQUFFdVksS0FBRixDQUFRLElBQUlELE1BQUosQ0FBVyxrQ0FBWCxFQUE4QyxHQUE5QyxDQUFSLENBQU4sQ0FBa0UsSUFBR3hhLENBQUgsRUFBSztBQUFDK0IsUUFBRXV1QixNQUFGLEdBQVN0d0IsRUFBRSxDQUFGLENBQVQsQ0FBYytCLEVBQUV3dUIsTUFBRixHQUFTdndCLEVBQUUsQ0FBRixDQUFUO0FBQWMsU0FBSWpCLElBQUVtRCxFQUFFdVksS0FBRixDQUFRLElBQUlELE1BQUosQ0FBVyxzQ0FBWCxDQUFSLENBQU4sQ0FBa0UsSUFBR3piLENBQUgsRUFBSztBQUFDZ0QsUUFBRWlWLElBQUYsR0FBT2pZLEVBQUUsQ0FBRixDQUFQO0FBQVksU0FBSW9ELElBQUUsQ0FBQyxDQUFQLENBQVMsSUFBSUgsSUFBRSxDQUFOLENBQVEsSUFBR0UsRUFBRTBCLE9BQUYsQ0FBVSxVQUFWLEtBQXVCLENBQUMsQ0FBM0IsRUFBNkI7QUFBQ3pCLFVBQUVELEVBQUUwQixPQUFGLENBQVUsVUFBVixDQUFGLENBQXdCNUIsSUFBRSxDQUFGO0FBQUksU0FBR0UsRUFBRTBCLE9BQUYsQ0FBVSxNQUFWLEtBQW1CLENBQUMsQ0FBdkIsRUFBeUI7QUFBQ3pCLFVBQUVELEVBQUUwQixPQUFGLENBQVUsTUFBVixDQUFGLENBQW9CNUIsSUFBRSxDQUFGO0FBQUksU0FBSWpDLElBQUVtQyxFQUFFMEIsT0FBRixDQUFVLFVBQVYsQ0FBTixDQUE0QixJQUFHekIsS0FBRyxDQUFDLENBQUosSUFBT3BDLEtBQUcsQ0FBQyxDQUFkLEVBQWdCO0FBQUMsVUFBSUksSUFBRStCLEVBQUUyRSxTQUFGLENBQVkxRSxJQUFFSCxJQUFFLENBQWhCLEVBQWtCakMsSUFBRWlDLENBQXBCLENBQU4sQ0FBNkI3QixJQUFFQSxFQUFFdWEsT0FBRixDQUFVLE1BQVYsRUFBaUIsRUFBakIsQ0FBRixDQUF1QjNZLEVBQUV5dUIsSUFBRixHQUFPcndCLENBQVA7QUFBUyxZQUFPNEIsQ0FBUDtBQUFTLEdBQW5jLENBQW9jLElBQUkxRCxJQUFFLFNBQUZBLENBQUUsQ0FBUzJCLENBQVQsRUFBVzJGLENBQVgsRUFBYTVHLENBQWIsRUFBZTtBQUFDLFFBQUltRCxJQUFFbkQsRUFBRThILFNBQUYsQ0FBWSxDQUFaLEVBQWMsRUFBZCxDQUFOLENBQXdCLElBQUk5RyxJQUFFcEIsU0FBUytCLEdBQVQsQ0FBYUMsR0FBYixDQUFpQkUsS0FBakIsQ0FBdUJxQixDQUF2QixDQUFOLENBQWdDLElBQUkvQixJQUFFeEIsU0FBUytCLEdBQVQsQ0FBYVUsSUFBYixDQUFrQlAsS0FBbEIsQ0FBd0I4RSxDQUF4QixDQUFOLENBQWlDLElBQUl4RCxJQUFFN0QsRUFBRTBCLENBQUYsRUFBSyxRQUFMLElBQWUxQixFQUFFMEIsQ0FBRixFQUFLLE9BQUwsQ0FBckIsQ0FBbUMsSUFBSWdDLElBQUUsRUFBTixDQUFTLElBQUlELElBQUUsSUFBTixDQUFXLFNBQU87QUFBQyxVQUFJOUIsSUFBRXRCLFNBQVN1RSxJQUFULENBQWNxbEIsR0FBZCxDQUFrQmhwQixNQUFsQixFQUFOLENBQWlDLElBQUd3QyxLQUFHLElBQU4sRUFBVztBQUFDOUIsVUFBRTJDLE1BQUYsQ0FBU2IsQ0FBVDtBQUFZLFNBQUVhLE1BQUYsQ0FBU3pDLENBQVQsRUFBWUYsRUFBRTJDLE1BQUYsQ0FBUzdDLENBQVQsRUFBWWdDLElBQUU5QixFQUFFNEMsUUFBRixFQUFGLENBQWViLElBQUVBLElBQUVyRCxTQUFTK0IsR0FBVCxDQUFhQyxHQUFiLENBQWlCZCxTQUFqQixDQUEyQmtDLENBQTNCLENBQUosQ0FBa0MsSUFBR0MsRUFBRXpELE1BQUYsSUFBVTRELElBQUUsQ0FBZixFQUFpQjtBQUFDO0FBQU07QUFBQyxTQUFJc0QsSUFBRSxFQUFOLENBQVNBLEVBQUVnckIsTUFBRixHQUFTenVCLEVBQUVqQixNQUFGLENBQVMsQ0FBVCxFQUFXekMsRUFBRTBCLENBQUYsRUFBSyxRQUFMLElBQWUsQ0FBMUIsQ0FBVCxDQUFzQ3lGLEVBQUVpckIsS0FBRixHQUFRMXVCLEVBQUVqQixNQUFGLENBQVN6QyxFQUFFMEIsQ0FBRixFQUFLLFFBQUwsSUFBZSxDQUF4QixFQUEwQjFCLEVBQUUwQixDQUFGLEVBQUssT0FBTCxJQUFjLENBQXhDLENBQVIsQ0FBbUQsT0FBT3lGLENBQVA7QUFBUyxHQUFwYixDQUFxYixJQUFJeEgsSUFBRSxTQUFGQSxDQUFFLENBQVNjLENBQVQsRUFBV21ELENBQVgsRUFBYS9CLENBQWIsRUFBZTRCLENBQWYsRUFBaUI7QUFBQyxRQUFJOUIsSUFBRXRCLFNBQVMrQixHQUFULENBQWErQyxNQUFiLENBQW9CNUMsS0FBcEIsQ0FBMEI5QixDQUExQixDQUFOLENBQW1DLElBQUlpQixJQUFFckIsU0FBUytCLEdBQVQsQ0FBYUMsR0FBYixDQUFpQmQsU0FBakIsQ0FBMkJJLENBQTNCLENBQU4sQ0FBb0MsSUFBSWtDLElBQUU3RCxFQUFFNEQsQ0FBRixFQUFLLE1BQUwsQ0FBTixDQUFtQixJQUFJbkMsSUFBRW9DLEVBQUVuQyxDQUFGLEVBQUlHLENBQUosRUFBTTRCLENBQU4sQ0FBTixDQUFlLE9BQU9oQyxDQUFQO0FBQVMsR0FBMUksQ0FBMkksSUFBSXRDLElBQUUsU0FBRkEsQ0FBRSxDQUFTc0IsQ0FBVCxFQUFXa0IsQ0FBWCxFQUFhRCxDQUFiLEVBQWVtQyxDQUFmLEVBQWlCO0FBQUMsUUFBSWhDLElBQUU3QixFQUFFMkIsQ0FBRixFQUFLLE9BQUwsQ0FBTixDQUFvQixJQUFJRixJQUFFSSxFQUFFcEIsQ0FBRixFQUFJaUIsQ0FBSixFQUFNbUMsQ0FBTixDQUFOLENBQWUsT0FBT3BDLENBQVA7QUFBUyxHQUFwRSxDQUFxRSxPQUFNLEVBQUM0d0IsU0FBUSxPQUFULEVBQWlCQyxlQUFjLHVCQUFTN3hCLENBQVQsRUFBVztBQUFDLGFBQU9ELEVBQUVDLENBQUYsQ0FBUDtBQUFZLEtBQXZELEVBQXdEOHhCLHNDQUFxQyw4Q0FBUzd3QixDQUFULEVBQVdqQixDQUFYLEVBQWFvQixDQUFiLEVBQWU7QUFBQyxhQUFPOUIsRUFBRTJCLENBQUYsRUFBSWpCLENBQUosRUFBTW9CLENBQU4sQ0FBUDtBQUFnQixLQUE3SCxFQUE4SDJ3QixlQUFjLHVCQUFTL3hCLENBQVQsRUFBV29CLENBQVgsRUFBYUgsQ0FBYixFQUFlQyxDQUFmLEVBQWlCO0FBQUMsYUFBT2hDLEVBQUVjLENBQUYsRUFBSW9CLENBQUosRUFBTUgsQ0FBTixFQUFRQyxDQUFSLENBQVA7QUFBa0IsS0FBaEwsRUFBaUw4d0Isb0JBQW1CLDRCQUFTcHJCLENBQVQsRUFBVzNELENBQVgsRUFBYTtBQUFDLFVBQUloQyxJQUFFbEIsRUFBRTZHLENBQUYsQ0FBTixDQUFXLElBQUk1RixJQUFFQyxFQUFFZ1gsSUFBUixDQUFhLElBQUk3VyxJQUFFSCxFQUFFc3dCLE1BQVIsQ0FBZSxJQUFJdnhCLElBQUVpQixFQUFFdXdCLE1BQVIsQ0FBZSxJQUFJdHdCLElBQUVELEVBQUV3d0IsSUFBUixDQUFhLElBQUl6dUIsSUFBRTFELEVBQUU4QixDQUFGLEVBQUk2QixDQUFKLEVBQU1qRCxDQUFOLENBQU4sQ0FBZSxJQUFJbUQsSUFBRUgsRUFBRTB1QixNQUFSLENBQWUsSUFBSXR1QixJQUFFbEUsRUFBRWdDLENBQUYsRUFBSUUsQ0FBSixFQUFNK0IsQ0FBTixFQUFRbkQsQ0FBUixDQUFOLENBQWlCLE9BQU9vRCxDQUFQO0FBQVMsS0FBN1UsRUFBOFU2dUIsbUNBQWtDLDJDQUFTaHZCLENBQVQsRUFBVy9CLENBQVgsRUFBYXlGLENBQWIsRUFBZTNGLENBQWYsRUFBaUJJLENBQWpCLEVBQW1CO0FBQUMsVUFBSXBCLElBQUUsRUFBTixDQUFTLElBQUcsT0FBT2dCLENBQVAsSUFBVSxXQUFWLElBQXVCQSxLQUFHLElBQTdCLEVBQWtDO0FBQUNBLFlBQUUsYUFBRjtBQUFnQixXQUFHLE9BQU96QixFQUFFeUIsQ0FBRixDQUFQLElBQWEsV0FBaEIsRUFBNEI7QUFBQyxjQUFLLG9DQUFrQ0EsQ0FBdkM7QUFBeUMsV0FBRyxPQUFPSSxDQUFQLElBQVUsV0FBVixJQUF1QkEsS0FBRyxJQUE3QixFQUFrQztBQUFDLFlBQUkrQixJQUFFNUQsRUFBRXlCLENBQUYsRUFBSyxPQUFMLENBQU4sQ0FBb0IsSUFBSW9DLElBQUUxQixFQUFFeUIsQ0FBRixDQUFOLENBQVcvQixJQUFFZ0MsRUFBRTh1QixXQUFGLEVBQUY7QUFBa0IsV0FBSXhyQixJQUFFcEgsRUFBRTBCLENBQUYsRUFBSTJGLENBQUosRUFBTXZGLENBQU4sQ0FBTixDQUFlLElBQUl3RixJQUFFRixFQUFFZ3JCLE1BQVIsQ0FBZSxJQUFJMXVCLElBQUV0RSxFQUFFd0MsQ0FBRixFQUFJRixDQUFKLEVBQU00RixDQUFOLEVBQVF4RixDQUFSLENBQU4sQ0FBaUIsSUFBSUgsSUFBRStCLEVBQUUyWSxPQUFGLENBQVUsVUFBVixFQUFxQixRQUFyQixDQUFOLENBQXFDLElBQUkzYixJQUFFLGdCQUFjaUQsQ0FBZCxHQUFnQix1QkFBdEIsQ0FBOENqRCxLQUFHLDRCQUFILENBQWdDQSxLQUFHLGVBQWFnQixDQUFiLEdBQWUsR0FBZixHQUFtQkksQ0FBbkIsR0FBcUIsTUFBeEIsQ0FBK0JwQixLQUFHLE1BQUgsQ0FBVUEsS0FBR2lCLENBQUgsQ0FBS2pCLEtBQUcsa0JBQWdCaUQsQ0FBaEIsR0FBa0IsdUJBQXJCLENBQTZDLE9BQU9qRCxDQUFQO0FBQVMsS0FBaDJCLEVBQWkyQm15QiwwQkFBeUIsa0NBQVN2ckIsQ0FBVCxFQUFXO0FBQUMsVUFBSUUsSUFBRWliLE9BQU4sQ0FBYyxJQUFJcmIsSUFBRUksRUFBRXliLFdBQVIsQ0FBb0IsSUFBSXZmLElBQUU4RCxFQUFFc2IsSUFBUixDQUFhLElBQUlwaEIsSUFBRSxFQUFOLENBQVMsSUFBSUksSUFBRXNGLEVBQUVFLENBQUYsRUFBSSxDQUFKLENBQU4sQ0FBYSxJQUFHeEYsRUFBRTVCLE1BQUYsSUFBVSxDQUFiLEVBQWU7QUFBQyxjQUFLLCtDQUE2QzRCLEVBQUU1QixNQUFwRDtBQUEyRCxTQUFFMnhCLFVBQUYsR0FBYW51QixFQUFFNEQsQ0FBRixFQUFJeEYsRUFBRSxDQUFGLENBQUosQ0FBYixDQUF1QixJQUFJdUYsSUFBRUQsRUFBRUUsQ0FBRixFQUFJeEYsRUFBRSxDQUFGLENBQUosQ0FBTixDQUFnQixJQUFHdUYsRUFBRW5ILE1BQUYsSUFBVSxDQUFiLEVBQWU7QUFBQyxjQUFLLGlEQUErQ21ILEVBQUVuSCxNQUF0RDtBQUE2RCxXQUFHd0QsRUFBRTRELENBQUYsRUFBSUQsRUFBRSxDQUFGLENBQUosS0FBVyxvQkFBZCxFQUFtQztBQUFDLGNBQUssK0JBQUw7QUFBcUMsV0FBSTNHLElBQUUwRyxFQUFFRSxDQUFGLEVBQUlELEVBQUUsQ0FBRixDQUFKLENBQU4sQ0FBZ0IsSUFBR0EsRUFBRW5ILE1BQUYsSUFBVSxDQUFiLEVBQWU7QUFBQyxjQUFLLG1EQUFpRFEsRUFBRVIsTUFBeEQ7QUFBK0QsV0FBSXlCLElBQUV5RixFQUFFRSxDQUFGLEVBQUk1RyxFQUFFLENBQUYsQ0FBSixDQUFOLENBQWdCLElBQUdpQixFQUFFekIsTUFBRixJQUFVLENBQWIsRUFBZTtBQUFDLGNBQUsscURBQW1EeUIsRUFBRXpCLE1BQTFEO0FBQWlFLFdBQUd3RCxFQUFFNEQsQ0FBRixFQUFJM0YsRUFBRSxDQUFGLENBQUosS0FBVyxrQkFBZCxFQUFpQztBQUFDLGNBQUssOEJBQUw7QUFBb0MsU0FBRW14QixtQkFBRixHQUFzQixXQUF0QixDQUFrQ3B4QixFQUFFcXhCLGtCQUFGLEdBQXFCcnZCLEVBQUU0RCxDQUFGLEVBQUkzRixFQUFFLENBQUYsQ0FBSixDQUFyQixDQUErQixJQUFJQyxJQUFFd0YsRUFBRUUsQ0FBRixFQUFJNUcsRUFBRSxDQUFGLENBQUosQ0FBTixDQUFnQixJQUFHa0IsRUFBRTFCLE1BQUYsSUFBVSxDQUFiLEVBQWU7QUFBQyxjQUFLLHFEQUFtRDBCLEVBQUUxQixNQUExRDtBQUFpRSxXQUFHd0QsRUFBRTRELENBQUYsRUFBSTFGLEVBQUUsQ0FBRixDQUFKLEtBQVcsb0JBQWQsRUFBbUM7QUFBQyxjQUFLLGdDQUFMO0FBQXNDLFdBQUkrQixJQUFFeUQsRUFBRUUsQ0FBRixFQUFJMUYsRUFBRSxDQUFGLENBQUosQ0FBTixDQUFnQixJQUFHK0IsRUFBRXpELE1BQUYsR0FBUyxDQUFaLEVBQWM7QUFBQyxjQUFLLHNEQUFvRHlELEVBQUV6RCxNQUEzRDtBQUFrRSxTQUFFOHlCLFVBQUYsR0FBYXR2QixFQUFFNEQsQ0FBRixFQUFJM0QsRUFBRSxDQUFGLENBQUosQ0FBYixDQUF1QixJQUFJRyxJQUFFSixFQUFFNEQsQ0FBRixFQUFJM0QsRUFBRSxDQUFGLENBQUosQ0FBTixDQUFnQixJQUFHO0FBQUNqQyxVQUFFdXhCLFVBQUYsR0FBYXh3QixTQUFTcUIsQ0FBVCxFQUFXLEVBQVgsQ0FBYjtBQUE0QixPQUFoQyxDQUFnQyxPQUFNRCxDQUFOLEVBQVE7QUFBQyxjQUFLLGtDQUFnQ0MsQ0FBckM7QUFBdUMsY0FBT3BDLENBQVA7QUFBUyxLQUF0NkQsRUFBdTZEd3hCLDBCQUF5QixrQ0FBU3B2QixDQUFULEVBQVdwRCxDQUFYLEVBQWE7QUFBQyxVQUFJZ0IsSUFBRXBCLFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJFLEtBQWpCLENBQXVCc0IsRUFBRWt2QixVQUF6QixDQUFOLENBQTJDLElBQUlyeEIsSUFBRW1DLEVBQUVtdkIsVUFBUixDQUFtQixJQUFJcnhCLElBQUV0QixTQUFTNnlCLE1BQVQsQ0FBZ0J6eUIsQ0FBaEIsRUFBa0JnQixDQUFsQixFQUFvQixFQUFDMHhCLFNBQVEsTUFBSSxFQUFiLEVBQWdCQyxZQUFXMXhCLENBQTNCLEVBQXBCLENBQU4sQ0FBeUQsSUFBSUcsSUFBRXhCLFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJkLFNBQWpCLENBQTJCSSxDQUEzQixDQUFOLENBQW9DLE9BQU9FLENBQVA7QUFBUyxLQUFsbkUsRUFBbW5Fd3hCLHdDQUF1QyxnREFBUzN2QixDQUFULEVBQVcyRCxDQUFYLEVBQWE7QUFBQyxVQUFJeEYsSUFBRXdqQixTQUFTM2hCLENBQVQsRUFBVyx1QkFBWCxDQUFOLENBQTBDLElBQUlqRCxJQUFFLEtBQUtteUIsd0JBQUwsQ0FBOEIvd0IsQ0FBOUIsQ0FBTixDQUF1QyxJQUFJZ0MsSUFBRXNwQixRQUFROEYsd0JBQVIsQ0FBaUN4eUIsQ0FBakMsRUFBbUM0RyxDQUFuQyxDQUFOLENBQTRDLElBQUl6RCxJQUFFLEVBQU4sQ0FBU0EsRUFBRWd1QixVQUFGLEdBQWF2eEIsU0FBUytCLEdBQVQsQ0FBYUMsR0FBYixDQUFpQkUsS0FBakIsQ0FBdUI5QixFQUFFbXhCLFVBQXpCLENBQWIsQ0FBa0QsSUFBSW53QixJQUFFcEIsU0FBUytCLEdBQVQsQ0FBYUMsR0FBYixDQUFpQkUsS0FBakIsQ0FBdUJzQixDQUF2QixDQUFOLENBQWdDLElBQUlsQyxJQUFFdEIsU0FBUytCLEdBQVQsQ0FBYUMsR0FBYixDQUFpQkUsS0FBakIsQ0FBdUI5QixFQUFFcXlCLGtCQUF6QixDQUFOLENBQW1ELElBQUlydkIsSUFBRXBELFNBQVNteEIsU0FBVCxDQUFtQnhDLE9BQW5CLENBQTJCcHJCLENBQTNCLEVBQTZCbkMsQ0FBN0IsRUFBK0IsRUFBQ2t3QixJQUFHaHdCLENBQUosRUFBL0IsQ0FBTixDQUE2QyxJQUFJRCxJQUFFckIsU0FBUytCLEdBQVQsQ0FBYUMsR0FBYixDQUFpQmQsU0FBakIsQ0FBMkJrQyxDQUEzQixDQUFOLENBQW9DLE9BQU8vQixDQUFQO0FBQVMsS0FBN2dGLEVBQThnRjR4Qiw2QkFBNEIscUNBQVMzeEIsQ0FBVCxFQUFXRCxDQUFYLEVBQWE7QUFBQyxVQUFJakIsSUFBRSxLQUFLNHlCLHNDQUFMLENBQTRDMXhCLENBQTVDLEVBQThDRCxDQUE5QyxDQUFOLENBQXVELElBQUlHLElBQUUsS0FBSzB4Qiw4QkFBTCxDQUFvQzl5QixDQUFwQyxDQUFOLENBQTZDLE9BQU9vQixDQUFQO0FBQVMsS0FBcnFGLEVBQXNxRjJ4QiwyQkFBMEIsbUNBQVM3eEIsQ0FBVCxFQUFXO0FBQUMsVUFBSWlDLElBQUU0ZSxPQUFOLENBQWMsSUFBSTNlLElBQUVELEVBQUVvZixXQUFSLENBQW9CLElBQUl2aEIsSUFBRW1DLEVBQUVpZixJQUFSLENBQWEsSUFBSW5oQixJQUFFLEVBQU4sQ0FBU0EsRUFBRSt4QixRQUFGLEdBQVcsSUFBWCxDQUFnQixJQUFHOXhCLEVBQUVjLE1BQUYsQ0FBUyxDQUFULEVBQVcsQ0FBWCxLQUFlLElBQWxCLEVBQXVCO0FBQUMsY0FBSyw2Q0FBTDtBQUFtRCxXQUFJWixJQUFFZ0MsRUFBRWxDLENBQUYsRUFBSSxDQUFKLENBQU4sQ0FBYSxJQUFHRSxFQUFFNUIsTUFBRixJQUFVLENBQWIsRUFBZTtBQUFDLGNBQUssNkNBQUw7QUFBbUQsV0FBRzBCLEVBQUVjLE1BQUYsQ0FBU1osRUFBRSxDQUFGLENBQVQsRUFBYyxDQUFkLEtBQWtCLElBQXJCLEVBQTBCO0FBQUMsY0FBSyx1Q0FBTDtBQUE2QyxXQUFJcEIsSUFBRW9ELEVBQUVsQyxDQUFGLEVBQUlFLEVBQUUsQ0FBRixDQUFKLENBQU4sQ0FBZ0IsSUFBR3BCLEVBQUVSLE1BQUYsSUFBVSxDQUFiLEVBQWU7QUFBQyxjQUFLLHVDQUFMO0FBQTZDLFdBQUcwQixFQUFFYyxNQUFGLENBQVNoQyxFQUFFLENBQUYsQ0FBVCxFQUFjLENBQWQsS0FBa0IsSUFBckIsRUFBMEI7QUFBQyxjQUFLLHVDQUFMO0FBQTZDLFNBQUVpekIsTUFBRixHQUFTanlCLEVBQUVFLENBQUYsRUFBSWxCLEVBQUUsQ0FBRixDQUFKLENBQVQsQ0FBbUIsSUFBR2tCLEVBQUVjLE1BQUYsQ0FBU2hDLEVBQUUsQ0FBRixDQUFULEVBQWMsQ0FBZCxLQUFrQixJQUFyQixFQUEwQjtBQUFDaUIsVUFBRSt4QixRQUFGLEdBQVdoeUIsRUFBRUUsQ0FBRixFQUFJbEIsRUFBRSxDQUFGLENBQUosQ0FBWDtBQUFxQixXQUFHa0IsRUFBRWMsTUFBRixDQUFTWixFQUFFLENBQUYsQ0FBVCxFQUFjLENBQWQsS0FBa0IsSUFBckIsRUFBMEI7QUFBQyxjQUFLLHVDQUFMO0FBQTZDLFNBQUU4eEIsTUFBRixHQUFTL3ZCLEVBQUVnZixPQUFGLENBQVVqaEIsQ0FBVixFQUFZRSxFQUFFLENBQUYsQ0FBWixDQUFULENBQTJCLE9BQU9ILENBQVA7QUFBUyxLQUEzekcsRUFBNHpHa3lCLGdDQUErQix3Q0FBU2x5QixDQUFULEVBQVc7QUFBQyxVQUFJakIsSUFBRTRrQixTQUFTM2pCLENBQVQsRUFBVyxhQUFYLENBQU4sQ0FBZ0MsSUFBSUcsSUFBRSxLQUFLMHhCLDhCQUFMLENBQW9DOXlCLENBQXBDLENBQU4sQ0FBNkMsT0FBT29CLENBQVA7QUFBUyxLQUE3N0csRUFBODdHMHhCLGdDQUErQix3Q0FBUzl5QixDQUFULEVBQVc7QUFBQyxVQUFJaUIsSUFBRSxLQUFLOHhCLHlCQUFMLENBQStCL3lCLENBQS9CLENBQU4sQ0FBd0MsSUFBSW9CLENBQUosQ0FBTSxJQUFHSCxFQUFFZ3lCLE1BQUYsSUFBVSxvQkFBYixFQUFrQztBQUFDN3hCLFlBQUUsSUFBSStWLE1BQUosRUFBRjtBQUFlLE9BQWxELE1BQXNEO0FBQUMsWUFBR2xXLEVBQUVneUIsTUFBRixJQUFVLGdCQUFiLEVBQThCO0FBQUM3eEIsY0FBRSxJQUFJdVYsS0FBS2YsTUFBTCxDQUFZNlgsR0FBaEIsRUFBRjtBQUF3QixTQUF2RCxNQUEyRDtBQUFDLGNBQUd4c0IsRUFBRWd5QixNQUFGLElBQVUsZ0JBQWIsRUFBOEI7QUFBQzd4QixnQkFBRSxJQUFJdVYsS0FBS2YsTUFBTCxDQUFZdVgsS0FBaEIsRUFBRjtBQUEwQixXQUF6RCxNQUE2RDtBQUFDLGtCQUFLLG1DQUFMO0FBQXlDO0FBQUM7QUFBQyxTQUFFaUQsa0JBQUYsQ0FBcUJwd0IsQ0FBckIsRUFBd0IsT0FBT29CLENBQVA7QUFBUyxLQUFweEgsRUFBcXhIZ3lCLDJCQUEwQixtQ0FBU255QixDQUFULEVBQVc7QUFBQyxVQUFJakIsQ0FBSixDQUFNLElBQUlvQixJQUFFMmdCLFFBQVFZLFVBQVIsQ0FBbUIxaEIsQ0FBbkIsRUFBcUIsQ0FBckIsRUFBdUIsQ0FBQyxDQUFELEVBQUcsQ0FBSCxDQUF2QixFQUE2QixJQUE3QixDQUFOLENBQXlDLElBQUdHLE1BQUksb0JBQVAsRUFBNEI7QUFBQ3BCLFlBQUUsSUFBSW1YLE1BQUosRUFBRjtBQUFlLE9BQTVDLE1BQWdEO0FBQUMsWUFBRy9WLE1BQUksZ0JBQVAsRUFBd0I7QUFBQ3BCLGNBQUUsSUFBSTJXLEtBQUtmLE1BQUwsQ0FBWTZYLEdBQWhCLEVBQUY7QUFBd0IsU0FBakQsTUFBcUQ7QUFBQyxjQUFHcnNCLE1BQUksZ0JBQVAsRUFBd0I7QUFBQ3BCLGdCQUFFLElBQUkyVyxLQUFLZixNQUFMLENBQVl1WCxLQUFoQixFQUFGO0FBQTBCLFdBQW5ELE1BQXVEO0FBQUMsa0JBQUssbUNBQUw7QUFBeUM7QUFBQztBQUFDLFNBQUVrRCxrQkFBRixDQUFxQnB2QixDQUFyQixFQUF3QixPQUFPakIsQ0FBUDtBQUFTLEtBQXJsSSxFQUFzbElxekIseUJBQXdCLGlDQUFTanlCLENBQVQsRUFBVztBQUFDLFVBQUlnQyxJQUFFMmUsT0FBTixDQUFjLElBQUkvZ0IsSUFBRW9DLEVBQUVtZixXQUFSLENBQW9CLElBQUlyaEIsSUFBRWtDLEVBQUVnZixJQUFSLENBQWEsSUFBSXBpQixJQUFFLEVBQU4sQ0FBUyxJQUFHb0IsRUFBRVksTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLEtBQWUsSUFBbEIsRUFBdUI7QUFBQyxjQUFLLDZCQUFMO0FBQW1DLFdBQUlmLElBQUVELEVBQUVJLENBQUYsRUFBSSxDQUFKLENBQU4sQ0FBYSxJQUFHSCxFQUFFekIsTUFBRixJQUFVLENBQWIsRUFBZTtBQUFDLGNBQUssNkJBQUw7QUFBbUMsV0FBRzRCLEVBQUVZLE1BQUYsQ0FBU2YsRUFBRSxDQUFGLENBQVQsRUFBYyxDQUFkLEtBQWtCLElBQXJCLEVBQTBCO0FBQUMsY0FBSyw2QkFBTDtBQUFtQyxTQUFFbEIsQ0FBRixHQUFJbUIsRUFBRUUsQ0FBRixFQUFJSCxFQUFFLENBQUYsQ0FBSixDQUFKLENBQWMsSUFBR0csRUFBRVksTUFBRixDQUFTZixFQUFFLENBQUYsQ0FBVCxFQUFjLENBQWQsS0FBa0IsSUFBckIsRUFBMEI7QUFBQyxjQUFLLDZCQUFMO0FBQW1DLFNBQUU5QixDQUFGLEdBQUkrQixFQUFFRSxDQUFGLEVBQUlILEVBQUUsQ0FBRixDQUFKLENBQUosQ0FBYyxPQUFPakIsQ0FBUDtBQUFTLEtBQTk4SSxFQUErOElzekIscUJBQW9CLDZCQUFTdHlCLENBQVQsRUFBVztBQUFDLFVBQUltQyxJQUFFNGUsT0FBTixDQUFjLElBQUkzZSxJQUFFRCxFQUFFb2YsV0FBUixDQUFvQixJQUFJcmhCLElBQUVpQyxFQUFFaWYsSUFBUixDQUFhLElBQUluaEIsSUFBRSxFQUFOLENBQVNBLEVBQUUreEIsUUFBRixHQUFXLElBQVgsQ0FBZ0IsSUFBSTV4QixJQUFFZ0MsRUFBRXBDLENBQUYsRUFBSSxDQUFKLENBQU4sQ0FBYSxJQUFHSSxFQUFFNUIsTUFBRixJQUFVLENBQWIsRUFBZTtBQUFDLGNBQUssOENBQTRDNEIsRUFBRTVCLE1BQW5EO0FBQTBELFdBQUl3RCxJQUFFNUIsRUFBRSxDQUFGLENBQU4sQ0FBVyxJQUFHSixFQUFFZ0IsTUFBRixDQUFTZ0IsQ0FBVCxFQUFXLENBQVgsS0FBZSxJQUFsQixFQUF1QjtBQUFDLGNBQUssc0NBQUw7QUFBNEMsV0FBSWhELElBQUVvRCxFQUFFcEMsQ0FBRixFQUFJZ0MsQ0FBSixDQUFOLENBQWEsSUFBR2hELEVBQUVSLE1BQUYsSUFBVSxDQUFiLEVBQWU7QUFBQyxjQUFLLHNDQUFMO0FBQTRDLFdBQUd3QixFQUFFZ0IsTUFBRixDQUFTaEMsRUFBRSxDQUFGLENBQVQsRUFBYyxDQUFkLEtBQWtCLElBQXJCLEVBQTBCO0FBQUMsY0FBSyxzQ0FBTDtBQUE0QyxTQUFFaXpCLE1BQUYsR0FBUy94QixFQUFFRixDQUFGLEVBQUloQixFQUFFLENBQUYsQ0FBSixDQUFULENBQW1CLElBQUdnQixFQUFFZ0IsTUFBRixDQUFTaEMsRUFBRSxDQUFGLENBQVQsRUFBYyxDQUFkLEtBQWtCLElBQXJCLEVBQTBCO0FBQUNpQixVQUFFK3hCLFFBQUYsR0FBVzl4QixFQUFFRixDQUFGLEVBQUloQixFQUFFLENBQUYsQ0FBSixDQUFYO0FBQXFCLE9BQWhELE1BQW9EO0FBQUMsWUFBR2dCLEVBQUVnQixNQUFGLENBQVNoQyxFQUFFLENBQUYsQ0FBVCxFQUFjLENBQWQsS0FBa0IsSUFBckIsRUFBMEI7QUFBQ2lCLFlBQUUreEIsUUFBRixHQUFXLEVBQVgsQ0FBYy94QixFQUFFK3hCLFFBQUYsQ0FBV2h6QixDQUFYLEdBQWFtRCxFQUFFd2YsVUFBRixDQUFhM2hCLENBQWIsRUFBZWhCLEVBQUUsQ0FBRixDQUFmLEVBQW9CLENBQUMsQ0FBRCxDQUFwQixFQUF3QixJQUF4QixDQUFiLENBQTJDaUIsRUFBRSt4QixRQUFGLENBQVcveEIsQ0FBWCxHQUFha0MsRUFBRXdmLFVBQUYsQ0FBYTNoQixDQUFiLEVBQWVoQixFQUFFLENBQUYsQ0FBZixFQUFvQixDQUFDLENBQUQsQ0FBcEIsRUFBd0IsSUFBeEIsQ0FBYixDQUEyQ2lCLEVBQUUreEIsUUFBRixDQUFXdjBCLENBQVgsR0FBYTBFLEVBQUV3ZixVQUFGLENBQWEzaEIsQ0FBYixFQUFlaEIsRUFBRSxDQUFGLENBQWYsRUFBb0IsQ0FBQyxDQUFELENBQXBCLEVBQXdCLElBQXhCLENBQWI7QUFBMkM7QUFBQyxXQUFHZ0IsRUFBRWdCLE1BQUYsQ0FBU1osRUFBRSxDQUFGLENBQVQsRUFBYyxDQUFkLEtBQWtCLElBQXJCLEVBQTBCO0FBQUMsY0FBSyxzQ0FBTDtBQUE0QyxTQUFFNnZCLEdBQUYsR0FBTS92QixFQUFFRixDQUFGLEVBQUlJLEVBQUUsQ0FBRixDQUFKLEVBQVVZLE1BQVYsQ0FBaUIsQ0FBakIsQ0FBTixDQUEwQixPQUFPZixDQUFQO0FBQVMsS0FBMXNLLEVBQU47QUFBbXRLLENBQXQ4TyxFQUFaLENBQXE5T3lyQixRQUFRQyxNQUFSLEdBQWUsVUFBU2x0QixDQUFULEVBQVdDLENBQVgsRUFBYUssQ0FBYixFQUFlO0FBQUMsTUFBSXlGLElBQUV1YyxPQUFOO0FBQUEsTUFBY2hjLElBQUVQLEVBQUUrYyxXQUFsQjtBQUFBLE1BQThCcGYsSUFBRXFDLEVBQUU0YyxJQUFsQztBQUFBLE1BQXVDdmpCLElBQUUyRyxFQUFFbWQsVUFBM0M7QUFBQSxNQUFzRHZqQixJQUFFdVgsS0FBS2YsTUFBN0Q7QUFBQSxNQUFvRXJXLElBQUVILEVBQUUrdEIsS0FBeEU7QUFBQSxNQUE4RW5tQixJQUFFNUgsRUFBRXF1QixHQUFsRjtBQUFBLE1BQXNGenFCLElBQUVtVSxNQUF4RjtBQUFBLE1BQStGbFIsSUFBRTJlLFFBQWpHO0FBQUEsTUFBMEdyZixJQUFFbW5CLE9BQTVHLENBQW9ILElBQUcsT0FBTzFwQixDQUFQLElBQVUsV0FBVixJQUF1QnZELGFBQWF1RCxDQUF2QyxFQUF5QztBQUFDLFdBQU92RCxDQUFQO0FBQVMsT0FBRyxPQUFPRixDQUFQLElBQVUsV0FBVixJQUF1QkUsYUFBYUYsQ0FBdkMsRUFBeUM7QUFBQyxXQUFPRSxDQUFQO0FBQVMsT0FBRyxPQUFPdUgsQ0FBUCxJQUFVLFdBQVYsSUFBdUJ2SCxhQUFhdUgsQ0FBdkMsRUFBeUM7QUFBQyxXQUFPdkgsQ0FBUDtBQUFTLE9BQUdBLEVBQUVvWixLQUFGLEtBQVV2YSxTQUFWLElBQXFCbUIsRUFBRTh6QixFQUFGLEtBQU9qMUIsU0FBNUIsSUFBdUNtQixFQUFFWixDQUFGLEtBQU1QLFNBQWhELEVBQTBEO0FBQUMsV0FBTyxJQUFJaUIsQ0FBSixDQUFNLEVBQUNpeEIsS0FBSS93QixFQUFFOHpCLEVBQVAsRUFBVTFhLE9BQU1wWixFQUFFb1osS0FBbEIsRUFBTixDQUFQO0FBQXVDLE9BQUdwWixFQUFFb1osS0FBRixLQUFVdmEsU0FBVixJQUFxQm1CLEVBQUVaLENBQUYsS0FBTVAsU0FBOUIsRUFBd0M7QUFBQyxXQUFPLElBQUlpQixDQUFKLENBQU0sRUFBQ2d4QixLQUFJOXdCLEVBQUVaLENBQVAsRUFBU2dhLE9BQU1wWixFQUFFb1osS0FBakIsRUFBTixDQUFQO0FBQXNDLE9BQUdwWixFQUFFK3pCLEdBQUYsS0FBUWwxQixTQUFSLElBQW1CbUIsRUFBRU0sQ0FBRixLQUFNekIsU0FBekIsSUFBb0NtQixFQUFFTixDQUFGLEtBQU1iLFNBQTFDLElBQXFEbUIsRUFBRVosQ0FBRixLQUFNUCxTQUE5RCxFQUF3RTtBQUFDLFFBQUlpSSxJQUFFLElBQUl2RCxDQUFKLEVBQU4sQ0FBY3VELEVBQUV1UixTQUFGLENBQVlyWSxFQUFFTSxDQUFkLEVBQWdCTixFQUFFTixDQUFsQixFQUFxQixPQUFPb0gsQ0FBUDtBQUFTLE9BQUc5RyxFQUFFK3pCLEdBQUYsS0FBUWwxQixTQUFSLElBQW1CbUIsRUFBRU0sQ0FBRixLQUFNekIsU0FBekIsSUFBb0NtQixFQUFFTixDQUFGLEtBQU1iLFNBQTFDLElBQXFEbUIsRUFBRVosQ0FBRixLQUFNUCxTQUEzRCxJQUFzRW1CLEVBQUVPLENBQUYsS0FBTTFCLFNBQTVFLElBQXVGbUIsRUFBRXdCLENBQUYsS0FBTTNDLFNBQTdGLElBQXdHbUIsRUFBRWcwQixFQUFGLEtBQU9uMUIsU0FBL0csSUFBMEhtQixFQUFFaTBCLEVBQUYsS0FBT3AxQixTQUFqSSxJQUE0SW1CLEVBQUVrMEIsRUFBRixLQUFPcjFCLFNBQW5KLElBQThKbUIsRUFBRW0wQixFQUFGLEtBQU90MUIsU0FBeEssRUFBa0w7QUFBQyxRQUFJaUksSUFBRSxJQUFJdkQsQ0FBSixFQUFOLENBQWN1RCxFQUFFc3RCLFlBQUYsQ0FBZXAwQixFQUFFTSxDQUFqQixFQUFtQk4sRUFBRU4sQ0FBckIsRUFBdUJNLEVBQUVaLENBQXpCLEVBQTJCWSxFQUFFTyxDQUE3QixFQUErQlAsRUFBRXdCLENBQWpDLEVBQW1DeEIsRUFBRWcwQixFQUFyQyxFQUF3Q2gwQixFQUFFaTBCLEVBQTFDLEVBQTZDajBCLEVBQUVrMEIsRUFBL0MsRUFBbUQsT0FBT3B0QixDQUFQO0FBQVMsT0FBRzlHLEVBQUUrekIsR0FBRixLQUFRbDFCLFNBQVIsSUFBbUJtQixFQUFFTSxDQUFGLEtBQU16QixTQUF6QixJQUFvQ21CLEVBQUVOLENBQUYsS0FBTWIsU0FBMUMsSUFBcURtQixFQUFFWixDQUFGLEtBQU1QLFNBQTNELElBQXNFbUIsRUFBRU8sQ0FBRixLQUFNMUIsU0FBL0UsRUFBeUY7QUFBQyxRQUFJaUksSUFBRSxJQUFJdkQsQ0FBSixFQUFOLENBQWN1RCxFQUFFdXRCLFVBQUYsQ0FBYXIwQixFQUFFTSxDQUFmLEVBQWlCTixFQUFFTixDQUFuQixFQUFxQk0sRUFBRVosQ0FBdkIsRUFBMEIsT0FBTzBILENBQVA7QUFBUyxPQUFHOUcsRUFBRU8sQ0FBRixLQUFNMUIsU0FBTixJQUFpQm1CLEVBQUV3QixDQUFGLEtBQU0zQyxTQUF2QixJQUFrQ21CLEVBQUVoQixDQUFGLEtBQU1ILFNBQXhDLElBQW1EbUIsRUFBRW1ILENBQUYsS0FBTXRJLFNBQXpELElBQW9FbUIsRUFBRXdELENBQUYsS0FBTTNFLFNBQTdFLEVBQXVGO0FBQUMsUUFBSWlJLElBQUUsSUFBSVMsQ0FBSixFQUFOLENBQWNULEVBQUV1UixTQUFGLENBQVlyWSxFQUFFTyxDQUFkLEVBQWdCUCxFQUFFd0IsQ0FBbEIsRUFBb0J4QixFQUFFaEIsQ0FBdEIsRUFBd0JnQixFQUFFbUgsQ0FBMUIsRUFBNkIsT0FBT0wsQ0FBUDtBQUFTLE9BQUc5RyxFQUFFTyxDQUFGLEtBQU0xQixTQUFOLElBQWlCbUIsRUFBRXdCLENBQUYsS0FBTTNDLFNBQXZCLElBQWtDbUIsRUFBRWhCLENBQUYsS0FBTUgsU0FBeEMsSUFBbURtQixFQUFFbUgsQ0FBRixLQUFNdEksU0FBekQsSUFBb0VtQixFQUFFd0QsQ0FBRixLQUFNM0UsU0FBN0UsRUFBdUY7QUFBQyxRQUFJaUksSUFBRSxJQUFJUyxDQUFKLEVBQU4sQ0FBY1QsRUFBRXV0QixVQUFGLENBQWFyMEIsRUFBRU8sQ0FBZixFQUFpQlAsRUFBRXdCLENBQW5CLEVBQXFCeEIsRUFBRWhCLENBQXZCLEVBQXlCZ0IsRUFBRW1ILENBQTNCLEVBQTZCbkgsRUFBRXdELENBQS9CLEVBQWtDLE9BQU9zRCxDQUFQO0FBQVMsT0FBRzlHLEVBQUUrekIsR0FBRixLQUFRLEtBQVIsSUFBZS96QixFQUFFTSxDQUFGLEtBQU16QixTQUFyQixJQUFnQ21CLEVBQUVOLENBQUYsS0FBTWIsU0FBdEMsSUFBaURtQixFQUFFWixDQUFGLEtBQU1QLFNBQTFELEVBQW9FO0FBQUMsUUFBSWlJLElBQUUsSUFBSXZELENBQUosRUFBTixDQUFjdUQsRUFBRXVSLFNBQUYsQ0FBWWtNLFVBQVV2a0IsRUFBRU0sQ0FBWixDQUFaLEVBQTJCaWtCLFVBQVV2a0IsRUFBRU4sQ0FBWixDQUEzQixFQUEyQyxPQUFPb0gsQ0FBUDtBQUFTLE9BQUc5RyxFQUFFK3pCLEdBQUYsS0FBUSxLQUFSLElBQWUvekIsRUFBRU0sQ0FBRixLQUFNekIsU0FBckIsSUFBZ0NtQixFQUFFTixDQUFGLEtBQU1iLFNBQXRDLElBQWlEbUIsRUFBRVosQ0FBRixLQUFNUCxTQUF2RCxJQUFrRW1CLEVBQUVPLENBQUYsS0FBTTFCLFNBQXhFLElBQW1GbUIsRUFBRXdCLENBQUYsS0FBTTNDLFNBQXpGLElBQW9HbUIsRUFBRWcwQixFQUFGLEtBQU9uMUIsU0FBM0csSUFBc0htQixFQUFFaTBCLEVBQUYsS0FBT3AxQixTQUE3SCxJQUF3SW1CLEVBQUVtMEIsRUFBRixLQUFPdDFCLFNBQWxKLEVBQTRKO0FBQUMsUUFBSWlJLElBQUUsSUFBSXZELENBQUosRUFBTixDQUFjdUQsRUFBRXN0QixZQUFGLENBQWU3UCxVQUFVdmtCLEVBQUVNLENBQVosQ0FBZixFQUE4QmlrQixVQUFVdmtCLEVBQUVOLENBQVosQ0FBOUIsRUFBNkM2a0IsVUFBVXZrQixFQUFFWixDQUFaLENBQTdDLEVBQTREbWxCLFVBQVV2a0IsRUFBRU8sQ0FBWixDQUE1RCxFQUEyRWdrQixVQUFVdmtCLEVBQUV3QixDQUFaLENBQTNFLEVBQTBGK2lCLFVBQVV2a0IsRUFBRWcwQixFQUFaLENBQTFGLEVBQTBHelAsVUFBVXZrQixFQUFFaTBCLEVBQVosQ0FBMUcsRUFBMEgxUCxVQUFVdmtCLEVBQUVtMEIsRUFBWixDQUExSCxFQUEySSxPQUFPcnRCLENBQVA7QUFBUyxPQUFHOUcsRUFBRSt6QixHQUFGLEtBQVEsS0FBUixJQUFlL3pCLEVBQUVNLENBQUYsS0FBTXpCLFNBQXJCLElBQWdDbUIsRUFBRU4sQ0FBRixLQUFNYixTQUF0QyxJQUFpRG1CLEVBQUVaLENBQUYsS0FBTVAsU0FBMUQsRUFBb0U7QUFBQyxRQUFJaUksSUFBRSxJQUFJdkQsQ0FBSixFQUFOLENBQWN1RCxFQUFFdXRCLFVBQUYsQ0FBYTlQLFVBQVV2a0IsRUFBRU0sQ0FBWixDQUFiLEVBQTRCaWtCLFVBQVV2a0IsRUFBRU4sQ0FBWixDQUE1QixFQUEyQzZrQixVQUFVdmtCLEVBQUVaLENBQVosQ0FBM0MsRUFBMkQsT0FBTzBILENBQVA7QUFBUyxPQUFHOUcsRUFBRSt6QixHQUFGLEtBQVEsSUFBUixJQUFjL3pCLEVBQUVzMEIsR0FBRixLQUFRejFCLFNBQXRCLElBQWlDbUIsRUFBRXdELENBQUYsS0FBTTNFLFNBQXZDLElBQWtEbUIsRUFBRW1ILENBQUYsS0FBTXRJLFNBQXhELElBQW1FbUIsRUFBRVosQ0FBRixLQUFNUCxTQUE1RSxFQUFzRjtBQUFDLFFBQUlnQixJQUFFLElBQUlDLENBQUosQ0FBTSxFQUFDc1osT0FBTXBaLEVBQUVzMEIsR0FBVCxFQUFOLENBQU4sQ0FBMkIsSUFBSS95QixJQUFFMUIsRUFBRXN2QixRQUFGLENBQVdTLE1BQVgsR0FBa0IsQ0FBeEIsQ0FBMEIsSUFBSXZvQixJQUFFLENBQUMsZUFBYWtkLFVBQVV2a0IsRUFBRXdELENBQVosQ0FBZCxFQUE4QjFCLEtBQTlCLENBQW9DLENBQUNQLENBQXJDLENBQU4sQ0FBOEMsSUFBSTBGLElBQUUsQ0FBQyxlQUFhc2QsVUFBVXZrQixFQUFFbUgsQ0FBWixDQUFkLEVBQThCckYsS0FBOUIsQ0FBb0MsQ0FBQ1AsQ0FBckMsQ0FBTixDQUE4QyxJQUFJb0MsSUFBRSxPQUFLMEQsQ0FBTCxHQUFPSixDQUFiLENBQWVwSCxFQUFFNnZCLGVBQUYsQ0FBa0IvckIsQ0FBbEIsRUFBcUIsT0FBTzlELENBQVA7QUFBUyxPQUFHRyxFQUFFK3pCLEdBQUYsS0FBUSxJQUFSLElBQWMvekIsRUFBRXMwQixHQUFGLEtBQVF6MUIsU0FBdEIsSUFBaUNtQixFQUFFd0QsQ0FBRixLQUFNM0UsU0FBdkMsSUFBa0RtQixFQUFFbUgsQ0FBRixLQUFNdEksU0FBeEQsSUFBbUVtQixFQUFFWixDQUFGLEtBQU1QLFNBQTVFLEVBQXNGO0FBQUMsUUFBSWdCLElBQUUsSUFBSUMsQ0FBSixDQUFNLEVBQUNzWixPQUFNcFosRUFBRXMwQixHQUFULEVBQU4sQ0FBTixDQUEyQixJQUFJL3lCLElBQUUxQixFQUFFc3ZCLFFBQUYsQ0FBV1MsTUFBWCxHQUFrQixDQUF4QixDQUEwQixJQUFJdm9CLElBQUUsQ0FBQyxlQUFha2QsVUFBVXZrQixFQUFFd0QsQ0FBWixDQUFkLEVBQThCMUIsS0FBOUIsQ0FBb0MsQ0FBQ1AsQ0FBckMsQ0FBTixDQUE4QyxJQUFJMEYsSUFBRSxDQUFDLGVBQWFzZCxVQUFVdmtCLEVBQUVtSCxDQUFaLENBQWQsRUFBOEJyRixLQUE5QixDQUFvQyxDQUFDUCxDQUFyQyxDQUFOLENBQThDLElBQUlvQyxJQUFFLE9BQUswRCxDQUFMLEdBQU9KLENBQWIsQ0FBZSxJQUFJeEgsSUFBRSxDQUFDLGVBQWE4a0IsVUFBVXZrQixFQUFFWixDQUFaLENBQWQsRUFBOEIwQyxLQUE5QixDQUFvQyxDQUFDUCxDQUFyQyxDQUFOLENBQThDMUIsRUFBRTZ2QixlQUFGLENBQWtCL3JCLENBQWxCLEVBQXFCOUQsRUFBRTR2QixnQkFBRixDQUFtQmh3QixDQUFuQixFQUFzQixPQUFPSSxDQUFQO0FBQVMsT0FBR1MsTUFBSSxVQUFQLEVBQWtCO0FBQUMsUUFBSTRGLElBQUVsRyxDQUFOO0FBQUEsUUFBUStGLElBQUV1YyxPQUFWO0FBQUEsUUFBa0I1YixDQUFsQjtBQUFBLFFBQW9CSSxDQUFwQixDQUFzQkosSUFBRUosRUFBRUosQ0FBRixFQUFJLENBQUosQ0FBRixDQUFTLElBQUdRLEVBQUUzRyxNQUFGLEtBQVcsQ0FBZCxFQUFnQjtBQUFDK0csVUFBRSxJQUFJdkQsQ0FBSixFQUFGLENBQVV1RCxFQUFFMnBCLGtCQUFGLENBQXFCdnFCLENBQXJCO0FBQXdCLEtBQW5ELE1BQXVEO0FBQUMsVUFBR1EsRUFBRTNHLE1BQUYsS0FBVyxDQUFkLEVBQWdCO0FBQUMrRyxZQUFFLElBQUlTLENBQUosRUFBRixDQUFVVCxFQUFFMnBCLGtCQUFGLENBQXFCdnFCLENBQXJCO0FBQXdCLE9BQW5ELE1BQXVEO0FBQUMsWUFBR1EsRUFBRTNHLE1BQUYsR0FBUyxDQUFULElBQVltRyxFQUFFM0QsTUFBRixDQUFTbUUsRUFBRSxDQUFGLENBQVQsRUFBYyxDQUFkLE1BQW1CLElBQWxDLEVBQXVDO0FBQUNJLGNBQUUsSUFBSWhILENBQUosRUFBRixDQUFVZ0gsRUFBRTJwQixrQkFBRixDQUFxQnZxQixDQUFyQjtBQUF3QixTQUExRSxNQUE4RTtBQUFDLGdCQUFLLHNDQUFMO0FBQTRDO0FBQUM7QUFBQyxZQUFPWSxDQUFQO0FBQVMsT0FBR3hHLE1BQUksVUFBUCxFQUFrQjtBQUFDLFFBQUl3RyxJQUFFaEIsRUFBRXV0Qiw4QkFBRixDQUFpQ3J6QixDQUFqQyxDQUFOLENBQTBDLE9BQU84RyxDQUFQO0FBQVMsT0FBR3hHLE1BQUksVUFBUCxFQUFrQjtBQUFDLFdBQU93RixFQUFFNnRCLHlCQUFGLENBQTRCM3pCLENBQTVCLENBQVA7QUFBc0MsT0FBR00sTUFBSSxTQUFQLEVBQWlCO0FBQUMsV0FBT2kwQixLQUFLQyx1QkFBTCxDQUE2QngwQixDQUE3QixDQUFQO0FBQXVDLE9BQUdBLEVBQUVvRixPQUFGLENBQVUsbUJBQVYsRUFBOEIsQ0FBOUIsS0FBa0MsQ0FBQyxDQUFuQyxJQUFzQ3BGLEVBQUVvRixPQUFGLENBQVUsd0JBQVYsRUFBbUMsQ0FBbkMsS0FBdUMsQ0FBQyxDQUE5RSxJQUFpRnBGLEVBQUVvRixPQUFGLENBQVUsMkJBQVYsRUFBc0MsQ0FBdEMsS0FBMEMsQ0FBQyxDQUEvSCxFQUFpSTtBQUFDLFdBQU9tdkIsS0FBS0UsdUJBQUwsQ0FBNkJ6MEIsQ0FBN0IsQ0FBUDtBQUF1QyxPQUFHQSxFQUFFb0YsT0FBRixDQUFVLGtCQUFWLEtBQStCLENBQUMsQ0FBbkMsRUFBcUM7QUFBQyxRQUFJd0IsSUFBRXVlLFNBQVNubEIsQ0FBVCxFQUFXLFlBQVgsQ0FBTixDQUErQixPQUFPOEYsRUFBRTZ0Qix5QkFBRixDQUE0Qi9zQixDQUE1QixDQUFQO0FBQXNDLE9BQUc1RyxFQUFFb0YsT0FBRixDQUFVLHVCQUFWLEtBQW9DLENBQUMsQ0FBckMsSUFBd0NwRixFQUFFb0YsT0FBRixDQUFVLGFBQVYsS0FBMEIsQ0FBQyxDQUF0RSxFQUF3RTtBQUFDLFFBQUluRCxJQUFFdUUsRUFBRXhHLENBQUYsRUFBSSxpQkFBSixDQUFOLENBQTZCLE9BQU84RixFQUFFb25CLE1BQUYsQ0FBU2pyQixDQUFULEVBQVcsSUFBWCxFQUFnQixVQUFoQixDQUFQO0FBQW1DLE9BQUdqQyxFQUFFb0YsT0FBRixDQUFVLHVCQUFWLEtBQW9DLENBQUMsQ0FBckMsSUFBd0NwRixFQUFFb0YsT0FBRixDQUFVLGFBQVYsS0FBMEIsQ0FBQyxDQUF0RSxFQUF3RTtBQUFDLFFBQUlhLElBQUVPLEVBQUV4RyxDQUFGLEVBQUksaUJBQUosQ0FBTixDQUE2QixJQUFJMkgsSUFBRXZJLEVBQUU2RyxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxDQUFOLEVBQVUsSUFBVixDQUFOLENBQXNCLElBQUl3QixJQUFFckksRUFBRTZHLENBQUYsRUFBSSxDQUFKLEVBQU0sQ0FBQyxDQUFELENBQU4sRUFBVSxJQUFWLENBQU4sQ0FBc0IsSUFBSUcsSUFBRWhILEVBQUU2RyxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxDQUFOLEVBQVUsSUFBVixDQUFOLENBQXNCLElBQUl0RSxJQUFFdkMsRUFBRTZHLENBQUYsRUFBSSxDQUFKLEVBQU0sQ0FBQyxDQUFELENBQU4sRUFBVSxJQUFWLENBQU4sQ0FBc0IsSUFBSXhFLElBQUVyQyxFQUFFNkcsQ0FBRixFQUFJLENBQUosRUFBTSxDQUFDLENBQUQsQ0FBTixFQUFVLElBQVYsQ0FBTixDQUFzQixJQUFJYSxJQUFFLElBQUlTLENBQUosRUFBTixDQUFjVCxFQUFFdXRCLFVBQUYsQ0FBYSxJQUFJeHJCLFVBQUosQ0FBZWxCLENBQWYsRUFBaUIsRUFBakIsQ0FBYixFQUFrQyxJQUFJa0IsVUFBSixDQUFlcEIsQ0FBZixFQUFpQixFQUFqQixDQUFsQyxFQUF1RCxJQUFJb0IsVUFBSixDQUFlekMsQ0FBZixFQUFpQixFQUFqQixDQUF2RCxFQUE0RSxJQUFJeUMsVUFBSixDQUFlbEgsQ0FBZixFQUFpQixFQUFqQixDQUE1RSxFQUFpRyxJQUFJa0gsVUFBSixDQUFlcEgsQ0FBZixFQUFpQixFQUFqQixDQUFqRyxFQUF1SCxPQUFPcUYsQ0FBUDtBQUFTLE9BQUc5RyxFQUFFb0YsT0FBRixDQUFVLG1CQUFWLEtBQWdDLENBQUMsQ0FBcEMsRUFBc0M7QUFBQyxXQUFPVSxFQUFFNHRCLDhCQUFGLENBQWlDMXpCLENBQWpDLENBQVA7QUFBMkMsT0FBR0EsRUFBRW9GLE9BQUYsQ0FBVSx1QkFBVixLQUFvQyxDQUFDLENBQXJDLElBQXdDcEYsRUFBRW9GLE9BQUYsQ0FBVSxhQUFWLEtBQTBCLENBQUMsQ0FBdEUsRUFBd0U7QUFBQyxRQUFJNUUsSUFBRXNGLEVBQUV5c0Isa0JBQUYsQ0FBcUJ2eUIsQ0FBckIsRUFBdUJDLENBQXZCLENBQU4sQ0FBZ0MsSUFBSStGLElBQUUsSUFBSTBSLE1BQUosRUFBTixDQUFtQjFSLEVBQUV5cUIsa0JBQUYsQ0FBcUJqd0IsQ0FBckIsRUFBd0IsT0FBT3dGLENBQVA7QUFBUyxPQUFHaEcsRUFBRW9GLE9BQUYsQ0FBVSxzQkFBVixLQUFtQyxDQUFDLENBQXBDLElBQXVDcEYsRUFBRW9GLE9BQUYsQ0FBVSxhQUFWLEtBQTBCLENBQUMsQ0FBckUsRUFBdUU7QUFBQyxRQUFJYSxJQUFFSCxFQUFFeXNCLGtCQUFGLENBQXFCdnlCLENBQXJCLEVBQXVCQyxDQUF2QixDQUFOLENBQWdDLElBQUk2RyxJQUFFMUgsRUFBRTZHLENBQUYsRUFBSSxDQUFKLEVBQU0sQ0FBQyxDQUFELENBQU4sRUFBVSxJQUFWLENBQU4sQ0FBc0IsSUFBSS9HLElBQUVFLEVBQUU2RyxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxFQUFHLENBQUgsQ0FBTixFQUFZLElBQVosQ0FBTixDQUF3QixJQUFJaUIsSUFBRTlILEVBQUU2RyxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxFQUFHLENBQUgsQ0FBTixFQUFZLElBQVosRUFBa0IxRCxNQUFsQixDQUF5QixDQUF6QixDQUFOLENBQWtDLElBQUk3QyxJQUFFLEVBQU4sQ0FBUyxJQUFHd1gsS0FBS2YsTUFBTCxDQUFZc0wsR0FBWixDQUFnQnVOLFdBQWhCLENBQTRCOXZCLENBQTVCLE1BQWlDTCxTQUFwQyxFQUE4QztBQUFDYSxVQUFFd1gsS0FBS2YsTUFBTCxDQUFZc0wsR0FBWixDQUFnQnVOLFdBQWhCLENBQTRCOXZCLENBQTVCLENBQUY7QUFBaUMsS0FBaEYsTUFBb0Y7QUFBQyxZQUFLLDRDQUEwQ0EsQ0FBL0M7QUFBaUQsU0FBSVcsSUFBRSxJQUFJQyxDQUFKLENBQU0sRUFBQ3NaLE9BQU0xWixDQUFQLEVBQU4sQ0FBTixDQUF1QkcsRUFBRTZ2QixlQUFGLENBQWtCeG9CLENBQWxCLEVBQXFCckgsRUFBRTR2QixnQkFBRixDQUFtQjNvQixDQUFuQixFQUFzQmpILEVBQUVrWSxRQUFGLEdBQVcsS0FBWCxDQUFpQixPQUFPbFksQ0FBUDtBQUFTLE9BQUdHLEVBQUVvRixPQUFGLENBQVUsdUJBQVYsS0FBb0MsQ0FBQyxDQUFyQyxJQUF3Q3BGLEVBQUVvRixPQUFGLENBQVUsYUFBVixLQUEwQixDQUFDLENBQXRFLEVBQXdFO0FBQUMsUUFBSWEsSUFBRUgsRUFBRXlzQixrQkFBRixDQUFxQnZ5QixDQUFyQixFQUF1QkMsQ0FBdkIsQ0FBTixDQUFnQyxJQUFJMEgsSUFBRXZJLEVBQUU2RyxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxDQUFOLEVBQVUsSUFBVixDQUFOLENBQXNCLElBQUl3QixJQUFFckksRUFBRTZHLENBQUYsRUFBSSxDQUFKLEVBQU0sQ0FBQyxDQUFELENBQU4sRUFBVSxJQUFWLENBQU4sQ0FBc0IsSUFBSUcsSUFBRWhILEVBQUU2RyxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxDQUFOLEVBQVUsSUFBVixDQUFOLENBQXNCLElBQUl0RSxJQUFFdkMsRUFBRTZHLENBQUYsRUFBSSxDQUFKLEVBQU0sQ0FBQyxDQUFELENBQU4sRUFBVSxJQUFWLENBQU4sQ0FBc0IsSUFBSXhFLElBQUVyQyxFQUFFNkcsQ0FBRixFQUFJLENBQUosRUFBTSxDQUFDLENBQUQsQ0FBTixFQUFVLElBQVYsQ0FBTixDQUFzQixJQUFJYSxJQUFFLElBQUlTLENBQUosRUFBTixDQUFjVCxFQUFFdXRCLFVBQUYsQ0FBYSxJQUFJeHJCLFVBQUosQ0FBZWxCLENBQWYsRUFBaUIsRUFBakIsQ0FBYixFQUFrQyxJQUFJa0IsVUFBSixDQUFlcEIsQ0FBZixFQUFpQixFQUFqQixDQUFsQyxFQUF1RCxJQUFJb0IsVUFBSixDQUFlekMsQ0FBZixFQUFpQixFQUFqQixDQUF2RCxFQUE0RSxJQUFJeUMsVUFBSixDQUFlbEgsQ0FBZixFQUFpQixFQUFqQixDQUE1RSxFQUFpRyxJQUFJa0gsVUFBSixDQUFlcEgsQ0FBZixFQUFpQixFQUFqQixDQUFqRyxFQUF1SCxPQUFPcUYsQ0FBUDtBQUFTLE9BQUc5RyxFQUFFb0YsT0FBRixDQUFVLDZCQUFWLEtBQTBDLENBQUMsQ0FBOUMsRUFBZ0Q7QUFBQyxXQUFPVSxFQUFFc3RCLDJCQUFGLENBQThCcHpCLENBQTlCLEVBQWdDQyxDQUFoQyxDQUFQO0FBQTBDLFNBQUssd0JBQUw7QUFBOEIsQ0FBanhKLENBQWt4Smd0QixRQUFReUgsZUFBUixHQUF3QixVQUFTeDBCLENBQVQsRUFBV1AsQ0FBWCxFQUFhO0FBQUMsTUFBR08sS0FBRyxLQUFOLEVBQVk7QUFBQyxRQUFJVCxJQUFFRSxDQUFOLENBQVEsSUFBSVYsSUFBRSxJQUFJeVksTUFBSixFQUFOLENBQW1CelksRUFBRTAxQixRQUFGLENBQVdsMUIsQ0FBWCxFQUFhLE9BQWIsRUFBc0JSLEVBQUUrWSxTQUFGLEdBQVksSUFBWixDQUFpQi9ZLEVBQUU4WSxRQUFGLEdBQVcsSUFBWCxDQUFnQixJQUFJN1ksSUFBRSxJQUFJd1ksTUFBSixFQUFOLENBQW1CLElBQUloWSxJQUFFVCxFQUFFcUIsQ0FBRixDQUFJVSxRQUFKLENBQWEsRUFBYixDQUFOLENBQXVCLElBQUlsQixJQUFFYixFQUFFUyxDQUFGLENBQUlzQixRQUFKLENBQWEsRUFBYixDQUFOLENBQXVCOUIsRUFBRW1aLFNBQUYsQ0FBWTNZLENBQVosRUFBY0ksQ0FBZCxFQUFpQlosRUFBRThZLFNBQUYsR0FBWSxLQUFaLENBQWtCOVksRUFBRTZZLFFBQUYsR0FBVyxJQUFYLENBQWdCLElBQUk5WCxJQUFFLEVBQU4sQ0FBU0EsRUFBRTIwQixTQUFGLEdBQVkzMUIsQ0FBWixDQUFjZ0IsRUFBRTQwQixTQUFGLEdBQVkzMUIsQ0FBWixDQUFjLE9BQU9lLENBQVA7QUFBUyxHQUFqUSxNQUFxUTtBQUFDLFFBQUdDLEtBQUcsSUFBTixFQUFXO0FBQUMsVUFBSWQsSUFBRU8sQ0FBTixDQUFRLElBQUlYLElBQUUsSUFBSWtZLEtBQUtmLE1BQUwsQ0FBWXVYLEtBQWhCLENBQXNCLEVBQUN0VSxPQUFNaGEsQ0FBUCxFQUF0QixDQUFOLENBQXVDLElBQUlTLElBQUViLEVBQUU4d0Isa0JBQUYsRUFBTixDQUE2QixJQUFJN3dCLElBQUUsSUFBSWlZLEtBQUtmLE1BQUwsQ0FBWXVYLEtBQWhCLENBQXNCLEVBQUN0VSxPQUFNaGEsQ0FBUCxFQUF0QixDQUFOLENBQXVDSCxFQUFFeXdCLGVBQUYsQ0FBa0I3dkIsRUFBRXN1QixRQUFwQixFQUE4Qmx2QixFQUFFd3dCLGdCQUFGLENBQW1CNXZCLEVBQUUydEIsUUFBckIsRUFBK0J2dUIsRUFBRStZLFNBQUYsR0FBWSxJQUFaLENBQWlCL1ksRUFBRThZLFFBQUYsR0FBVyxLQUFYLENBQWlCLElBQUk3WSxJQUFFLElBQUlnWSxLQUFLZixNQUFMLENBQVl1WCxLQUFoQixDQUFzQixFQUFDdFUsT0FBTWhhLENBQVAsRUFBdEIsQ0FBTixDQUF1Q0YsRUFBRXd3QixlQUFGLENBQWtCN3ZCLEVBQUVzdUIsUUFBcEIsRUFBOEJqdkIsRUFBRThZLFNBQUYsR0FBWSxLQUFaLENBQWtCOVksRUFBRTZZLFFBQUYsR0FBVyxJQUFYLENBQWdCLElBQUk5WCxJQUFFLEVBQU4sQ0FBU0EsRUFBRTIwQixTQUFGLEdBQVkzMUIsQ0FBWixDQUFjZ0IsRUFBRTQwQixTQUFGLEdBQVkzMUIsQ0FBWixDQUFjLE9BQU9lLENBQVA7QUFBUyxLQUFuWCxNQUF1WDtBQUFDLFlBQUssd0JBQXNCQyxDQUEzQjtBQUE2QjtBQUFDO0FBQUMsQ0FBbnNCLENBQW9zQitzQixRQUFRNkgsTUFBUixHQUFlLFVBQVNyMUIsQ0FBVCxFQUFXZ0ksQ0FBWCxFQUFhTixDQUFiLEVBQWVsRixDQUFmLEVBQWlCVCxDQUFqQixFQUFtQjNCLENBQW5CLEVBQXFCO0FBQUMsTUFBSWlHLElBQUVvUixJQUFOO0FBQUEsTUFBV2pYLElBQUU2RixFQUFFc1csSUFBZjtBQUFBLE1BQW9CblYsSUFBRWhILEVBQUUrYyxtQkFBeEI7QUFBQSxNQUE0QzlkLElBQUVlLEVBQUUyYyxVQUFoRDtBQUFBLE1BQTJENWMsSUFBRUMsRUFBRW9jLFFBQUYsQ0FBV0ssU0FBeEU7QUFBQSxNQUFrRnhjLElBQUVELEVBQUV1aEIsSUFBdEY7QUFBQSxNQUEyRmphLElBQUVySCxFQUFFNjBCLG9CQUEvRjtBQUFBLE1BQW9IcjFCLElBQUVvRyxFQUFFcVEsTUFBeEg7QUFBQSxNQUErSHhTLElBQUVqRSxFQUFFc3VCLEdBQW5JO0FBQUEsTUFBdUlyc0IsSUFBRWpDLEVBQUVndUIsS0FBM0k7QUFBQSxNQUFpSnB0QixJQUFFb1gsTUFBbkosQ0FBMEosU0FBU3hRLENBQVQsQ0FBV3pGLENBQVgsRUFBYTtBQUFDLFFBQUlzRSxJQUFFL0YsRUFBRSxFQUFDZzFCLEtBQUksQ0FBQyxFQUFDLE9BQU0sQ0FBUCxFQUFELEVBQVcsRUFBQyxPQUFNLEVBQUNqVSxRQUFPdGYsRUFBRW5CLENBQVYsRUFBUCxFQUFYLEVBQWdDLEVBQUMsT0FBTW1CLEVBQUUvQixDQUFULEVBQWhDLEVBQTRDLEVBQUMsT0FBTSxFQUFDcWhCLFFBQU90ZixFQUFFckMsQ0FBVixFQUFQLEVBQTVDLEVBQWlFLEVBQUMsT0FBTSxFQUFDMmhCLFFBQU90ZixFQUFFbEIsQ0FBVixFQUFQLEVBQWpFLEVBQXNGLEVBQUMsT0FBTSxFQUFDd2dCLFFBQU90ZixFQUFFRCxDQUFWLEVBQVAsRUFBdEYsRUFBMkcsRUFBQyxPQUFNLEVBQUN1ZixRQUFPdGYsRUFBRWtXLElBQVYsRUFBUCxFQUEzRyxFQUFtSSxFQUFDLE9BQU0sRUFBQ29KLFFBQU90ZixFQUFFbVcsSUFBVixFQUFQLEVBQW5JLEVBQTJKLEVBQUMsT0FBTSxFQUFDbUosUUFBT3RmLEVBQUVvVyxLQUFWLEVBQVAsRUFBM0osQ0FBTCxFQUFGLENBQU4sQ0FBb00sT0FBTzlSLENBQVA7QUFBUyxZQUFTc0IsQ0FBVCxDQUFXdEIsQ0FBWCxFQUFhO0FBQUMsUUFBSXRFLElBQUV6QixFQUFFLEVBQUNnMUIsS0FBSSxDQUFDLEVBQUMsT0FBTSxDQUFQLEVBQUQsRUFBVyxFQUFDQyxRQUFPLEVBQUMzVixLQUFJdlosRUFBRXVwQixTQUFQLEVBQVIsRUFBWCxFQUFzQyxFQUFDeFIsS0FBSSxDQUFDLElBQUQsRUFBTSxJQUFOLEVBQVcsRUFBQzZELEtBQUksRUFBQ0MsTUFBSzdiLEVBQUV5cEIsU0FBUixFQUFMLEVBQVgsQ0FBTCxFQUF0QyxFQUFpRixFQUFDMVIsS0FBSSxDQUFDLElBQUQsRUFBTSxJQUFOLEVBQVcsRUFBQ29YLFFBQU8sRUFBQzVWLEtBQUksT0FBS3ZaLEVBQUV3cEIsU0FBWixFQUFSLEVBQVgsQ0FBTCxFQUFqRixDQUFMLEVBQUYsQ0FBTixDQUFtSixPQUFPOXRCLENBQVA7QUFBUyxZQUFTK0IsQ0FBVCxDQUFXL0IsQ0FBWCxFQUFhO0FBQUMsUUFBSXNFLElBQUUvRixFQUFFLEVBQUNnMUIsS0FBSSxDQUFDLEVBQUMsT0FBTSxDQUFQLEVBQUQsRUFBVyxFQUFDLE9BQU0sRUFBQ2pVLFFBQU90ZixFQUFFbEIsQ0FBVixFQUFQLEVBQVgsRUFBZ0MsRUFBQyxPQUFNLEVBQUN3Z0IsUUFBT3RmLEVBQUVELENBQVYsRUFBUCxFQUFoQyxFQUFxRCxFQUFDLE9BQU0sRUFBQ3VmLFFBQU90ZixFQUFFekMsQ0FBVixFQUFQLEVBQXJELEVBQTBFLEVBQUMsT0FBTSxFQUFDK2hCLFFBQU90ZixFQUFFMEYsQ0FBVixFQUFQLEVBQTFFLEVBQStGLEVBQUMsT0FBTSxFQUFDNFosUUFBT3RmLEVBQUUrQixDQUFWLEVBQVAsRUFBL0YsQ0FBTCxFQUFGLENBQU4sQ0FBb0ksT0FBT3VDLENBQVA7QUFBUyxPQUFHLENBQUV6RixNQUFJekIsU0FBSixJQUFlWSxhQUFhYSxDQUE3QixJQUFrQ3FELE1BQUk5RSxTQUFKLElBQWVZLGFBQWFrRSxDQUE5RCxJQUFtRWhDLE1BQUk5QyxTQUFKLElBQWVZLGFBQWFrQyxDQUFoRyxLQUFxR2xDLEVBQUVzWSxRQUFGLElBQVksSUFBakgsS0FBd0h0USxNQUFJNUksU0FBSixJQUFlNEksS0FBRyxVQUExSSxDQUFILEVBQXlKO0FBQUMsUUFBSUUsSUFBRSxJQUFJSixDQUFKLENBQU05SCxDQUFOLENBQU4sQ0FBZSxJQUFJOEQsSUFBRW9FLEVBQUV1VyxhQUFGLEVBQU4sQ0FBd0IsT0FBT3pCLFNBQVNsWixDQUFULEVBQVcsWUFBWCxDQUFQO0FBQWdDLE9BQUdrRSxLQUFHLFVBQUgsSUFBZW5ILE1BQUl6QixTQUFuQixJQUE4QlksYUFBYWEsQ0FBM0MsS0FBK0M2RyxNQUFJdEksU0FBSixJQUFlc0ksS0FBRyxJQUFqRSxLQUF3RTFILEVBQUV1WSxTQUFGLElBQWEsSUFBeEYsRUFBNkY7QUFBQyxRQUFJclEsSUFBRVQsRUFBRXpILENBQUYsQ0FBTixDQUFXLElBQUk4RCxJQUFFb0UsRUFBRXVXLGFBQUYsRUFBTixDQUF3QixPQUFPekIsU0FBU2xaLENBQVQsRUFBVyxpQkFBWCxDQUFQO0FBQXFDLE9BQUdrRSxLQUFHLFVBQUgsSUFBZTlGLE1BQUk5QyxTQUFuQixJQUE4QlksYUFBYWtDLENBQTNDLEtBQStDd0YsTUFBSXRJLFNBQUosSUFBZXNJLEtBQUcsSUFBakUsS0FBd0UxSCxFQUFFdVksU0FBRixJQUFhLElBQXhGLEVBQTZGO0FBQUMsUUFBSWxZLElBQUUsSUFBSW1ILENBQUosQ0FBTSxFQUFDMmEsTUFBS25pQixFQUFFK3ZCLFNBQVIsRUFBTixDQUFOLENBQWdDLElBQUk5ckIsSUFBRTVELEVBQUVvZSxhQUFGLEVBQU4sQ0FBd0IsSUFBSWpmLElBQUVvSSxFQUFFNUgsQ0FBRixDQUFOLENBQVcsSUFBSThCLElBQUV0QyxFQUFFaWYsYUFBRixFQUFOLENBQXdCLElBQUkzZCxJQUFFLEVBQU4sQ0FBU0EsS0FBR2tjLFNBQVMvWSxDQUFULEVBQVcsZUFBWCxDQUFILENBQStCbkQsS0FBR2tjLFNBQVNsYixDQUFULEVBQVcsZ0JBQVgsQ0FBSCxDQUFnQyxPQUFPaEIsQ0FBUDtBQUFTLE9BQUdrSCxLQUFHLFVBQUgsSUFBZTlELE1BQUk5RSxTQUFuQixJQUE4QlksYUFBYWtFLENBQTNDLEtBQStDd0QsTUFBSXRJLFNBQUosSUFBZXNJLEtBQUcsSUFBakUsS0FBd0UxSCxFQUFFdVksU0FBRixJQUFhLElBQXhGLEVBQTZGO0FBQUMsUUFBSXJRLElBQUVuRSxFQUFFL0QsQ0FBRixDQUFOLENBQVcsSUFBSThELElBQUVvRSxFQUFFdVcsYUFBRixFQUFOLENBQXdCLE9BQU96QixTQUFTbFosQ0FBVCxFQUFXLGlCQUFYLENBQVA7QUFBcUMsT0FBR2tFLEtBQUcsVUFBSCxJQUFlbkgsTUFBSXpCLFNBQW5CLElBQThCWSxhQUFhYSxDQUEzQyxJQUErQzZHLE1BQUl0SSxTQUFKLElBQWVzSSxLQUFHLElBQWpFLElBQXdFMUgsRUFBRXVZLFNBQUYsSUFBYSxJQUF4RixFQUE2RjtBQUFDLFFBQUlyUSxJQUFFVCxFQUFFekgsQ0FBRixDQUFOLENBQVcsSUFBSThELElBQUVvRSxFQUFFdVcsYUFBRixFQUFOLENBQXdCLElBQUdqYyxNQUFJcEQsU0FBUCxFQUFpQjtBQUFDb0QsVUFBRSxjQUFGO0FBQWlCLFlBQU8sS0FBS3V3QixpQ0FBTCxDQUF1QyxLQUF2QyxFQUE2Q2p2QixDQUE3QyxFQUErQzRELENBQS9DLEVBQWlEbEYsQ0FBakQsRUFBbURwQyxDQUFuRCxDQUFQO0FBQTZELE9BQUc0SCxLQUFHLFVBQUgsSUFBZTlGLE1BQUk5QyxTQUFuQixJQUE4QlksYUFBYWtDLENBQTNDLElBQStDd0YsTUFBSXRJLFNBQUosSUFBZXNJLEtBQUcsSUFBakUsSUFBd0UxSCxFQUFFdVksU0FBRixJQUFhLElBQXhGLEVBQTZGO0FBQUMsUUFBSXJRLElBQUVOLEVBQUU1SCxDQUFGLENBQU4sQ0FBVyxJQUFJOEQsSUFBRW9FLEVBQUV1VyxhQUFGLEVBQU4sQ0FBd0IsSUFBR2pjLE1BQUlwRCxTQUFQLEVBQWlCO0FBQUNvRCxVQUFFLGNBQUY7QUFBaUIsWUFBTyxLQUFLdXdCLGlDQUFMLENBQXVDLElBQXZDLEVBQTRDanZCLENBQTVDLEVBQThDNEQsQ0FBOUMsRUFBZ0RsRixDQUFoRCxFQUFrRHBDLENBQWxELENBQVA7QUFBNEQsT0FBRzRILEtBQUcsVUFBSCxJQUFlOUQsTUFBSTlFLFNBQW5CLElBQThCWSxhQUFha0UsQ0FBM0MsSUFBK0N3RCxNQUFJdEksU0FBSixJQUFlc0ksS0FBRyxJQUFqRSxJQUF3RTFILEVBQUV1WSxTQUFGLElBQWEsSUFBeEYsRUFBNkY7QUFBQyxRQUFJclEsSUFBRW5FLEVBQUUvRCxDQUFGLENBQU4sQ0FBVyxJQUFJOEQsSUFBRW9FLEVBQUV1VyxhQUFGLEVBQU4sQ0FBd0IsSUFBR2pjLE1BQUlwRCxTQUFQLEVBQWlCO0FBQUNvRCxVQUFFLGNBQUY7QUFBaUIsWUFBTyxLQUFLdXdCLGlDQUFMLENBQXVDLEtBQXZDLEVBQTZDanZCLENBQTdDLEVBQStDNEQsQ0FBL0MsRUFBaURsRixDQUFqRCxFQUFtRHBDLENBQW5ELENBQVA7QUFBNkQsT0FBSVcsSUFBRSxTQUFGQSxDQUFFLENBQVN1RixDQUFULEVBQVd0RSxDQUFYLEVBQWE7QUFBQyxRQUFJd0UsSUFBRXRHLEVBQUVvRyxDQUFGLEVBQUl0RSxDQUFKLENBQU4sQ0FBYSxJQUFJdUUsSUFBRSxJQUFJaEcsQ0FBSixDQUFNLEVBQUNnMUIsS0FBSSxDQUFDLEVBQUNBLEtBQUksQ0FBQyxFQUFDclQsS0FBSSxFQUFDQyxNQUFLLFlBQU4sRUFBTCxFQUFELEVBQTJCLEVBQUNvVCxLQUFJLENBQUMsRUFBQ0EsS0FBSSxDQUFDLEVBQUNyVCxLQUFJLEVBQUNDLE1BQUssYUFBTixFQUFMLEVBQUQsRUFBNEIsRUFBQ29ULEtBQUksQ0FBQyxFQUFDQyxRQUFPLEVBQUMzVixLQUFJclosRUFBRTRzQixVQUFQLEVBQVIsRUFBRCxFQUE2QixFQUFDLE9BQU01c0IsRUFBRTZzQixVQUFULEVBQTdCLENBQUwsRUFBNUIsQ0FBTCxFQUFELEVBQTZGLEVBQUNrQyxLQUFJLENBQUMsRUFBQ3JULEtBQUksRUFBQ0MsTUFBSyxjQUFOLEVBQUwsRUFBRCxFQUE2QixFQUFDcVQsUUFBTyxFQUFDM1YsS0FBSXJaLEVBQUUyc0Isa0JBQVAsRUFBUixFQUE3QixDQUFMLEVBQTdGLENBQUwsRUFBM0IsQ0FBTCxFQUFELEVBQStNLEVBQUNxQyxRQUFPLEVBQUMzVixLQUFJclosRUFBRXlyQixVQUFQLEVBQVIsRUFBL00sQ0FBTCxFQUFOLENBQU4sQ0FBK1AsT0FBTzFyQixFQUFFa1ksYUFBRixFQUFQO0FBQXlCLEdBQXpULENBQTBULElBQUl2ZSxJQUFFLFNBQUZBLENBQUUsQ0FBUytHLENBQVQsRUFBV0UsQ0FBWCxFQUFhO0FBQUMsUUFBSVosSUFBRSxHQUFOLENBQVUsSUFBSVEsSUFBRXJHLFNBQVNDLEdBQVQsQ0FBYWMsU0FBYixDQUF1QmEsTUFBdkIsQ0FBOEIsQ0FBOUIsQ0FBTixDQUF1QyxJQUFJdUUsSUFBRSxjQUFOLENBQXFCLElBQUk3RSxJQUFFdEIsU0FBU0MsR0FBVCxDQUFhYyxTQUFiLENBQXVCYSxNQUF2QixDQUE4QixDQUE5QixDQUFOLENBQXVDLElBQUlrRSxJQUFFOUYsU0FBUzZ5QixNQUFULENBQWdCcHNCLENBQWhCLEVBQWtCSixDQUFsQixFQUFvQixFQUFDeXNCLFNBQVEsTUFBSSxFQUFiLEVBQWdCQyxZQUFXbHRCLENBQTNCLEVBQXBCLENBQU4sQ0FBeUQsSUFBSUUsSUFBRS9GLFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJFLEtBQWpCLENBQXVCcUUsQ0FBdkIsQ0FBTixDQUFnQyxJQUFJTixJQUFFakcsU0FBU214QixTQUFULENBQW1CaFosT0FBbkIsQ0FBMkJwUyxDQUEzQixFQUE2QkQsQ0FBN0IsRUFBK0IsRUFBQ3dyQixJQUFHaHdCLENBQUosRUFBL0IsSUFBdUMsRUFBN0MsQ0FBZ0QsSUFBSXNFLElBQUUsRUFBTixDQUFTQSxFQUFFMnJCLFVBQUYsR0FBYXRyQixDQUFiLENBQWVMLEVBQUU4c0IsVUFBRixHQUFhMXlCLFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJkLFNBQWpCLENBQTJCbUYsQ0FBM0IsQ0FBYixDQUEyQ1QsRUFBRStzQixVQUFGLEdBQWE5c0IsQ0FBYixDQUFlRCxFQUFFNHNCLG1CQUFGLEdBQXNCcnNCLENBQXRCLENBQXdCUCxFQUFFNnNCLGtCQUFGLEdBQXFCenlCLFNBQVMrQixHQUFULENBQWFDLEdBQWIsQ0FBaUJkLFNBQWpCLENBQTJCSSxDQUEzQixDQUFyQixDQUFtRCxPQUFPc0UsQ0FBUDtBQUFTLEdBQWhiLENBQWliLElBQUcwQixLQUFHLFVBQUgsSUFBZW5ILEtBQUd6QixTQUFsQixJQUE2QlksYUFBYWEsQ0FBMUMsSUFBNkNiLEVBQUV1WSxTQUFGLElBQWEsSUFBN0QsRUFBa0U7QUFBQyxRQUFJaFosSUFBRWtJLEVBQUV6SCxDQUFGLENBQU4sQ0FBVyxJQUFJTCxJQUFFSixFQUFFa2YsYUFBRixFQUFOLENBQXdCLElBQUl2VyxJQUFFM0gsRUFBRSxFQUFDZzFCLEtBQUksQ0FBQyxFQUFDLE9BQU0sQ0FBUCxFQUFELEVBQVcsRUFBQ0EsS0FBSSxDQUFDLEVBQUNyVCxLQUFJLEVBQUNDLE1BQUssZUFBTixFQUFMLEVBQUQsRUFBOEIsRUFBQyxRQUFPLElBQVIsRUFBOUIsQ0FBTCxFQUFYLEVBQThELEVBQUNxVCxRQUFPLEVBQUMzVixLQUFJbGdCLENBQUwsRUFBUixFQUE5RCxDQUFMLEVBQUYsQ0FBTixDQUErRixJQUFJbUUsSUFBRW9FLEVBQUV1VyxhQUFGLEVBQU4sQ0FBd0IsSUFBRy9XLE1BQUl0SSxTQUFKLElBQWVzSSxLQUFHLElBQXJCLEVBQTBCO0FBQUMsYUFBT3NWLFNBQVNsWixDQUFULEVBQVcsYUFBWCxDQUFQO0FBQWlDLEtBQTVELE1BQWdFO0FBQUMsVUFBSWhDLElBQUVmLEVBQUUrQyxDQUFGLEVBQUk0RCxDQUFKLENBQU4sQ0FBYSxPQUFPc1YsU0FBU2xiLENBQVQsRUFBVyx1QkFBWCxDQUFQO0FBQTJDO0FBQUMsT0FBR2tHLEtBQUcsVUFBSCxJQUFlOUYsTUFBSTlDLFNBQW5CLElBQThCWSxhQUFha0MsQ0FBM0MsSUFBOENsQyxFQUFFdVksU0FBRixJQUFhLElBQTlELEVBQW1FO0FBQUMsUUFBSWhaLElBQUUsSUFBSWdCLENBQUosQ0FBTSxFQUFDZzFCLEtBQUksQ0FBQyxFQUFDLE9BQU0sQ0FBUCxFQUFELEVBQVcsRUFBQ0MsUUFBTyxFQUFDM1YsS0FBSTdmLEVBQUU2dkIsU0FBUCxFQUFSLEVBQVgsRUFBc0MsRUFBQ3hSLEtBQUksQ0FBQyxJQUFELEVBQU0sSUFBTixFQUFXLEVBQUNvWCxRQUFPLEVBQUM1VixLQUFJLE9BQUs3ZixFQUFFOHZCLFNBQVosRUFBUixFQUFYLENBQUwsRUFBdEMsQ0FBTCxFQUFOLENBQU4sQ0FBNEcsSUFBSW53QixJQUFFSixFQUFFa2YsYUFBRixFQUFOLENBQXdCLElBQUl2VyxJQUFFM0gsRUFBRSxFQUFDZzFCLEtBQUksQ0FBQyxFQUFDLE9BQU0sQ0FBUCxFQUFELEVBQVcsRUFBQ0EsS0FBSSxDQUFDLEVBQUNyVCxLQUFJLEVBQUNDLE1BQUssYUFBTixFQUFMLEVBQUQsRUFBNEIsRUFBQ0QsS0FBSSxFQUFDQyxNQUFLbmlCLEVBQUUrdkIsU0FBUixFQUFMLEVBQTVCLENBQUwsRUFBWCxFQUF1RSxFQUFDeUYsUUFBTyxFQUFDM1YsS0FBSWxnQixDQUFMLEVBQVIsRUFBdkUsQ0FBTCxFQUFGLENBQU4sQ0FBd0csSUFBSW1FLElBQUVvRSxFQUFFdVcsYUFBRixFQUFOLENBQXdCLElBQUcvVyxNQUFJdEksU0FBSixJQUFlc0ksS0FBRyxJQUFyQixFQUEwQjtBQUFDLGFBQU9zVixTQUFTbFosQ0FBVCxFQUFXLGFBQVgsQ0FBUDtBQUFpQyxLQUE1RCxNQUFnRTtBQUFDLFVBQUloQyxJQUFFZixFQUFFK0MsQ0FBRixFQUFJNEQsQ0FBSixDQUFOLENBQWEsT0FBT3NWLFNBQVNsYixDQUFULEVBQVcsdUJBQVgsQ0FBUDtBQUEyQztBQUFDLE9BQUdrRyxLQUFHLFVBQUgsSUFBZTlELE1BQUk5RSxTQUFuQixJQUE4QlksYUFBYWtFLENBQTNDLElBQThDbEUsRUFBRXVZLFNBQUYsSUFBYSxJQUE5RCxFQUFtRTtBQUFDLFFBQUloWixJQUFFLElBQUlFLENBQUosQ0FBTSxFQUFDNmhCLFFBQU90aEIsRUFBRStELENBQVYsRUFBTixDQUFOLENBQTBCLElBQUlwRSxJQUFFSixFQUFFa2YsYUFBRixFQUFOLENBQXdCLElBQUl2VyxJQUFFM0gsRUFBRSxFQUFDZzFCLEtBQUksQ0FBQyxFQUFDLE9BQU0sQ0FBUCxFQUFELEVBQVcsRUFBQ0EsS0FBSSxDQUFDLEVBQUNyVCxLQUFJLEVBQUNDLE1BQUssS0FBTixFQUFMLEVBQUQsRUFBb0IsRUFBQ29ULEtBQUksQ0FBQyxFQUFDLE9BQU0sRUFBQ2pVLFFBQU90aEIsRUFBRWMsQ0FBVixFQUFQLEVBQUQsRUFBc0IsRUFBQyxPQUFNLEVBQUN3Z0IsUUFBT3RoQixFQUFFK0IsQ0FBVixFQUFQLEVBQXRCLEVBQTJDLEVBQUMsT0FBTSxFQUFDdWYsUUFBT3RoQixFQUFFVCxDQUFWLEVBQVAsRUFBM0MsQ0FBTCxFQUFwQixDQUFMLEVBQVgsRUFBNkcsRUFBQ2kyQixRQUFPLEVBQUMzVixLQUFJbGdCLENBQUwsRUFBUixFQUE3RyxDQUFMLEVBQUYsQ0FBTixDQUE4SSxJQUFJbUUsSUFBRW9FLEVBQUV1VyxhQUFGLEVBQU4sQ0FBd0IsSUFBRy9XLE1BQUl0SSxTQUFKLElBQWVzSSxLQUFHLElBQXJCLEVBQTBCO0FBQUMsYUFBT3NWLFNBQVNsWixDQUFULEVBQVcsYUFBWCxDQUFQO0FBQWlDLEtBQTVELE1BQWdFO0FBQUMsVUFBSWhDLElBQUVmLEVBQUUrQyxDQUFGLEVBQUk0RCxDQUFKLENBQU4sQ0FBYSxPQUFPc1YsU0FBU2xiLENBQVQsRUFBVyx1QkFBWCxDQUFQO0FBQTJDO0FBQUMsU0FBSywrQkFBTDtBQUFxQyxDQUF2bkksQ0FBd25JMHJCLFFBQVFrSSxnQkFBUixHQUF5QixVQUFTMTFCLENBQVQsRUFBVztBQUFDLE1BQUlTLElBQUVpbEIsU0FBUzFsQixDQUFULEVBQVcscUJBQVgsQ0FBTixDQUF3QyxJQUFJRSxJQUFFc3RCLFFBQVFtSSxnQkFBUixDQUF5QmwxQixDQUF6QixDQUFOLENBQWtDLE9BQU9QLENBQVA7QUFBUyxDQUF4SCxDQUF5SHN0QixRQUFRbUksZ0JBQVIsR0FBeUIsVUFBU2wxQixDQUFULEVBQVc7QUFBQyxNQUFJUCxJQUFFc3RCLFFBQVFvSSxXQUFSLENBQW9CbjFCLENBQXBCLENBQU4sQ0FBNkIsSUFBSVQsSUFBRXd0QixRQUFRQyxNQUFSLENBQWV2dEIsRUFBRTIxQixXQUFqQixFQUE2QixJQUE3QixFQUFrQyxVQUFsQyxDQUFOLENBQW9ELE9BQU83MUIsQ0FBUDtBQUFTLENBQS9ILENBQWdJd3RCLFFBQVFvSSxXQUFSLEdBQW9CLFVBQVNqMkIsQ0FBVCxFQUFXO0FBQUMsTUFBSVUsSUFBRXdpQixPQUFOLENBQWMsSUFBSXBqQixJQUFFWSxFQUFFZ2pCLFdBQVIsQ0FBb0IsSUFBSW5qQixJQUFFRyxFQUFFOGlCLE1BQVIsQ0FBZSxJQUFJbmpCLElBQUUsRUFBTixDQUFTLElBQUlULElBQUVJLENBQU4sQ0FBUSxJQUFHSixFQUFFdUQsTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLEtBQWUsSUFBbEIsRUFBdUI7QUFBQyxVQUFLLHlCQUFMO0FBQStCLE9BQUk3QyxJQUFFUixFQUFFRixDQUFGLEVBQUksQ0FBSixDQUFOLENBQWEsSUFBR1UsRUFBRUssTUFBRixHQUFTLENBQVosRUFBYztBQUFDLFVBQUsseUJBQUw7QUFBK0IsT0FBR2YsRUFBRXVELE1BQUYsQ0FBUzdDLEVBQUUsQ0FBRixDQUFULEVBQWMsQ0FBZCxLQUFrQixJQUFyQixFQUEwQjtBQUFDLFVBQUsseUJBQUw7QUFBK0IsT0FBSVEsSUFBRWhCLEVBQUVGLENBQUYsRUFBSVUsRUFBRSxDQUFGLENBQUosQ0FBTixDQUFnQixJQUFHUSxFQUFFSCxNQUFGLEdBQVMsQ0FBWixFQUFjO0FBQUMsVUFBSyx5QkFBTDtBQUErQixLQUFFdTFCLFdBQUYsR0FBYzMxQixFQUFFWCxDQUFGLEVBQUlrQixFQUFFLENBQUYsQ0FBSixDQUFkLENBQXdCLE9BQU9ULENBQVA7QUFBUyxDQUE3VyxDQUE4V3d0QixRQUFRc0ksYUFBUixHQUFzQixVQUFTbjJCLENBQVQsRUFBVztBQUFDLE1BQUlLLElBQUUsRUFBTixDQUFTLElBQUdMLGFBQWFzWSxNQUFiLElBQXFCdFksRUFBRTRZLFNBQTFCLEVBQW9DO0FBQUN2WSxNQUFFczBCLEdBQUYsR0FBTSxLQUFOLENBQVl0MEIsRUFBRWEsQ0FBRixHQUFJZ2tCLFVBQVVsbEIsRUFBRWtCLENBQUYsQ0FBSVUsUUFBSixDQUFhLEVBQWIsQ0FBVixDQUFKLENBQWdDdkIsRUFBRUMsQ0FBRixHQUFJNGtCLFVBQVVsbEIsRUFBRU0sQ0FBRixDQUFJc0IsUUFBSixDQUFhLEVBQWIsQ0FBVixDQUFKLENBQWdDdkIsRUFBRUwsQ0FBRixHQUFJa2xCLFVBQVVsbEIsRUFBRUEsQ0FBRixDQUFJNEIsUUFBSixDQUFhLEVBQWIsQ0FBVixDQUFKLENBQWdDdkIsRUFBRWMsQ0FBRixHQUFJK2pCLFVBQVVsbEIsRUFBRW1CLENBQUYsQ0FBSVMsUUFBSixDQUFhLEVBQWIsQ0FBVixDQUFKLENBQWdDdkIsRUFBRStCLENBQUYsR0FBSThpQixVQUFVbGxCLEVBQUVvQyxDQUFGLENBQUlSLFFBQUosQ0FBYSxFQUFiLENBQVYsQ0FBSixDQUFnQ3ZCLEVBQUV1MEIsRUFBRixHQUFLMVAsVUFBVWxsQixFQUFFdVksSUFBRixDQUFPM1csUUFBUCxDQUFnQixFQUFoQixDQUFWLENBQUwsQ0FBb0N2QixFQUFFdzBCLEVBQUYsR0FBSzNQLFVBQVVsbEIsRUFBRXdZLElBQUYsQ0FBTzVXLFFBQVAsQ0FBZ0IsRUFBaEIsQ0FBVixDQUFMLENBQW9DdkIsRUFBRTAwQixFQUFGLEdBQUs3UCxVQUFVbGxCLEVBQUV5WSxLQUFGLENBQVE3VyxRQUFSLENBQWlCLEVBQWpCLENBQVYsQ0FBTCxDQUFxQyxPQUFPdkIsQ0FBUDtBQUFTLEdBQXZVLE1BQTJVO0FBQUMsUUFBR0wsYUFBYXNZLE1BQWIsSUFBcUJ0WSxFQUFFMlksUUFBMUIsRUFBbUM7QUFBQ3RZLFFBQUVzMEIsR0FBRixHQUFNLEtBQU4sQ0FBWXQwQixFQUFFYSxDQUFGLEdBQUlna0IsVUFBVWxsQixFQUFFa0IsQ0FBRixDQUFJVSxRQUFKLENBQWEsRUFBYixDQUFWLENBQUosQ0FBZ0N2QixFQUFFQyxDQUFGLEdBQUk0a0IsVUFBVWxsQixFQUFFTSxDQUFGLENBQUlzQixRQUFKLENBQWEsRUFBYixDQUFWLENBQUosQ0FBZ0MsT0FBT3ZCLENBQVA7QUFBUyxLQUF6SCxNQUE2SDtBQUFDLFVBQUdMLGFBQWE4WCxLQUFLZixNQUFMLENBQVl1WCxLQUF6QixJQUFnQ3R1QixFQUFFNFksU0FBckMsRUFBK0M7QUFBQyxZQUFJOVgsSUFBRWQsRUFBRXl3QixzQkFBRixFQUFOLENBQWlDLElBQUczdkIsTUFBSSxPQUFKLElBQWFBLE1BQUksT0FBcEIsRUFBNEI7QUFBQyxnQkFBSyxxQ0FBbUNBLENBQXhDO0FBQTBDLGFBQUlQLElBQUVQLEVBQUV1d0IsaUJBQUYsRUFBTixDQUE0Qmx3QixFQUFFczBCLEdBQUYsR0FBTSxJQUFOLENBQVd0MEIsRUFBRTYwQixHQUFGLEdBQU1wMEIsQ0FBTixDQUFRVCxFQUFFK0QsQ0FBRixHQUFJOGdCLFVBQVUza0IsRUFBRTZELENBQVosQ0FBSixDQUFtQi9ELEVBQUUwSCxDQUFGLEdBQUltZCxVQUFVM2tCLEVBQUV3SCxDQUFaLENBQUosQ0FBbUIxSCxFQUFFTCxDQUFGLEdBQUlrbEIsVUFBVWxsQixFQUFFa3dCLFNBQVosQ0FBSixDQUEyQixPQUFPN3ZCLENBQVA7QUFBUyxPQUFqUixNQUFxUjtBQUFDLFlBQUdMLGFBQWE4WCxLQUFLZixNQUFMLENBQVl1WCxLQUF6QixJQUFnQ3R1QixFQUFFMlksUUFBckMsRUFBOEM7QUFBQyxjQUFJN1gsSUFBRWQsRUFBRXl3QixzQkFBRixFQUFOLENBQWlDLElBQUczdkIsTUFBSSxPQUFKLElBQWFBLE1BQUksT0FBcEIsRUFBNEI7QUFBQyxrQkFBSyxxQ0FBbUNBLENBQXhDO0FBQTBDLGVBQUlQLElBQUVQLEVBQUV1d0IsaUJBQUYsRUFBTixDQUE0Qmx3QixFQUFFczBCLEdBQUYsR0FBTSxJQUFOLENBQVd0MEIsRUFBRTYwQixHQUFGLEdBQU1wMEIsQ0FBTixDQUFRVCxFQUFFK0QsQ0FBRixHQUFJOGdCLFVBQVUza0IsRUFBRTZELENBQVosQ0FBSixDQUFtQi9ELEVBQUUwSCxDQUFGLEdBQUltZCxVQUFVM2tCLEVBQUV3SCxDQUFaLENBQUosQ0FBbUIsT0FBTzFILENBQVA7QUFBUztBQUFDO0FBQUM7QUFBQyxTQUFLLDBCQUFMO0FBQWdDLENBQW5pQztBQUMxb2pCaVksT0FBTzhkLDRCQUFQLEdBQW9DLFVBQVN0MUIsQ0FBVCxFQUFXO0FBQUMsU0FBT29pQixRQUFRUSxXQUFSLENBQW9CNWlCLENBQXBCLEVBQXNCLENBQXRCLENBQVA7QUFBZ0MsQ0FBaEYsQ0FBaUZ3WCxPQUFPK2QsaUNBQVAsR0FBeUMsVUFBU3YyQixDQUFULEVBQVc7QUFBQyxNQUFJb0IsSUFBRWdpQixPQUFOLENBQWMsSUFBSXhpQixJQUFFUSxFQUFFcWlCLElBQVIsQ0FBYSxJQUFJMWlCLElBQUV5WCxPQUFPOGQsNEJBQVAsQ0FBb0N0MkIsQ0FBcEMsQ0FBTixDQUE2QyxJQUFJUSxJQUFFSSxFQUFFWixDQUFGLEVBQUllLEVBQUUsQ0FBRixDQUFKLENBQU4sQ0FBZ0IsSUFBSUosSUFBRUMsRUFBRVosQ0FBRixFQUFJZSxFQUFFLENBQUYsQ0FBSixDQUFOLENBQWdCLElBQUlSLElBQUVLLEVBQUVaLENBQUYsRUFBSWUsRUFBRSxDQUFGLENBQUosQ0FBTixDQUFnQixJQUFJTixJQUFFRyxFQUFFWixDQUFGLEVBQUllLEVBQUUsQ0FBRixDQUFKLENBQU4sQ0FBZ0IsSUFBSWhCLElBQUVhLEVBQUVaLENBQUYsRUFBSWUsRUFBRSxDQUFGLENBQUosQ0FBTixDQUFnQixJQUFJakIsSUFBRWMsRUFBRVosQ0FBRixFQUFJZSxFQUFFLENBQUYsQ0FBSixDQUFOLENBQWdCLElBQUlnQyxJQUFFbkMsRUFBRVosQ0FBRixFQUFJZSxFQUFFLENBQUYsQ0FBSixDQUFOLENBQWdCLElBQUlELElBQUVGLEVBQUVaLENBQUYsRUFBSWUsRUFBRSxDQUFGLENBQUosQ0FBTixDQUFnQixJQUFJYixJQUFFVSxFQUFFWixDQUFGLEVBQUllLEVBQUUsQ0FBRixDQUFKLENBQU4sQ0FBZ0IsSUFBSUEsSUFBRSxJQUFJd0ksS0FBSixFQUFOLENBQWtCeEksRUFBRStCLElBQUYsQ0FBT3RDLENBQVAsRUFBU0csQ0FBVCxFQUFXSixDQUFYLEVBQWFFLENBQWIsRUFBZVYsQ0FBZixFQUFpQkQsQ0FBakIsRUFBbUJpRCxDQUFuQixFQUFxQmpDLENBQXJCLEVBQXVCWixDQUF2QixFQUEwQixPQUFPYSxDQUFQO0FBQVMsQ0FBbFUsQ0FBbVV5WCxPQUFPclksU0FBUCxDQUFpQnEyQiwyQkFBakIsR0FBNkMsVUFBU3QyQixDQUFULEVBQVc7QUFBQyxNQUFJTyxJQUFFd2xCLFNBQVMvbEIsQ0FBVCxDQUFOLENBQWtCLElBQUlLLElBQUVpWSxPQUFPK2QsaUNBQVAsQ0FBeUM5MUIsQ0FBekMsQ0FBTixDQUFrRCxLQUFLeTBCLFlBQUwsQ0FBa0IzMEIsRUFBRSxDQUFGLENBQWxCLEVBQXVCQSxFQUFFLENBQUYsQ0FBdkIsRUFBNEJBLEVBQUUsQ0FBRixDQUE1QixFQUFpQ0EsRUFBRSxDQUFGLENBQWpDLEVBQXNDQSxFQUFFLENBQUYsQ0FBdEMsRUFBMkNBLEVBQUUsQ0FBRixDQUEzQyxFQUFnREEsRUFBRSxDQUFGLENBQWhELEVBQXFEQSxFQUFFLENBQUYsQ0FBckQ7QUFBMkQsQ0FBeEwsQ0FBeUxpWSxPQUFPclksU0FBUCxDQUFpQm94QixrQkFBakIsR0FBb0MsVUFBUzl3QixDQUFULEVBQVc7QUFBQyxNQUFJRixJQUFFaVksT0FBTytkLGlDQUFQLENBQXlDOTFCLENBQXpDLENBQU4sQ0FBa0QsS0FBS3kwQixZQUFMLENBQWtCMzBCLEVBQUUsQ0FBRixDQUFsQixFQUF1QkEsRUFBRSxDQUFGLENBQXZCLEVBQTRCQSxFQUFFLENBQUYsQ0FBNUIsRUFBaUNBLEVBQUUsQ0FBRixDQUFqQyxFQUFzQ0EsRUFBRSxDQUFGLENBQXRDLEVBQTJDQSxFQUFFLENBQUYsQ0FBM0MsRUFBZ0RBLEVBQUUsQ0FBRixDQUFoRCxFQUFxREEsRUFBRSxDQUFGLENBQXJEO0FBQTJELENBQTdKLENBQThKaVksT0FBT3JZLFNBQVAsQ0FBaUJzeEIsa0JBQWpCLEdBQW9DLFVBQVNqeEIsQ0FBVCxFQUFXO0FBQUMsTUFBSUMsQ0FBSixFQUFNRSxDQUFOLEVBQVFHLENBQVIsRUFBVVAsQ0FBVixFQUFZUyxDQUFaLEVBQWNoQixDQUFkLEVBQWdCRSxDQUFoQixFQUFrQmEsQ0FBbEIsQ0FBb0IsSUFBSWdDLElBQUVxZ0IsT0FBTixDQUFjLElBQUl0akIsSUFBRWlELEVBQUVpaEIsVUFBUixDQUFtQixJQUFHamhCLEVBQUVxaEIsU0FBRixDQUFZNWpCLENBQVosTUFBaUIsS0FBcEIsRUFBMEI7QUFBQyxVQUFLLHNCQUFMO0FBQTRCLE9BQUc7QUFBQ0MsUUFBRVgsRUFBRVUsQ0FBRixFQUFJLENBQUosRUFBTSxDQUFDLENBQUQsRUFBRyxDQUFILEVBQUssQ0FBTCxDQUFOLEVBQWMsSUFBZCxDQUFGLENBQXNCRyxJQUFFYixFQUFFVSxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxFQUFHLENBQUgsRUFBSyxDQUFMLENBQU4sRUFBYyxJQUFkLENBQUYsQ0FBc0JNLElBQUVoQixFQUFFVSxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxFQUFHLENBQUgsRUFBSyxDQUFMLENBQU4sRUFBYyxJQUFkLENBQUYsQ0FBc0JELElBQUVULEVBQUVVLENBQUYsRUFBSSxDQUFKLEVBQU0sQ0FBQyxDQUFELEVBQUcsQ0FBSCxFQUFLLENBQUwsQ0FBTixFQUFjLElBQWQsQ0FBRixDQUFzQlEsSUFBRWxCLEVBQUVVLENBQUYsRUFBSSxDQUFKLEVBQU0sQ0FBQyxDQUFELEVBQUcsQ0FBSCxFQUFLLENBQUwsQ0FBTixFQUFjLElBQWQsQ0FBRixDQUFzQlIsSUFBRUYsRUFBRVUsQ0FBRixFQUFJLENBQUosRUFBTSxDQUFDLENBQUQsRUFBRyxDQUFILEVBQUssQ0FBTCxDQUFOLEVBQWMsSUFBZCxDQUFGLENBQXNCTixJQUFFSixFQUFFVSxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxFQUFHLENBQUgsRUFBSyxDQUFMLENBQU4sRUFBYyxJQUFkLENBQUYsQ0FBc0JPLElBQUVqQixFQUFFVSxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxFQUFHLENBQUgsRUFBSyxDQUFMLENBQU4sRUFBYyxJQUFkLENBQUY7QUFBc0IsR0FBcEwsQ0FBb0wsT0FBTUksQ0FBTixFQUFRO0FBQUMsVUFBSyx3Q0FBTDtBQUE4QyxRQUFLczBCLFlBQUwsQ0FBa0J6MEIsQ0FBbEIsRUFBb0JFLENBQXBCLEVBQXNCRyxDQUF0QixFQUF3QlAsQ0FBeEIsRUFBMEJTLENBQTFCLEVBQTRCaEIsQ0FBNUIsRUFBOEJFLENBQTlCLEVBQWdDYSxDQUFoQztBQUFtQyxDQUExYSxDQUEyYXlYLE9BQU9yWSxTQUFQLENBQWlCczJCLGtCQUFqQixHQUFvQyxVQUFTaDJCLENBQVQsRUFBVztBQUFDLE1BQUlELElBQUU0aUIsT0FBTixDQUFjLElBQUk3aUIsSUFBRUMsRUFBRWlqQixJQUFSLENBQWEsSUFBR2pqQixFQUFFNGpCLFNBQUYsQ0FBWTNqQixDQUFaLE1BQWlCLEtBQXBCLEVBQTBCO0FBQUMsVUFBSyxnQ0FBTDtBQUFzQyxPQUFJTyxJQUFFUixFQUFFb2pCLFdBQUYsQ0FBY25qQixDQUFkLEVBQWdCLENBQWhCLENBQU4sQ0FBeUIsSUFBR08sRUFBRUgsTUFBRixLQUFXLENBQVgsSUFBY0osRUFBRTRDLE1BQUYsQ0FBU3JDLEVBQUUsQ0FBRixDQUFULEVBQWMsQ0FBZCxNQUFtQixJQUFqQyxJQUF1Q1AsRUFBRTRDLE1BQUYsQ0FBU3JDLEVBQUUsQ0FBRixDQUFULEVBQWMsQ0FBZCxNQUFtQixJQUE3RCxFQUFrRTtBQUFDLFVBQUssaUNBQUw7QUFBdUMsT0FBSWhCLElBQUVPLEVBQUVFLENBQUYsRUFBSU8sRUFBRSxDQUFGLENBQUosQ0FBTixDQUFnQixJQUFJZCxJQUFFSyxFQUFFRSxDQUFGLEVBQUlPLEVBQUUsQ0FBRixDQUFKLENBQU4sQ0FBZ0IsS0FBS21ZLFNBQUwsQ0FBZW5aLENBQWYsRUFBaUJFLENBQWpCO0FBQW9CLENBQW5VLENBQW9Vc1ksT0FBT3JZLFNBQVAsQ0FBaUJ1eEIsa0JBQWpCLEdBQW9DLFVBQVNueEIsQ0FBVCxFQUFXO0FBQUMsTUFBSUUsSUFBRTJpQixPQUFOLENBQWMsSUFBRzNpQixFQUFFMmpCLFNBQUYsQ0FBWTdqQixDQUFaLE1BQWlCLEtBQXBCLEVBQTBCO0FBQUMsVUFBSyxzQkFBTDtBQUE0QixPQUFHRSxFQUFFc2pCLFlBQUYsQ0FBZXhqQixDQUFmLEVBQWlCLENBQWpCLEVBQW1CLENBQUMsQ0FBRCxFQUFHLENBQUgsQ0FBbkIsTUFBNEIsd0JBQS9CLEVBQXdEO0FBQUMsVUFBSywwQkFBTDtBQUFnQyxPQUFJUyxJQUFFUCxFQUFFc2pCLFlBQUYsQ0FBZXhqQixDQUFmLEVBQWlCLENBQWpCLEVBQW1CLENBQUMsQ0FBRCxFQUFHLENBQUgsQ0FBbkIsQ0FBTixDQUFnQyxLQUFLazJCLGtCQUFMLENBQXdCejFCLENBQXhCO0FBQTJCLENBQXpRLENBQTBRd1gsT0FBT3JZLFNBQVAsQ0FBaUJ3eEIsaUJBQWpCLEdBQW1DLFVBQVNweEIsQ0FBVCxFQUFXTCxDQUFYLEVBQWE7QUFBQyxNQUFJYyxDQUFKLEVBQU1QLENBQU4sQ0FBUU8sSUFBRSxJQUFJcTBCLElBQUosRUFBRixDQUFhcjBCLEVBQUUwMUIsV0FBRixDQUFjbjJCLENBQWQsRUFBaUJFLElBQUVPLEVBQUUyMUIsZUFBRixFQUFGLENBQXNCLEtBQUtqRixrQkFBTCxDQUF3Qmp4QixDQUF4QjtBQUEyQixDQUF4STtBQUNwdUQsSUFBSW0yQixpQkFBZSxJQUFJOVosTUFBSixDQUFXLEVBQVgsQ0FBbkIsQ0FBa0M4WixlQUFlQyxPQUFmLENBQXVCLFdBQXZCLEVBQW1DLElBQW5DLEVBQXlDLFNBQVNDLHdDQUFULENBQWtENTJCLENBQWxELEVBQW9ETSxDQUFwRCxFQUFzRFEsQ0FBdEQsRUFBd0Q7QUFBQyxNQUFJVCxJQUFFLFNBQUZBLENBQUUsQ0FBU1AsQ0FBVCxFQUFXO0FBQUMsV0FBT2dZLEtBQUtmLE1BQUwsQ0FBWWlCLElBQVosQ0FBaUJpVCxVQUFqQixDQUE0Qm5yQixDQUE1QixFQUE4QmdCLENBQTlCLENBQVA7QUFBd0MsR0FBMUQsQ0FBMkQsSUFBSVAsSUFBRUYsRUFBRUwsQ0FBRixDQUFOLENBQVcsT0FBTzhYLEtBQUtmLE1BQUwsQ0FBWWlCLElBQVosQ0FBaUJnVCxzQkFBakIsQ0FBd0N6cUIsQ0FBeEMsRUFBMENPLENBQTFDLEVBQTRDUixDQUE1QyxDQUFQO0FBQXNELFVBQVNzdEIsdUJBQVQsQ0FBaUN0dEIsQ0FBakMsRUFBbUNOLENBQW5DLEVBQXFDO0FBQUMsTUFBSU8sSUFBRSxFQUFOLENBQVMsSUFBSU8sSUFBRWQsSUFBRSxDQUFGLEdBQUlNLEVBQUVLLE1BQVosQ0FBbUIsS0FBSSxJQUFJTixJQUFFLENBQVYsRUFBWUEsSUFBRVMsQ0FBZCxFQUFnQlQsR0FBaEIsRUFBb0I7QUFBQ0UsUUFBRUEsSUFBRSxHQUFKO0FBQVEsVUFBT0EsSUFBRUQsQ0FBVDtBQUFXLFFBQU9MLFNBQVAsQ0FBaUJpdUIsSUFBakIsR0FBc0IsVUFBU2x1QixDQUFULEVBQVdjLENBQVgsRUFBYTtBQUFDLE1BQUlULElBQUUsU0FBRkEsQ0FBRSxDQUFTQyxDQUFULEVBQVc7QUFBQyxXQUFPd1gsS0FBS2YsTUFBTCxDQUFZaUIsSUFBWixDQUFpQmlULFVBQWpCLENBQTRCM3FCLENBQTVCLEVBQThCUSxDQUE5QixDQUFQO0FBQXdDLEdBQTFELENBQTJELElBQUlQLElBQUVGLEVBQUVMLENBQUYsQ0FBTixDQUFXLE9BQU8sS0FBSzJ1QixtQkFBTCxDQUF5QnB1QixDQUF6QixFQUEyQk8sQ0FBM0IsQ0FBUDtBQUFxQyxDQUEvSSxDQUFnSndYLE9BQU9yWSxTQUFQLENBQWlCMHVCLG1CQUFqQixHQUFxQyxVQUFTcnVCLENBQVQsRUFBV0MsQ0FBWCxFQUFhO0FBQUMsTUFBSVQsSUFBRWdZLEtBQUtmLE1BQUwsQ0FBWWlCLElBQVosQ0FBaUJnVCxzQkFBakIsQ0FBd0MxcUIsQ0FBeEMsRUFBMENDLENBQTFDLEVBQTRDLEtBQUtXLENBQUwsQ0FBTytOLFNBQVAsRUFBNUMsQ0FBTixDQUFzRSxJQUFJNU8sSUFBRW1YLFlBQVkxWCxDQUFaLEVBQWMsRUFBZCxDQUFOLENBQXdCLElBQUlFLElBQUUsS0FBSzYyQixTQUFMLENBQWV4MkIsQ0FBZixDQUFOLENBQXdCLElBQUlTLElBQUVkLEVBQUU0QixRQUFGLENBQVcsRUFBWCxDQUFOLENBQXFCLE9BQU9nc0Isd0JBQXdCOXNCLENBQXhCLEVBQTBCLEtBQUtJLENBQUwsQ0FBTytOLFNBQVAsRUFBMUIsQ0FBUDtBQUFxRCxDQUFuUCxDQUFvUCxTQUFTNm5CLFlBQVQsQ0FBc0J2MkIsQ0FBdEIsRUFBd0JPLENBQXhCLEVBQTBCUixDQUExQixFQUE0QjtBQUFDLE1BQUlELElBQUUsRUFBTjtBQUFBLE1BQVNMLElBQUUsQ0FBWCxDQUFhLE9BQU1LLEVBQUVNLE1BQUYsR0FBU0csQ0FBZixFQUFpQjtBQUFDVCxTQUFHOFgsVUFBVTdYLEVBQUUrWCxVQUFVOVgsSUFBRThDLE9BQU9DLFlBQVAsQ0FBb0I3QixLQUFwQixDQUEwQjRCLE1BQTFCLEVBQWlDLENBQUMsQ0FBQ3JELElBQUUsVUFBSCxLQUFnQixFQUFqQixFQUFvQixDQUFDQSxJQUFFLFFBQUgsS0FBYyxFQUFsQyxFQUFxQyxDQUFDQSxJQUFFLEtBQUgsS0FBVyxDQUFoRCxFQUFrREEsSUFBRSxHQUFwRCxDQUFqQyxDQUFaLENBQUYsQ0FBVixDQUFILENBQXlIQSxLQUFHLENBQUg7QUFBSyxVQUFPSyxDQUFQO0FBQVMsUUFBT0osU0FBUCxDQUFpQjgyQixPQUFqQixHQUF5QixVQUFTejJCLENBQVQsRUFBV1EsQ0FBWCxFQUFhZCxDQUFiLEVBQWU7QUFBQyxNQUFJTyxJQUFFLFNBQUZBLENBQUUsQ0FBU1QsQ0FBVCxFQUFXO0FBQUMsV0FBT2dZLEtBQUtmLE1BQUwsQ0FBWWlCLElBQVosQ0FBaUJJLE9BQWpCLENBQXlCdFksQ0FBekIsRUFBMkJnQixDQUEzQixDQUFQO0FBQXFDLEdBQXZELENBQXdELElBQUlULElBQUVFLEVBQUU4WCxVQUFVL1gsQ0FBVixDQUFGLENBQU4sQ0FBc0IsSUFBR04sTUFBSVAsU0FBUCxFQUFpQjtBQUFDTyxRQUFFLENBQUMsQ0FBSDtBQUFLLFVBQU8sS0FBS3l1QixzQkFBTCxDQUE0QnB1QixDQUE1QixFQUE4QlMsQ0FBOUIsRUFBZ0NkLENBQWhDLENBQVA7QUFBMEMsQ0FBeEwsQ0FBeUxzWSxPQUFPclksU0FBUCxDQUFpQnd1QixzQkFBakIsR0FBd0MsVUFBUzd0QixDQUFULEVBQVdFLENBQVgsRUFBYUQsQ0FBYixFQUFlO0FBQUMsTUFBSVIsSUFBRThYLFVBQVV2WCxDQUFWLENBQU4sQ0FBbUIsSUFBSWhCLElBQUVTLEVBQUVNLE1BQVIsQ0FBZSxJQUFJa0MsSUFBRSxLQUFLM0IsQ0FBTCxDQUFPK04sU0FBUCxLQUFtQixDQUF6QixDQUEyQixJQUFJMU8sSUFBRWdGLEtBQUsvQyxJQUFMLENBQVVLLElBQUUsQ0FBWixDQUFOLENBQXFCLElBQUk3QyxDQUFKLENBQU0sSUFBSW9CLElBQUUsU0FBRkEsQ0FBRSxDQUFTVixDQUFULEVBQVc7QUFBQyxXQUFPb1gsS0FBS2YsTUFBTCxDQUFZaUIsSUFBWixDQUFpQkksT0FBakIsQ0FBeUIxWCxDQUF6QixFQUEyQkksQ0FBM0IsQ0FBUDtBQUFxQyxHQUF2RCxDQUF3RCxJQUFHRCxNQUFJLENBQUMsQ0FBTCxJQUFRQSxNQUFJcEIsU0FBZixFQUF5QjtBQUFDb0IsUUFBRWpCLENBQUY7QUFBSSxHQUE5QixNQUFrQztBQUFDLFFBQUdpQixNQUFJLENBQUMsQ0FBUixFQUFVO0FBQUNBLFVBQUVOLElBQUVYLENBQUYsR0FBSSxDQUFOO0FBQVEsS0FBbkIsTUFBdUI7QUFBQyxVQUFHaUIsSUFBRSxDQUFDLENBQU4sRUFBUTtBQUFDLGNBQUsscUJBQUw7QUFBMkI7QUFBQztBQUFDLE9BQUdOLElBQUdYLElBQUVpQixDQUFGLEdBQUksQ0FBVixFQUFhO0FBQUMsVUFBSyxlQUFMO0FBQXFCLE9BQUlmLElBQUUsRUFBTixDQUFTLElBQUdlLElBQUUsQ0FBTCxFQUFPO0FBQUNmLFFBQUUsSUFBSXVKLEtBQUosQ0FBVXhJLENBQVYsQ0FBRixDQUFlLElBQUkwVyxZQUFKLEdBQW1CL0csU0FBbkIsQ0FBNkIxUSxDQUE3QixFQUFnQ0EsSUFBRXVELE9BQU9DLFlBQVAsQ0FBb0I3QixLQUFwQixDQUEwQjRCLE1BQTFCLEVBQWlDdkQsQ0FBakMsQ0FBRjtBQUFzQyxPQUFJb0IsSUFBRWlYLFVBQVUvVyxFQUFFaVgsVUFBVSxxQ0FBbUNoWSxDQUFuQyxHQUFxQ1AsQ0FBL0MsQ0FBRixDQUFWLENBQU4sQ0FBc0UsSUFBSVcsSUFBRSxFQUFOLENBQVMsS0FBSVQsSUFBRSxDQUFOLEVBQVFBLElBQUVPLElBQUVNLENBQUYsR0FBSWpCLENBQUosR0FBTSxDQUFoQixFQUFrQkksS0FBRyxDQUFyQixFQUF1QjtBQUFDUyxNQUFFVCxDQUFGLElBQUssQ0FBTDtBQUFPLE9BQUlNLElBQUUrQyxPQUFPQyxZQUFQLENBQW9CN0IsS0FBcEIsQ0FBMEI0QixNQUExQixFQUFpQzVDLENBQWpDLElBQW9DLE1BQXBDLEdBQTJDWCxDQUFqRCxDQUFtRCxJQUFJRCxJQUFFaTNCLGFBQWE1MUIsQ0FBYixFQUFlWixFQUFFSyxNQUFqQixFQUF3QlMsQ0FBeEIsQ0FBTixDQUFpQyxJQUFJZ0IsSUFBRSxFQUFOLENBQVMsS0FBSXBDLElBQUUsQ0FBTixFQUFRQSxJQUFFTSxFQUFFSyxNQUFaLEVBQW1CWCxLQUFHLENBQXRCLEVBQXdCO0FBQUNvQyxNQUFFcEMsQ0FBRixJQUFLTSxFQUFFaUQsVUFBRixDQUFhdkQsQ0FBYixJQUFnQkgsRUFBRTBELFVBQUYsQ0FBYXZELENBQWIsQ0FBckI7QUFBcUMsT0FBSW1CLElBQUcsU0FBUSxJQUFFWixDQUFGLEdBQUlzQyxDQUFiLEdBQWlCLEdBQXZCLENBQTJCVCxFQUFFLENBQUYsS0FBTSxDQUFDakIsQ0FBUCxDQUFTLEtBQUluQixJQUFFLENBQU4sRUFBUUEsSUFBRUosQ0FBVixFQUFZSSxHQUFaLEVBQWdCO0FBQUNvQyxNQUFFUSxJQUFGLENBQU8xQixFQUFFcUMsVUFBRixDQUFhdkQsQ0FBYixDQUFQO0FBQXdCLEtBQUU0QyxJQUFGLENBQU8sR0FBUCxFQUFZLE9BQU9nckIsd0JBQXdCLEtBQUtpSixTQUFMLENBQWUsSUFBSXB0QixVQUFKLENBQWVySCxDQUFmLENBQWYsRUFBa0NSLFFBQWxDLENBQTJDLEVBQTNDLENBQXhCLEVBQXVFLEtBQUtWLENBQUwsQ0FBTytOLFNBQVAsRUFBdkUsQ0FBUDtBQUFrRyxDQUF0M0IsQ0FBdTNCLFNBQVMrbkIsOEJBQVQsQ0FBd0NsMkIsQ0FBeEMsRUFBMENkLENBQTFDLEVBQTRDTyxDQUE1QyxFQUE4QztBQUFDLE1BQUlGLElBQUUsSUFBSWlZLE1BQUosRUFBTixDQUFtQmpZLEVBQUU0WSxTQUFGLENBQVlqWixDQUFaLEVBQWNPLENBQWQsRUFBaUIsSUFBSUQsSUFBRUQsRUFBRTBZLFFBQUYsQ0FBV2pZLENBQVgsQ0FBTixDQUFvQixPQUFPUixDQUFQO0FBQVMsVUFBUzIyQixnQ0FBVCxDQUEwQ24yQixDQUExQyxFQUE0Q1AsQ0FBNUMsRUFBOENGLENBQTlDLEVBQWdEO0FBQUMsTUFBSUMsSUFBRTAyQiwrQkFBK0JsMkIsQ0FBL0IsRUFBaUNQLENBQWpDLEVBQW1DRixDQUFuQyxDQUFOLENBQTRDLElBQUlMLElBQUVNLEVBQUVzQixRQUFGLENBQVcsRUFBWCxFQUFla2IsT0FBZixDQUF1QixRQUF2QixFQUFnQyxFQUFoQyxDQUFOLENBQTBDLE9BQU85YyxDQUFQO0FBQVMsVUFBU2szQiw0Q0FBVCxDQUFzRHAzQixDQUF0RCxFQUF3RDtBQUFDLE9BQUksSUFBSVEsQ0FBUixJQUFhd1gsS0FBS2YsTUFBTCxDQUFZaUIsSUFBWixDQUFpQmlRLGNBQTlCLEVBQTZDO0FBQUMsUUFBSWpvQixJQUFFOFgsS0FBS2YsTUFBTCxDQUFZaUIsSUFBWixDQUFpQmlRLGNBQWpCLENBQWdDM25CLENBQWhDLENBQU4sQ0FBeUMsSUFBSUQsSUFBRUwsRUFBRVcsTUFBUixDQUFlLElBQUdiLEVBQUVtSixTQUFGLENBQVksQ0FBWixFQUFjNUksQ0FBZCxLQUFrQkwsQ0FBckIsRUFBdUI7QUFBQyxVQUFJTyxJQUFFLENBQUNELENBQUQsRUFBR1IsRUFBRW1KLFNBQUYsQ0FBWTVJLENBQVosQ0FBSCxDQUFOLENBQXlCLE9BQU9FLENBQVA7QUFBUztBQUFDLFVBQU0sRUFBTjtBQUFTLFFBQU9OLFNBQVAsQ0FBaUI2dUIsTUFBakIsR0FBd0IsVUFBU2h2QixDQUFULEVBQVdXLENBQVgsRUFBYTtBQUFDQSxNQUFFQSxFQUFFcWMsT0FBRixDQUFVNFosY0FBVixFQUF5QixFQUF6QixDQUFGLENBQStCajJCLElBQUVBLEVBQUVxYyxPQUFGLENBQVUsU0FBVixFQUFvQixFQUFwQixDQUFGLENBQTBCLElBQUl6YyxJQUFFbVgsWUFBWS9XLENBQVosRUFBYyxFQUFkLENBQU4sQ0FBd0IsSUFBR0osRUFBRTRPLFNBQUYsS0FBYyxLQUFLL04sQ0FBTCxDQUFPK04sU0FBUCxFQUFqQixFQUFvQztBQUFDLFdBQU8sQ0FBUDtBQUFTLE9BQUl2TyxJQUFFLEtBQUtxWSxRQUFMLENBQWMxWSxDQUFkLENBQU4sQ0FBdUIsSUFBSUMsSUFBRUksRUFBRWtCLFFBQUYsQ0FBVyxFQUFYLEVBQWVrYixPQUFmLENBQXVCLFFBQXZCLEVBQWdDLEVBQWhDLENBQU4sQ0FBMEMsSUFBSWxkLElBQUVzM0IsNkNBQTZDNTJCLENBQTdDLENBQU4sQ0FBc0QsSUFBR1YsRUFBRWUsTUFBRixJQUFVLENBQWIsRUFBZTtBQUFDLFdBQU8sS0FBUDtBQUFhLE9BQUlYLElBQUVKLEVBQUUsQ0FBRixDQUFOLENBQVcsSUFBSUMsSUFBRUQsRUFBRSxDQUFGLENBQU4sQ0FBVyxJQUFJa0IsSUFBRSxTQUFGQSxDQUFFLENBQVNELENBQVQsRUFBVztBQUFDLFdBQU9pWCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCaVQsVUFBakIsQ0FBNEJwcUIsQ0FBNUIsRUFBOEJiLENBQTlCLENBQVA7QUFBd0MsR0FBMUQsQ0FBMkQsSUFBSU8sSUFBRU8sRUFBRWhCLENBQUYsQ0FBTixDQUFXLE9BQU9ELEtBQUdVLENBQVY7QUFBYSxDQUFsYSxDQUFtYStYLE9BQU9yWSxTQUFQLENBQWlCaXZCLHFCQUFqQixHQUF1QyxVQUFTNXVCLENBQVQsRUFBV1EsQ0FBWCxFQUFhO0FBQUNBLE1BQUVBLEVBQUVnYyxPQUFGLENBQVU0WixjQUFWLEVBQXlCLEVBQXpCLENBQUYsQ0FBK0I1MUIsSUFBRUEsRUFBRWdjLE9BQUYsQ0FBVSxTQUFWLEVBQW9CLEVBQXBCLENBQUYsQ0FBMEIsSUFBSXpjLElBQUVtWCxZQUFZMVcsQ0FBWixFQUFjLEVBQWQsQ0FBTixDQUF3QixJQUFHVCxFQUFFNE8sU0FBRixLQUFjLEtBQUsvTixDQUFMLENBQU8rTixTQUFQLEVBQWpCLEVBQW9DO0FBQUMsV0FBTyxDQUFQO0FBQVMsT0FBSXBQLElBQUUsS0FBS2taLFFBQUwsQ0FBYzFZLENBQWQsQ0FBTixDQUF1QixJQUFJVCxJQUFFQyxFQUFFK0IsUUFBRixDQUFXLEVBQVgsRUFBZWtiLE9BQWYsQ0FBdUIsUUFBdkIsRUFBZ0MsRUFBaEMsQ0FBTixDQUEwQyxJQUFJdmMsSUFBRTIyQiw2Q0FBNkN0M0IsQ0FBN0MsQ0FBTixDQUFzRCxJQUFHVyxFQUFFSSxNQUFGLElBQVUsQ0FBYixFQUFlO0FBQUMsV0FBTyxLQUFQO0FBQWEsT0FBSVgsSUFBRU8sRUFBRSxDQUFGLENBQU4sQ0FBVyxJQUFJVCxJQUFFUyxFQUFFLENBQUYsQ0FBTixDQUFXLE9BQU9ULEtBQUdRLENBQVY7QUFBYSxDQUEzVyxDQUE0V2dZLE9BQU9yWSxTQUFQLENBQWlCazNCLFNBQWpCLEdBQTJCLFVBQVM1MkIsQ0FBVCxFQUFXRixDQUFYLEVBQWFTLENBQWIsRUFBZWhCLENBQWYsRUFBaUI7QUFBQyxNQUFJUSxJQUFFLFNBQUZBLENBQUUsQ0FBU1YsQ0FBVCxFQUFXO0FBQUMsV0FBT2tZLEtBQUtmLE1BQUwsQ0FBWWlCLElBQVosQ0FBaUJJLE9BQWpCLENBQXlCeFksQ0FBekIsRUFBMkJrQixDQUEzQixDQUFQO0FBQXFDLEdBQXZELENBQXdELElBQUlkLElBQUVNLEVBQUUrWCxVQUFVOVgsQ0FBVixDQUFGLENBQU4sQ0FBc0IsSUFBR1QsTUFBSUwsU0FBUCxFQUFpQjtBQUFDSyxRQUFFLENBQUMsQ0FBSDtBQUFLLFVBQU8sS0FBS212Qix3QkFBTCxDQUE4Qmp2QixDQUE5QixFQUFnQ0ssQ0FBaEMsRUFBa0NTLENBQWxDLEVBQW9DaEIsQ0FBcEMsQ0FBUDtBQUE4QyxDQUFoTSxDQUFpTXdZLE9BQU9yWSxTQUFQLENBQWlCZ3ZCLHdCQUFqQixHQUEwQyxVQUFTbnZCLENBQVQsRUFBV3VDLENBQVgsRUFBYXpCLENBQWIsRUFBZUwsQ0FBZixFQUFpQjtBQUFDLE1BQUlNLElBQUUsSUFBSTRJLFVBQUosQ0FBZXBILENBQWYsRUFBaUIsRUFBakIsQ0FBTixDQUEyQixJQUFHeEIsRUFBRW9PLFNBQUYsS0FBYyxLQUFLL04sQ0FBTCxDQUFPK04sU0FBUCxFQUFqQixFQUFvQztBQUFDLFdBQU8sS0FBUDtBQUFhLE9BQUkxTSxJQUFFLFNBQUZBLENBQUUsQ0FBUzdCLENBQVQsRUFBVztBQUFDLFdBQU9vWCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCSSxPQUFqQixDQUF5QjFYLENBQXpCLEVBQTJCRSxDQUEzQixDQUFQO0FBQXFDLEdBQXZELENBQXdELElBQUlILElBQUUwWCxVQUFVclksQ0FBVixDQUFOLENBQW1CLElBQUlELElBQUVZLEVBQUVFLE1BQVIsQ0FBZSxJQUFJZixJQUFFLEtBQUtzQixDQUFMLENBQU8rTixTQUFQLEtBQW1CLENBQXpCLENBQTJCLElBQUlwTSxJQUFFMEMsS0FBSy9DLElBQUwsQ0FBVTVDLElBQUUsQ0FBWixDQUFOLENBQXFCLElBQUl3QyxDQUFKLENBQU0sSUFBRzdCLE1BQUksQ0FBQyxDQUFMLElBQVFBLE1BQUlkLFNBQWYsRUFBeUI7QUFBQ2MsUUFBRVYsQ0FBRjtBQUFJLEdBQTlCLE1BQWtDO0FBQUMsUUFBR1UsTUFBSSxDQUFDLENBQVIsRUFBVTtBQUFDQSxVQUFFc0MsSUFBRWhELENBQUYsR0FBSSxDQUFOO0FBQVEsS0FBbkIsTUFBdUI7QUFBQyxVQUFHVSxJQUFFLENBQUMsQ0FBTixFQUFRO0FBQUMsY0FBSyxxQkFBTDtBQUEyQjtBQUFDO0FBQUMsT0FBR3NDLElBQUdoRCxJQUFFVSxDQUFGLEdBQUksQ0FBVixFQUFhO0FBQUMsVUFBSyxlQUFMO0FBQXFCLE9BQUlPLElBQUUsS0FBS2lZLFFBQUwsQ0FBY2xZLENBQWQsRUFBaUJvVSxXQUFqQixFQUFOLENBQXFDLEtBQUk3UyxJQUFFLENBQU4sRUFBUUEsSUFBRXRCLEVBQUVILE1BQVosRUFBbUJ5QixLQUFHLENBQXRCLEVBQXdCO0FBQUN0QixNQUFFc0IsQ0FBRixLQUFNLEdBQU47QUFBVSxVQUFNdEIsRUFBRUgsTUFBRixHQUFTa0MsQ0FBZixFQUFpQjtBQUFDL0IsTUFBRW9iLE9BQUYsQ0FBVSxDQUFWO0FBQWEsT0FBR3BiLEVBQUUrQixJQUFFLENBQUosTUFBUyxHQUFaLEVBQWdCO0FBQUMsVUFBSyxzQ0FBTDtBQUE0QyxPQUFFUSxPQUFPQyxZQUFQLENBQW9CN0IsS0FBcEIsQ0FBMEI0QixNQUExQixFQUFpQ3ZDLENBQWpDLENBQUYsQ0FBc0MsSUFBSWQsSUFBRWMsRUFBRXFDLE1BQUYsQ0FBUyxDQUFULEVBQVdOLElBQUVoRCxDQUFGLEdBQUksQ0FBZixDQUFOLENBQXdCLElBQUlTLElBQUVRLEVBQUVxQyxNQUFGLENBQVNuRCxFQUFFVyxNQUFYLEVBQWtCZCxDQUFsQixDQUFOLENBQTJCLElBQUlzQixJQUFHLFNBQVEsSUFBRTBCLENBQUYsR0FBSWpELENBQWIsR0FBaUIsR0FBdkIsQ0FBMkIsSUFBRyxDQUFDSSxFQUFFdUQsVUFBRixDQUFhLENBQWIsSUFBZ0JwQyxDQUFqQixNQUFzQixDQUF6QixFQUEyQjtBQUFDLFVBQUssOEJBQUw7QUFBb0MsT0FBSUQsSUFBRTQxQixhQUFheDJCLENBQWIsRUFBZU4sRUFBRVcsTUFBakIsRUFBd0I0QixDQUF4QixDQUFOLENBQWlDLElBQUluQixJQUFFLEVBQU4sQ0FBUyxLQUFJZ0IsSUFBRSxDQUFOLEVBQVFBLElBQUVwQyxFQUFFVyxNQUFaLEVBQW1CeUIsS0FBRyxDQUF0QixFQUF3QjtBQUFDaEIsTUFBRWdCLENBQUYsSUFBS3BDLEVBQUV1RCxVQUFGLENBQWFuQixDQUFiLElBQWdCbEIsRUFBRXFDLFVBQUYsQ0FBYW5CLENBQWIsQ0FBckI7QUFBcUMsS0FBRSxDQUFGLEtBQU0sQ0FBQ2pCLENBQVAsQ0FBUyxJQUFJZCxJQUFFd0MsSUFBRWhELENBQUYsR0FBSVUsQ0FBSixHQUFNLENBQVosQ0FBYyxLQUFJNkIsSUFBRSxDQUFOLEVBQVFBLElBQUUvQixDQUFWLEVBQVkrQixLQUFHLENBQWYsRUFBaUI7QUFBQyxRQUFHaEIsRUFBRWdCLENBQUYsTUFBTyxDQUFWLEVBQVk7QUFBQyxZQUFLLDBCQUFMO0FBQWdDO0FBQUMsT0FBR2hCLEVBQUVmLENBQUYsTUFBTyxDQUFWLEVBQVk7QUFBQyxVQUFLLHVCQUFMO0FBQTZCLFVBQU9DLE1BQUk2WCxVQUFVNVYsRUFBRThWLFVBQVUscUNBQW1DNVgsQ0FBbkMsR0FBcUM0QyxPQUFPQyxZQUFQLENBQW9CN0IsS0FBcEIsQ0FBMEI0QixNQUExQixFQUFpQ2pDLEVBQUVzQixLQUFGLENBQVEsQ0FBQ25DLENBQVQsQ0FBakMsQ0FBL0MsQ0FBRixDQUFWLENBQVg7QUFBdUgsQ0FBcmxDLENBQXNsQytYLE9BQU84ZSxhQUFQLEdBQXFCLENBQUMsQ0FBdEIsQ0FBd0I5ZSxPQUFPK2UsWUFBUCxHQUFvQixDQUFDLENBQXJCLENBQXVCL2UsT0FBT2dmLGdCQUFQLEdBQXdCLENBQUMsQ0FBekI7QUFDemhKLFNBQVNuQyxJQUFULEdBQWU7QUFBQyxNQUFJdDBCLElBQUVxaUIsT0FBTjtBQUFBLE1BQWN6aUIsSUFBRUksRUFBRTZpQixXQUFsQjtBQUFBLE1BQThCN2pCLElBQUVnQixFQUFFMGlCLElBQWxDO0FBQUEsTUFBdUNsakIsSUFBRVEsRUFBRTJpQixNQUEzQztBQUFBLE1BQWtEMWpCLElBQUVlLEVBQUVpakIsVUFBdEQ7QUFBQSxNQUFpRXZqQixJQUFFTSxFQUFFZ2pCLFlBQXJFO0FBQUEsTUFBa0Zqa0IsSUFBRWlCLEVBQUUraUIsWUFBdEY7QUFBQSxNQUFtRzVqQixJQUFFYSxFQUFFeWlCLE9BQXZHO0FBQUEsTUFBK0c1aUIsSUFBRUcsRUFBRXdqQixPQUFuSDtBQUFBLE1BQTJIdmpCLElBQUVxMEIsSUFBN0g7QUFBQSxNQUFrSTcwQixJQUFFeWxCLFFBQXBJLENBQTZJLEtBQUs3RixHQUFMLEdBQVMsSUFBVCxDQUFjLEtBQUs2UyxPQUFMLEdBQWEsQ0FBYixDQUFlLEtBQUt3RSxPQUFMLEdBQWEsQ0FBYixDQUFlLEtBQUtDLFFBQUwsR0FBYyxJQUFkLENBQW1CLEtBQUtDLFVBQUwsR0FBZ0IsWUFBVTtBQUFDLFFBQUcsS0FBS3ZYLEdBQUwsS0FBVyxJQUFYLElBQWlCLEtBQUs2UyxPQUFMLEtBQWUsQ0FBbkMsRUFBcUM7QUFBQyxhQUFPLEtBQUtBLE9BQVo7QUFBb0IsU0FBR3h5QixFQUFFLEtBQUsyZixHQUFQLEVBQVcsQ0FBWCxFQUFhLENBQUMsQ0FBRCxFQUFHLENBQUgsQ0FBYixNQUFzQixZQUF6QixFQUFzQztBQUFDLFdBQUs2UyxPQUFMLEdBQWEsQ0FBYixDQUFlLEtBQUt3RSxPQUFMLEdBQWEsQ0FBQyxDQUFkLENBQWdCLE9BQU8sQ0FBUDtBQUFTLFVBQUt4RSxPQUFMLEdBQWEsQ0FBYixDQUFlLE9BQU8sQ0FBUDtBQUFTLEdBQTVMLENBQTZMLEtBQUsyRSxrQkFBTCxHQUF3QixZQUFVO0FBQUMsV0FBTzUzQixFQUFFLEtBQUtvZ0IsR0FBUCxFQUFXLENBQVgsRUFBYSxDQUFDLENBQUQsRUFBRyxJQUFFLEtBQUtxWCxPQUFWLENBQWIsRUFBZ0MsSUFBaEMsQ0FBUDtBQUE2QyxHQUFoRixDQUFpRixLQUFLSSwwQkFBTCxHQUFnQyxZQUFVO0FBQUMsV0FBT2ozQixFQUFFWixFQUFFLEtBQUtvZ0IsR0FBUCxFQUFXLENBQVgsRUFBYSxDQUFDLENBQUQsRUFBRyxJQUFFLEtBQUtxWCxPQUFWLEVBQWtCLENBQWxCLENBQWIsRUFBa0MsSUFBbEMsQ0FBRixDQUFQO0FBQWtELEdBQTdGLENBQThGLEtBQUtLLFlBQUwsR0FBa0IsWUFBVTtBQUFDLFdBQU9yM0IsRUFBRSxLQUFLMmYsR0FBUCxFQUFXLENBQVgsRUFBYSxDQUFDLENBQUQsRUFBRyxJQUFFLEtBQUtxWCxPQUFWLENBQWIsRUFBZ0MsSUFBaEMsQ0FBUDtBQUE2QyxHQUExRSxDQUEyRSxLQUFLTSxlQUFMLEdBQXFCLFlBQVU7QUFBQyxXQUFPLzJCLEVBQUVnM0IsTUFBRixDQUFTLEtBQUtGLFlBQUwsRUFBVCxDQUFQO0FBQXFDLEdBQXJFLENBQXNFLEtBQUtHLGFBQUwsR0FBbUIsWUFBVTtBQUFDLFdBQU94M0IsRUFBRSxLQUFLMmYsR0FBUCxFQUFXLENBQVgsRUFBYSxDQUFDLENBQUQsRUFBRyxJQUFFLEtBQUtxWCxPQUFWLENBQWIsRUFBZ0MsSUFBaEMsQ0FBUDtBQUE2QyxHQUEzRSxDQUE0RSxLQUFLUyxnQkFBTCxHQUFzQixZQUFVO0FBQUMsV0FBT2wzQixFQUFFZzNCLE1BQUYsQ0FBUyxLQUFLQyxhQUFMLEVBQVQsQ0FBUDtBQUFzQyxHQUF2RSxDQUF3RSxLQUFLRSxZQUFMLEdBQWtCLFlBQVU7QUFBQyxRQUFJcjNCLElBQUVkLEVBQUUsS0FBS29nQixHQUFQLEVBQVcsQ0FBWCxFQUFhLENBQUMsQ0FBRCxFQUFHLElBQUUsS0FBS3FYLE9BQVYsRUFBa0IsQ0FBbEIsQ0FBYixDQUFOLENBQXlDMzJCLElBQUVBLEVBQUVrYyxPQUFGLENBQVUsT0FBVixFQUFrQixLQUFsQixDQUFGLENBQTJCbGMsSUFBRTZDLG1CQUFtQjdDLENBQW5CLENBQUYsQ0FBd0IsT0FBT0EsQ0FBUDtBQUFTLEdBQWxJLENBQW1JLEtBQUtzM0IsV0FBTCxHQUFpQixZQUFVO0FBQUMsUUFBSXQzQixJQUFFZCxFQUFFLEtBQUtvZ0IsR0FBUCxFQUFXLENBQVgsRUFBYSxDQUFDLENBQUQsRUFBRyxJQUFFLEtBQUtxWCxPQUFWLEVBQWtCLENBQWxCLENBQWIsQ0FBTixDQUF5QzMyQixJQUFFQSxFQUFFa2MsT0FBRixDQUFVLE9BQVYsRUFBa0IsS0FBbEIsQ0FBRixDQUEyQmxjLElBQUU2QyxtQkFBbUI3QyxDQUFuQixDQUFGLENBQXdCLE9BQU9BLENBQVA7QUFBUyxHQUFqSSxDQUFrSSxLQUFLNjFCLGVBQUwsR0FBcUIsWUFBVTtBQUFDLFdBQU81MUIsRUFBRWdqQixZQUFGLENBQWUsS0FBSzNELEdBQXBCLEVBQXdCLENBQXhCLEVBQTBCLENBQUMsQ0FBRCxFQUFHLElBQUUsS0FBS3FYLE9BQVYsQ0FBMUIsRUFBNkMsSUFBN0MsQ0FBUDtBQUEwRCxHQUExRixDQUEyRixLQUFLWSxlQUFMLEdBQXFCLFlBQVU7QUFBQyxXQUFPdjRCLEVBQUUsS0FBS3NnQixHQUFQLEVBQVcsQ0FBWCxFQUFhLENBQUMsQ0FBRCxFQUFHLElBQUUsS0FBS3FYLE9BQVYsQ0FBYixFQUFnQyxJQUFoQyxDQUFQO0FBQTZDLEdBQTdFLENBQThFLEtBQUthLHNCQUFMLEdBQTRCLFlBQVU7QUFBQyxRQUFJeDNCLElBQUUsS0FBS3UzQixlQUFMLEVBQU4sQ0FBNkIsT0FBT3Y0QixFQUFFLEtBQUtzZ0IsR0FBUCxFQUFXdGYsQ0FBWCxFQUFhLENBQUMsQ0FBRCxFQUFHLENBQUgsQ0FBYixFQUFtQixJQUFuQixDQUFQO0FBQWdDLEdBQXBHLENBQXFHLEtBQUt5M0IsWUFBTCxHQUFrQixZQUFVO0FBQUMsV0FBT3hLLFFBQVFDLE1BQVIsQ0FBZSxLQUFLMkksZUFBTCxFQUFmLEVBQXNDLElBQXRDLEVBQTJDLFVBQTNDLENBQVA7QUFBOEQsR0FBM0YsQ0FBNEYsS0FBSzZCLHlCQUFMLEdBQStCLFlBQVU7QUFBQyxXQUFPNTNCLEVBQUVaLEVBQUUsS0FBS29nQixHQUFQLEVBQVcsQ0FBWCxFQUFhLENBQUMsQ0FBRCxFQUFHLENBQUgsQ0FBYixFQUFtQixJQUFuQixDQUFGLENBQVA7QUFBbUMsR0FBN0UsQ0FBOEUsS0FBS3FZLG9CQUFMLEdBQTBCLFlBQVU7QUFBQyxXQUFPejRCLEVBQUUsS0FBS29nQixHQUFQLEVBQVcsQ0FBWCxFQUFhLENBQUMsQ0FBRCxDQUFiLEVBQWlCLElBQWpCLEVBQXNCLElBQXRCLENBQVA7QUFBbUMsR0FBeEUsQ0FBeUUsS0FBS3NZLGVBQUwsR0FBcUIsVUFBU3QzQixDQUFULEVBQVc7QUFBQyxRQUFJRSxJQUFFLEtBQUtrM0IseUJBQUwsRUFBTixDQUF1QyxJQUFJMTNCLElBQUUsS0FBSzIzQixvQkFBTCxFQUFOLENBQWtDLElBQUkxMUIsSUFBRXRDLEVBQUUsS0FBSzJmLEdBQVAsRUFBVyxDQUFYLEVBQWEsQ0FBQyxDQUFELENBQWIsRUFBaUIsSUFBakIsQ0FBTixDQUE2QixJQUFJL2UsSUFBRSxJQUFJMlcsS0FBS2YsTUFBTCxDQUFZeVcsU0FBaEIsQ0FBMEIsRUFBQ3RDLEtBQUk5cEIsQ0FBTCxFQUExQixDQUFOLENBQXlDRCxFQUFFSSxJQUFGLENBQU9MLENBQVAsRUFBVUMsRUFBRStxQixTQUFGLENBQVlycEIsQ0FBWixFQUFlLE9BQU8xQixFQUFFMnRCLE1BQUYsQ0FBU2x1QixDQUFULENBQVA7QUFBbUIsR0FBNU4sQ0FBNk4sS0FBSzYzQixRQUFMLEdBQWMsWUFBVTtBQUFDLFFBQUcsS0FBSzFGLE9BQUwsS0FBZSxDQUFsQixFQUFvQjtBQUFDLGFBQU8sQ0FBQyxDQUFSO0FBQVUsU0FBSTV4QixJQUFFdkIsRUFBRSxLQUFLc2dCLEdBQVAsRUFBVyxDQUFYLEVBQWEsQ0FBQyxDQUFELEVBQUcsQ0FBSCxFQUFLLENBQUwsQ0FBYixFQUFxQixJQUFyQixDQUFOLENBQWlDLElBQUlyZCxJQUFFcEMsRUFBRSxLQUFLeWYsR0FBUCxFQUFXL2UsQ0FBWCxDQUFOLENBQW9CLEtBQUtxMkIsUUFBTCxHQUFjLElBQUludUIsS0FBSixFQUFkLENBQTBCLEtBQUksSUFBSW5JLElBQUUsQ0FBVixFQUFZQSxJQUFFMkIsRUFBRWxDLE1BQWhCLEVBQXVCTyxHQUF2QixFQUEyQjtBQUFDLFVBQUlrQixJQUFFLEVBQU4sQ0FBU0EsRUFBRXMyQixRQUFGLEdBQVcsS0FBWCxDQUFpQixJQUFJOTNCLElBQUVILEVBQUUsS0FBS3lmLEdBQVAsRUFBV3JkLEVBQUUzQixDQUFGLENBQVgsQ0FBTixDQUF1QixJQUFJcUIsSUFBRSxDQUFOLENBQVEsSUFBRzNCLEVBQUVELE1BQUYsS0FBVyxDQUFkLEVBQWdCO0FBQUN5QixVQUFFczJCLFFBQUYsR0FBVyxJQUFYLENBQWdCbjJCLElBQUUsQ0FBRjtBQUFJLFNBQUVnZ0IsR0FBRixHQUFNMWhCLEVBQUVrakIsV0FBRixDQUFjamtCLEVBQUUsS0FBS29nQixHQUFQLEVBQVdyZCxFQUFFM0IsQ0FBRixDQUFYLEVBQWdCLENBQUMsQ0FBRCxDQUFoQixFQUFvQixJQUFwQixDQUFkLENBQU4sQ0FBK0MsSUFBSUUsSUFBRXhCLEVBQUUsS0FBS3NnQixHQUFQLEVBQVdyZCxFQUFFM0IsQ0FBRixDQUFYLEVBQWdCLENBQUMsSUFBRXFCLENBQUgsQ0FBaEIsQ0FBTixDQUE2QkgsRUFBRXUyQixJQUFGLEdBQU8zNEIsRUFBRSxLQUFLa2dCLEdBQVAsRUFBVzllLENBQVgsQ0FBUCxDQUFxQixLQUFLbzJCLFFBQUwsQ0FBYzUwQixJQUFkLENBQW1CUixDQUFuQjtBQUFzQjtBQUFDLEdBQXpYLENBQTBYLEtBQUt3MkIsVUFBTCxHQUFnQixVQUFTMTNCLENBQVQsRUFBVztBQUFDLFFBQUlOLElBQUUsS0FBSzQyQixRQUFYLENBQW9CLElBQUlwMkIsSUFBRUYsQ0FBTixDQUFRLElBQUcsQ0FBQ0EsRUFBRTJiLEtBQUYsQ0FBUSxXQUFSLENBQUosRUFBeUI7QUFBQ3piLFVBQUUwVyxLQUFLa0YsSUFBTCxDQUFVb0YsSUFBVixDQUFlQyxHQUFmLENBQW1CQyxRQUFuQixDQUE0QnBoQixDQUE1QixDQUFGO0FBQWlDLFNBQUdFLE1BQUksRUFBUCxFQUFVO0FBQUMsYUFBTzNCLFNBQVA7QUFBaUIsVUFBSSxJQUFJb0QsSUFBRSxDQUFWLEVBQVlBLElBQUVqQyxFQUFFRCxNQUFoQixFQUF1QmtDLEdBQXZCLEVBQTJCO0FBQUMsVUFBR2pDLEVBQUVpQyxDQUFGLEVBQUswZixHQUFMLEtBQVduaEIsQ0FBZCxFQUFnQjtBQUFDLGVBQU9SLEVBQUVpQyxDQUFGLENBQVA7QUFBWTtBQUFDLFlBQU9wRCxTQUFQO0FBQWlCLEdBQTFOLENBQTJOLEtBQUtvNUIsc0JBQUwsR0FBNEIsWUFBVTtBQUFDLFFBQUkzM0IsSUFBRSxLQUFLMDNCLFVBQUwsQ0FBZ0Isa0JBQWhCLENBQU4sQ0FBMEMsSUFBRzEzQixNQUFJekIsU0FBUCxFQUFpQjtBQUFDLGFBQU95QixDQUFQO0FBQVMsU0FBSU4sSUFBRWYsRUFBRSxLQUFLcWdCLEdBQVAsRUFBV2hmLEVBQUV5M0IsSUFBYixDQUFOLENBQXlCLElBQUcvM0IsTUFBSSxFQUFQLEVBQVU7QUFBQyxhQUFNLEVBQU47QUFBUyxTQUFHQSxNQUFJLFFBQVAsRUFBZ0I7QUFBQyxhQUFNLEVBQUNrNEIsSUFBRyxJQUFKLEVBQU47QUFBZ0IsU0FBR2w0QixFQUFFdUMsTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLE1BQWdCLFVBQW5CLEVBQThCO0FBQUMsVUFBSS9CLElBQUV2QixFQUFFZSxDQUFGLEVBQUksQ0FBSixDQUFOLENBQWEsSUFBSWlDLElBQUVLLFNBQVM5QixDQUFULEVBQVcsRUFBWCxDQUFOLENBQXFCLE9BQU0sRUFBQzAzQixJQUFHLElBQUosRUFBU0MsU0FBUWwyQixDQUFqQixFQUFOO0FBQTBCLFdBQUssOEJBQUw7QUFBb0MsR0FBelQsQ0FBMFQsS0FBS20yQixpQkFBTCxHQUF1QixZQUFVO0FBQUMsUUFBSTUzQixJQUFFLEtBQUt3M0IsVUFBTCxDQUFnQixVQUFoQixDQUFOLENBQWtDLElBQUd4M0IsTUFBSTNCLFNBQVAsRUFBaUI7QUFBQyxhQUFNLEVBQU47QUFBUyxTQUFJb0QsSUFBRWhELEVBQUUsS0FBS3FnQixHQUFQLEVBQVc5ZSxFQUFFdTNCLElBQWIsQ0FBTixDQUF5QixJQUFHOTFCLEVBQUVsQyxNQUFGLEdBQVMsQ0FBVCxJQUFZLENBQVosSUFBZWtDLEVBQUVsQyxNQUFGLElBQVUsQ0FBNUIsRUFBOEI7QUFBQyxZQUFLLDJCQUFMO0FBQWlDLFNBQUlDLElBQUVzQyxTQUFTTCxFQUFFTSxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBVCxDQUFOLENBQThCLElBQUlqQyxJQUFFZ0MsU0FBU0wsRUFBRU0sTUFBRixDQUFTLENBQVQsQ0FBVCxFQUFxQixFQUFyQixFQUF5QnZCLFFBQXpCLENBQWtDLENBQWxDLENBQU4sQ0FBMkMsT0FBT1YsRUFBRWlDLE1BQUYsQ0FBUyxDQUFULEVBQVdqQyxFQUFFUCxNQUFGLEdBQVNDLENBQXBCLENBQVA7QUFBOEIsR0FBL1IsQ0FBZ1MsS0FBS3E0QixvQkFBTCxHQUEwQixZQUFVO0FBQUMsUUFBSS8zQixJQUFFLEtBQUs4M0IsaUJBQUwsRUFBTixDQUErQixJQUFJcDRCLElBQUUsSUFBSXlJLEtBQUosRUFBTixDQUFrQixLQUFJLElBQUl4RyxJQUFFLENBQVYsRUFBWUEsSUFBRTNCLEVBQUVQLE1BQWhCLEVBQXVCa0MsR0FBdkIsRUFBMkI7QUFBQyxVQUFHM0IsRUFBRWlDLE1BQUYsQ0FBU04sQ0FBVCxFQUFXLENBQVgsS0FBZSxHQUFsQixFQUFzQjtBQUFDakMsVUFBRWdDLElBQUYsQ0FBT3V5QixLQUFLK0QsYUFBTCxDQUFtQnIyQixDQUFuQixDQUFQO0FBQThCO0FBQUMsWUFBT2pDLEVBQUVvQyxJQUFGLENBQU8sR0FBUCxDQUFQO0FBQW1CLEdBQTNMLENBQTRMLEtBQUttMkIsMEJBQUwsR0FBZ0MsWUFBVTtBQUFDLFFBQUl2NEIsSUFBRSxLQUFLZzRCLFVBQUwsQ0FBZ0Isc0JBQWhCLENBQU4sQ0FBOEMsSUFBR2g0QixNQUFJbkIsU0FBUCxFQUFpQjtBQUFDLGFBQU9tQixDQUFQO0FBQVMsWUFBT2YsRUFBRSxLQUFLcWdCLEdBQVAsRUFBV3RmLEVBQUUrM0IsSUFBYixDQUFQO0FBQTBCLEdBQTlJLENBQStJLEtBQUtTLDRCQUFMLEdBQWtDLFlBQVU7QUFBQyxRQUFJajRCLElBQUUsS0FBS3kzQixVQUFMLENBQWdCLHdCQUFoQixDQUFOLENBQWdELElBQUd6M0IsTUFBSTFCLFNBQVAsRUFBaUI7QUFBQyxhQUFPMEIsQ0FBUDtBQUFTLFNBQUlQLElBQUUsRUFBTixDQUFTLElBQUlRLElBQUVmLEVBQUUsS0FBSzZmLEdBQVAsRUFBVy9lLEVBQUV3M0IsSUFBYixDQUFOLENBQXlCLElBQUk5MUIsSUFBRXBDLEVBQUVXLENBQUYsRUFBSSxDQUFKLENBQU4sQ0FBYSxLQUFJLElBQUlGLElBQUUsQ0FBVixFQUFZQSxJQUFFMkIsRUFBRWxDLE1BQWhCLEVBQXVCTyxHQUF2QixFQUEyQjtBQUFDLFVBQUdFLEVBQUUrQixNQUFGLENBQVNOLEVBQUUzQixDQUFGLENBQVQsRUFBYyxDQUFkLE1BQW1CLElBQXRCLEVBQTJCO0FBQUNOLFVBQUV5NEIsR0FBRixHQUFNeDVCLEVBQUV1QixDQUFGLEVBQUl5QixFQUFFM0IsQ0FBRixDQUFKLENBQU47QUFBZ0I7QUFBQyxZQUFPTixDQUFQO0FBQVMsR0FBelAsQ0FBMFAsS0FBSzA0QixxQkFBTCxHQUEyQixZQUFVO0FBQUMsUUFBSW40QixJQUFFLEtBQUt5M0IsVUFBTCxDQUFnQixhQUFoQixDQUFOLENBQXFDLElBQUd6M0IsTUFBSTFCLFNBQVAsRUFBaUI7QUFBQyxhQUFPMEIsQ0FBUDtBQUFTLFNBQUlQLElBQUUsSUFBSXlJLEtBQUosRUFBTixDQUFrQixJQUFJakksSUFBRWYsRUFBRSxLQUFLNmYsR0FBUCxFQUFXL2UsRUFBRXczQixJQUFiLENBQU4sQ0FBeUIsSUFBR3YzQixNQUFJLEVBQVAsRUFBVTtBQUFDLGFBQU9SLENBQVA7QUFBUyxTQUFJaUMsSUFBRXBDLEVBQUVXLENBQUYsRUFBSSxDQUFKLENBQU4sQ0FBYSxLQUFJLElBQUlGLElBQUUsQ0FBVixFQUFZQSxJQUFFMkIsRUFBRWxDLE1BQWhCLEVBQXVCTyxHQUF2QixFQUEyQjtBQUFDTixRQUFFZ0MsSUFBRixDQUFPbEMsRUFBRWIsRUFBRXVCLENBQUYsRUFBSXlCLEVBQUUzQixDQUFGLENBQUosQ0FBRixDQUFQO0FBQXFCLFlBQU9OLENBQVA7QUFBUyxHQUE1TyxDQUE2TyxLQUFLMjRCLG9CQUFMLEdBQTBCLFlBQVU7QUFBQyxRQUFJMTJCLElBQUUsS0FBSzIyQixxQkFBTCxFQUFOLENBQW1DLElBQUk1NEIsSUFBRSxJQUFJeUksS0FBSixFQUFOLENBQWtCLEtBQUksSUFBSW5JLElBQUUsQ0FBVixFQUFZQSxJQUFFMkIsRUFBRWxDLE1BQWhCLEVBQXVCTyxHQUF2QixFQUEyQjtBQUFDLFVBQUcyQixFQUFFM0IsQ0FBRixFQUFLLENBQUwsTUFBVSxLQUFiLEVBQW1CO0FBQUNOLFVBQUVnQyxJQUFGLENBQU9DLEVBQUUzQixDQUFGLEVBQUssQ0FBTCxDQUFQO0FBQWdCO0FBQUMsWUFBT04sQ0FBUDtBQUFTLEdBQXBLLENBQXFLLEtBQUs0NEIscUJBQUwsR0FBMkIsWUFBVTtBQUFDLFFBQUlyNEIsQ0FBSixFQUFNa0IsQ0FBTixFQUFRRSxDQUFSLENBQVUsSUFBSUgsSUFBRSxLQUFLdzJCLFVBQUwsQ0FBZ0IsZ0JBQWhCLENBQU4sQ0FBd0MsSUFBR3gyQixNQUFJM0MsU0FBUCxFQUFpQjtBQUFDLGFBQU8yQyxDQUFQO0FBQVMsU0FBSXhCLElBQUUsSUFBSXlJLEtBQUosRUFBTixDQUFrQixJQUFJakksSUFBRWYsRUFBRSxLQUFLNmYsR0FBUCxFQUFXOWQsRUFBRXUyQixJQUFiLENBQU4sQ0FBeUIsSUFBSTkxQixJQUFFcEMsRUFBRVcsQ0FBRixFQUFJLENBQUosQ0FBTixDQUFhLEtBQUksSUFBSUYsSUFBRSxDQUFWLEVBQVlBLElBQUUyQixFQUFFbEMsTUFBaEIsRUFBdUJPLEdBQXZCLEVBQTJCO0FBQUNxQixVQUFFbkIsRUFBRStCLE1BQUYsQ0FBU04sRUFBRTNCLENBQUYsQ0FBVCxFQUFjLENBQWQsQ0FBRixDQUFtQkMsSUFBRXRCLEVBQUV1QixDQUFGLEVBQUl5QixFQUFFM0IsQ0FBRixDQUFKLENBQUYsQ0FBWSxJQUFHcUIsTUFBSSxJQUFQLEVBQVk7QUFBQ0YsWUFBRStoQixVQUFVampCLENBQVYsQ0FBRixDQUFlUCxFQUFFZ0MsSUFBRixDQUFPLENBQUMsTUFBRCxFQUFRUCxDQUFSLENBQVA7QUFBbUIsV0FBR0UsTUFBSSxJQUFQLEVBQVk7QUFBQ0YsWUFBRStoQixVQUFVampCLENBQVYsQ0FBRixDQUFlUCxFQUFFZ0MsSUFBRixDQUFPLENBQUMsS0FBRCxFQUFPUCxDQUFQLENBQVA7QUFBa0IsV0FBR0UsTUFBSSxJQUFQLEVBQVk7QUFBQ0YsWUFBRTh5QixLQUFLMkMsTUFBTCxDQUFZMzJCLENBQVosRUFBYyxDQUFkLENBQUYsQ0FBbUJQLEVBQUVnQyxJQUFGLENBQU8sQ0FBQyxJQUFELEVBQU1QLENBQU4sQ0FBUDtBQUFpQixXQUFHRSxNQUFJLElBQVAsRUFBWTtBQUFDRixZQUFFK2hCLFVBQVVqakIsQ0FBVixDQUFGLENBQWVQLEVBQUVnQyxJQUFGLENBQU8sQ0FBQyxLQUFELEVBQU9QLENBQVAsQ0FBUDtBQUFrQixXQUFHRSxNQUFJLElBQVAsRUFBWTtBQUFDRixZQUFFZ2xCLFFBQVFsbUIsQ0FBUixDQUFGLENBQWFQLEVBQUVnQyxJQUFGLENBQU8sQ0FBQyxJQUFELEVBQU1QLENBQU4sQ0FBUDtBQUFpQjtBQUFDLFlBQU96QixDQUFQO0FBQVMsR0FBdmQsQ0FBd2QsS0FBSzY0Qiw4QkFBTCxHQUFvQyxZQUFVO0FBQUMsUUFBSXIzQixJQUFFLEtBQUt3MkIsVUFBTCxDQUFnQix1QkFBaEIsQ0FBTixDQUErQyxJQUFHeDJCLE1BQUkzQyxTQUFQLEVBQWlCO0FBQUMsYUFBTzJDLENBQVA7QUFBUyxTQUFJeEIsSUFBRSxJQUFJeUksS0FBSixFQUFOLENBQWtCLElBQUl4RyxJQUFFcEMsRUFBRSxLQUFLeWYsR0FBUCxFQUFXOWQsRUFBRXUyQixJQUFiLENBQU4sQ0FBeUIsS0FBSSxJQUFJdjNCLElBQUUsQ0FBVixFQUFZQSxJQUFFeUIsRUFBRWxDLE1BQWhCLEVBQXVCUyxHQUF2QixFQUEyQjtBQUFDLFVBQUc7QUFBQyxZQUFJbUIsSUFBRXpDLEVBQUUsS0FBS29nQixHQUFQLEVBQVdyZCxFQUFFekIsQ0FBRixDQUFYLEVBQWdCLENBQUMsQ0FBRCxFQUFHLENBQUgsRUFBSyxDQUFMLENBQWhCLEVBQXdCLElBQXhCLENBQU4sQ0FBb0MsSUFBSUQsSUFBRWlqQixVQUFVN2hCLENBQVYsQ0FBTixDQUFtQjNCLEVBQUVnQyxJQUFGLENBQU96QixDQUFQO0FBQVUsT0FBckUsQ0FBcUUsT0FBTUQsQ0FBTixFQUFRLENBQUU7QUFBQyxZQUFPTixDQUFQO0FBQVMsR0FBelIsQ0FBMFIsS0FBSzg0QixhQUFMLEdBQW1CLFlBQVU7QUFBQyxRQUFJdjRCLElBQUUsS0FBS3kzQixVQUFMLENBQWdCLHFCQUFoQixDQUFOLENBQTZDLElBQUd6M0IsTUFBSTFCLFNBQVAsRUFBaUI7QUFBQyxhQUFPMEIsQ0FBUDtBQUFTLFNBQUlQLElBQUUsRUFBQys0QixNQUFLLEVBQU4sRUFBU0MsVUFBUyxFQUFsQixFQUFOLENBQTRCLElBQUkvMkIsSUFBRXBDLEVBQUUsS0FBS3lmLEdBQVAsRUFBVy9lLEVBQUV3M0IsSUFBYixDQUFOLENBQXlCLEtBQUksSUFBSXozQixJQUFFLENBQVYsRUFBWUEsSUFBRTJCLEVBQUVsQyxNQUFoQixFQUF1Qk8sR0FBdkIsRUFBMkI7QUFBQyxVQUFJa0IsSUFBRXRDLEVBQUUsS0FBS29nQixHQUFQLEVBQVdyZCxFQUFFM0IsQ0FBRixDQUFYLEVBQWdCLENBQUMsQ0FBRCxDQUFoQixFQUFvQixJQUFwQixDQUFOLENBQWdDLElBQUlFLElBQUV0QixFQUFFLEtBQUtvZ0IsR0FBUCxFQUFXcmQsRUFBRTNCLENBQUYsQ0FBWCxFQUFnQixDQUFDLENBQUQsQ0FBaEIsRUFBb0IsSUFBcEIsQ0FBTixDQUFnQyxJQUFHa0IsTUFBSSxrQkFBUCxFQUEwQjtBQUFDeEIsVUFBRSs0QixJQUFGLENBQU8vMkIsSUFBUCxDQUFZd2hCLFVBQVVoakIsQ0FBVixDQUFaO0FBQTBCLFdBQUdnQixNQUFJLGtCQUFQLEVBQTBCO0FBQUN4QixVQUFFZzVCLFFBQUYsQ0FBV2gzQixJQUFYLENBQWdCd2hCLFVBQVVoakIsQ0FBVixDQUFoQjtBQUE4QjtBQUFDLFlBQU9SLENBQVA7QUFBUyxHQUEvVyxDQUFnWCxLQUFLaTVCLHlCQUFMLEdBQStCLFlBQVU7QUFBQyxRQUFJejRCLElBQUUsS0FBS3czQixVQUFMLENBQWdCLHFCQUFoQixDQUFOLENBQTZDLElBQUd4M0IsTUFBSTNCLFNBQVAsRUFBaUI7QUFBQyxhQUFPMkIsQ0FBUDtBQUFTLFNBQUlSLElBQUVQLEVBQUUsS0FBSzZmLEdBQVAsRUFBVzllLEVBQUV1M0IsSUFBYixDQUFOLENBQXlCLElBQUlwMEIsSUFBRSxFQUFOLENBQVMsSUFBSWxDLElBQUU1QixFQUFFRyxDQUFGLEVBQUksQ0FBSixDQUFOLENBQWEsS0FBSSxJQUFJMkIsSUFBRSxDQUFWLEVBQVlBLElBQUVGLEVBQUUxQixNQUFoQixFQUF1QjRCLEdBQXZCLEVBQTJCO0FBQUMsVUFBSUosSUFBRSxFQUFOLENBQVMsSUFBSWpCLElBQUVULEVBQUVHLENBQUYsRUFBSXlCLEVBQUVFLENBQUYsQ0FBSixDQUFOLENBQWdCSixFQUFFMjNCLEVBQUYsR0FBS3A1QixFQUFFYixFQUFFZSxDQUFGLEVBQUlNLEVBQUUsQ0FBRixDQUFKLENBQUYsQ0FBTCxDQUFrQixJQUFHQSxFQUFFUCxNQUFGLEtBQVcsQ0FBZCxFQUFnQjtBQUFDLFlBQUlrQyxJQUFFcEMsRUFBRUcsQ0FBRixFQUFJTSxFQUFFLENBQUYsQ0FBSixDQUFOLENBQWdCLEtBQUksSUFBSWtCLElBQUUsQ0FBVixFQUFZQSxJQUFFUyxFQUFFbEMsTUFBaEIsRUFBdUJ5QixHQUF2QixFQUEyQjtBQUFDLGNBQUlqQixJQUFFckIsRUFBRWMsQ0FBRixFQUFJaUMsRUFBRVQsQ0FBRixDQUFKLEVBQVMsQ0FBQyxDQUFELENBQVQsRUFBYSxJQUFiLENBQU4sQ0FBeUIsSUFBR2pCLE1BQUksa0JBQVAsRUFBMEI7QUFBQ2dCLGNBQUU0M0IsR0FBRixHQUFNM1YsVUFBVXRrQixFQUFFYyxDQUFGLEVBQUlpQyxFQUFFVCxDQUFGLENBQUosRUFBUyxDQUFDLENBQUQsQ0FBVCxDQUFWLENBQU47QUFBK0IsV0FBMUQsTUFBOEQ7QUFBQyxnQkFBR2pCLE1BQUksa0JBQVAsRUFBMEI7QUFBQ2dCLGdCQUFFNjNCLE9BQUYsR0FBVTVWLFVBQVV0a0IsRUFBRWMsQ0FBRixFQUFJaUMsRUFBRVQsQ0FBRixDQUFKLEVBQVMsQ0FBQyxDQUFELEVBQUcsQ0FBSCxDQUFULENBQVYsQ0FBVjtBQUFxQztBQUFDO0FBQUM7QUFBQyxTQUFFUSxJQUFGLENBQU9ULENBQVA7QUFBVSxZQUFPb0MsQ0FBUDtBQUFTLEdBQW5kLENBQW9kLEtBQUswMUIsV0FBTCxHQUFpQixVQUFTcjVCLENBQVQsRUFBVztBQUFDLFNBQUs0MUIsV0FBTCxDQUFpQmwyQixFQUFFTSxDQUFGLENBQWpCO0FBQXVCLEdBQXBELENBQXFELEtBQUs0MUIsV0FBTCxHQUFpQixVQUFTNTFCLENBQVQsRUFBVztBQUFDLFNBQUtzZixHQUFMLEdBQVN0ZixDQUFULENBQVcsS0FBSzYyQixVQUFMLEdBQWtCLElBQUc7QUFBQzczQixRQUFFLEtBQUtzZ0IsR0FBUCxFQUFXLENBQVgsRUFBYSxDQUFDLENBQUQsRUFBRyxDQUFILENBQWIsRUFBbUIsSUFBbkIsRUFBeUIsS0FBS3VZLFFBQUw7QUFBZ0IsS0FBN0MsQ0FBNkMsT0FBTTUxQixDQUFOLEVBQVEsQ0FBRTtBQUFDLEdBQWxILENBQW1ILEtBQUtxM0IsT0FBTCxHQUFhLFlBQVU7QUFBQyxRQUFJcjNCLElBQUVzeUIsSUFBTixDQUFXLElBQUlsdEIsQ0FBSixFQUFNMUQsQ0FBTixFQUFRc0QsQ0FBUixDQUFVSSxJQUFFLGdCQUFGLENBQW1CQSxLQUFHLHNCQUFvQixLQUFLeXZCLGtCQUFMLEVBQXBCLEdBQThDLElBQWpELENBQXNEenZCLEtBQUcsNEJBQTBCLEtBQUswdkIsMEJBQUwsRUFBMUIsR0FBNEQsSUFBL0QsQ0FBb0UxdkIsS0FBRyxlQUFhLEtBQUs0dkIsZUFBTCxFQUFiLEdBQW9DLElBQXZDLENBQTRDNXZCLEtBQUcsa0JBQWdCLEtBQUtnd0IsWUFBTCxFQUFoQixHQUFvQyxJQUF2QyxDQUE0Q2h3QixLQUFHLGlCQUFlLEtBQUtpd0IsV0FBTCxFQUFmLEdBQWtDLElBQXJDLENBQTBDandCLEtBQUcsZ0JBQWMsS0FBSyt2QixnQkFBTCxFQUFkLEdBQXNDLElBQXpDLENBQThDL3ZCLEtBQUcsK0JBQUgsQ0FBbUMxRCxJQUFFLEtBQUs4ekIsWUFBTCxFQUFGLENBQXNCcHdCLEtBQUcsd0JBQXNCMUQsRUFBRTZVLElBQXhCLEdBQTZCLElBQWhDLENBQXFDLElBQUc3VSxFQUFFNlUsSUFBRixLQUFTLEtBQVosRUFBa0I7QUFBQ25SLFdBQUcsV0FBUzRmLFlBQVl0akIsRUFBRXJELENBQUYsQ0FBSVUsUUFBSixDQUFhLEVBQWIsQ0FBWixFQUE4QnVCLE1BQTlCLENBQXFDLENBQXJDLEVBQXVDLEVBQXZDLENBQVQsR0FBb0QsT0FBdkQsQ0FBK0Q4RSxLQUFHLFdBQVM0ZixZQUFZdGpCLEVBQUVqRSxDQUFGLENBQUlzQixRQUFKLENBQWEsRUFBYixDQUFaLENBQVQsR0FBdUMsSUFBMUM7QUFBK0MsU0FBRSxLQUFLNDFCLFFBQVAsQ0FBZ0IsSUFBRzN2QixNQUFJcEksU0FBSixJQUFlb0ksTUFBSSxJQUF0QixFQUEyQjtBQUFDSSxXQUFHLHNCQUFILENBQTBCLEtBQUksSUFBSTFGLElBQUUsQ0FBVixFQUFZQSxJQUFFc0YsRUFBRWxILE1BQWhCLEVBQXVCNEIsR0FBdkIsRUFBMkI7QUFBQyxZQUFJckIsSUFBRTJHLEVBQUV0RixDQUFGLENBQU4sQ0FBVyxJQUFJdUYsSUFBRWdRLEtBQUtrRixJQUFMLENBQVVvRixJQUFWLENBQWVDLEdBQWYsQ0FBbUI4QixRQUFuQixDQUE0QmpqQixFQUFFcWhCLEdBQTlCLENBQU4sQ0FBeUMsSUFBR3phLE1BQUksRUFBUCxFQUFVO0FBQUNBLGNBQUU1RyxFQUFFcWhCLEdBQUo7QUFBUSxhQUFJbmUsSUFBRSxFQUFOLENBQVMsSUFBR2xELEVBQUV3M0IsUUFBRixLQUFhLElBQWhCLEVBQXFCO0FBQUN0MEIsY0FBRSxVQUFGO0FBQWEsY0FBRyxPQUFLMEQsQ0FBTCxHQUFPLEdBQVAsR0FBVzFELENBQVgsR0FBYSxLQUFoQixDQUFzQixJQUFHMEQsTUFBSSxrQkFBUCxFQUEwQjtBQUFDLGNBQUl4RCxJQUFFLEtBQUt1MEIsc0JBQUwsRUFBTixDQUFvQyxJQUFHdjBCLEVBQUV3MEIsRUFBRixLQUFPcjVCLFNBQVYsRUFBb0I7QUFBQ3dJLGlCQUFHLFVBQUg7QUFBYyxXQUFuQyxNQUF1QztBQUFDQSxpQkFBRyxhQUFILENBQWlCLElBQUczRCxFQUFFeTBCLE9BQUYsS0FBWXQ1QixTQUFmLEVBQXlCO0FBQUN3SSxtQkFBRyxlQUFhM0QsRUFBRXkwQixPQUFsQjtBQUEwQixrQkFBRyxJQUFIO0FBQVE7QUFBQyxTQUFyTCxNQUF5TDtBQUFDLGNBQUdqeEIsTUFBSSxVQUFQLEVBQWtCO0FBQUNHLGlCQUFHLFNBQU8sS0FBS2d4QixvQkFBTCxFQUFQLEdBQW1DLElBQXRDO0FBQTJDLFdBQTlELE1BQWtFO0FBQUMsZ0JBQUdueEIsTUFBSSxzQkFBUCxFQUE4QjtBQUFDRyxtQkFBRyxTQUFPLEtBQUtreEIsMEJBQUwsRUFBUCxHQUF5QyxJQUE1QztBQUFpRCxhQUFoRixNQUFvRjtBQUFDLGtCQUFHcnhCLE1BQUksd0JBQVAsRUFBZ0M7QUFBQyxvQkFBSWxILElBQUUsS0FBS3c0Qiw0QkFBTCxFQUFOLENBQTBDLElBQUd4NEIsRUFBRXk0QixHQUFGLEtBQVE1NUIsU0FBWCxFQUFxQjtBQUFDd0ksdUJBQUcsYUFBV3JILEVBQUV5NEIsR0FBYixHQUFpQixJQUFwQjtBQUF5QjtBQUFDLGVBQTNILE1BQStIO0FBQUMsb0JBQUd2eEIsTUFBSSxhQUFQLEVBQXFCO0FBQUMsc0JBQUkzRCxJQUFFLEtBQUttMUIscUJBQUwsRUFBTixDQUFtQ3J4QixLQUFHLFNBQU85RCxFQUFFbkIsSUFBRixDQUFPLElBQVAsQ0FBUCxHQUFvQixJQUF2QjtBQUE0QixpQkFBckYsTUFBeUY7QUFBQyxzQkFBRzhFLE1BQUksZ0JBQVAsRUFBd0I7QUFBQyx3QkFBSTNGLElBQUUsS0FBS3EzQixxQkFBTCxFQUFOLENBQW1DdnhCLEtBQUcsU0FBTzlGLENBQVAsR0FBUyxJQUFaO0FBQWlCLG1CQUE3RSxNQUFpRjtBQUFDLHdCQUFHMkYsTUFBSSx1QkFBUCxFQUErQjtBQUFDLDBCQUFJQyxJQUFFLEtBQUsweEIsOEJBQUwsRUFBTixDQUE0Q3h4QixLQUFHLFNBQU9GLENBQVAsR0FBUyxJQUFaO0FBQWlCLHFCQUE3RixNQUFpRztBQUFDLDBCQUFHRCxNQUFJLHFCQUFQLEVBQTZCO0FBQUMsNEJBQUkzRyxJQUFFLEtBQUt1NEIsYUFBTCxFQUFOLENBQTJCLElBQUd2NEIsRUFBRXc0QixJQUFGLEtBQVNsNkIsU0FBWixFQUFzQjtBQUFDd0ksK0JBQUcsZUFBYTlHLEVBQUV3NEIsSUFBRixDQUFPMzJCLElBQVAsQ0FBWSxHQUFaLENBQWIsR0FBOEIsSUFBakM7QUFBc0MsNkJBQUc3QixFQUFFeTRCLFFBQUYsS0FBYW42QixTQUFoQixFQUEwQjtBQUFDd0ksK0JBQUcsbUJBQWlCOUcsRUFBRXk0QixRQUFGLENBQVc1MkIsSUFBWCxDQUFnQixHQUFoQixDQUFqQixHQUFzQyxJQUF6QztBQUE4QztBQUFDLHVCQUFoTSxNQUFvTTtBQUFDLDRCQUFHOEUsTUFBSSxxQkFBUCxFQUE2QjtBQUFDLDhCQUFJMUcsSUFBRSxLQUFLeTRCLHlCQUFMLEVBQU4sQ0FBdUMsS0FBSSxJQUFJejNCLElBQUUsQ0FBVixFQUFZQSxJQUFFaEIsRUFBRVQsTUFBaEIsRUFBdUJ5QixHQUF2QixFQUEyQjtBQUFDLGdDQUFHaEIsRUFBRWdCLENBQUYsRUFBSzAzQixFQUFMLEtBQVVyNkIsU0FBYixFQUF1QjtBQUFDd0ksbUNBQUcscUJBQW1CN0csRUFBRWdCLENBQUYsRUFBSzAzQixFQUF4QixHQUEyQixJQUE5QjtBQUFtQyxpQ0FBRzE0QixFQUFFZ0IsQ0FBRixFQUFLMjNCLEdBQUwsS0FBV3Q2QixTQUFkLEVBQXdCO0FBQUN3SSxtQ0FBRyxjQUFZN0csRUFBRWdCLENBQUYsRUFBSzIzQixHQUFqQixHQUFxQixJQUF4QjtBQUE2QjtBQUFDO0FBQUM7QUFBQztBQUFDO0FBQUM7QUFBQztBQUFDO0FBQUM7QUFBQztBQUFDO0FBQUM7QUFBQyxVQUFHLDBCQUF3QixLQUFLekIseUJBQUwsRUFBeEIsR0FBeUQsSUFBNUQsQ0FBaUVyd0IsS0FBRyxnQkFBYyxLQUFLc3dCLG9CQUFMLEdBQTRCcDFCLE1BQTVCLENBQW1DLENBQW5DLEVBQXFDLEVBQXJDLENBQWQsR0FBdUQsT0FBMUQsQ0FBa0UsT0FBTzhFLENBQVA7QUFBUyxHQUFua0U7QUFBb2tFLE1BQUs2dkIsTUFBTCxHQUFZLFVBQVNoNEIsQ0FBVCxFQUFXTyxDQUFYLEVBQWE7QUFBQyxNQUFHQSxNQUFJWixTQUFQLEVBQWlCO0FBQUNZLFFBQUUsQ0FBRjtBQUFJLE9BQUdQLEVBQUVxRCxNQUFGLENBQVM5QyxDQUFULEVBQVcsQ0FBWCxNQUFnQixJQUFuQixFQUF3QjtBQUFDLFVBQUssY0FBTDtBQUFvQixPQUFJRSxJQUFFLElBQUk4SSxLQUFKLEVBQU4sQ0FBa0IsSUFBSXJKLElBQUVrakIsUUFBUVEsV0FBUixDQUFvQjVqQixDQUFwQixFQUFzQk8sQ0FBdEIsQ0FBTixDQUErQixLQUFJLElBQUlDLElBQUUsQ0FBVixFQUFZQSxJQUFFTixFQUFFVyxNQUFoQixFQUF1QkwsR0FBdkIsRUFBMkI7QUFBQ0MsTUFBRXFDLElBQUYsQ0FBT3V5QixLQUFLZ0YsT0FBTCxDQUFhcjZCLENBQWIsRUFBZUUsRUFBRU0sQ0FBRixDQUFmLENBQVA7QUFBNkIsT0FBRUMsRUFBRXduQixHQUFGLENBQU0sVUFBU2puQixDQUFULEVBQVc7QUFBQyxXQUFPQSxFQUFFZ2MsT0FBRixDQUFVLEdBQVYsRUFBYyxLQUFkLENBQVA7QUFBNEIsR0FBOUMsQ0FBRixDQUFrRCxPQUFNLE1BQUl2YyxFQUFFeUMsSUFBRixDQUFPLEdBQVAsQ0FBVjtBQUFzQixDQUEvUSxDQUFnUm15QixLQUFLZ0YsT0FBTCxHQUFhLFVBQVNyNkIsQ0FBVCxFQUFXTyxDQUFYLEVBQWE7QUFBQyxNQUFHQSxNQUFJWixTQUFQLEVBQWlCO0FBQUNZLFFBQUUsQ0FBRjtBQUFJLE9BQUdQLEVBQUVxRCxNQUFGLENBQVM5QyxDQUFULEVBQVcsQ0FBWCxNQUFnQixJQUFuQixFQUF3QjtBQUFDLFVBQUssZUFBTDtBQUFxQixPQUFJRSxJQUFFLElBQUk4SSxLQUFKLEVBQU4sQ0FBa0IsSUFBSXJKLElBQUVrakIsUUFBUVEsV0FBUixDQUFvQjVqQixDQUFwQixFQUFzQk8sQ0FBdEIsQ0FBTixDQUErQixLQUFJLElBQUlDLElBQUUsQ0FBVixFQUFZQSxJQUFFTixFQUFFVyxNQUFoQixFQUF1QkwsR0FBdkIsRUFBMkI7QUFBQ0MsTUFBRXFDLElBQUYsQ0FBT3V5QixLQUFLaUYsaUJBQUwsQ0FBdUJ0NkIsQ0FBdkIsRUFBeUJFLEVBQUVNLENBQUYsQ0FBekIsQ0FBUDtBQUF1QyxPQUFFQyxFQUFFd25CLEdBQUYsQ0FBTSxVQUFTam5CLENBQVQsRUFBVztBQUFDLFdBQU9BLEVBQUVnYyxPQUFGLENBQVUsR0FBVixFQUFjLEtBQWQsQ0FBUDtBQUE0QixHQUE5QyxDQUFGLENBQWtELE9BQU92YyxFQUFFeUMsSUFBRixDQUFPLEdBQVAsQ0FBUDtBQUFtQixDQUF4UixDQUF5Um15QixLQUFLaUYsaUJBQUwsR0FBdUIsVUFBU3A2QixDQUFULEVBQVdVLENBQVgsRUFBYTtBQUFDLE1BQUlELElBQUV5aUIsT0FBTixDQUFjLElBQUlyakIsSUFBRVksRUFBRThpQixJQUFSLENBQWEsSUFBRzdpQixNQUFJakIsU0FBUCxFQUFpQjtBQUFDaUIsUUFBRSxDQUFGO0FBQUksT0FBR1YsRUFBRW1ELE1BQUYsQ0FBU3pDLENBQVQsRUFBVyxDQUFYLE1BQWdCLElBQW5CLEVBQXdCO0FBQUMsVUFBSyxvQ0FBTDtBQUEwQyxPQUFJZCxJQUFFYSxFQUFFaWpCLFdBQUYsQ0FBYzFqQixDQUFkLEVBQWdCVSxDQUFoQixDQUFOLENBQXlCLElBQUdkLEVBQUVlLE1BQUYsS0FBVyxDQUFYLElBQWNYLEVBQUVtRCxNQUFGLENBQVN2RCxFQUFFLENBQUYsQ0FBVCxFQUFjLENBQWQsTUFBbUIsSUFBcEMsRUFBeUM7QUFBQztBQUFxQyxPQUFJUyxJQUFFUixFQUFFRyxDQUFGLEVBQUlKLEVBQUUsQ0FBRixDQUFKLENBQU4sQ0FBZ0IsSUFBSUUsSUFBRWdZLEtBQUtrRixJQUFMLENBQVVDLFFBQVYsQ0FBbUI4QixXQUFuQixDQUErQjFlLENBQS9CLENBQU4sQ0FBd0MsSUFBSUMsSUFBRXdYLEtBQUtrRixJQUFMLENBQVVvRixJQUFWLENBQWVDLEdBQWYsQ0FBbUJnWSxTQUFuQixDQUE2QnY2QixDQUE3QixDQUFOLENBQXNDLElBQUlnQixJQUFFakIsRUFBRUcsQ0FBRixFQUFJSixFQUFFLENBQUYsQ0FBSixDQUFOLENBQWdCLElBQUlXLElBQUU0WCxVQUFVclgsQ0FBVixDQUFOLENBQW1CLE9BQU9SLElBQUUsR0FBRixHQUFNQyxDQUFiO0FBQWUsQ0FBalosQ0FBa1o0MEIsS0FBS0MsdUJBQUwsR0FBNkIsVUFBUy8wQixDQUFULEVBQVc7QUFBQyxNQUFJUyxJQUFFLElBQUlxMEIsSUFBSixFQUFOLENBQWlCcjBCLEVBQUUwMUIsV0FBRixDQUFjbjJCLENBQWQsRUFBaUIsT0FBT1MsRUFBRXUzQixZQUFGLEVBQVA7QUFBd0IsQ0FBbkcsQ0FBb0dsRCxLQUFLRSx1QkFBTCxHQUE2QixVQUFTaDFCLENBQVQsRUFBVztBQUFDLE1BQUlTLElBQUUsSUFBSXEwQixJQUFKLEVBQU4sQ0FBaUJyMEIsRUFBRW01QixXQUFGLENBQWM1NUIsQ0FBZCxFQUFpQixPQUFPUyxFQUFFdTNCLFlBQUYsRUFBUDtBQUF3QixDQUFuRyxDQUFvR2xELEtBQUttRiw2QkFBTCxHQUFtQyxVQUFTLzVCLENBQVQsRUFBVztBQUFDLE1BQUlELElBQUU0aUIsT0FBTixDQUFjLElBQUl0akIsSUFBRVUsRUFBRXdqQixVQUFSLENBQW1CLElBQUl6akIsSUFBRSxFQUFOLENBQVMsSUFBSVMsQ0FBSixFQUFNaEIsQ0FBTixFQUFRRSxDQUFSLENBQVVLLEVBQUU4ekIsUUFBRixHQUFXLElBQVgsQ0FBZ0JyekIsSUFBRSxJQUFJcTBCLElBQUosRUFBRixDQUFhcjBCLEVBQUVtNUIsV0FBRixDQUFjMTVCLENBQWQsRUFBaUJULElBQUVnQixFQUFFMjFCLGVBQUYsRUFBRixDQUFzQnAyQixFQUFFd3lCLE1BQUYsR0FBU2p6QixFQUFFRSxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxDQUFOLEVBQVUsSUFBVixFQUFnQnFELE1BQWhCLENBQXVCLENBQXZCLENBQVQsQ0FBbUM5QyxFQUFFK3pCLE1BQUYsR0FBU3gwQixFQUFFRSxDQUFGLEVBQUksQ0FBSixFQUFNLENBQUMsQ0FBRCxFQUFHLENBQUgsQ0FBTixFQUFZLElBQVosQ0FBVCxDQUEyQixJQUFHTyxFQUFFK3pCLE1BQUYsS0FBVyxnQkFBZCxFQUErQjtBQUFDL3pCLE1BQUU4ekIsUUFBRixHQUFXdjBCLEVBQUVFLENBQUYsRUFBSSxDQUFKLEVBQU0sQ0FBQyxDQUFELEVBQUcsQ0FBSCxDQUFOLEVBQVksSUFBWixDQUFYO0FBQTZCLFVBQU9PLENBQVA7QUFBUyxDQUEzUyxDQUE0UzgwQixLQUFLK0QsYUFBTCxHQUFtQixDQUFDLGtCQUFELEVBQW9CLGdCQUFwQixFQUFxQyxpQkFBckMsRUFBdUQsa0JBQXZELEVBQTBFLGNBQTFFLEVBQXlGLGFBQXpGLEVBQXVHLFNBQXZHLEVBQWlILGNBQWpILEVBQWdJLGNBQWhJLENBQW5CO0FBQ3ZxUyxJQUFHLE9BQU9waEIsSUFBUCxJQUFhLFdBQWIsSUFBMEIsQ0FBQ0EsSUFBOUIsRUFBbUM7QUFBQyxVQW1FM0JBLElBbkUyQixVQUFLLEVBQUw7QUFBUSxLQUFHLE9BQU9BLEtBQUt5aUIsR0FBWixJQUFpQixXQUFqQixJQUE4QixDQUFDemlCLEtBQUt5aUIsR0FBdkMsRUFBMkM7QUFBQ3ppQixPQUFLeWlCLEdBQUwsR0FBUyxFQUFUO0FBQVksTUFBS0EsR0FBTCxDQUFTQyxHQUFULEdBQWEsWUFBVTtBQUFDLE1BQUluNkIsSUFBRXlYLElBQU47QUFBQSxNQUFXaFgsSUFBRVQsRUFBRWs2QixHQUFGLENBQU1DLEdBQW5CO0FBQUEsTUFBdUJqNkIsSUFBRU8sRUFBRTI1QixnQkFBM0IsQ0FBNEMsS0FBS0MsUUFBTCxHQUFjLFVBQVM5NkIsQ0FBVCxFQUFXYSxDQUFYLEVBQWE7QUFBQyxRQUFJLEtBQUtrNkIsU0FBTCxLQUFpQmw3QixTQUFsQixLQUErQmdCLEtBQUksS0FBS2s2QixTQUFMLENBQWVDLE9BQWYsS0FBeUJuN0IsU0FBNUQsQ0FBSCxFQUEyRTtBQUFDO0FBQU8sU0FBSWlCLElBQUVkLEVBQUVpZCxLQUFGLENBQVEsNkJBQVIsQ0FBTixDQUE2QyxJQUFHbmMsS0FBRyxJQUFOLEVBQVc7QUFBQyxZQUFLLHlEQUFMO0FBQStELFNBQUlHLElBQUVILEVBQUUsQ0FBRixDQUFOLENBQVcsSUFBSUosSUFBRUksRUFBRSxDQUFGLENBQU4sQ0FBVyxJQUFJRSxJQUFFRixFQUFFLENBQUYsQ0FBTixDQUFXLElBQUlRLElBQUVMLElBQUUsR0FBRixHQUFNUCxDQUFaLENBQWMsS0FBS3E2QixTQUFMLEdBQWUsRUFBZixDQUFrQixLQUFLQSxTQUFMLENBQWVFLFFBQWYsR0FBd0JoNkIsQ0FBeEIsQ0FBMEIsS0FBSzg1QixTQUFMLENBQWVHLFdBQWYsR0FBMkJ4NkIsQ0FBM0IsQ0FBNkIsS0FBS3E2QixTQUFMLENBQWVJLFVBQWYsR0FBMEJuNkIsQ0FBMUIsQ0FBNEIsS0FBSys1QixTQUFMLENBQWVLLEVBQWYsR0FBa0I5NUIsQ0FBbEIsQ0FBb0IsSUFBRyxDQUFDVCxDQUFKLEVBQU07QUFBQyxVQUFJWixJQUFFc2xCLFVBQVV2a0IsQ0FBVixDQUFOLENBQW1CLElBQUlkLElBQUUwWCxZQUFZM1gsQ0FBWixFQUFjLEVBQWQsQ0FBTixDQUF3QixLQUFLODZCLFNBQUwsQ0FBZUMsT0FBZixHQUF1Qi82QixDQUF2QixDQUF5QixLQUFLODZCLFNBQUwsQ0FBZU0sUUFBZixHQUF3Qm43QixDQUF4QjtBQUEwQixTQUFJRSxJQUFFcWxCLFdBQVd4a0IsQ0FBWCxDQUFOLENBQW9CLElBQUlnQyxJQUFFd2lCLFdBQVcva0IsQ0FBWCxDQUFOLENBQW9CLEtBQUtxNkIsU0FBTCxDQUFlTyxLQUFmLEdBQXFCbDdCLENBQXJCLENBQXVCLEtBQUsyNkIsU0FBTCxDQUFlUSxRQUFmLEdBQXdCdDRCLENBQXhCLENBQTBCLElBQUcsQ0FBQ3RDLEVBQUVQLENBQUYsRUFBSSxLQUFLMjZCLFNBQVQsRUFBbUIsT0FBbkIsQ0FBSixFQUFnQztBQUFDLFlBQUsseUNBQXVDMzZCLENBQTVDO0FBQThDO0FBQUMsR0FBN3BCO0FBQThwQixDQUFsdUIsQ0FBbXVCOFgsS0FBS3lpQixHQUFMLENBQVNDLEdBQVQsQ0FBYXRNLElBQWIsR0FBa0IsVUFBU3h0QixDQUFULEVBQVc0RCxDQUFYLEVBQWF5RCxDQUFiLEVBQWVGLENBQWYsRUFBaUIvRyxDQUFqQixFQUFtQjtBQUFDLE1BQUlxRCxJQUFFMlQsSUFBTjtBQUFBLE1BQVdqVixJQUFFc0IsRUFBRW8yQixHQUFmO0FBQUEsTUFBbUJuNEIsSUFBRVMsRUFBRTIzQixHQUF2QjtBQUFBLE1BQTJCNTZCLElBQUV3QyxFQUFFZzVCLGtCQUEvQjtBQUFBLE1BQWtEajZCLElBQUVpQixFQUFFcTRCLGdCQUF0RDtBQUFBLE1BQXVFejZCLElBQUVtRSxFQUFFNFMsTUFBM0U7QUFBQSxNQUFrRmxXLElBQUViLEVBQUVzdUIsS0FBdEY7QUFBQSxNQUE0Rmx0QixJQUFFcEIsRUFBRTRzQixHQUFoRztBQUFBLE1BQW9HcnNCLElBQUVQLEVBQUV3dEIsU0FBeEc7QUFBQSxNQUFrSHJyQixJQUFFbWlCLElBQXBILENBQXlILElBQUlqaUIsQ0FBSixFQUFNNUIsQ0FBTixFQUFRUyxDQUFSLENBQVUsSUFBRyxPQUFPb0QsQ0FBUCxJQUFVLFFBQVYsSUFBb0IsUUFBT0EsQ0FBUCx5Q0FBT0EsQ0FBUCxNQUFVLFFBQWpDLEVBQTBDO0FBQUMsVUFBSyw2Q0FBMkNBLENBQWhEO0FBQWtELE9BQUcsUUFBT0EsQ0FBUCx5Q0FBT0EsQ0FBUCxNQUFVLFFBQWIsRUFBc0I7QUFBQzdELFFBQUU2RCxDQUFGLENBQUlqQyxJQUFFRixFQUFFRixTQUFGLENBQVl4QixDQUFaLENBQUY7QUFBaUIsT0FBRyxPQUFPNkQsQ0FBUCxJQUFVLFFBQWIsRUFBc0I7QUFBQ2pDLFFBQUVpQyxDQUFGLENBQUksSUFBRyxDQUFDbkQsRUFBRWtCLENBQUYsQ0FBSixFQUFTO0FBQUMsWUFBSyx1Q0FBcUNBLENBQTFDO0FBQTRDLFNBQUV6QyxFQUFFeUMsQ0FBRixDQUFGO0FBQU8sT0FBRTBGLENBQUYsQ0FBSSxJQUFHLFFBQU9BLENBQVAseUNBQU9BLENBQVAsTUFBVSxRQUFiLEVBQXNCO0FBQUM3RyxRQUFFaUIsRUFBRUYsU0FBRixDQUFZOEYsQ0FBWixDQUFGO0FBQWlCLE9BQUcsQ0FBQ3JILEtBQUcsRUFBSCxJQUFPQSxLQUFHLElBQVgsS0FBa0JELEVBQUV5cUIsR0FBRixLQUFRenJCLFNBQTdCLEVBQXVDO0FBQUNpQixRQUFFRCxFQUFFeXFCLEdBQUo7QUFBUSxPQUFJeHFCLEtBQUcsRUFBSCxJQUFPQSxLQUFHLElBQVgsSUFBa0JELEVBQUV5cUIsR0FBRixLQUFRenJCLFNBQTdCLEVBQXVDO0FBQUNnQixNQUFFeXFCLEdBQUYsR0FBTXhxQixDQUFOLENBQVEyQixJQUFFRixFQUFFRixTQUFGLENBQVl4QixDQUFaLENBQUY7QUFBaUIsT0FBR0MsTUFBSUQsRUFBRXlxQixHQUFULEVBQWE7QUFBQyxVQUFLLHdDQUFzQ3hxQixDQUF0QyxHQUF3QyxJQUF4QyxHQUE2Q0QsRUFBRXlxQixHQUFwRDtBQUF3RCxPQUFJM29CLElBQUUsSUFBTixDQUFXLElBQUdILEVBQUVpNUIsYUFBRixDQUFnQjM2QixDQUFoQixNQUFxQmpCLFNBQXhCLEVBQWtDO0FBQUMsVUFBSywyQkFBeUJpQixDQUE5QjtBQUFnQyxHQUFuRSxNQUF1RTtBQUFDNkIsUUFBRUgsRUFBRWk1QixhQUFGLENBQWdCMzZCLENBQWhCLENBQUY7QUFBcUIsT0FBSUosSUFBRThrQixXQUFXL2lCLENBQVgsQ0FBTixDQUFvQixJQUFJekIsSUFBRXdrQixXQUFXbGtCLENBQVgsQ0FBTixDQUFvQixJQUFJYixJQUFFQyxJQUFFLEdBQUYsR0FBTU0sQ0FBWixDQUFjLElBQUl3RCxJQUFFLEVBQU4sQ0FBUyxJQUFHN0IsRUFBRVksTUFBRixDQUFTLENBQVQsRUFBVyxDQUFYLEtBQWUsTUFBbEIsRUFBeUI7QUFBQyxRQUFHMEUsTUFBSXBJLFNBQVAsRUFBaUI7QUFBQyxZQUFLLHdDQUFMO0FBQThDLFNBQUlJLElBQUUsSUFBSXVCLENBQUosQ0FBTSxFQUFDOHBCLEtBQUkzb0IsQ0FBTCxFQUFPOG9CLE1BQUssVUFBWixFQUF1QjBCLE1BQUtsbEIsQ0FBNUIsRUFBTixDQUFOLENBQTRDaEksRUFBRW9zQixZQUFGLENBQWU1ckIsQ0FBZixFQUFrQitELElBQUV2RSxFQUFFbXRCLE9BQUYsRUFBRjtBQUFjLEdBQXRLLE1BQTBLO0FBQUMsUUFBR3pxQixFQUFFeUQsT0FBRixDQUFVLFdBQVYsS0FBd0IsQ0FBQyxDQUE1QixFQUE4QjtBQUFDLFVBQUlsRyxJQUFFLElBQUlTLENBQUosQ0FBTSxFQUFDMnFCLEtBQUkzb0IsQ0FBTCxFQUFOLENBQU4sQ0FBcUJ6QyxFQUFFeUIsSUFBRixDQUFPc0csQ0FBUCxFQUFTL0csQ0FBVCxFQUFZaEIsRUFBRW1zQixZQUFGLENBQWU1ckIsQ0FBZixFQUFrQmk3QixXQUFTeDdCLEVBQUVvdUIsSUFBRixFQUFULENBQWtCOXBCLElBQUUwVCxLQUFLZixNQUFMLENBQVl1WCxLQUFaLENBQWtCdUQsa0JBQWxCLENBQXFDeUosUUFBckMsQ0FBRjtBQUFpRCxLQUFySixNQUF5SjtBQUFDLFVBQUcvNEIsS0FBRyxNQUFOLEVBQWE7QUFBQyxZQUFJekMsSUFBRSxJQUFJUyxDQUFKLENBQU0sRUFBQzJxQixLQUFJM29CLENBQUwsRUFBTixDQUFOLENBQXFCekMsRUFBRXlCLElBQUYsQ0FBT3NHLENBQVAsRUFBUy9HLENBQVQsRUFBWWhCLEVBQUVtc0IsWUFBRixDQUFlNXJCLENBQWYsRUFBa0IrRCxJQUFFdEUsRUFBRW91QixJQUFGLEVBQUY7QUFBVztBQUFDO0FBQUMsT0FBSTNwQixJQUFFMmdCLFVBQVU5Z0IsQ0FBVixDQUFOLENBQW1CLE9BQU8vRCxJQUFFLEdBQUYsR0FBTWtFLENBQWI7QUFBZSxDQUF6c0MsQ0FBMHNDdVQsS0FBS3lpQixHQUFMLENBQVNDLEdBQVQsQ0FBYTFMLE1BQWIsR0FBb0IsVUFBUzNxQixDQUFULEVBQVc4RCxDQUFYLEVBQWEvRyxDQUFiLEVBQWU7QUFBQyxNQUFJa0QsSUFBRTBULElBQU47QUFBQSxNQUFXMVYsSUFBRWdDLEVBQUVtMkIsR0FBZjtBQUFBLE1BQW1CcDRCLElBQUVDLEVBQUVvNEIsR0FBdkI7QUFBQSxNQUEyQjk1QixJQUFFeUIsRUFBRWk1QixrQkFBL0I7QUFBQSxNQUFrRDk2QixJQUFFOEQsRUFBRTJTLE1BQXREO0FBQUEsTUFBNkQ1VixJQUFFYixFQUFFZ3VCLEtBQWpFO0FBQUEsTUFBdUVqc0IsSUFBRS9CLEVBQUVzc0IsR0FBM0U7QUFBQSxNQUErRTVzQixJQUFFTSxFQUFFa3RCLFNBQW5GO0FBQUEsTUFBNkYzcUIsQ0FBN0YsQ0FBK0YsSUFBRyxRQUFPeVYsTUFBUCx5Q0FBT0EsTUFBUCxPQUFnQjdZLFNBQW5CLEVBQTZCO0FBQUNvRCxRQUFFeVYsTUFBRjtBQUFTLE9BQUl2USxJQUFFNUQsRUFBRThhLEtBQUYsQ0FBUSxHQUFSLENBQU4sQ0FBbUIsSUFBR2xYLEVBQUVwSCxNQUFGLEtBQVcsQ0FBZCxFQUFnQjtBQUFDLFdBQU8sS0FBUDtBQUFhLE9BQUliLElBQUVpSSxFQUFFLENBQUYsQ0FBTixDQUFXLElBQUl4RixJQUFFd0YsRUFBRSxDQUFGLENBQU4sQ0FBVyxJQUFJeEgsSUFBRVQsSUFBRSxHQUFGLEdBQU15QyxDQUFaLENBQWMsSUFBSXVGLElBQUVxZCxVQUFVcGQsRUFBRSxDQUFGLENBQVYsQ0FBTixDQUFzQixJQUFJbkgsSUFBRUYsRUFBRTJrQixXQUFXdGQsRUFBRSxDQUFGLENBQVgsQ0FBRixDQUFOLENBQTBCLElBQUlsSCxJQUFFLElBQU4sQ0FBVyxJQUFJZ0gsSUFBRSxJQUFOLENBQVcsSUFBR2pILEVBQUVzcUIsR0FBRixLQUFRenJCLFNBQVgsRUFBcUI7QUFBQyxVQUFLLG1DQUFMO0FBQXlDLEdBQS9ELE1BQW1FO0FBQUNvQixRQUFFRCxFQUFFc3FCLEdBQUosQ0FBUXJqQixJQUFFaEgsRUFBRXNDLE1BQUYsQ0FBUyxDQUFULEVBQVcsQ0FBWCxDQUFGO0FBQWdCLE9BQUdqQyxLQUFHLElBQUgsSUFBU2QsT0FBT0gsU0FBUCxDQUFpQjJCLFFBQWpCLENBQTBCYSxJQUExQixDQUErQnZCLENBQS9CLE1BQW9DLGdCQUE3QyxJQUErREEsRUFBRVAsTUFBRixHQUFTLENBQTNFLEVBQTZFO0FBQUMsUUFBSU4sSUFBRSxNQUFJYSxFQUFFOEIsSUFBRixDQUFPLEdBQVAsQ0FBSixHQUFnQixHQUF0QixDQUEwQixJQUFHM0MsRUFBRTJGLE9BQUYsQ0FBVSxNQUFJbkYsQ0FBSixHQUFNLEdBQWhCLEtBQXNCLENBQUMsQ0FBMUIsRUFBNEI7QUFBQyxZQUFLLGdCQUFjQSxDQUFkLEdBQWdCLDRCQUFyQjtBQUFrRDtBQUFDLE9BQUdBLEtBQUcsTUFBSCxJQUFXb0gsTUFBSSxJQUFsQixFQUF1QjtBQUFDLFVBQUssbUNBQUw7QUFBeUMsT0FBRyxPQUFPQSxDQUFQLElBQVUsUUFBVixJQUFvQkEsRUFBRWpDLE9BQUYsQ0FBVSxhQUFWLEtBQTBCLENBQUMsQ0FBbEQsRUFBb0Q7QUFBQ2lDLFFBQUU0bEIsUUFBUUMsTUFBUixDQUFlN2xCLENBQWYsQ0FBRjtBQUFvQixPQUFHSixLQUFHLElBQUgsSUFBU0EsS0FBRyxJQUFmLEVBQW9CO0FBQUMsUUFBRyxFQUFFSSxhQUFhcEYsQ0FBZixDQUFILEVBQXFCO0FBQUMsWUFBSyxnREFBTDtBQUFzRDtBQUFDLE9BQUdnRixLQUFHLElBQU4sRUFBVztBQUFDLFFBQUcsRUFBRUksYUFBYTlHLENBQWYsQ0FBSCxFQUFxQjtBQUFDLFlBQUssdUNBQUw7QUFBNkM7QUFBQyxPQUFHTixLQUFHLE1BQU4sRUFBYSxDQUFFLEtBQUkwRCxJQUFFLElBQU4sQ0FBVyxJQUFHcEMsRUFBRWs1QixhQUFGLENBQWdCejZCLEVBQUVzcUIsR0FBbEIsTUFBeUJ6ckIsU0FBNUIsRUFBc0M7QUFBQyxVQUFLLDJCQUF5Qm9CLENBQTlCO0FBQWdDLEdBQXZFLE1BQTJFO0FBQUMwRCxRQUFFcEMsRUFBRWs1QixhQUFGLENBQWdCeDZCLENBQWhCLENBQUY7QUFBcUIsT0FBRzBELEtBQUcsTUFBTixFQUFhO0FBQUMsVUFBSyxlQUFMO0FBQXFCLEdBQW5DLE1BQXVDO0FBQUMsUUFBR0EsRUFBRXBCLE1BQUYsQ0FBUyxDQUFULEVBQVcsQ0FBWCxLQUFlLE1BQWxCLEVBQXlCO0FBQUMsVUFBSS9CLElBQUUsSUFBTixDQUFXLElBQUc2RyxNQUFJeEksU0FBUCxFQUFpQjtBQUFDLGNBQUssNkNBQUw7QUFBbUQsV0FBSWdCLElBQUUsSUFBSTRCLENBQUosQ0FBTSxFQUFDNm9CLEtBQUkzbUIsQ0FBTCxFQUFPd29CLE1BQUs5a0IsQ0FBWixFQUFOLENBQU4sQ0FBNEJ4SCxFQUFFd3JCLFlBQUYsQ0FBZTFyQixDQUFmLEVBQWtCYSxJQUFFWCxFQUFFdXNCLE9BQUYsRUFBRixDQUFjLE9BQU9sbEIsS0FBRzFHLENBQVY7QUFBWSxLQUFsTCxNQUFzTDtBQUFDLFVBQUdtRCxFQUFFeUIsT0FBRixDQUFVLFdBQVYsS0FBd0IsQ0FBQyxDQUE1QixFQUE4QjtBQUFDLFlBQUluRyxJQUFFLElBQU4sQ0FBVyxJQUFHO0FBQUNBLGNBQUVzQixFQUFFMndCLGtCQUFGLENBQXFCaHFCLENBQXJCLENBQUY7QUFBMEIsU0FBOUIsQ0FBOEIsT0FBTXhELENBQU4sRUFBUTtBQUFDLGlCQUFPLEtBQVA7QUFBYSxhQUFJMUUsSUFBRSxJQUFJSSxDQUFKLENBQU0sRUFBQ2tyQixLQUFJM21CLENBQUwsRUFBTixDQUFOLENBQXFCM0UsRUFBRTJCLElBQUYsQ0FBTzBHLENBQVAsRUFBVXJJLEVBQUVxc0IsWUFBRixDQUFlMXJCLENBQWYsRUFBa0IsT0FBT1gsRUFBRWt2QixNQUFGLENBQVNqdkIsQ0FBVCxDQUFQO0FBQW1CLE9BQWxLLE1BQXNLO0FBQUMsWUFBSUQsSUFBRSxJQUFJSSxDQUFKLENBQU0sRUFBQ2tyQixLQUFJM21CLENBQUwsRUFBTixDQUFOLENBQXFCM0UsRUFBRTJCLElBQUYsQ0FBTzBHLENBQVAsRUFBVXJJLEVBQUVxc0IsWUFBRixDQUFlMXJCLENBQWYsRUFBa0IsT0FBT1gsRUFBRWt2QixNQUFGLENBQVNobkIsQ0FBVCxDQUFQO0FBQW1CO0FBQUM7QUFBQztBQUFDLENBQTc5QyxDQUE4OUNnUSxLQUFLeWlCLEdBQUwsQ0FBU0MsR0FBVCxDQUFhdjNCLEtBQWIsR0FBbUIsVUFBU3JELENBQVQsRUFBVztBQUFDLE1BQUlXLElBQUVYLEVBQUVxZixLQUFGLENBQVEsR0FBUixDQUFOLENBQW1CLElBQUk1ZSxJQUFFLEVBQU4sQ0FBUyxJQUFJUCxDQUFKLEVBQU1RLENBQU4sRUFBUU4sQ0FBUixDQUFVLElBQUdPLEVBQUVJLE1BQUYsSUFBVSxDQUFWLElBQWFKLEVBQUVJLE1BQUYsSUFBVSxDQUExQixFQUE0QjtBQUFDLFVBQUssdURBQUw7QUFBNkQsT0FBRUosRUFBRSxDQUFGLENBQUYsQ0FBT0QsSUFBRUMsRUFBRSxDQUFGLENBQUYsQ0FBTyxJQUFHQSxFQUFFSSxNQUFGLElBQVUsQ0FBYixFQUFlO0FBQUNYLFFBQUVPLEVBQUUsQ0FBRixDQUFGO0FBQU8sS0FBRWc3QixTQUFGLEdBQVl6akIsS0FBS3lpQixHQUFMLENBQVNDLEdBQVQsQ0FBYVksa0JBQWIsQ0FBZ0MvVixXQUFXdmxCLENBQVgsQ0FBaEMsQ0FBWixDQUEyRE8sRUFBRW03QixVQUFGLEdBQWExakIsS0FBS3lpQixHQUFMLENBQVNDLEdBQVQsQ0FBYVksa0JBQWIsQ0FBZ0MvVixXQUFXL2tCLENBQVgsQ0FBaEMsQ0FBYixDQUE0REQsRUFBRW83QixRQUFGLEdBQVduWCxLQUFLcmlCLFNBQUwsQ0FBZTVCLEVBQUVrN0IsU0FBakIsRUFBMkIsSUFBM0IsRUFBZ0MsSUFBaEMsQ0FBWCxDQUFpRCxJQUFHbDdCLEVBQUVtN0IsVUFBRixJQUFjLElBQWpCLEVBQXNCO0FBQUNuN0IsTUFBRXE3QixTQUFGLEdBQVlyVyxXQUFXL2tCLENBQVgsQ0FBWjtBQUEwQixHQUFqRCxNQUFxRDtBQUFDRCxNQUFFcTdCLFNBQUYsR0FBWXBYLEtBQUtyaUIsU0FBTCxDQUFlNUIsRUFBRW03QixVQUFqQixFQUE0QixJQUE1QixFQUFpQyxJQUFqQyxDQUFaO0FBQW1ELE9BQUd4N0IsTUFBSVAsU0FBUCxFQUFpQjtBQUFDWSxNQUFFczdCLE1BQUYsR0FBU3hXLFVBQVVubEIsQ0FBVixDQUFUO0FBQXNCLFVBQU9LLENBQVA7QUFBUyxDQUF0Z0IsQ0FBdWdCeVgsS0FBS3lpQixHQUFMLENBQVNDLEdBQVQsQ0FBYW9CLFNBQWIsR0FBdUIsVUFBU3Q3QixDQUFULEVBQVdNLENBQVgsRUFBYTJCLENBQWIsRUFBZTtBQUFDLE1BQUl2QyxJQUFFOFgsSUFBTjtBQUFBLE1BQVdyWCxJQUFFVCxFQUFFdTZCLEdBQWY7QUFBQSxNQUFtQm41QixJQUFFWCxFQUFFKzVCLEdBQXZCO0FBQUEsTUFBMkJ0NUIsSUFBRUUsRUFBRWc2QixrQkFBL0I7QUFBQSxNQUFrRGo2QixJQUFFQyxFQUFFeTZCLE9BQXREO0FBQUEsTUFBOEQvN0IsSUFBRXNCLEVBQUUwNkIsYUFBbEUsQ0FBZ0YsSUFBSWo3QixJQUFFUCxFQUFFMmUsS0FBRixDQUFRLEdBQVIsQ0FBTixDQUFtQixJQUFJMWUsSUFBRU0sRUFBRSxDQUFGLENBQU4sQ0FBVyxJQUFJSCxJQUFFRyxFQUFFLENBQUYsQ0FBTixDQUFXLElBQUl1QixJQUFFN0IsSUFBRSxHQUFGLEdBQU1HLENBQVosQ0FBYyxJQUFJbUMsSUFBRXNpQixVQUFVdGtCLEVBQUUsQ0FBRixDQUFWLENBQU4sQ0FBc0IsSUFBSWhCLElBQUVxQixFQUFFbWtCLFdBQVc5a0IsQ0FBWCxDQUFGLENBQU4sQ0FBdUIsSUFBSVgsSUFBRXNCLEVBQUVta0IsV0FBVzNrQixDQUFYLENBQUYsQ0FBTixDQUF1QixJQUFHYixFQUFFcXJCLEdBQUYsS0FBUXpyQixTQUFYLEVBQXFCO0FBQUMsV0FBTyxLQUFQO0FBQWEsT0FBRzhDLEVBQUUyb0IsR0FBRixLQUFRenJCLFNBQVgsRUFBcUI7QUFBQyxVQUFLLG9DQUFMO0FBQTBDLE9BQUcsQ0FBQzBCLEVBQUV0QixFQUFFcXJCLEdBQUosRUFBUTNvQixFQUFFMm9CLEdBQVYsQ0FBSixFQUFtQjtBQUFDLFdBQU8sS0FBUDtBQUFhLE9BQUd0ckIsRUFBRW04QixHQUFGLEtBQVF0OEIsU0FBUixJQUFtQixRQUFPOEMsRUFBRXc1QixHQUFULE1BQWUsUUFBckMsRUFBOEM7QUFBQyxRQUFHLENBQUM1NkIsRUFBRXZCLEVBQUVtOEIsR0FBSixFQUFReDVCLEVBQUV3NUIsR0FBVixDQUFKLEVBQW1CO0FBQUMsYUFBTyxLQUFQO0FBQWE7QUFBQyxPQUFHbjhCLEVBQUVvOEIsR0FBRixLQUFRdjhCLFNBQVIsSUFBbUIsUUFBTzhDLEVBQUV5NUIsR0FBVCxNQUFlLFFBQXJDLEVBQThDO0FBQUMsUUFBRyxDQUFDNzZCLEVBQUV2QixFQUFFbzhCLEdBQUosRUFBUXo1QixFQUFFeTVCLEdBQVYsQ0FBSixFQUFtQjtBQUFDLGFBQU8sS0FBUDtBQUFhO0FBQUMsT0FBR3A4QixFQUFFcThCLEdBQUYsS0FBUXg4QixTQUFSLElBQW1CLFFBQU84QyxFQUFFMDVCLEdBQVQsTUFBZSxRQUFyQyxFQUE4QztBQUFDLFFBQUcsT0FBT3I4QixFQUFFcThCLEdBQVQsSUFBYyxRQUFqQixFQUEwQjtBQUFDLFVBQUcsQ0FBQzk2QixFQUFFdkIsRUFBRXE4QixHQUFKLEVBQVExNUIsRUFBRTA1QixHQUFWLENBQUosRUFBbUI7QUFBQyxlQUFPLEtBQVA7QUFBYTtBQUFDLEtBQTdELE1BQWlFO0FBQUMsVUFBRyxRQUFPcjhCLEVBQUVxOEIsR0FBVCxLQUFjLFFBQWpCLEVBQTBCO0FBQUMsWUFBRyxDQUFDbjhCLEVBQUVGLEVBQUVxOEIsR0FBSixFQUFRMTVCLEVBQUUwNUIsR0FBVixDQUFKLEVBQW1CO0FBQUMsaUJBQU8sS0FBUDtBQUFhO0FBQUM7QUFBQztBQUFDLE9BQUk1N0IsSUFBRUksRUFBRXk3QixPQUFGLENBQVVDLE1BQVYsRUFBTixDQUF5QixJQUFHNTVCLEVBQUU2NUIsUUFBRixLQUFhMzhCLFNBQWIsSUFBd0IsT0FBTzhDLEVBQUU2NUIsUUFBVCxLQUFvQixRQUEvQyxFQUF3RDtBQUFDLzdCLFFBQUVrQyxFQUFFNjVCLFFBQUo7QUFBYSxPQUFHNzVCLEVBQUU4NUIsV0FBRixLQUFnQjU4QixTQUFoQixJQUEyQixPQUFPOEMsRUFBRTg1QixXQUFULEtBQXVCLFFBQXJELEVBQThEO0FBQUM5NUIsTUFBRTg1QixXQUFGLEdBQWMsQ0FBZDtBQUFnQixPQUFHejhCLEVBQUVvUCxHQUFGLEtBQVF2UCxTQUFSLElBQW1CLE9BQU9HLEVBQUVvUCxHQUFULElBQWMsUUFBcEMsRUFBNkM7QUFBQyxRQUFHcFAsRUFBRW9QLEdBQUYsR0FBTXpNLEVBQUU4NUIsV0FBUixHQUFvQmg4QixDQUF2QixFQUF5QjtBQUFDLGFBQU8sS0FBUDtBQUFhO0FBQUMsT0FBR1QsRUFBRTA4QixHQUFGLEtBQVE3OEIsU0FBUixJQUFtQixPQUFPRyxFQUFFMDhCLEdBQVQsSUFBYyxRQUFwQyxFQUE2QztBQUFDLFFBQUdqOEIsSUFBRVQsRUFBRTA4QixHQUFGLEdBQU0vNUIsRUFBRTg1QixXQUFiLEVBQXlCO0FBQUMsYUFBTyxLQUFQO0FBQWE7QUFBQyxPQUFHejhCLEVBQUUyOEIsR0FBRixLQUFROThCLFNBQVIsSUFBbUIsT0FBT0csRUFBRTI4QixHQUFULElBQWMsUUFBcEMsRUFBNkM7QUFBQyxRQUFHbDhCLElBQUVULEVBQUUyOEIsR0FBRixHQUFNaDZCLEVBQUU4NUIsV0FBYixFQUF5QjtBQUFDLGFBQU8sS0FBUDtBQUFhO0FBQUMsT0FBR3o4QixFQUFFNDhCLEdBQUYsS0FBUS84QixTQUFSLElBQW1COEMsRUFBRWk2QixHQUFGLEtBQVEvOEIsU0FBOUIsRUFBd0M7QUFBQyxRQUFHRyxFQUFFNDhCLEdBQUYsS0FBUWo2QixFQUFFaTZCLEdBQWIsRUFBaUI7QUFBQyxhQUFPLEtBQVA7QUFBYTtBQUFDLE9BQUcsQ0FBQ3A3QixFQUFFMHRCLE1BQUYsQ0FBU3h1QixDQUFULEVBQVdNLENBQVgsRUFBYTJCLEVBQUUyb0IsR0FBZixDQUFKLEVBQXdCO0FBQUMsV0FBTyxLQUFQO0FBQWEsVUFBTyxJQUFQO0FBQVksQ0FBbnZDLENBQW92Q3BULEtBQUt5aUIsR0FBTCxDQUFTQyxHQUFULENBQWFzQixhQUFiLEdBQTJCLFVBQVN6N0IsQ0FBVCxFQUFXUyxDQUFYLEVBQWE7QUFBQyxNQUFJUCxJQUFFdVgsS0FBS3lpQixHQUFMLENBQVNDLEdBQVQsQ0FBYXFCLE9BQW5CLENBQTJCLElBQUd4N0IsTUFBSSxJQUFQLEVBQVk7QUFBQyxXQUFPLEtBQVA7QUFBYSxPQUFHLFFBQU9BLENBQVAseUNBQU9BLENBQVAsT0FBVyxRQUFkLEVBQXVCO0FBQUMsV0FBTyxLQUFQO0FBQWEsT0FBRyxPQUFPQSxFQUFFTSxNQUFULEtBQWtCLFFBQXJCLEVBQThCO0FBQUMsV0FBTyxLQUFQO0FBQWEsUUFBSSxJQUFJWCxJQUFFLENBQVYsRUFBWUEsSUFBRUssRUFBRU0sTUFBaEIsRUFBdUJYLEdBQXZCLEVBQTJCO0FBQUMsUUFBRyxDQUFDTyxFQUFFRixFQUFFTCxDQUFGLENBQUYsRUFBT2MsQ0FBUCxDQUFKLEVBQWM7QUFBQyxhQUFPLEtBQVA7QUFBYTtBQUFDLFVBQU8sSUFBUDtBQUFZLENBQXBQLENBQXFQZ1gsS0FBS3lpQixHQUFMLENBQVNDLEdBQVQsQ0FBYXFCLE9BQWIsR0FBcUIsVUFBUzc3QixDQUFULEVBQVdLLENBQVgsRUFBYTtBQUFDLE1BQUdBLE1BQUksSUFBUCxFQUFZO0FBQUMsV0FBTyxLQUFQO0FBQWEsT0FBRyxRQUFPQSxDQUFQLHlDQUFPQSxDQUFQLE9BQVcsUUFBZCxFQUF1QjtBQUFDLFdBQU8sS0FBUDtBQUFhLE9BQUcsT0FBT0EsRUFBRU0sTUFBVCxLQUFrQixRQUFyQixFQUE4QjtBQUFDLFdBQU8sS0FBUDtBQUFhLFFBQUksSUFBSUosSUFBRSxDQUFWLEVBQVlBLElBQUVGLEVBQUVNLE1BQWhCLEVBQXVCSixHQUF2QixFQUEyQjtBQUFDLFFBQUdGLEVBQUVFLENBQUYsS0FBTVAsQ0FBVCxFQUFXO0FBQUMsYUFBTyxJQUFQO0FBQVk7QUFBQyxVQUFPLEtBQVA7QUFBYSxDQUFoTixDQUFpTjhYLEtBQUt5aUIsR0FBTCxDQUFTQyxHQUFULENBQWFhLGFBQWIsR0FBMkIsRUFBQ29CLE9BQU0sWUFBUCxFQUFvQkMsT0FBTSxZQUExQixFQUF1Q0MsT0FBTSxZQUE3QyxFQUEwREMsT0FBTSxlQUFoRSxFQUFnRkMsT0FBTSxlQUF0RixFQUFzR0MsT0FBTSxlQUE1RyxFQUE0SEMsT0FBTSxpQkFBbEksRUFBb0pDLE9BQU0saUJBQTFKLEVBQTRLQyxPQUFNLHNCQUFsTCxFQUF5TUMsT0FBTSxzQkFBL00sRUFBc09DLE9BQU0sc0JBQTVPLEVBQW1RQyxNQUFLLE1BQXhRLEVBQTNCLENBQTRTdGxCLEtBQUt5aUIsR0FBTCxDQUFTQyxHQUFULENBQWFDLGdCQUFiLEdBQThCLFVBQVNsNkIsQ0FBVCxFQUFXRixDQUFYLEVBQWFMLENBQWIsRUFBZTtBQUFDLE1BQUlNLElBQUUsSUFBTixDQUFXLElBQUc7QUFBQ0EsUUFBRXFjLFVBQVVwYyxDQUFWLENBQUYsQ0FBZSxJQUFHLFFBQU9ELENBQVAseUNBQU9BLENBQVAsTUFBVSxRQUFiLEVBQXNCO0FBQUMsYUFBTyxDQUFQO0FBQVMsU0FBR0EsRUFBRUosV0FBRixLQUFnQm1KLEtBQW5CLEVBQXlCO0FBQUMsYUFBTyxDQUFQO0FBQVMsU0FBR2hKLENBQUgsRUFBSztBQUFDQSxRQUFFTCxDQUFGLElBQUtNLENBQUw7QUFBTyxZQUFPLENBQVA7QUFBUyxHQUE1RyxDQUE0RyxPQUFNUSxDQUFOLEVBQVE7QUFBQyxXQUFPLENBQVA7QUFBUztBQUFDLENBQXhMLENBQXlMZ1gsS0FBS3lpQixHQUFMLENBQVNDLEdBQVQsQ0FBYVksa0JBQWIsR0FBZ0MsVUFBUy82QixDQUFULEVBQVc7QUFBQyxNQUFJRSxJQUFFLElBQU4sQ0FBVyxJQUFHO0FBQUNBLFFBQUVvYyxVQUFVdGMsQ0FBVixDQUFGLENBQWUsSUFBRyxRQUFPRSxDQUFQLHlDQUFPQSxDQUFQLE1BQVUsUUFBYixFQUFzQjtBQUFDLGFBQU8sSUFBUDtBQUFZLFNBQUdBLEVBQUVMLFdBQUYsS0FBZ0JtSixLQUFuQixFQUF5QjtBQUFDLGFBQU8sSUFBUDtBQUFZLFlBQU85SSxDQUFQO0FBQVMsR0FBckcsQ0FBcUcsT0FBTU8sQ0FBTixFQUFRO0FBQUMsV0FBTyxJQUFQO0FBQVk7QUFBQyxDQUFsTCxDQUFtTGdYLEtBQUt5aUIsR0FBTCxDQUFTQyxHQUFULENBQWE2QywrQkFBYixHQUE2QyxVQUFTaDlCLENBQVQsRUFBVztBQUFDLE1BQUlTLElBQUVULEVBQUV3YyxLQUFGLENBQVEseUJBQVIsQ0FBTixDQUF5QyxJQUFHL2IsS0FBRyxJQUFOLEVBQVc7QUFBQyxVQUFLLHlEQUFMO0FBQStELFVBQU9BLEVBQUUsQ0FBRixDQUFQO0FBQVksQ0FBekwsQ0FBMExnWCxLQUFLeWlCLEdBQUwsQ0FBU0MsR0FBVCxDQUFhOEMsZ0JBQWIsR0FBOEIsVUFBU3Q5QixDQUFULEVBQVc7QUFBQyxNQUFHQSxFQUFFMjBCLEdBQUYsS0FBUSxLQUFSLElBQWUzMEIsRUFBRTIwQixHQUFGLEtBQVEsSUFBdkIsSUFBNkIzMEIsRUFBRTIwQixHQUFGLEtBQVEsS0FBeEMsRUFBOEM7QUFBQyxVQUFLLHlDQUFMO0FBQStDLE9BQUk3ekIsSUFBRSxHQUFOLENBQVUsSUFBR2QsRUFBRTIwQixHQUFGLEtBQVEsS0FBWCxFQUFpQjtBQUFDLFFBQUcsT0FBTzMwQixFQUFFa0IsQ0FBVCxJQUFZLFFBQVosSUFBc0IsT0FBT2xCLEVBQUVNLENBQVQsSUFBWSxRQUFyQyxFQUE4QztBQUFDLFlBQUssaUNBQUw7QUFBdUMsVUFBRyxVQUFRTixFQUFFTSxDQUFWLEdBQVksSUFBZixDQUFvQlEsS0FBRyxZQUFVZCxFQUFFMjBCLEdBQVosR0FBZ0IsSUFBbkIsQ0FBd0I3ekIsS0FBRyxVQUFRZCxFQUFFa0IsQ0FBVixHQUFZLElBQWY7QUFBb0IsR0FBeEssTUFBNEs7QUFBQyxRQUFHbEIsRUFBRTIwQixHQUFGLEtBQVEsSUFBWCxFQUFnQjtBQUFDLFVBQUcsT0FBTzMwQixFQUFFazFCLEdBQVQsSUFBYyxRQUFkLElBQXdCLE9BQU9sMUIsRUFBRW9FLENBQVQsSUFBWSxRQUFwQyxJQUE4QyxPQUFPcEUsRUFBRStILENBQVQsSUFBWSxRQUE3RCxFQUFzRTtBQUFDLGNBQUsscUNBQUw7QUFBMkMsWUFBRyxZQUFVL0gsRUFBRWsxQixHQUFaLEdBQWdCLElBQW5CLENBQXdCcDBCLEtBQUcsWUFBVWQsRUFBRTIwQixHQUFaLEdBQWdCLElBQW5CLENBQXdCN3pCLEtBQUcsVUFBUWQsRUFBRW9FLENBQVYsR0FBWSxJQUFmLENBQW9CdEQsS0FBRyxVQUFRZCxFQUFFK0gsQ0FBVixHQUFZLElBQWY7QUFBb0IsS0FBM04sTUFBK047QUFBQyxVQUFHL0gsRUFBRTIwQixHQUFGLEtBQVEsS0FBWCxFQUFpQjtBQUFDLFlBQUcsT0FBTzMwQixFQUFFYSxDQUFULElBQVksUUFBZixFQUF3QjtBQUFDLGdCQUFLLHNDQUFMO0FBQTRDLGNBQUcsWUFBVWIsRUFBRTIwQixHQUFaLEdBQWdCLElBQW5CLENBQXdCN3pCLEtBQUcsVUFBUWQsRUFBRWEsQ0FBVixHQUFZLElBQWY7QUFBb0I7QUFBQztBQUFDLE9BQUlSLElBQUVnWSxVQUFVdlgsQ0FBVixDQUFOLENBQW1CLElBQUlQLElBQUV1WCxLQUFLZixNQUFMLENBQVlpQixJQUFaLENBQWlCSSxPQUFqQixDQUF5Qi9YLENBQXpCLEVBQTJCLFFBQTNCLENBQU4sQ0FBMkMsSUFBSUMsSUFBRTRrQixVQUFVM2tCLENBQVYsQ0FBTixDQUFtQixPQUFPRCxDQUFQO0FBQVMsQ0FBOXZCLENBQSt2QndYLEtBQUt5aUIsR0FBTCxDQUFTMkIsT0FBVCxHQUFpQixFQUFqQixDQUFvQnBrQixLQUFLeWlCLEdBQUwsQ0FBUzJCLE9BQVQsQ0FBaUJxQixHQUFqQixHQUFxQixVQUFTaDlCLENBQVQsRUFBVztBQUFDLE1BQUlGLElBQUV5WCxLQUFLeWlCLEdBQUwsQ0FBUzJCLE9BQWY7QUFBQSxNQUF1Qmw4QixJQUFFSyxFQUFFODdCLE1BQTNCO0FBQUEsTUFBa0NyN0IsSUFBRVQsRUFBRW05QixPQUF0QyxDQUE4QyxJQUFHajlCLEtBQUcsS0FBTixFQUFZO0FBQUMsV0FBT1AsR0FBUDtBQUFXLEdBQXhCLE1BQTRCO0FBQUMsUUFBR08sS0FBRyxhQUFOLEVBQW9CO0FBQUMsYUFBT1AsTUFBSSxLQUFHLEVBQWQ7QUFBaUIsS0FBdEMsTUFBMEM7QUFBQyxVQUFHTyxLQUFHLFlBQU4sRUFBbUI7QUFBQyxlQUFPUCxNQUFJLEtBQUcsRUFBSCxHQUFNLEVBQWpCO0FBQW9CLE9BQXhDLE1BQTRDO0FBQUMsWUFBR08sS0FBRyxjQUFOLEVBQXFCO0FBQUMsaUJBQU9QLE1BQUksS0FBRyxFQUFILEdBQU0sRUFBTixHQUFTLEVBQXBCO0FBQXVCLFNBQTdDLE1BQWlEO0FBQUMsY0FBR08sS0FBRyxhQUFOLEVBQW9CO0FBQUMsbUJBQU9QLE1BQUksS0FBRyxFQUFILEdBQU0sRUFBTixHQUFTLEdBQXBCO0FBQXdCLFdBQTdDLE1BQWlEO0FBQUMsZ0JBQUdPLEVBQUVzYyxLQUFGLENBQVEsSUFBUixDQUFILEVBQWlCO0FBQUMscUJBQU8vYixFQUFFUCxDQUFGLENBQVA7QUFBWSxhQUE5QixNQUFrQztBQUFDLGtCQUFHQSxFQUFFc2MsS0FBRixDQUFRLFVBQVIsQ0FBSCxFQUF1QjtBQUFDLHVCQUFPM1osU0FBUzNDLENBQVQsQ0FBUDtBQUFtQjtBQUFDO0FBQUM7QUFBQztBQUFDO0FBQUM7QUFBQyxTQUFLLHlCQUF1QkEsQ0FBNUI7QUFBOEIsQ0FBMVosQ0FBMlp1WCxLQUFLeWlCLEdBQUwsQ0FBUzJCLE9BQVQsQ0FBaUJzQixPQUFqQixHQUF5QixVQUFTMThCLENBQVQsRUFBVztBQUFDLFNBQU8wbEIsVUFBVTFsQixDQUFWLENBQVA7QUFBb0IsQ0FBekQsQ0FBMERnWCxLQUFLeWlCLEdBQUwsQ0FBUzJCLE9BQVQsQ0FBaUJDLE1BQWpCLEdBQXdCLFlBQVU7QUFBQyxNQUFJcjdCLElBQUUsQ0FBQyxFQUFFLElBQUkrVixJQUFKLEtBQVcsSUFBYixDQUFQLENBQTBCLE9BQU8vVixDQUFQO0FBQVMsQ0FBdEUsQ0FBdUVnWCxLQUFLeWlCLEdBQUwsQ0FBUzJCLE9BQVQsQ0FBaUJ1QixpQkFBakIsR0FBbUMsVUFBUzM4QixDQUFULEVBQVc7QUFBQyxNQUFJVCxJQUFFLElBQUl3VyxJQUFKLENBQVMvVixJQUFFLElBQVgsQ0FBTixDQUF1QixPQUFPVCxFQUFFcTlCLFdBQUYsRUFBUDtBQUF1QixDQUE3RixDQUE4RjVsQixLQUFLeWlCLEdBQUwsQ0FBUzJCLE9BQVQsQ0FBaUJ5QixZQUFqQixHQUE4QixVQUFTcjlCLENBQVQsRUFBVztBQUFDLE1BQUlJLElBQUUsSUFBSW1XLElBQUosQ0FBU3ZXLElBQUUsSUFBWCxDQUFOO0FBQUEsTUFBdUJULElBQUUsQ0FBQyxTQUFPYSxFQUFFaW1CLGNBQUYsRUFBUixFQUE0QmprQixLQUE1QixDQUFrQyxDQUFDLENBQW5DLENBQXpCO0FBQUEsTUFBK0Q5QyxJQUFFLENBQUMsUUFBTWMsRUFBRWttQixXQUFGLEtBQWdCLENBQXRCLENBQUQsRUFBMkJsa0IsS0FBM0IsQ0FBaUMsQ0FBQyxDQUFsQyxDQUFqRTtBQUFBLE1BQXNHckMsSUFBRSxDQUFDLE9BQUtLLEVBQUVtbUIsVUFBRixFQUFOLEVBQXNCbmtCLEtBQXRCLENBQTRCLENBQUMsQ0FBN0IsQ0FBeEc7QUFBQSxNQUF3STVCLElBQUUsQ0FBQyxPQUFLSixFQUFFb21CLFdBQUYsRUFBTixFQUF1QnBrQixLQUF2QixDQUE2QixDQUFDLENBQTlCLENBQTFJO0FBQUEsTUFBMktuQyxJQUFFLENBQUMsT0FBS0csRUFBRXFtQixhQUFGLEVBQU4sRUFBeUJya0IsS0FBekIsQ0FBK0IsQ0FBQyxDQUFoQyxDQUE3SztBQUFBLE1BQWdONUMsSUFBRSxDQUFDLE9BQUtZLEVBQUVzbUIsYUFBRixFQUFOLEVBQXlCdGtCLEtBQXpCLENBQStCLENBQUMsQ0FBaEMsQ0FBbE4sQ0FBcVAsT0FBTzdDLElBQUVELENBQUYsR0FBSVMsQ0FBSixHQUFNUyxDQUFOLEdBQVFQLENBQVIsR0FBVVQsQ0FBVixHQUFZLEdBQW5CO0FBQXVCLENBQXRUO1FBQ3Q0UHlYLFksR0FBQUEsWTtRQUNBWCxhLEdBQUFBLGE7UUFFQW5OLFUsR0FBQUEsVTtRQUNBNk8sTSxHQUFBQSxNO0lBQ01zbEIsSSxHQUFTOWxCLEtBQUtmLE0sQ0FBZDZtQixJOztJQUNBaFAsRyxHQUFROVcsS0FBS2YsTSxDQUFiNlgsRzs7SUFDQXBCLFMsR0FBYzFWLEtBQUtmLE0sQ0FBbkJ5VyxTOztJQUNBelYsYSxHQUFtQkQsS0FBS2YsTSxDQUF4QmdCLGE7O0lBQ0E2VSxHLEdBQVE5VSxLQUFLZixNLENBQWI2VixHOztJQUNBNEMsTSxHQUFZMVgsS0FBS2YsTSxDQUFqQnlZLE07O1FBQ04zQixPLEdBQUFBLE87UUFDQTNLLE8sR0FBQUEsTztRQUNBaVMsSSxHQUFBQSxJO1FBQ0FwMEIsUSxHQUFBQSxROztBQUVUOztRQUNTbUksUSxHQUFBQSxRO1FBQ0FFLE8sR0FBQUEsTzs7QUFFVDs7UUFDU3NiLEssR0FBQUEsSztRQUNBQyxLLEdBQUFBLEs7UUFDQUMsTyxHQUFBQSxPO1FBQ0E1RCxNLEdBQUFBLE07UUFDQTZELE0sR0FBQUEsTTtRQUNBQyxPLEdBQUFBLE87UUFDQUUsTyxHQUFBQSxPO1FBQ0FELFMsR0FBQUEsUztRQUNBRSxTLEdBQUFBLFM7UUFDQWpjLE8sR0FBQUEsTztRQUNBa2MsUyxHQUFBQSxTO1FBQ0FDLFMsR0FBQUEsUztRQUNBQyxVLEdBQUFBLFU7UUFDQUMsVSxHQUFBQSxVO1FBQ0FLLFMsR0FBQUEsUztRQUNBQyxTLEdBQUFBLFM7UUFDQTdGLFMsR0FBQUEsUztRQUNBc0UsUyxHQUFBQSxTO1FBQ0FqTSxTLEdBQUFBLFM7UUFDQUUsUyxHQUFBQSxTO1FBQ0F1TixRLEdBQUFBLFE7UUFDQUMsVSxHQUFBQSxVO1FBQ0FDLFUsR0FBQUEsVTtRQUNBekksUSxHQUFBQSxRO1FBQ0EwSSxRLEdBQUFBLFE7UUFDQUMsZ0IsR0FBQUEsZ0I7UUFDQUksZ0IsR0FBQUEsZ0I7UUFDQUcsVSxHQUFBQSxVO1FBQ0FDLFMsR0FBQUEsUztRQUNBQyxVLEdBQUFBLFU7UUFDQUMsVSxHQUFBQSxVO1FBQ0FuQixXLEdBQUFBLFc7UUFDQUUsVyxHQUFBQSxXO1FBQ0F5QixTLEdBQUFBLFM7UUFDQUUsUyxHQUFBQSxTO1FBQ0FDLE8sR0FBQUEsTztRQUNBQyxPLEdBQUFBLE87UUFDQTlCLHFCLEdBQUFBLHFCO1FBQ0ErQixjLEdBQUFBLGM7UUFDQUMsYSxHQUFBQSxhO1FBQ0FLLFcsR0FBQUEsVztRQUNBQyxjLEdBQUFBLGM7UUFDQUUsVSxHQUFBQSxVOztBQUVUOztRQUNTbFEsSSxHQUFBQSxJOztBQUNULElBQU0rbEIsVUFBVy9sQixLQUFLZixNQUF0QjtRQUNvQkEsTSxHQUFYOG1CLE87WUFDZS9sQixJO0lBQVRrRixJLFNBQUFBLEk7O2FBQ1FsRixJO0lBQVJ5aUIsRyxVQUFBQSxHOzthQUNTemlCLEk7SUFBVHBZLEksVUFBQUEsSTs7Ozs7Ozs7Ozs7Ozs7QUMxTGYsOENBQWE7O0FBRWIsbUJBQU8sQ0FBQyxvREFBYzs7QUFFdEIsbUJBQU8sQ0FBQyw4R0FBNkI7O0FBRXJDLG1CQUFPLENBQUMsNEVBQTBCOztBQUVsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQyxFOzs7Ozs7Ozs7Ozs7QUMzQkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxXQUFXO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsa0JBQWtCO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FDL3RCWTs7QUFFWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDLFNBQVM7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQyxVQUFVO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVZOztBQUVaLGFBQWEsbUJBQU8sQ0FBQyxvREFBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsZ0RBQVM7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLG9FQUFTOztBQUUvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1EQUFtRDtBQUN4RTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFVBQVU7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx1Q0FBdUMsU0FBUztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxFQUFFO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHdCQUF3QixRQUFRO0FBQ2hDO0FBQ0EscUJBQXFCLGVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxtQkFBbUIsY0FBYztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxPQUFPO0FBQzlEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjtBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQixRQUFRO0FBQzdCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsWUFBWTtBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7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QSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCw4REFBOEQ7QUFDOUQ7QUFDQSxLQUFLO0FBQ0wsd0VBQXdFO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCx5QkFBeUIsc0JBQXNCLEVBQUUsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixhQUFhO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwQkFBMEI7QUFDaEQsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FB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QyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyx3R0FBcUM7QUFDN0MsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxvR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQywwR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxvR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw0RUFBdUI7QUFDL0IsbUJBQU8sQ0FBQyxvRUFBbUI7QUFDM0IsbUJBQU8sQ0FBQyxvRUFBbUI7QUFDM0IsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxnSEFBeUM7QUFDakQsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxvR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQyxvR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvSUFBbUQ7QUFDM0QsbUJBQU8sQ0FBQyw4R0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyx3R0FBcUM7QUFDN0MsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSEFBMEM7QUFDbEQsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4R0FBd0M7QUFDaEQsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3R0FBcUM7QUFDN0MsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxvSUFBbUQ7QUFDM0QsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQywwRUFBc0I7QUFDOUIsbUJBQU8sQ0FBQywwRUFBc0I7QUFDOUIsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FB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QUFOeEI7Ozs7OztBQUVBOzs7O0FBSWUsU0FBU0EsTUFBVCxHQUFrQjtBQUMvQixTQUFPLG1CQUFRbWEsT0FBUixDQUFnQixJQUFoQixFQUFzQixFQUF0QixDQUFQO0FBQ0QiLCJmaWxlIjoib2lkYy1jbGllbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL3NyYy9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50IH0gZnJvbSAnLi9zcmMvT2lkY0NsaWVudC5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vc3JjL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9zcmMvV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBJbk1lbW9yeVdlYlN0b3JhZ2UgfSBmcm9tICcuL3NyYy9Jbk1lbW9yeVdlYlN0b3JhZ2UuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlciB9IGZyb20gJy4vc3JjL1VzZXJNYW5hZ2VyLmpzJztcclxuaW1wb3J0IHsgQWNjZXNzVG9rZW5FdmVudHMgfSBmcm9tICcuL3NyYy9BY2Nlc3NUb2tlbkV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vc3JjL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IENvcmRvdmFQb3B1cE5hdmlnYXRvciB9IGZyb20gJy4vc3JjL0NvcmRvdmFQb3B1cE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IENvcmRvdmFJRnJhbWVOYXZpZ2F0b3IgfSBmcm9tICcuL3NyYy9Db3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzJztcclxuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9zcmMvVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL3NyYy9TZXNzaW9uTW9uaXRvci5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vc3JjL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL3NyYy9Vc2VyLmpzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIExvZyxcclxuICAgIE9pZGNDbGllbnQsXHJcbiAgICBPaWRjQ2xpZW50U2V0dGluZ3MsXHJcbiAgICBXZWJTdG9yYWdlU3RhdGVTdG9yZSxcclxuICAgIEluTWVtb3J5V2ViU3RvcmFnZSxcclxuICAgIFVzZXJNYW5hZ2VyLFxyXG4gICAgQWNjZXNzVG9rZW5FdmVudHMsXHJcbiAgICBNZXRhZGF0YVNlcnZpY2UsXHJcbiAgICBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IsXHJcbiAgICBDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLFxyXG4gICAgQ2hlY2tTZXNzaW9uSUZyYW1lLFxyXG4gICAgVG9rZW5SZXZvY2F0aW9uQ2xpZW50LFxyXG4gICAgU2Vzc2lvbk1vbml0b3IsXHJcbiAgICBHbG9iYWwsXHJcbiAgICBVc2VyXHJcbn07XHJcbiIsIi8qXHJcbiAqIGpzcnNhc2lnbihhbGwpIDguMC4xMiAoMjAxOC0wNC0yMikgKGMpIDIwMTAtMjAxOCBLZW5qaSBVcnVzaGltYSB8IGtqdXIuZ2l0aHViLmNvbS9qc3JzYXNpZ24vbGljZW5zZVxyXG4gKi9cclxuXHJcbnZhciBuYXZpZ2F0b3IgPSB7fTtcclxubmF2aWdhdG9yLnVzZXJBZ2VudCA9IGZhbHNlO1xyXG5cclxudmFyIHdpbmRvdyA9IHt9O1xyXG5cbi8qIVxyXG5Db3B5cmlnaHQgKGMpIDIwMTEsIFlhaG9vISBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkNvZGUgbGljZW5zZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlOlxyXG5odHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1sXHJcbnZlcnNpb246IDIuOS4wXHJcbiovXHJcbmlmKFlBSE9PPT09dW5kZWZpbmVkKXt2YXIgWUFIT089e319WUFIT08ubGFuZz17ZXh0ZW5kOmZ1bmN0aW9uKGcsaCxmKXtpZighaHx8IWcpe3Rocm93IG5ldyBFcnJvcihcIllBSE9PLmxhbmcuZXh0ZW5kIGZhaWxlZCwgcGxlYXNlIGNoZWNrIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQuXCIpfXZhciBkPWZ1bmN0aW9uKCl7fTtkLnByb3RvdHlwZT1oLnByb3RvdHlwZTtnLnByb3RvdHlwZT1uZXcgZCgpO2cucHJvdG90eXBlLmNvbnN0cnVjdG9yPWc7Zy5zdXBlcmNsYXNzPWgucHJvdG90eXBlO2lmKGgucHJvdG90eXBlLmNvbnN0cnVjdG9yPT1PYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yKXtoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ofWlmKGYpe3ZhciBiO2ZvcihiIGluIGYpe2cucHJvdG90eXBlW2JdPWZbYl19dmFyIGU9ZnVuY3Rpb24oKXt9LGM9W1widG9TdHJpbmdcIixcInZhbHVlT2ZcIl07dHJ5e2lmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKXtlPWZ1bmN0aW9uKGosaSl7Zm9yKGI9MDtiPGMubGVuZ3RoO2I9YisxKXt2YXIgbD1jW2JdLGs9aVtsXTtpZih0eXBlb2Ygaz09PVwiZnVuY3Rpb25cIiYmayE9T2JqZWN0LnByb3RvdHlwZVtsXSl7altsXT1rfX19fX1jYXRjaChhKXt9ZShnLnByb3RvdHlwZSxmKX19fTtcbi8qISBDcnlwdG9KUyB2My4xLjIgY29yZS1maXguanNcclxuICogY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbiAqIChjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBjb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiAqIFRISVMgSVMgRklYIG9mICdjb3JlLmpzJyB0byBmaXggSG1hYyBpc3N1ZS5cclxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvaXNzdWVzL2RldGFpbD9pZD04NFxyXG4gKiBodHRwczovL2NyeXB0by1qcy5nb29nbGVjb2RlLmNvbS9zdm4taGlzdG9yeS9yNjY3L2JyYW5jaGVzLzMueC9zcmMvY29yZS5qc1xyXG4gKi9cclxudmFyIENyeXB0b0pTPUNyeXB0b0pTfHwoZnVuY3Rpb24oZSxnKXt2YXIgYT17fTt2YXIgYj1hLmxpYj17fTt2YXIgaj1iLkJhc2U9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe31yZXR1cm57ZXh0ZW5kOmZ1bmN0aW9uKHApe24ucHJvdG90eXBlPXRoaXM7dmFyIG89bmV3IG4oKTtpZihwKXtvLm1peEluKHApfWlmKCFvLmhhc093blByb3BlcnR5KFwiaW5pdFwiKSl7by5pbml0PWZ1bmN0aW9uKCl7by4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fW8uaW5pdC5wcm90b3R5cGU9bztvLiRzdXBlcj10aGlzO3JldHVybiBvfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgbz10aGlzLmV4dGVuZCgpO28uaW5pdC5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIG99LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKHApe2Zvcih2YXIgbyBpbiBwKXtpZihwLmhhc093blByb3BlcnR5KG8pKXt0aGlzW29dPXBbb119fWlmKHAuaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSl7dGhpcy50b1N0cmluZz1wLnRvU3RyaW5nfX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyl9fX0oKSk7dmFyIGw9Yi5Xb3JkQXJyYXk9ai5leHRlbmQoe2luaXQ6ZnVuY3Rpb24obyxuKXtvPXRoaXMud29yZHM9b3x8W107aWYobiE9Zyl7dGhpcy5zaWdCeXRlcz1ufWVsc2V7dGhpcy5zaWdCeXRlcz1vLmxlbmd0aCo0fX0sdG9TdHJpbmc6ZnVuY3Rpb24obil7cmV0dXJuKG58fGgpLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBxPXRoaXMud29yZHM7dmFyIHA9dC53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO3ZhciBzPXQuc2lnQnl0ZXM7dGhpcy5jbGFtcCgpO2lmKG4lNCl7Zm9yKHZhciByPTA7cjxzO3IrKyl7dmFyIG89KHBbcj4+PjJdPj4+KDI0LShyJTQpKjgpKSYyNTU7cVsobityKT4+PjJdfD1vPDwoMjQtKChuK3IpJTQpKjgpfX1lbHNle2Zvcih2YXIgcj0wO3I8cztyKz00KXtxWyhuK3IpPj4+Ml09cFtyPj4+Ml19fXRoaXMuc2lnQnl0ZXMrPXM7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKCl7dmFyIG89dGhpcy53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO29bbj4+PjJdJj00Mjk0OTY3Mjk1PDwoMzItKG4lNCkqOCk7by5sZW5ndGg9ZS5jZWlsKG4vNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24ud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKTtyZXR1cm4gbn0scmFuZG9tOmZ1bmN0aW9uKHApe3ZhciBvPVtdO2Zvcih2YXIgbj0wO248cDtuKz00KXtvLnB1c2goKGUucmFuZG9tKCkqNDI5NDk2NzI5Nil8MCl9cmV0dXJuIG5ldyBsLmluaXQobyxwKX19KTt2YXIgbT1hLmVuYz17fTt2YXIgaD1tLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKHApe3ZhciByPXAud29yZHM7dmFyIG89cC5zaWdCeXRlczt2YXIgcT1bXTtmb3IodmFyIG49MDtuPG87bisrKXt2YXIgcz0ocltuPj4+Ml0+Pj4oMjQtKG4lNCkqOCkpJjI1NTtxLnB1c2goKHM+Pj40KS50b1N0cmluZygxNikpO3EucHVzaCgocyYxNSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcS5qb2luKFwiXCIpfSxwYXJzZTpmdW5jdGlvbihwKXt2YXIgbj1wLmxlbmd0aDt2YXIgcT1bXTtmb3IodmFyIG89MDtvPG47bys9Mil7cVtvPj4+M118PXBhcnNlSW50KHAuc3Vic3RyKG8sMiksMTYpPDwoMjQtKG8lOCkqNCl9cmV0dXJuIG5ldyBsLmluaXQocSxuLzIpfX07dmFyIGQ9bS5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihxKXt2YXIgcj1xLndvcmRzO3ZhciBwPXEuc2lnQnl0ZXM7dmFyIG49W107Zm9yKHZhciBvPTA7bzxwO28rKyl7dmFyIHM9KHJbbz4+PjJdPj4+KDI0LShvJTQpKjgpKSYyNTU7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocykpfXJldHVybiBuLmpvaW4oXCJcIil9LHBhcnNlOmZ1bmN0aW9uKHApe3ZhciBuPXAubGVuZ3RoO3ZhciBxPVtdO2Zvcih2YXIgbz0wO288bjtvKyspe3Fbbz4+PjJdfD0ocC5jaGFyQ29kZUF0KG8pJjI1NSk8PCgyNC0obyU0KSo4KX1yZXR1cm4gbmV3IGwuaW5pdChxLG4pfX07dmFyIGM9bS5VdGY4PXtzdHJpbmdpZnk6ZnVuY3Rpb24obil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGQuc3RyaW5naWZ5KG4pKSl9Y2F0Y2gobyl7dGhyb3cgbmV3IEVycm9yKFwiTWFsZm9ybWVkIFVURi04IGRhdGFcIil9fSxwYXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gZC5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQobikpKX19O3ZhciBpPWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobT1qLmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBsLmluaXQoKTt0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24obil7aWYodHlwZW9mIG49PVwic3RyaW5nXCIpe249Yy5wYXJzZShuKX10aGlzLl9kYXRhLmNvbmNhdChuKTt0aGlzLl9uRGF0YUJ5dGVzKz1uLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbih3KXt2YXIgcT10aGlzLl9kYXRhO3ZhciB4PXEud29yZHM7dmFyIG49cS5zaWdCeXRlczt2YXIgdD10aGlzLmJsb2NrU2l6ZTt2YXIgdj10KjQ7dmFyIHU9bi92O2lmKHcpe3U9ZS5jZWlsKHUpfWVsc2V7dT1lLm1heCgodXwwKS10aGlzLl9taW5CdWZmZXJTaXplLDApfXZhciBzPXUqdDt2YXIgcj1lLm1pbihzKjQsbik7aWYocyl7Zm9yKHZhciBwPTA7cDxzO3ArPXQpe3RoaXMuX2RvUHJvY2Vzc0Jsb2NrKHgscCl9dmFyIG89eC5zcGxpY2UoMCxzKTtxLnNpZ0J5dGVzLT1yfXJldHVybiBuZXcgbC5pbml0KG8scil9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24uX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpO3JldHVybiBufSxfbWluQnVmZmVyU2l6ZTowfSk7dmFyIGY9Yi5IYXNoZXI9aS5leHRlbmQoe2NmZzpqLmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24obil7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKG4pO3RoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtpLnJlc2V0LmNhbGwodGhpcyk7dGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24obil7dGhpcy5fYXBwZW5kKG4pO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24obil7aWYobil7dGhpcy5fYXBwZW5kKG4pfXZhciBvPXRoaXMuX2RvRmluYWxpemUoKTtyZXR1cm4gb30sYmxvY2tTaXplOjUxMi8zMixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihwLG8pe3JldHVybiBuZXcgbi5pbml0KG8pLmZpbmFsaXplKHApfX0sX2NyZWF0ZUhtYWNIZWxwZXI6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHAsbyl7cmV0dXJuIG5ldyBrLkhNQUMuaW5pdChuLG8pLmZpbmFsaXplKHApfX19KTt2YXIgaz1hLmFsZ289e307cmV0dXJuIGF9KE1hdGgpKTtcbi8qXHJcbkNyeXB0b0pTIHYzLjEuMiB4NjQtY29yZS1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbihnKXt2YXIgYT1DcnlwdG9KUyxmPWEubGliLGU9Zi5CYXNlLGg9Zi5Xb3JkQXJyYXksYT1hLng2ND17fTthLldvcmQ9ZS5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oYixjKXt0aGlzLmhpZ2g9Yjt0aGlzLmxvdz1jfX0pO2EuV29yZEFycmF5PWUuZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKGIsYyl7Yj10aGlzLndvcmRzPWJ8fFtdO3RoaXMuc2lnQnl0ZXM9YyE9Zz9jOjgqYi5sZW5ndGh9LHRvWDMyOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMud29yZHMsYz1iLmxlbmd0aCxhPVtdLGQ9MDtkPGM7ZCsrKXt2YXIgZT1iW2RdO2EucHVzaChlLmhpZ2gpO2EucHVzaChlLmxvdyl9cmV0dXJuIGguY3JlYXRlKGEsdGhpcy5zaWdCeXRlcyl9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWUuY2xvbmUuY2FsbCh0aGlzKSxjPWIud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxhPWMubGVuZ3RoLGQ9MDtkPGE7ZCsrKWNbZF09Y1tkXS5jbG9uZSgpO3JldHVybiBifX0pfSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgZW5jLWJhc2U2NC5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7dmFyIGg9Q3J5cHRvSlMsaj1oLmxpYi5Xb3JkQXJyYXk7aC5lbmMuQmFzZTY0PXtzdHJpbmdpZnk6ZnVuY3Rpb24oYil7dmFyIGU9Yi53b3JkcyxmPWIuc2lnQnl0ZXMsYz10aGlzLl9tYXA7Yi5jbGFtcCgpO2I9W107Zm9yKHZhciBhPTA7YTxmO2ErPTMpZm9yKHZhciBkPShlW2E+Pj4yXT4+PjI0LTgqKGElNCkmMjU1KTw8MTZ8KGVbYSsxPj4+Ml0+Pj4yNC04KigoYSsxKSU0KSYyNTUpPDw4fGVbYSsyPj4+Ml0+Pj4yNC04KigoYSsyKSU0KSYyNTUsZz0wOzQ+ZyYmYSswLjc1Kmc8ZjtnKyspYi5wdXNoKGMuY2hhckF0KGQ+Pj42KigzLWcpJjYzKSk7aWYoZT1jLmNoYXJBdCg2NCkpZm9yKDtiLmxlbmd0aCU0OyliLnB1c2goZSk7cmV0dXJuIGIuam9pbihcIlwiKX0scGFyc2U6ZnVuY3Rpb24oYil7dmFyIGU9Yi5sZW5ndGgsZj10aGlzLl9tYXAsYz1mLmNoYXJBdCg2NCk7YyYmKGM9Yi5pbmRleE9mKGMpLC0xIT1jJiYoZT1jKSk7Zm9yKHZhciBjPVtdLGE9MCxkPTA7ZDxcclxuZTtkKyspaWYoZCU0KXt2YXIgZz1mLmluZGV4T2YoYi5jaGFyQXQoZC0xKSk8PDIqKGQlNCksaD1mLmluZGV4T2YoYi5jaGFyQXQoZCkpPj4+Ni0yKihkJTQpO2NbYT4+PjJdfD0oZ3xoKTw8MjQtOCooYSU0KTthKyt9cmV0dXJuIGouY3JlYXRlKGMsYSl9LF9tYXA6XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwifX0pKCk7XHJcblxuLypcclxuQ3J5cHRvSlMgdjMuMS4yIHNoYTI1Ni1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbihrKXtmb3IodmFyIGc9Q3J5cHRvSlMsaD1nLmxpYix2PWguV29yZEFycmF5LGo9aC5IYXNoZXIsaD1nLmFsZ28scz1bXSx0PVtdLHU9ZnVuY3Rpb24ocSl7cmV0dXJuIDQyOTQ5NjcyOTYqKHEtKHF8MCkpfDB9LGw9MixiPTA7NjQ+Yjspe3ZhciBkO2E6e2Q9bDtmb3IodmFyIHc9ay5zcXJ0KGQpLHI9MjtyPD13O3IrKylpZighKGQlcikpe2Q9ITE7YnJlYWsgYX1kPSEwfWQmJig4PmImJihzW2JdPXUoay5wb3cobCwwLjUpKSksdFtiXT11KGsucG93KGwsMS8zKSksYisrKTtsKyt9dmFyIG49W10saD1oLlNIQTI1Nj1qLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB2LmluaXQocy5zbGljZSgwKSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihxLGgpe2Zvcih2YXIgYT10aGlzLl9oYXNoLndvcmRzLGM9YVswXSxkPWFbMV0sYj1hWzJdLGs9YVszXSxmPWFbNF0sZz1hWzVdLGo9YVs2XSxsPWFbN10sZT0wOzY0PmU7ZSsrKXtpZigxNj5lKW5bZV09XHJcbnFbaCtlXXwwO2Vsc2V7dmFyIG09bltlLTE1XSxwPW5bZS0yXTtuW2VdPSgobTw8MjV8bT4+PjcpXihtPDwxNHxtPj4+MTgpXm0+Pj4zKStuW2UtN10rKChwPDwxNXxwPj4+MTcpXihwPDwxM3xwPj4+MTkpXnA+Pj4xMCkrbltlLTE2XX1tPWwrKChmPDwyNnxmPj4+NileKGY8PDIxfGY+Pj4xMSleKGY8PDd8Zj4+PjI1KSkrKGYmZ15+ZiZqKSt0W2VdK25bZV07cD0oKGM8PDMwfGM+Pj4yKV4oYzw8MTl8Yz4+PjEzKV4oYzw8MTB8Yz4+PjIyKSkrKGMmZF5jJmJeZCZiKTtsPWo7aj1nO2c9ZjtmPWsrbXwwO2s9YjtiPWQ7ZD1jO2M9bStwfDB9YVswXT1hWzBdK2N8MDthWzFdPWFbMV0rZHwwO2FbMl09YVsyXStifDA7YVszXT1hWzNdK2t8MDthWzRdPWFbNF0rZnwwO2FbNV09YVs1XStnfDA7YVs2XT1hWzZdK2p8MDthWzddPWFbN10rbHwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuX2RhdGEsYj1kLndvcmRzLGE9OCp0aGlzLl9uRGF0YUJ5dGVzLGM9OCpkLnNpZ0J5dGVzO1xyXG5iW2M+Pj41XXw9MTI4PDwyNC1jJTMyO2JbKGMrNjQ+Pj45PDw0KSsxNF09ay5mbG9vcihhLzQyOTQ5NjcyOTYpO2JbKGMrNjQ+Pj45PDw0KSsxNV09YTtkLnNpZ0J5dGVzPTQqYi5sZW5ndGg7dGhpcy5fcHJvY2VzcygpO3JldHVybiB0aGlzLl9oYXNofSxjbG9uZTpmdW5jdGlvbigpe3ZhciBiPWouY2xvbmUuY2FsbCh0aGlzKTtiLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYn19KTtnLlNIQTI1Nj1qLl9jcmVhdGVIZWxwZXIoaCk7Zy5IbWFjU0hBMjU2PWouX2NyZWF0ZUhtYWNIZWxwZXIoaCl9KShNYXRoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhNTEyLW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe3JldHVybiBkLmNyZWF0ZS5hcHBseShkLGFyZ3VtZW50cyl9Zm9yKHZhciBuPUNyeXB0b0pTLHI9bi5saWIuSGFzaGVyLGU9bi54NjQsZD1lLldvcmQsVD1lLldvcmRBcnJheSxlPW4uYWxnbyxlYT1bYSgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLGEoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLGEoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxhKDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksYSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksYSgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLGEoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxhKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksYSgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLGEoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLGEoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLGEoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxhKDE5MjUwNzgzODgsNDA2ODE4MjM4MyksYSgyMTYyMDc4MjA2LDk5MTMzNjExMyksYSgyNjE0ODg4MTAzLDYzMzgwMzMxNyksXHJcbmEoMzI0ODIyMjU4MCwzNDc5Nzc0ODY4KSxhKDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCksYSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksYSgyNjQzNDcwNzgsMjM0MTI2Mjc3MyksYSg2MDQ4MDc2MjgsMjAwNzgwMDkzMyksYSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksYSgxMjQ5MTUwMTIyLDE4NTY0MzEyMzUpLGEoMTU1NTA4MTY5MiwzMTc1MjE4MTMyKSxhKDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksYSgyNTU0MjIwODgyLDM5OTk3MTkzMzkpLGEoMjgyMTgzNDM0OSw3NjY3ODQwMTYpLGEoMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxhKDMyMTAzMTM2NzEsMzIwMzMzNzk1NiksYSgzMzM2NTcxODkxLDEwMzQ0NTcwMjYpLGEoMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxhKDExMzkyNjk5MywzNzU4MzI2MzgzKSxhKDMzODI0MTg5NSwxNjg3MTc5MzYpLGEoNjY2MzA3MjA1LDExODgxNzk5NjQpLGEoNzczNTI5OTEyLDE1NDYwNDU3MzQpLGEoMTI5NDc1NzM3MiwxNTIyODA1NDg1KSxhKDEzOTYxODIyOTEsXHJcbjI2NDM4MzM4MjMpLGEoMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxhKDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCksYSgyMTc3MDI2MzUwLDEyMDY3NTkxNDIpLGEoMjQ1Njk1NjAzNywzNDQwNzc2MjcpLGEoMjczMDQ4NTkyMSwxMjkwODYzNDYwKSxhKDI4MjAzMDI0MTEsMzE1ODQ1NDI3MyksYSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLGEoMzM0NTc2NDc3MSwxMDYyMTcwMDgpLGEoMzUxNjA2NTgxNywzNjA2MDA4MzQ0KSxhKDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksYSg0MDk0NTcxOTA5LDE0NjcwMzE1OTQpLGEoMjc1NDIzMzQ0LDg1MTE2OTcyMCksYSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksYSg1MDY5NDg2MTYsMTM2MzI1ODE5NSksYSg2NTkwNjA1NTYsMzc1MDY4NTU5MyksYSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksYSg5NTgxMzk1NzEsMzMxODMwNzQyNyksYSgxMzIyODIyMjE4LDM4MTI3MjM0MDMpLGEoMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxhKDE3NDc4NzM3NzksMzYwMjAzNjg5OSksXHJcbmEoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxhKDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksYSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLGEoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLGEoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLGEoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxhKDMyMDQwMzE0NzksMjk5OTM1MTU3MyksYSgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLGEoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxhKDM1MTUyNjcyNzEsNTY2MjgwNzExKSxhKDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksYSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLGEoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLGEoMTc0MjkyNDIxLDI3MzEwNTUyNzApLGEoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLGEoNDYwMzkzMjY5LDMyMDYyMDMxNSksYSg2ODU0NzE3MzMsNTg3NDk2ODM2KSxhKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxhKDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxhKDExMjYwMDA1ODAsMjYxODI5NzY3NiksYSgxMjg4MDMzNDcwLFxyXG4zNDA5ODU1MTU4KSxhKDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksYSgxNjA3MTY3OTE1LDk4NzE2NzQ2OCksYSgxODE2NDAyMzE2LDEyNDYxODk1OTEpXSx2PVtdLHc9MDs4MD53O3crKyl2W3ddPWEoKTtlPWUuU0hBNTEyPXIuZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IFQuaW5pdChbbmV3IGQuaW5pdCgxNzc5MDMzNzAzLDQwODkyMzU3MjApLG5ldyBkLmluaXQoMzE0NDEzNDI3NywyMjI3ODczNTk1KSxuZXcgZC5pbml0KDEwMTM5MDQyNDIsNDI3MTE3NTcyMyksbmV3IGQuaW5pdCgyNzczNDgwNzYyLDE1OTU3NTAxMjkpLG5ldyBkLmluaXQoMTM1OTg5MzExOSwyOTE3NTY1MTM3KSxuZXcgZC5pbml0KDI2MDA4MjI5MjQsNzI1NTExMTk5KSxuZXcgZC5pbml0KDUyODczNDYzNSw0MjE1Mzg5NTQ3KSxuZXcgZC5pbml0KDE1NDE0NTkyMjUsMzI3MDMzMjA5KV0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oYSxkKXtmb3IodmFyIGY9dGhpcy5faGFzaC53b3JkcyxcclxuRj1mWzBdLGU9ZlsxXSxuPWZbMl0scj1mWzNdLEc9Zls0XSxIPWZbNV0sST1mWzZdLGY9Zls3XSx3PUYuaGlnaCxKPUYubG93LFg9ZS5oaWdoLEs9ZS5sb3csWT1uLmhpZ2gsTD1uLmxvdyxaPXIuaGlnaCxNPXIubG93LCQ9Ry5oaWdoLE49Ry5sb3csYWE9SC5oaWdoLE89SC5sb3csYmE9SS5oaWdoLFA9SS5sb3csY2E9Zi5oaWdoLFE9Zi5sb3csaz13LGc9Six6PVgseD1LLEE9WSx5PUwsVT1aLEI9TSxsPSQsaD1OLFI9YWEsQz1PLFM9YmEsRD1QLFY9Y2EsRT1RLG09MDs4MD5tO20rKyl7dmFyIHM9dlttXTtpZigxNj5tKXZhciBqPXMuaGlnaD1hW2QrMiptXXwwLGI9cy5sb3c9YVtkKzIqbSsxXXwwO2Vsc2V7dmFyIGo9dlttLTE1XSxiPWouaGlnaCxwPWoubG93LGo9KGI+Pj4xfHA8PDMxKV4oYj4+Pjh8cDw8MjQpXmI+Pj43LHA9KHA+Pj4xfGI8PDMxKV4ocD4+Pjh8Yjw8MjQpXihwPj4+N3xiPDwyNSksdT12W20tMl0sYj11LmhpZ2gsYz11Lmxvdyx1PShiPj4+MTl8Yzw8MTMpXihiPDxcclxuM3xjPj4+MjkpXmI+Pj42LGM9KGM+Pj4xOXxiPDwxMyleKGM8PDN8Yj4+PjI5KV4oYz4+PjZ8Yjw8MjYpLGI9dlttLTddLFc9Yi5oaWdoLHQ9dlttLTE2XSxxPXQuaGlnaCx0PXQubG93LGI9cCtiLmxvdyxqPWorVysoYj4+PjA8cD4+PjA/MTowKSxiPWIrYyxqPWordSsoYj4+PjA8Yz4+PjA/MTowKSxiPWIrdCxqPWorcSsoYj4+PjA8dD4+PjA/MTowKTtzLmhpZ2g9ajtzLmxvdz1ifXZhciBXPWwmUl5+bCZTLHQ9aCZDXn5oJkQscz1rJnpeayZBXnomQSxUPWcmeF5nJnleeCZ5LHA9KGs+Pj4yOHxnPDw0KV4oazw8MzB8Zz4+PjIpXihrPDwyNXxnPj4+NyksdT0oZz4+PjI4fGs8PDQpXihnPDwzMHxrPj4+MileKGc8PDI1fGs+Pj43KSxjPWVhW21dLGZhPWMuaGlnaCxkYT1jLmxvdyxjPUUrKChoPj4+MTR8bDw8MTgpXihoPj4+MTh8bDw8MTQpXihoPDwyM3xsPj4+OSkpLHE9VisoKGw+Pj4xNHxoPDwxOCleKGw+Pj4xOHxoPDwxNCleKGw8PDIzfGg+Pj45KSkrKGM+Pj4wPEU+Pj4wPzE6XHJcbjApLGM9Yyt0LHE9cStXKyhjPj4+MDx0Pj4+MD8xOjApLGM9YytkYSxxPXErZmErKGM+Pj4wPGRhPj4+MD8xOjApLGM9YytiLHE9cStqKyhjPj4+MDxiPj4+MD8xOjApLGI9dStULHM9cCtzKyhiPj4+MDx1Pj4+MD8xOjApLFY9UyxFPUQsUz1SLEQ9QyxSPWwsQz1oLGg9QitjfDAsbD1VK3ErKGg+Pj4wPEI+Pj4wPzE6MCl8MCxVPUEsQj15LEE9eix5PXgsej1rLHg9ZyxnPWMrYnwwLGs9cStzKyhnPj4+MDxjPj4+MD8xOjApfDB9Sj1GLmxvdz1KK2c7Ri5oaWdoPXcraysoSj4+PjA8Zz4+PjA/MTowKTtLPWUubG93PUsreDtlLmhpZ2g9WCt6KyhLPj4+MDx4Pj4+MD8xOjApO0w9bi5sb3c9TCt5O24uaGlnaD1ZK0ErKEw+Pj4wPHk+Pj4wPzE6MCk7TT1yLmxvdz1NK0I7ci5oaWdoPVorVSsoTT4+PjA8Qj4+PjA/MTowKTtOPUcubG93PU4raDtHLmhpZ2g9JCtsKyhOPj4+MDxoPj4+MD8xOjApO089SC5sb3c9TytDO0guaGlnaD1hYStSKyhPPj4+MDxDPj4+MD8xOjApO1A9SS5sb3c9UCtEO1xyXG5JLmhpZ2g9YmErUysoUD4+PjA8RD4+PjA/MTowKTtRPWYubG93PVErRTtmLmhpZ2g9Y2ErVisoUT4+PjA8RT4+PjA/MTowKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9kYXRhLGQ9YS53b3JkcyxmPTgqdGhpcy5fbkRhdGFCeXRlcyxlPTgqYS5zaWdCeXRlcztkW2U+Pj41XXw9MTI4PDwyNC1lJTMyO2RbKGUrMTI4Pj4+MTA8PDUpKzMwXT1NYXRoLmZsb29yKGYvNDI5NDk2NzI5Nik7ZFsoZSsxMjg+Pj4xMDw8NSkrMzFdPWY7YS5zaWdCeXRlcz00KmQubGVuZ3RoO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpcy5faGFzaC50b1gzMigpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBhPXIuY2xvbmUuY2FsbCh0aGlzKTthLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYX0sYmxvY2tTaXplOjMyfSk7bi5TSEE1MTI9ci5fY3JlYXRlSGVscGVyKGUpO24uSG1hY1NIQTUxMj1yLl9jcmVhdGVIbWFjSGVscGVyKGUpfSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhMzg0LW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7dmFyIGM9Q3J5cHRvSlMsYT1jLng2NCxiPWEuV29yZCxlPWEuV29yZEFycmF5LGE9Yy5hbGdvLGQ9YS5TSEE1MTIsYT1hLlNIQTM4ND1kLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBlLmluaXQoW25ldyBiLmluaXQoMzQxODA3MDM2NSwzMjM4MzcxMDMyKSxuZXcgYi5pbml0KDE2NTQyNzAyNTAsOTE0MTUwNjYzKSxuZXcgYi5pbml0KDI0Mzg1MjkzNzAsODEyNzAyOTk5KSxuZXcgYi5pbml0KDM1NTQ2MjM2MCw0MTQ0OTEyNjk3KSxuZXcgYi5pbml0KDE3MzE0MDU0MTUsNDI5MDc3NTg1NyksbmV3IGIuaW5pdCgyMzk0MTgwMjMxLDE3NTA2MDMwMjUpLG5ldyBiLmluaXQoMzY3NTAwODUyNSwxNjk0MDc2ODM5KSxuZXcgYi5pbml0KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCldKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT1kLl9kb0ZpbmFsaXplLmNhbGwodGhpcyk7YS5zaWdCeXRlcy09MTY7cmV0dXJuIGF9fSk7Yy5TSEEzODQ9XHJcbmQuX2NyZWF0ZUhlbHBlcihhKTtjLkhtYWNTSEEzODQ9ZC5fY3JlYXRlSG1hY0hlbHBlcihhKX0pKCk7XHJcblxuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG52YXIgYjY0bWFwPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO3ZhciBiNjRwYWQ9XCI9XCI7ZnVuY3Rpb24gaGV4MmI2NChkKXt2YXIgYjt2YXIgZTt2YXIgYT1cIlwiO2ZvcihiPTA7YiszPD1kLmxlbmd0aDtiKz0zKXtlPXBhcnNlSW50KGQuc3Vic3RyaW5nKGIsYiszKSwxNik7YSs9YjY0bWFwLmNoYXJBdChlPj42KStiNjRtYXAuY2hhckF0KGUmNjMpfWlmKGIrMT09ZC5sZW5ndGgpe2U9cGFyc2VJbnQoZC5zdWJzdHJpbmcoYixiKzEpLDE2KTthKz1iNjRtYXAuY2hhckF0KGU8PDIpfWVsc2V7aWYoYisyPT1kLmxlbmd0aCl7ZT1wYXJzZUludChkLnN1YnN0cmluZyhiLGIrMiksMTYpO2ErPWI2NG1hcC5jaGFyQXQoZT4+MikrYjY0bWFwLmNoYXJBdCgoZSYzKTw8NCl9fWlmKGI2NHBhZCl7d2hpbGUoKGEubGVuZ3RoJjMpPjApe2ErPWI2NHBhZH19cmV0dXJuIGF9ZnVuY3Rpb24gYjY0dG9oZXgoZil7dmFyIGQ9XCJcIjt2YXIgZTt2YXIgYj0wO3ZhciBjO3ZhciBhO2ZvcihlPTA7ZTxmLmxlbmd0aDsrK2Upe2lmKGYuY2hhckF0KGUpPT1iNjRwYWQpe2JyZWFrfWE9YjY0bWFwLmluZGV4T2YoZi5jaGFyQXQoZSkpO2lmKGE8MCl7Y29udGludWV9aWYoYj09MCl7ZCs9aW50MmNoYXIoYT4+Mik7Yz1hJjM7Yj0xfWVsc2V7aWYoYj09MSl7ZCs9aW50MmNoYXIoKGM8PDIpfChhPj40KSk7Yz1hJjE1O2I9Mn1lbHNle2lmKGI9PTIpe2QrPWludDJjaGFyKGMpO2QrPWludDJjaGFyKGE+PjIpO2M9YSYzO2I9M31lbHNle2QrPWludDJjaGFyKChjPDwyKXwoYT4+NCkpO2QrPWludDJjaGFyKGEmMTUpO2I9MH19fX1pZihiPT0xKXtkKz1pbnQyY2hhcihjPDwyKX1yZXR1cm4gZH1mdW5jdGlvbiBiNjR0b0JBKGUpe3ZhciBkPWI2NHRvaGV4KGUpO3ZhciBjO3ZhciBiPW5ldyBBcnJheSgpO2ZvcihjPTA7MipjPGQubGVuZ3RoOysrYyl7YltjXT1wYXJzZUludChkLnN1YnN0cmluZygyKmMsMipjKzIpLDE2KX1yZXR1cm4gYn07XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbnZhciBkYml0czt2YXIgY2FuYXJ5PTI0NDgzNzgxNDA5NDU5MDt2YXIgal9sbT0oKGNhbmFyeSYxNjc3NzIxNSk9PTE1NzE1MDcwKTtmdW5jdGlvbiBCaWdJbnRlZ2VyKGUsZCxmKXtpZihlIT1udWxsKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7dGhpcy5mcm9tTnVtYmVyKGUsZCxmKX1lbHNle2lmKGQ9PW51bGwmJlwic3RyaW5nXCIhPXR5cGVvZiBlKXt0aGlzLmZyb21TdHJpbmcoZSwyNTYpfWVsc2V7dGhpcy5mcm9tU3RyaW5nKGUsZCl9fX19ZnVuY3Rpb24gbmJpKCl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKG51bGwpfWZ1bmN0aW9uIGFtMShmLGEsYixlLGgsZyl7d2hpbGUoLS1nPj0wKXt2YXIgZD1hKnRoaXNbZisrXStiW2VdK2g7aD1NYXRoLmZsb29yKGQvNjcxMDg4NjQpO2JbZSsrXT1kJjY3MTA4ODYzfXJldHVybiBofWZ1bmN0aW9uIGFtMihmLHEscixlLG8sYSl7dmFyIGs9cSYzMjc2NyxwPXE+PjE1O3doaWxlKC0tYT49MCl7dmFyIGQ9dGhpc1tmXSYzMjc2Nzt2YXIgZz10aGlzW2YrK10+PjE1O3ZhciBiPXAqZCtnKms7ZD1rKmQrKChiJjMyNzY3KTw8MTUpK3JbZV0rKG8mMTA3Mzc0MTgyMyk7bz0oZD4+PjMwKSsoYj4+PjE1KStwKmcrKG8+Pj4zMCk7cltlKytdPWQmMTA3Mzc0MTgyM31yZXR1cm4gb31mdW5jdGlvbiBhbTMoZixxLHIsZSxvLGEpe3ZhciBrPXEmMTYzODMscD1xPj4xNDt3aGlsZSgtLWE+PTApe3ZhciBkPXRoaXNbZl0mMTYzODM7dmFyIGc9dGhpc1tmKytdPj4xNDt2YXIgYj1wKmQrZyprO2Q9aypkKygoYiYxNjM4Myk8PDE0KStyW2VdK287bz0oZD4+MjgpKyhiPj4xNCkrcCpnO3JbZSsrXT1kJjI2ODQzNTQ1NX1yZXR1cm4gb31pZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWU9PVwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCIpKXtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbT1hbTI7ZGJpdHM9MzB9ZWxzZXtpZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWUhPVwiTmV0c2NhcGVcIikpe0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMTtkYml0cz0yNn1lbHNle0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMztkYml0cz0yOH19QmlnSW50ZWdlci5wcm90b3R5cGUuREI9ZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRE09KCgxPDxkYml0cyktMSk7QmlnSW50ZWdlci5wcm90b3R5cGUuRFY9KDE8PGRiaXRzKTt2YXIgQklfRlA9NTI7QmlnSW50ZWdlci5wcm90b3R5cGUuRlY9TWF0aC5wb3coMixCSV9GUCk7QmlnSW50ZWdlci5wcm90b3R5cGUuRjE9QklfRlAtZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRjI9MipkYml0cy1CSV9GUDt2YXIgQklfUk09XCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjt2YXIgQklfUkM9bmV3IEFycmF5KCk7dmFyIHJyLHZ2O3JyPVwiMFwiLmNoYXJDb2RlQXQoMCk7Zm9yKHZ2PTA7dnY8PTk7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJhXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJBXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9ZnVuY3Rpb24gaW50MmNoYXIoYSl7cmV0dXJuIEJJX1JNLmNoYXJBdChhKX1mdW5jdGlvbiBpbnRBdChiLGEpe3ZhciBkPUJJX1JDW2IuY2hhckNvZGVBdChhKV07cmV0dXJuKGQ9PW51bGwpPy0xOmR9ZnVuY3Rpb24gYm5wQ29weVRvKGIpe2Zvcih2YXIgYT10aGlzLnQtMTthPj0wOy0tYSl7YlthXT10aGlzW2FdfWIudD10aGlzLnQ7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBGcm9tSW50KGEpe3RoaXMudD0xO3RoaXMucz0oYTwwKT8tMTowO2lmKGE+MCl7dGhpc1swXT1hfWVsc2V7aWYoYTwtMSl7dGhpc1swXT1hK3RoaXMuRFZ9ZWxzZXt0aGlzLnQ9MH19fWZ1bmN0aW9uIG5idihhKXt2YXIgYj1uYmkoKTtiLmZyb21JbnQoYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5wRnJvbVN0cmluZyhoLGMpe3ZhciBlO2lmKGM9PTE2KXtlPTR9ZWxzZXtpZihjPT04KXtlPTN9ZWxzZXtpZihjPT0yNTYpe2U9OH1lbHNle2lmKGM9PTIpe2U9MX1lbHNle2lmKGM9PTMyKXtlPTV9ZWxzZXtpZihjPT00KXtlPTJ9ZWxzZXt0aGlzLmZyb21SYWRpeChoLGMpO3JldHVybn19fX19fXRoaXMudD0wO3RoaXMucz0wO3ZhciBnPWgubGVuZ3RoLGQ9ZmFsc2UsZj0wO3doaWxlKC0tZz49MCl7dmFyIGE9KGU9PTgpP2hbZ10mMjU1OmludEF0KGgsZyk7aWYoYTwwKXtpZihoLmNoYXJBdChnKT09XCItXCIpe2Q9dHJ1ZX1jb250aW51ZX1kPWZhbHNlO2lmKGY9PTApe3RoaXNbdGhpcy50KytdPWF9ZWxzZXtpZihmK2U+dGhpcy5EQil7dGhpc1t0aGlzLnQtMV18PShhJigoMTw8KHRoaXMuREItZikpLTEpKTw8Zjt0aGlzW3RoaXMudCsrXT0oYT4+KHRoaXMuREItZikpfWVsc2V7dGhpc1t0aGlzLnQtMV18PWE8PGZ9fWYrPWU7aWYoZj49dGhpcy5EQil7Zi09dGhpcy5EQn19aWYoZT09OCYmKGhbMF0mMTI4KSE9MCl7dGhpcy5zPS0xO2lmKGY+MCl7dGhpc1t0aGlzLnQtMV18PSgoMTw8KHRoaXMuREItZikpLTEpPDxmfX10aGlzLmNsYW1wKCk7aWYoZCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyl9fWZ1bmN0aW9uIGJucENsYW1wKCl7dmFyIGE9dGhpcy5zJnRoaXMuRE07d2hpbGUodGhpcy50PjAmJnRoaXNbdGhpcy50LTFdPT1hKXstLXRoaXMudH19ZnVuY3Rpb24gYm5Ub1N0cmluZyhjKXtpZih0aGlzLnM8MCl7cmV0dXJuXCItXCIrdGhpcy5uZWdhdGUoKS50b1N0cmluZyhjKX12YXIgZTtpZihjPT0xNil7ZT00fWVsc2V7aWYoYz09OCl7ZT0zfWVsc2V7aWYoYz09Mil7ZT0xfWVsc2V7aWYoYz09MzIpe2U9NX1lbHNle2lmKGM9PTQpe2U9Mn1lbHNle3JldHVybiB0aGlzLnRvUmFkaXgoYyl9fX19fXZhciBnPSgxPDxlKS0xLGwsYT1mYWxzZSxoPVwiXCIsZj10aGlzLnQ7dmFyIGo9dGhpcy5EQi0oZip0aGlzLkRCKSVlO2lmKGYtLT4wKXtpZihqPHRoaXMuREImJihsPXRoaXNbZl0+PmopPjApe2E9dHJ1ZTtoPWludDJjaGFyKGwpfXdoaWxlKGY+PTApe2lmKGo8ZSl7bD0odGhpc1tmXSYoKDE8PGopLTEpKTw8KGUtaik7bHw9dGhpc1stLWZdPj4oais9dGhpcy5EQi1lKX1lbHNle2w9KHRoaXNbZl0+PihqLT1lKSkmZztpZihqPD0wKXtqKz10aGlzLkRCOy0tZn19aWYobD4wKXthPXRydWV9aWYoYSl7aCs9aW50MmNoYXIobCl9fX1yZXR1cm4gYT9oOlwiMFwifWZ1bmN0aW9uIGJuTmVnYXRlKCl7dmFyIGE9bmJpKCk7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5BYnMoKXtyZXR1cm4odGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpc31mdW5jdGlvbiBibkNvbXBhcmVUbyhiKXt2YXIgZD10aGlzLnMtYi5zO2lmKGQhPTApe3JldHVybiBkfXZhciBjPXRoaXMudDtkPWMtYi50O2lmKGQhPTApe3JldHVybih0aGlzLnM8MCk/LWQ6ZH13aGlsZSgtLWM+PTApe2lmKChkPXRoaXNbY10tYltjXSkhPTApe3JldHVybiBkfX1yZXR1cm4gMH1mdW5jdGlvbiBuYml0cyhhKXt2YXIgYz0xLGI7aWYoKGI9YT4+PjE2KSE9MCl7YT1iO2MrPTE2fWlmKChiPWE+PjgpIT0wKXthPWI7Yys9OH1pZigoYj1hPj40KSE9MCl7YT1iO2MrPTR9aWYoKGI9YT4+MikhPTApe2E9YjtjKz0yfWlmKChiPWE+PjEpIT0wKXthPWI7Yys9MX1yZXR1cm4gY31mdW5jdGlvbiBibkJpdExlbmd0aCgpe2lmKHRoaXMudDw9MCl7cmV0dXJuIDB9cmV0dXJuIHRoaXMuREIqKHRoaXMudC0xKStuYml0cyh0aGlzW3RoaXMudC0xXV4odGhpcy5zJnRoaXMuRE0pKX1mdW5jdGlvbiBibnBETFNoaWZ0VG8oYyxiKXt2YXIgYTtmb3IoYT10aGlzLnQtMTthPj0wOy0tYSl7YlthK2NdPXRoaXNbYV19Zm9yKGE9Yy0xO2E+PTA7LS1hKXtiW2FdPTB9Yi50PXRoaXMudCtjO2Iucz10aGlzLnN9ZnVuY3Rpb24gYm5wRFJTaGlmdFRvKGMsYil7Zm9yKHZhciBhPWM7YTx0aGlzLnQ7KythKXtiW2EtY109dGhpc1thXX1iLnQ9TWF0aC5tYXgodGhpcy50LWMsMCk7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBMU2hpZnRUbyhqLGUpe3ZhciBiPWoldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGc9KDE8PGEpLTE7dmFyIGY9TWF0aC5mbG9vcihqL3RoaXMuREIpLGg9KHRoaXMuczw8YikmdGhpcy5ETSxkO2ZvcihkPXRoaXMudC0xO2Q+PTA7LS1kKXtlW2QrZisxXT0odGhpc1tkXT4+YSl8aDtoPSh0aGlzW2RdJmcpPDxifWZvcihkPWYtMTtkPj0wOy0tZCl7ZVtkXT0wfWVbZl09aDtlLnQ9dGhpcy50K2YrMTtlLnM9dGhpcy5zO2UuY2xhbXAoKX1mdW5jdGlvbiBibnBSU2hpZnRUbyhnLGQpe2Qucz10aGlzLnM7dmFyIGU9TWF0aC5mbG9vcihnL3RoaXMuREIpO2lmKGU+PXRoaXMudCl7ZC50PTA7cmV0dXJufXZhciBiPWcldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGY9KDE8PGIpLTE7ZFswXT10aGlzW2VdPj5iO2Zvcih2YXIgYz1lKzE7Yzx0aGlzLnQ7KytjKXtkW2MtZS0xXXw9KHRoaXNbY10mZik8PGE7ZFtjLWVdPXRoaXNbY10+PmJ9aWYoYj4wKXtkW3RoaXMudC1lLTFdfD0odGhpcy5zJmYpPDxhfWQudD10aGlzLnQtZTtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wU3ViVG8oZCxmKXt2YXIgZT0wLGc9MCxiPU1hdGgubWluKGQudCx0aGlzLnQpO3doaWxlKGU8Yil7Zys9dGhpc1tlXS1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9aWYoZC50PHRoaXMudCl7Zy09ZC5zO3doaWxlKGU8dGhpcy50KXtnKz10aGlzW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zys9dGhpcy5zfWVsc2V7Zys9dGhpcy5zO3doaWxlKGU8ZC50KXtnLT1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zy09ZC5zfWYucz0oZzwwKT8tMTowO2lmKGc8LTEpe2ZbZSsrXT10aGlzLkRWK2d9ZWxzZXtpZihnPjApe2ZbZSsrXT1nfX1mLnQ9ZTtmLmNsYW1wKCl9ZnVuY3Rpb24gYm5wTXVsdGlwbHlUbyhjLGUpe3ZhciBiPXRoaXMuYWJzKCksZj1jLmFicygpO3ZhciBkPWIudDtlLnQ9ZCtmLnQ7d2hpbGUoLS1kPj0wKXtlW2RdPTB9Zm9yKGQ9MDtkPGYudDsrK2Qpe2VbZCtiLnRdPWIuYW0oMCxmW2RdLGUsZCwwLGIudCl9ZS5zPTA7ZS5jbGFtcCgpO2lmKHRoaXMucyE9Yy5zKXtCaWdJbnRlZ2VyLlpFUk8uc3ViVG8oZSxlKX19ZnVuY3Rpb24gYm5wU3F1YXJlVG8oZCl7dmFyIGE9dGhpcy5hYnMoKTt2YXIgYj1kLnQ9MiphLnQ7d2hpbGUoLS1iPj0wKXtkW2JdPTB9Zm9yKGI9MDtiPGEudC0xOysrYil7dmFyIGU9YS5hbShiLGFbYl0sZCwyKmIsMCwxKTtpZigoZFtiK2EudF0rPWEuYW0oYisxLDIqYVtiXSxkLDIqYisxLGUsYS50LWItMSkpPj1hLkRWKXtkW2IrYS50XS09YS5EVjtkW2IrYS50KzFdPTF9fWlmKGQudD4wKXtkW2QudC0xXSs9YS5hbShiLGFbYl0sZCwyKmIsMCwxKX1kLnM9MDtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wRGl2UmVtVG8obixoLGcpe3ZhciB3PW4uYWJzKCk7aWYody50PD0wKXtyZXR1cm59dmFyIGs9dGhpcy5hYnMoKTtpZihrLnQ8dy50KXtpZihoIT1udWxsKXtoLmZyb21JbnQoMCl9aWYoZyE9bnVsbCl7dGhpcy5jb3B5VG8oZyl9cmV0dXJufWlmKGc9PW51bGwpe2c9bmJpKCl9dmFyIGQ9bmJpKCksYT10aGlzLnMsbD1uLnM7dmFyIHY9dGhpcy5EQi1uYml0cyh3W3cudC0xXSk7aWYodj4wKXt3LmxTaGlmdFRvKHYsZCk7ay5sU2hpZnRUbyh2LGcpfWVsc2V7dy5jb3B5VG8oZCk7ay5jb3B5VG8oZyl9dmFyIHA9ZC50O3ZhciBiPWRbcC0xXTtpZihiPT0wKXtyZXR1cm59dmFyIG89YiooMTw8dGhpcy5GMSkrKChwPjEpP2RbcC0yXT4+dGhpcy5GMjowKTt2YXIgQT10aGlzLkZWL28sej0oMTw8dGhpcy5GMSkvbyx4PTE8PHRoaXMuRjI7dmFyIHU9Zy50LHM9dS1wLGY9KGg9PW51bGwpP25iaSgpOmg7ZC5kbFNoaWZ0VG8ocyxmKTtpZihnLmNvbXBhcmVUbyhmKT49MCl7Z1tnLnQrK109MTtnLnN1YlRvKGYsZyl9QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKHAsZik7Zi5zdWJUbyhkLGQpO3doaWxlKGQudDxwKXtkW2QudCsrXT0wfXdoaWxlKC0tcz49MCl7dmFyIGM9KGdbLS11XT09Yik/dGhpcy5ETTpNYXRoLmZsb29yKGdbdV0qQSsoZ1t1LTFdK3gpKnopO2lmKChnW3VdKz1kLmFtKDAsYyxnLHMsMCxwKSk8Yyl7ZC5kbFNoaWZ0VG8ocyxmKTtnLnN1YlRvKGYsZyk7d2hpbGUoZ1t1XTwtLWMpe2cuc3ViVG8oZixnKX19fWlmKGghPW51bGwpe2cuZHJTaGlmdFRvKHAsaCk7aWYoYSE9bCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKGgsaCl9fWcudD1wO2cuY2xhbXAoKTtpZih2PjApe2cuclNoaWZ0VG8odixnKX1pZihhPDApe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyhnLGcpfX1mdW5jdGlvbiBibk1vZChiKXt2YXIgYz1uYmkoKTt0aGlzLmFicygpLmRpdlJlbVRvKGIsbnVsbCxjKTtpZih0aGlzLnM8MCYmYy5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXtiLnN1YlRvKGMsYyl9cmV0dXJuIGN9ZnVuY3Rpb24gQ2xhc3NpYyhhKXt0aGlzLm09YX1mdW5jdGlvbiBjQ29udmVydChhKXtpZihhLnM8MHx8YS5jb21wYXJlVG8odGhpcy5tKT49MCl7cmV0dXJuIGEubW9kKHRoaXMubSl9ZWxzZXtyZXR1cm4gYX19ZnVuY3Rpb24gY1JldmVydChhKXtyZXR1cm4gYX1mdW5jdGlvbiBjUmVkdWNlKGEpe2EuZGl2UmVtVG8odGhpcy5tLG51bGwsYSl9ZnVuY3Rpb24gY011bFRvKGEsYyxiKXthLm11bHRpcGx5VG8oYyxiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBjU3FyVG8oYSxiKXthLnNxdWFyZVRvKGIpO3RoaXMucmVkdWNlKGIpfUNsYXNzaWMucHJvdG90eXBlLmNvbnZlcnQ9Y0NvbnZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmV2ZXJ0PWNSZXZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmVkdWNlPWNSZWR1Y2U7Q2xhc3NpYy5wcm90b3R5cGUubXVsVG89Y011bFRvO0NsYXNzaWMucHJvdG90eXBlLnNxclRvPWNTcXJUbztmdW5jdGlvbiBibnBJbnZEaWdpdCgpe2lmKHRoaXMudDwxKXtyZXR1cm4gMH12YXIgYT10aGlzWzBdO2lmKChhJjEpPT0wKXtyZXR1cm4gMH12YXIgYj1hJjM7Yj0oYiooMi0oYSYxNSkqYikpJjE1O2I9KGIqKDItKGEmMjU1KSpiKSkmMjU1O2I9KGIqKDItKCgoYSY2NTUzNSkqYikmNjU1MzUpKSkmNjU1MzU7Yj0oYiooMi1hKmIldGhpcy5EVikpJXRoaXMuRFY7cmV0dXJuKGI+MCk/dGhpcy5EVi1iOi1ifWZ1bmN0aW9uIE1vbnRnb21lcnkoYSl7dGhpcy5tPWE7dGhpcy5tcD1hLmludkRpZ2l0KCk7dGhpcy5tcGw9dGhpcy5tcCYzMjc2Nzt0aGlzLm1waD10aGlzLm1wPj4xNTt0aGlzLnVtPSgxPDwoYS5EQi0xNSkpLTE7dGhpcy5tdDI9MiphLnR9ZnVuY3Rpb24gbW9udENvbnZlcnQoYSl7dmFyIGI9bmJpKCk7YS5hYnMoKS5kbFNoaWZ0VG8odGhpcy5tLnQsYik7Yi5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxiKTtpZihhLnM8MCYmYi5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXt0aGlzLm0uc3ViVG8oYixiKX1yZXR1cm4gYn1mdW5jdGlvbiBtb250UmV2ZXJ0KGEpe3ZhciBiPW5iaSgpO2EuY29weVRvKGIpO3RoaXMucmVkdWNlKGIpO3JldHVybiBifWZ1bmN0aW9uIG1vbnRSZWR1Y2UoYSl7d2hpbGUoYS50PD10aGlzLm10Mil7YVthLnQrK109MH1mb3IodmFyIGM9MDtjPHRoaXMubS50OysrYyl7dmFyIGI9YVtjXSYzMjc2Nzt2YXIgZD0oYip0aGlzLm1wbCsoKChiKnRoaXMubXBoKyhhW2NdPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwxNSkpJmEuRE07Yj1jK3RoaXMubS50O2FbYl0rPXRoaXMubS5hbSgwLGQsYSxjLDAsdGhpcy5tLnQpO3doaWxlKGFbYl0+PWEuRFYpe2FbYl0tPWEuRFY7YVsrK2JdKyt9fWEuY2xhbXAoKTthLmRyU2hpZnRUbyh0aGlzLm0udCxhKTtpZihhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gbW9udFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBtb250TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfU1vbnRnb21lcnkucHJvdG90eXBlLmNvbnZlcnQ9bW9udENvbnZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmV2ZXJ0PW1vbnRSZXZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmVkdWNlPW1vbnRSZWR1Y2U7TW9udGdvbWVyeS5wcm90b3R5cGUubXVsVG89bW9udE11bFRvO01vbnRnb21lcnkucHJvdG90eXBlLnNxclRvPW1vbnRTcXJUbztmdW5jdGlvbiBibnBJc0V2ZW4oKXtyZXR1cm4oKHRoaXMudD4wKT8odGhpc1swXSYxKTp0aGlzLnMpPT0wfWZ1bmN0aW9uIGJucEV4cChoLGope2lmKGg+NDI5NDk2NzI5NXx8aDwxKXtyZXR1cm4gQmlnSW50ZWdlci5PTkV9dmFyIGY9bmJpKCksYT1uYmkoKSxkPWouY29udmVydCh0aGlzKSxjPW5iaXRzKGgpLTE7ZC5jb3B5VG8oZik7d2hpbGUoLS1jPj0wKXtqLnNxclRvKGYsYSk7aWYoKGgmKDE8PGMpKT4wKXtqLm11bFRvKGEsZCxmKX1lbHNle3ZhciBiPWY7Zj1hO2E9Yn19cmV0dXJuIGoucmV2ZXJ0KGYpfWZ1bmN0aW9uIGJuTW9kUG93SW50KGIsYSl7dmFyIGM7aWYoYjwyNTZ8fGEuaXNFdmVuKCkpe2M9bmV3IENsYXNzaWMoYSl9ZWxzZXtjPW5ldyBNb250Z29tZXJ5KGEpfXJldHVybiB0aGlzLmV4cChiLGMpfUJpZ0ludGVnZXIucHJvdG90eXBlLmNvcHlUbz1ibnBDb3B5VG87QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbUludD1ibnBGcm9tSW50O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21TdHJpbmc9Ym5wRnJvbVN0cmluZztCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbGFtcD1ibnBDbGFtcDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kbFNoaWZ0VG89Ym5wRExTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRyU2hpZnRUbz1ibnBEUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUubFNoaWZ0VG89Ym5wTFNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuclNoaWZ0VG89Ym5wUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuc3ViVG89Ym5wU3ViVG87QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlUbz1ibnBNdWx0aXBseVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLnNxdWFyZVRvPWJucFNxdWFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdlJlbVRvPWJucERpdlJlbVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmludkRpZ2l0PWJucEludkRpZ2l0O0JpZ0ludGVnZXIucHJvdG90eXBlLmlzRXZlbj1ibnBJc0V2ZW47QmlnSW50ZWdlci5wcm90b3R5cGUuZXhwPWJucEV4cDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b1N0cmluZz1iblRvU3RyaW5nO0JpZ0ludGVnZXIucHJvdG90eXBlLm5lZ2F0ZT1ibk5lZ2F0ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hYnM9Ym5BYnM7QmlnSW50ZWdlci5wcm90b3R5cGUuY29tcGFyZVRvPWJuQ29tcGFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdExlbmd0aD1ibkJpdExlbmd0aDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2Q9Ym5Nb2Q7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93SW50PWJuTW9kUG93SW50O0JpZ0ludGVnZXIuWkVSTz1uYnYoMCk7QmlnSW50ZWdlci5PTkU9bmJ2KDEpO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBibkNsb25lKCl7dmFyIGE9bmJpKCk7dGhpcy5jb3B5VG8oYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5JbnRWYWx1ZSgpe2lmKHRoaXMuczwwKXtpZih0aGlzLnQ9PTEpe3JldHVybiB0aGlzWzBdLXRoaXMuRFZ9ZWxzZXtpZih0aGlzLnQ9PTApe3JldHVybiAtMX19fWVsc2V7aWYodGhpcy50PT0xKXtyZXR1cm4gdGhpc1swXX1lbHNle2lmKHRoaXMudD09MCl7cmV0dXJuIDB9fX1yZXR1cm4oKHRoaXNbMV0mKCgxPDwoMzItdGhpcy5EQikpLTEpKTw8dGhpcy5EQil8dGhpc1swXX1mdW5jdGlvbiBibkJ5dGVWYWx1ZSgpe3JldHVybih0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MjQpPj4yNH1mdW5jdGlvbiBiblNob3J0VmFsdWUoKXtyZXR1cm4odGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDE2KT4+MTZ9ZnVuY3Rpb24gYm5wQ2h1bmtTaXplKGEpe3JldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKnRoaXMuREIvTWF0aC5sb2coYSkpfWZ1bmN0aW9uIGJuU2lnTnVtKCl7aWYodGhpcy5zPDApe3JldHVybiAtMX1lbHNle2lmKHRoaXMudDw9MHx8KHRoaXMudD09MSYmdGhpc1swXTw9MCkpe3JldHVybiAwfWVsc2V7cmV0dXJuIDF9fX1mdW5jdGlvbiBibnBUb1JhZGl4KGMpe2lmKGM9PW51bGwpe2M9MTB9aWYodGhpcy5zaWdudW0oKT09MHx8YzwyfHxjPjM2KXtyZXR1cm5cIjBcIn12YXIgZj10aGlzLmNodW5rU2l6ZShjKTt2YXIgZT1NYXRoLnBvdyhjLGYpO3ZhciBpPW5idihlKSxqPW5iaSgpLGg9bmJpKCksZz1cIlwiO3RoaXMuZGl2UmVtVG8oaSxqLGgpO3doaWxlKGouc2lnbnVtKCk+MCl7Zz0oZStoLmludFZhbHVlKCkpLnRvU3RyaW5nKGMpLnN1YnN0cigxKStnO2ouZGl2UmVtVG8oaSxqLGgpfXJldHVybiBoLmludFZhbHVlKCkudG9TdHJpbmcoYykrZ31mdW5jdGlvbiBibnBGcm9tUmFkaXgobSxoKXt0aGlzLmZyb21JbnQoMCk7aWYoaD09bnVsbCl7aD0xMH12YXIgZj10aGlzLmNodW5rU2l6ZShoKTt2YXIgZz1NYXRoLnBvdyhoLGYpLGU9ZmFsc2UsYT0wLGw9MDtmb3IodmFyIGM9MDtjPG0ubGVuZ3RoOysrYyl7dmFyIGs9aW50QXQobSxjKTtpZihrPDApe2lmKG0uY2hhckF0KGMpPT1cIi1cIiYmdGhpcy5zaWdudW0oKT09MCl7ZT10cnVlfWNvbnRpbnVlfWw9aCpsK2s7aWYoKythPj1mKXt0aGlzLmRNdWx0aXBseShnKTt0aGlzLmRBZGRPZmZzZXQobCwwKTthPTA7bD0wfX1pZihhPjApe3RoaXMuZE11bHRpcGx5KE1hdGgucG93KGgsYSkpO3RoaXMuZEFkZE9mZnNldChsLDApfWlmKGUpe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpfX1mdW5jdGlvbiBibnBGcm9tTnVtYmVyKGYsZSxoKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoZjwyKXt0aGlzLmZyb21JbnQoMSl9ZWxzZXt0aGlzLmZyb21OdW1iZXIoZixoKTtpZighdGhpcy50ZXN0Qml0KGYtMSkpe3RoaXMuYml0d2lzZVRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChmLTEpLG9wX29yLHRoaXMpfWlmKHRoaXMuaXNFdmVuKCkpe3RoaXMuZEFkZE9mZnNldCgxLDApfXdoaWxlKCF0aGlzLmlzUHJvYmFibGVQcmltZShlKSl7dGhpcy5kQWRkT2Zmc2V0KDIsMCk7aWYodGhpcy5iaXRMZW5ndGgoKT5mKXt0aGlzLnN1YlRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChmLTEpLHRoaXMpfX19fWVsc2V7dmFyIGQ9bmV3IEFycmF5KCksZz1mJjc7ZC5sZW5ndGg9KGY+PjMpKzE7ZS5uZXh0Qnl0ZXMoZCk7aWYoZz4wKXtkWzBdJj0oKDE8PGcpLTEpfWVsc2V7ZFswXT0wfXRoaXMuZnJvbVN0cmluZyhkLDI1Nil9fWZ1bmN0aW9uIGJuVG9CeXRlQXJyYXkoKXt2YXIgYj10aGlzLnQsYz1uZXcgQXJyYXkoKTtjWzBdPXRoaXMuczt2YXIgZT10aGlzLkRCLShiKnRoaXMuREIpJTgsZixhPTA7aWYoYi0tPjApe2lmKGU8dGhpcy5EQiYmKGY9dGhpc1tiXT4+ZSkhPSh0aGlzLnMmdGhpcy5ETSk+PmUpe2NbYSsrXT1mfCh0aGlzLnM8PCh0aGlzLkRCLWUpKX13aGlsZShiPj0wKXtpZihlPDgpe2Y9KHRoaXNbYl0mKCgxPDxlKS0xKSk8PCg4LWUpO2Z8PXRoaXNbLS1iXT4+KGUrPXRoaXMuREItOCl9ZWxzZXtmPSh0aGlzW2JdPj4oZS09OCkpJjI1NTtpZihlPD0wKXtlKz10aGlzLkRCOy0tYn19aWYoKGYmMTI4KSE9MCl7Znw9LTI1Nn1pZihhPT0wJiYodGhpcy5zJjEyOCkhPShmJjEyOCkpeysrYX1pZihhPjB8fGYhPXRoaXMucyl7Y1thKytdPWZ9fX1yZXR1cm4gY31mdW5jdGlvbiBibkVxdWFscyhiKXtyZXR1cm4odGhpcy5jb21wYXJlVG8oYik9PTApfWZ1bmN0aW9uIGJuTWluKGIpe3JldHVybih0aGlzLmNvbXBhcmVUbyhiKTwwKT90aGlzOmJ9ZnVuY3Rpb24gYm5NYXgoYil7cmV0dXJuKHRoaXMuY29tcGFyZVRvKGIpPjApP3RoaXM6Yn1mdW5jdGlvbiBibnBCaXR3aXNlVG8oYyxoLGUpe3ZhciBkLGcsYj1NYXRoLm1pbihjLnQsdGhpcy50KTtmb3IoZD0wO2Q8YjsrK2Qpe2VbZF09aCh0aGlzW2RdLGNbZF0pfWlmKGMudDx0aGlzLnQpe2c9Yy5zJnRoaXMuRE07Zm9yKGQ9YjtkPHRoaXMudDsrK2Qpe2VbZF09aCh0aGlzW2RdLGcpfWUudD10aGlzLnR9ZWxzZXtnPXRoaXMucyZ0aGlzLkRNO2ZvcihkPWI7ZDxjLnQ7KytkKXtlW2RdPWgoZyxjW2RdKX1lLnQ9Yy50fWUucz1oKHRoaXMucyxjLnMpO2UuY2xhbXAoKX1mdW5jdGlvbiBvcF9hbmQoYSxiKXtyZXR1cm4gYSZifWZ1bmN0aW9uIGJuQW5kKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3BfYW5kLGMpO3JldHVybiBjfWZ1bmN0aW9uIG9wX29yKGEsYil7cmV0dXJuIGF8Yn1mdW5jdGlvbiBibk9yKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3Bfb3IsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gb3BfeG9yKGEsYil7cmV0dXJuIGFeYn1mdW5jdGlvbiBiblhvcihiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX3hvcixjKTtyZXR1cm4gY31mdW5jdGlvbiBvcF9hbmRub3QoYSxiKXtyZXR1cm4gYSZ+Yn1mdW5jdGlvbiBibkFuZE5vdChiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX2FuZG5vdCxjKTtyZXR1cm4gY31mdW5jdGlvbiBibk5vdCgpe3ZhciBiPW5iaSgpO2Zvcih2YXIgYT0wO2E8dGhpcy50OysrYSl7YlthXT10aGlzLkRNJn50aGlzW2FdfWIudD10aGlzLnQ7Yi5zPX50aGlzLnM7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5TaGlmdExlZnQoYil7dmFyIGE9bmJpKCk7aWYoYjwwKXt0aGlzLnJTaGlmdFRvKC1iLGEpfWVsc2V7dGhpcy5sU2hpZnRUbyhiLGEpfXJldHVybiBhfWZ1bmN0aW9uIGJuU2hpZnRSaWdodChiKXt2YXIgYT1uYmkoKTtpZihiPDApe3RoaXMubFNoaWZ0VG8oLWIsYSl9ZWxzZXt0aGlzLnJTaGlmdFRvKGIsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gbGJpdChhKXtpZihhPT0wKXtyZXR1cm4gLTF9dmFyIGI9MDtpZigoYSY2NTUzNSk9PTApe2E+Pj0xNjtiKz0xNn1pZigoYSYyNTUpPT0wKXthPj49ODtiKz04fWlmKChhJjE1KT09MCl7YT4+PTQ7Yis9NH1pZigoYSYzKT09MCl7YT4+PTI7Yis9Mn1pZigoYSYxKT09MCl7KytifXJldHVybiBifWZ1bmN0aW9uIGJuR2V0TG93ZXN0U2V0Qml0KCl7Zm9yKHZhciBhPTA7YTx0aGlzLnQ7KythKXtpZih0aGlzW2FdIT0wKXtyZXR1cm4gYSp0aGlzLkRCK2xiaXQodGhpc1thXSl9fWlmKHRoaXMuczwwKXtyZXR1cm4gdGhpcy50KnRoaXMuREJ9cmV0dXJuIC0xfWZ1bmN0aW9uIGNiaXQoYSl7dmFyIGI9MDt3aGlsZShhIT0wKXthJj1hLTE7KytifXJldHVybiBifWZ1bmN0aW9uIGJuQml0Q291bnQoKXt2YXIgYz0wLGE9dGhpcy5zJnRoaXMuRE07Zm9yKHZhciBiPTA7Yjx0aGlzLnQ7KytiKXtjKz1jYml0KHRoaXNbYl1eYSl9cmV0dXJuIGN9ZnVuY3Rpb24gYm5UZXN0Qml0KGIpe3ZhciBhPU1hdGguZmxvb3IoYi90aGlzLkRCKTtpZihhPj10aGlzLnQpe3JldHVybih0aGlzLnMhPTApfXJldHVybigodGhpc1thXSYoMTw8KGIldGhpcy5EQikpKSE9MCl9ZnVuY3Rpb24gYm5wQ2hhbmdlQml0KGMsYil7dmFyIGE9QmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGMpO3RoaXMuYml0d2lzZVRvKGEsYixhKTtyZXR1cm4gYX1mdW5jdGlvbiBiblNldEJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF9vcil9ZnVuY3Rpb24gYm5DbGVhckJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF9hbmRub3QpfWZ1bmN0aW9uIGJuRmxpcEJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF94b3IpfWZ1bmN0aW9uIGJucEFkZFRvKGQsZil7dmFyIGU9MCxnPTAsYj1NYXRoLm1pbihkLnQsdGhpcy50KTt3aGlsZShlPGIpe2crPXRoaXNbZV0rZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWlmKGQudDx0aGlzLnQpe2crPWQuczt3aGlsZShlPHRoaXMudCl7Zys9dGhpc1tlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPXRoaXMuc31lbHNle2crPXRoaXMuczt3aGlsZShlPGQudCl7Zys9ZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPWQuc31mLnM9KGc8MCk/LTE6MDtpZihnPjApe2ZbZSsrXT1nfWVsc2V7aWYoZzwtMSl7ZltlKytdPXRoaXMuRFYrZ319Zi50PWU7Zi5jbGFtcCgpfWZ1bmN0aW9uIGJuQWRkKGIpe3ZhciBjPW5iaSgpO3RoaXMuYWRkVG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBiblN1YnRyYWN0KGIpe3ZhciBjPW5iaSgpO3RoaXMuc3ViVG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBibk11bHRpcGx5KGIpe3ZhciBjPW5iaSgpO3RoaXMubXVsdGlwbHlUbyhiLGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuU3F1YXJlKCl7dmFyIGE9bmJpKCk7dGhpcy5zcXVhcmVUbyhhKTtyZXR1cm4gYX1mdW5jdGlvbiBibkRpdmlkZShiKXt2YXIgYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsYyxudWxsKTtyZXR1cm4gY31mdW5jdGlvbiBiblJlbWFpbmRlcihiKXt2YXIgYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsbnVsbCxjKTtyZXR1cm4gY31mdW5jdGlvbiBibkRpdmlkZUFuZFJlbWFpbmRlcihiKXt2YXIgZD1uYmkoKSxjPW5iaSgpO3RoaXMuZGl2UmVtVG8oYixkLGMpO3JldHVybiBuZXcgQXJyYXkoZCxjKX1mdW5jdGlvbiBibnBETXVsdGlwbHkoYSl7dGhpc1t0aGlzLnRdPXRoaXMuYW0oMCxhLTEsdGhpcywwLDAsdGhpcy50KTsrK3RoaXMudDt0aGlzLmNsYW1wKCl9ZnVuY3Rpb24gYm5wREFkZE9mZnNldChiLGEpe2lmKGI9PTApe3JldHVybn13aGlsZSh0aGlzLnQ8PWEpe3RoaXNbdGhpcy50KytdPTB9dGhpc1thXSs9Yjt3aGlsZSh0aGlzW2FdPj10aGlzLkRWKXt0aGlzW2FdLT10aGlzLkRWO2lmKCsrYT49dGhpcy50KXt0aGlzW3RoaXMudCsrXT0wfSsrdGhpc1thXX19ZnVuY3Rpb24gTnVsbEV4cCgpe31mdW5jdGlvbiBuTm9wKGEpe3JldHVybiBhfWZ1bmN0aW9uIG5NdWxUbyhhLGMsYil7YS5tdWx0aXBseVRvKGMsYil9ZnVuY3Rpb24gblNxclRvKGEsYil7YS5zcXVhcmVUbyhiKX1OdWxsRXhwLnByb3RvdHlwZS5jb252ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUucmV2ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUubXVsVG89bk11bFRvO051bGxFeHAucHJvdG90eXBlLnNxclRvPW5TcXJUbztmdW5jdGlvbiBiblBvdyhhKXtyZXR1cm4gdGhpcy5leHAoYSxuZXcgTnVsbEV4cCgpKX1mdW5jdGlvbiBibnBNdWx0aXBseUxvd2VyVG8oYixmLGUpe3ZhciBkPU1hdGgubWluKHRoaXMudCtiLnQsZik7ZS5zPTA7ZS50PWQ7d2hpbGUoZD4wKXtlWy0tZF09MH12YXIgYztmb3IoYz1lLnQtdGhpcy50O2Q8YzsrK2Qpe2VbZCt0aGlzLnRdPXRoaXMuYW0oMCxiW2RdLGUsZCwwLHRoaXMudCl9Zm9yKGM9TWF0aC5taW4oYi50LGYpO2Q8YzsrK2Qpe3RoaXMuYW0oMCxiW2RdLGUsZCwwLGYtZCl9ZS5jbGFtcCgpfWZ1bmN0aW9uIGJucE11bHRpcGx5VXBwZXJUbyhiLGUsZCl7LS1lO3ZhciBjPWQudD10aGlzLnQrYi50LWU7ZC5zPTA7d2hpbGUoLS1jPj0wKXtkW2NdPTB9Zm9yKGM9TWF0aC5tYXgoZS10aGlzLnQsMCk7YzxiLnQ7KytjKXtkW3RoaXMudCtjLWVdPXRoaXMuYW0oZS1jLGJbY10sZCwwLDAsdGhpcy50K2MtZSl9ZC5jbGFtcCgpO2QuZHJTaGlmdFRvKDEsZCl9ZnVuY3Rpb24gQmFycmV0dChhKXt0aGlzLnIyPW5iaSgpO3RoaXMucTM9bmJpKCk7QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKDIqYS50LHRoaXMucjIpO3RoaXMubXU9dGhpcy5yMi5kaXZpZGUoYSk7dGhpcy5tPWF9ZnVuY3Rpb24gYmFycmV0dENvbnZlcnQoYSl7aWYoYS5zPDB8fGEudD4yKnRoaXMubS50KXtyZXR1cm4gYS5tb2QodGhpcy5tKX1lbHNle2lmKGEuY29tcGFyZVRvKHRoaXMubSk8MCl7cmV0dXJuIGF9ZWxzZXt2YXIgYj1uYmkoKTthLmNvcHlUbyhiKTt0aGlzLnJlZHVjZShiKTtyZXR1cm4gYn19fWZ1bmN0aW9uIGJhcnJldHRSZXZlcnQoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gYmFycmV0dFJlZHVjZShhKXthLmRyU2hpZnRUbyh0aGlzLm0udC0xLHRoaXMucjIpO2lmKGEudD50aGlzLm0udCsxKXthLnQ9dGhpcy5tLnQrMTthLmNsYW1wKCl9dGhpcy5tdS5tdWx0aXBseVVwcGVyVG8odGhpcy5yMix0aGlzLm0udCsxLHRoaXMucTMpO3RoaXMubS5tdWx0aXBseUxvd2VyVG8odGhpcy5xMyx0aGlzLm0udCsxLHRoaXMucjIpO3doaWxlKGEuY29tcGFyZVRvKHRoaXMucjIpPDApe2EuZEFkZE9mZnNldCgxLHRoaXMubS50KzEpfWEuc3ViVG8odGhpcy5yMixhKTt3aGlsZShhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gYmFycmV0dFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBiYXJyZXR0TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfUJhcnJldHQucHJvdG90eXBlLmNvbnZlcnQ9YmFycmV0dENvbnZlcnQ7QmFycmV0dC5wcm90b3R5cGUucmV2ZXJ0PWJhcnJldHRSZXZlcnQ7QmFycmV0dC5wcm90b3R5cGUucmVkdWNlPWJhcnJldHRSZWR1Y2U7QmFycmV0dC5wcm90b3R5cGUubXVsVG89YmFycmV0dE11bFRvO0JhcnJldHQucHJvdG90eXBlLnNxclRvPWJhcnJldHRTcXJUbztmdW5jdGlvbiBibk1vZFBvdyhxLGYpe3ZhciBvPXEuYml0TGVuZ3RoKCksaCxiPW5idigxKSx2O2lmKG88PTApe3JldHVybiBifWVsc2V7aWYobzwxOCl7aD0xfWVsc2V7aWYobzw0OCl7aD0zfWVsc2V7aWYobzwxNDQpe2g9NH1lbHNle2lmKG88NzY4KXtoPTV9ZWxzZXtoPTZ9fX19fWlmKG88OCl7dj1uZXcgQ2xhc3NpYyhmKX1lbHNle2lmKGYuaXNFdmVuKCkpe3Y9bmV3IEJhcnJldHQoZil9ZWxzZXt2PW5ldyBNb250Z29tZXJ5KGYpfX12YXIgcD1uZXcgQXJyYXkoKSxkPTMscz1oLTEsYT0oMTw8aCktMTtwWzFdPXYuY29udmVydCh0aGlzKTtpZihoPjEpe3ZhciBBPW5iaSgpO3Yuc3FyVG8ocFsxXSxBKTt3aGlsZShkPD1hKXtwW2RdPW5iaSgpO3YubXVsVG8oQSxwW2QtMl0scFtkXSk7ZCs9Mn19dmFyIGw9cS50LTEseCx1PXRydWUsYz1uYmkoKSx5O289bmJpdHMocVtsXSktMTt3aGlsZShsPj0wKXtpZihvPj1zKXt4PShxW2xdPj4oby1zKSkmYX1lbHNle3g9KHFbbF0mKCgxPDwobysxKSktMSkpPDwocy1vKTtpZihsPjApe3h8PXFbbC0xXT4+KHRoaXMuREIrby1zKX19ZD1oO3doaWxlKCh4JjEpPT0wKXt4Pj49MTstLWR9aWYoKG8tPWQpPDApe28rPXRoaXMuREI7LS1sfWlmKHUpe3BbeF0uY29weVRvKGIpO3U9ZmFsc2V9ZWxzZXt3aGlsZShkPjEpe3Yuc3FyVG8oYixjKTt2LnNxclRvKGMsYik7ZC09Mn1pZihkPjApe3Yuc3FyVG8oYixjKX1lbHNle3k9YjtiPWM7Yz15fXYubXVsVG8oYyxwW3hdLGIpfXdoaWxlKGw+PTAmJihxW2xdJigxPDxvKSk9PTApe3Yuc3FyVG8oYixjKTt5PWI7Yj1jO2M9eTtpZigtLW88MCl7bz10aGlzLkRCLTE7LS1sfX19cmV0dXJuIHYucmV2ZXJ0KGIpfWZ1bmN0aW9uIGJuR0NEKGMpe3ZhciBiPSh0aGlzLnM8MCk/dGhpcy5uZWdhdGUoKTp0aGlzLmNsb25lKCk7dmFyIGg9KGMuczwwKT9jLm5lZ2F0ZSgpOmMuY2xvbmUoKTtpZihiLmNvbXBhcmVUbyhoKTwwKXt2YXIgZT1iO2I9aDtoPWV9dmFyIGQ9Yi5nZXRMb3dlc3RTZXRCaXQoKSxmPWguZ2V0TG93ZXN0U2V0Qml0KCk7aWYoZjwwKXtyZXR1cm4gYn1pZihkPGYpe2Y9ZH1pZihmPjApe2IuclNoaWZ0VG8oZixiKTtoLnJTaGlmdFRvKGYsaCl9d2hpbGUoYi5zaWdudW0oKT4wKXtpZigoZD1iLmdldExvd2VzdFNldEJpdCgpKT4wKXtiLnJTaGlmdFRvKGQsYil9aWYoKGQ9aC5nZXRMb3dlc3RTZXRCaXQoKSk+MCl7aC5yU2hpZnRUbyhkLGgpfWlmKGIuY29tcGFyZVRvKGgpPj0wKXtiLnN1YlRvKGgsYik7Yi5yU2hpZnRUbygxLGIpfWVsc2V7aC5zdWJUbyhiLGgpO2guclNoaWZ0VG8oMSxoKX19aWYoZj4wKXtoLmxTaGlmdFRvKGYsaCl9cmV0dXJuIGh9ZnVuY3Rpb24gYm5wTW9kSW50KGUpe2lmKGU8PTApe3JldHVybiAwfXZhciBjPXRoaXMuRFYlZSxiPSh0aGlzLnM8MCk/ZS0xOjA7aWYodGhpcy50PjApe2lmKGM9PTApe2I9dGhpc1swXSVlfWVsc2V7Zm9yKHZhciBhPXRoaXMudC0xO2E+PTA7LS1hKXtiPShjKmIrdGhpc1thXSklZX19fXJldHVybiBifWZ1bmN0aW9uIGJuTW9kSW52ZXJzZShmKXt2YXIgaj1mLmlzRXZlbigpO2lmKCh0aGlzLmlzRXZlbigpJiZqKXx8Zi5zaWdudW0oKT09MCl7cmV0dXJuIEJpZ0ludGVnZXIuWkVST312YXIgaT1mLmNsb25lKCksaD10aGlzLmNsb25lKCk7dmFyIGc9bmJ2KDEpLGU9bmJ2KDApLGw9bmJ2KDApLGs9bmJ2KDEpO3doaWxlKGkuc2lnbnVtKCkhPTApe3doaWxlKGkuaXNFdmVuKCkpe2kuclNoaWZ0VG8oMSxpKTtpZihqKXtpZighZy5pc0V2ZW4oKXx8IWUuaXNFdmVuKCkpe2cuYWRkVG8odGhpcyxnKTtlLnN1YlRvKGYsZSl9Zy5yU2hpZnRUbygxLGcpfWVsc2V7aWYoIWUuaXNFdmVuKCkpe2Uuc3ViVG8oZixlKX19ZS5yU2hpZnRUbygxLGUpfXdoaWxlKGguaXNFdmVuKCkpe2guclNoaWZ0VG8oMSxoKTtpZihqKXtpZighbC5pc0V2ZW4oKXx8IWsuaXNFdmVuKCkpe2wuYWRkVG8odGhpcyxsKTtrLnN1YlRvKGYsayl9bC5yU2hpZnRUbygxLGwpfWVsc2V7aWYoIWsuaXNFdmVuKCkpe2suc3ViVG8oZixrKX19ay5yU2hpZnRUbygxLGspfWlmKGkuY29tcGFyZVRvKGgpPj0wKXtpLnN1YlRvKGgsaSk7aWYoail7Zy5zdWJUbyhsLGcpfWUuc3ViVG8oayxlKX1lbHNle2guc3ViVG8oaSxoKTtpZihqKXtsLnN1YlRvKGcsbCl9ay5zdWJUbyhlLGspfX1pZihoLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkhPTApe3JldHVybiBCaWdJbnRlZ2VyLlpFUk99aWYoay5jb21wYXJlVG8oZik+PTApe3JldHVybiBrLnN1YnRyYWN0KGYpfWlmKGsuc2lnbnVtKCk8MCl7ay5hZGRUbyhmLGspfWVsc2V7cmV0dXJuIGt9aWYoay5zaWdudW0oKTwwKXtyZXR1cm4gay5hZGQoZil9ZWxzZXtyZXR1cm4ga319dmFyIGxvd3ByaW1lcz1bMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3XTt2YXIgbHBsaW09KDE8PDI2KS9sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXTtmdW5jdGlvbiBibklzUHJvYmFibGVQcmltZShlKXt2YXIgZCxiPXRoaXMuYWJzKCk7aWYoYi50PT0xJiZiWzBdPD1sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXSl7Zm9yKGQ9MDtkPGxvd3ByaW1lcy5sZW5ndGg7KytkKXtpZihiWzBdPT1sb3dwcmltZXNbZF0pe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9aWYoYi5pc0V2ZW4oKSl7cmV0dXJuIGZhbHNlfWQ9MTt3aGlsZShkPGxvd3ByaW1lcy5sZW5ndGgpe3ZhciBhPWxvd3ByaW1lc1tkXSxjPWQrMTt3aGlsZShjPGxvd3ByaW1lcy5sZW5ndGgmJmE8bHBsaW0pe2EqPWxvd3ByaW1lc1tjKytdfWE9Yi5tb2RJbnQoYSk7d2hpbGUoZDxjKXtpZihhJWxvd3ByaW1lc1tkKytdPT0wKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gYi5taWxsZXJSYWJpbihlKX1mdW5jdGlvbiBibnBNaWxsZXJSYWJpbihmKXt2YXIgZz10aGlzLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTt2YXIgYz1nLmdldExvd2VzdFNldEJpdCgpO2lmKGM8PTApe3JldHVybiBmYWxzZX12YXIgaD1nLnNoaWZ0UmlnaHQoYyk7Zj0oZisxKT4+MTtpZihmPmxvd3ByaW1lcy5sZW5ndGgpe2Y9bG93cHJpbWVzLmxlbmd0aH12YXIgYj1uYmkoKTtmb3IodmFyIGU9MDtlPGY7KytlKXtiLmZyb21JbnQobG93cHJpbWVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsb3dwcmltZXMubGVuZ3RoKV0pO3ZhciBsPWIubW9kUG93KGgsdGhpcyk7aWYobC5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpIT0wJiZsLmNvbXBhcmVUbyhnKSE9MCl7dmFyIGQ9MTt3aGlsZShkKys8YyYmbC5jb21wYXJlVG8oZykhPTApe2w9bC5tb2RQb3dJbnQoMix0aGlzKTtpZihsLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSk9PTApe3JldHVybiBmYWxzZX19aWYobC5jb21wYXJlVG8oZykhPTApe3JldHVybiBmYWxzZX19fXJldHVybiB0cnVlfUJpZ0ludGVnZXIucHJvdG90eXBlLmNodW5rU2l6ZT1ibnBDaHVua1NpemU7QmlnSW50ZWdlci5wcm90b3R5cGUudG9SYWRpeD1ibnBUb1JhZGl4O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21SYWRpeD1ibnBGcm9tUmFkaXg7QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbU51bWJlcj1ibnBGcm9tTnVtYmVyO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdHdpc2VUbz1ibnBCaXR3aXNlVG87QmlnSW50ZWdlci5wcm90b3R5cGUuY2hhbmdlQml0PWJucENoYW5nZUJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hZGRUbz1ibnBBZGRUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5kTXVsdGlwbHk9Ym5wRE11bHRpcGx5O0JpZ0ludGVnZXIucHJvdG90eXBlLmRBZGRPZmZzZXQ9Ym5wREFkZE9mZnNldDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseUxvd2VyVG89Ym5wTXVsdGlwbHlMb3dlclRvO0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VXBwZXJUbz1ibnBNdWx0aXBseVVwcGVyVG87QmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW50PWJucE1vZEludDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5taWxsZXJSYWJpbj1ibnBNaWxsZXJSYWJpbjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbG9uZT1ibkNsb25lO0JpZ0ludGVnZXIucHJvdG90eXBlLmludFZhbHVlPWJuSW50VmFsdWU7QmlnSW50ZWdlci5wcm90b3R5cGUuYnl0ZVZhbHVlPWJuQnl0ZVZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLnNob3J0VmFsdWU9Ym5TaG9ydFZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLnNpZ251bT1iblNpZ051bTtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b0J5dGVBcnJheT1iblRvQnl0ZUFycmF5O0JpZ0ludGVnZXIucHJvdG90eXBlLmVxdWFscz1ibkVxdWFscztCaWdJbnRlZ2VyLnByb3RvdHlwZS5taW49Ym5NaW47QmlnSW50ZWdlci5wcm90b3R5cGUubWF4PWJuTWF4O0JpZ0ludGVnZXIucHJvdG90eXBlLmFuZD1ibkFuZDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5vcj1ibk9yO0JpZ0ludGVnZXIucHJvdG90eXBlLnhvcj1iblhvcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmROb3Q9Ym5BbmROb3Q7QmlnSW50ZWdlci5wcm90b3R5cGUubm90PWJuTm90O0JpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0TGVmdD1iblNoaWZ0TGVmdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdFJpZ2h0PWJuU2hpZnRSaWdodDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5nZXRMb3dlc3RTZXRCaXQ9Ym5HZXRMb3dlc3RTZXRCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuYml0Q291bnQ9Ym5CaXRDb3VudDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50ZXN0Qml0PWJuVGVzdEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zZXRCaXQ9Ym5TZXRCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuY2xlYXJCaXQ9Ym5DbGVhckJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5mbGlwQml0PWJuRmxpcEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hZGQ9Ym5BZGQ7QmlnSW50ZWdlci5wcm90b3R5cGUuc3VidHJhY3Q9Ym5TdWJ0cmFjdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseT1ibk11bHRpcGx5O0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdmlkZT1ibkRpdmlkZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5yZW1haW5kZXI9Ym5SZW1haW5kZXI7QmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlQW5kUmVtYWluZGVyPWJuRGl2aWRlQW5kUmVtYWluZGVyO0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZFBvdz1ibk1vZFBvdztCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnZlcnNlPWJuTW9kSW52ZXJzZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5wb3c9Ym5Qb3c7QmlnSW50ZWdlci5wcm90b3R5cGUuZ2NkPWJuR0NEO0JpZ0ludGVnZXIucHJvdG90eXBlLmlzUHJvYmFibGVQcmltZT1ibklzUHJvYmFibGVQcmltZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmU9Ym5TcXVhcmU7XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbmZ1bmN0aW9uIEFyY2ZvdXIoKXt0aGlzLmk9MDt0aGlzLmo9MDt0aGlzLlM9bmV3IEFycmF5KCl9ZnVuY3Rpb24gQVJDNGluaXQoZCl7dmFyIGMsYSxiO2ZvcihjPTA7YzwyNTY7KytjKXt0aGlzLlNbY109Y31hPTA7Zm9yKGM9MDtjPDI1NjsrK2Mpe2E9KGErdGhpcy5TW2NdK2RbYyVkLmxlbmd0aF0pJjI1NTtiPXRoaXMuU1tjXTt0aGlzLlNbY109dGhpcy5TW2FdO3RoaXMuU1thXT1ifXRoaXMuaT0wO3RoaXMuaj0wfWZ1bmN0aW9uIEFSQzRuZXh0KCl7dmFyIGE7dGhpcy5pPSh0aGlzLmkrMSkmMjU1O3RoaXMuaj0odGhpcy5qK3RoaXMuU1t0aGlzLmldKSYyNTU7YT10aGlzLlNbdGhpcy5pXTt0aGlzLlNbdGhpcy5pXT10aGlzLlNbdGhpcy5qXTt0aGlzLlNbdGhpcy5qXT1hO3JldHVybiB0aGlzLlNbKGErdGhpcy5TW3RoaXMuaV0pJjI1NV19QXJjZm91ci5wcm90b3R5cGUuaW5pdD1BUkM0aW5pdDtBcmNmb3VyLnByb3RvdHlwZS5uZXh0PUFSQzRuZXh0O2Z1bmN0aW9uIHBybmdfbmV3c3RhdGUoKXtyZXR1cm4gbmV3IEFyY2ZvdXIoKX12YXIgcm5nX3BzaXplPTI1Njtcbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG4gKi9cclxudmFyIHJuZ19zdGF0ZTt2YXIgcm5nX3Bvb2w7dmFyIHJuZ19wcHRyO2Z1bmN0aW9uIHJuZ19zZWVkX2ludChhKXtybmdfcG9vbFtybmdfcHB0cisrXV49YSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj44KSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj4xNikmMjU1O3JuZ19wb29sW3JuZ19wcHRyKytdXj0oYT4+MjQpJjI1NTtpZihybmdfcHB0cj49cm5nX3BzaXplKXtybmdfcHB0ci09cm5nX3BzaXplfX1mdW5jdGlvbiBybmdfc2VlZF90aW1lKCl7cm5nX3NlZWRfaW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpKX1pZihybmdfcG9vbD09bnVsbCl7cm5nX3Bvb2w9bmV3IEFycmF5KCk7cm5nX3BwdHI9MDt2YXIgdDtpZih3aW5kb3chPT11bmRlZmluZWQmJih3aW5kb3cuY3J5cHRvIT09dW5kZWZpbmVkfHx3aW5kb3cubXNDcnlwdG8hPT11bmRlZmluZWQpKXt2YXIgY3J5cHRvPXdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0bztpZihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXt2YXIgdWE9bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXModWEpO2Zvcih0PTA7dDwzMjsrK3Qpe3JuZ19wb29sW3JuZ19wcHRyKytdPXVhW3RdfX1lbHNle2lmKG5hdmlnYXRvci5hcHBOYW1lPT1cIk5ldHNjYXBlXCImJm5hdmlnYXRvci5hcHBWZXJzaW9uPFwiNVwiKXt2YXIgej13aW5kb3cuY3J5cHRvLnJhbmRvbSgzMik7Zm9yKHQ9MDt0PHoubGVuZ3RoOysrdCl7cm5nX3Bvb2xbcm5nX3BwdHIrK109ei5jaGFyQ29kZUF0KHQpJjI1NX19fX13aGlsZShybmdfcHB0cjxybmdfcHNpemUpe3Q9TWF0aC5mbG9vcig2NTUzNipNYXRoLnJhbmRvbSgpKTtybmdfcG9vbFtybmdfcHB0cisrXT10Pj4+ODtybmdfcG9vbFtybmdfcHB0cisrXT10JjI1NX1ybmdfcHB0cj0wO3JuZ19zZWVkX3RpbWUoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGUoKXtpZihybmdfc3RhdGU9PW51bGwpe3JuZ19zZWVkX3RpbWUoKTtybmdfc3RhdGU9cHJuZ19uZXdzdGF0ZSgpO3JuZ19zdGF0ZS5pbml0KHJuZ19wb29sKTtmb3Iocm5nX3BwdHI9MDtybmdfcHB0cjxybmdfcG9vbC5sZW5ndGg7KytybmdfcHB0cil7cm5nX3Bvb2xbcm5nX3BwdHJdPTB9cm5nX3BwdHI9MH1yZXR1cm4gcm5nX3N0YXRlLm5leHQoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGVzKGIpe3ZhciBhO2ZvcihhPTA7YTxiLmxlbmd0aDsrK2Epe2JbYV09cm5nX2dldF9ieXRlKCl9fWZ1bmN0aW9uIFNlY3VyZVJhbmRvbSgpe31TZWN1cmVSYW5kb20ucHJvdG90eXBlLm5leHRCeXRlcz1ybmdfZ2V0X2J5dGVzO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUJpZ0ludChiLGEpe3JldHVybiBuZXcgQmlnSW50ZWdlcihiLGEpfWZ1bmN0aW9uIGxpbmVicmsoYyxkKXt2YXIgYT1cIlwiO3ZhciBiPTA7d2hpbGUoYitkPGMubGVuZ3RoKXthKz1jLnN1YnN0cmluZyhiLGIrZCkrXCJcXG5cIjtiKz1kfXJldHVybiBhK2Muc3Vic3RyaW5nKGIsYy5sZW5ndGgpfWZ1bmN0aW9uIGJ5dGUySGV4KGEpe2lmKGE8MTYpe3JldHVyblwiMFwiK2EudG9TdHJpbmcoMTYpfWVsc2V7cmV0dXJuIGEudG9TdHJpbmcoMTYpfX1mdW5jdGlvbiBwa2NzMXBhZDIoZSxoKXtpZihoPGUubGVuZ3RoKzExKXt0aHJvd1wiTWVzc2FnZSB0b28gbG9uZyBmb3IgUlNBXCI7cmV0dXJuIG51bGx9dmFyIGc9bmV3IEFycmF5KCk7dmFyIGQ9ZS5sZW5ndGgtMTt3aGlsZShkPj0wJiZoPjApe3ZhciBmPWUuY2hhckNvZGVBdChkLS0pO2lmKGY8MTI4KXtnWy0taF09Zn1lbHNle2lmKChmPjEyNykmJihmPDIwNDgpKXtnWy0taF09KGYmNjMpfDEyODtnWy0taF09KGY+PjYpfDE5Mn1lbHNle2dbLS1oXT0oZiY2Myl8MTI4O2dbLS1oXT0oKGY+PjYpJjYzKXwxMjg7Z1stLWhdPShmPj4xMil8MjI0fX19Z1stLWhdPTA7dmFyIGI9bmV3IFNlY3VyZVJhbmRvbSgpO3ZhciBhPW5ldyBBcnJheSgpO3doaWxlKGg+Mil7YVswXT0wO3doaWxlKGFbMF09PTApe2IubmV4dEJ5dGVzKGEpfWdbLS1oXT1hWzBdfWdbLS1oXT0yO2dbLS1oXT0wO3JldHVybiBuZXcgQmlnSW50ZWdlcihnKX1mdW5jdGlvbiBvYWVwX21nZjFfYXJyKGMsYSxlKXt2YXIgYj1cIlwiLGQ9MDt3aGlsZShiLmxlbmd0aDxhKXtiKz1lKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGMuY29uY2F0KFsoZCY0Mjc4MTkwMDgwKT4+MjQsKGQmMTY3MTE2ODApPj4xNiwoZCY2NTI4MCk+PjgsZCYyNTVdKSkpO2QrPTF9cmV0dXJuIGJ9ZnVuY3Rpb24gb2FlcF9wYWQocSxhLGYsbCl7dmFyIGM9S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdDt2YXIgbz1LSlVSLmNyeXB0by5VdGlsO3ZhciBiPW51bGw7aWYoIWYpe2Y9XCJzaGExXCJ9aWYodHlwZW9mIGY9PT1cInN0cmluZ1wiKXtiPWMuZ2V0Q2Fub25pY2FsQWxnTmFtZShmKTtsPWMuZ2V0SGFzaExlbmd0aChiKTtmPWZ1bmN0aW9uKGkpe3JldHVybiBoZXh0b3JzdHIoby5oYXNoSGV4KHJzdHJ0b2hleChpKSxiKSl9fWlmKHEubGVuZ3RoKzIqbCsyPmEpe3Rocm93XCJNZXNzYWdlIHRvbyBsb25nIGZvciBSU0FcIn12YXIgaz1cIlwiLGU7Zm9yKGU9MDtlPGEtcS5sZW5ndGgtMipsLTI7ZSs9MSl7ays9XCJcXHgwMFwifXZhciBoPWYoXCJcIikraytcIlxceDAxXCIrcTt2YXIgZz1uZXcgQXJyYXkobCk7bmV3IFNlY3VyZVJhbmRvbSgpLm5leHRCeXRlcyhnKTt2YXIgaj1vYWVwX21nZjFfYXJyKGcsaC5sZW5ndGgsZik7dmFyIHA9W107Zm9yKGU9MDtlPGgubGVuZ3RoO2UrPTEpe3BbZV09aC5jaGFyQ29kZUF0KGUpXmouY2hhckNvZGVBdChlKX12YXIgbT1vYWVwX21nZjFfYXJyKHAsZy5sZW5ndGgsZik7dmFyIGQ9WzBdO2ZvcihlPTA7ZTxnLmxlbmd0aDtlKz0xKXtkW2UrMV09Z1tlXV5tLmNoYXJDb2RlQXQoZSl9cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGQuY29uY2F0KHApKX1mdW5jdGlvbiBSU0FLZXkoKXt0aGlzLm49bnVsbDt0aGlzLmU9MDt0aGlzLmQ9bnVsbDt0aGlzLnA9bnVsbDt0aGlzLnE9bnVsbDt0aGlzLmRtcDE9bnVsbDt0aGlzLmRtcTE9bnVsbDt0aGlzLmNvZWZmPW51bGx9ZnVuY3Rpb24gUlNBU2V0UHVibGljKGIsYSl7dGhpcy5pc1B1YmxpYz10cnVlO3RoaXMuaXNQcml2YXRlPWZhbHNlO2lmKHR5cGVvZiBiIT09XCJzdHJpbmdcIil7dGhpcy5uPWI7dGhpcy5lPWF9ZWxzZXtpZihiIT1udWxsJiZhIT1udWxsJiZiLmxlbmd0aD4wJiZhLmxlbmd0aD4wKXt0aGlzLm49cGFyc2VCaWdJbnQoYiwxNik7dGhpcy5lPXBhcnNlSW50KGEsMTYpfWVsc2V7dGhyb3dcIkludmFsaWQgUlNBIHB1YmxpYyBrZXlcIn19fWZ1bmN0aW9uIFJTQURvUHVibGljKGEpe3JldHVybiBhLm1vZFBvd0ludCh0aGlzLmUsdGhpcy5uKX1mdW5jdGlvbiBSU0FFbmNyeXB0KGQpe3ZhciBhPXBrY3MxcGFkMihkLCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMpO2lmKGE9PW51bGwpe3JldHVybiBudWxsfXZhciBlPXRoaXMuZG9QdWJsaWMoYSk7aWYoZT09bnVsbCl7cmV0dXJuIG51bGx9dmFyIGI9ZS50b1N0cmluZygxNik7aWYoKGIubGVuZ3RoJjEpPT0wKXtyZXR1cm4gYn1lbHNle3JldHVyblwiMFwiK2J9fWZ1bmN0aW9uIFJTQUVuY3J5cHRPQUVQKGYsZSxiKXt2YXIgYT1vYWVwX3BhZChmLCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMsZSxiKTtpZihhPT1udWxsKXtyZXR1cm4gbnVsbH12YXIgZz10aGlzLmRvUHVibGljKGEpO2lmKGc9PW51bGwpe3JldHVybiBudWxsfXZhciBkPWcudG9TdHJpbmcoMTYpO2lmKChkLmxlbmd0aCYxKT09MCl7cmV0dXJuIGR9ZWxzZXtyZXR1cm5cIjBcIitkfX1SU0FLZXkucHJvdG90eXBlLmRvUHVibGljPVJTQURvUHVibGljO1JTQUtleS5wcm90b3R5cGUuc2V0UHVibGljPVJTQVNldFB1YmxpYztSU0FLZXkucHJvdG90eXBlLmVuY3J5cHQ9UlNBRW5jcnlwdDtSU0FLZXkucHJvdG90eXBlLmVuY3J5cHRPQUVQPVJTQUVuY3J5cHRPQUVQO1JTQUtleS5wcm90b3R5cGUudHlwZT1cIlJTQVwiO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBFQ0ZpZWxkRWxlbWVudEZwKGIsYSl7dGhpcy54PWE7dGhpcy5xPWJ9ZnVuY3Rpb24gZmVGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1yZXR1cm4odGhpcy5xLmVxdWFscyhhLnEpJiZ0aGlzLnguZXF1YWxzKGEueCkpfWZ1bmN0aW9uIGZlRnBUb0JpZ0ludGVnZXIoKXtyZXR1cm4gdGhpcy54fWZ1bmN0aW9uIGZlRnBOZWdhdGUoKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5uZWdhdGUoKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcEFkZChhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5hZGQoYS50b0JpZ0ludGVnZXIoKSkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBTdWJ0cmFjdChhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5zdWJ0cmFjdChhLnRvQmlnSW50ZWdlcigpKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcE11bHRpcGx5KGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54Lm11bHRpcGx5KGEudG9CaWdJbnRlZ2VyKCkpLm1vZCh0aGlzLnEpKX1mdW5jdGlvbiBmZUZwU3F1YXJlKCl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLnguc3F1YXJlKCkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBEaXZpZGUoYSl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLngubXVsdGlwbHkoYS50b0JpZ0ludGVnZXIoKS5tb2RJbnZlcnNlKHRoaXMucSkpLm1vZCh0aGlzLnEpKX1FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5lcXVhbHM9ZmVGcEVxdWFscztFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS50b0JpZ0ludGVnZXI9ZmVGcFRvQmlnSW50ZWdlcjtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5uZWdhdGU9ZmVGcE5lZ2F0ZTtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5hZGQ9ZmVGcEFkZDtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5zdWJ0cmFjdD1mZUZwU3VidHJhY3Q7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUubXVsdGlwbHk9ZmVGcE11bHRpcGx5O0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLnNxdWFyZT1mZUZwU3F1YXJlO0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLmRpdmlkZT1mZUZwRGl2aWRlO2Z1bmN0aW9uIEVDUG9pbnRGcChjLGEsZCxiKXt0aGlzLmN1cnZlPWM7dGhpcy54PWE7dGhpcy55PWQ7aWYoYj09bnVsbCl7dGhpcy56PUJpZ0ludGVnZXIuT05FfWVsc2V7dGhpcy56PWJ9dGhpcy56aW52PW51bGx9ZnVuY3Rpb24gcG9pbnRGcEdldFgoKXtpZih0aGlzLnppbnY9PW51bGwpe3RoaXMuemludj10aGlzLnoubW9kSW52ZXJzZSh0aGlzLmN1cnZlLnEpfXJldHVybiB0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnppbnYpLm1vZCh0aGlzLmN1cnZlLnEpKX1mdW5jdGlvbiBwb2ludEZwR2V0WSgpe2lmKHRoaXMuemludj09bnVsbCl7dGhpcy56aW52PXRoaXMuei5tb2RJbnZlcnNlKHRoaXMuY3VydmUucSl9cmV0dXJuIHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIodGhpcy55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMuemludikubW9kKHRoaXMuY3VydmUucSkpfWZ1bmN0aW9uIHBvaW50RnBFcXVhbHMoYSl7aWYoYT09dGhpcyl7cmV0dXJuIHRydWV9aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiBhLmlzSW5maW5pdHkoKX1pZihhLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpfXZhciBjLGI7Yz1hLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkoYS56KSkubW9kKHRoaXMuY3VydmUucSk7aWYoIWMuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpe3JldHVybiBmYWxzZX1iPWEueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShhLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gYi5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKX1mdW5jdGlvbiBwb2ludEZwSXNJbmZpbml0eSgpe2lmKCh0aGlzLng9PW51bGwpJiYodGhpcy55PT1udWxsKSl7cmV0dXJuIHRydWV9cmV0dXJuIHRoaXMuei5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSYmIXRoaXMueS50b0JpZ0ludGVnZXIoKS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKX1mdW5jdGlvbiBwb2ludEZwTmVnYXRlKCl7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLngsdGhpcy55Lm5lZ2F0ZSgpLHRoaXMueil9ZnVuY3Rpb24gcG9pbnRGcEFkZChsKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGx9aWYobC5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfXZhciBwPWwueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShsLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgbz1sLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkobC56KSkubW9kKHRoaXMuY3VydmUucSk7aWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyhvKSl7aWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyhwKSl7cmV0dXJuIHRoaXMudHdpY2UoKX1yZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBqPW5ldyBCaWdJbnRlZ2VyKFwiM1wiKTt2YXIgZT10aGlzLngudG9CaWdJbnRlZ2VyKCk7dmFyIG49dGhpcy55LnRvQmlnSW50ZWdlcigpO3ZhciBjPWwueC50b0JpZ0ludGVnZXIoKTt2YXIgaz1sLnkudG9CaWdJbnRlZ2VyKCk7dmFyIG09by5zcXVhcmUoKTt2YXIgaT1tLm11bHRpcGx5KG8pO3ZhciBkPWUubXVsdGlwbHkobSk7dmFyIGc9cC5zcXVhcmUoKS5tdWx0aXBseSh0aGlzLnopO3ZhciBhPWcuc3VidHJhY3QoZC5zaGlmdExlZnQoMSkpLm11bHRpcGx5KGwueikuc3VidHJhY3QoaSkubXVsdGlwbHkobykubW9kKHRoaXMuY3VydmUucSk7dmFyIGg9ZC5tdWx0aXBseShqKS5tdWx0aXBseShwKS5zdWJ0cmFjdChuLm11bHRpcGx5KGkpKS5zdWJ0cmFjdChnLm11bHRpcGx5KHApKS5tdWx0aXBseShsLnopLmFkZChwLm11bHRpcGx5KGkpKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZj1pLm11bHRpcGx5KHRoaXMueikubXVsdGlwbHkobC56KS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoYSksdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihoKSxmKX1mdW5jdGlvbiBwb2ludEZwVHdpY2UoKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBnPW5ldyBCaWdJbnRlZ2VyKFwiM1wiKTt2YXIgYz10aGlzLngudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy55LnRvQmlnSW50ZWdlcigpO3ZhciBlPWgubXVsdGlwbHkodGhpcy56KTt2YXIgaj1lLm11bHRpcGx5KGgpLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBpPXRoaXMuY3VydmUuYS50b0JpZ0ludGVnZXIoKTt2YXIgaz1jLnNxdWFyZSgpLm11bHRpcGx5KGcpO2lmKCFCaWdJbnRlZ2VyLlpFUk8uZXF1YWxzKGkpKXtrPWsuYWRkKHRoaXMuei5zcXVhcmUoKS5tdWx0aXBseShpKSl9az1rLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBiPWsuc3F1YXJlKCkuc3VidHJhY3QoYy5zaGlmdExlZnQoMykubXVsdGlwbHkoaikpLnNoaWZ0TGVmdCgxKS5tdWx0aXBseShlKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZj1rLm11bHRpcGx5KGcpLm11bHRpcGx5KGMpLnN1YnRyYWN0KGouc2hpZnRMZWZ0KDEpKS5zaGlmdExlZnQoMikubXVsdGlwbHkoaikuc3VidHJhY3Qoay5zcXVhcmUoKS5tdWx0aXBseShrKSkubW9kKHRoaXMuY3VydmUucSk7dmFyIGQ9ZS5zcXVhcmUoKS5tdWx0aXBseShlKS5zaGlmdExlZnQoMykubW9kKHRoaXMuY3VydmUucSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKGIpLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoZiksZCl9ZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5KGIpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpc31pZihiLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBnPWI7dmFyIGY9Zy5tdWx0aXBseShuZXcgQmlnSW50ZWdlcihcIjNcIikpO3ZhciBsPXRoaXMubmVnYXRlKCk7dmFyIGQ9dGhpczt2YXIgYztmb3IoYz1mLmJpdExlbmd0aCgpLTI7Yz4wOy0tYyl7ZD1kLnR3aWNlKCk7dmFyIGE9Zi50ZXN0Qml0KGMpO3ZhciBqPWcudGVzdEJpdChjKTtpZihhIT1qKXtkPWQuYWRkKGE/dGhpczpsKX19cmV0dXJuIGR9ZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5VHdvKGMsYSxiKXt2YXIgZDtpZihjLmJpdExlbmd0aCgpPmIuYml0TGVuZ3RoKCkpe2Q9Yy5iaXRMZW5ndGgoKS0xfWVsc2V7ZD1iLmJpdExlbmd0aCgpLTF9dmFyIGY9dGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpO3ZhciBlPXRoaXMuYWRkKGEpO3doaWxlKGQ+PTApe2Y9Zi50d2ljZSgpO2lmKGMudGVzdEJpdChkKSl7aWYoYi50ZXN0Qml0KGQpKXtmPWYuYWRkKGUpfWVsc2V7Zj1mLmFkZCh0aGlzKX19ZWxzZXtpZihiLnRlc3RCaXQoZCkpe2Y9Zi5hZGQoYSl9fS0tZH1yZXR1cm4gZn1FQ1BvaW50RnAucHJvdG90eXBlLmdldFg9cG9pbnRGcEdldFg7RUNQb2ludEZwLnByb3RvdHlwZS5nZXRZPXBvaW50RnBHZXRZO0VDUG9pbnRGcC5wcm90b3R5cGUuZXF1YWxzPXBvaW50RnBFcXVhbHM7RUNQb2ludEZwLnByb3RvdHlwZS5pc0luZmluaXR5PXBvaW50RnBJc0luZmluaXR5O0VDUG9pbnRGcC5wcm90b3R5cGUubmVnYXRlPXBvaW50RnBOZWdhdGU7RUNQb2ludEZwLnByb3RvdHlwZS5hZGQ9cG9pbnRGcEFkZDtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlPXBvaW50RnBUd2ljZTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5PXBvaW50RnBNdWx0aXBseTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5VHdvPXBvaW50RnBNdWx0aXBseVR3bztmdW5jdGlvbiBFQ0N1cnZlRnAoZSxkLGMpe3RoaXMucT1lO3RoaXMuYT10aGlzLmZyb21CaWdJbnRlZ2VyKGQpO3RoaXMuYj10aGlzLmZyb21CaWdJbnRlZ2VyKGMpO3RoaXMuaW5maW5pdHk9bmV3IEVDUG9pbnRGcCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gY3VydmVGcEdldFEoKXtyZXR1cm4gdGhpcy5xfWZ1bmN0aW9uIGN1cnZlRnBHZXRBKCl7cmV0dXJuIHRoaXMuYX1mdW5jdGlvbiBjdXJ2ZUZwR2V0Qigpe3JldHVybiB0aGlzLmJ9ZnVuY3Rpb24gY3VydmVGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1yZXR1cm4odGhpcy5xLmVxdWFscyhhLnEpJiZ0aGlzLmEuZXF1YWxzKGEuYSkmJnRoaXMuYi5lcXVhbHMoYS5iKSl9ZnVuY3Rpb24gY3VydmVGcEdldEluZmluaXR5KCl7cmV0dXJuIHRoaXMuaW5maW5pdHl9ZnVuY3Rpb24gY3VydmVGcEZyb21CaWdJbnRlZ2VyKGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsYSl9ZnVuY3Rpb24gY3VydmVGcERlY29kZVBvaW50SGV4KGQpe3N3aXRjaChwYXJzZUludChkLnN1YnN0cigwLDIpLDE2KSl7Y2FzZSAwOnJldHVybiB0aGlzLmluZmluaXR5O2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG51bGw7Y2FzZSA0OmNhc2UgNjpjYXNlIDc6dmFyIGE9KGQubGVuZ3RoLTIpLzI7dmFyIGM9ZC5zdWJzdHIoMixhKTt2YXIgYj1kLnN1YnN0cihhKzIsYSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcyx0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKGMsMTYpKSx0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKGIsMTYpKSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19RUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRRPWN1cnZlRnBHZXRRO0VDQ3VydmVGcC5wcm90b3R5cGUuZ2V0QT1jdXJ2ZUZwR2V0QTtFQ0N1cnZlRnAucHJvdG90eXBlLmdldEI9Y3VydmVGcEdldEI7RUNDdXJ2ZUZwLnByb3RvdHlwZS5lcXVhbHM9Y3VydmVGcEVxdWFscztFQ0N1cnZlRnAucHJvdG90eXBlLmdldEluZmluaXR5PWN1cnZlRnBHZXRJbmZpbml0eTtFQ0N1cnZlRnAucHJvdG90eXBlLmZyb21CaWdJbnRlZ2VyPWN1cnZlRnBGcm9tQmlnSW50ZWdlcjtFQ0N1cnZlRnAucHJvdG90eXBlLmRlY29kZVBvaW50SGV4PWN1cnZlRnBEZWNvZGVQb2ludEhleDtcbi8qISAoYykgU3RlZmFuIFRob21hcyB8IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luanMvYml0Y29pbmpzLWxpYlxyXG4gKi9cclxuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuZ2V0Qnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKCh0aGlzLnRvQmlnSW50ZWdlcigpLmJpdExlbmd0aCgpKzcpLzgpfTtFQ1BvaW50RnAucHJvdG90eXBlLmdldEVuY29kZWQ9ZnVuY3Rpb24oYyl7dmFyIGQ9ZnVuY3Rpb24oaCxmKXt2YXIgZz1oLnRvQnl0ZUFycmF5VW5zaWduZWQoKTtpZihmPGcubGVuZ3RoKXtnPWcuc2xpY2UoZy5sZW5ndGgtZil9ZWxzZXt3aGlsZShmPmcubGVuZ3RoKXtnLnVuc2hpZnQoMCl9fXJldHVybiBnfTt2YXIgYT10aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKTt2YXIgZT10aGlzLmdldFkoKS50b0JpZ0ludGVnZXIoKTt2YXIgYj1kKGEsMzIpO2lmKGMpe2lmKGUuaXNFdmVuKCkpe2IudW5zaGlmdCgyKX1lbHNle2IudW5zaGlmdCgzKX19ZWxzZXtiLnVuc2hpZnQoNCk7Yj1iLmNvbmNhdChkKGUsMzIpKX1yZXR1cm4gYn07RUNQb2ludEZwLmRlY29kZUZyb209ZnVuY3Rpb24oZyxjKXt2YXIgZj1jWzBdO3ZhciBlPWMubGVuZ3RoLTE7dmFyIGQ9Yy5zbGljZSgxLDErZS8yKTt2YXIgYj1jLnNsaWNlKDErZS8yLDErZSk7ZC51bnNoaWZ0KDApO2IudW5zaGlmdCgwKTt2YXIgYT1uZXcgQmlnSW50ZWdlcihkKTt2YXIgaD1uZXcgQmlnSW50ZWdlcihiKTtyZXR1cm4gbmV3IEVDUG9pbnRGcChnLGcuZnJvbUJpZ0ludGVnZXIoYSksZy5mcm9tQmlnSW50ZWdlcihoKSl9O0VDUG9pbnRGcC5kZWNvZGVGcm9tSGV4PWZ1bmN0aW9uKGcsYyl7dmFyIGY9Yy5zdWJzdHIoMCwyKTt2YXIgZT1jLmxlbmd0aC0yO3ZhciBkPWMuc3Vic3RyKDIsZS8yKTt2YXIgYj1jLnN1YnN0cigyK2UvMixlLzIpO3ZhciBhPW5ldyBCaWdJbnRlZ2VyKGQsMTYpO3ZhciBoPW5ldyBCaWdJbnRlZ2VyKGIsMTYpO3JldHVybiBuZXcgRUNQb2ludEZwKGcsZy5mcm9tQmlnSW50ZWdlcihhKSxnLmZyb21CaWdJbnRlZ2VyKGgpKX07RUNQb2ludEZwLnByb3RvdHlwZS5hZGQyRD1mdW5jdGlvbihjKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGN9aWYoYy5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfWlmKHRoaXMueC5lcXVhbHMoYy54KSl7aWYodGhpcy55LmVxdWFscyhjLnkpKXtyZXR1cm4gdGhpcy50d2ljZSgpfXJldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCl9dmFyIGc9Yy54LnN1YnRyYWN0KHRoaXMueCk7dmFyIGU9Yy55LnN1YnRyYWN0KHRoaXMueSk7dmFyIGE9ZS5kaXZpZGUoZyk7dmFyIGQ9YS5zcXVhcmUoKS5zdWJ0cmFjdCh0aGlzLngpLnN1YnRyYWN0KGMueCk7dmFyIGY9YS5tdWx0aXBseSh0aGlzLnguc3VidHJhY3QoZCkpLnN1YnRyYWN0KHRoaXMueSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSxkLGYpfTtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlMkQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBiPXRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKDIpKTt2YXIgZT10aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZigzKSk7dmFyIGE9dGhpcy54LnNxdWFyZSgpLm11bHRpcGx5KGUpLmFkZCh0aGlzLmN1cnZlLmEpLmRpdmlkZSh0aGlzLnkubXVsdGlwbHkoYikpO3ZhciBjPWEuc3F1YXJlKCkuc3VidHJhY3QodGhpcy54Lm11bHRpcGx5KGIpKTt2YXIgZD1hLm11bHRpcGx5KHRoaXMueC5zdWJ0cmFjdChjKSkuc3VidHJhY3QodGhpcy55KTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLGMsZCl9O0VDUG9pbnRGcC5wcm90b3R5cGUubXVsdGlwbHkyRD1mdW5jdGlvbihiKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYoYi5zaWdudW0oKT09MCl7cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgZz1iO3ZhciBmPWcubXVsdGlwbHkobmV3IEJpZ0ludGVnZXIoXCIzXCIpKTt2YXIgbD10aGlzLm5lZ2F0ZSgpO3ZhciBkPXRoaXM7dmFyIGM7Zm9yKGM9Zi5iaXRMZW5ndGgoKS0yO2M+MDstLWMpe2Q9ZC50d2ljZSgpO3ZhciBhPWYudGVzdEJpdChjKTt2YXIgaj1nLnRlc3RCaXQoYyk7aWYoYSE9ail7ZD1kLmFkZDJEKGE/dGhpczpsKX19cmV0dXJuIGR9O0VDUG9pbnRGcC5wcm90b3R5cGUuaXNPbkN1cnZlPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGk9dGhpcy5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGY9dGhpcy5jdXJ2ZS5nZXRBKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGM9dGhpcy5jdXJ2ZS5nZXRCKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy5jdXJ2ZS5nZXRRKCk7dmFyIGU9aS5tdWx0aXBseShpKS5tb2QoaCk7dmFyIGc9ZC5tdWx0aXBseShkKS5tdWx0aXBseShkKS5hZGQoZi5tdWx0aXBseShkKSkuYWRkKGMpLm1vZChoKTtyZXR1cm4gZS5lcXVhbHMoZyl9O0VDUG9pbnRGcC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIihcIit0aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpK1wiLFwiK3RoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkrXCIpXCJ9O0VDUG9pbnRGcC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmN1cnZlLmdldFEoKTtpZih0aGlzLmlzSW5maW5pdHkoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgYXQgaW5maW5pdHkuXCIpfXZhciBhPXRoaXMuZ2V0WCgpLnRvQmlnSW50ZWdlcigpO3ZhciBiPXRoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpO2lmKGEuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHxhLmNvbXBhcmVUbyhjLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKSk+MCl7dGhyb3cgbmV3IEVycm9yKFwieCBjb29yZGluYXRlIG91dCBvZiBib3VuZHNcIil9aWYoYi5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPDB8fGIuY29tcGFyZVRvKGMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKT4wKXt0aHJvdyBuZXcgRXJyb3IoXCJ5IGNvb3JkaW5hdGUgb3V0IG9mIGJvdW5kc1wiKX1pZighdGhpcy5pc09uQ3VydmUoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgbm90IG9uIHRoZSBjdXJ2ZS5cIil9aWYodGhpcy5tdWx0aXBseShjKS5pc0luZmluaXR5KCkpe3Rocm93IG5ldyBFcnJvcihcIlBvaW50IGlzIG5vdCBhIHNjYWxhciBtdWx0aXBsZSBvZiBHLlwiKX1yZXR1cm4gdHJ1ZX07XG4vKiEgTWlrZSBTYW11ZWwgKGMpIDIwMDkgfCBjb2RlLmdvb2dsZS5jb20vcC9qc29uLXNhbnMtZXZhbFxyXG4gKi9cclxudmFyIGpzb25QYXJzZT0oZnVuY3Rpb24oKXt2YXIgZT1cIig/Oi0/XFxcXGIoPzowfFsxLTldWzAtOV0qKSg/OlxcXFwuWzAtOV0rKT8oPzpbZUVdWystXT9bMC05XSspP1xcXFxiKVwiO3ZhciBqPScoPzpbXlxcXFwwLVxcXFx4MDhcXFxceDBhLVxcXFx4MWZcIlxcXFxcXFxcXXxcXFxcXFxcXCg/OltcIi9cXFxcXFxcXGJmbnJ0XXx1WzAtOUEtRmEtZl17NH0pKSc7dmFyIGk9Jyg/OlwiJytqKycqXCIpJzt2YXIgZD1uZXcgUmVnRXhwKFwiKD86ZmFsc2V8dHJ1ZXxudWxsfFtcXFxce1xcXFx9XFxcXFtcXFxcXV18XCIrZStcInxcIitpK1wiKVwiLFwiZ1wiKTt2YXIgaz1uZXcgUmVnRXhwKFwiXFxcXFxcXFwoPzooW151XSl8dSguezR9KSlcIixcImdcIik7dmFyIGc9eydcIic6J1wiJyxcIi9cIjpcIi9cIixcIlxcXFxcIjpcIlxcXFxcIixiOlwiXFxiXCIsZjpcIlxcZlwiLG46XCJcXG5cIixyOlwiXFxyXCIsdDpcIlxcdFwifTtmdW5jdGlvbiBoKGwsbSxuKXtyZXR1cm4gbT9nW21dOlN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobiwxNikpfXZhciBjPW5ldyBTdHJpbmcoXCJcIik7dmFyIGE9XCJcXFxcXCI7dmFyIGY9e1wie1wiOk9iamVjdCxcIltcIjpBcnJheX07dmFyIGI9T2JqZWN0Lmhhc093blByb3BlcnR5O3JldHVybiBmdW5jdGlvbih1LHEpe3ZhciBwPXUubWF0Y2goZCk7dmFyIHg7dmFyIHY9cFswXTt2YXIgbD1mYWxzZTtpZihcIntcIj09PXYpe3g9e319ZWxzZXtpZihcIltcIj09PXYpe3g9W119ZWxzZXt4PVtdO2w9dHJ1ZX19dmFyIHQ7dmFyIHI9W3hdO2Zvcih2YXIgbz0xLWwsbT1wLmxlbmd0aDtvPG07KytvKXt2PXBbb107dmFyIHc7c3dpdGNoKHYuY2hhckNvZGVBdCgwKSl7ZGVmYXVsdDp3PXJbMF07d1t0fHx3Lmxlbmd0aF09Kyh2KTt0PXZvaWQgMDticmVhaztjYXNlIDM0OnY9di5zdWJzdHJpbmcoMSx2Lmxlbmd0aC0xKTtpZih2LmluZGV4T2YoYSkhPT0tMSl7dj12LnJlcGxhY2UoayxoKX13PXJbMF07aWYoIXQpe2lmKHcgaW5zdGFuY2VvZiBBcnJheSl7dD13Lmxlbmd0aH1lbHNle3Q9dnx8YzticmVha319d1t0XT12O3Q9dm9pZCAwO2JyZWFrO2Nhc2UgOTE6dz1yWzBdO3IudW5zaGlmdCh3W3R8fHcubGVuZ3RoXT1bXSk7dD12b2lkIDA7YnJlYWs7Y2FzZSA5MzpyLnNoaWZ0KCk7YnJlYWs7Y2FzZSAxMDI6dz1yWzBdO3dbdHx8dy5sZW5ndGhdPWZhbHNlO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTEwOnc9clswXTt3W3R8fHcubGVuZ3RoXT1udWxsO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTE2Onc9clswXTt3W3R8fHcubGVuZ3RoXT10cnVlO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTIzOnc9clswXTtyLnVuc2hpZnQod1t0fHx3Lmxlbmd0aF09e30pO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTI1OnIuc2hpZnQoKTticmVha319aWYobCl7aWYoci5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoKX14PXhbMF19ZWxzZXtpZihyLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCl9fWlmKHEpe3ZhciBzPWZ1bmN0aW9uKEMsQil7dmFyIEQ9Q1tCXTtpZihEJiZ0eXBlb2YgRD09PVwib2JqZWN0XCIpe3ZhciBuPW51bGw7Zm9yKHZhciB6IGluIEQpe2lmKGIuY2FsbChELHopJiZEIT09Qyl7dmFyIHk9cyhELHopO2lmKHkhPT12b2lkIDApe0Rbel09eX1lbHNle2lmKCFuKXtuPVtdfW4ucHVzaCh6KX19fWlmKG4pe2Zvcih2YXIgQT1uLmxlbmd0aDstLUE+PTA7KXtkZWxldGUgRFtuW0FdXX19fXJldHVybiBxLmNhbGwoQyxCLEQpfTt4PXMoe1wiXCI6eH0sXCJcIil9cmV0dXJuIHh9fSkoKTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5hc24xPT1cInVuZGVmaW5lZFwifHwhS0pVUi5hc24xKXtLSlVSLmFzbjE9e319S0pVUi5hc24xLkFTTjFVdGlsPW5ldyBmdW5jdGlvbigpe3RoaXMuaW50ZWdlclRvQnl0ZUhleD1mdW5jdGlvbihhKXt2YXIgYj1hLnRvU3RyaW5nKDE2KTtpZigoYi5sZW5ndGglMik9PTEpe2I9XCIwXCIrYn1yZXR1cm4gYn07dGhpcy5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleD1mdW5jdGlvbihqKXt2YXIgZj1qLnRvU3RyaW5nKDE2KTtpZihmLnN1YnN0cigwLDEpIT1cIi1cIil7aWYoZi5sZW5ndGglMj09MSl7Zj1cIjBcIitmfWVsc2V7aWYoIWYubWF0Y2goL15bMC03XS8pKXtmPVwiMDBcIitmfX19ZWxzZXt2YXIgYT1mLnN1YnN0cigxKTt2YXIgZT1hLmxlbmd0aDtpZihlJTI9PTEpe2UrPTF9ZWxzZXtpZighZi5tYXRjaCgvXlswLTddLykpe2UrPTJ9fXZhciBnPVwiXCI7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7Zys9XCJmXCJ9dmFyIGM9bmV3IEJpZ0ludGVnZXIoZywxNik7dmFyIGI9Yy54b3IoaikuYWRkKEJpZ0ludGVnZXIuT05FKTtmPWIudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14tLyxcIlwiKX1yZXR1cm4gZn07dGhpcy5nZXRQRU1TdHJpbmdGcm9tSGV4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGhleHRvcGVtKGEsYil9O3RoaXMubmV3T2JqZWN0PWZ1bmN0aW9uKGspe3ZhciBEPUtKVVIsbj1ELmFzbjEsej1uLkRFUkJvb2xlYW4sZT1uLkRFUkludGVnZXIscz1uLkRFUkJpdFN0cmluZyxoPW4uREVST2N0ZXRTdHJpbmcsdj1uLkRFUk51bGwsdz1uLkRFUk9iamVjdElkZW50aWZpZXIsbD1uLkRFUkVudW1lcmF0ZWQsZz1uLkRFUlVURjhTdHJpbmcsZj1uLkRFUk51bWVyaWNTdHJpbmcseT1uLkRFUlByaW50YWJsZVN0cmluZyx1PW4uREVSVGVsZXRleFN0cmluZyxwPW4uREVSSUE1U3RyaW5nLEM9bi5ERVJVVENUaW1lLGo9bi5ERVJHZW5lcmFsaXplZFRpbWUsbT1uLkRFUlNlcXVlbmNlLGM9bi5ERVJTZXQscj1uLkRFUlRhZ2dlZE9iamVjdCxvPW4uQVNOMVV0aWwubmV3T2JqZWN0O3ZhciB0PU9iamVjdC5rZXlzKGspO2lmKHQubGVuZ3RoIT0xKXt0aHJvd1wia2V5IG9mIHBhcmFtIHNoYWxsIGJlIG9ubHkgb25lLlwifXZhciBGPXRbMF07aWYoXCI6Ym9vbDppbnQ6Yml0c3RyOm9jdHN0cjpudWxsOm9pZDplbnVtOnV0ZjhzdHI6bnVtc3RyOnBybnN0cjp0ZWxzdHI6aWE1c3RyOnV0Y3RpbWU6Z2VudGltZTpzZXE6c2V0OnRhZzpcIi5pbmRleE9mKFwiOlwiK0YrXCI6XCIpPT0tMSl7dGhyb3dcInVuZGVmaW5lZCBrZXk6IFwiK0Z9aWYoRj09XCJib29sXCIpe3JldHVybiBuZXcgeihrW0ZdKX1pZihGPT1cImludFwiKXtyZXR1cm4gbmV3IGUoa1tGXSl9aWYoRj09XCJiaXRzdHJcIil7cmV0dXJuIG5ldyBzKGtbRl0pfWlmKEY9PVwib2N0c3RyXCIpe3JldHVybiBuZXcgaChrW0ZdKX1pZihGPT1cIm51bGxcIil7cmV0dXJuIG5ldyB2KGtbRl0pfWlmKEY9PVwib2lkXCIpe3JldHVybiBuZXcgdyhrW0ZdKX1pZihGPT1cImVudW1cIil7cmV0dXJuIG5ldyBsKGtbRl0pfWlmKEY9PVwidXRmOHN0clwiKXtyZXR1cm4gbmV3IGcoa1tGXSl9aWYoRj09XCJudW1zdHJcIil7cmV0dXJuIG5ldyBmKGtbRl0pfWlmKEY9PVwicHJuc3RyXCIpe3JldHVybiBuZXcgeShrW0ZdKX1pZihGPT1cInRlbHN0clwiKXtyZXR1cm4gbmV3IHUoa1tGXSl9aWYoRj09XCJpYTVzdHJcIil7cmV0dXJuIG5ldyBwKGtbRl0pfWlmKEY9PVwidXRjdGltZVwiKXtyZXR1cm4gbmV3IEMoa1tGXSl9aWYoRj09XCJnZW50aW1lXCIpe3JldHVybiBuZXcgaihrW0ZdKX1pZihGPT1cInNlcVwiKXt2YXIgZD1rW0ZdO3ZhciBFPVtdO2Zvcih2YXIgeD0wO3g8ZC5sZW5ndGg7eCsrKXt2YXIgQj1vKGRbeF0pO0UucHVzaChCKX1yZXR1cm4gbmV3IG0oe2FycmF5OkV9KX1pZihGPT1cInNldFwiKXt2YXIgZD1rW0ZdO3ZhciBFPVtdO2Zvcih2YXIgeD0wO3g8ZC5sZW5ndGg7eCsrKXt2YXIgQj1vKGRbeF0pO0UucHVzaChCKX1yZXR1cm4gbmV3IGMoe2FycmF5OkV9KX1pZihGPT1cInRhZ1wiKXt2YXIgQT1rW0ZdO2lmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChBKT09PVwiW29iamVjdCBBcnJheV1cIiYmQS5sZW5ndGg9PTMpe3ZhciBxPW8oQVsyXSk7cmV0dXJuIG5ldyByKHt0YWc6QVswXSxleHBsaWNpdDpBWzFdLG9iajpxfSl9ZWxzZXt2YXIgYj17fTtpZihBLmV4cGxpY2l0IT09dW5kZWZpbmVkKXtiLmV4cGxpY2l0PUEuZXhwbGljaXR9aWYoQS50YWchPT11bmRlZmluZWQpe2IudGFnPUEudGFnfWlmKEEub2JqPT09dW5kZWZpbmVkKXt0aHJvd1wib2JqIHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgJ3RhZycuXCJ9Yi5vYmo9byhBLm9iaik7cmV0dXJuIG5ldyByKGIpfX19O3RoaXMuanNvblRvQVNOMUhFWD1mdW5jdGlvbihiKXt2YXIgYT10aGlzLm5ld09iamVjdChiKTtyZXR1cm4gYS5nZXRFbmNvZGVkSGV4KCl9fTtLSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQ9ZnVuY3Rpb24oYSl7dmFyIGo9XCJcIjt2YXIgaz1wYXJzZUludChhLnN1YnN0cigwLDIpLDE2KTt2YXIgZD1NYXRoLmZsb29yKGsvNDApO3ZhciBjPWslNDA7dmFyIGo9ZCtcIi5cIitjO3ZhciBlPVwiXCI7Zm9yKHZhciBmPTI7ZjxhLmxlbmd0aDtmKz0yKXt2YXIgZz1wYXJzZUludChhLnN1YnN0cihmLDIpLDE2KTt2YXIgaD0oXCIwMDAwMDAwMFwiK2cudG9TdHJpbmcoMikpLnNsaWNlKC04KTtlPWUraC5zdWJzdHIoMSw3KTtpZihoLnN1YnN0cigwLDEpPT1cIjBcIil7dmFyIGI9bmV3IEJpZ0ludGVnZXIoZSwyKTtqPWorXCIuXCIrYi50b1N0cmluZygxMCk7ZT1cIlwifX1yZXR1cm4gan07S0pVUi5hc24xLkFTTjFVdGlsLm9pZEludFRvSGV4PWZ1bmN0aW9uKGYpe3ZhciBlPWZ1bmN0aW9uKGEpe3ZhciBrPWEudG9TdHJpbmcoMTYpO2lmKGsubGVuZ3RoPT0xKXtrPVwiMFwiK2t9cmV0dXJuIGt9O3ZhciBkPWZ1bmN0aW9uKG8pe3ZhciBuPVwiXCI7dmFyIGs9bmV3IEJpZ0ludGVnZXIobywxMCk7dmFyIGE9ay50b1N0cmluZygyKTt2YXIgbD03LWEubGVuZ3RoJTc7aWYobD09Nyl7bD0wfXZhciBxPVwiXCI7Zm9yKHZhciBtPTA7bTxsO20rKyl7cSs9XCIwXCJ9YT1xK2E7Zm9yKHZhciBtPTA7bTxhLmxlbmd0aC0xO20rPTcpe3ZhciBwPWEuc3Vic3RyKG0sNyk7aWYobSE9YS5sZW5ndGgtNyl7cD1cIjFcIitwfW4rPWUocGFyc2VJbnQocCwyKSl9cmV0dXJuIG59O2lmKCFmLm1hdGNoKC9eWzAtOS5dKyQvKSl7dGhyb3dcIm1hbGZvcm1lZCBvaWQgc3RyaW5nOiBcIitmfXZhciBnPVwiXCI7dmFyIGI9Zi5zcGxpdChcIi5cIik7dmFyIGo9cGFyc2VJbnQoYlswXSkqNDArcGFyc2VJbnQoYlsxXSk7Zys9ZShqKTtiLnNwbGljZSgwLDIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXtnKz1kKGJbY10pfXJldHVybiBnfTtLSlVSLmFzbjEuQVNOMU9iamVjdD1mdW5jdGlvbigpe3ZhciBjPXRydWU7dmFyIGI9bnVsbDt2YXIgZD1cIjAwXCI7dmFyIGU9XCIwMFwiO3ZhciBhPVwiXCI7dGhpcy5nZXRMZW5ndGhIZXhGcm9tVmFsdWU9ZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5oVj09XCJ1bmRlZmluZWRcInx8dGhpcy5oVj09bnVsbCl7dGhyb3dcInRoaXMuaFYgaXMgbnVsbCBvciB1bmRlZmluZWQuXCJ9aWYodGhpcy5oVi5sZW5ndGglMj09MSl7dGhyb3dcInZhbHVlIGhleCBtdXN0IGJlIGV2ZW4gbGVuZ3RoOiBuPVwiK2EubGVuZ3RoK1wiLHY9XCIrdGhpcy5oVn12YXIgaT10aGlzLmhWLmxlbmd0aC8yO3ZhciBoPWkudG9TdHJpbmcoMTYpO2lmKGgubGVuZ3RoJTI9PTEpe2g9XCIwXCIraH1pZihpPDEyOCl7cmV0dXJuIGh9ZWxzZXt2YXIgZz1oLmxlbmd0aC8yO2lmKGc+MTUpe3Rocm93XCJBU04uMSBsZW5ndGggdG9vIGxvbmcgdG8gcmVwcmVzZW50IGJ5IDh4OiBuID0gXCIraS50b1N0cmluZygxNil9dmFyIGY9MTI4K2c7cmV0dXJuIGYudG9TdHJpbmcoMTYpK2h9fTt0aGlzLmdldEVuY29kZWRIZXg9ZnVuY3Rpb24oKXtpZih0aGlzLmhUTFY9PW51bGx8fHRoaXMuaXNNb2RpZmllZCl7dGhpcy5oVj10aGlzLmdldEZyZXNoVmFsdWVIZXgoKTt0aGlzLmhMPXRoaXMuZ2V0TGVuZ3RoSGV4RnJvbVZhbHVlKCk7dGhpcy5oVExWPXRoaXMuaFQrdGhpcy5oTCt0aGlzLmhWO3RoaXMuaXNNb2RpZmllZD1mYWxzZX1yZXR1cm4gdGhpcy5oVExWfTt0aGlzLmdldFZhbHVlSGV4PWZ1bmN0aW9uKCl7dGhpcy5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIHRoaXMuaFZ9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVyblwiXCJ9fTtLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmc9ZnVuY3Rpb24oYyl7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYj1udWxsO3ZhciBhPW51bGw7dGhpcy5nZXRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfTt0aGlzLnNldFN0cmluZz1mdW5jdGlvbihkKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9ZDt0aGlzLmhWPXV0Zjh0b2hleCh0aGlzLnMpLnRvTG93ZXJDYXNlKCl9O3RoaXMuc2V0U3RyaW5nSGV4PWZ1bmN0aW9uKGQpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1udWxsO3RoaXMuaFY9ZH07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBjIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYz09XCJzdHJpbmdcIil7dGhpcy5zZXRTdHJpbmcoYyl9ZWxzZXtpZih0eXBlb2YgYy5zdHIhPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0U3RyaW5nKGMuc3RyKX1lbHNle2lmKHR5cGVvZiBjLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRTdHJpbmdIZXgoYy5oZXgpfX19fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lPWZ1bmN0aW9uKGMpe0tKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBiPW51bGw7dmFyIGE9bnVsbDt0aGlzLmxvY2FsRGF0ZVRvVVRDPWZ1bmN0aW9uKGYpe3V0Yz1mLmdldFRpbWUoKSsoZi5nZXRUaW1lem9uZU9mZnNldCgpKjYwMDAwKTt2YXIgZT1uZXcgRGF0ZSh1dGMpO3JldHVybiBlfTt0aGlzLmZvcm1hdERhdGU9ZnVuY3Rpb24obSxvLGUpe3ZhciBnPXRoaXMuemVyb1BhZGRpbmc7dmFyIG49dGhpcy5sb2NhbERhdGVUb1VUQyhtKTt2YXIgcD1TdHJpbmcobi5nZXRGdWxsWWVhcigpKTtpZihvPT1cInV0Y1wiKXtwPXAuc3Vic3RyKDIsMil9dmFyIGw9ZyhTdHJpbmcobi5nZXRNb250aCgpKzEpLDIpO3ZhciBxPWcoU3RyaW5nKG4uZ2V0RGF0ZSgpKSwyKTt2YXIgaD1nKFN0cmluZyhuLmdldEhvdXJzKCkpLDIpO3ZhciBpPWcoU3RyaW5nKG4uZ2V0TWludXRlcygpKSwyKTt2YXIgaj1nKFN0cmluZyhuLmdldFNlY29uZHMoKSksMik7dmFyIHI9cCtsK3EraCtpK2o7aWYoZT09PXRydWUpe3ZhciBmPW4uZ2V0TWlsbGlzZWNvbmRzKCk7aWYoZiE9MCl7dmFyIGs9ZyhTdHJpbmcoZiksMyk7az1rLnJlcGxhY2UoL1swXSskLyxcIlwiKTtyPXIrXCIuXCIra319cmV0dXJuIHIrXCJaXCJ9O3RoaXMuemVyb1BhZGRpbmc9ZnVuY3Rpb24oZSxkKXtpZihlLmxlbmd0aD49ZCl7cmV0dXJuIGV9cmV0dXJuIG5ldyBBcnJheShkLWUubGVuZ3RoKzEpLmpvaW4oXCIwXCIpK2V9O3RoaXMuZ2V0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc307dGhpcy5zZXRTdHJpbmc9ZnVuY3Rpb24oZCl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPWQ7dGhpcy5oVj1zdG9oZXgoZCl9O3RoaXMuc2V0QnlEYXRlVmFsdWU9ZnVuY3Rpb24oaCxqLGUsZCxmLGcpe3ZhciBpPW5ldyBEYXRlKERhdGUuVVRDKGgsai0xLGUsZCxmLGcsMCkpO3RoaXMuc2V0QnlEYXRlKGkpfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQ9ZnVuY3Rpb24oYil7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYT1udWxsO3RoaXMuc2V0QnlBU04xT2JqZWN0QXJyYXk9ZnVuY3Rpb24oYyl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5hc24xQXJyYXk9Y307dGhpcy5hcHBlbmRBU04xT2JqZWN0PWZ1bmN0aW9uKGMpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuYXNuMUFycmF5LnB1c2goYyl9O3RoaXMuYXNuMUFycmF5PW5ldyBBcnJheSgpO2lmKHR5cGVvZiBiIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYi5hcnJheSE9XCJ1bmRlZmluZWRcIil7dGhpcy5hc24xQXJyYXk9Yi5hcnJheX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQm9vbGVhbj1mdW5jdGlvbigpe0tKVVIuYXNuMS5ERVJCb29sZWFuLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDFcIjt0aGlzLmhUTFY9XCIwMTAxZmZcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkJvb2xlYW4sS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJJbnRlZ2VyPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJJbnRlZ2VyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDJcIjt0aGlzLnNldEJ5QmlnSW50ZWdlcj1mdW5jdGlvbihiKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPUtKVVIuYXNuMS5BU04xVXRpbC5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleChiKX07dGhpcy5zZXRCeUludGVnZXI9ZnVuY3Rpb24oYyl7dmFyIGI9bmV3IEJpZ0ludGVnZXIoU3RyaW5nKGMpLDEwKTt0aGlzLnNldEJ5QmlnSW50ZWdlcihiKX07dGhpcy5zZXRWYWx1ZUhleD1mdW5jdGlvbihiKXt0aGlzLmhWPWJ9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYSE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGEuYmlnaW50IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5QmlnSW50ZWdlcihhLmJpZ2ludCl9ZWxzZXtpZih0eXBlb2YgYVtcImludFwiXSE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUludGVnZXIoYVtcImludFwiXSl9ZWxzZXtpZih0eXBlb2YgYT09XCJudW1iZXJcIil7dGhpcy5zZXRCeUludGVnZXIoYSl9ZWxzZXtpZih0eXBlb2YgYS5oZXghPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0VmFsdWVIZXgoYS5oZXgpfX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJJbnRlZ2VyLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQml0U3RyaW5nPWZ1bmN0aW9uKGIpe2lmKGIhPT11bmRlZmluZWQmJnR5cGVvZiBiLm9iaiE9PVwidW5kZWZpbmVkXCIpe3ZhciBhPUtKVVIuYXNuMS5BU04xVXRpbC5uZXdPYmplY3QoYi5vYmopO2IuaGV4PVwiMDBcIithLmdldEVuY29kZWRIZXgoKX1LSlVSLmFzbjEuREVSQml0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDNcIjt0aGlzLnNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cz1mdW5jdGlvbihjKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPWN9O3RoaXMuc2V0VW51c2VkQml0c0FuZEhleFZhbHVlPWZ1bmN0aW9uKGMsZSl7aWYoYzwwfHw3PGMpe3Rocm93XCJ1bnVzZWQgYml0cyBzaGFsbCBiZSBmcm9tIDAgdG8gNzogdSA9IFwiK2N9dmFyIGQ9XCIwXCIrYzt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPWQrZX07dGhpcy5zZXRCeUJpbmFyeVN0cmluZz1mdW5jdGlvbihlKXtlPWUucmVwbGFjZSgvMCskLyxcIlwiKTt2YXIgZj04LWUubGVuZ3RoJTg7aWYoZj09OCl7Zj0wfWZvcih2YXIgZz0wO2c8PWY7ZysrKXtlKz1cIjBcIn12YXIgaj1cIlwiO2Zvcih2YXIgZz0wO2c8ZS5sZW5ndGgtMTtnKz04KXt2YXIgZD1lLnN1YnN0cihnLDgpO3ZhciBjPXBhcnNlSW50KGQsMikudG9TdHJpbmcoMTYpO2lmKGMubGVuZ3RoPT0xKXtjPVwiMFwiK2N9ais9Y310aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPVwiMFwiK2Yran07dGhpcy5zZXRCeUJvb2xlYW5BcnJheT1mdW5jdGlvbihlKXt2YXIgZD1cIlwiO2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXtpZihlW2NdPT10cnVlKXtkKz1cIjFcIn1lbHNle2QrPVwiMFwifX10aGlzLnNldEJ5QmluYXJ5U3RyaW5nKGQpfTt0aGlzLm5ld0ZhbHNlQXJyYXk9ZnVuY3Rpb24oZSl7dmFyIGM9bmV3IEFycmF5KGUpO2Zvcih2YXIgZD0wO2Q8ZTtkKyspe2NbZF09ZmFsc2V9cmV0dXJuIGN9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYiE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGI9PVwic3RyaW5nXCImJmIudG9Mb3dlckNhc2UoKS5tYXRjaCgvXlswLTlhLWZdKyQvKSl7dGhpcy5zZXRIZXhWYWx1ZUluY2x1ZGluZ1VudXNlZEJpdHMoYil9ZWxzZXtpZih0eXBlb2YgYi5oZXghPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzKGIuaGV4KX1lbHNle2lmKHR5cGVvZiBiLmJpbiE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUJpbmFyeVN0cmluZyhiLmJpbil9ZWxzZXtpZih0eXBlb2YgYi5hcnJheSE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUJvb2xlYW5BcnJheShiLmFycmF5KX19fX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQml0U3RyaW5nLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVST2N0ZXRTdHJpbmc9ZnVuY3Rpb24oYil7aWYoYiE9PXVuZGVmaW5lZCYmdHlwZW9mIGIub2JqIT09XCJ1bmRlZmluZWRcIil7dmFyIGE9S0pVUi5hc24xLkFTTjFVdGlsLm5ld09iamVjdChiLm9iaik7Yi5oZXg9YS5nZXRFbmNvZGVkSGV4KCl9S0pVUi5hc24xLkRFUk9jdGV0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGIpO3RoaXMuaFQ9XCIwNFwifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVST2N0ZXRTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSTnVsbD1mdW5jdGlvbigpe0tKVVIuYXNuMS5ERVJOdWxsLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDVcIjt0aGlzLmhUTFY9XCIwNTAwXCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJOdWxsLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllcj1mdW5jdGlvbihjKXt2YXIgYj1mdW5jdGlvbihkKXt2YXIgZT1kLnRvU3RyaW5nKDE2KTtpZihlLmxlbmd0aD09MSl7ZT1cIjBcIitlfXJldHVybiBlfTt2YXIgYT1mdW5jdGlvbihrKXt2YXIgaj1cIlwiO3ZhciBlPW5ldyBCaWdJbnRlZ2VyKGssMTApO3ZhciBkPWUudG9TdHJpbmcoMik7dmFyIGY9Ny1kLmxlbmd0aCU3O2lmKGY9PTcpe2Y9MH12YXIgbT1cIlwiO2Zvcih2YXIgZz0wO2c8ZjtnKyspe20rPVwiMFwifWQ9bStkO2Zvcih2YXIgZz0wO2c8ZC5sZW5ndGgtMTtnKz03KXt2YXIgbD1kLnN1YnN0cihnLDcpO2lmKGchPWQubGVuZ3RoLTcpe2w9XCIxXCIrbH1qKz1iKHBhcnNlSW50KGwsMikpfXJldHVybiBqfTtLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllci5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjA2XCI7dGhpcy5zZXRWYWx1ZUhleD1mdW5jdGlvbihkKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9bnVsbDt0aGlzLmhWPWR9O3RoaXMuc2V0VmFsdWVPaWRTdHJpbmc9ZnVuY3Rpb24oZil7aWYoIWYubWF0Y2goL15bMC05Ll0rJC8pKXt0aHJvd1wibWFsZm9ybWVkIG9pZCBzdHJpbmc6IFwiK2Z9dmFyIGc9XCJcIjt2YXIgZD1mLnNwbGl0KFwiLlwiKTt2YXIgaj1wYXJzZUludChkWzBdKSo0MCtwYXJzZUludChkWzFdKTtnKz1iKGopO2Quc3BsaWNlKDAsMik7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspe2crPWEoZFtlXSl9dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPW51bGw7dGhpcy5oVj1nfTt0aGlzLnNldFZhbHVlTmFtZT1mdW5jdGlvbihlKXt2YXIgZD1LSlVSLmFzbjEueDUwOS5PSUQubmFtZTJvaWQoZSk7aWYoZCE9PVwiXCIpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoZCl9ZWxzZXt0aHJvd1wiREVST2JqZWN0SWRlbnRpZmllciBvaWROYW1lIHVuZGVmaW5lZDogXCIrZX19O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZihjIT09dW5kZWZpbmVkKXtpZih0eXBlb2YgYz09PVwic3RyaW5nXCIpe2lmKGMubWF0Y2goL15bMC0yXS5bMC05Ll0rJC8pKXt0aGlzLnNldFZhbHVlT2lkU3RyaW5nKGMpfWVsc2V7dGhpcy5zZXRWYWx1ZU5hbWUoYyl9fWVsc2V7aWYoYy5vaWQhPT11bmRlZmluZWQpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoYy5vaWQpfWVsc2V7aWYoYy5oZXghPT11bmRlZmluZWQpe3RoaXMuc2V0VmFsdWVIZXgoYy5oZXgpfWVsc2V7aWYoYy5uYW1lIT09dW5kZWZpbmVkKXt0aGlzLnNldFZhbHVlTmFtZShjLm5hbWUpfX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSRW51bWVyYXRlZD1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSRW51bWVyYXRlZC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjBhXCI7dGhpcy5zZXRCeUJpZ0ludGVnZXI9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5oVj1LSlVSLmFzbjEuQVNOMVV0aWwuYmlnSW50VG9NaW5Ud29zQ29tcGxlbWVudHNIZXgoYil9O3RoaXMuc2V0QnlJbnRlZ2VyPWZ1bmN0aW9uKGMpe3ZhciBiPW5ldyBCaWdJbnRlZ2VyKFN0cmluZyhjKSwxMCk7dGhpcy5zZXRCeUJpZ0ludGVnZXIoYil9O3RoaXMuc2V0VmFsdWVIZXg9ZnVuY3Rpb24oYil7dGhpcy5oVj1ifTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn07aWYodHlwZW9mIGEhPVwidW5kZWZpbmVkXCIpe2lmKHR5cGVvZiBhW1wiaW50XCJdIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5SW50ZWdlcihhW1wiaW50XCJdKX1lbHNle2lmKHR5cGVvZiBhPT1cIm51bWJlclwiKXt0aGlzLnNldEJ5SW50ZWdlcihhKX1lbHNle2lmKHR5cGVvZiBhLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRWYWx1ZUhleChhLmhleCl9fX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSRW51bWVyYXRlZCxLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUlVURjhTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlVURjhTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjBjXCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJVVEY4U3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUk51bWVyaWNTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUk51bWVyaWNTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjEyXCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUlByaW50YWJsZVN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSUHJpbnRhYmxlU3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxM1wifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSUHJpbnRhYmxlU3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUlRlbGV0ZXhTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlRlbGV0ZXhTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjE0XCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJUZWxldGV4U3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUklBNVN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSSUE1U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxNlwifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSSUE1U3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUlVUQ1RpbWU9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlVUQ1RpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjE3XCI7dGhpcy5zZXRCeURhdGU9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5kYXRlPWI7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJ1dGNcIik7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMuZGF0ZT09XCJ1bmRlZmluZWRcIiYmdHlwZW9mIHRoaXMucz09XCJ1bmRlZmluZWRcIil7dGhpcy5kYXRlPW5ldyBEYXRlKCk7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJ1dGNcIik7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX1yZXR1cm4gdGhpcy5oVn07aWYoYSE9PXVuZGVmaW5lZCl7aWYoYS5zdHIhPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nKGEuc3RyKX1lbHNle2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiJiZhLm1hdGNoKC9eWzAtOV17MTJ9WiQvKSl7dGhpcy5zZXRTdHJpbmcoYSl9ZWxzZXtpZihhLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmdIZXgoYS5oZXgpfWVsc2V7aWYoYS5kYXRlIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5RGF0ZShhLmRhdGUpfX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJVVENUaW1lLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUpO0tKVVIuYXNuMS5ERVJHZW5lcmFsaXplZFRpbWU9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMThcIjt0aGlzLndpdGhNaWxsaXM9ZmFsc2U7dGhpcy5zZXRCeURhdGU9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5kYXRlPWI7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJnZW5cIix0aGlzLndpdGhNaWxsaXMpO3RoaXMuaFY9c3RvaGV4KHRoaXMucyl9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe2lmKHRoaXMuZGF0ZT09PXVuZGVmaW5lZCYmdGhpcy5zPT09dW5kZWZpbmVkKXt0aGlzLmRhdGU9bmV3IERhdGUoKTt0aGlzLnM9dGhpcy5mb3JtYXREYXRlKHRoaXMuZGF0ZSxcImdlblwiLHRoaXMud2l0aE1pbGxpcyk7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX1yZXR1cm4gdGhpcy5oVn07aWYoYSE9PXVuZGVmaW5lZCl7aWYoYS5zdHIhPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nKGEuc3RyKX1lbHNle2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiJiZhLm1hdGNoKC9eWzAtOV17MTR9WiQvKSl7dGhpcy5zZXRTdHJpbmcoYSl9ZWxzZXtpZihhLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmdIZXgoYS5oZXgpfWVsc2V7aWYoYS5kYXRlIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5RGF0ZShhLmRhdGUpfX19fWlmKGEubWlsbGlzPT09dHJ1ZSl7dGhpcy53aXRoTWlsbGlzPXRydWV9fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZSxLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lKTtLSlVSLmFzbjEuREVSU2VxdWVuY2U9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlNlcXVlbmNlLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIzMFwiO3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3ZhciBjPVwiXCI7Zm9yKHZhciBiPTA7Yjx0aGlzLmFzbjFBcnJheS5sZW5ndGg7YisrKXt2YXIgZD10aGlzLmFzbjFBcnJheVtiXTtjKz1kLmdldEVuY29kZWRIZXgoKX10aGlzLmhWPWM7cmV0dXJuIHRoaXMuaFZ9fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSU2VxdWVuY2UsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RydWN0dXJlZCk7S0pVUi5hc24xLkRFUlNldD1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSU2V0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIzMVwiO3RoaXMuc29ydEZsYWc9dHJ1ZTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgQXJyYXkoKTtmb3IodmFyIGM9MDtjPHRoaXMuYXNuMUFycmF5Lmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuYXNuMUFycmF5W2NdO2IucHVzaChkLmdldEVuY29kZWRIZXgoKSl9aWYodGhpcy5zb3J0RmxhZz09dHJ1ZSl7Yi5zb3J0KCl9dGhpcy5oVj1iLmpvaW4oXCJcIik7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS5zb3J0ZmxhZyE9XCJ1bmRlZmluZWRcIiYmYS5zb3J0ZmxhZz09ZmFsc2Upe3RoaXMuc29ydEZsYWc9ZmFsc2V9fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlNldCxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkKTtLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0PWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3Quc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCJhMFwiO3RoaXMuaFY9XCJcIjt0aGlzLmlzRXhwbGljaXQ9dHJ1ZTt0aGlzLmFzbjFPYmplY3Q9bnVsbDt0aGlzLnNldEFTTjFPYmplY3Q9ZnVuY3Rpb24oYixjLGQpe3RoaXMuaFQ9Yzt0aGlzLmlzRXhwbGljaXQ9Yjt0aGlzLmFzbjFPYmplY3Q9ZDtpZih0aGlzLmlzRXhwbGljaXQpe3RoaXMuaFY9dGhpcy5hc24xT2JqZWN0LmdldEVuY29kZWRIZXgoKTt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZX1lbHNle3RoaXMuaFY9bnVsbDt0aGlzLmhUTFY9ZC5nZXRFbmNvZGVkSGV4KCk7dGhpcy5oVExWPXRoaXMuaFRMVi5yZXBsYWNlKC9eLi4vLGMpO3RoaXMuaXNNb2RpZmllZD1mYWxzZX19O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYSE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGEudGFnIT1cInVuZGVmaW5lZFwiKXt0aGlzLmhUPWEudGFnfWlmKHR5cGVvZiBhLmV4cGxpY2l0IT1cInVuZGVmaW5lZFwiKXt0aGlzLmlzRXhwbGljaXQ9YS5leHBsaWNpdH1pZih0eXBlb2YgYS5vYmohPVwidW5kZWZpbmVkXCIpe3RoaXMuYXNuMU9iamVjdD1hLm9iajt0aGlzLnNldEFTTjFPYmplY3QodGhpcy5pc0V4cGxpY2l0LHRoaXMuaFQsdGhpcy5hc24xT2JqZWN0KX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0LEtKVVIuYXNuMS5BU04xT2JqZWN0KTtcbnZhciBBU04xSEVYPW5ldyBmdW5jdGlvbigpe307QVNOMUhFWC5nZXRMYmxlbj1mdW5jdGlvbihjLGEpe2lmKGMuc3Vic3RyKGErMiwxKSE9XCI4XCIpe3JldHVybiAxfXZhciBiPXBhcnNlSW50KGMuc3Vic3RyKGErMywxKSk7aWYoYj09MCl7cmV0dXJuIC0xfWlmKDA8YiYmYjwxMCl7cmV0dXJuIGIrMX1yZXR1cm4gLTJ9O0FTTjFIRVguZ2V0TD1mdW5jdGlvbihjLGIpe3ZhciBhPUFTTjFIRVguZ2V0TGJsZW4oYyxiKTtpZihhPDEpe3JldHVyblwiXCJ9cmV0dXJuIGMuc3Vic3RyKGIrMixhKjIpfTtBU04xSEVYLmdldFZibGVuPWZ1bmN0aW9uKGQsYSl7dmFyIGMsYjtjPUFTTjFIRVguZ2V0TChkLGEpO2lmKGM9PVwiXCIpe3JldHVybiAtMX1pZihjLnN1YnN0cigwLDEpPT09XCI4XCIpe2I9bmV3IEJpZ0ludGVnZXIoYy5zdWJzdHIoMiksMTYpfWVsc2V7Yj1uZXcgQmlnSW50ZWdlcihjLDE2KX1yZXR1cm4gYi5pbnRWYWx1ZSgpfTtBU04xSEVYLmdldFZpZHg9ZnVuY3Rpb24oYyxiKXt2YXIgYT1BU04xSEVYLmdldExibGVuKGMsYik7aWYoYTwwKXtyZXR1cm4gYX1yZXR1cm4gYisoYSsxKSoyfTtBU04xSEVYLmdldFY9ZnVuY3Rpb24oZCxhKXt2YXIgYz1BU04xSEVYLmdldFZpZHgoZCxhKTt2YXIgYj1BU04xSEVYLmdldFZibGVuKGQsYSk7cmV0dXJuIGQuc3Vic3RyKGMsYioyKX07QVNOMUhFWC5nZXRUTFY9ZnVuY3Rpb24oYixhKXtyZXR1cm4gYi5zdWJzdHIoYSwyKStBU04xSEVYLmdldEwoYixhKStBU04xSEVYLmdldFYoYixhKX07QVNOMUhFWC5nZXROZXh0U2libGluZ0lkeD1mdW5jdGlvbihkLGEpe3ZhciBjPUFTTjFIRVguZ2V0VmlkeChkLGEpO3ZhciBiPUFTTjFIRVguZ2V0VmJsZW4oZCxhKTtyZXR1cm4gYytiKjJ9O0FTTjFIRVguZ2V0Q2hpbGRJZHg9ZnVuY3Rpb24oZSxmKXt2YXIgaj1BU04xSEVYO3ZhciBnPW5ldyBBcnJheSgpO3ZhciBpPWouZ2V0VmlkeChlLGYpO2lmKGUuc3Vic3RyKGYsMik9PVwiMDNcIil7Zy5wdXNoKGkrMil9ZWxzZXtnLnB1c2goaSl9dmFyIGw9ai5nZXRWYmxlbihlLGYpO3ZhciBjPWk7dmFyIGQ9MDt3aGlsZSgxKXt2YXIgYj1qLmdldE5leHRTaWJsaW5nSWR4KGUsYyk7aWYoYj09bnVsbHx8KGItaT49KGwqMikpKXticmVha31pZihkPj0yMDApe2JyZWFrfWcucHVzaChiKTtjPWI7ZCsrfXJldHVybiBnfTtBU04xSEVYLmdldE50aENoaWxkSWR4PWZ1bmN0aW9uKGQsYixlKXt2YXIgYz1BU04xSEVYLmdldENoaWxkSWR4KGQsYik7cmV0dXJuIGNbZV19O0FTTjFIRVguZ2V0SWR4YnlMaXN0PWZ1bmN0aW9uKGUsZCxjLGkpe3ZhciBnPUFTTjFIRVg7dmFyIGYsYjtpZihjLmxlbmd0aD09MCl7aWYoaSE9PXVuZGVmaW5lZCl7aWYoZS5zdWJzdHIoZCwyKSE9PWkpe3Rocm93XCJjaGVja2luZyB0YWcgZG9lc24ndCBtYXRjaDogXCIrZS5zdWJzdHIoZCwyKStcIiE9XCIraX19cmV0dXJuIGR9Zj1jLnNoaWZ0KCk7Yj1nLmdldENoaWxkSWR4KGUsZCk7cmV0dXJuIGcuZ2V0SWR4YnlMaXN0KGUsYltmXSxjLGkpfTtBU04xSEVYLmdldFRMVmJ5TGlzdD1mdW5jdGlvbihkLGMsYixmKXt2YXIgZT1BU04xSEVYO3ZhciBhPWUuZ2V0SWR4YnlMaXN0KGQsYyxiKTtpZihhPT09dW5kZWZpbmVkKXt0aHJvd1wiY2FuJ3QgZmluZCBudGhMaXN0IG9iamVjdFwifWlmKGYhPT11bmRlZmluZWQpe2lmKGQuc3Vic3RyKGEsMikhPWYpe3Rocm93XCJjaGVja2luZyB0YWcgZG9lc24ndCBtYXRjaDogXCIrZC5zdWJzdHIoYSwyKStcIiE9XCIrZn19cmV0dXJuIGUuZ2V0VExWKGQsYSl9O0FTTjFIRVguZ2V0VmJ5TGlzdD1mdW5jdGlvbihlLGMsYixnLGkpe3ZhciBmPUFTTjFIRVg7dmFyIGEsZDthPWYuZ2V0SWR4YnlMaXN0KGUsYyxiLGcpO2lmKGE9PT11bmRlZmluZWQpe3Rocm93XCJjYW4ndCBmaW5kIG50aExpc3Qgb2JqZWN0XCJ9ZD1mLmdldFYoZSxhKTtpZihpPT09dHJ1ZSl7ZD1kLnN1YnN0cigyKX1yZXR1cm4gZH07QVNOMUhFWC5oZXh0b29pZHN0cj1mdW5jdGlvbihlKXt2YXIgaD1mdW5jdGlvbihiLGEpe2lmKGIubGVuZ3RoPj1hKXtyZXR1cm4gYn1yZXR1cm4gbmV3IEFycmF5KGEtYi5sZW5ndGgrMSkuam9pbihcIjBcIikrYn07dmFyIGw9W107dmFyIG89ZS5zdWJzdHIoMCwyKTt2YXIgZj1wYXJzZUludChvLDE2KTtsWzBdPW5ldyBTdHJpbmcoTWF0aC5mbG9vcihmLzQwKSk7bFsxXT1uZXcgU3RyaW5nKGYlNDApO3ZhciBtPWUuc3Vic3RyKDIpO3ZhciBrPVtdO2Zvcih2YXIgZz0wO2c8bS5sZW5ndGgvMjtnKyspe2sucHVzaChwYXJzZUludChtLnN1YnN0cihnKjIsMiksMTYpKX12YXIgaj1bXTt2YXIgZD1cIlwiO2Zvcih2YXIgZz0wO2c8ay5sZW5ndGg7ZysrKXtpZihrW2ddJjEyOCl7ZD1kK2goKGtbZ10mMTI3KS50b1N0cmluZygyKSw3KX1lbHNle2Q9ZCtoKChrW2ddJjEyNykudG9TdHJpbmcoMiksNyk7ai5wdXNoKG5ldyBTdHJpbmcocGFyc2VJbnQoZCwyKSkpO2Q9XCJcIn19dmFyIG49bC5qb2luKFwiLlwiKTtpZihqLmxlbmd0aD4wKXtuPW4rXCIuXCIrai5qb2luKFwiLlwiKX1yZXR1cm4gbn07QVNOMUhFWC5kdW1wPWZ1bmN0aW9uKHQsYyxsLGcpe3ZhciBwPUFTTjFIRVg7dmFyIGo9cC5nZXRWO3ZhciB5PXAuZHVtcDt2YXIgdz1wLmdldENoaWxkSWR4O3ZhciBlPXQ7aWYodCBpbnN0YW5jZW9mIEtKVVIuYXNuMS5BU04xT2JqZWN0KXtlPXQuZ2V0RW5jb2RlZEhleCgpfXZhciBxPWZ1bmN0aW9uKEEsaSl7aWYoQS5sZW5ndGg8PWkqMil7cmV0dXJuIEF9ZWxzZXt2YXIgdj1BLnN1YnN0cigwLGkpK1wiLi4odG90YWwgXCIrQS5sZW5ndGgvMitcImJ5dGVzKS4uXCIrQS5zdWJzdHIoQS5sZW5ndGgtaSxpKTtyZXR1cm4gdn19O2lmKGM9PT11bmRlZmluZWQpe2M9e29tbWl0X2xvbmdfb2N0ZXQ6MzJ9fWlmKGw9PT11bmRlZmluZWQpe2w9MH1pZihnPT09dW5kZWZpbmVkKXtnPVwiXCJ9dmFyIHg9Yy5vbW1pdF9sb25nX29jdGV0O2lmKGUuc3Vic3RyKGwsMik9PVwiMDFcIil7dmFyIGg9aihlLGwpO2lmKGg9PVwiMDBcIil7cmV0dXJuIGcrXCJCT09MRUFOIEZBTFNFXFxuXCJ9ZWxzZXtyZXR1cm4gZytcIkJPT0xFQU4gVFJVRVxcblwifX1pZihlLnN1YnN0cihsLDIpPT1cIjAyXCIpe3ZhciBoPWooZSxsKTtyZXR1cm4gZytcIklOVEVHRVIgXCIrcShoLHgpK1wiXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIwM1wiKXt2YXIgaD1qKGUsbCk7cmV0dXJuIGcrXCJCSVRTVFJJTkcgXCIrcShoLHgpK1wiXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIwNFwiKXt2YXIgaD1qKGUsbCk7aWYocC5pc0FTTjFIRVgoaCkpe3ZhciBrPWcrXCJPQ1RFVFNUUklORywgZW5jYXBzdWxhdGVzXFxuXCI7az1rK3koaCxjLDAsZytcIiAgXCIpO3JldHVybiBrfWVsc2V7cmV0dXJuIGcrXCJPQ1RFVFNUUklORyBcIitxKGgseCkrXCJcXG5cIn19aWYoZS5zdWJzdHIobCwyKT09XCIwNVwiKXtyZXR1cm4gZytcIk5VTExcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjA2XCIpe3ZhciBtPWooZSxsKTt2YXIgYT1LSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQobSk7dmFyIG89S0pVUi5hc24xLng1MDkuT0lELm9pZDJuYW1lKGEpO3ZhciBiPWEucmVwbGFjZSgvXFwuL2csXCIgXCIpO2lmKG8hPVwiXCIpe3JldHVybiBnK1wiT2JqZWN0SWRlbnRpZmllciBcIitvK1wiIChcIitiK1wiKVxcblwifWVsc2V7cmV0dXJuIGcrXCJPYmplY3RJZGVudGlmaWVyIChcIitiK1wiKVxcblwifX1pZihlLnN1YnN0cihsLDIpPT1cIjBjXCIpe3JldHVybiBnK1wiVVRGOFN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxM1wiKXtyZXR1cm4gZytcIlByaW50YWJsZVN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxNFwiKXtyZXR1cm4gZytcIlRlbGV0ZXhTdHJpbmcgJ1wiK2hleHRvdXRmOChqKGUsbCkpK1wiJ1xcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMTZcIil7cmV0dXJuIGcrXCJJQTVTdHJpbmcgJ1wiK2hleHRvdXRmOChqKGUsbCkpK1wiJ1xcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMTdcIil7cmV0dXJuIGcrXCJVVENUaW1lIFwiK2hleHRvdXRmOChqKGUsbCkpK1wiXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxOFwiKXtyZXR1cm4gZytcIkdlbmVyYWxpemVkVGltZSBcIitoZXh0b3V0ZjgoaihlLGwpKStcIlxcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMzBcIil7aWYoZS5zdWJzdHIobCw0KT09XCIzMDAwXCIpe3JldHVybiBnK1wiU0VRVUVOQ0Uge31cXG5cIn12YXIgaz1nK1wiU0VRVUVOQ0VcXG5cIjt2YXIgZD13KGUsbCk7dmFyIGY9YztpZigoZC5sZW5ndGg9PTJ8fGQubGVuZ3RoPT0zKSYmZS5zdWJzdHIoZFswXSwyKT09XCIwNlwiJiZlLnN1YnN0cihkW2QubGVuZ3RoLTFdLDIpPT1cIjA0XCIpe3ZhciBvPXAub2lkbmFtZShqKGUsZFswXSkpO3ZhciByPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpO3IueDUwOUV4dE5hbWU9bztmPXJ9Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsZixkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga31pZihlLnN1YnN0cihsLDIpPT1cIjMxXCIpe3ZhciBrPWcrXCJTRVRcXG5cIjt2YXIgZD13KGUsbCk7Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsYyxkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga312YXIgej1wYXJzZUludChlLnN1YnN0cihsLDIpLDE2KTtpZigoeiYxMjgpIT0wKXt2YXIgbj16JjMxO2lmKCh6JjMyKSE9MCl7dmFyIGs9ZytcIltcIituK1wiXVxcblwiO3ZhciBkPXcoZSxsKTtmb3IodmFyIHU9MDt1PGQubGVuZ3RoO3UrKyl7az1rK3koZSxjLGRbdV0sZytcIiAgXCIpfXJldHVybiBrfWVsc2V7dmFyIGg9aihlLGwpO2lmKGguc3Vic3RyKDAsOCk9PVwiNjg3NDc0NzBcIil7aD1oZXh0b3V0ZjgoaCl9aWYoYy54NTA5RXh0TmFtZT09PVwic3ViamVjdEFsdE5hbWVcIiYmbj09Mil7aD1oZXh0b3V0ZjgoaCl9dmFyIGs9ZytcIltcIituK1wiXSBcIitoK1wiXFxuXCI7cmV0dXJuIGt9fXJldHVybiBnK1wiVU5LTk9XTihcIitlLnN1YnN0cihsLDIpK1wiKSBcIitqKGUsbCkrXCJcXG5cIn07QVNOMUhFWC5pc0FTTjFIRVg9ZnVuY3Rpb24oZSl7dmFyIGQ9QVNOMUhFWDtpZihlLmxlbmd0aCUyPT0xKXtyZXR1cm4gZmFsc2V9dmFyIGM9ZC5nZXRWYmxlbihlLDApO3ZhciBiPWUuc3Vic3RyKDAsMik7dmFyIGY9ZC5nZXRMKGUsMCk7dmFyIGE9ZS5sZW5ndGgtYi5sZW5ndGgtZi5sZW5ndGg7aWYoYT09YyoyKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O0FTTjFIRVgub2lkbmFtZT1mdW5jdGlvbihhKXt2YXIgYz1LSlVSLmFzbjE7aWYoS0pVUi5sYW5nLlN0cmluZy5pc0hleChhKSl7YT1jLkFTTjFVdGlsLm9pZEhleFRvSW50KGEpfXZhciBiPWMueDUwOS5PSUQub2lkMm5hbWUoYSk7aWYoYj09PVwiXCIpe2I9YX1yZXR1cm4gYn07XG52YXIgS0pVUjtpZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIubGFuZz09XCJ1bmRlZmluZWRcInx8IUtKVVIubGFuZyl7S0pVUi5sYW5nPXt9fUtKVVIubGFuZy5TdHJpbmc9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIEJhc2U2NHgoKXt9ZnVuY3Rpb24gc3RvQkEoZCl7dmFyIGI9bmV3IEFycmF5KCk7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2JbY109ZC5jaGFyQ29kZUF0KGMpfXJldHVybiBifWZ1bmN0aW9uIEJBdG9zKGIpe3ZhciBkPVwiXCI7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe2Q9ZCtTdHJpbmcuZnJvbUNoYXJDb2RlKGJbY10pfXJldHVybiBkfWZ1bmN0aW9uIEJBdG9oZXgoYil7dmFyIGU9XCJcIjtmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGM9YltkXS50b1N0cmluZygxNik7aWYoYy5sZW5ndGg9PTEpe2M9XCIwXCIrY31lPWUrY31yZXR1cm4gZX1mdW5jdGlvbiBzdG9oZXgoYSl7cmV0dXJuIEJBdG9oZXgoc3RvQkEoYSkpfWZ1bmN0aW9uIHN0b2I2NChhKXtyZXR1cm4gaGV4MmI2NChzdG9oZXgoYSkpfWZ1bmN0aW9uIHN0b2I2NHUoYSl7cmV0dXJuIGI2NHRvYjY0dShoZXgyYjY0KHN0b2hleChhKSkpfWZ1bmN0aW9uIGI2NHV0b3MoYSl7cmV0dXJuIEJBdG9zKGI2NHRvQkEoYjY0dXRvYjY0KGEpKSl9ZnVuY3Rpb24gYjY0dG9iNjR1KGEpe2E9YS5yZXBsYWNlKC9cXD0vZyxcIlwiKTthPWEucmVwbGFjZSgvXFwrL2csXCItXCIpO2E9YS5yZXBsYWNlKC9cXC8vZyxcIl9cIik7cmV0dXJuIGF9ZnVuY3Rpb24gYjY0dXRvYjY0KGEpe2lmKGEubGVuZ3RoJTQ9PTIpe2E9YStcIj09XCJ9ZWxzZXtpZihhLmxlbmd0aCU0PT0zKXthPWErXCI9XCJ9fWE9YS5yZXBsYWNlKC8tL2csXCIrXCIpO2E9YS5yZXBsYWNlKC9fL2csXCIvXCIpO3JldHVybiBhfWZ1bmN0aW9uIGhleHRvYjY0dShhKXtpZihhLmxlbmd0aCUyPT0xKXthPVwiMFwiK2F9cmV0dXJuIGI2NHRvYjY0dShoZXgyYjY0KGEpKX1mdW5jdGlvbiBiNjR1dG9oZXgoYSl7cmV0dXJuIGI2NHRvaGV4KGI2NHV0b2I2NChhKSl9dmFyIHV0Zjh0b2I2NHUsYjY0dXRvdXRmODtpZih0eXBlb2YgQnVmZmVyPT09XCJmdW5jdGlvblwiKXt1dGY4dG9iNjR1PWZ1bmN0aW9uKGEpe3JldHVybiBiNjR0b2I2NHUobmV3IEJ1ZmZlcihhLFwidXRmOFwiKS50b1N0cmluZyhcImJhc2U2NFwiKSl9O2I2NHV0b3V0Zjg9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBCdWZmZXIoYjY0dXRvYjY0KGEpLFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmOFwiKX19ZWxzZXt1dGY4dG9iNjR1PWZ1bmN0aW9uKGEpe3JldHVybiBoZXh0b2I2NHUodXJpY21wdG9oZXgoZW5jb2RlVVJJQ29tcG9uZW50QWxsKGEpKSl9O2I2NHV0b3V0Zjg9ZnVuY3Rpb24oYSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChoZXh0b3VyaWNtcChiNjR1dG9oZXgoYSkpKX19ZnVuY3Rpb24gdXRmOHRvYjY0KGEpe3JldHVybiBoZXgyYjY0KHVyaWNtcHRvaGV4KGVuY29kZVVSSUNvbXBvbmVudEFsbChhKSkpfWZ1bmN0aW9uIGI2NHRvdXRmOChhKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGhleHRvdXJpY21wKGI2NHRvaGV4KGEpKSl9ZnVuY3Rpb24gdXRmOHRvaGV4KGEpe3JldHVybiB1cmljbXB0b2hleChlbmNvZGVVUklDb21wb25lbnRBbGwoYSkpfWZ1bmN0aW9uIGhleHRvdXRmOChhKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGhleHRvdXJpY21wKGEpKX1mdW5jdGlvbiBoZXh0b3JzdHIoYyl7dmFyIGI9XCJcIjtmb3IodmFyIGE9MDthPGMubGVuZ3RoLTE7YSs9Mil7Yis9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChjLnN1YnN0cihhLDIpLDE2KSl9cmV0dXJuIGJ9ZnVuY3Rpb24gcnN0cnRvaGV4KGMpe3ZhciBhPVwiXCI7Zm9yKHZhciBiPTA7YjxjLmxlbmd0aDtiKyspe2ErPShcIjBcIitjLmNoYXJDb2RlQXQoYikudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9cmV0dXJuIGF9ZnVuY3Rpb24gaGV4dG9iNjQoYSl7cmV0dXJuIGhleDJiNjQoYSl9ZnVuY3Rpb24gaGV4dG9iNjRubChiKXt2YXIgYT1oZXh0b2I2NChiKTt2YXIgYz1hLnJlcGxhY2UoLyguezY0fSkvZyxcIiQxXFxyXFxuXCIpO2M9Yy5yZXBsYWNlKC9cXHJcXG4kLyxcIlwiKTtyZXR1cm4gY31mdW5jdGlvbiBiNjRubHRvaGV4KGIpe3ZhciBhPWIucmVwbGFjZSgvW14wLTlBLVphLXpcXC8rPV0qL2csXCJcIik7dmFyIGM9YjY0dG9oZXgoYSk7cmV0dXJuIGN9ZnVuY3Rpb24gaGV4dG9wZW0oYSxiKXt2YXIgYz1oZXh0b2I2NG5sKGEpO3JldHVyblwiLS0tLS1CRUdJTiBcIitiK1wiLS0tLS1cXHJcXG5cIitjK1wiXFxyXFxuLS0tLS1FTkQgXCIrYitcIi0tLS0tXFxyXFxuXCJ9ZnVuY3Rpb24gcGVtdG9oZXgoYSxiKXtpZihhLmluZGV4T2YoXCItLS0tLUJFR0lOIFwiKT09LTEpe3Rocm93XCJjYW4ndCBmaW5kIFBFTSBoZWFkZXI6IFwiK2J9aWYoYiE9PXVuZGVmaW5lZCl7YT1hLnJlcGxhY2UoXCItLS0tLUJFR0lOIFwiK2IrXCItLS0tLVwiLFwiXCIpO2E9YS5yZXBsYWNlKFwiLS0tLS1FTkQgXCIrYitcIi0tLS0tXCIsXCJcIil9ZWxzZXthPWEucmVwbGFjZSgvLS0tLS1CRUdJTiBbXi1dKy0tLS0tLyxcIlwiKTthPWEucmVwbGFjZSgvLS0tLS1FTkQgW14tXSstLS0tLS8sXCJcIil9cmV0dXJuIGI2NG5sdG9oZXgoYSl9ZnVuY3Rpb24gaGV4dG9BcnJheUJ1ZmZlcihkKXtpZihkLmxlbmd0aCUyIT0wKXt0aHJvd1wiaW5wdXQgaXMgbm90IGV2ZW4gbGVuZ3RoXCJ9aWYoZC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKT09bnVsbCl7dGhyb3dcImlucHV0IGlzIG5vdCBoZXhhZGVjaW1hbFwifXZhciBiPW5ldyBBcnJheUJ1ZmZlcihkLmxlbmd0aC8yKTt2YXIgYT1uZXcgRGF0YVZpZXcoYik7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aC8yO2MrKyl7YS5zZXRVaW50OChjLHBhcnNlSW50KGQuc3Vic3RyKGMqMiwyKSwxNikpfXJldHVybiBifWZ1bmN0aW9uIEFycmF5QnVmZmVydG9oZXgoYil7dmFyIGQ9XCJcIjt2YXIgYT1uZXcgRGF0YVZpZXcoYik7Zm9yKHZhciBjPTA7YzxiLmJ5dGVMZW5ndGg7YysrKXtkKz0oXCIwMFwiK2EuZ2V0VWludDgoYykudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9cmV0dXJuIGR9ZnVuY3Rpb24genVsdXRvbXNlYyhuKXt2YXIgbCxqLG0sZSxmLGksYixrO3ZhciBhLGgsZyxjO2M9bi5tYXRjaCgvXihcXGR7Mn18XFxkezR9KShcXGRcXGQpKFxcZFxcZCkoXFxkXFxkKShcXGRcXGQpKFxcZFxcZCkofFxcLlxcZCspWiQvKTtpZihjKXthPWNbMV07bD1wYXJzZUludChhKTtpZihhLmxlbmd0aD09PTIpe2lmKDUwPD1sJiZsPDEwMCl7bD0xOTAwK2x9ZWxzZXtpZigwPD1sJiZsPDUwKXtsPTIwMDArbH19fWo9cGFyc2VJbnQoY1syXSktMTttPXBhcnNlSW50KGNbM10pO2U9cGFyc2VJbnQoY1s0XSk7Zj1wYXJzZUludChjWzVdKTtpPXBhcnNlSW50KGNbNl0pO2I9MDtoPWNbN107aWYoaCE9PVwiXCIpe2c9KGguc3Vic3RyKDEpK1wiMDBcIikuc3Vic3RyKDAsMyk7Yj1wYXJzZUludChnKX1yZXR1cm4gRGF0ZS5VVEMobCxqLG0sZSxmLGksYil9dGhyb3dcInVuc3VwcG9ydGVkIHp1bHUgZm9ybWF0OiBcIitufWZ1bmN0aW9uIHp1bHV0b3NlYyhhKXt2YXIgYj16dWx1dG9tc2VjKGEpO3JldHVybiB+fihiLzEwMDApfWZ1bmN0aW9uIHp1bHV0b2RhdGUoYSl7cmV0dXJuIG5ldyBEYXRlKHp1bHV0b21zZWMoYSkpfWZ1bmN0aW9uIGRhdGV0b3p1bHUoZyxlLGYpe3ZhciBiO3ZhciBhPWcuZ2V0VVRDRnVsbFllYXIoKTtpZihlKXtpZihhPDE5NTB8fDIwNDk8YSl7dGhyb3dcIm5vdCBwcm9wZXIgeWVhciBmb3IgVVRDVGltZTogXCIrYX1iPShcIlwiK2EpLnNsaWNlKC0yKX1lbHNle2I9KFwiMDAwXCIrYSkuc2xpY2UoLTQpfWIrPShcIjBcIisoZy5nZXRVVENNb250aCgpKzEpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDRGF0ZSgpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ01pbnV0ZXMoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpO2lmKGYpe3ZhciBjPWcuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7aWYoYyE9PTApe2M9KFwiMDBcIitjKS5zbGljZSgtMyk7Yz1jLnJlcGxhY2UoLzArJC9nLFwiXCIpO2IrPVwiLlwiK2N9fWIrPVwiWlwiO3JldHVybiBifWZ1bmN0aW9uIHVyaWNtcHRvaGV4KGEpe3JldHVybiBhLnJlcGxhY2UoLyUvZyxcIlwiKX1mdW5jdGlvbiBoZXh0b3VyaWNtcChhKXtyZXR1cm4gYS5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIil9ZnVuY3Rpb24gaXB2NnRvaGV4KGcpe3ZhciBiPVwibWFsZm9ybWVkIElQdjYgYWRkcmVzc1wiO2lmKCFnLm1hdGNoKC9eWzAtOUEtRmEtZjpdKyQvKSl7dGhyb3cgYn1nPWcudG9Mb3dlckNhc2UoKTt2YXIgZD1nLnNwbGl0KFwiOlwiKS5sZW5ndGgtMTtpZihkPDIpe3Rocm93IGJ9dmFyIGU9XCI6XCIucmVwZWF0KDctZCsyKTtnPWcucmVwbGFjZShcIjo6XCIsZSk7dmFyIGM9Zy5zcGxpdChcIjpcIik7aWYoYy5sZW5ndGghPTgpe3Rocm93IGJ9Zm9yKHZhciBmPTA7Zjw4O2YrKyl7Y1tmXT0oXCIwMDAwXCIrY1tmXSkuc2xpY2UoLTQpfXJldHVybiBjLmpvaW4oXCJcIil9ZnVuY3Rpb24gaGV4dG9pcHY2KGUpe2lmKCFlLm1hdGNoKC9eWzAtOUEtRmEtZl17MzJ9JC8pKXt0aHJvd1wibWFsZm9ybWVkIElQdjYgYWRkcmVzcyBvY3RldFwifWU9ZS50b0xvd2VyQ2FzZSgpO3ZhciBiPWUubWF0Y2goLy57MSw0fS9nKTtmb3IodmFyIGQ9MDtkPDg7ZCsrKXtiW2RdPWJbZF0ucmVwbGFjZSgvXjArLyxcIlwiKTtpZihiW2RdPT1cIlwiKXtiW2RdPVwiMFwifX1lPVwiOlwiK2Iuam9pbihcIjpcIikrXCI6XCI7dmFyIGM9ZS5tYXRjaCgvOigwOil7Mix9L2cpO2lmKGM9PT1udWxsKXtyZXR1cm4gZS5zbGljZSgxLC0xKX12YXIgZj1cIlwiO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtpZihjW2RdLmxlbmd0aD5mLmxlbmd0aCl7Zj1jW2RdfX1lPWUucmVwbGFjZShmLFwiOjpcIik7cmV0dXJuIGUuc2xpY2UoMSwtMSl9ZnVuY3Rpb24gaGV4dG9pcChiKXt2YXIgZD1cIm1hbGZvcm1lZCBoZXggdmFsdWVcIjtpZighYi5tYXRjaCgvXihbMC05QS1GYS1mXVswLTlBLUZhLWZdKXsxLH0kLykpe3Rocm93IGR9aWYoYi5sZW5ndGg9PTgpe3ZhciBjO3RyeXtjPXBhcnNlSW50KGIuc3Vic3RyKDAsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDIsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDQsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDYsMiksMTYpO3JldHVybiBjfWNhdGNoKGEpe3Rocm93IGR9fWVsc2V7aWYoYi5sZW5ndGg9PTMyKXtyZXR1cm4gaGV4dG9pcHY2KGIpfWVsc2V7cmV0dXJuIGJ9fX1mdW5jdGlvbiBpcHRvaGV4KGYpe3ZhciBqPVwibWFsZm9ybWVkIElQIGFkZHJlc3NcIjtmPWYudG9Mb3dlckNhc2UoZik7aWYoZi5tYXRjaCgvXlswLTkuXSskLykpe3ZhciBiPWYuc3BsaXQoXCIuXCIpO2lmKGIubGVuZ3RoIT09NCl7dGhyb3cgan12YXIgZz1cIlwiO3RyeXtmb3IodmFyIGU9MDtlPDQ7ZSsrKXt2YXIgaD1wYXJzZUludChiW2VdKTtnKz0oXCIwXCIraC50b1N0cmluZygxNikpLnNsaWNlKC0yKX1yZXR1cm4gZ31jYXRjaChjKXt0aHJvdyBqfX1lbHNle2lmKGYubWF0Y2goL15bMC05YS1mOl0rJC8pJiZmLmluZGV4T2YoXCI6XCIpIT09LTEpe3JldHVybiBpcHY2dG9oZXgoZil9ZWxzZXt0aHJvdyBqfX19ZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50QWxsKGEpe3ZhciBkPWVuY29kZVVSSUNvbXBvbmVudChhKTt2YXIgYj1cIlwiO2Zvcih2YXIgYz0wO2M8ZC5sZW5ndGg7YysrKXtpZihkW2NdPT1cIiVcIil7Yj1iK2Quc3Vic3RyKGMsMyk7Yz1jKzJ9ZWxzZXtiPWIrXCIlXCIrc3RvaGV4KGRbY10pfX1yZXR1cm4gYn1mdW5jdGlvbiBuZXdsaW5lX3RvVW5peChhKXthPWEucmVwbGFjZSgvXFxyXFxuL21nLFwiXFxuXCIpO3JldHVybiBhfWZ1bmN0aW9uIG5ld2xpbmVfdG9Eb3MoYSl7YT1hLnJlcGxhY2UoL1xcclxcbi9tZyxcIlxcblwiKTthPWEucmVwbGFjZSgvXFxuL21nLFwiXFxyXFxuXCIpO3JldHVybiBhfUtKVVIubGFuZy5TdHJpbmcuaXNJbnRlZ2VyPWZ1bmN0aW9uKGEpe2lmKGEubWF0Y2goL15bMC05XSskLykpe3JldHVybiB0cnVlfWVsc2V7aWYoYS5tYXRjaCgvXi1bMC05XSskLykpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX19O0tKVVIubGFuZy5TdHJpbmcuaXNIZXg9ZnVuY3Rpb24oYSl7aWYoYS5sZW5ndGglMj09MCYmKGEubWF0Y2goL15bMC05YS1mXSskLyl8fGEubWF0Y2goL15bMC05QS1GXSskLykpKXtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O0tKVVIubGFuZy5TdHJpbmcuaXNCYXNlNjQ9ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1xccysvZyxcIlwiKTtpZihhLm1hdGNoKC9eWzAtOUEtWmEteitcXC9dKz17MCwzfSQvKSYmYS5sZW5ndGglND09MCl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fTtLSlVSLmxhbmcuU3RyaW5nLmlzQmFzZTY0VVJMPWZ1bmN0aW9uKGEpe2lmKGEubWF0Y2goL1srLz1dLykpe3JldHVybiBmYWxzZX1hPWI2NHV0b2I2NChhKTtyZXR1cm4gS0pVUi5sYW5nLlN0cmluZy5pc0Jhc2U2NChhKX07S0pVUi5sYW5nLlN0cmluZy5pc0ludGVnZXJBcnJheT1mdW5jdGlvbihhKXthPWEucmVwbGFjZSgvXFxzKy9nLFwiXCIpO2lmKGEubWF0Y2goL15cXFtbMC05LF0rXFxdJC8pKXtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O2Z1bmN0aW9uIGhleHRvcG9zaGV4KGEpe2lmKGEubGVuZ3RoJTI9PTEpe3JldHVyblwiMFwiK2F9aWYoYS5zdWJzdHIoMCwxKT5cIjdcIil7cmV0dXJuXCIwMFwiK2F9cmV0dXJuIGF9ZnVuY3Rpb24gaW50YXJ5c3RydG9oZXgoYil7Yj1iLnJlcGxhY2UoL15cXHMqXFxbXFxzKi8sXCJcIik7Yj1iLnJlcGxhY2UoL1xccypcXF1cXHMqJC8sXCJcIik7Yj1iLnJlcGxhY2UoL1xccyovZyxcIlwiKTt0cnl7dmFyIGM9Yi5zcGxpdCgvLC8pLm1hcChmdW5jdGlvbihnLGUsaCl7dmFyIGY9cGFyc2VJbnQoZyk7aWYoZjwwfHwyNTU8Zil7dGhyb3dcImludGVnZXIgbm90IGluIHJhbmdlIDAtMjU1XCJ9dmFyIGQ9KFwiMDBcIitmLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO3JldHVybiBkfSkuam9pbihcIlwiKTtyZXR1cm4gY31jYXRjaChhKXt0aHJvd1wibWFsZm9ybWVkIGludGVnZXIgYXJyYXkgc3RyaW5nOiBcIithfX12YXIgc3RyZGlmZmlkeD1mdW5jdGlvbihjLGEpe3ZhciBkPWMubGVuZ3RoO2lmKGMubGVuZ3RoPmEubGVuZ3RoKXtkPWEubGVuZ3RofWZvcih2YXIgYj0wO2I8ZDtiKyspe2lmKGMuY2hhckNvZGVBdChiKSE9YS5jaGFyQ29kZUF0KGIpKXtyZXR1cm4gYn19aWYoYy5sZW5ndGghPWEubGVuZ3RoKXtyZXR1cm4gZH1yZXR1cm4gLTF9O1xuaWYodHlwZW9mIEtKVVI9PVwidW5kZWZpbmVkXCJ8fCFLSlVSKXtLSlVSPXt9fWlmKHR5cGVvZiBLSlVSLmNyeXB0bz09XCJ1bmRlZmluZWRcInx8IUtKVVIuY3J5cHRvKXtLSlVSLmNyeXB0bz17fX1LSlVSLmNyeXB0by5VdGlsPW5ldyBmdW5jdGlvbigpe3RoaXMuRElHRVNUSU5GT0hFQUQ9e3NoYTE6XCIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTRcIixzaGEyMjQ6XCIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxY1wiLHNoYTI1NjpcIjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwXCIsc2hhMzg0OlwiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzBcIixzaGE1MTI6XCIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MFwiLG1kMjpcIjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDIwNTAwMDQxMFwiLG1kNTpcIjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMFwiLHJpcGVtZDE2MDpcIjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNFwiLH07dGhpcy5ERUZBVUxUUFJPVklERVI9e21kNTpcImNyeXB0b2pzXCIsc2hhMTpcImNyeXB0b2pzXCIsc2hhMjI0OlwiY3J5cHRvanNcIixzaGEyNTY6XCJjcnlwdG9qc1wiLHNoYTM4NDpcImNyeXB0b2pzXCIsc2hhNTEyOlwiY3J5cHRvanNcIixyaXBlbWQxNjA6XCJjcnlwdG9qc1wiLGhtYWNtZDU6XCJjcnlwdG9qc1wiLGhtYWNzaGExOlwiY3J5cHRvanNcIixobWFjc2hhMjI0OlwiY3J5cHRvanNcIixobWFjc2hhMjU2OlwiY3J5cHRvanNcIixobWFjc2hhMzg0OlwiY3J5cHRvanNcIixobWFjc2hhNTEyOlwiY3J5cHRvanNcIixobWFjcmlwZW1kMTYwOlwiY3J5cHRvanNcIixNRDV3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixTSEExd2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjU2d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMzg0d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBNTEyd2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsUklQRU1EMTYwd2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsTUQ1d2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEExd2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyMjR3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMzg0d2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEE1MTJ3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFJJUEVNRDE2MHdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMXdpdGhEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTIyNHdpdGhEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLE1ENXdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEExd2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTIyNHdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMzg0d2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTUxMndpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixSSVBFTUQxNjB3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsfTt0aGlzLkNSWVBUT0pTTUVTU0FHRURJR0VTVE5BTUU9e21kNTpDcnlwdG9KUy5hbGdvLk1ENSxzaGExOkNyeXB0b0pTLmFsZ28uU0hBMSxzaGEyMjQ6Q3J5cHRvSlMuYWxnby5TSEEyMjQsc2hhMjU2OkNyeXB0b0pTLmFsZ28uU0hBMjU2LHNoYTM4NDpDcnlwdG9KUy5hbGdvLlNIQTM4NCxzaGE1MTI6Q3J5cHRvSlMuYWxnby5TSEE1MTIscmlwZW1kMTYwOkNyeXB0b0pTLmFsZ28uUklQRU1EMTYwfTt0aGlzLmdldERpZ2VzdEluZm9IZXg9ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgdGhpcy5ESUdFU1RJTkZPSEVBRFtiXT09XCJ1bmRlZmluZWRcIil7dGhyb3dcImFsZyBub3Qgc3VwcG9ydGVkIGluIFV0aWwuRElHRVNUSU5GT0hFQUQ6IFwiK2J9cmV0dXJuIHRoaXMuRElHRVNUSU5GT0hFQURbYl0rYX07dGhpcy5nZXRQYWRkZWREaWdlc3RJbmZvSGV4PWZ1bmN0aW9uKGgsYSxqKXt2YXIgYz10aGlzLmdldERpZ2VzdEluZm9IZXgoaCxhKTt2YXIgZD1qLzQ7aWYoYy5sZW5ndGgrMjI+ZCl7dGhyb3dcImtleSBpcyB0b28gc2hvcnQgZm9yIFNpZ0FsZzoga2V5bGVuPVwiK2orXCIsXCIrYX12YXIgYj1cIjAwMDFcIjt2YXIgaz1cIjAwXCIrYzt2YXIgZz1cIlwiO3ZhciBsPWQtYi5sZW5ndGgtay5sZW5ndGg7Zm9yKHZhciBmPTA7ZjxsO2YrPTIpe2crPVwiZmZcIn12YXIgZT1iK2craztyZXR1cm4gZX07dGhpcy5oYXNoU3RyaW5nPWZ1bmN0aW9uKGEsYyl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpjfSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTt0aGlzLmhhc2hIZXg9ZnVuY3Rpb24oYixjKXt2YXIgYT1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOmN9KTtyZXR1cm4gYS5kaWdlc3RIZXgoYil9O3RoaXMuc2hhMT1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwic2hhMVwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTt0aGlzLnNoYTI1Nj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwic2hhMjU2XCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O3RoaXMuc2hhMjU2SGV4PWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJzaGEyNTZcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdEhleChhKX07dGhpcy5zaGE1MTI9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInNoYTUxMlwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTt0aGlzLnNoYTUxMkhleD1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwic2hhNTEyXCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RIZXgoYSl9fTtLSlVSLmNyeXB0by5VdGlsLm1kNT1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwibWQ1XCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O0tKVVIuY3J5cHRvLlV0aWwucmlwZW1kMTYwPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJyaXBlbWQxNjBcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07S0pVUi5jcnlwdG8uVXRpbC5TRUNVUkVSQU5ET01HRU49bmV3IFNlY3VyZVJhbmRvbSgpO0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tSGV4T2ZOYnl0ZXM9ZnVuY3Rpb24oYil7dmFyIGE9bmV3IEFycmF5KGIpO0tKVVIuY3J5cHRvLlV0aWwuU0VDVVJFUkFORE9NR0VOLm5leHRCeXRlcyhhKTtyZXR1cm4gQkF0b2hleChhKX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYnl0ZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKEtKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tSGV4T2ZOYnl0ZXMoYSksMTYpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUhleE9mTmJpdHM9ZnVuY3Rpb24oZCl7dmFyIGM9ZCU4O3ZhciBhPShkLWMpLzg7dmFyIGI9bmV3IEFycmF5KGErMSk7S0pVUi5jcnlwdG8uVXRpbC5TRUNVUkVSQU5ET01HRU4ubmV4dEJ5dGVzKGIpO2JbMF09KCgoMjU1PDxjKSYyNTUpXjI1NSkmYlswXTtyZXR1cm4gQkF0b2hleChiKX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoS0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5iaXRzKGEpLDE2KX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyWmVyb1RvTWF4PWZ1bmN0aW9uKGIpe3ZhciBhPWIuYml0TGVuZ3RoKCk7d2hpbGUoMSl7dmFyIGM9S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cyhhKTtpZihiLmNvbXBhcmVUbyhjKSE9LTEpe3JldHVybiBjfX19O0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tQmlnSW50ZWdlck1pblRvTWF4PWZ1bmN0aW9uKGUsYil7dmFyIGM9ZS5jb21wYXJlVG8oYik7aWYoYz09MSl7dGhyb3dcImJpTWluIGlzIGdyZWF0ZXIgdGhhbiBiaU1heFwifWlmKGM9PTApe3JldHVybiBlfXZhciBhPWIuc3VidHJhY3QoZSk7dmFyIGQ9S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyWmVyb1RvTWF4KGEpO3JldHVybiBkLmFkZChlKX07S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdD1mdW5jdGlvbihjKXt2YXIgYj1udWxsO3ZhciBhPW51bGw7dmFyIGQ9bnVsbDt0aGlzLnNldEFsZ0FuZFByb3ZpZGVyPWZ1bmN0aW9uKGcsZil7Zz1LSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0LmdldENhbm9uaWNhbEFsZ05hbWUoZyk7aWYoZyE9PW51bGwmJmY9PT11bmRlZmluZWQpe2Y9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbZ119aWYoXCI6bWQ1OnNoYTE6c2hhMjI0OnNoYTI1NjpzaGEzODQ6c2hhNTEyOnJpcGVtZDE2MDpcIi5pbmRleE9mKGcpIT0tMSYmZj09XCJjcnlwdG9qc1wiKXt0cnl7dGhpcy5tZD1LSlVSLmNyeXB0by5VdGlsLkNSWVBUT0pTTUVTU0FHRURJR0VTVE5BTUVbZ10uY3JlYXRlKCl9Y2F0Y2goZSl7dGhyb3dcInNldEFsZ0FuZFByb3ZpZGVyIGhhc2ggYWxnIHNldCBmYWlsIGFsZz1cIitnK1wiL1wiK2V9dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24oaCl7dGhpcy5tZC51cGRhdGUoaCl9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGgpe3ZhciBpPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoaCk7dGhpcy5tZC51cGRhdGUoaSl9O3RoaXMuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGg9dGhpcy5tZC5maW5hbGl6ZSgpO3JldHVybiBoLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpfTt0aGlzLmRpZ2VzdFN0cmluZz1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZVN0cmluZyhoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX07dGhpcy5kaWdlc3RIZXg9ZnVuY3Rpb24oaCl7dGhpcy51cGRhdGVIZXgoaCk7cmV0dXJuIHRoaXMuZGlnZXN0KCl9fWlmKFwiOnNoYTI1NjpcIi5pbmRleE9mKGcpIT0tMSYmZj09XCJzamNsXCIpe3RyeXt0aGlzLm1kPW5ldyBzamNsLmhhc2guc2hhMjU2KCl9Y2F0Y2goZSl7dGhyb3dcInNldEFsZ0FuZFByb3ZpZGVyIGhhc2ggYWxnIHNldCBmYWlsIGFsZz1cIitnK1wiL1wiK2V9dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24oaCl7dGhpcy5tZC51cGRhdGUoaCl9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGkpe3ZhciBoPXNqY2wuY29kZWMuaGV4LnRvQml0cyhpKTt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgaD10aGlzLm1kLmZpbmFsaXplKCk7cmV0dXJuIHNqY2wuY29kZWMuaGV4LmZyb21CaXRzKGgpfTt0aGlzLmRpZ2VzdFN0cmluZz1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZVN0cmluZyhoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX07dGhpcy5kaWdlc3RIZXg9ZnVuY3Rpb24oaCl7dGhpcy51cGRhdGVIZXgoaCk7cmV0dXJuIHRoaXMuZGlnZXN0KCl9fX07dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24oZSl7dGhyb3dcInVwZGF0ZVN0cmluZyhzdHIpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihlKXt0aHJvd1widXBkYXRlSGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMuZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3dcImRpZ2VzdCgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTt0aGlzLmRpZ2VzdFN0cmluZz1mdW5jdGlvbihlKXt0aHJvd1wiZGlnZXN0U3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMuZGlnZXN0SGV4PWZ1bmN0aW9uKGUpe3Rocm93XCJkaWdlc3RIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07aWYoYyE9PXVuZGVmaW5lZCl7aWYoYy5hbGchPT11bmRlZmluZWQpe3RoaXMuYWxnTmFtZT1jLmFsZztpZihjLnByb3Y9PT11bmRlZmluZWQpe3RoaXMucHJvdk5hbWU9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbdGhpcy5hbGdOYW1lXX10aGlzLnNldEFsZ0FuZFByb3ZpZGVyKHRoaXMuYWxnTmFtZSx0aGlzLnByb3ZOYW1lKX19fTtLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0LmdldENhbm9uaWNhbEFsZ05hbWU9ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PT1cInN0cmluZ1wiKXthPWEudG9Mb3dlckNhc2UoKTthPWEucmVwbGFjZSgvLS8sXCJcIil9cmV0dXJuIGF9O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0SGFzaExlbmd0aD1mdW5jdGlvbihjKXt2YXIgYj1LSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0O3ZhciBhPWIuZ2V0Q2Fub25pY2FsQWxnTmFtZShjKTtpZihiLkhBU0hMRU5HVEhbYV09PT11bmRlZmluZWQpe3Rocm93XCJub3Qgc3VwcG9ydGVkIGFsZ29yaXRobTogXCIrY31yZXR1cm4gYi5IQVNITEVOR1RIW2FdfTtLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0LkhBU0hMRU5HVEg9e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2NCxyaXBlbWQxNjA6MjB9O0tKVVIuY3J5cHRvLk1hYz1mdW5jdGlvbihkKXt2YXIgZj1udWxsO3ZhciBjPW51bGw7dmFyIGE9bnVsbDt2YXIgZT1udWxsO3ZhciBiPW51bGw7dGhpcy5zZXRBbGdBbmRQcm92aWRlcj1mdW5jdGlvbihrLGkpe2s9ay50b0xvd2VyQ2FzZSgpO2lmKGs9PW51bGwpe2s9XCJobWFjc2hhMVwifWs9ay50b0xvd2VyQ2FzZSgpO2lmKGsuc3Vic3RyKDAsNCkhPVwiaG1hY1wiKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgdW5zdXBwb3J0ZWQgSE1BQyBhbGc6IFwiK2t9aWYoaT09PXVuZGVmaW5lZCl7aT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUltrXX10aGlzLmFsZ1Byb3Y9aytcIi9cIitpO3ZhciBnPWsuc3Vic3RyKDQpO2lmKFwiOm1kNTpzaGExOnNoYTIyNDpzaGEyNTY6c2hhMzg0OnNoYTUxMjpyaXBlbWQxNjA6XCIuaW5kZXhPZihnKSE9LTEmJmk9PVwiY3J5cHRvanNcIil7dHJ5e3ZhciBqPUtKVVIuY3J5cHRvLlV0aWwuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRVtnXTt0aGlzLm1hYz1DcnlwdG9KUy5hbGdvLkhNQUMuY3JlYXRlKGosdGhpcy5wYXNzKX1jYXRjaChoKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgaGFzaEFsZz1cIitnK1wiL1wiK2h9dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24obCl7dGhpcy5tYWMudXBkYXRlKGwpfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihsKXt2YXIgbT1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGwpO3RoaXMubWFjLnVwZGF0ZShtKX07dGhpcy5kb0ZpbmFsPWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5tYWMuZmluYWxpemUoKTtyZXR1cm4gbC50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KX07dGhpcy5kb0ZpbmFsU3RyaW5nPWZ1bmN0aW9uKGwpe3RoaXMudXBkYXRlU3RyaW5nKGwpO3JldHVybiB0aGlzLmRvRmluYWwoKX07dGhpcy5kb0ZpbmFsSGV4PWZ1bmN0aW9uKGwpe3RoaXMudXBkYXRlSGV4KGwpO3JldHVybiB0aGlzLmRvRmluYWwoKX19fTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihnKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihnKXt0aHJvd1widXBkYXRlSGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLmRvRmluYWw9ZnVuY3Rpb24oKXt0aHJvd1wiZGlnZXN0KCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLmRvRmluYWxTdHJpbmc9ZnVuY3Rpb24oZyl7dGhyb3dcImRpZ2VzdFN0cmluZyhzdHIpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnUHJvdn07dGhpcy5kb0ZpbmFsSGV4PWZ1bmN0aW9uKGcpe3Rocm93XCJkaWdlc3RIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuc2V0UGFzc3dvcmQ9ZnVuY3Rpb24oaCl7aWYodHlwZW9mIGg9PVwic3RyaW5nXCIpe3ZhciBnPWg7aWYoaC5sZW5ndGglMj09MXx8IWgubWF0Y2goL15bMC05QS1GYS1mXSskLykpe2c9cnN0cnRvaGV4KGgpfXRoaXMucGFzcz1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGcpO3JldHVybn1pZih0eXBlb2YgaCE9XCJvYmplY3RcIil7dGhyb3dcIktKVVIuY3J5cHRvLk1hYyB1bnN1cHBvcnRlZCBwYXNzd29yZCB0eXBlOiBcIitofXZhciBnPW51bGw7aWYoaC5oZXghPT11bmRlZmluZWQpe2lmKGguaGV4Lmxlbmd0aCUyIT0wfHwhaC5oZXgubWF0Y2goL15bMC05QS1GYS1mXSskLykpe3Rocm93XCJNYWM6IHdyb25nIGhleCBwYXNzd29yZDogXCIraC5oZXh9Zz1oLmhleH1pZihoLnV0ZjghPT11bmRlZmluZWQpe2c9dXRmOHRvaGV4KGgudXRmOCl9aWYoaC5yc3RyIT09dW5kZWZpbmVkKXtnPXJzdHJ0b2hleChoLnJzdHIpfWlmKGguYjY0IT09dW5kZWZpbmVkKXtnPWI2NHRvaGV4KGguYjY0KX1pZihoLmI2NHUhPT11bmRlZmluZWQpe2c9YjY0dXRvaGV4KGguYjY0dSl9aWYoZz09bnVsbCl7dGhyb3dcIktKVVIuY3J5cHRvLk1hYyB1bnN1cHBvcnRlZCBwYXNzd29yZCB0eXBlOiBcIitofXRoaXMucGFzcz1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGcpfTtpZihkIT09dW5kZWZpbmVkKXtpZihkLnBhc3MhPT11bmRlZmluZWQpe3RoaXMuc2V0UGFzc3dvcmQoZC5wYXNzKX1pZihkLmFsZyE9PXVuZGVmaW5lZCl7dGhpcy5hbGdOYW1lPWQuYWxnO2lmKGQucHJvdj09PXVuZGVmaW5lZCl7dGhpcy5wcm92TmFtZT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUlt0aGlzLmFsZ05hbWVdfXRoaXMuc2V0QWxnQW5kUHJvdmlkZXIodGhpcy5hbGdOYW1lLHRoaXMucHJvdk5hbWUpfX19O0tKVVIuY3J5cHRvLlNpZ25hdHVyZT1mdW5jdGlvbihvKXt2YXIgcT1udWxsO3ZhciBuPW51bGw7dmFyIHI9bnVsbDt2YXIgYz1udWxsO3ZhciBsPW51bGw7dmFyIGQ9bnVsbDt2YXIgaz1udWxsO3ZhciBoPW51bGw7dmFyIHA9bnVsbDt2YXIgZT1udWxsO3ZhciBiPS0xO3ZhciBnPW51bGw7dmFyIGo9bnVsbDt2YXIgYT1udWxsO3ZhciBpPW51bGw7dmFyIGY9bnVsbDt0aGlzLl9zZXRBbGdOYW1lcz1mdW5jdGlvbigpe3ZhciBzPXRoaXMuYWxnTmFtZS5tYXRjaCgvXiguKyl3aXRoKC4rKSQvKTtpZihzKXt0aGlzLm1kQWxnTmFtZT1zWzFdLnRvTG93ZXJDYXNlKCk7dGhpcy5wdWJrZXlBbGdOYW1lPXNbMl0udG9Mb3dlckNhc2UoKX19O3RoaXMuX3plcm9QYWRkaW5nT2ZTaWduYXR1cmU9ZnVuY3Rpb24oeCx3KXt2YXIgdj1cIlwiO3ZhciB0PXcvNC14Lmxlbmd0aDtmb3IodmFyIHU9MDt1PHQ7dSsrKXt2PXYrXCIwXCJ9cmV0dXJuIHYreH07dGhpcy5zZXRBbGdBbmRQcm92aWRlcj1mdW5jdGlvbih1LHQpe3RoaXMuX3NldEFsZ05hbWVzKCk7aWYodCE9XCJjcnlwdG9qcy9qc3JzYVwiKXt0aHJvd1wicHJvdmlkZXIgbm90IHN1cHBvcnRlZDogXCIrdH1pZihcIjptZDU6c2hhMTpzaGEyMjQ6c2hhMjU2OnNoYTM4NDpzaGE1MTI6cmlwZW1kMTYwOlwiLmluZGV4T2YodGhpcy5tZEFsZ05hbWUpIT0tMSl7dHJ5e3RoaXMubWQ9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzp0aGlzLm1kQWxnTmFtZX0pfWNhdGNoKHMpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBhbGc9XCIrdGhpcy5tZEFsZ05hbWUrXCIvXCIrc310aGlzLmluaXQ9ZnVuY3Rpb24odyx4KXt2YXIgeT1udWxsO3RyeXtpZih4PT09dW5kZWZpbmVkKXt5PUtFWVVUSUwuZ2V0S2V5KHcpfWVsc2V7eT1LRVlVVElMLmdldEtleSh3LHgpfX1jYXRjaCh2KXt0aHJvd1wiaW5pdCBmYWlsZWQ6XCIrdn1pZih5LmlzUHJpdmF0ZT09PXRydWUpe3RoaXMucHJ2S2V5PXk7dGhpcy5zdGF0ZT1cIlNJR05cIn1lbHNle2lmKHkuaXNQdWJsaWM9PT10cnVlKXt0aGlzLnB1YktleT15O3RoaXMuc3RhdGU9XCJWRVJJRllcIn1lbHNle3Rocm93XCJpbml0IGZhaWxlZC46XCIreX19fTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbih2KXt0aGlzLm1kLnVwZGF0ZVN0cmluZyh2KX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24odil7dGhpcy5tZC51cGRhdGVIZXgodil9O3RoaXMuc2lnbj1mdW5jdGlvbigpe3RoaXMuc0hhc2hIZXg9dGhpcy5tZC5kaWdlc3QoKTtpZih0eXBlb2YgdGhpcy5lY3BydmhleCE9XCJ1bmRlZmluZWRcIiYmdHlwZW9mIHRoaXMuZWNjdXJ2ZW5hbWUhPVwidW5kZWZpbmVkXCIpe3ZhciB2PW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6dGhpcy5lY2N1cnZlbmFtZX0pO3RoaXMuaFNpZ249di5zaWduSGV4KHRoaXMuc0hhc2hIZXgsdGhpcy5lY3BydmhleCl9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FhbmRtZ2YxXCIpe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaFBTUyh0aGlzLnNIYXNoSGV4LHRoaXMubWRBbGdOYW1lLHRoaXMucHNzU2FsdExlbil9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FcIil7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdGhpcy5tZEFsZ05hbWUpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSl7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5EU0Epe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4KX1lbHNle3Rocm93XCJTaWduYXR1cmU6IHVuc3VwcG9ydGVkIHByaXZhdGUga2V5IGFsZzogXCIrdGhpcy5wdWJrZXlBbGdOYW1lfX19fX1yZXR1cm4gdGhpcy5oU2lnbn07dGhpcy5zaWduU3RyaW5nPWZ1bmN0aW9uKHYpe3RoaXMudXBkYXRlU3RyaW5nKHYpO3JldHVybiB0aGlzLnNpZ24oKX07dGhpcy5zaWduSGV4PWZ1bmN0aW9uKHYpe3RoaXMudXBkYXRlSGV4KHYpO3JldHVybiB0aGlzLnNpZ24oKX07dGhpcy52ZXJpZnk9ZnVuY3Rpb24odil7dGhpcy5zSGFzaEhleD10aGlzLm1kLmRpZ2VzdCgpO2lmKHR5cGVvZiB0aGlzLmVjcHViaGV4IT1cInVuZGVmaW5lZFwiJiZ0eXBlb2YgdGhpcy5lY2N1cnZlbmFtZSE9XCJ1bmRlZmluZWRcIil7dmFyIHc9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTp0aGlzLmVjY3VydmVuYW1lfSk7cmV0dXJuIHcudmVyaWZ5SGV4KHRoaXMuc0hhc2hIZXgsdix0aGlzLmVjcHViaGV4KX1lbHNle2lmKHRoaXMucHViS2V5IGluc3RhbmNlb2YgUlNBS2V5JiZ0aGlzLnB1YmtleUFsZ05hbWU9PT1cInJzYWFuZG1nZjFcIil7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaFBTUyh0aGlzLnNIYXNoSGV4LHYsdGhpcy5tZEFsZ05hbWUsdGhpcy5wc3NTYWx0TGVuKX1lbHNle2lmKHRoaXMucHViS2V5IGluc3RhbmNlb2YgUlNBS2V5JiZ0aGlzLnB1YmtleUFsZ05hbWU9PT1cInJzYVwiKXtyZXR1cm4gdGhpcy5wdWJLZXkudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdil9ZWxzZXtpZihLSlVSLmNyeXB0by5FQ0RTQSE9PXVuZGVmaW5lZCYmdGhpcy5wdWJLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSl7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4LHYpfWVsc2V7aWYoS0pVUi5jcnlwdG8uRFNBIT09dW5kZWZpbmVkJiZ0aGlzLnB1YktleSBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkRTQSl7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4LHYpfWVsc2V7dGhyb3dcIlNpZ25hdHVyZTogdW5zdXBwb3J0ZWQgcHVibGljIGtleSBhbGc6IFwiK3RoaXMucHVia2V5QWxnTmFtZX19fX19fX19O3RoaXMuaW5pdD1mdW5jdGlvbihzLHQpe3Rocm93XCJpbml0KGtleSwgcGFzcykgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihzKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihzKXt0aHJvd1widXBkYXRlSGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnNpZ249ZnVuY3Rpb24oKXt0aHJvd1wic2lnbigpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5zaWduU3RyaW5nPWZ1bmN0aW9uKHMpe3Rocm93XCJkaWdlc3RTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMuc2lnbkhleD1mdW5jdGlvbihzKXt0aHJvd1wiZGlnZXN0SGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnZlcmlmeT1mdW5jdGlvbihzKXt0aHJvd1widmVyaWZ5KGhTaWdWYWwpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5pbml0UGFyYW1zPW87aWYobyE9PXVuZGVmaW5lZCl7aWYoby5hbGchPT11bmRlZmluZWQpe3RoaXMuYWxnTmFtZT1vLmFsZztpZihvLnByb3Y9PT11bmRlZmluZWQpe3RoaXMucHJvdk5hbWU9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbdGhpcy5hbGdOYW1lXX1lbHNle3RoaXMucHJvdk5hbWU9by5wcm92fXRoaXMuYWxnUHJvdk5hbWU9dGhpcy5hbGdOYW1lK1wiOlwiK3RoaXMucHJvdk5hbWU7dGhpcy5zZXRBbGdBbmRQcm92aWRlcih0aGlzLmFsZ05hbWUsdGhpcy5wcm92TmFtZSk7dGhpcy5fc2V0QWxnTmFtZXMoKX1pZihvLnBzc3NhbHRsZW4hPT11bmRlZmluZWQpe3RoaXMucHNzU2FsdExlbj1vLnBzc3NhbHRsZW59aWYoby5wcnZrZXlwZW0hPT11bmRlZmluZWQpe2lmKG8ucHJ2a2V5cGFzIT09dW5kZWZpbmVkKXt0aHJvd1wiYm90aCBwcnZrZXlwZW0gYW5kIHBydmtleXBhcyBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWRcIn1lbHNle3RyeXt2YXIgcT1LRVlVVElMLmdldEtleShvLnBydmtleXBlbSk7dGhpcy5pbml0KHEpfWNhdGNoKG0pe3Rocm93XCJmYXRhbCBlcnJvciB0byBsb2FkIHBlbSBwcml2YXRlIGtleTogXCIrbX19fX19O0tKVVIuY3J5cHRvLkNpcGhlcj1mdW5jdGlvbihhKXt9O0tKVVIuY3J5cHRvLkNpcGhlci5lbmNyeXB0PWZ1bmN0aW9uKGUsZixkKXtpZihmIGluc3RhbmNlb2YgUlNBS2V5JiZmLmlzUHVibGljKXt2YXIgYz1LSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lKGYsZCk7aWYoYz09PVwiUlNBXCIpe3JldHVybiBmLmVuY3J5cHQoZSl9aWYoYz09PVwiUlNBT0FFUFwiKXtyZXR1cm4gZi5lbmNyeXB0T0FFUChlLFwic2hhMVwiKX12YXIgYj1jLm1hdGNoKC9eUlNBT0FFUChcXGQrKSQvKTtpZihiIT09bnVsbCl7cmV0dXJuIGYuZW5jcnlwdE9BRVAoZSxcInNoYVwiK2JbMV0pfXRocm93XCJDaXBoZXIuZW5jcnlwdDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIGZvciBSU0FLZXk6IFwiK2R9ZWxzZXt0aHJvd1wiQ2lwaGVyLmVuY3J5cHQ6IHVuc3VwcG9ydGVkIGtleSBvciBhbGdvcml0aG1cIn19O0tKVVIuY3J5cHRvLkNpcGhlci5kZWNyeXB0PWZ1bmN0aW9uKGUsZixkKXtpZihmIGluc3RhbmNlb2YgUlNBS2V5JiZmLmlzUHJpdmF0ZSl7dmFyIGM9S0pVUi5jcnlwdG8uQ2lwaGVyLmdldEFsZ0J5S2V5QW5kTmFtZShmLGQpO2lmKGM9PT1cIlJTQVwiKXtyZXR1cm4gZi5kZWNyeXB0KGUpfWlmKGM9PT1cIlJTQU9BRVBcIil7cmV0dXJuIGYuZGVjcnlwdE9BRVAoZSxcInNoYTFcIil9dmFyIGI9Yy5tYXRjaCgvXlJTQU9BRVAoXFxkKykkLyk7aWYoYiE9PW51bGwpe3JldHVybiBmLmRlY3J5cHRPQUVQKGUsXCJzaGFcIitiWzFdKX10aHJvd1wiQ2lwaGVyLmRlY3J5cHQ6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgUlNBS2V5OiBcIitkfWVsc2V7dGhyb3dcIkNpcGhlci5kZWNyeXB0OiB1bnN1cHBvcnRlZCBrZXkgb3IgYWxnb3JpdGhtXCJ9fTtLSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lPWZ1bmN0aW9uKGIsYSl7aWYoYiBpbnN0YW5jZW9mIFJTQUtleSl7aWYoXCI6UlNBOlJTQU9BRVA6UlNBT0FFUDIyNDpSU0FPQUVQMjU2OlJTQU9BRVAzODQ6UlNBT0FFUDUxMjpcIi5pbmRleE9mKGEpIT0tMSl7cmV0dXJuIGF9aWYoYT09PW51bGx8fGE9PT11bmRlZmluZWQpe3JldHVyblwiUlNBXCJ9dGhyb3dcImdldEFsZ0J5S2V5QW5kTmFtZTogbm90IHN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZSBmb3IgUlNBS2V5OiBcIithfXRocm93XCJnZXRBbGdCeUtleUFuZE5hbWU6IG5vdCBzdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWU6IFwiK2F9O0tKVVIuY3J5cHRvLk9JRD1uZXcgZnVuY3Rpb24oKXt0aGlzLm9pZGhleDJuYW1lPXtcIjJhODY0ODg2ZjcwZDAxMDEwMVwiOlwicnNhRW5jcnlwdGlvblwiLFwiMmE4NjQ4Y2UzZDAyMDFcIjpcImVjUHVibGljS2V5XCIsXCIyYTg2NDhjZTM4MDQwMVwiOlwiZHNhXCIsXCIyYTg2NDhjZTNkMDMwMTA3XCI6XCJzZWNwMjU2cjFcIixcIjJiODEwNDAwMWZcIjpcInNlY3AxOTJrMVwiLFwiMmI4MTA0MDAyMVwiOlwic2VjcDIyNHIxXCIsXCIyYjgxMDQwMDBhXCI6XCJzZWNwMjU2azFcIixcIjJiODEwNDAwMjNcIjpcInNlY3A1MjFyMVwiLFwiMmI4MTA0MDAyMlwiOlwic2VjcDM4NHIxXCIsXCIyYTg2NDhjZTM4MDQwM1wiOlwiU0hBMXdpdGhEU0FcIixcIjYwODY0ODAxNjUwMzA0MDMwMVwiOlwiU0hBMjI0d2l0aERTQVwiLFwiNjA4NjQ4MDE2NTAzMDQwMzAyXCI6XCJTSEEyNTZ3aXRoRFNBXCIsfX07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuY3J5cHRvPT1cInVuZGVmaW5lZFwifHwhS0pVUi5jcnlwdG8pe0tKVVIuY3J5cHRvPXt9fUtKVVIuY3J5cHRvLkVDRFNBPWZ1bmN0aW9uKGgpe3ZhciBlPVwic2VjcDI1NnIxXCI7dmFyIGc9bnVsbDt2YXIgYj1udWxsO3ZhciBmPW51bGw7dmFyIGE9bmV3IFNlY3VyZVJhbmRvbSgpO3ZhciBkPW51bGw7dGhpcy50eXBlPVwiRUNcIjt0aGlzLmlzUHJpdmF0ZT1mYWxzZTt0aGlzLmlzUHVibGljPWZhbHNlO2Z1bmN0aW9uIGMocyxvLHIsbil7dmFyIGo9TWF0aC5tYXgoby5iaXRMZW5ndGgoKSxuLmJpdExlbmd0aCgpKTt2YXIgdD1zLmFkZDJEKHIpO3ZhciBxPXMuY3VydmUuZ2V0SW5maW5pdHkoKTtmb3IodmFyIHA9ai0xO3A+PTA7LS1wKXtxPXEudHdpY2UyRCgpO3Euej1CaWdJbnRlZ2VyLk9ORTtpZihvLnRlc3RCaXQocCkpe2lmKG4udGVzdEJpdChwKSl7cT1xLmFkZDJEKHQpfWVsc2V7cT1xLmFkZDJEKHMpfX1lbHNle2lmKG4udGVzdEJpdChwKSl7cT1xLmFkZDJEKHIpfX19cmV0dXJuIHF9dGhpcy5nZXRCaWdSYW5kb209ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGkuYml0TGVuZ3RoKCksYSkubW9kKGkuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKS5hZGQoQmlnSW50ZWdlci5PTkUpfTt0aGlzLnNldE5hbWVkQ3VydmU9ZnVuY3Rpb24oaSl7dGhpcy5lY3BhcmFtcz1LSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLmdldEJ5TmFtZShpKTt0aGlzLnBydktleUhleD1udWxsO3RoaXMucHViS2V5SGV4PW51bGw7dGhpcy5jdXJ2ZU5hbWU9aX07dGhpcy5zZXRQcml2YXRlS2V5SGV4PWZ1bmN0aW9uKGkpe3RoaXMuaXNQcml2YXRlPXRydWU7dGhpcy5wcnZLZXlIZXg9aX07dGhpcy5zZXRQdWJsaWNLZXlIZXg9ZnVuY3Rpb24oaSl7dGhpcy5pc1B1YmxpYz10cnVlO3RoaXMucHViS2V5SGV4PWl9O3RoaXMuZ2V0UHVibGljS2V5WFlIZXg9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLnB1YktleUhleDtpZihrLnN1YnN0cigwLDIpIT09XCIwNFwiKXt0aHJvd1widGhpcyBtZXRob2Qgc3VwcG9ydHMgdW5jb21wcmVzc2VkIGZvcm1hdCgwNCkgb25seVwifXZhciBqPXRoaXMuZWNwYXJhbXMua2V5bGVuLzQ7aWYoay5sZW5ndGghPT0yK2oqMil7dGhyb3dcIm1hbGZvcm1lZCBwdWJsaWMga2V5IGhleCBsZW5ndGhcIn12YXIgaT17fTtpLng9ay5zdWJzdHIoMixqKTtpLnk9ay5zdWJzdHIoMitqKTtyZXR1cm4gaX07dGhpcy5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5jdXJ2ZU5hbWU7aWYoaT09PVwic2VjcDI1NnIxXCJ8fGk9PT1cIk5JU1QgUC0yNTZcInx8aT09PVwiUC0yNTZcInx8aT09PVwicHJpbWUyNTZ2MVwiKXtyZXR1cm5cIlAtMjU2XCJ9aWYoaT09PVwic2VjcDM4NHIxXCJ8fGk9PT1cIk5JU1QgUC0zODRcInx8aT09PVwiUC0zODRcIil7cmV0dXJuXCJQLTM4NFwifXJldHVybiBudWxsfTt0aGlzLmdlbmVyYXRlS2V5UGFpckhleD1mdW5jdGlvbigpe3ZhciBrPXRoaXMuZWNwYXJhbXMubjt2YXIgbj10aGlzLmdldEJpZ1JhbmRvbShrKTt2YXIgbD10aGlzLmVjcGFyYW1zLkcubXVsdGlwbHkobik7dmFyIHE9bC5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIG89bC5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGk9dGhpcy5lY3BhcmFtcy5rZXlsZW4vNDt2YXIgbT0oXCIwMDAwMDAwMDAwXCIrbi50b1N0cmluZygxNikpLnNsaWNlKC1pKTt2YXIgcj0oXCIwMDAwMDAwMDAwXCIrcS50b1N0cmluZygxNikpLnNsaWNlKC1pKTt2YXIgcD0oXCIwMDAwMDAwMDAwXCIrby50b1N0cmluZygxNikpLnNsaWNlKC1pKTt2YXIgaj1cIjA0XCIrcitwO3RoaXMuc2V0UHJpdmF0ZUtleUhleChtKTt0aGlzLnNldFB1YmxpY0tleUhleChqKTtyZXR1cm57ZWNwcnZoZXg6bSxlY3B1YmhleDpqfX07dGhpcy5zaWduV2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLnNpZ25IZXgoaSx0aGlzLnBydktleUhleCl9O3RoaXMuc2lnbkhleD1mdW5jdGlvbihvLGope3ZhciB0PW5ldyBCaWdJbnRlZ2VyKGosMTYpO3ZhciBsPXRoaXMuZWNwYXJhbXMubjt2YXIgcT1uZXcgQmlnSW50ZWdlcihvLDE2KTtkb3t2YXIgbT10aGlzLmdldEJpZ1JhbmRvbShsKTt2YXIgdT10aGlzLmVjcGFyYW1zLkc7dmFyIHA9dS5tdWx0aXBseShtKTt2YXIgaT1wLmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2QobCl9d2hpbGUoaS5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKTw9MCk7dmFyIHY9bS5tb2RJbnZlcnNlKGwpLm11bHRpcGx5KHEuYWRkKHQubXVsdGlwbHkoaSkpKS5tb2QobCk7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmJpUlNTaWdUb0FTTjFTaWcoaSx2KX07dGhpcy5zaWduPWZ1bmN0aW9uKG0sdSl7dmFyIHE9dTt2YXIgaj10aGlzLmVjcGFyYW1zLm47dmFyIHA9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobSk7ZG97dmFyIGw9dGhpcy5nZXRCaWdSYW5kb20oaik7dmFyIHQ9dGhpcy5lY3BhcmFtcy5HO3ZhciBvPXQubXVsdGlwbHkobCk7dmFyIGk9by5nZXRYKCkudG9CaWdJbnRlZ2VyKCkubW9kKGopfXdoaWxlKGkuY29tcGFyZVRvKEJpZ0ludGVnZXIuWkVSTyk8PTApO3ZhciB2PWwubW9kSW52ZXJzZShqKS5tdWx0aXBseShwLmFkZChxLm11bHRpcGx5KGkpKSkubW9kKGopO3JldHVybiB0aGlzLnNlcmlhbGl6ZVNpZyhpLHYpfTt0aGlzLnZlcmlmeVdpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihqLGkpe3JldHVybiB0aGlzLnZlcmlmeUhleChqLGksdGhpcy5wdWJLZXlIZXgpfTt0aGlzLnZlcmlmeUhleD1mdW5jdGlvbihtLGkscCl7dmFyIGwsajt2YXIgbz1LSlVSLmNyeXB0by5FQ0RTQS5wYXJzZVNpZ0hleChpKTtsPW8ucjtqPW8uczt2YXIgaztrPUVDUG9pbnRGcC5kZWNvZGVGcm9tSGV4KHRoaXMuZWNwYXJhbXMuY3VydmUscCk7dmFyIG49bmV3IEJpZ0ludGVnZXIobSwxNik7cmV0dXJuIHRoaXMudmVyaWZ5UmF3KG4sbCxqLGspfTt0aGlzLnZlcmlmeT1mdW5jdGlvbihvLHAsail7dmFyIGwsaTtpZihCaXRjb2luLlV0aWwuaXNBcnJheShwKSl7dmFyIG49dGhpcy5wYXJzZVNpZyhwKTtsPW4ucjtpPW4uc31lbHNle2lmKFwib2JqZWN0XCI9PT10eXBlb2YgcCYmcC5yJiZwLnMpe2w9cC5yO2k9cC5zfWVsc2V7dGhyb3dcIkludmFsaWQgdmFsdWUgZm9yIHNpZ25hdHVyZVwifX12YXIgaztpZihqIGluc3RhbmNlb2YgRUNQb2ludEZwKXtrPWp9ZWxzZXtpZihCaXRjb2luLlV0aWwuaXNBcnJheShqKSl7az1FQ1BvaW50RnAuZGVjb2RlRnJvbSh0aGlzLmVjcGFyYW1zLmN1cnZlLGopfWVsc2V7dGhyb3dcIkludmFsaWQgZm9ybWF0IGZvciBwdWJrZXkgdmFsdWUsIG11c3QgYmUgYnl0ZSBhcnJheSBvciBFQ1BvaW50RnBcIn19dmFyIG09QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobyk7cmV0dXJuIHRoaXMudmVyaWZ5UmF3KG0sbCxpLGspfTt0aGlzLnZlcmlmeVJhdz1mdW5jdGlvbihvLGksdyxtKXt2YXIgbD10aGlzLmVjcGFyYW1zLm47dmFyIHU9dGhpcy5lY3BhcmFtcy5HO2lmKGkuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHxpLmNvbXBhcmVUbyhsKT49MCl7cmV0dXJuIGZhbHNlfWlmKHcuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHx3LmNvbXBhcmVUbyhsKT49MCl7cmV0dXJuIGZhbHNlfXZhciBwPXcubW9kSW52ZXJzZShsKTt2YXIgaz1vLm11bHRpcGx5KHApLm1vZChsKTt2YXIgaj1pLm11bHRpcGx5KHApLm1vZChsKTt2YXIgcT11Lm11bHRpcGx5KGspLmFkZChtLm11bHRpcGx5KGopKTt2YXIgdD1xLmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2QobCk7cmV0dXJuIHQuZXF1YWxzKGkpfTt0aGlzLnNlcmlhbGl6ZVNpZz1mdW5jdGlvbihrLGope3ZhciBsPWsudG9CeXRlQXJyYXlTaWduZWQoKTt2YXIgaT1qLnRvQnl0ZUFycmF5U2lnbmVkKCk7dmFyIG09W107bS5wdXNoKDIpO20ucHVzaChsLmxlbmd0aCk7bT1tLmNvbmNhdChsKTttLnB1c2goMik7bS5wdXNoKGkubGVuZ3RoKTttPW0uY29uY2F0KGkpO20udW5zaGlmdChtLmxlbmd0aCk7bS51bnNoaWZ0KDQ4KTtyZXR1cm4gbX07dGhpcy5wYXJzZVNpZz1mdW5jdGlvbihuKXt2YXIgbTtpZihuWzBdIT00OCl7dGhyb3cgbmV3IEVycm9yKFwiU2lnbmF0dXJlIG5vdCBhIHZhbGlkIERFUlNlcXVlbmNlXCIpfW09MjtpZihuW21dIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJGaXJzdCBlbGVtZW50IGluIHNpZ25hdHVyZSBtdXN0IGJlIGEgREVSSW50ZWdlclwiKX12YXIgbD1uLnNsaWNlKG0rMixtKzIrblttKzFdKTttKz0yK25bbSsxXTtpZihuW21dIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJTZWNvbmQgZWxlbWVudCBpbiBzaWduYXR1cmUgbXVzdCBiZSBhIERFUkludGVnZXJcIil9dmFyIGk9bi5zbGljZShtKzIsbSsyK25bbSsxXSk7bSs9MituW20rMV07dmFyIGs9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobCk7dmFyIGo9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQoaSk7cmV0dXJue3I6ayxzOmp9fTt0aGlzLnBhcnNlU2lnQ29tcGFjdD1mdW5jdGlvbihtKXtpZihtLmxlbmd0aCE9PTY1KXt0aHJvd1wiU2lnbmF0dXJlIGhhcyB0aGUgd3JvbmcgbGVuZ3RoXCJ9dmFyIGo9bVswXS0yNztpZihqPDB8fGo+Nyl7dGhyb3dcIkludmFsaWQgc2lnbmF0dXJlIHR5cGVcIn12YXIgbz10aGlzLmVjcGFyYW1zLm47dmFyIGw9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobS5zbGljZSgxLDMzKSkubW9kKG8pO3ZhciBrPUJpZ0ludGVnZXIuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKG0uc2xpY2UoMzMsNjUpKS5tb2Qobyk7cmV0dXJue3I6bCxzOmssaTpqfX07dGhpcy5yZWFkUEtDUzVQcnZLZXlIZXg9ZnVuY3Rpb24obCl7dmFyIG49QVNOMUhFWDt2YXIgbT1LSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lO3ZhciBwPW4uZ2V0VmJ5TGlzdDtpZihuLmlzQVNOMUhFWChsKT09PWZhbHNlKXt0aHJvd1wibm90IEFTTi4xIGhleCBzdHJpbmdcIn12YXIgaSxrLG87dHJ5e2k9cChsLDAsWzIsMF0sXCIwNlwiKTtrPXAobCwwLFsxXSxcIjA0XCIpO3RyeXtvPXAobCwwLFszLDBdLFwiMDNcIikuc3Vic3RyKDIpfWNhdGNoKGope319Y2F0Y2goail7dGhyb3dcIm1hbGZvcm1lZCBQS0NTIzEvNSBwbGFpbiBFQ0MgcHJpdmF0ZSBrZXlcIn10aGlzLmN1cnZlTmFtZT1tKGkpO2lmKHRoaXMuY3VydmVOYW1lPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgobyk7dGhpcy5zZXRQcml2YXRlS2V5SGV4KGspO3RoaXMuaXNQdWJsaWM9ZmFsc2V9O3RoaXMucmVhZFBLQ1M4UHJ2S2V5SGV4PWZ1bmN0aW9uKGwpe3ZhciBxPUFTTjFIRVg7dmFyIGk9S0pVUi5jcnlwdG8uRUNEU0EuZ2V0TmFtZTt2YXIgbj1xLmdldFZieUxpc3Q7aWYocS5pc0FTTjFIRVgobCk9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dmFyIGoscCxtLGs7dHJ5e2o9bihsLDAsWzEsMF0sXCIwNlwiKTtwPW4obCwwLFsxLDFdLFwiMDZcIik7bT1uKGwsMCxbMiwwLDFdLFwiMDRcIik7dHJ5e2s9bihsLDAsWzIsMCwyLDBdLFwiMDNcIikuc3Vic3RyKDIpfWNhdGNoKG8pe319Y2F0Y2gobyl7dGhyb3dcIm1hbGZvcm1lZCBQS0NTIzggcGxhaW4gRUNDIHByaXZhdGUga2V5XCJ9dGhpcy5jdXJ2ZU5hbWU9aShwKTtpZih0aGlzLmN1cnZlTmFtZT09PXVuZGVmaW5lZCl7dGhyb3dcInVuc3VwcG9ydGVkIGN1cnZlIG5hbWVcIn10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO3RoaXMuc2V0UHVibGljS2V5SGV4KGspO3RoaXMuc2V0UHJpdmF0ZUtleUhleChtKTt0aGlzLmlzUHVibGljPWZhbHNlfTt0aGlzLnJlYWRQS0NTOFB1YktleUhleD1mdW5jdGlvbihsKXt2YXIgbj1BU04xSEVYO3ZhciBtPUtKVVIuY3J5cHRvLkVDRFNBLmdldE5hbWU7dmFyIHA9bi5nZXRWYnlMaXN0O2lmKG4uaXNBU04xSEVYKGwpPT09ZmFsc2Upe3Rocm93XCJub3QgQVNOLjEgaGV4IHN0cmluZ1wifXZhciBrLGksbzt0cnl7az1wKGwsMCxbMCwwXSxcIjA2XCIpO2k9cChsLDAsWzAsMV0sXCIwNlwiKTtvPXAobCwwLFsxXSxcIjAzXCIpLnN1YnN0cigyKX1jYXRjaChqKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1MjOCBFQ0MgcHVibGljIGtleVwifXRoaXMuY3VydmVOYW1lPW0oaSk7aWYodGhpcy5jdXJ2ZU5hbWU9PT1udWxsKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgobyl9O3RoaXMucmVhZENlcnRQdWJLZXlIZXg9ZnVuY3Rpb24oayxwKXtpZihwIT09NSl7cD02fXZhciBtPUFTTjFIRVg7dmFyIGw9S0pVUi5jcnlwdG8uRUNEU0EuZ2V0TmFtZTt2YXIgbz1tLmdldFZieUxpc3Q7aWYobS5pc0FTTjFIRVgoayk9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dmFyIGksbjt0cnl7aT1vKGssMCxbMCxwLDAsMV0sXCIwNlwiKTtuPW8oaywwLFswLHAsMV0sXCIwM1wiKS5zdWJzdHIoMil9Y2F0Y2goail7dGhyb3dcIm1hbGZvcm1lZCBYLjUwOSBjZXJ0aWZpY2F0ZSBFQ0MgcHVibGljIGtleVwifXRoaXMuY3VydmVOYW1lPWwoaSk7aWYodGhpcy5jdXJ2ZU5hbWU9PT1udWxsKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgobil9O2lmKGghPT11bmRlZmluZWQpe2lmKGguY3VydmUhPT11bmRlZmluZWQpe3RoaXMuY3VydmVOYW1lPWguY3VydmV9fWlmKHRoaXMuY3VydmVOYW1lPT09dW5kZWZpbmVkKXt0aGlzLmN1cnZlTmFtZT1lfXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7aWYoaCE9PXVuZGVmaW5lZCl7aWYoaC5wcnYhPT11bmRlZmluZWQpe3RoaXMuc2V0UHJpdmF0ZUtleUhleChoLnBydil9aWYoaC5wdWIhPT11bmRlZmluZWQpe3RoaXMuc2V0UHVibGljS2V5SGV4KGgucHViKX19fTtLSlVSLmNyeXB0by5FQ0RTQS5wYXJzZVNpZ0hleD1mdW5jdGlvbihhKXt2YXIgYj1LSlVSLmNyeXB0by5FQ0RTQS5wYXJzZVNpZ0hleEluSGV4UlMoYSk7dmFyIGQ9bmV3IEJpZ0ludGVnZXIoYi5yLDE2KTt2YXIgYz1uZXcgQmlnSW50ZWdlcihiLnMsMTYpO3JldHVybntyOmQsczpjfX07S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXhJbkhleFJTPWZ1bmN0aW9uKGYpe3ZhciBqPUFTTjFIRVg7dmFyIGk9ai5nZXRDaGlsZElkeDt2YXIgZz1qLmdldFY7aWYoZi5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvd1wic2lnbmF0dXJlIGlzIG5vdCBhIEFTTi4xIHNlcXVlbmNlXCJ9dmFyIGg9aShmLDApO2lmKGgubGVuZ3RoIT0yKXt0aHJvd1wibnVtYmVyIG9mIHNpZ25hdHVyZSBBU04uMSBzZXF1ZW5jZSBlbGVtZW50cyBzZWVtIHdyb25nXCJ9dmFyIGU9aFswXTt2YXIgZD1oWzFdO2lmKGYuc3Vic3RyKGUsMikhPVwiMDJcIil7dGhyb3dcIjFzdCBpdGVtIG9mIHNlcXVlbmUgb2Ygc2lnbmF0dXJlIGlzIG5vdCBBU04uMSBpbnRlZ2VyXCJ9aWYoZi5zdWJzdHIoZCwyKSE9XCIwMlwiKXt0aHJvd1wiMm5kIGl0ZW0gb2Ygc2VxdWVuZSBvZiBzaWduYXR1cmUgaXMgbm90IEFTTi4xIGludGVnZXJcIn12YXIgYz1nKGYsZSk7dmFyIGI9ZyhmLGQpO3JldHVybntyOmMsczpifX07S0pVUi5jcnlwdG8uRUNEU0EuYXNuMVNpZ1RvQ29uY2F0U2lnPWZ1bmN0aW9uKGMpe3ZhciBkPUtKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4SW5IZXhSUyhjKTt2YXIgYj1kLnI7dmFyIGE9ZC5zO2lmKGIuc3Vic3RyKDAsMik9PVwiMDBcIiYmKGIubGVuZ3RoJTMyKT09Mil7Yj1iLnN1YnN0cigyKX1pZihhLnN1YnN0cigwLDIpPT1cIjAwXCImJihhLmxlbmd0aCUzMik9PTIpe2E9YS5zdWJzdHIoMil9aWYoKGIubGVuZ3RoJTMyKT09MzApe2I9XCIwMFwiK2J9aWYoKGEubGVuZ3RoJTMyKT09MzApe2E9XCIwMFwiK2F9aWYoYi5sZW5ndGglMzIhPTApe3Rocm93XCJ1bmtub3duIEVDRFNBIHNpZyByIGxlbmd0aCBlcnJvclwifWlmKGEubGVuZ3RoJTMyIT0wKXt0aHJvd1widW5rbm93biBFQ0RTQSBzaWcgcyBsZW5ndGggZXJyb3JcIn1yZXR1cm4gYithfTtLSlVSLmNyeXB0by5FQ0RTQS5jb25jYXRTaWdUb0FTTjFTaWc9ZnVuY3Rpb24oYSl7aWYoKCgoYS5sZW5ndGgvMikqOCklKDE2KjgpKSE9MCl7dGhyb3dcInVua25vd24gRUNEU0EgY29uY2F0aW5hdGVkIHItcyBzaWcgIGxlbmd0aCBlcnJvclwifXZhciBjPWEuc3Vic3RyKDAsYS5sZW5ndGgvMik7dmFyIGI9YS5zdWJzdHIoYS5sZW5ndGgvMik7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmhleFJTU2lnVG9BU04xU2lnKGMsYil9O0tKVVIuY3J5cHRvLkVDRFNBLmhleFJTU2lnVG9BU04xU2lnPWZ1bmN0aW9uKGIsYSl7dmFyIGQ9bmV3IEJpZ0ludGVnZXIoYiwxNik7dmFyIGM9bmV3IEJpZ0ludGVnZXIoYSwxNik7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmJpUlNTaWdUb0FTTjFTaWcoZCxjKX07S0pVUi5jcnlwdG8uRUNEU0EuYmlSU1NpZ1RvQVNOMVNpZz1mdW5jdGlvbihmLGQpe3ZhciBjPUtKVVIuYXNuMTt2YXIgYj1uZXcgYy5ERVJJbnRlZ2VyKHtiaWdpbnQ6Zn0pO3ZhciBhPW5ldyBjLkRFUkludGVnZXIoe2JpZ2ludDpkfSk7dmFyIGU9bmV3IGMuREVSU2VxdWVuY2Uoe2FycmF5OltiLGFdfSk7cmV0dXJuIGUuZ2V0RW5jb2RlZEhleCgpfTtLSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lPWZ1bmN0aW9uKGEpe2lmKGE9PT1cIjJhODY0OGNlM2QwMzAxMDdcIil7cmV0dXJuXCJzZWNwMjU2cjFcIn1pZihhPT09XCIyYjgxMDQwMDBhXCIpe3JldHVyblwic2VjcDI1NmsxXCJ9aWYoYT09PVwiMmI4MTA0MDAyMlwiKXtyZXR1cm5cInNlY3AzODRyMVwifWlmKFwifHNlY3AyNTZyMXxOSVNUIFAtMjU2fFAtMjU2fHByaW1lMjU2djF8XCIuaW5kZXhPZihhKSE9PS0xKXtyZXR1cm5cInNlY3AyNTZyMVwifWlmKFwifHNlY3AyNTZrMXxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDI1NmsxXCJ9aWYoXCJ8c2VjcDM4NHIxfE5JU1QgUC0zODR8UC0zODR8XCIuaW5kZXhPZihhKSE9PS0xKXtyZXR1cm5cInNlY3AzODRyMVwifXJldHVybiBudWxsfTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5jcnlwdG89PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmNyeXB0byl7S0pVUi5jcnlwdG89e319S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQj1uZXcgZnVuY3Rpb24oKXt2YXIgYj17fTt2YXIgYz17fTtmdW5jdGlvbiBhKGQpe3JldHVybiBuZXcgQmlnSW50ZWdlcihkLDE2KX10aGlzLmdldEJ5TmFtZT1mdW5jdGlvbihlKXt2YXIgZD1lO2lmKHR5cGVvZiBjW2RdIT1cInVuZGVmaW5lZFwiKXtkPWNbZV19aWYodHlwZW9mIGJbZF0hPVwidW5kZWZpbmVkXCIpe3JldHVybiBiW2RdfXRocm93XCJ1bnJlZ2lzdGVyZWQgRUMgY3VydmUgbmFtZTogXCIrZH07dGhpcy5yZWdpc3Q9ZnVuY3Rpb24oQSxsLG8sZyxtLGUsaixmLGssdSxkLHgpe2JbQV09e307dmFyIHM9YShvKTt2YXIgej1hKGcpO3ZhciB5PWEobSk7dmFyIHQ9YShlKTt2YXIgdz1hKGopO3ZhciByPW5ldyBFQ0N1cnZlRnAocyx6LHkpO3ZhciBxPXIuZGVjb2RlUG9pbnRIZXgoXCIwNFwiK2Yrayk7YltBXVtcIm5hbWVcIl09QTtiW0FdW1wia2V5bGVuXCJdPWw7YltBXVtcImN1cnZlXCJdPXI7YltBXVtcIkdcIl09cTtiW0FdW1wiblwiXT10O2JbQV1bXCJoXCJdPXc7YltBXVtcIm9pZFwiXT1kO2JbQV1bXCJpbmZvXCJdPXg7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe2NbdVt2XV09QX19fTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxMjhyMVwiLDEyOCxcIkZGRkZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiRTg3NTc5QzExMDc5RjQzREQ4MjQ5OTNDMkNFRTVFRDNcIixcIkZGRkZGRkZFMDAwMDAwMDA3NUEzMEQxQjkwMzhBMTE1XCIsXCIxXCIsXCIxNjFGRjc1MjhCODk5QjJEMEMyODYwN0NBNTJDNUI4NlwiLFwiQ0Y1QUM4Mzk1QkFGRUIxM0MwMkRBMjkyRERFRDdBODNcIixbXSxcIlwiLFwic2VjcDEyOHIxIDogU0VDRyBjdXJ2ZSBvdmVyIGEgMTI4IGJpdCBwcmltZSBmaWVsZFwiKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxNjBrMVwiLDE2MCxcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkFDNzNcIixcIjBcIixcIjdcIixcIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDFCOEZBMTZERkFCOUFDQTE2QjZCM1wiLFwiMVwiLFwiM0I0QzM4MkNFMzdBQTE5MkE0MDE5RTc2MzAzNkY0RjVERDREN0VCQlwiLFwiOTM4Q0Y5MzUzMThGRENFRDZCQzI4Mjg2NTMxNzMzQzNGMDNDNEZFRVwiLFtdLFwiXCIsXCJzZWNwMTYwazEgOiBTRUNHIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkXCIpO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDE2MHIxXCIsMTYwLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGQ1wiLFwiMUM5N0JFRkM1NEJEN0E4QjY1QUNGODlGODFENEQ0QURDNTY1RkE0NVwiLFwiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMUY0QzhGOTI3QUVEM0NBNzUyMjU3XCIsXCIxXCIsXCI0QTk2QjU2ODhFRjU3MzI4NDY2NDY5ODk2OEMzOEJCOTEzQ0JGQzgyXCIsXCIyM0E2Mjg1NTMxNjg5NDdENTlEQ0M5MTIwNDIzNTEzNzdBQzVGQjMyXCIsW10sXCJcIixcInNlY3AxNjByMSA6IFNFQ0cgY3VydmUgb3ZlciBhIDE2MCBiaXQgcHJpbWUgZmllbGRcIik7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTkyazFcIiwxOTIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkVFMzdcIixcIjBcIixcIjNcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTI2RjJGQzE3MEY2OTQ2NkE3NERFRkQ4RFwiLFwiMVwiLFwiREI0RkYxMEVDMDU3RTlBRTI2QjA3RDAyODBCN0Y0MzQxREE1RDFCMUVBRTA2QzdEXCIsXCI5QjJGMkY2RDlDNTYyOEE3ODQ0MTYzRDAxNUJFODYzNDQwODJBQTg4RDk1RTJGOURcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTkycjFcIiwxOTIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGQ1wiLFwiNjQyMTA1MTlFNTlDODBFNzBGQTdFOUFCNzIyNDMwNDlGRUI4REVFQ0MxNDZCOUIxXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5OURFRjgzNjE0NkJDOUIxQjREMjI4MzFcIixcIjFcIixcIjE4OERBODBFQjAzMDkwRjY3Q0JGMjBFQjQzQTE4ODAwRjRGRjBBRkQ4MkZGMTAxMlwiLFwiMDcxOTJCOTVGRkM4REE3ODYzMTAxMUVENkIyNENERDU3M0Y5NzdBMTFFNzk0ODExXCIsW10pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDIyNHIxXCIsMjI0LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFXCIsXCJCNDA1MEE4NTBDMDRCM0FCRjU0MTMyNTY1MDQ0QjBCN0Q3QkZEOEJBMjcwQjM5NDMyMzU1RkZCNFwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE2QTJFMEI4RjAzRTEzREQyOTQ1NUM1QzJBM0RcIixcIjFcIixcIkI3MEUwQ0JENkJCNEJGN0YzMjEzOTBCOTRBMDNDMUQzNTZDMjExMjIzNDMyODBENjExNUMxRDIxXCIsXCJCRDM3NjM4OEI1RjcyM0ZCNEMyMkRGRTZDRDQzNzVBMDVBMDc0NzY0NDRENTgxOTk4NTAwN0UzNFwiLFtdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AyNTZrMVwiLDI1NixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZDMkZcIixcIjBcIixcIjdcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDFcIixcIjFcIixcIjc5QkU2NjdFRjlEQ0JCQUM1NUEwNjI5NUNFODcwQjA3MDI5QkZDREIyRENFMjhEOTU5RjI4MTVCMTZGODE3OThcIixcIjQ4M0FEQTc3MjZBM0M0NjU1REE0RkJGQzBFMTEwOEE4RkQxN0I0NDhBNjg1NTQxOTlDNDdEMDhGRkIxMEQ0QjhcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMjU2cjFcIiwyNTYsXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDXCIsXCI1QUM2MzVEOEFBM0E5M0U3QjNFQkJENTU3Njk4ODZCQzY1MUQwNkIwQ0M1M0IwRjYzQkNFM0MzRTI3RDI2MDRCXCIsXCJGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkJDRTZGQUFEQTcxNzlFODRGM0I5Q0FDMkZDNjMyNTUxXCIsXCIxXCIsXCI2QjE3RDFGMkUxMkM0MjQ3RjhCQ0U2RTU2M0E0NDBGMjc3MDM3RDgxMkRFQjMzQTBGNEExMzk0NUQ4OThDMjk2XCIsXCI0RkUzNDJFMkZFMUE3RjlCOEVFN0VCNEE3QzBGOUUxNjJCQ0UzMzU3NkIzMTVFQ0VDQkI2NDA2ODM3QkY1MUY1XCIsW1wiTklTVCBQLTI1NlwiLFwiUC0yNTZcIixcInByaW1lMjU2djFcIl0pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDM4NHIxXCIsMzg0LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkNcIixcIkIzMzEyRkE3RTIzRUU3RTQ5ODhFMDU2QkUzRjgyRDE5MTgxRDlDNkVGRTgxNDExMjAzMTQwODhGNTAxMzg3NUFDNjU2Mzk4RDhBMkVEMTlEMkE4NUM4RUREM0VDMkFFRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzc2MzREODFGNDM3MkRERjU4MUEwREIyNDhCMEE3N0FFQ0VDMTk2QUNDQzUyOTczXCIsXCIxXCIsXCJBQTg3Q0EyMkJFOEIwNTM3OEVCMUM3MUVGMzIwQUQ3NDZFMUQzQjYyOEJBNzlCOTg1OUY3NDFFMDgyNTQyQTM4NTUwMkYyNURCRjU1Mjk2QzNBNTQ1RTM4NzI3NjBBQjdcIixcIjM2MTdkZTRhOTYyNjJjNmY1ZDllOThiZjkyOTJkYzI5ZjhmNDFkYmQyODlhMTQ3Y2U5ZGEzMTEzYjVmMGI4YzAwYTYwYjFjZTFkN2U4MTlkN2E0MzFkN2M5MGVhMGU1ZlwiLFtcIk5JU1QgUC0zODRcIixcIlAtMzg0XCJdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3A1MjFyMVwiLDUyMSxcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiMDUxOTUzRUI5NjE4RTFDOUExRjkyOUEyMUEwQjY4NTQwRUVBMkRBNzI1Qjk5QjMxNUYzQjhCNDg5OTE4RUYxMDlFMTU2MTkzOTUxRUM3RTkzN0IxNjUyQzBCRDNCQjFCRjA3MzU3M0RGODgzRDJDMzRGMUVGNDUxRkQ0NkI1MDNGMDBcIixcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE1MTg2ODc4M0JGMkY5NjZCN0ZDQzAxNDhGNzA5QTVEMDNCQjVDOUI4ODk5QzQ3QUVCQjZGQjcxRTkxMzg2NDA5XCIsXCIxXCIsXCJDNjg1OEUwNkI3MDQwNEU5Q0Q5RTNFQ0I2NjIzOTVCNDQyOUM2NDgxMzkwNTNGQjUyMUY4MjhBRjYwNkI0RDNEQkFBMTRCNUU3N0VGRTc1OTI4RkUxREMxMjdBMkZGQThERTMzNDhCM0MxODU2QTQyOUJGOTdFN0UzMUMyRTVCRDY2XCIsXCIwMTE4MzkyOTZhNzg5YTNiYzAwNDVjOGE1ZmI0MmM3ZDFiZDk5OGY1NDQ0OTU3OWI0NDY4MTdhZmJkMTcyNzNlNjYyYzk3ZWU3Mjk5NWVmNDI2NDBjNTUwYjkwMTNmYWQwNzYxMzUzYzcwODZhMjcyYzI0MDg4YmU5NDc2OWZkMTY2NTBcIixbXCJOSVNUIFAtNTIxXCIsXCJQLTUyMVwiXSk7XG52YXIgS0VZVVRJTD1mdW5jdGlvbigpe3ZhciBkPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gayhDcnlwdG9KUy5BRVMscCxyLHEpfTt2YXIgZT1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGsoQ3J5cHRvSlMuVHJpcGxlREVTLHAscixxKX07dmFyIGE9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBrKENyeXB0b0pTLkRFUyxwLHIscSl9O3ZhciBrPWZ1bmN0aW9uKHMseCx1LHEpe3ZhciByPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoeCk7dmFyIHc9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1KTt2YXIgcD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHEpO3ZhciB0PXt9O3Qua2V5PXc7dC5pdj1wO3QuY2lwaGVydGV4dD1yO3ZhciB2PXMuZGVjcnlwdCh0LHcse2l2OnB9KTtyZXR1cm4gQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodil9O3ZhciBsPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gZyhDcnlwdG9KUy5BRVMscCxyLHEpfTt2YXIgbz1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGcoQ3J5cHRvSlMuVHJpcGxlREVTLHAscixxKX07dmFyIGY9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBnKENyeXB0b0pTLkRFUyxwLHIscSl9O3ZhciBnPWZ1bmN0aW9uKHQseSx2LHEpe3ZhciBzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoeSk7dmFyIHg9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh2KTt2YXIgcD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHEpO3ZhciB3PXQuZW5jcnlwdChzLHgse2l2OnB9KTt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHcudG9TdHJpbmcoKSk7dmFyIHU9Q3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkocik7cmV0dXJuIHV9O3ZhciBpPXtcIkFFUy0yNTYtQ0JDXCI6e3Byb2M6ZCxlcHJvYzpsLGtleWxlbjozMixpdmxlbjoxNn0sXCJBRVMtMTkyLUNCQ1wiOntwcm9jOmQsZXByb2M6bCxrZXlsZW46MjQsaXZsZW46MTZ9LFwiQUVTLTEyOC1DQkNcIjp7cHJvYzpkLGVwcm9jOmwsa2V5bGVuOjE2LGl2bGVuOjE2fSxcIkRFUy1FREUzLUNCQ1wiOntwcm9jOmUsZXByb2M6byxrZXlsZW46MjQsaXZsZW46OH0sXCJERVMtQ0JDXCI6e3Byb2M6YSxlcHJvYzpmLGtleWxlbjo4LGl2bGVuOjh9fTt2YXIgYz1mdW5jdGlvbihwKXtyZXR1cm4gaVtwXVtcInByb2NcIl19O3ZhciBtPWZ1bmN0aW9uKHApe3ZhciByPUNyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKHApO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHIpO3JldHVybiBxfTt2YXIgbj1mdW5jdGlvbih2KXt2YXIgdz17fTt2YXIgcT12Lm1hdGNoKG5ldyBSZWdFeHAoXCJERUstSW5mbzogKFteLF0rKSwoWzAtOUEtRmEtZl0rKVwiLFwibVwiKSk7aWYocSl7dy5jaXBoZXI9cVsxXTt3Lml2c2FsdD1xWzJdfXZhciBwPXYubWF0Y2gobmV3IFJlZ0V4cChcIi0tLS0tQkVHSU4gKFtBLVpdKykgUFJJVkFURSBLRVktLS0tLVwiKSk7aWYocCl7dy50eXBlPXBbMV19dmFyIHU9LTE7dmFyIHg9MDtpZih2LmluZGV4T2YoXCJcXHJcXG5cXHJcXG5cIikhPS0xKXt1PXYuaW5kZXhPZihcIlxcclxcblxcclxcblwiKTt4PTJ9aWYodi5pbmRleE9mKFwiXFxuXFxuXCIpIT0tMSl7dT12LmluZGV4T2YoXCJcXG5cXG5cIik7eD0xfXZhciB0PXYuaW5kZXhPZihcIi0tLS0tRU5EXCIpO2lmKHUhPS0xJiZ0IT0tMSl7dmFyIHI9di5zdWJzdHJpbmcodSt4KjIsdC14KTtyPXIucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3cuZGF0YT1yfXJldHVybiB3fTt2YXIgaj1mdW5jdGlvbihxLHkscCl7dmFyIHY9cC5zdWJzdHJpbmcoMCwxNik7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh2KTt2YXIgcj1DcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh5KTt2YXIgdT1pW3FdW1wia2V5bGVuXCJdK2lbcV1bXCJpdmxlblwiXTt2YXIgeD1cIlwiO3ZhciB3PW51bGw7Zm9yKDs7KXt2YXIgcz1DcnlwdG9KUy5hbGdvLk1ENS5jcmVhdGUoKTtpZih3IT1udWxsKXtzLnVwZGF0ZSh3KX1zLnVwZGF0ZShyKTtzLnVwZGF0ZSh0KTt3PXMuZmluYWxpemUoKTt4PXgrQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodyk7aWYoeC5sZW5ndGg+PXUqMil7YnJlYWt9fXZhciB6PXt9O3oua2V5aGV4PXguc3Vic3RyKDAsaVtxXVtcImtleWxlblwiXSoyKTt6Lml2aGV4PXguc3Vic3RyKGlbcV1bXCJrZXlsZW5cIl0qMixpW3FdW1wiaXZsZW5cIl0qMik7cmV0dXJuIHp9O3ZhciBiPWZ1bmN0aW9uKHAsdixyLHcpe3ZhciBzPUNyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UocCk7dmFyIHE9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkocyk7dmFyIHU9aVt2XVtcInByb2NcIl07dmFyIHQ9dShxLHIsdyk7cmV0dXJuIHR9O3ZhciBoPWZ1bmN0aW9uKHAscyxxLHUpe3ZhciByPWlbc11bXCJlcHJvY1wiXTt2YXIgdD1yKHAscSx1KTtyZXR1cm4gdH07cmV0dXJue3ZlcnNpb246XCIxLjAuMFwiLHBhcnNlUEtDUzVQRU06ZnVuY3Rpb24ocCl7cmV0dXJuIG4ocCl9LGdldEtleUFuZFVudXNlZEl2QnlQYXNzY29kZUFuZEl2c2FsdDpmdW5jdGlvbihxLHAscil7cmV0dXJuIGoocSxwLHIpfSxkZWNyeXB0S2V5QjY0OmZ1bmN0aW9uKHAscixxLHMpe3JldHVybiBiKHAscixxLHMpfSxnZXREZWNyeXB0ZWRLZXlIZXg6ZnVuY3Rpb24oeSx4KXt2YXIgcT1uKHkpO3ZhciB0PXEudHlwZTt2YXIgcj1xLmNpcGhlcjt2YXIgcD1xLml2c2FsdDt2YXIgcz1xLmRhdGE7dmFyIHc9aihyLHgscCk7dmFyIHY9dy5rZXloZXg7dmFyIHU9YihzLHIsdixwKTtyZXR1cm4gdX0sZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4OmZ1bmN0aW9uKHgscyxBLHQscil7dmFyIHA9XCJcIjtpZih0eXBlb2YgdD09XCJ1bmRlZmluZWRcInx8dD09bnVsbCl7dD1cIkFFUy0yNTYtQ0JDXCJ9aWYodHlwZW9mIGlbdF09PVwidW5kZWZpbmVkXCIpe3Rocm93XCJLRVlVVElMIHVuc3VwcG9ydGVkIGFsZ29yaXRobTogXCIrdH1pZih0eXBlb2Ygcj09XCJ1bmRlZmluZWRcInx8cj09bnVsbCl7dmFyIHY9aVt0XVtcIml2bGVuXCJdO3ZhciB1PW0odik7cj11LnRvVXBwZXJDYXNlKCl9dmFyIHo9aih0LEEscik7dmFyIHk9ei5rZXloZXg7dmFyIHc9aChzLHQseSxyKTt2YXIgcT13LnJlcGxhY2UoLyguezY0fSkvZyxcIiQxXFxyXFxuXCIpO3ZhciBwPVwiLS0tLS1CRUdJTiBcIit4K1wiIFBSSVZBVEUgS0VZLS0tLS1cXHJcXG5cIjtwKz1cIlByb2MtVHlwZTogNCxFTkNSWVBURURcXHJcXG5cIjtwKz1cIkRFSy1JbmZvOiBcIit0K1wiLFwiK3IrXCJcXHJcXG5cIjtwKz1cIlxcclxcblwiO3ArPXE7cCs9XCJcXHJcXG4tLS0tLUVORCBcIit4K1wiIFBSSVZBVEUgS0VZLS0tLS1cXHJcXG5cIjtyZXR1cm4gcH0scGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4OmZ1bmN0aW9uKHkpe3ZhciBCPUFTTjFIRVg7dmFyIHo9Qi5nZXRDaGlsZElkeDt2YXIgdz1CLmdldFY7dmFyIHQ9e307dmFyIHI9eih5LDApO2lmKHIubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMCkuaXRlbXMgIT0gMjogXCIrci5sZW5ndGh9dC5jaXBoZXJ0ZXh0PXcoeSxyWzFdKTt2YXIgQT16KHksclswXSk7aWYoQS5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjApLml0ZW1zICE9IDI6IFwiK0EubGVuZ3RofWlmKHcoeSxBWzBdKSE9XCIyYTg2NDg4NmY3MGQwMTA1MGRcIil7dGhyb3dcInRoaXMgb25seSBzdXBwb3J0cyBwa2NzNVBCRVMyXCJ9dmFyIHA9eih5LEFbMV0pO2lmKEEubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEpLml0ZW1zICE9IDI6IFwiK3AubGVuZ3RofXZhciBxPXooeSxwWzFdKTtpZihxLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMC4xLjEpLml0ZW1zICE9IDI6IFwiK3EubGVuZ3RofWlmKHcoeSxxWzBdKSE9XCIyYTg2NDg4NmY3MGQwMzA3XCIpe3Rocm93XCJ0aGlzIG9ubHkgc3VwcG9ydHMgVHJpcGxlREVTXCJ9dC5lbmNyeXB0aW9uU2NoZW1lQWxnPVwiVHJpcGxlREVTXCI7dC5lbmNyeXB0aW9uU2NoZW1lSVY9dyh5LHFbMV0pO3ZhciBzPXooeSxwWzBdKTtpZihzLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMC4xLjApLml0ZW1zICE9IDI6IFwiK3MubGVuZ3RofWlmKHcoeSxzWzBdKSE9XCIyYTg2NDg4NmY3MGQwMTA1MGNcIil7dGhyb3dcInRoaXMgb25seSBzdXBwb3J0cyBwa2NzNVBCS0RGMlwifXZhciB4PXooeSxzWzFdKTtpZih4Lmxlbmd0aDwyKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMC4xKS5pdGVtcyA8IDI6IFwiK3gubGVuZ3RofXQucGJrZGYyU2FsdD13KHkseFswXSk7dmFyIHU9dyh5LHhbMV0pO3RyeXt0LnBia2RmMkl0ZXI9cGFyc2VJbnQodSwxNil9Y2F0Y2godil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQgcGJrZGYySXRlcjogXCIrdX1yZXR1cm4gdH0sZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtOmZ1bmN0aW9uKHUscCl7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1LnBia2RmMlNhbHQpO3ZhciBxPXUucGJrZGYySXRlcjt2YXIgcz1DcnlwdG9KUy5QQktERjIocCx0LHtrZXlTaXplOjE5Mi8zMixpdGVyYXRpb25zOnF9KTt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShzKTtyZXR1cm4gcn0sX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU06ZnVuY3Rpb24oeCx5KXt2YXIgcj1wZW10b2hleCh4LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpO3ZhciBwPXRoaXMucGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4KHIpO3ZhciB1PUtFWVVUSUwuZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtKHAseSk7dmFyIHY9e307di5jaXBoZXJ0ZXh0PUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocC5jaXBoZXJ0ZXh0KTt2YXIgdD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHUpO3ZhciBzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocC5lbmNyeXB0aW9uU2NoZW1lSVYpO3ZhciB3PUNyeXB0b0pTLlRyaXBsZURFUy5kZWNyeXB0KHYsdCx7aXY6c30pO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHcpO3JldHVybiBxfSxnZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU06ZnVuY3Rpb24ocyxxKXt2YXIgcD10aGlzLl9nZXRQbGFpblBLQ1M4SGV4RnJvbUVuY3J5cHRlZFBLQ1M4UEVNKHMscSk7dmFyIHI9dGhpcy5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgocCk7cmV0dXJuIHJ9LHBhcnNlUGxhaW5Qcml2YXRlUEtDUzhIZXg6ZnVuY3Rpb24ocyl7dmFyIHY9QVNOMUhFWDt2YXIgdT12LmdldENoaWxkSWR4O3ZhciB0PXYuZ2V0Vjt2YXIgcT17fTtxLmFsZ3BhcmFtPW51bGw7aWYocy5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIHBsYWluIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDAxKVwifXZhciByPXUocywwKTtpZihyLmxlbmd0aCE9Myl7dGhyb3dcIm1hbGZvcm1lZCBwbGFpbiBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwMilcIn1pZihzLnN1YnN0cihyWzFdLDIpIT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDMpXCJ9dmFyIHA9dShzLHJbMV0pO2lmKHAubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDA0KVwifWlmKHMuc3Vic3RyKHBbMF0sMikhPVwiMDZcIil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwNSlcIn1xLmFsZ29pZD10KHMscFswXSk7aWYocy5zdWJzdHIocFsxXSwyKT09XCIwNlwiKXtxLmFsZ3BhcmFtPXQocyxwWzFdKX1pZihzLnN1YnN0cihyWzJdLDIpIT1cIjA0XCIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDYpXCJ9cS5rZXlpZHg9di5nZXRWaWR4KHMsclsyXSk7cmV0dXJuIHF9LGdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOFBFTTpmdW5jdGlvbihxKXt2YXIgcD1wZW10b2hleChxLFwiUFJJVkFURSBLRVlcIik7dmFyIHI9dGhpcy5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgocCk7cmV0dXJuIHJ9LGdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOEhleDpmdW5jdGlvbihwKXt2YXIgcT10aGlzLnBhcnNlUGxhaW5Qcml2YXRlUEtDUzhIZXgocCk7dmFyIHI7aWYocS5hbGdvaWQ9PVwiMmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3I9bmV3IFJTQUtleSgpfWVsc2V7aWYocS5hbGdvaWQ9PVwiMmE4NjQ4Y2UzODA0MDFcIil7cj1uZXcgS0pVUi5jcnlwdG8uRFNBKCl9ZWxzZXtpZihxLmFsZ29pZD09XCIyYTg2NDhjZTNkMDIwMVwiKXtyPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSgpfWVsc2V7dGhyb3dcInVuc3VwcG9ydGVkIHByaXZhdGUga2V5IGFsZ29yaXRobVwifX19ci5yZWFkUEtDUzhQcnZLZXlIZXgocCk7cmV0dXJuIHJ9LF9nZXRLZXlGcm9tUHVibGljUEtDUzhIZXg6ZnVuY3Rpb24ocSl7dmFyIHA7dmFyIHI9QVNOMUhFWC5nZXRWYnlMaXN0KHEsMCxbMCwwXSxcIjA2XCIpO2lmKHI9PT1cIjJhODY0ODg2ZjcwZDAxMDEwMVwiKXtwPW5ldyBSU0FLZXkoKX1lbHNle2lmKHI9PT1cIjJhODY0OGNlMzgwNDAxXCIpe3A9bmV3IEtKVVIuY3J5cHRvLkRTQSgpfWVsc2V7aWYocj09PVwiMmE4NjQ4Y2UzZDAyMDFcIil7cD1uZXcgS0pVUi5jcnlwdG8uRUNEU0EoKX1lbHNle3Rocm93XCJ1bnN1cHBvcnRlZCBQS0NTIzggcHVibGljIGtleSBoZXhcIn19fXAucmVhZFBLQ1M4UHViS2V5SGV4KHEpO3JldHVybiBwfSxwYXJzZVB1YmxpY1Jhd1JTQUtleUhleDpmdW5jdGlvbihyKXt2YXIgdT1BU04xSEVYO3ZhciB0PXUuZ2V0Q2hpbGRJZHg7dmFyIHM9dS5nZXRWO3ZhciBwPXt9O2lmKHIuc3Vic3RyKDAsMikhPVwiMzBcIil7dGhyb3dcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDAxKVwifXZhciBxPXQociwwKTtpZihxLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDAyKVwifWlmKHIuc3Vic3RyKHFbMF0sMikhPVwiMDJcIil7dGhyb3dcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDAzKVwifXAubj1zKHIscVswXSk7aWYoci5zdWJzdHIocVsxXSwyKSE9XCIwMlwiKXt0aHJvd1wibWFsZm9ybWVkIFJTQSBrZXkoY29kZTowMDQpXCJ9cC5lPXMocixxWzFdKTtyZXR1cm4gcH0scGFyc2VQdWJsaWNQS0NTOEhleDpmdW5jdGlvbih0KXt2YXIgdj1BU04xSEVYO3ZhciB1PXYuZ2V0Q2hpbGRJZHg7dmFyIHM9di5nZXRWO3ZhciBxPXt9O3EuYWxncGFyYW09bnVsbDt2YXIgcj11KHQsMCk7aWYoci5sZW5ndGghPTIpe3Rocm93XCJvdXRlciBERVJTZXF1ZW5jZSBzaGFsbCBoYXZlIDIgZWxlbWVudHM6IFwiK3IubGVuZ3RofXZhciB3PXJbMF07aWYodC5zdWJzdHIodywyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHB1YmxpYyBrZXkoY29kZTowMDEpXCJ9dmFyIHA9dSh0LHcpO2lmKHAubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHB1YmxpYyBrZXkoY29kZTowMDIpXCJ9aWYodC5zdWJzdHIocFswXSwyKSE9XCIwNlwiKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHB1YmxpYyBrZXkoY29kZTowMDMpXCJ9cS5hbGdvaWQ9cyh0LHBbMF0pO2lmKHQuc3Vic3RyKHBbMV0sMik9PVwiMDZcIil7cS5hbGdwYXJhbT1zKHQscFsxXSl9ZWxzZXtpZih0LnN1YnN0cihwWzFdLDIpPT1cIjMwXCIpe3EuYWxncGFyYW09e307cS5hbGdwYXJhbS5wPXYuZ2V0VmJ5TGlzdCh0LHBbMV0sWzBdLFwiMDJcIik7cS5hbGdwYXJhbS5xPXYuZ2V0VmJ5TGlzdCh0LHBbMV0sWzFdLFwiMDJcIik7cS5hbGdwYXJhbS5nPXYuZ2V0VmJ5TGlzdCh0LHBbMV0sWzJdLFwiMDJcIil9fWlmKHQuc3Vic3RyKHJbMV0sMikhPVwiMDNcIil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDA0KVwifXEua2V5PXModCxyWzFdKS5zdWJzdHIoMik7cmV0dXJuIHF9LH19KCk7S0VZVVRJTC5nZXRLZXk9ZnVuY3Rpb24obCxrLG4pe3ZhciBHPUFTTjFIRVgsTD1HLmdldENoaWxkSWR4LHY9Ry5nZXRWLGQ9Ry5nZXRWYnlMaXN0LGM9S0pVUi5jcnlwdG8saT1jLkVDRFNBLEM9Yy5EU0Esdz1SU0FLZXksTT1wZW10b2hleCxGPUtFWVVUSUw7aWYodHlwZW9mIHchPVwidW5kZWZpbmVkXCImJmwgaW5zdGFuY2VvZiB3KXtyZXR1cm4gbH1pZih0eXBlb2YgaSE9XCJ1bmRlZmluZWRcIiYmbCBpbnN0YW5jZW9mIGkpe3JldHVybiBsfWlmKHR5cGVvZiBDIT1cInVuZGVmaW5lZFwiJiZsIGluc3RhbmNlb2YgQyl7cmV0dXJuIGx9aWYobC5jdXJ2ZSE9PXVuZGVmaW5lZCYmbC54eSE9PXVuZGVmaW5lZCYmbC5kPT09dW5kZWZpbmVkKXtyZXR1cm4gbmV3IGkoe3B1YjpsLnh5LGN1cnZlOmwuY3VydmV9KX1pZihsLmN1cnZlIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQpe3JldHVybiBuZXcgaSh7cHJ2OmwuZCxjdXJ2ZTpsLmN1cnZlfSl9aWYobC5rdHk9PT11bmRlZmluZWQmJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQ9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQdWJsaWMobC5uLGwuZSk7cmV0dXJuIFB9aWYobC5rdHk9PT11bmRlZmluZWQmJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQmJmwucCE9PXVuZGVmaW5lZCYmbC5xIT09dW5kZWZpbmVkJiZsLmRwIT09dW5kZWZpbmVkJiZsLmRxIT09dW5kZWZpbmVkJiZsLmNvIT09dW5kZWZpbmVkJiZsLnFpPT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgdygpO1Auc2V0UHJpdmF0ZUV4KGwubixsLmUsbC5kLGwucCxsLnEsbC5kcCxsLmRxLGwuY28pO3JldHVybiBQfWlmKGwua3R5PT09dW5kZWZpbmVkJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkJiZsLnA9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQcml2YXRlKGwubixsLmUsbC5kKTtyZXR1cm4gUH1pZihsLnAhPT11bmRlZmluZWQmJmwucSE9PXVuZGVmaW5lZCYmbC5nIT09dW5kZWZpbmVkJiZsLnkhPT11bmRlZmluZWQmJmwueD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IEMoKTtQLnNldFB1YmxpYyhsLnAsbC5xLGwuZyxsLnkpO3JldHVybiBQfWlmKGwucCE9PXVuZGVmaW5lZCYmbC5xIT09dW5kZWZpbmVkJiZsLmchPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC54IT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgQygpO1Auc2V0UHJpdmF0ZShsLnAsbC5xLGwuZyxsLnksbC54KTtyZXR1cm4gUH1pZihsLmt0eT09PVwiUlNBXCImJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQ9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQdWJsaWMoYjY0dXRvaGV4KGwubiksYjY0dXRvaGV4KGwuZSkpO3JldHVybiBQfWlmKGwua3R5PT09XCJSU0FcIiYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCYmbC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZHAhPT11bmRlZmluZWQmJmwuZHEhPT11bmRlZmluZWQmJmwucWkhPT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQcml2YXRlRXgoYjY0dXRvaGV4KGwubiksYjY0dXRvaGV4KGwuZSksYjY0dXRvaGV4KGwuZCksYjY0dXRvaGV4KGwucCksYjY0dXRvaGV4KGwucSksYjY0dXRvaGV4KGwuZHApLGI2NHV0b2hleChsLmRxKSxiNjR1dG9oZXgobC5xaSkpO3JldHVybiBQfWlmKGwua3R5PT09XCJSU0FcIiYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGUoYjY0dXRvaGV4KGwubiksYjY0dXRvaGV4KGwuZSksYjY0dXRvaGV4KGwuZCkpO3JldHVybiBQfWlmKGwua3R5PT09XCJFQ1wiJiZsLmNydiE9PXVuZGVmaW5lZCYmbC54IT09dW5kZWZpbmVkJiZsLnkhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIGo9bmV3IGkoe2N1cnZlOmwuY3J2fSk7dmFyIHQ9ai5lY3BhcmFtcy5rZXlsZW4vNDt2YXIgQj0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwueCkpLnNsaWNlKC10KTt2YXIgej0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwueSkpLnNsaWNlKC10KTt2YXIgdT1cIjA0XCIrQit6O2ouc2V0UHVibGljS2V5SGV4KHUpO3JldHVybiBqfWlmKGwua3R5PT09XCJFQ1wiJiZsLmNydiE9PXVuZGVmaW5lZCYmbC54IT09dW5kZWZpbmVkJiZsLnkhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCl7dmFyIGo9bmV3IGkoe2N1cnZlOmwuY3J2fSk7dmFyIHQ9ai5lY3BhcmFtcy5rZXlsZW4vNDt2YXIgQj0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwueCkpLnNsaWNlKC10KTt2YXIgej0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwueSkpLnNsaWNlKC10KTt2YXIgdT1cIjA0XCIrQit6O3ZhciBiPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC5kKSkuc2xpY2UoLXQpO2ouc2V0UHVibGljS2V5SGV4KHUpO2ouc2V0UHJpdmF0ZUtleUhleChiKTtyZXR1cm4gan1pZihuPT09XCJwa2NzNXBydlwiKXt2YXIgSj1sLEc9QVNOMUhFWCxOLFA7Tj1MKEosMCk7aWYoTi5sZW5ndGg9PT05KXtQPW5ldyB3KCk7UC5yZWFkUEtDUzVQcnZLZXlIZXgoSil9ZWxzZXtpZihOLmxlbmd0aD09PTYpe1A9bmV3IEMoKTtQLnJlYWRQS0NTNVBydktleUhleChKKX1lbHNle2lmKE4ubGVuZ3RoPjImJkouc3Vic3RyKE5bMV0sMik9PT1cIjA0XCIpe1A9bmV3IGkoKTtQLnJlYWRQS0NTNVBydktleUhleChKKX1lbHNle3Rocm93XCJ1bnN1cHBvcnRlZCBQS0NTIzEvNSBoZXhhZGVjaW1hbCBrZXlcIn19fXJldHVybiBQfWlmKG49PT1cInBrY3M4cHJ2XCIpe3ZhciBQPUYuZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4KGwpO3JldHVybiBQfWlmKG49PT1cInBrY3M4cHViXCIpe3JldHVybiBGLl9nZXRLZXlGcm9tUHVibGljUEtDUzhIZXgobCl9aWYobj09PVwieDUwOXB1YlwiKXtyZXR1cm4gWDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydEhleChsKX1pZihsLmluZGV4T2YoXCItRU5EIENFUlRJRklDQVRFLVwiLDApIT0tMXx8bC5pbmRleE9mKFwiLUVORCBYNTA5IENFUlRJRklDQVRFLVwiLDApIT0tMXx8bC5pbmRleE9mKFwiLUVORCBUUlVTVEVEIENFUlRJRklDQVRFLVwiLDApIT0tMSl7cmV0dXJuIFg1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRQRU0obCl9aWYobC5pbmRleE9mKFwiLUVORCBQVUJMSUMgS0VZLVwiKSE9LTEpe3ZhciBPPXBlbXRvaGV4KGwsXCJQVUJMSUMgS0VZXCIpO3JldHVybiBGLl9nZXRLZXlGcm9tUHVibGljUEtDUzhIZXgoTyl9aWYobC5pbmRleE9mKFwiLUVORCBSU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIik9PS0xKXt2YXIgbT1NKGwsXCJSU0EgUFJJVkFURSBLRVlcIik7cmV0dXJuIEYuZ2V0S2V5KG0sbnVsbCxcInBrY3M1cHJ2XCIpfWlmKGwuaW5kZXhPZihcIi1FTkQgRFNBIFBSSVZBVEUgS0VZLVwiKSE9LTEmJmwuaW5kZXhPZihcIjQsRU5DUllQVEVEXCIpPT0tMSl7dmFyIEk9TShsLFwiRFNBIFBSSVZBVEUgS0VZXCIpO3ZhciBFPWQoSSwwLFsxXSxcIjAyXCIpO3ZhciBEPWQoSSwwLFsyXSxcIjAyXCIpO3ZhciBLPWQoSSwwLFszXSxcIjAyXCIpO3ZhciByPWQoSSwwLFs0XSxcIjAyXCIpO3ZhciBzPWQoSSwwLFs1XSxcIjAyXCIpO3ZhciBQPW5ldyBDKCk7UC5zZXRQcml2YXRlKG5ldyBCaWdJbnRlZ2VyKEUsMTYpLG5ldyBCaWdJbnRlZ2VyKEQsMTYpLG5ldyBCaWdJbnRlZ2VyKEssMTYpLG5ldyBCaWdJbnRlZ2VyKHIsMTYpLG5ldyBCaWdJbnRlZ2VyKHMsMTYpKTtyZXR1cm4gUH1pZihsLmluZGV4T2YoXCItRU5EIFBSSVZBVEUgS0VZLVwiKSE9LTEpe3JldHVybiBGLmdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOFBFTShsKX1pZihsLmluZGV4T2YoXCItRU5EIFJTQSBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKSE9LTEpe3ZhciBvPUYuZ2V0RGVjcnlwdGVkS2V5SGV4KGwsayk7dmFyIEg9bmV3IFJTQUtleSgpO0gucmVhZFBLQ1M1UHJ2S2V5SGV4KG8pO3JldHVybiBIfWlmKGwuaW5kZXhPZihcIi1FTkQgRUMgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIikhPS0xKXt2YXIgST1GLmdldERlY3J5cHRlZEtleUhleChsLGspO3ZhciBQPWQoSSwwLFsxXSxcIjA0XCIpO3ZhciBmPWQoSSwwLFsyLDBdLFwiMDZcIik7dmFyIEE9ZChJLDAsWzMsMF0sXCIwM1wiKS5zdWJzdHIoMik7dmFyIGU9XCJcIjtpZihLSlVSLmNyeXB0by5PSUQub2lkaGV4Mm5hbWVbZl0hPT11bmRlZmluZWQpe2U9S0pVUi5jcnlwdG8uT0lELm9pZGhleDJuYW1lW2ZdfWVsc2V7dGhyb3dcInVuZGVmaW5lZCBPSUQoaGV4KSBpbiBLSlVSLmNyeXB0by5PSUQ6IFwiK2Z9dmFyIGo9bmV3IGkoe2N1cnZlOmV9KTtqLnNldFB1YmxpY0tleUhleChBKTtqLnNldFByaXZhdGVLZXlIZXgoUCk7ai5pc1B1YmxpYz1mYWxzZTtyZXR1cm4gan1pZihsLmluZGV4T2YoXCItRU5EIERTQSBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKSE9LTEpe3ZhciBJPUYuZ2V0RGVjcnlwdGVkS2V5SGV4KGwsayk7dmFyIEU9ZChJLDAsWzFdLFwiMDJcIik7dmFyIEQ9ZChJLDAsWzJdLFwiMDJcIik7dmFyIEs9ZChJLDAsWzNdLFwiMDJcIik7dmFyIHI9ZChJLDAsWzRdLFwiMDJcIik7dmFyIHM9ZChJLDAsWzVdLFwiMDJcIik7dmFyIFA9bmV3IEMoKTtQLnNldFByaXZhdGUobmV3IEJpZ0ludGVnZXIoRSwxNiksbmV3IEJpZ0ludGVnZXIoRCwxNiksbmV3IEJpZ0ludGVnZXIoSywxNiksbmV3IEJpZ0ludGVnZXIociwxNiksbmV3IEJpZ0ludGVnZXIocywxNikpO3JldHVybiBQfWlmKGwuaW5kZXhPZihcIi1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLVwiKSE9LTEpe3JldHVybiBGLmdldEtleUZyb21FbmNyeXB0ZWRQS0NTOFBFTShsLGspfXRocm93XCJub3Qgc3VwcG9ydGVkIGFyZ3VtZW50XCJ9O0tFWVVUSUwuZ2VuZXJhdGVLZXlwYWlyPWZ1bmN0aW9uKGEsYyl7aWYoYT09XCJSU0FcIil7dmFyIGI9Yzt2YXIgaD1uZXcgUlNBS2V5KCk7aC5nZW5lcmF0ZShiLFwiMTAwMDFcIik7aC5pc1ByaXZhdGU9dHJ1ZTtoLmlzUHVibGljPXRydWU7dmFyIGY9bmV3IFJTQUtleSgpO3ZhciBlPWgubi50b1N0cmluZygxNik7dmFyIGk9aC5lLnRvU3RyaW5nKDE2KTtmLnNldFB1YmxpYyhlLGkpO2YuaXNQcml2YXRlPWZhbHNlO2YuaXNQdWJsaWM9dHJ1ZTt2YXIgaz17fTtrLnBydktleU9iaj1oO2sucHViS2V5T2JqPWY7cmV0dXJuIGt9ZWxzZXtpZihhPT1cIkVDXCIpe3ZhciBkPWM7dmFyIGc9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTpkfSk7dmFyIGo9Zy5nZW5lcmF0ZUtleVBhaXJIZXgoKTt2YXIgaD1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOmR9KTtoLnNldFB1YmxpY0tleUhleChqLmVjcHViaGV4KTtoLnNldFByaXZhdGVLZXlIZXgoai5lY3BydmhleCk7aC5pc1ByaXZhdGU9dHJ1ZTtoLmlzUHVibGljPWZhbHNlO3ZhciBmPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6ZH0pO2Yuc2V0UHVibGljS2V5SGV4KGouZWNwdWJoZXgpO2YuaXNQcml2YXRlPWZhbHNlO2YuaXNQdWJsaWM9dHJ1ZTt2YXIgaz17fTtrLnBydktleU9iaj1oO2sucHViS2V5T2JqPWY7cmV0dXJuIGt9ZWxzZXt0aHJvd1widW5rbm93biBhbGdvcml0aG06IFwiK2F9fX07S0VZVVRJTC5nZXRQRU09ZnVuY3Rpb24oYixELHksbSxxLGope3ZhciBGPUtKVVIsaz1GLmFzbjEsej1rLkRFUk9iamVjdElkZW50aWZpZXIsZj1rLkRFUkludGVnZXIsbD1rLkFTTjFVdGlsLm5ld09iamVjdCxhPWsueDUwOSxDPWEuU3ViamVjdFB1YmxpY0tleUluZm8sZT1GLmNyeXB0byx1PWUuRFNBLHI9ZS5FQ0RTQSxuPVJTQUtleTtmdW5jdGlvbiBBKHMpe3ZhciBHPWwoe3NlcTpbe1wiaW50XCI6MH0se1wiaW50XCI6e2JpZ2ludDpzLm59fSx7XCJpbnRcIjpzLmV9LHtcImludFwiOntiaWdpbnQ6cy5kfX0se1wiaW50XCI6e2JpZ2ludDpzLnB9fSx7XCJpbnRcIjp7YmlnaW50OnMucX19LHtcImludFwiOntiaWdpbnQ6cy5kbXAxfX0se1wiaW50XCI6e2JpZ2ludDpzLmRtcTF9fSx7XCJpbnRcIjp7YmlnaW50OnMuY29lZmZ9fV19KTtyZXR1cm4gR31mdW5jdGlvbiBCKEcpe3ZhciBzPWwoe3NlcTpbe1wiaW50XCI6MX0se29jdHN0cjp7aGV4OkcucHJ2S2V5SGV4fX0se3RhZzpbXCJhMFwiLHRydWUse29pZDp7bmFtZTpHLmN1cnZlTmFtZX19XX0se3RhZzpbXCJhMVwiLHRydWUse2JpdHN0cjp7aGV4OlwiMDBcIitHLnB1YktleUhleH19XX1dfSk7cmV0dXJuIHN9ZnVuY3Rpb24geChzKXt2YXIgRz1sKHtzZXE6W3tcImludFwiOjB9LHtcImludFwiOntiaWdpbnQ6cy5wfX0se1wiaW50XCI6e2JpZ2ludDpzLnF9fSx7XCJpbnRcIjp7YmlnaW50OnMuZ319LHtcImludFwiOntiaWdpbnQ6cy55fX0se1wiaW50XCI6e2JpZ2ludDpzLnh9fV19KTtyZXR1cm4gR31pZigoKG4hPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiBuKXx8KHUhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiB1KXx8KHIhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiByKSkmJmIuaXNQdWJsaWM9PXRydWUmJihEPT09dW5kZWZpbmVkfHxEPT1cIlBLQ1M4UFVCXCIpKXt2YXIgRT1uZXcgQyhiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gaGV4dG9wZW0odyxcIlBVQkxJQyBLRVlcIil9aWYoRD09XCJQS0NTMVBSVlwiJiZuIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgbiYmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9QShiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gaGV4dG9wZW0odyxcIlJTQSBQUklWQVRFIEtFWVwiKX1pZihEPT1cIlBLQ1MxUFJWXCImJnIhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiByJiYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgaT1uZXcgeih7bmFtZTpiLmN1cnZlTmFtZX0pO3ZhciB2PWkuZ2V0RW5jb2RlZEhleCgpO3ZhciBoPUIoYik7dmFyIHQ9aC5nZXRFbmNvZGVkSGV4KCk7dmFyIHA9XCJcIjtwKz1oZXh0b3BlbSh2LFwiRUMgUEFSQU1FVEVSU1wiKTtwKz1oZXh0b3BlbSh0LFwiRUMgUFJJVkFURSBLRVlcIik7cmV0dXJuIHB9aWYoRD09XCJQS0NTMVBSVlwiJiZ1IT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgdSYmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9eChiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gaGV4dG9wZW0odyxcIkRTQSBQUklWQVRFIEtFWVwiKX1pZihEPT1cIlBLQ1M1UFJWXCImJm4hPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiBuJiYoeSE9PXVuZGVmaW5lZCYmeSE9bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT1BKGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKG09PT11bmRlZmluZWQpe209XCJERVMtRURFMy1DQkNcIn1yZXR1cm4gdGhpcy5nZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgoXCJSU0FcIix3LHksbSxqKX1pZihEPT1cIlBLQ1M1UFJWXCImJnIhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiByJiYoeSE9PXVuZGVmaW5lZCYmeSE9bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT1CKGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKG09PT11bmRlZmluZWQpe209XCJERVMtRURFMy1DQkNcIn1yZXR1cm4gdGhpcy5nZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgoXCJFQ1wiLHcseSxtLGopfWlmKEQ9PVwiUEtDUzVQUlZcIiYmdSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUmJih5IT09dW5kZWZpbmVkJiZ5IT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPXgoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYobT09PXVuZGVmaW5lZCl7bT1cIkRFUy1FREUzLUNCQ1wifXJldHVybiB0aGlzLmdldEVuY3J5cHRlZFBLQ1M1UEVNRnJvbVBydktleUhleChcIkRTQVwiLHcseSxtLGopfXZhciBvPWZ1bmN0aW9uKEcscyl7dmFyIEk9YyhHLHMpO3ZhciBIPW5ldyBsKHtzZXE6W3tzZXE6W3tvaWQ6e25hbWU6XCJwa2NzNVBCRVMyXCJ9fSx7c2VxOlt7c2VxOlt7b2lkOntuYW1lOlwicGtjczVQQktERjJcIn19LHtzZXE6W3tvY3RzdHI6e2hleDpJLnBia2RmMlNhbHR9fSx7XCJpbnRcIjpJLnBia2RmMkl0ZXJ9XX1dfSx7c2VxOlt7b2lkOntuYW1lOlwiZGVzLUVERTMtQ0JDXCJ9fSx7b2N0c3RyOntoZXg6SS5lbmNyeXB0aW9uU2NoZW1lSVZ9fV19XX1dfSx7b2N0c3RyOntoZXg6SS5jaXBoZXJ0ZXh0fX1dfSk7cmV0dXJuIEguZ2V0RW5jb2RlZEhleCgpfTt2YXIgYz1mdW5jdGlvbihOLE8pe3ZhciBIPTEwMDt2YXIgTT1DcnlwdG9KUy5saWIuV29yZEFycmF5LnJhbmRvbSg4KTt2YXIgTD1cIkRFUy1FREUzLUNCQ1wiO3ZhciBzPUNyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKDgpO3ZhciBJPUNyeXB0b0pTLlBCS0RGMihPLE0se2tleVNpemU6MTkyLzMyLGl0ZXJhdGlvbnM6SH0pO3ZhciBKPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoTik7dmFyIEs9Q3J5cHRvSlMuVHJpcGxlREVTLmVuY3J5cHQoSixJLHtpdjpzfSkrXCJcIjt2YXIgRz17fTtHLmNpcGhlcnRleHQ9SztHLnBia2RmMlNhbHQ9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkoTSk7Ry5wYmtkZjJJdGVyPUg7Ry5lbmNyeXB0aW9uU2NoZW1lQWxnPUw7Ry5lbmNyeXB0aW9uU2NoZW1lSVY9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkocyk7cmV0dXJuIEd9O2lmKEQ9PVwiUEtDUzhQUlZcIiYmbiE9dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgbiYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBnPUEoYik7dmFyIGQ9Zy5nZXRFbmNvZGVkSGV4KCk7dmFyIEU9bCh7c2VxOlt7XCJpbnRcIjowfSx7c2VxOlt7b2lkOntuYW1lOlwicnNhRW5jcnlwdGlvblwifX0se1wibnVsbFwiOnRydWV9XX0se29jdHN0cjp7aGV4OmR9fV19KTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZih5PT09dW5kZWZpbmVkfHx5PT1udWxsKXtyZXR1cm4gaGV4dG9wZW0odyxcIlBSSVZBVEUgS0VZXCIpfWVsc2V7dmFyIHQ9byh3LHkpO3JldHVybiBoZXh0b3BlbSh0LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpfX1pZihEPT1cIlBLQ1M4UFJWXCImJnIhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiByJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIGc9bmV3IGwoe3NlcTpbe1wiaW50XCI6MX0se29jdHN0cjp7aGV4OmIucHJ2S2V5SGV4fX0se3RhZzpbXCJhMVwiLHRydWUse2JpdHN0cjp7aGV4OlwiMDBcIitiLnB1YktleUhleH19XX1dfSk7dmFyIGQ9Zy5nZXRFbmNvZGVkSGV4KCk7dmFyIEU9bCh7c2VxOlt7XCJpbnRcIjowfSx7c2VxOlt7b2lkOntuYW1lOlwiZWNQdWJsaWNLZXlcIn19LHtvaWQ6e25hbWU6Yi5jdXJ2ZU5hbWV9fV19LHtvY3RzdHI6e2hleDpkfX1dfSk7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCl7cmV0dXJuIGhleHRvcGVtKHcsXCJQUklWQVRFIEtFWVwiKX1lbHNle3ZhciB0PW8odyx5KTtyZXR1cm4gaGV4dG9wZW0odCxcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiKX19aWYoRD09XCJQS0NTOFBSVlwiJiZ1IT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgdSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBnPW5ldyBmKHtiaWdpbnQ6Yi54fSk7dmFyIGQ9Zy5nZXRFbmNvZGVkSGV4KCk7dmFyIEU9bCh7c2VxOlt7XCJpbnRcIjowfSx7c2VxOlt7b2lkOntuYW1lOlwiZHNhXCJ9fSx7c2VxOlt7XCJpbnRcIjp7YmlnaW50OmIucH19LHtcImludFwiOntiaWdpbnQ6Yi5xfX0se1wiaW50XCI6e2JpZ2ludDpiLmd9fV19XX0se29jdHN0cjp7aGV4OmR9fV19KTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZih5PT09dW5kZWZpbmVkfHx5PT1udWxsKXtyZXR1cm4gaGV4dG9wZW0odyxcIlBSSVZBVEUgS0VZXCIpfWVsc2V7dmFyIHQ9byh3LHkpO3JldHVybiBoZXh0b3BlbSh0LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpfX10aHJvd1widW5zdXBwb3J0ZWQgb2JqZWN0IG5vciBmb3JtYXRcIn07S0VZVVRJTC5nZXRLZXlGcm9tQ1NSUEVNPWZ1bmN0aW9uKGIpe3ZhciBhPXBlbXRvaGV4KGIsXCJDRVJUSUZJQ0FURSBSRVFVRVNUXCIpO3ZhciBjPUtFWVVUSUwuZ2V0S2V5RnJvbUNTUkhleChhKTtyZXR1cm4gY307S0VZVVRJTC5nZXRLZXlGcm9tQ1NSSGV4PWZ1bmN0aW9uKGEpe3ZhciBjPUtFWVVUSUwucGFyc2VDU1JIZXgoYSk7dmFyIGI9S0VZVVRJTC5nZXRLZXkoYy5wOHB1YmtleWhleCxudWxsLFwicGtjczhwdWJcIik7cmV0dXJuIGJ9O0tFWVVUSUwucGFyc2VDU1JIZXg9ZnVuY3Rpb24oZCl7dmFyIGk9QVNOMUhFWDt2YXIgZj1pLmdldENoaWxkSWR4O3ZhciBjPWkuZ2V0VExWO3ZhciBiPXt9O3ZhciBnPWQ7aWYoZy5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIENTUihjb2RlOjAwMSlcIn12YXIgZT1mKGcsMCk7aWYoZS5sZW5ndGg8MSl7dGhyb3dcIm1hbGZvcm1lZCBDU1IoY29kZTowMDIpXCJ9aWYoZy5zdWJzdHIoZVswXSwyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIENTUihjb2RlOjAwMylcIn12YXIgYT1mKGcsZVswXSk7aWYoYS5sZW5ndGg8Myl7dGhyb3dcIm1hbGZvcm1lZCBDU1IoY29kZTowMDQpXCJ9Yi5wOHB1YmtleWhleD1jKGcsYVsyXSk7cmV0dXJuIGJ9O0tFWVVUSUwuZ2V0SldLRnJvbUtleT1mdW5jdGlvbihkKXt2YXIgYj17fTtpZihkIGluc3RhbmNlb2YgUlNBS2V5JiZkLmlzUHJpdmF0ZSl7Yi5rdHk9XCJSU0FcIjtiLm49aGV4dG9iNjR1KGQubi50b1N0cmluZygxNikpO2IuZT1oZXh0b2I2NHUoZC5lLnRvU3RyaW5nKDE2KSk7Yi5kPWhleHRvYjY0dShkLmQudG9TdHJpbmcoMTYpKTtiLnA9aGV4dG9iNjR1KGQucC50b1N0cmluZygxNikpO2IucT1oZXh0b2I2NHUoZC5xLnRvU3RyaW5nKDE2KSk7Yi5kcD1oZXh0b2I2NHUoZC5kbXAxLnRvU3RyaW5nKDE2KSk7Yi5kcT1oZXh0b2I2NHUoZC5kbXExLnRvU3RyaW5nKDE2KSk7Yi5xaT1oZXh0b2I2NHUoZC5jb2VmZi50b1N0cmluZygxNikpO3JldHVybiBifWVsc2V7aWYoZCBpbnN0YW5jZW9mIFJTQUtleSYmZC5pc1B1YmxpYyl7Yi5rdHk9XCJSU0FcIjtiLm49aGV4dG9iNjR1KGQubi50b1N0cmluZygxNikpO2IuZT1oZXh0b2I2NHUoZC5lLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGJ9ZWxzZXtpZihkIGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0EmJmQuaXNQcml2YXRlKXt2YXIgYT1kLmdldFNob3J0TklTVFBDdXJ2ZU5hbWUoKTtpZihhIT09XCJQLTI1NlwiJiZhIT09XCJQLTM4NFwiKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZSBmb3IgSldUOiBcIithfXZhciBjPWQuZ2V0UHVibGljS2V5WFlIZXgoKTtiLmt0eT1cIkVDXCI7Yi5jcnY9YTtiLng9aGV4dG9iNjR1KGMueCk7Yi55PWhleHRvYjY0dShjLnkpO2IuZD1oZXh0b2I2NHUoZC5wcnZLZXlIZXgpO3JldHVybiBifWVsc2V7aWYoZCBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkVDRFNBJiZkLmlzUHVibGljKXt2YXIgYT1kLmdldFNob3J0TklTVFBDdXJ2ZU5hbWUoKTtpZihhIT09XCJQLTI1NlwiJiZhIT09XCJQLTM4NFwiKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZSBmb3IgSldUOiBcIithfXZhciBjPWQuZ2V0UHVibGljS2V5WFlIZXgoKTtiLmt0eT1cIkVDXCI7Yi5jcnY9YTtiLng9aGV4dG9iNjR1KGMueCk7Yi55PWhleHRvYjY0dShjLnkpO3JldHVybiBifX19fXRocm93XCJub3Qgc3VwcG9ydGVkIGtleSBvYmplY3RcIn07XG5SU0FLZXkuZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleD1mdW5jdGlvbihhKXtyZXR1cm4gQVNOMUhFWC5nZXRDaGlsZElkeChhLDApfTtSU0FLZXkuZ2V0SGV4VmFsdWVBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4PWZ1bmN0aW9uKGYpe3ZhciBuPUFTTjFIRVg7dmFyIGk9bi5nZXRWO3ZhciBrPVJTQUtleS5nZXRQb3NBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4KGYpO3ZhciBlPWkoZixrWzBdKTt2YXIgaj1pKGYsa1sxXSk7dmFyIGI9aShmLGtbMl0pO3ZhciBjPWkoZixrWzNdKTt2YXIgaD1pKGYsa1s0XSk7dmFyIGc9aShmLGtbNV0pO3ZhciBtPWkoZixrWzZdKTt2YXIgbD1pKGYsa1s3XSk7dmFyIGQ9aShmLGtbOF0pO3ZhciBrPW5ldyBBcnJheSgpO2sucHVzaChlLGosYixjLGgsZyxtLGwsZCk7cmV0dXJuIGt9O1JTQUtleS5wcm90b3R5cGUucmVhZFByaXZhdGVLZXlGcm9tUEVNU3RyaW5nPWZ1bmN0aW9uKGQpe3ZhciBjPXBlbXRvaGV4KGQpO3ZhciBiPVJTQUtleS5nZXRIZXhWYWx1ZUFycmF5T2ZDaGlsZHJlbkZyb21IZXgoYyk7dGhpcy5zZXRQcml2YXRlRXgoYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdLGJbNl0sYls3XSxiWzhdKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkUEtDUzVQcnZLZXlIZXg9ZnVuY3Rpb24oYyl7dmFyIGI9UlNBS2V5LmdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleChjKTt0aGlzLnNldFByaXZhdGVFeChiWzFdLGJbMl0sYlszXSxiWzRdLGJbNV0sYls2XSxiWzddLGJbOF0pfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQS0NTOFBydktleUhleD1mdW5jdGlvbihlKXt2YXIgYyxqLGwsYixhLGYsZCxrO3ZhciBtPUFTTjFIRVg7dmFyIGc9bS5nZXRWYnlMaXN0O2lmKG0uaXNBU04xSEVYKGUpPT09ZmFsc2Upe3Rocm93XCJub3QgQVNOLjEgaGV4IHN0cmluZ1wifXRyeXtjPWcoZSwwLFsyLDAsMV0sXCIwMlwiKTtqPWcoZSwwLFsyLDAsMl0sXCIwMlwiKTtsPWcoZSwwLFsyLDAsM10sXCIwMlwiKTtiPWcoZSwwLFsyLDAsNF0sXCIwMlwiKTthPWcoZSwwLFsyLDAsNV0sXCIwMlwiKTtmPWcoZSwwLFsyLDAsNl0sXCIwMlwiKTtkPWcoZSwwLFsyLDAsN10sXCIwMlwiKTtrPWcoZSwwLFsyLDAsOF0sXCIwMlwiKX1jYXRjaChpKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1MjOCBwbGFpbiBSU0EgcHJpdmF0ZSBrZXlcIn10aGlzLnNldFByaXZhdGVFeChjLGosbCxiLGEsZixkLGspfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQS0NTNVB1YktleUhleD1mdW5jdGlvbihjKXt2YXIgZT1BU04xSEVYO3ZhciBiPWUuZ2V0VjtpZihlLmlzQVNOMUhFWChjKT09PWZhbHNlKXt0aHJvd1wia2V5SGV4IGlzIG5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dmFyIGE9ZS5nZXRDaGlsZElkeChjLDApO2lmKGEubGVuZ3RoIT09Mnx8Yy5zdWJzdHIoYVswXSwyKSE9PVwiMDJcInx8Yy5zdWJzdHIoYVsxXSwyKSE9PVwiMDJcIil7dGhyb3dcIndyb25nIGhleCBmb3IgUEtDUyM1IHB1YmxpYyBrZXlcIn12YXIgZj1iKGMsYVswXSk7dmFyIGQ9YihjLGFbMV0pO3RoaXMuc2V0UHVibGljKGYsZCl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M4UHViS2V5SGV4PWZ1bmN0aW9uKGIpe3ZhciBjPUFTTjFIRVg7aWYoYy5pc0FTTjFIRVgoYik9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9aWYoYy5nZXRUTFZieUxpc3QoYiwwLFswLDBdKSE9PVwiMDYwOTJhODY0ODg2ZjcwZDAxMDEwMVwiKXt0aHJvd1wibm90IFBLQ1M4IFJTQSBwdWJsaWMga2V5XCJ9dmFyIGE9Yy5nZXRUTFZieUxpc3QoYiwwLFsxLDBdKTt0aGlzLnJlYWRQS0NTNVB1YktleUhleChhKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkQ2VydFB1YktleUhleD1mdW5jdGlvbihiLGQpe3ZhciBhLGM7YT1uZXcgWDUwOSgpO2EucmVhZENlcnRIZXgoYik7Yz1hLmdldFB1YmxpY0tleUhleCgpO3RoaXMucmVhZFBLQ1M4UHViS2V5SGV4KGMpfTtcbnZhciBfUkVfSEVYREVDT05MWT1uZXcgUmVnRXhwKFwiXCIpO19SRV9IRVhERUNPTkxZLmNvbXBpbGUoXCJbXjAtOWEtZl1cIixcImdpXCIpO2Z1bmN0aW9uIF9yc2FzaWduX2dldEhleFBhZGRlZERpZ2VzdEluZm9Gb3JTdHJpbmcoZCxlLGEpe3ZhciBiPWZ1bmN0aW9uKGYpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hTdHJpbmcoZixhKX07dmFyIGM9YihkKTtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5nZXRQYWRkZWREaWdlc3RJbmZvSGV4KGMsYSxlKX1mdW5jdGlvbiBfemVyb1BhZGRpbmdPZlNpZ25hdHVyZShlLGQpe3ZhciBjPVwiXCI7dmFyIGE9ZC80LWUubGVuZ3RoO2Zvcih2YXIgYj0wO2I8YTtiKyspe2M9YytcIjBcIn1yZXR1cm4gYytlfVJTQUtleS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihkLGEpe3ZhciBiPWZ1bmN0aW9uKGUpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hTdHJpbmcoZSxhKX07dmFyIGM9YihkKTtyZXR1cm4gdGhpcy5zaWduV2l0aE1lc3NhZ2VIYXNoKGMsYSl9O1JTQUtleS5wcm90b3R5cGUuc2lnbldpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihlLGMpe3ZhciBmPUtKVVIuY3J5cHRvLlV0aWwuZ2V0UGFkZGVkRGlnZXN0SW5mb0hleChlLGMsdGhpcy5uLmJpdExlbmd0aCgpKTt2YXIgYj1wYXJzZUJpZ0ludChmLDE2KTt2YXIgZD10aGlzLmRvUHJpdmF0ZShiKTt2YXIgYT1kLnRvU3RyaW5nKDE2KTtyZXR1cm4gX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUoYSx0aGlzLm4uYml0TGVuZ3RoKCkpfTtmdW5jdGlvbiBwc3NfbWdmMV9zdHIoYyxhLGUpe3ZhciBiPVwiXCIsZD0wO3doaWxlKGIubGVuZ3RoPGEpe2IrPWhleHRvcnN0cihlKHJzdHJ0b2hleChjK1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLFsoZCY0Mjc4MTkwMDgwKT4+MjQsKGQmMTY3MTE2ODApPj4xNiwoZCY2NTI4MCk+PjgsZCYyNTVdKSkpKTtkKz0xfXJldHVybiBifVJTQUtleS5wcm90b3R5cGUuc2lnblBTUz1mdW5jdGlvbihlLGEsZCl7dmFyIGM9ZnVuY3Rpb24oZil7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChmLGEpfTt2YXIgYj1jKHJzdHJ0b2hleChlKSk7aWYoZD09PXVuZGVmaW5lZCl7ZD0tMX1yZXR1cm4gdGhpcy5zaWduV2l0aE1lc3NhZ2VIYXNoUFNTKGIsYSxkKX07UlNBS2V5LnByb3RvdHlwZS5zaWduV2l0aE1lc3NhZ2VIYXNoUFNTPWZ1bmN0aW9uKGwsYSxrKXt2YXIgYj1oZXh0b3JzdHIobCk7dmFyIGc9Yi5sZW5ndGg7dmFyIG09dGhpcy5uLmJpdExlbmd0aCgpLTE7dmFyIGM9TWF0aC5jZWlsKG0vOCk7dmFyIGQ7dmFyIG89ZnVuY3Rpb24oaSl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChpLGEpfTtpZihrPT09LTF8fGs9PT11bmRlZmluZWQpe2s9Z31lbHNle2lmKGs9PT0tMil7az1jLWctMn1lbHNle2lmKGs8LTIpe3Rocm93XCJpbnZhbGlkIHNhbHQgbGVuZ3RoXCJ9fX1pZihjPChnK2srMikpe3Rocm93XCJkYXRhIHRvbyBsb25nXCJ9dmFyIGY9XCJcIjtpZihrPjApe2Y9bmV3IEFycmF5KGspO25ldyBTZWN1cmVSYW5kb20oKS5uZXh0Qnl0ZXMoZik7Zj1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxmKX12YXIgbj1oZXh0b3JzdHIobyhyc3RydG9oZXgoXCJcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXCIrYitmKSkpO3ZhciBqPVtdO2ZvcihkPTA7ZDxjLWstZy0yO2QrPTEpe2pbZF09MH12YXIgZT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxqKStcIlxceDAxXCIrZjt2YXIgaD1wc3NfbWdmMV9zdHIobixlLmxlbmd0aCxvKTt2YXIgcT1bXTtmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCs9MSl7cVtkXT1lLmNoYXJDb2RlQXQoZCleaC5jaGFyQ29kZUF0KGQpfXZhciBwPSg2NTI4MD4+KDgqYy1tKSkmMjU1O3FbMF0mPX5wO2ZvcihkPTA7ZDxnO2QrKyl7cS5wdXNoKG4uY2hhckNvZGVBdChkKSl9cS5wdXNoKDE4OCk7cmV0dXJuIF96ZXJvUGFkZGluZ09mU2lnbmF0dXJlKHRoaXMuZG9Qcml2YXRlKG5ldyBCaWdJbnRlZ2VyKHEpKS50b1N0cmluZygxNiksdGhpcy5uLmJpdExlbmd0aCgpKX07ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0RGVjcnlwdFNpZ25hdHVyZUJJKGEsZCxjKXt2YXIgYj1uZXcgUlNBS2V5KCk7Yi5zZXRQdWJsaWMoZCxjKTt2YXIgZT1iLmRvUHVibGljKGEpO3JldHVybiBlfWZ1bmN0aW9uIF9yc2FzaWduX2dldEhleERpZ2VzdEluZm9Gcm9tU2lnKGEsYyxiKXt2YXIgZT1fcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkoYSxjLGIpO3ZhciBkPWUudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14xZiswMC8sXCJcIik7cmV0dXJuIGR9ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0QWxnTmFtZUFuZEhhc2hGcm9tSGV4RGlzZ2VzdEluZm8oZil7Zm9yKHZhciBlIGluIEtKVVIuY3J5cHRvLlV0aWwuRElHRVNUSU5GT0hFQUQpe3ZhciBkPUtKVVIuY3J5cHRvLlV0aWwuRElHRVNUSU5GT0hFQURbZV07dmFyIGI9ZC5sZW5ndGg7aWYoZi5zdWJzdHJpbmcoMCxiKT09ZCl7dmFyIGM9W2UsZi5zdWJzdHJpbmcoYildO3JldHVybiBjfX1yZXR1cm5bXX1SU0FLZXkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihmLGope2o9ai5yZXBsYWNlKF9SRV9IRVhERUNPTkxZLFwiXCIpO2o9ai5yZXBsYWNlKC9bIFxcbl0rL2csXCJcIik7dmFyIGI9cGFyc2VCaWdJbnQoaiwxNik7aWYoYi5iaXRMZW5ndGgoKT50aGlzLm4uYml0TGVuZ3RoKCkpe3JldHVybiAwfXZhciBpPXRoaXMuZG9QdWJsaWMoYik7dmFyIGU9aS50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTt2YXIgZz1fcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhlKTtpZihnLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfXZhciBkPWdbMF07dmFyIGg9Z1sxXTt2YXIgYT1mdW5jdGlvbihrKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoU3RyaW5nKGssZCl9O3ZhciBjPWEoZik7cmV0dXJuKGg9PWMpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVdpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihlLGEpe2E9YS5yZXBsYWNlKF9SRV9IRVhERUNPTkxZLFwiXCIpO2E9YS5yZXBsYWNlKC9bIFxcbl0rL2csXCJcIik7dmFyIGI9cGFyc2VCaWdJbnQoYSwxNik7aWYoYi5iaXRMZW5ndGgoKT50aGlzLm4uYml0TGVuZ3RoKCkpe3JldHVybiAwfXZhciBoPXRoaXMuZG9QdWJsaWMoYik7dmFyIGc9aC50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTt2YXIgYz1fcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhnKTtpZihjLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfXZhciBkPWNbMF07dmFyIGY9Y1sxXTtyZXR1cm4oZj09ZSl9O1JTQUtleS5wcm90b3R5cGUudmVyaWZ5UFNTPWZ1bmN0aW9uKGMsYixhLGYpe3ZhciBlPWZ1bmN0aW9uKGcpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoZyxhKX07dmFyIGQ9ZShyc3RydG9oZXgoYykpO2lmKGY9PT11bmRlZmluZWQpe2Y9LTF9cmV0dXJuIHRoaXMudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTKGQsYixhLGYpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVdpdGhNZXNzYWdlSGFzaFBTUz1mdW5jdGlvbihmLHMsbCxjKXt2YXIgaz1uZXcgQmlnSW50ZWdlcihzLDE2KTtpZihrLmJpdExlbmd0aCgpPnRoaXMubi5iaXRMZW5ndGgoKSl7cmV0dXJuIGZhbHNlfXZhciByPWZ1bmN0aW9uKGkpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoaSxsKX07dmFyIGo9aGV4dG9yc3RyKGYpO3ZhciBoPWoubGVuZ3RoO3ZhciBnPXRoaXMubi5iaXRMZW5ndGgoKS0xO3ZhciBtPU1hdGguY2VpbChnLzgpO3ZhciBxO2lmKGM9PT0tMXx8Yz09PXVuZGVmaW5lZCl7Yz1ofWVsc2V7aWYoYz09PS0yKXtjPW0taC0yfWVsc2V7aWYoYzwtMil7dGhyb3dcImludmFsaWQgc2FsdCBsZW5ndGhcIn19fWlmKG08KGgrYysyKSl7dGhyb3dcImRhdGEgdG9vIGxvbmdcIn12YXIgYT10aGlzLmRvUHVibGljKGspLnRvQnl0ZUFycmF5KCk7Zm9yKHE9MDtxPGEubGVuZ3RoO3ErPTEpe2FbcV0mPTI1NX13aGlsZShhLmxlbmd0aDxtKXthLnVuc2hpZnQoMCl9aWYoYVttLTFdIT09MTg4KXt0aHJvd1wiZW5jb2RlZCBtZXNzYWdlIGRvZXMgbm90IGVuZCBpbiAweGJjXCJ9YT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhKTt2YXIgZD1hLnN1YnN0cigwLG0taC0xKTt2YXIgZT1hLnN1YnN0cihkLmxlbmd0aCxoKTt2YXIgcD0oNjUyODA+Pig4Km0tZykpJjI1NTtpZigoZC5jaGFyQ29kZUF0KDApJnApIT09MCl7dGhyb3dcImJpdHMgYmV5b25kIGtleXNpemUgbm90IHplcm9cIn12YXIgbj1wc3NfbWdmMV9zdHIoZSxkLmxlbmd0aCxyKTt2YXIgbz1bXTtmb3IocT0wO3E8ZC5sZW5ndGg7cSs9MSl7b1txXT1kLmNoYXJDb2RlQXQocSlebi5jaGFyQ29kZUF0KHEpfW9bMF0mPX5wO3ZhciBiPW0taC1jLTI7Zm9yKHE9MDtxPGI7cSs9MSl7aWYob1txXSE9PTApe3Rocm93XCJsZWZ0bW9zdCBvY3RldHMgbm90IHplcm9cIn19aWYob1tiXSE9PTEpe3Rocm93XCIweDAxIG1hcmtlciBub3QgZm91bmRcIn1yZXR1cm4gZT09PWhleHRvcnN0cihyKHJzdHJ0b2hleChcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIitqK1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLG8uc2xpY2UoLWMpKSkpKX07UlNBS2V5LlNBTFRfTEVOX0hMRU49LTE7UlNBS2V5LlNBTFRfTEVOX01BWD0tMjtSU0FLZXkuU0FMVF9MRU5fUkVDT1ZFUj0tMjtcbmZ1bmN0aW9uIFg1MDkoKXt2YXIgaz1BU04xSEVYLGo9ay5nZXRDaGlsZElkeCxoPWsuZ2V0VixiPWsuZ2V0VExWLGY9ay5nZXRWYnlMaXN0LGM9ay5nZXRUTFZieUxpc3QsZz1rLmdldElkeGJ5TGlzdCxkPWsuZ2V0VmlkeCxpPWsub2lkbmFtZSxhPVg1MDksZT1wZW10b2hleDt0aGlzLmhleD1udWxsO3RoaXMudmVyc2lvbj0wO3RoaXMuZm9mZnNldD0wO3RoaXMuYUV4dEluZm89bnVsbDt0aGlzLmdldFZlcnNpb249ZnVuY3Rpb24oKXtpZih0aGlzLmhleD09PW51bGx8fHRoaXMudmVyc2lvbiE9PTApe3JldHVybiB0aGlzLnZlcnNpb259aWYoYyh0aGlzLmhleCwwLFswLDBdKSE9PVwiYTAwMzAyMDEwMlwiKXt0aGlzLnZlcnNpb249MTt0aGlzLmZvZmZzZXQ9LTE7cmV0dXJuIDF9dGhpcy52ZXJzaW9uPTM7cmV0dXJuIDN9O3RoaXMuZ2V0U2VyaWFsTnVtYmVySGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcy5oZXgsMCxbMCwxK3RoaXMuZm9mZnNldF0sXCIwMlwiKX07dGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZD1mdW5jdGlvbigpe3JldHVybiBpKGYodGhpcy5oZXgsMCxbMCwyK3RoaXMuZm9mZnNldCwwXSxcIjA2XCIpKX07dGhpcy5nZXRJc3N1ZXJIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLmhleCwwLFswLDMrdGhpcy5mb2Zmc2V0XSxcIjMwXCIpfTt0aGlzLmdldElzc3VlclN0cmluZz1mdW5jdGlvbigpe3JldHVybiBhLmhleDJkbih0aGlzLmdldElzc3VlckhleCgpKX07dGhpcy5nZXRTdWJqZWN0SGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcy5oZXgsMCxbMCw1K3RoaXMuZm9mZnNldF0sXCIzMFwiKX07dGhpcy5nZXRTdWJqZWN0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGEuaGV4MmRuKHRoaXMuZ2V0U3ViamVjdEhleCgpKX07dGhpcy5nZXROb3RCZWZvcmU9ZnVuY3Rpb24oKXt2YXIgbD1mKHRoaXMuaGV4LDAsWzAsNCt0aGlzLmZvZmZzZXQsMF0pO2w9bC5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIik7bD1kZWNvZGVVUklDb21wb25lbnQobCk7cmV0dXJuIGx9O3RoaXMuZ2V0Tm90QWZ0ZXI9ZnVuY3Rpb24oKXt2YXIgbD1mKHRoaXMuaGV4LDAsWzAsNCt0aGlzLmZvZmZzZXQsMV0pO2w9bC5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIik7bD1kZWNvZGVVUklDb21wb25lbnQobCk7cmV0dXJuIGx9O3RoaXMuZ2V0UHVibGljS2V5SGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGsuZ2V0VExWYnlMaXN0KHRoaXMuaGV4LDAsWzAsNit0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5SWR4PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5oZXgsMCxbMCw2K3RoaXMuZm9mZnNldF0sXCIzMFwiKX07dGhpcy5nZXRQdWJsaWNLZXlDb250ZW50SWR4PWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5nZXRQdWJsaWNLZXlJZHgoKTtyZXR1cm4gZyh0aGlzLmhleCxsLFsxLDBdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIEtFWVVUSUwuZ2V0S2V5KHRoaXMuZ2V0UHVibGljS2V5SGV4KCksbnVsbCxcInBrY3M4cHViXCIpfTt0aGlzLmdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gaShmKHRoaXMuaGV4LDAsWzEsMF0sXCIwNlwiKSl9O3RoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzLmhleCwwLFsyXSxcIjAzXCIsdHJ1ZSl9O3RoaXMudmVyaWZ5U2lnbmF0dXJlPWZ1bmN0aW9uKG4pe3ZhciBvPXRoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtTmFtZSgpO3ZhciBsPXRoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXgoKTt2YXIgbT1jKHRoaXMuaGV4LDAsWzBdLFwiMzBcIik7dmFyIHA9bmV3IEtKVVIuY3J5cHRvLlNpZ25hdHVyZSh7YWxnOm99KTtwLmluaXQobik7cC51cGRhdGVIZXgobSk7cmV0dXJuIHAudmVyaWZ5KGwpfTt0aGlzLnBhcnNlRXh0PWZ1bmN0aW9uKCl7aWYodGhpcy52ZXJzaW9uIT09Myl7cmV0dXJuIC0xfXZhciBwPWcodGhpcy5oZXgsMCxbMCw3LDBdLFwiMzBcIik7dmFyIG09aih0aGlzLmhleCxwKTt0aGlzLmFFeHRJbmZvPW5ldyBBcnJheSgpO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXt2YXIgcT17fTtxLmNyaXRpY2FsPWZhbHNlO3ZhciBsPWoodGhpcy5oZXgsbVtuXSk7dmFyIHI9MDtpZihsLmxlbmd0aD09PTMpe3EuY3JpdGljYWw9dHJ1ZTtyPTF9cS5vaWQ9ay5oZXh0b29pZHN0cihmKHRoaXMuaGV4LG1bbl0sWzBdLFwiMDZcIikpO3ZhciBvPWcodGhpcy5oZXgsbVtuXSxbMStyXSk7cS52aWR4PWQodGhpcy5oZXgsbyk7dGhpcy5hRXh0SW5mby5wdXNoKHEpfX07dGhpcy5nZXRFeHRJbmZvPWZ1bmN0aW9uKG4pe3ZhciBsPXRoaXMuYUV4dEluZm87dmFyIG89bjtpZighbi5tYXRjaCgvXlswLTkuXSskLykpe289S0pVUi5hc24xLng1MDkuT0lELm5hbWUyb2lkKG4pfWlmKG89PT1cIlwiKXtyZXR1cm4gdW5kZWZpbmVkfWZvcih2YXIgbT0wO208bC5sZW5ndGg7bSsrKXtpZihsW21dLm9pZD09PW8pe3JldHVybiBsW21dfX1yZXR1cm4gdW5kZWZpbmVkfTt0aGlzLmdldEV4dEJhc2ljQ29uc3RyYWludHM9ZnVuY3Rpb24oKXt2YXIgbj10aGlzLmdldEV4dEluZm8oXCJiYXNpY0NvbnN0cmFpbnRzXCIpO2lmKG49PT11bmRlZmluZWQpe3JldHVybiBufXZhciBsPWgodGhpcy5oZXgsbi52aWR4KTtpZihsPT09XCJcIil7cmV0dXJue319aWYobD09PVwiMDEwMWZmXCIpe3JldHVybntjQTp0cnVlfX1pZihsLnN1YnN0cigwLDgpPT09XCIwMTAxZmYwMlwiKXt2YXIgbz1oKGwsNik7dmFyIG09cGFyc2VJbnQobywxNik7cmV0dXJue2NBOnRydWUscGF0aExlbjptfX10aHJvd1wiYmFzaWNDb25zdHJhaW50cyBwYXJzZSBlcnJvclwifTt0aGlzLmdldEV4dEtleVVzYWdlQmluPWZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRFeHRJbmZvKFwia2V5VXNhZ2VcIik7aWYobz09PXVuZGVmaW5lZCl7cmV0dXJuXCJcIn12YXIgbT1oKHRoaXMuaGV4LG8udmlkeCk7aWYobS5sZW5ndGglMiE9MHx8bS5sZW5ndGg8PTIpe3Rocm93XCJtYWxmb3JtZWQga2V5IHVzYWdlIHZhbHVlXCJ9dmFyIGw9cGFyc2VJbnQobS5zdWJzdHIoMCwyKSk7dmFyIG49cGFyc2VJbnQobS5zdWJzdHIoMiksMTYpLnRvU3RyaW5nKDIpO3JldHVybiBuLnN1YnN0cigwLG4ubGVuZ3RoLWwpfTt0aGlzLmdldEV4dEtleVVzYWdlU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5nZXRFeHRLZXlVc2FnZUJpbigpO3ZhciBsPW5ldyBBcnJheSgpO2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKXtpZihuLnN1YnN0cihtLDEpPT1cIjFcIil7bC5wdXNoKFg1MDkuS0VZVVNBR0VfTkFNRVttXSl9fXJldHVybiBsLmpvaW4oXCIsXCIpfTt0aGlzLmdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyPWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5nZXRFeHRJbmZvKFwic3ViamVjdEtleUlkZW50aWZpZXJcIik7aWYobD09PXVuZGVmaW5lZCl7cmV0dXJuIGx9cmV0dXJuIGgodGhpcy5oZXgsbC52aWR4KX07dGhpcy5nZXRFeHRBdXRob3JpdHlLZXlJZGVudGlmaWVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5nZXRFeHRJbmZvKFwiYXV0aG9yaXR5S2V5SWRlbnRpZmllclwiKTtpZihwPT09dW5kZWZpbmVkKXtyZXR1cm4gcH12YXIgbD17fTt2YXIgbz1iKHRoaXMuaGV4LHAudmlkeCk7dmFyIG09aihvLDApO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXtpZihvLnN1YnN0cihtW25dLDIpPT09XCI4MFwiKXtsLmtpZD1oKG8sbVtuXSl9fXJldHVybiBsfTt0aGlzLmdldEV4dEV4dEtleVVzYWdlTmFtZT1mdW5jdGlvbigpe3ZhciBwPXRoaXMuZ2V0RXh0SW5mbyhcImV4dEtleVVzYWdlXCIpO2lmKHA9PT11bmRlZmluZWQpe3JldHVybiBwfXZhciBsPW5ldyBBcnJheSgpO3ZhciBvPWIodGhpcy5oZXgscC52aWR4KTtpZihvPT09XCJcIil7cmV0dXJuIGx9dmFyIG09aihvLDApO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXtsLnB1c2goaShoKG8sbVtuXSkpKX1yZXR1cm4gbH07dGhpcy5nZXRFeHRTdWJqZWN0QWx0TmFtZT1mdW5jdGlvbigpe3ZhciBtPXRoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUyKCk7dmFyIGw9bmV3IEFycmF5KCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe2lmKG1bbl1bMF09PT1cIkROU1wiKXtsLnB1c2gobVtuXVsxXSl9fXJldHVybiBsfTt0aGlzLmdldEV4dFN1YmplY3RBbHROYW1lMj1mdW5jdGlvbigpe3ZhciBwLHMscjt2YXIgcT10aGlzLmdldEV4dEluZm8oXCJzdWJqZWN0QWx0TmFtZVwiKTtpZihxPT09dW5kZWZpbmVkKXtyZXR1cm4gcX12YXIgbD1uZXcgQXJyYXkoKTt2YXIgbz1iKHRoaXMuaGV4LHEudmlkeCk7dmFyIG09aihvLDApO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXtyPW8uc3Vic3RyKG1bbl0sMik7cD1oKG8sbVtuXSk7aWYocj09PVwiODFcIil7cz1oZXh0b3V0ZjgocCk7bC5wdXNoKFtcIk1BSUxcIixzXSl9aWYocj09PVwiODJcIil7cz1oZXh0b3V0ZjgocCk7bC5wdXNoKFtcIkROU1wiLHNdKX1pZihyPT09XCI4NFwiKXtzPVg1MDkuaGV4MmRuKHAsMCk7bC5wdXNoKFtcIkROXCIsc10pfWlmKHI9PT1cIjg2XCIpe3M9aGV4dG91dGY4KHApO2wucHVzaChbXCJVUklcIixzXSl9aWYocj09PVwiODdcIil7cz1oZXh0b2lwKHApO2wucHVzaChbXCJJUFwiLHNdKX19cmV0dXJuIGx9O3RoaXMuZ2V0RXh0Q1JMRGlzdHJpYnV0aW9uUG9pbnRzVVJJPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5nZXRFeHRJbmZvKFwiY1JMRGlzdHJpYnV0aW9uUG9pbnRzXCIpO2lmKHE9PT11bmRlZmluZWQpe3JldHVybiBxfXZhciBsPW5ldyBBcnJheSgpO3ZhciBtPWoodGhpcy5oZXgscS52aWR4KTtmb3IodmFyIG89MDtvPG0ubGVuZ3RoO28rKyl7dHJ5e3ZhciByPWYodGhpcy5oZXgsbVtvXSxbMCwwLDBdLFwiODZcIik7dmFyIHA9aGV4dG91dGY4KHIpO2wucHVzaChwKX1jYXRjaChuKXt9fXJldHVybiBsfTt0aGlzLmdldEV4dEFJQUluZm89ZnVuY3Rpb24oKXt2YXIgcD10aGlzLmdldEV4dEluZm8oXCJhdXRob3JpdHlJbmZvQWNjZXNzXCIpO2lmKHA9PT11bmRlZmluZWQpe3JldHVybiBwfXZhciBsPXtvY3NwOltdLGNhaXNzdWVyOltdfTt2YXIgbT1qKHRoaXMuaGV4LHAudmlkeCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe3ZhciBxPWYodGhpcy5oZXgsbVtuXSxbMF0sXCIwNlwiKTt2YXIgbz1mKHRoaXMuaGV4LG1bbl0sWzFdLFwiODZcIik7aWYocT09PVwiMmIwNjAxMDUwNTA3MzAwMVwiKXtsLm9jc3AucHVzaChoZXh0b3V0ZjgobykpfWlmKHE9PT1cIjJiMDYwMTA1MDUwNzMwMDJcIil7bC5jYWlzc3Vlci5wdXNoKGhleHRvdXRmOChvKSl9fXJldHVybiBsfTt0aGlzLmdldEV4dENlcnRpZmljYXRlUG9saWNpZXM9ZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEV4dEluZm8oXCJjZXJ0aWZpY2F0ZVBvbGljaWVzXCIpO2lmKG89PT11bmRlZmluZWQpe3JldHVybiBvfXZhciBsPWIodGhpcy5oZXgsby52aWR4KTt2YXIgdT1bXTt2YXIgcz1qKGwsMCk7Zm9yKHZhciByPTA7cjxzLmxlbmd0aDtyKyspe3ZhciB0PXt9O3ZhciBuPWoobCxzW3JdKTt0LmlkPWkoaChsLG5bMF0pKTtpZihuLmxlbmd0aD09PTIpe3ZhciBtPWoobCxuWzFdKTtmb3IodmFyIHE9MDtxPG0ubGVuZ3RoO3ErKyl7dmFyIHA9ZihsLG1bcV0sWzBdLFwiMDZcIik7aWYocD09PVwiMmIwNjAxMDUwNTA3MDIwMVwiKXt0LmNwcz1oZXh0b3V0ZjgoZihsLG1bcV0sWzFdKSl9ZWxzZXtpZihwPT09XCIyYjA2MDEwNTA1MDcwMjAyXCIpe3QudW5vdGljZT1oZXh0b3V0ZjgoZihsLG1bcV0sWzEsMF0pKX19fX11LnB1c2godCl9cmV0dXJuIHV9O3RoaXMucmVhZENlcnRQRU09ZnVuY3Rpb24obCl7dGhpcy5yZWFkQ2VydEhleChlKGwpKX07dGhpcy5yZWFkQ2VydEhleD1mdW5jdGlvbihsKXt0aGlzLmhleD1sO3RoaXMuZ2V0VmVyc2lvbigpO3RyeXtnKHRoaXMuaGV4LDAsWzAsN10sXCJhM1wiKTt0aGlzLnBhcnNlRXh0KCl9Y2F0Y2gobSl7fX07dGhpcy5nZXRJbmZvPWZ1bmN0aW9uKCl7dmFyIG09WDUwOTt2YXIgQix1LHo7Qj1cIkJhc2ljIEZpZWxkc1xcblwiO0IrPVwiICBzZXJpYWwgbnVtYmVyOiBcIit0aGlzLmdldFNlcmlhbE51bWJlckhleCgpK1wiXFxuXCI7Qis9XCIgIHNpZ25hdHVyZSBhbGdvcml0aG06IFwiK3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQoKStcIlxcblwiO0IrPVwiICBpc3N1ZXI6IFwiK3RoaXMuZ2V0SXNzdWVyU3RyaW5nKCkrXCJcXG5cIjtCKz1cIiAgbm90QmVmb3JlOiBcIit0aGlzLmdldE5vdEJlZm9yZSgpK1wiXFxuXCI7Qis9XCIgIG5vdEFmdGVyOiBcIit0aGlzLmdldE5vdEFmdGVyKCkrXCJcXG5cIjtCKz1cIiAgc3ViamVjdDogXCIrdGhpcy5nZXRTdWJqZWN0U3RyaW5nKCkrXCJcXG5cIjtCKz1cIiAgc3ViamVjdCBwdWJsaWMga2V5IGluZm86IFxcblwiO3U9dGhpcy5nZXRQdWJsaWNLZXkoKTtCKz1cIiAgICBrZXkgYWxnb3JpdGhtOiBcIit1LnR5cGUrXCJcXG5cIjtpZih1LnR5cGU9PT1cIlJTQVwiKXtCKz1cIiAgICBuPVwiK2hleHRvcG9zaGV4KHUubi50b1N0cmluZygxNikpLnN1YnN0cigwLDE2KStcIi4uLlxcblwiO0IrPVwiICAgIGU9XCIraGV4dG9wb3NoZXgodS5lLnRvU3RyaW5nKDE2KSkrXCJcXG5cIn16PXRoaXMuYUV4dEluZm87aWYoeiE9PXVuZGVmaW5lZCYmeiE9PW51bGwpe0IrPVwiWDUwOXYzIEV4dGVuc2lvbnM6XFxuXCI7Zm9yKHZhciByPTA7cjx6Lmxlbmd0aDtyKyspe3ZhciBuPXpbcl07dmFyIEE9S0pVUi5hc24xLng1MDkuT0lELm9pZDJuYW1lKG4ub2lkKTtpZihBPT09XCJcIil7QT1uLm9pZH12YXIgeD1cIlwiO2lmKG4uY3JpdGljYWw9PT10cnVlKXt4PVwiQ1JJVElDQUxcIn1CKz1cIiAgXCIrQStcIiBcIit4K1wiOlxcblwiO2lmKEE9PT1cImJhc2ljQ29uc3RyYWludHNcIil7dmFyIHY9dGhpcy5nZXRFeHRCYXNpY0NvbnN0cmFpbnRzKCk7aWYodi5jQT09PXVuZGVmaW5lZCl7Qis9XCIgICAge31cXG5cIn1lbHNle0IrPVwiICAgIGNBPXRydWVcIjtpZih2LnBhdGhMZW4hPT11bmRlZmluZWQpe0IrPVwiLCBwYXRoTGVuPVwiK3YucGF0aExlbn1CKz1cIlxcblwifX1lbHNle2lmKEE9PT1cImtleVVzYWdlXCIpe0IrPVwiICAgIFwiK3RoaXMuZ2V0RXh0S2V5VXNhZ2VTdHJpbmcoKStcIlxcblwifWVsc2V7aWYoQT09PVwic3ViamVjdEtleUlkZW50aWZpZXJcIil7Qis9XCIgICAgXCIrdGhpcy5nZXRFeHRTdWJqZWN0S2V5SWRlbnRpZmllcigpK1wiXFxuXCJ9ZWxzZXtpZihBPT09XCJhdXRob3JpdHlLZXlJZGVudGlmaWVyXCIpe3ZhciBsPXRoaXMuZ2V0RXh0QXV0aG9yaXR5S2V5SWRlbnRpZmllcigpO2lmKGwua2lkIT09dW5kZWZpbmVkKXtCKz1cIiAgICBraWQ9XCIrbC5raWQrXCJcXG5cIn19ZWxzZXtpZihBPT09XCJleHRLZXlVc2FnZVwiKXt2YXIgdz10aGlzLmdldEV4dEV4dEtleVVzYWdlTmFtZSgpO0IrPVwiICAgIFwiK3cuam9pbihcIiwgXCIpK1wiXFxuXCJ9ZWxzZXtpZihBPT09XCJzdWJqZWN0QWx0TmFtZVwiKXt2YXIgdD10aGlzLmdldEV4dFN1YmplY3RBbHROYW1lMigpO0IrPVwiICAgIFwiK3QrXCJcXG5cIn1lbHNle2lmKEE9PT1cImNSTERpc3RyaWJ1dGlvblBvaW50c1wiKXt2YXIgeT10aGlzLmdldEV4dENSTERpc3RyaWJ1dGlvblBvaW50c1VSSSgpO0IrPVwiICAgIFwiK3krXCJcXG5cIn1lbHNle2lmKEE9PT1cImF1dGhvcml0eUluZm9BY2Nlc3NcIil7dmFyIHA9dGhpcy5nZXRFeHRBSUFJbmZvKCk7aWYocC5vY3NwIT09dW5kZWZpbmVkKXtCKz1cIiAgICBvY3NwOiBcIitwLm9jc3Auam9pbihcIixcIikrXCJcXG5cIn1pZihwLmNhaXNzdWVyIT09dW5kZWZpbmVkKXtCKz1cIiAgICBjYWlzc3VlcjogXCIrcC5jYWlzc3Vlci5qb2luKFwiLFwiKStcIlxcblwifX1lbHNle2lmKEE9PT1cImNlcnRpZmljYXRlUG9saWNpZXNcIil7dmFyIG89dGhpcy5nZXRFeHRDZXJ0aWZpY2F0ZVBvbGljaWVzKCk7Zm9yKHZhciBxPTA7cTxvLmxlbmd0aDtxKyspe2lmKG9bcV0uaWQhPT11bmRlZmluZWQpe0IrPVwiICAgIHBvbGljeSBvaWQ6IFwiK29bcV0uaWQrXCJcXG5cIn1pZihvW3FdLmNwcyE9PXVuZGVmaW5lZCl7Qis9XCIgICAgY3BzOiBcIitvW3FdLmNwcytcIlxcblwifX19fX19fX19fX19fUIrPVwic2lnbmF0dXJlIGFsZ29yaXRobTogXCIrdGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1OYW1lKCkrXCJcXG5cIjtCKz1cInNpZ25hdHVyZTogXCIrdGhpcy5nZXRTaWduYXR1cmVWYWx1ZUhleCgpLnN1YnN0cigwLDE2KStcIi4uLlxcblwiO3JldHVybiBCfX1YNTA5LmhleDJkbj1mdW5jdGlvbihmLGIpe2lmKGI9PT11bmRlZmluZWQpe2I9MH1pZihmLnN1YnN0cihiLDIpIT09XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIEROXCJ9dmFyIGM9bmV3IEFycmF5KCk7dmFyIGQ9QVNOMUhFWC5nZXRDaGlsZElkeChmLGIpO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtjLnB1c2goWDUwOS5oZXgycmRuKGYsZFtlXSkpfWM9Yy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShcIi9cIixcIlxcXFwvXCIpfSk7cmV0dXJuXCIvXCIrYy5qb2luKFwiL1wiKX07WDUwOS5oZXgycmRuPWZ1bmN0aW9uKGYsYil7aWYoYj09PXVuZGVmaW5lZCl7Yj0wfWlmKGYuc3Vic3RyKGIsMikhPT1cIjMxXCIpe3Rocm93XCJtYWxmb3JtZWQgUkROXCJ9dmFyIGM9bmV3IEFycmF5KCk7dmFyIGQ9QVNOMUhFWC5nZXRDaGlsZElkeChmLGIpO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtjLnB1c2goWDUwOS5oZXgyYXR0clR5cGVWYWx1ZShmLGRbZV0pKX1jPWMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoXCIrXCIsXCJcXFxcK1wiKX0pO3JldHVybiBjLmpvaW4oXCIrXCIpfTtYNTA5LmhleDJhdHRyVHlwZVZhbHVlPWZ1bmN0aW9uKGQsaSl7dmFyIGo9QVNOMUhFWDt2YXIgaD1qLmdldFY7aWYoaT09PXVuZGVmaW5lZCl7aT0wfWlmKGQuc3Vic3RyKGksMikhPT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgYXR0cmlidXRlIHR5cGUgYW5kIHZhbHVlXCJ9dmFyIGc9ai5nZXRDaGlsZElkeChkLGkpO2lmKGcubGVuZ3RoIT09Mnx8ZC5zdWJzdHIoZ1swXSwyKSE9PVwiMDZcIil7XCJtYWxmb3JtZWQgYXR0cmlidXRlIHR5cGUgYW5kIHZhbHVlXCJ9dmFyIGI9aChkLGdbMF0pO3ZhciBmPUtKVVIuYXNuMS5BU04xVXRpbC5vaWRIZXhUb0ludChiKTt2YXIgZT1LSlVSLmFzbjEueDUwOS5PSUQub2lkMmF0eXBlKGYpO3ZhciBhPWgoZCxnWzFdKTt2YXIgYz1oZXh0b3JzdHIoYSk7cmV0dXJuIGUrXCI9XCIrY307WDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydEhleD1mdW5jdGlvbihiKXt2YXIgYT1uZXcgWDUwOSgpO2EucmVhZENlcnRIZXgoYik7cmV0dXJuIGEuZ2V0UHVibGljS2V5KCl9O1g1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRQRU09ZnVuY3Rpb24oYil7dmFyIGE9bmV3IFg1MDkoKTthLnJlYWRDZXJ0UEVNKGIpO3JldHVybiBhLmdldFB1YmxpY0tleSgpfTtYNTA5LmdldFB1YmxpY0tleUluZm9Qcm9wT2ZDZXJ0UEVNPWZ1bmN0aW9uKGMpe3ZhciBlPUFTTjFIRVg7dmFyIGc9ZS5nZXRWYnlMaXN0O3ZhciBiPXt9O3ZhciBhLGYsZDtiLmFsZ3BhcmFtPW51bGw7YT1uZXcgWDUwOSgpO2EucmVhZENlcnRQRU0oYyk7Zj1hLmdldFB1YmxpY0tleUhleCgpO2Iua2V5aGV4PWcoZiwwLFsxXSxcIjAzXCIpLnN1YnN0cigyKTtiLmFsZ29pZD1nKGYsMCxbMCwwXSxcIjA2XCIpO2lmKGIuYWxnb2lkPT09XCIyYTg2NDhjZTNkMDIwMVwiKXtiLmFsZ3BhcmFtPWcoZiwwLFswLDFdLFwiMDZcIil9cmV0dXJuIGJ9O1g1MDkuS0VZVVNBR0VfTkFNRT1bXCJkaWdpdGFsU2lnbmF0dXJlXCIsXCJub25SZXB1ZGlhdGlvblwiLFwia2V5RW5jaXBoZXJtZW50XCIsXCJkYXRhRW5jaXBoZXJtZW50XCIsXCJrZXlBZ3JlZW1lbnRcIixcImtleUNlcnRTaWduXCIsXCJjUkxTaWduXCIsXCJlbmNpcGhlck9ubHlcIixcImRlY2lwaGVyT25seVwiXTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5qd3M9PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmp3cyl7S0pVUi5qd3M9e319S0pVUi5qd3MuSldTPWZ1bmN0aW9uKCl7dmFyIGI9S0pVUixhPWIuandzLkpXUyxjPWEuaXNTYWZlSlNPTlN0cmluZzt0aGlzLnBhcnNlSldTPWZ1bmN0aW9uKGcsail7aWYoKHRoaXMucGFyc2VkSldTIT09dW5kZWZpbmVkKSYmKGp8fCh0aGlzLnBhcnNlZEpXUy5zaWd2YWxIIT09dW5kZWZpbmVkKSkpe3JldHVybn12YXIgaT1nLm1hdGNoKC9eKFteLl0rKVxcLihbXi5dKylcXC4oW14uXSspJC8pO2lmKGk9PW51bGwpe3Rocm93XCJKV1Mgc2lnbmF0dXJlIGlzIG5vdCBhIGZvcm0gb2YgJ0hlYWQuUGF5bG9hZC5TaWdWYWx1ZScuXCJ9dmFyIGs9aVsxXTt2YXIgZT1pWzJdO3ZhciBsPWlbM107dmFyIG49aytcIi5cIitlO3RoaXMucGFyc2VkSldTPXt9O3RoaXMucGFyc2VkSldTLmhlYWRCNjRVPWs7dGhpcy5wYXJzZWRKV1MucGF5bG9hZEI2NFU9ZTt0aGlzLnBhcnNlZEpXUy5zaWd2YWxCNjRVPWw7dGhpcy5wYXJzZWRKV1Muc2k9bjtpZighail7dmFyIGg9YjY0dXRvaGV4KGwpO3ZhciBmPXBhcnNlQmlnSW50KGgsMTYpO3RoaXMucGFyc2VkSldTLnNpZ3ZhbEg9aDt0aGlzLnBhcnNlZEpXUy5zaWd2YWxCST1mfXZhciBkPWI2NHV0b3V0Zjgoayk7dmFyIG09YjY0dXRvdXRmOChlKTt0aGlzLnBhcnNlZEpXUy5oZWFkUz1kO3RoaXMucGFyc2VkSldTLnBheWxvYWRTPW07aWYoIWMoZCx0aGlzLnBhcnNlZEpXUyxcImhlYWRQXCIpKXt0aHJvd1wibWFsZm9ybWVkIEpTT04gc3RyaW5nIGZvciBKV1MgSGVhZDogXCIrZH19fTtLSlVSLmp3cy5KV1Muc2lnbj1mdW5jdGlvbihpLHYseSx6LGEpe3ZhciB3PUtKVVIsbT13Lmp3cyxxPW0uSldTLGc9cS5yZWFkU2FmZUpTT05TdHJpbmcscD1xLmlzU2FmZUpTT05TdHJpbmcsZD13LmNyeXB0byxrPWQuRUNEU0Esbz1kLk1hYyxjPWQuU2lnbmF0dXJlLHQ9SlNPTjt2YXIgcyxqLG47aWYodHlwZW9mIHYhPVwic3RyaW5nXCImJnR5cGVvZiB2IT1cIm9iamVjdFwiKXt0aHJvd1wic3BIZWFkZXIgbXVzdCBiZSBKU09OIHN0cmluZyBvciBvYmplY3Q6IFwiK3Z9aWYodHlwZW9mIHY9PVwib2JqZWN0XCIpe2o9djtzPXQuc3RyaW5naWZ5KGopfWlmKHR5cGVvZiB2PT1cInN0cmluZ1wiKXtzPXY7aWYoIXAocykpe3Rocm93XCJKV1MgSGVhZCBpcyBub3Qgc2FmZSBKU09OIHN0cmluZzogXCIrc31qPWcocyl9bj15O2lmKHR5cGVvZiB5PT1cIm9iamVjdFwiKXtuPXQuc3RyaW5naWZ5KHkpfWlmKChpPT1cIlwifHxpPT1udWxsKSYmai5hbGchPT11bmRlZmluZWQpe2k9ai5hbGd9aWYoKGkhPVwiXCImJmkhPW51bGwpJiZqLmFsZz09PXVuZGVmaW5lZCl7ai5hbGc9aTtzPXQuc3RyaW5naWZ5KGopfWlmKGkhPT1qLmFsZyl7dGhyb3dcImFsZyBhbmQgc0hlYWRlci5hbGcgZG9lc24ndCBtYXRjaDogXCIraStcIiE9XCIrai5hbGd9dmFyIHI9bnVsbDtpZihxLmp3c2FsZzJzaWdhbGdbaV09PT11bmRlZmluZWQpe3Rocm93XCJ1bnN1cHBvcnRlZCBhbGcgbmFtZTogXCIraX1lbHNle3I9cS5qd3NhbGcyc2lnYWxnW2ldfXZhciBlPXV0Zjh0b2I2NHUocyk7dmFyIGw9dXRmOHRvYjY0dShuKTt2YXIgYj1lK1wiLlwiK2w7dmFyIHg9XCJcIjtpZihyLnN1YnN0cigwLDQpPT1cIkhtYWNcIil7aWYoej09PXVuZGVmaW5lZCl7dGhyb3dcIm1hYyBrZXkgc2hhbGwgYmUgc3BlY2lmaWVkIGZvciBIUyogYWxnXCJ9dmFyIGg9bmV3IG8oe2FsZzpyLHByb3Y6XCJjcnlwdG9qc1wiLHBhc3M6en0pO2gudXBkYXRlU3RyaW5nKGIpO3g9aC5kb0ZpbmFsKCl9ZWxzZXtpZihyLmluZGV4T2YoXCJ3aXRoRUNEU0FcIikhPS0xKXt2YXIgZj1uZXcgYyh7YWxnOnJ9KTtmLmluaXQoeixhKTtmLnVwZGF0ZVN0cmluZyhiKTtoQVNOMVNpZz1mLnNpZ24oKTt4PUtKVVIuY3J5cHRvLkVDRFNBLmFzbjFTaWdUb0NvbmNhdFNpZyhoQVNOMVNpZyl9ZWxzZXtpZihyIT1cIm5vbmVcIil7dmFyIGY9bmV3IGMoe2FsZzpyfSk7Zi5pbml0KHosYSk7Zi51cGRhdGVTdHJpbmcoYik7eD1mLnNpZ24oKX19fXZhciB1PWhleHRvYjY0dSh4KTtyZXR1cm4gYitcIi5cIit1fTtLSlVSLmp3cy5KV1MudmVyaWZ5PWZ1bmN0aW9uKHcsQixuKXt2YXIgeD1LSlVSLHE9eC5qd3MsdD1xLkpXUyxpPXQucmVhZFNhZmVKU09OU3RyaW5nLGU9eC5jcnlwdG8scD1lLkVDRFNBLHM9ZS5NYWMsZD1lLlNpZ25hdHVyZSxtO2lmKHR5cGVvZiBSU0FLZXkhPT11bmRlZmluZWQpe209UlNBS2V5fXZhciB5PXcuc3BsaXQoXCIuXCIpO2lmKHkubGVuZ3RoIT09Myl7cmV0dXJuIGZhbHNlfXZhciBmPXlbMF07dmFyIHI9eVsxXTt2YXIgYz1mK1wiLlwiK3I7dmFyIEE9YjY0dXRvaGV4KHlbMl0pO3ZhciBsPWkoYjY0dXRvdXRmOCh5WzBdKSk7dmFyIGs9bnVsbDt2YXIgej1udWxsO2lmKGwuYWxnPT09dW5kZWZpbmVkKXt0aHJvd1wiYWxnb3JpdGhtIG5vdCBzcGVjaWZpZWQgaW4gaGVhZGVyXCJ9ZWxzZXtrPWwuYWxnO3o9ay5zdWJzdHIoMCwyKX1pZihuIT1udWxsJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobik9PT1cIltvYmplY3QgQXJyYXldXCImJm4ubGVuZ3RoPjApe3ZhciBiPVwiOlwiK24uam9pbihcIjpcIikrXCI6XCI7aWYoYi5pbmRleE9mKFwiOlwiK2srXCI6XCIpPT0tMSl7dGhyb3dcImFsZ29yaXRobSAnXCIraytcIicgbm90IGFjY2VwdGVkIGluIHRoZSBsaXN0XCJ9fWlmKGshPVwibm9uZVwiJiZCPT09bnVsbCl7dGhyb3dcImtleSBzaGFsbCBiZSBzcGVjaWZpZWQgdG8gdmVyaWZ5LlwifWlmKHR5cGVvZiBCPT1cInN0cmluZ1wiJiZCLmluZGV4T2YoXCItLS0tLUJFR0lOIFwiKSE9LTEpe0I9S0VZVVRJTC5nZXRLZXkoQil9aWYoej09XCJSU1wifHx6PT1cIlBTXCIpe2lmKCEoQiBpbnN0YW5jZW9mIG0pKXt0aHJvd1wia2V5IHNoYWxsIGJlIGEgUlNBS2V5IG9iaiBmb3IgUlMqIGFuZCBQUyogYWxnc1wifX1pZih6PT1cIkVTXCIpe2lmKCEoQiBpbnN0YW5jZW9mIHApKXt0aHJvd1wia2V5IHNoYWxsIGJlIGEgRUNEU0Egb2JqIGZvciBFUyogYWxnc1wifX1pZihrPT1cIm5vbmVcIil7fXZhciB1PW51bGw7aWYodC5qd3NhbGcyc2lnYWxnW2wuYWxnXT09PXVuZGVmaW5lZCl7dGhyb3dcInVuc3VwcG9ydGVkIGFsZyBuYW1lOiBcIitrfWVsc2V7dT10Lmp3c2FsZzJzaWdhbGdba119aWYodT09XCJub25lXCIpe3Rocm93XCJub3Qgc3VwcG9ydGVkXCJ9ZWxzZXtpZih1LnN1YnN0cigwLDQpPT1cIkhtYWNcIil7dmFyIG89bnVsbDtpZihCPT09dW5kZWZpbmVkKXt0aHJvd1wiaGV4YWRlY2ltYWwga2V5IHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgSE1BQ1wifXZhciBqPW5ldyBzKHthbGc6dSxwYXNzOkJ9KTtqLnVwZGF0ZVN0cmluZyhjKTtvPWouZG9GaW5hbCgpO3JldHVybiBBPT1vfWVsc2V7aWYodS5pbmRleE9mKFwid2l0aEVDRFNBXCIpIT0tMSl7dmFyIGg9bnVsbDt0cnl7aD1wLmNvbmNhdFNpZ1RvQVNOMVNpZyhBKX1jYXRjaCh2KXtyZXR1cm4gZmFsc2V9dmFyIGc9bmV3IGQoe2FsZzp1fSk7Zy5pbml0KEIpO2cudXBkYXRlU3RyaW5nKGMpO3JldHVybiBnLnZlcmlmeShoKX1lbHNle3ZhciBnPW5ldyBkKHthbGc6dX0pO2cuaW5pdChCKTtnLnVwZGF0ZVN0cmluZyhjKTtyZXR1cm4gZy52ZXJpZnkoQSl9fX19O0tKVVIuandzLkpXUy5wYXJzZT1mdW5jdGlvbihnKXt2YXIgYz1nLnNwbGl0KFwiLlwiKTt2YXIgYj17fTt2YXIgZixlLGQ7aWYoYy5sZW5ndGghPTImJmMubGVuZ3RoIT0zKXt0aHJvd1wibWFsZm9ybWVkIHNKV1M6IHdyb25nIG51bWJlciBvZiAnLicgc3BsaXR0ZWQgZWxlbWVudHNcIn1mPWNbMF07ZT1jWzFdO2lmKGMubGVuZ3RoPT0zKXtkPWNbMl19Yi5oZWFkZXJPYmo9S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZyhiNjR1dG91dGY4KGYpKTtiLnBheWxvYWRPYmo9S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZyhiNjR1dG91dGY4KGUpKTtiLmhlYWRlclBQPUpTT04uc3RyaW5naWZ5KGIuaGVhZGVyT2JqLG51bGwsXCIgIFwiKTtpZihiLnBheWxvYWRPYmo9PW51bGwpe2IucGF5bG9hZFBQPWI2NHV0b3V0ZjgoZSl9ZWxzZXtiLnBheWxvYWRQUD1KU09OLnN0cmluZ2lmeShiLnBheWxvYWRPYmosbnVsbCxcIiAgXCIpfWlmKGQhPT11bmRlZmluZWQpe2Iuc2lnSGV4PWI2NHV0b2hleChkKX1yZXR1cm4gYn07S0pVUi5qd3MuSldTLnZlcmlmeUpXVD1mdW5jdGlvbihlLGwscil7dmFyIGQ9S0pVUixqPWQuandzLG89ai5KV1Msbj1vLnJlYWRTYWZlSlNPTlN0cmluZyxwPW8uaW5BcnJheSxmPW8uaW5jbHVkZWRBcnJheTt2YXIgaz1lLnNwbGl0KFwiLlwiKTt2YXIgYz1rWzBdO3ZhciBpPWtbMV07dmFyIHE9YytcIi5cIitpO3ZhciBtPWI2NHV0b2hleChrWzJdKTt2YXIgaD1uKGI2NHV0b3V0ZjgoYykpO3ZhciBnPW4oYjY0dXRvdXRmOChpKSk7aWYoaC5hbGc9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZX1pZihyLmFsZz09PXVuZGVmaW5lZCl7dGhyb3dcImFjY2VwdEZpZWxkLmFsZyBzaGFsbCBiZSBzcGVjaWZpZWRcIn1pZighcChoLmFsZyxyLmFsZykpe3JldHVybiBmYWxzZX1pZihnLmlzcyE9PXVuZGVmaW5lZCYmdHlwZW9mIHIuaXNzPT09XCJvYmplY3RcIil7aWYoIXAoZy5pc3Msci5pc3MpKXtyZXR1cm4gZmFsc2V9fWlmKGcuc3ViIT09dW5kZWZpbmVkJiZ0eXBlb2Ygci5zdWI9PT1cIm9iamVjdFwiKXtpZighcChnLnN1YixyLnN1Yikpe3JldHVybiBmYWxzZX19aWYoZy5hdWQhPT11bmRlZmluZWQmJnR5cGVvZiByLmF1ZD09PVwib2JqZWN0XCIpe2lmKHR5cGVvZiBnLmF1ZD09XCJzdHJpbmdcIil7aWYoIXAoZy5hdWQsci5hdWQpKXtyZXR1cm4gZmFsc2V9fWVsc2V7aWYodHlwZW9mIGcuYXVkPT1cIm9iamVjdFwiKXtpZighZihnLmF1ZCxyLmF1ZCkpe3JldHVybiBmYWxzZX19fX12YXIgYj1qLkludERhdGUuZ2V0Tm93KCk7aWYoci52ZXJpZnlBdCE9PXVuZGVmaW5lZCYmdHlwZW9mIHIudmVyaWZ5QXQ9PT1cIm51bWJlclwiKXtiPXIudmVyaWZ5QXR9aWYoci5ncmFjZVBlcmlvZD09PXVuZGVmaW5lZHx8dHlwZW9mIHIuZ3JhY2VQZXJpb2QhPT1cIm51bWJlclwiKXtyLmdyYWNlUGVyaW9kPTB9aWYoZy5leHAhPT11bmRlZmluZWQmJnR5cGVvZiBnLmV4cD09XCJudW1iZXJcIil7aWYoZy5leHArci5ncmFjZVBlcmlvZDxiKXtyZXR1cm4gZmFsc2V9fWlmKGcubmJmIT09dW5kZWZpbmVkJiZ0eXBlb2YgZy5uYmY9PVwibnVtYmVyXCIpe2lmKGI8Zy5uYmYtci5ncmFjZVBlcmlvZCl7cmV0dXJuIGZhbHNlfX1pZihnLmlhdCE9PXVuZGVmaW5lZCYmdHlwZW9mIGcuaWF0PT1cIm51bWJlclwiKXtpZihiPGcuaWF0LXIuZ3JhY2VQZXJpb2Qpe3JldHVybiBmYWxzZX19aWYoZy5qdGkhPT11bmRlZmluZWQmJnIuanRpIT09dW5kZWZpbmVkKXtpZihnLmp0aSE9PXIuanRpKXtyZXR1cm4gZmFsc2V9fWlmKCFvLnZlcmlmeShlLGwsci5hbGcpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9O0tKVVIuandzLkpXUy5pbmNsdWRlZEFycmF5PWZ1bmN0aW9uKGIsYSl7dmFyIGM9S0pVUi5qd3MuSldTLmluQXJyYXk7aWYoYj09PW51bGwpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYiE9PVwib2JqZWN0XCIpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYi5sZW5ndGghPT1cIm51bWJlclwiKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspe2lmKCFjKGJbZF0sYSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9O0tKVVIuandzLkpXUy5pbkFycmF5PWZ1bmN0aW9uKGQsYil7aWYoYj09PW51bGwpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYiE9PVwib2JqZWN0XCIpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYi5sZW5ndGghPT1cIm51bWJlclwiKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe2lmKGJbY109PWQpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9O0tKVVIuandzLkpXUy5qd3NhbGcyc2lnYWxnPXtIUzI1NjpcIkhtYWNTSEEyNTZcIixIUzM4NDpcIkhtYWNTSEEzODRcIixIUzUxMjpcIkhtYWNTSEE1MTJcIixSUzI1NjpcIlNIQTI1NndpdGhSU0FcIixSUzM4NDpcIlNIQTM4NHdpdGhSU0FcIixSUzUxMjpcIlNIQTUxMndpdGhSU0FcIixFUzI1NjpcIlNIQTI1NndpdGhFQ0RTQVwiLEVTMzg0OlwiU0hBMzg0d2l0aEVDRFNBXCIsUFMyNTY6XCJTSEEyNTZ3aXRoUlNBYW5kTUdGMVwiLFBTMzg0OlwiU0hBMzg0d2l0aFJTQWFuZE1HRjFcIixQUzUxMjpcIlNIQTUxMndpdGhSU0FhbmRNR0YxXCIsbm9uZTpcIm5vbmVcIix9O0tKVVIuandzLkpXUy5pc1NhZmVKU09OU3RyaW5nPWZ1bmN0aW9uKGMsYixkKXt2YXIgZT1udWxsO3RyeXtlPWpzb25QYXJzZShjKTtpZih0eXBlb2YgZSE9XCJvYmplY3RcIil7cmV0dXJuIDB9aWYoZS5jb25zdHJ1Y3Rvcj09PUFycmF5KXtyZXR1cm4gMH1pZihiKXtiW2RdPWV9cmV0dXJuIDF9Y2F0Y2goYSl7cmV0dXJuIDB9fTtLSlVSLmp3cy5KV1MucmVhZFNhZmVKU09OU3RyaW5nPWZ1bmN0aW9uKGIpe3ZhciBjPW51bGw7dHJ5e2M9anNvblBhcnNlKGIpO2lmKHR5cGVvZiBjIT1cIm9iamVjdFwiKXtyZXR1cm4gbnVsbH1pZihjLmNvbnN0cnVjdG9yPT09QXJyYXkpe3JldHVybiBudWxsfXJldHVybiBjfWNhdGNoKGEpe3JldHVybiBudWxsfX07S0pVUi5qd3MuSldTLmdldEVuY29kZWRTaWduYXR1cmVWYWx1ZUZyb21KV1M9ZnVuY3Rpb24oYil7dmFyIGE9Yi5tYXRjaCgvXlteLl0rXFwuW14uXStcXC4oW14uXSspJC8pO2lmKGE9PW51bGwpe3Rocm93XCJKV1Mgc2lnbmF0dXJlIGlzIG5vdCBhIGZvcm0gb2YgJ0hlYWQuUGF5bG9hZC5TaWdWYWx1ZScuXCJ9cmV0dXJuIGFbMV19O0tKVVIuandzLkpXUy5nZXRKV0t0aHVtYnByaW50PWZ1bmN0aW9uKGQpe2lmKGQua3R5IT09XCJSU0FcIiYmZC5rdHkhPT1cIkVDXCImJmQua3R5IT09XCJvY3RcIil7dGhyb3dcInVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgSldLIFRodW1wcmludFwifXZhciBhPVwie1wiO2lmKGQua3R5PT09XCJSU0FcIil7aWYodHlwZW9mIGQubiE9XCJzdHJpbmdcInx8dHlwZW9mIGQuZSE9XCJzdHJpbmdcIil7dGhyb3dcIndyb25nIG4gYW5kIGUgdmFsdWUgZm9yIFJTQSBrZXlcIn1hKz0nXCJlXCI6XCInK2QuZSsnXCIsJzthKz0nXCJrdHlcIjpcIicrZC5rdHkrJ1wiLCc7YSs9J1wiblwiOlwiJytkLm4rJ1wifSd9ZWxzZXtpZihkLmt0eT09PVwiRUNcIil7aWYodHlwZW9mIGQuY3J2IT1cInN0cmluZ1wifHx0eXBlb2YgZC54IT1cInN0cmluZ1wifHx0eXBlb2YgZC55IT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgY3J2LCB4IGFuZCB5IHZhbHVlIGZvciBFQyBrZXlcIn1hKz0nXCJjcnZcIjpcIicrZC5jcnYrJ1wiLCc7YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcInhcIjpcIicrZC54KydcIiwnO2ErPSdcInlcIjpcIicrZC55KydcIn0nfWVsc2V7aWYoZC5rdHk9PT1cIm9jdFwiKXtpZih0eXBlb2YgZC5rIT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgayB2YWx1ZSBmb3Igb2N0KHN5bW1ldHJpYykga2V5XCJ9YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcImtcIjpcIicrZC5rKydcIn0nfX19dmFyIGI9cnN0cnRvaGV4KGEpO3ZhciBjPUtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChiLFwic2hhMjU2XCIpO3ZhciBlPWhleHRvYjY0dShjKTtyZXR1cm4gZX07S0pVUi5qd3MuSW50RGF0ZT17fTtLSlVSLmp3cy5JbnREYXRlLmdldD1mdW5jdGlvbihjKXt2YXIgYj1LSlVSLmp3cy5JbnREYXRlLGQ9Yi5nZXROb3csYT1iLmdldFp1bHU7aWYoYz09XCJub3dcIil7cmV0dXJuIGQoKX1lbHNle2lmKGM9PVwibm93ICsgMWhvdXJcIil7cmV0dXJuIGQoKSs2MCo2MH1lbHNle2lmKGM9PVwibm93ICsgMWRheVwiKXtyZXR1cm4gZCgpKzYwKjYwKjI0fWVsc2V7aWYoYz09XCJub3cgKyAxbW9udGhcIil7cmV0dXJuIGQoKSs2MCo2MCoyNCozMH1lbHNle2lmKGM9PVwibm93ICsgMXllYXJcIil7cmV0dXJuIGQoKSs2MCo2MCoyNCozNjV9ZWxzZXtpZihjLm1hdGNoKC9aJC8pKXtyZXR1cm4gYShjKX1lbHNle2lmKGMubWF0Y2goL15bMC05XSskLykpe3JldHVybiBwYXJzZUludChjKX19fX19fX10aHJvd1widW5zdXBwb3J0ZWQgZm9ybWF0OiBcIitjfTtLSlVSLmp3cy5JbnREYXRlLmdldFp1bHU9ZnVuY3Rpb24oYSl7cmV0dXJuIHp1bHV0b3NlYyhhKX07S0pVUi5qd3MuSW50RGF0ZS5nZXROb3c9ZnVuY3Rpb24oKXt2YXIgYT1+fihuZXcgRGF0ZSgpLzEwMDApO3JldHVybiBhfTtLSlVSLmp3cy5JbnREYXRlLmludERhdGUyVVRDU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBEYXRlKGEqMTAwMCk7cmV0dXJuIGIudG9VVENTdHJpbmcoKX07S0pVUi5qd3MuSW50RGF0ZS5pbnREYXRlMlp1bHU9ZnVuY3Rpb24oZSl7dmFyIGk9bmV3IERhdGUoZSoxMDAwKSxoPShcIjAwMDBcIitpLmdldFVUQ0Z1bGxZZWFyKCkpLnNsaWNlKC00KSxnPShcIjAwXCIrKGkuZ2V0VVRDTW9udGgoKSsxKSkuc2xpY2UoLTIpLGI9KFwiMDBcIitpLmdldFVUQ0RhdGUoKSkuc2xpY2UoLTIpLGE9KFwiMDBcIitpLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKSxjPShcIjAwXCIraS5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSxmPShcIjAwXCIraS5nZXRVVENTZWNvbmRzKCkpLnNsaWNlKC0yKTtyZXR1cm4gaCtnK2IrYStjK2YrXCJaXCJ9O1xuZXhwb3J0IHsgU2VjdXJlUmFuZG9tIH07XHJcbmV4cG9ydCB7IHJuZ19zZWVkX3RpbWUgfTtcclxuXHJcbmV4cG9ydCB7IEJpZ0ludGVnZXIgfTtcclxuZXhwb3J0IHsgUlNBS2V5IH07XHJcbmV4cG9ydCBjb25zdCB7IEVEU0EgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBEU0EgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBTaWduYXR1cmUgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBNZXNzYWdlRGlnZXN0IH0gPSAgS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IE1hYyB9ID0gS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IENpcGhlciB9ID0gIEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgeyBLRVlVVElMIH07XHJcbmV4cG9ydCB7IEFTTjFIRVggfTtcclxuZXhwb3J0IHsgWDUwOSB9O1xyXG5leHBvcnQgeyBDcnlwdG9KUyB9O1xyXG5cclxuLy8gZXh0L2Jhc2U2NC5qc1xyXG5leHBvcnQgeyBiNjR0b2hleCB9O1xyXG5leHBvcnQgeyBiNjR0b0JBIH07XHJcblxyXG4vLyBiYXNlNjR4LmpzXHJcbmV4cG9ydCB7IHN0b0JBIH07XHJcbmV4cG9ydCB7IEJBdG9zIH07XHJcbmV4cG9ydCB7IEJBdG9oZXggfTtcclxuZXhwb3J0IHsgc3RvaGV4IH07XHJcbmV4cG9ydCB7IHN0b2I2NCB9O1xyXG5leHBvcnQgeyBzdG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b3MgfTtcclxuZXhwb3J0IHsgYjY0dG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b2I2NCB9O1xyXG5leHBvcnQgeyBoZXgyYjY0IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG9oZXggfTtcclxuZXhwb3J0IHsgdXRmOHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG91dGY4IH07XHJcbmV4cG9ydCB7IHV0Zjh0b2I2NCB9O1xyXG5leHBvcnQgeyBiNjR0b3V0ZjggfTtcclxuZXhwb3J0IHsgdXRmOHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvdXRmOCB9O1xyXG5leHBvcnQgeyBoZXh0b3JzdHIgfTtcclxuZXhwb3J0IHsgcnN0cnRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0bmwgfTtcclxuZXhwb3J0IHsgYjY0bmx0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b3BlbSB9O1xyXG5leHBvcnQgeyBwZW10b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b0FycmF5QnVmZmVyIH07XHJcbmV4cG9ydCB7IEFycmF5QnVmZmVydG9oZXggfTtcclxuZXhwb3J0IHsgenVsdXRvbXNlYyB9O1xyXG5leHBvcnQgeyB6dWx1dG9zZWMgfTtcclxuZXhwb3J0IHsgenVsdXRvZGF0ZSB9O1xyXG5leHBvcnQgeyBkYXRldG96dWx1IH07XHJcbmV4cG9ydCB7IHVyaWNtcHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvdXJpY21wIH07XHJcbmV4cG9ydCB7IGlwdjZ0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b2lwdjYgfTtcclxuZXhwb3J0IHsgaGV4dG9pcCB9O1xyXG5leHBvcnQgeyBpcHRvaGV4IH07XHJcbmV4cG9ydCB7IGVuY29kZVVSSUNvbXBvbmVudEFsbCB9O1xyXG5leHBvcnQgeyBuZXdsaW5lX3RvVW5peCB9O1xyXG5leHBvcnQgeyBuZXdsaW5lX3RvRG9zIH07XHJcbmV4cG9ydCB7IGhleHRvcG9zaGV4IH07XHJcbmV4cG9ydCB7IGludGFyeXN0cnRvaGV4IH07XHJcbmV4cG9ydCB7IHN0cmRpZmZpZHggfTtcclxuXHJcbi8vIG5hbWUgc3BhY2VzXHJcbmV4cG9ydCB7IEtKVVIgfTtcclxuY29uc3QgX2NyeXB0byA9ICBLSlVSLmNyeXB0bztcclxuZXhwb3J0IHsgX2NyeXB0byBhcyBjcnlwdG8gfTtcclxuZXhwb3J0IGNvbnN0IHsgYXNuMSB9ID0gS0pVUjtcclxuZXhwb3J0IGNvbnN0IHsgandzIH0gPSBLSlVSO1xyXG5leHBvcnQgY29uc3QgeyBsYW5nIH0gPSBLSlVSO1xyXG5cclxuXHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9zaGltXCIpO1xuXG5yZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lXCIpO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlXCIpO1xuXG5pZiAoZ2xvYmFsLl9iYWJlbFBvbHlmaWxsKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7XG59XG5nbG9iYWwuX2JhYmVsUG9seWZpbGwgPSB0cnVlO1xuXG52YXIgREVGSU5FX1BST1BFUlRZID0gXCJkZWZpbmVQcm9wZXJ0eVwiO1xuZnVuY3Rpb24gZGVmaW5lKE8sIGtleSwgdmFsdWUpIHtcbiAgT1trZXldIHx8IE9iamVjdFtERUZJTkVfUFJPUEVSVFldKE8sIGtleSwge1xuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSk7XG59XG5cbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZExlZnRcIiwgXCJcIi5wYWRTdGFydCk7XG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRSaWdodFwiLCBcIlwiLnBhZEVuZCk7XG5cblwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBbXVtrZXldICYmIGRlZmluZShBcnJheSwga2V5LCBGdW5jdGlvbi5jYWxsLmJpbmQoW11ba2V5XSkpO1xufSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKFxuICAgICAgdWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKVxuICAgICkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gW10uY29weVdpdGhpbiB8fCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCAvKiA9IDAgKi8sIHN0YXJ0IC8qID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgdG8gPSB0b0Fic29sdXRlSW5kZXgodGFyZ2V0LCBsZW4pO1xuICB2YXIgZnJvbSA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgY291bnQgPSBNYXRoLm1pbigoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pKSAtIGZyb20sIGxlbiAtIHRvKTtcbiAgdmFyIGluYyA9IDE7XG4gIGlmIChmcm9tIDwgdG8gJiYgdG8gPCBmcm9tICsgY291bnQpIHtcbiAgICBpbmMgPSAtMTtcbiAgICBmcm9tICs9IGNvdW50IC0gMTtcbiAgICB0byArPSBjb3VudCAtIDE7XG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgIGVsc2UgZGVsZXRlIE9bdG9dO1xuICAgIHRvICs9IGluYztcbiAgICBmcm9tICs9IGluYztcbiAgfSByZXR1cm4gTztcbn07XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYUxlbiwgbWVtbywgaXNSaWdodCkge1xuICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gaXNSaWdodCA/IGxlbmd0aCAtIDEgOiAwO1xuICB2YXIgaSA9IGlzUmlnaHQgPyAtMSA6IDE7XG4gIGlmIChhTGVuIDwgMikgZm9yICg7Oykge1xuICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ICs9IGk7XG4gICAgaWYgKGlzUmlnaHQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIH1cbiAgfVxuICBmb3IgKDtpc1JpZ2h0ID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gIH1cbiAgcmV0dXJuIG1lbW87XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbCkpIHtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi40JyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBOVU1CRVIgPSAnbnVtYmVyJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBpZiAoaGludCAhPT0gJ3N0cmluZycgJiYgaGludCAhPT0gTlVNQkVSICYmIGhpbnQgIT09ICdkZWZhdWx0JykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuZnVuY3Rpb24gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGN0eChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBzcHJlYWRhYmxlO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBzcHJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoaXNPYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgc3ByZWFkYWJsZSA9IGVsZW1lbnRbSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICAgICAgICBzcHJlYWRhYmxlID0gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwcmVhZGFibGUgJiYgZGVwdGggPiAwKSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCB0b0xlbmd0aChlbGVtZW50Lmxlbmd0aCksIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+PSAweDFmZmZmZmZmZmZmZmZmKSB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwidmFyIE1hcCA9IHJlcXVpcmUoJy4vZXM2Lm1hcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IHNoYXJlZC5zdG9yZSB8fCAoc2hhcmVkLnN0b3JlID0gbmV3IChyZXF1aXJlKCcuL2VzNi53ZWFrLW1hcCcpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIGlmIChpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKSBUW2tleV0gPSBTW2tleV07XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoTywga2V5ID0ga2V5c1tpKytdKSkge1xuICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIFJlZmxlY3QgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZWZsZWN0ICYmIFJlZmxlY3Qub3duS2V5cyB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ09QTi5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICByZXR1cm4gZ2V0U3ltYm9scyA/IGtleXMuY29uY2F0KGdldFN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VGbG9hdDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQocmVxdWlyZSgnLi9fc3RyaW5nLXdzJykgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgZnJvbTogZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICBBID0gW107XG4gICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgIG4gPSAwO1xuICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBmdW5jdGlvbiAobmV4dEl0ZW0pIHtcbiAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXghJztcbnZhciAkQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBNYXRoID0gZ2xvYmFsLk1hdGg7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG52YXIgSW5maW5pdHkgPSBnbG9iYWwuSW5maW5pdHk7XG52YXIgQmFzZUJ1ZmZlciA9ICRBcnJheUJ1ZmZlcjtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG52YXIgQlVGRkVSID0gJ2J1ZmZlcic7XG52YXIgQllURV9MRU5HVEggPSAnYnl0ZUxlbmd0aCc7XG52YXIgQllURV9PRkZTRVQgPSAnYnl0ZU9mZnNldCc7XG52YXIgJEJVRkZFUiA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUjtcbnZhciAkTEVOR1RIID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEg7XG52YXIgJE9GRlNFVCA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxuZnVuY3Rpb24gcGFja0lFRUU3NTQodmFsdWUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KG5CeXRlcyk7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDtcbiAgdmFyIGUsIG0sIGM7XG4gIHZhbHVlID0gYWJzKHZhbHVlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIG0gPSB2YWx1ZSAhPSB2YWx1ZSA/IDEgOiAwO1xuICAgIGUgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGUgPSBmbG9vcihsb2codmFsdWUpIC8gTE4yKTtcbiAgICBpZiAodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDA7XG4gICAgICBlID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW2krK10gPSBtICYgMjU1LCBtIC89IDI1NiwgbUxlbiAtPSA4KTtcbiAgZSA9IGUgPDwgbUxlbiB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbaSsrXSA9IGUgJiAyNTUsIGUgLz0gMjU2LCBlTGVuIC09IDgpO1xuICBidWZmZXJbLS1pXSB8PSBzICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufVxuZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChidWZmZXIsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZUxlbiAtIDc7XG4gIHZhciBpID0gbkJ5dGVzIC0gMTtcbiAgdmFyIHMgPSBidWZmZXJbaS0tXTtcbiAgdmFyIGUgPSBzICYgMTI3O1xuICB2YXIgbTtcbiAgcyA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIG0gPSBlICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGUgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbUxlbjtcbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiBzID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBwb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfSByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIHBvdygyLCBlIC0gbUxlbik7XG59XG5cbmZ1bmN0aW9uIHVucGFja0kzMihieXRlcykge1xuICByZXR1cm4gYnl0ZXNbM10gPDwgMjQgfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbn1cbmZ1bmN0aW9uIHBhY2tJOChpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTE2KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTMyKGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZiwgaXQgPj4gMTYgJiAweGZmLCBpdCA+PiAyNCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0Y2NChpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDUyLCA4KTtcbn1cbmZ1bmN0aW9uIHBhY2tGMzIoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCAyMywgNCk7XG59XG5cbmZ1bmN0aW9uIGFkZEdldHRlcihDLCBrZXksIGludGVybmFsKSB7XG4gIGRQKENbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tpbnRlcm5hbF07IH0gfSk7XG59XG5cbmZ1bmN0aW9uIGdldCh2aWV3LCBieXRlcywgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn1cbmZ1bmN0aW9uIHNldCh2aWV3LCBieXRlcywgaW5kZXgsIGNvbnZlcnNpb24sIHZhbHVlLCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufVxuXG5pZiAoISR0eXBlZC5BQlYpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgdGhpcy5fYiA9IGFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShieXRlTGVuZ3RoKSwgMCk7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYnVmZmVyWyRMRU5HVEhdO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgdGhpc1skQlVGRkVSXSA9IGJ1ZmZlcjtcbiAgICB0aGlzWyRPRkZTRVRdID0gb2Zmc2V0O1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCA1MiwgOCk7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRjMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRjY0LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgJEFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKE5hTik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuICRBcnJheUJ1ZmZlci5uYW1lICE9IEFSUkFZX0JVRkZFUjtcbiAgfSkpIHtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybiBuZXcgQmFzZUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG8gPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEJhc2VCdWZmZXJbUFJPVE9UWVBFXTtcbiAgICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlQnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkgaGlkZSgkQXJyYXlCdWZmZXIsIGtleSwgQmFzZUJ1ZmZlcltrZXldKTtcbiAgICB9XG4gICAgaWYgKCFMSUJSQVJZKSBBcnJheUJ1ZmZlclByb3RvLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9XG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodmlldy5nZXRJbnQ4KDApIHx8ICF2aWV3LmdldEludDgoMSkpIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5zZXRUb1N0cmluZ1RhZygkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG5zZXRUb1N0cmluZ1RhZygkRGF0YVZpZXcsIERBVEFfVklFVyk7XG5oaWRlKCREYXRhVmlld1tQUk9UT1RZUEVdLCAkdHlwZWQuVklFVywgdHJ1ZSk7XG5leHBvcnRzW0FSUkFZX0JVRkZFUl0gPSAkQXJyYXlCdWZmZXI7XG5leHBvcnRzW0RBVEFfVklFV10gPSAkRGF0YVZpZXc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZXhFeHAuZXNjYXBlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZSA9IHJlcXVpcmUoJy4vX3JlcGxhY2VyJykoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVnRXhwJywgeyBlc2NhcGU6IGZ1bmN0aW9uIGVzY2FwZShpdCkgeyByZXR1cm4gJHJlKGl0KTsgfSB9KTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgY29weVdpdGhpbjogcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2NvcHlXaXRoaW4nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIFNUUklDVCA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlUmlnaHQsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOSAvIDE1LjQuNC4yMiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2UsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOCAvIDE1LjQuNC4yMSBBcnJheS5wcm90b3R5cGUucmVkdWNlKGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBpZiAoaHRtbCkgYXJyYXlTbGljZS5jYWxsKGh0bWwpO1xufSksICdBcnJheScsIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhpcy5sZW5ndGgpO1xuICAgIHZhciBrbGFzcyA9IGNvZih0aGlzKTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZDtcbiAgICBpZiAoa2xhc3MgPT0gJ0FycmF5JykgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCh0aGlzLCBiZWdpbiwgZW5kKTtcbiAgICB2YXIgc3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbik7XG4gICAgdmFyIHVwVG8gPSB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pO1xuICAgIHZhciBzaXplID0gdG9MZW5ndGgodXBUbyAtIHN0YXJ0KTtcbiAgICB2YXIgY2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykgY2xvbmVkW2ldID0ga2xhc3MgPT0gJ1N0cmluZydcbiAgICAgID8gdGhpcy5jaGFyQXQoc3RhcnQgKyBpKVxuICAgICAgOiB0aGlzW3N0YXJ0ICsgaV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkc29ydCkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yNSBBcnJheS5wcm90b3R5cGUuc29ydChjb21wYXJlZm4pXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcykpXG4gICAgICA6ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcyksIGFGdW5jdGlvbihjb21wYXJlZm4pKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdBcnJheScpO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIiwidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4zIC8gMTUuMi4zLjcgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuNSBPYmplY3QuZnJlZXplKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2ZyZWV6ZScsIGZ1bmN0aW9uICgkZnJlZXplKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmcmVlemUoaXQpIHtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS43IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjE0IFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG8gPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgRU5EU19XSVRIID0gJ2VuZHNXaXRoJztcbnZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKEVORFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aCk7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOSBTdHJpbmcucHJvdG90eXBlLml0YWxpY3MoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnaXRhbGljcycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpdGFsaWNzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdpJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEyIFN0cmluZy5wcm90b3R5cGUuc3RyaWtlKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEzIFN0cmluZy5wcm90b3R5cGUuc3ViKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjE0IFN0cmluZy5wcm90b3R5cGUuc3VwKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbic7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRQKHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChpdCwga2V5LCBEKSB7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZiAocHJvdG9EZXNjKSBkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmIChwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKSBkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFELmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7IGVudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICB2YXIgaSA9IDA7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsID4gaSkgJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkge1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgdmFyIElTX09QID0gaXQgPT09IE9iamVjdFByb3RvO1xuICB2YXIgbmFtZXMgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKSB0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXQgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJykuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7IGE6IFMgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7XG4gICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgIHZhciBpID0gMTtcbiAgICB2YXIgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgJHJlcGxhY2VyID0gcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3R5cGVkJykuQUJWLCB7XG4gIERhdGFWaWV3OiByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKS5EYXRhVmlld1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59LCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBlYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKTtcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIFdFQUtfTUFQID0gJ1dlYWtNYXAnO1xudmFyIGdldFdlYWsgPSBtZXRhLmdldFdlYWs7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gd2Vhay51ZnN0b3JlO1xudmFyIEludGVybmFsTWFwO1xuXG52YXIgd3JhcHBlciA9IGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtNYXAoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gIH07XG59O1xuXG52YXIgbWV0aG9kcyA9IHtcbiAgLy8gMjMuMy4zLjMgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSkuZ2V0KGtleSk7XG4gICAgICByZXR1cm4gZGF0YSA/IGRhdGFbdGhpcy5faV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9LFxuICAvLyAyMy4zLjMuNSBXZWFrTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCksIGtleSwgdmFsdWUpO1xuICB9XG59O1xuXG4vLyAyMy4zIFdlYWtNYXAgT2JqZWN0c1xudmFyICRXZWFrTWFwID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19NQVAsIHdyYXBwZXIsIG1ldGhvZHMsIHdlYWssIHRydWUsIHRydWUpO1xuXG4vLyBJRTExIFdlYWtNYXAgZnJvemVuIGtleXMgZml4XG5pZiAoTkFUSVZFX1dFQUtfTUFQICYmIElTX0lFMTEpIHtcbiAgSW50ZXJuYWxNYXAgPSB3ZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIFdFQUtfTUFQKTtcbiAgYXNzaWduKEludGVybmFsTWFwLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gIG1ldGEuTkVFRCA9IHRydWU7XG4gIGVhY2goWydkZWxldGUnLCAnaGFzJywgJ2dldCcsICdzZXQnXSwgZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBwcm90byA9ICRXZWFrTWFwLnByb3RvdHlwZTtcbiAgICB2YXIgbWV0aG9kID0gcHJvdG9ba2V5XTtcbiAgICByZWRlZmluZShwcm90bywga2V5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgLy8gc3RvcmUgZnJvemVuIG9iamVjdHMgb24gaW50ZXJuYWwgd2Vha21hcCBzaGltXG4gICAgICBpZiAoaXNPYmplY3QoYSkgJiYgIWlzRXh0ZW5zaWJsZShhKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2YpIHRoaXMuX2YgPSBuZXcgSW50ZXJuYWxNYXAoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zba2V5XShhLCBiKTtcbiAgICAgICAgcmV0dXJuIGtleSA9PSAnc2V0JyA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAvLyBzdG9yZSBhbGwgdGhlIHJlc3Qgb24gbmF0aXZlIHdlYWttYXBcbiAgICAgIH0gcmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIGEsIGIpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdE1hcFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuLCBBO1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0TWFwJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdHRlblxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0dGVuOiBmdW5jdGlvbiBmbGF0dGVuKC8qIGRlcHRoQXJnID0gMSAqLykge1xuICAgIHZhciBkZXB0aEFyZyA9IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIGRlcHRoQXJnID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoQXJnKSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdHRlbicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnaW5jbHVkZXMnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yd2FsZHJvbi90YzM5LW5vdGVzL2Jsb2IvbWFzdGVyL2VzNi8yMDE0LTA5L3NlcHQtMjUubWQjNTEwLWdsb2JhbGFzYXAtZm9yLWVucXVldWluZy1hLW1pY3JvdGFza1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIHByb2Nlc3MgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wcm9jZXNzO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHtcbiAgYXNhcDogZnVuY3Rpb24gYXNhcChmbikge1xuICAgIHZhciBkb21haW4gPSBpc05vZGUgJiYgcHJvY2Vzcy5kb21haW47XG4gICAgbWljcm90YXNrKGRvbWFpbiA/IGRvbWFpbi5iaW5kKGZuKSA6IGZuKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL3Byb3Bvc2FsLWlzLWVycm9yXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0Vycm9yJywge1xuICBpc0Vycm9yOiBmdW5jdGlvbiBpc0Vycm9yKGl0KSB7XG4gICAgcmV0dXJuIGNvZihpdCkgPT09ICdFcnJvcic7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbGFtcDogZnVuY3Rpb24gY2xhbXAoeCwgbG93ZXIsIHVwcGVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKHVwcGVyLCBNYXRoLm1heChsb3dlciwgeCkpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgREVHX1BFUl9SQUQ6IE1hdGguUEkgLyAxODAgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIFJBRF9QRVJfREVHID0gMTgwIC8gTWF0aC5QSTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBkZWdyZWVzOiBmdW5jdGlvbiBkZWdyZWVzKHJhZGlhbnMpIHtcbiAgICByZXR1cm4gcmFkaWFucyAqIFJBRF9QRVJfREVHO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlhZGRoOiBmdW5jdGlvbiBpYWRkaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgKyAoeTEgPj4+IDApICsgKCgkeDAgJiAkeTAgfCAoJHgwIHwgJHkwKSAmIH4oJHgwICsgJHkwID4+PiAwKSkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlzdWJoOiBmdW5jdGlvbiBpc3ViaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgLSAoeTEgPj4+IDApIC0gKCh+JHgwICYgJHkwIHwgfigkeDAgXiAkeTApICYgJHgwIC0gJHkwID4+PiAwKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IFJBRF9QRVJfREVHOiAxODAgLyBNYXRoLlBJIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNjYWxlOiByZXF1aXJlKCcuL19tYXRoLXNjYWxlJykgfSk7XG4iLCIvLyBodHRwOi8vamZiYXN0aWVuLmdpdGh1Yi5pby9wYXBlcnMvTWF0aC5zaWduYml0Lmh0bWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbmJpdDogZnVuY3Rpb24gc2lnbmJpdCh4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpICE9IHggPyB4IDogeCA9PSAwID8gMSAvIHggPT0gSW5maW5pdHkgOiB4ID4gMDtcbn0gfSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB1bXVsaDogZnVuY3Rpb24gdW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+Pj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+Pj4gMTYpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjIgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKFAsIGdldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZUdldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZUdldHRlcl9fKFAsIGdldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IGdldDogYUZ1bmN0aW9uKGdldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4zIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVTZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBzZXQ6IGFGdW5jdGlvbihzZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KSB7XG4gICAgcmV0dXJuICRlbnRyaWVzKGl0KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG4vLyBCLjIuMi40IE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBHZXR0ZXJfXyhQKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fbG9va3VwR2V0dGVyX186IGZ1bmN0aW9uIF9fbG9va3VwR2V0dGVyX18oUCkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEsgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICB2YXIgRDtcbiAgICBkbyB7XG4gICAgICBpZiAoRCA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBLKSkgcmV0dXJuIEQuZ2V0O1xuICAgIH0gd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG4vLyBCLjIuMi41IE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBTZXR0ZXJfXyhQKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fbG9va3VwU2V0dGVyX186IGZ1bmN0aW9uIF9fbG9va3VwU2V0dGVyX18oUCkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEsgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICB2YXIgRDtcbiAgICBkbyB7XG4gICAgICBpZiAoRCA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBLKSkgcmV0dXJuIEQuc2V0O1xuICAgIH0gd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vemVucGFyc2luZy9lcy1vYnNlcnZhYmxlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBPQlNFUlZBQkxFID0gcmVxdWlyZSgnLi9fd2tzJykoJ29ic2VydmFibGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBSRVRVUk4gPSBmb3JPZi5SRVRVUk47XG5cbnZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZuID09IG51bGwgPyB1bmRlZmluZWQgOiBhRnVuY3Rpb24oZm4pO1xufTtcblxudmFyIGNsZWFudXBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHZhciBjbGVhbnVwID0gc3Vic2NyaXB0aW9uLl9jO1xuICBpZiAoY2xlYW51cCkge1xuICAgIHN1YnNjcmlwdGlvbi5fYyA9IHVuZGVmaW5lZDtcbiAgICBjbGVhbnVwKCk7XG4gIH1cbn07XG5cbnZhciBzdWJzY3JpcHRpb25DbG9zZWQgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHJldHVybiBzdWJzY3JpcHRpb24uX28gPT09IHVuZGVmaW5lZDtcbn07XG5cbnZhciBjbG9zZVN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gIH1cbn07XG5cbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgYW5PYmplY3Qob2JzZXJ2ZXIpO1xuICB0aGlzLl9jID0gdW5kZWZpbmVkO1xuICB0aGlzLl9vID0gb2JzZXJ2ZXI7XG4gIG9ic2VydmVyID0gbmV3IFN1YnNjcmlwdGlvbk9ic2VydmVyKHRoaXMpO1xuICB0cnkge1xuICAgIHZhciBjbGVhbnVwID0gc3Vic2NyaWJlcihvYnNlcnZlcik7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IGNsZWFudXA7XG4gICAgaWYgKGNsZWFudXAgIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwLnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSBjbGVhbnVwID0gZnVuY3Rpb24gKCkgeyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgIGVsc2UgYUZ1bmN0aW9uKGNsZWFudXApO1xuICAgICAgdGhpcy5fYyA9IGNsZWFudXA7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgcmV0dXJuO1xuICB9IGlmIChzdWJzY3JpcHRpb25DbG9zZWQodGhpcykpIGNsZWFudXBTdWJzY3JpcHRpb24odGhpcyk7XG59O1xuXG5TdWJzY3JpcHRpb24ucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgdW5zdWJzY3JpYmU6IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkgeyBjbG9zZVN1YnNjcmlwdGlvbih0aGlzKTsgfVxufSk7XG5cbnZhciBTdWJzY3JpcHRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdGhpcy5fcyA9IHN1YnNjcmlwdGlvbjtcbn07XG5cblN1YnNjcmlwdGlvbk9ic2VydmVyLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIG5leHQ6IGZ1bmN0aW9uIG5leHQodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5uZXh0KTtcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGVycm9yOiBmdW5jdGlvbiBlcnJvcih2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmIChzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkgdGhyb3cgdmFsdWU7XG4gICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuZXJyb3IpO1xuICAgICAgaWYgKCFtKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHZhbHVlID0gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmNvbXBsZXRlKTtcbiAgICAgICAgdmFsdWUgPSBtID8gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnZhciAkT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlcikge1xuICBhbkluc3RhbmNlKHRoaXMsICRPYnNlcnZhYmxlLCAnT2JzZXJ2YWJsZScsICdfZicpLl9mID0gYUZ1bmN0aW9uKHN1YnNjcmliZXIpO1xufTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUucHJvdG90eXBlLCB7XG4gIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24ob2JzZXJ2ZXIsIHRoaXMuX2YpO1xuICB9LFxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiBuZXcgKGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgYUZ1bmN0aW9uKGZuKTtcbiAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGF0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZm4odmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgY29tcGxldGU6IHJlc29sdmVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59KTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUsIHtcbiAgZnJvbTogZnVuY3Rpb24gZnJvbSh4KSB7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZTtcbiAgICB2YXIgbWV0aG9kID0gZ2V0TWV0aG9kKGFuT2JqZWN0KHgpW09CU0VSVkFCTEVdKTtcbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICB2YXIgb2JzZXJ2YWJsZSA9IGFuT2JqZWN0KG1ldGhvZC5jYWxsKHgpKTtcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlLmNvbnN0cnVjdG9yID09PSBDID8gb2JzZXJ2YWJsZSA6IG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGZvck9mKHgsIGZhbHNlLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdCk7XG4gICAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm4gUkVUVVJOO1xuICAgICAgICAgICAgfSkgPT09IFJFVFVSTikgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBlO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGRvbmUgPSB0cnVlOyB9O1xuICAgIH0pO1xuICB9LFxuICBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoLCBpdGVtcyA9IG5ldyBBcnJheShsKTsgaSA8IGw7KSBpdGVtc1tpXSA9IGFyZ3VtZW50c1tpKytdO1xuICAgIHJldHVybiBuZXcgKHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlKShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGl0ZW1zLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0ZW1zW2pdKTtcbiAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgICAgICAgfSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGRvbmUgPSB0cnVlOyB9O1xuICAgIH0pO1xuICB9XG59KTtcblxuaGlkZSgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIE9CU0VSVkFCTEUsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBPYnNlcnZhYmxlOiAkT2JzZXJ2YWJsZSB9KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnT2JzZXJ2YWJsZScpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS1maW5hbGx5XG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJvbWlzZScsIHsgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIG9uRmluYWxseSA9PSAnZnVuY3Rpb24nO1xuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHksXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICB9IDogb25GaW5hbGx5XG4gICk7XG59IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdQcm9taXNlJywgeyAndHJ5JzogZnVuY3Rpb24gKGNhbGxiYWNrZm4pIHtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZih0aGlzKTtcbiAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gIChyZXN1bHQuZSA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gbWV0YWRhdGEuc2V0O1xuXG5tZXRhZGF0YS5leHAoeyBkZWZpbmVNZXRhZGF0YTogZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIGFuT2JqZWN0KHRhcmdldCksIHRvTWV0YUtleSh0YXJnZXRLZXkpKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBtZXRhZGF0YS5tYXA7XG52YXIgc3RvcmUgPSBtZXRhZGF0YS5zdG9yZTtcblxubWV0YWRhdGEuZXhwKHsgZGVsZXRlTWV0YWRhdGE6IGZ1bmN0aW9uIGRlbGV0ZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoYW5PYmplY3QodGFyZ2V0KSwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIGlmIChtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkIHx8ICFtZXRhZGF0YU1hcFsnZGVsZXRlJ10obWV0YWRhdGFLZXkpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChtZXRhZGF0YU1hcC5zaXplKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIHRhcmdldE1ldGFkYXRhWydkZWxldGUnXSh0YXJnZXRLZXkpO1xuICByZXR1cm4gISF0YXJnZXRNZXRhZGF0YS5zaXplIHx8IHN0b3JlWydkZWxldGUnXSh0YXJnZXQpO1xufSB9KTtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5R2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiB1bmRlZmluZWQ7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YTogZnVuY3Rpb24gZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YTogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlIYXNNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiB0cnVlO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUhhc01ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogZmFsc2U7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNNZXRhZGF0YTogZnVuY3Rpb24gaGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNPd25NZXRhZGF0YTogZnVuY3Rpb24gaGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyICRtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9NZXRhS2V5ID0gJG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gJG1ldGFkYXRhLnNldDtcblxuJG1ldGFkYXRhLmV4cCh7IG1ldGFkYXRhOiBmdW5jdGlvbiBtZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShcbiAgICAgIG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLFxuICAgICAgKHRhcmdldEtleSAhPT0gdW5kZWZpbmVkID8gYW5PYmplY3QgOiBhRnVuY3Rpb24pKHRhcmdldCksXG4gICAgICB0b01ldGFLZXkodGFyZ2V0S2V5KVxuICAgICk7XG4gIH07XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIGF0OiBmdW5jdGlvbiBhdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9TdHJpbmcucHJvdG90eXBlLm1hdGNoQWxsL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBnZXRGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgUmVnRXhwUHJvdG8gPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yID0gZnVuY3Rpb24gKHJlZ2V4cCwgc3RyaW5nKSB7XG4gIHRoaXMuX3IgPSByZWdleHA7XG4gIHRoaXMuX3MgPSBzdHJpbmc7XG59O1xuXG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKCRSZWdFeHBTdHJpbmdJdGVyYXRvciwgJ1JlZ0V4cCBTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgbWF0Y2ggPSB0aGlzLl9yLmV4ZWModGhpcy5fcyk7XG4gIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogbWF0Y2ggPT09IG51bGwgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIGRlZmluZWQodGhpcyk7XG4gICAgaWYgKCFpc1JlZ0V4cChyZWdleHApKSB0aHJvdyBUeXBlRXJyb3IocmVnZXhwICsgJyBpcyBub3QgYSByZWdleHAhJyk7XG4gICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgdmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSZWdFeHBQcm90byA/IFN0cmluZyhyZWdleHAuZmxhZ3MpIDogZ2V0RmxhZ3MuY2FsbChyZWdleHApO1xuICAgIHZhciByeCA9IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgfmZsYWdzLmluZGV4T2YoJ2cnKSA/IGZsYWdzIDogJ2cnICsgZmxhZ3MpO1xuICAgIHJ4Lmxhc3RJbmRleCA9IHRvTGVuZ3RoKHJlZ2V4cC5sYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJ4LCBTKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCksICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1MZWZ0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltTGVmdCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMSk7XG4gIH07XG59LCAndHJpbVN0YXJ0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltUmlnaHQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1SaWdodCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMik7XG4gIH07XG59LCAndHJpbUVuZCcpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtTZXQnKTtcbiIsInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CLCB7XG4gIHNldEltbWVkaWF0ZTogJHRhc2suc2V0LFxuICBjbGVhckltbWVkaWF0ZTogJHRhc2suY2xlYXJcbn0pO1xuIiwiLy8gaWU5LSBzZXRUaW1lb3V0ICYgc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChmbiwgdGltZSAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBmYWxzZTtcbiAgICByZXR1cm4gc2V0KGJvdW5kQXJncyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbikpLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gOiBmbiwgdGltZSk7XG4gIH07XG59O1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIgKyAkZXhwb3J0LkYgKiBNU0lFLCB7XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYWNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2JydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNsejMyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5pbXVsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50cnVuYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yYXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJpZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5saW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdWInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1cCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLm5vdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuam9pbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zbGljZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb3J0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29tZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLXNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmhhcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcuYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5jbGFtcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaXN1YmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pbXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgudW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zaWduYml0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hc2FwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmltbWVkaWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9tb2R1bGVzL19jb3JlJyk7XG4iLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCIvKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbnZhciBieXRlVG9IZXggPSBbXTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4W2ldID0gKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1V1aWQoYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBvZmZzZXQgfHwgMDtcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcbiAgLy8gam9pbiB1c2VkIHRvIGZpeCBtZW1vcnkgaXNzdWUgY2F1c2VkIGJ5IGNvbmNhdGVuYXRpb246IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMxNzUjYzRcbiAgcmV0dXJuIChbYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXV0pLmpvaW4oJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xuIiwiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gIEluIHRoZVxuLy8gYnJvd3NlciB0aGlzIGlzIGEgbGl0dGxlIGNvbXBsaWNhdGVkIGR1ZSB0byB1bmtub3duIHF1YWxpdHkgb2YgTWF0aC5yYW5kb20oKVxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxuLy8gZmVhdHVyZS1kZXRlY3Rpb25cblxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvXG4vLyBpbXBsZW1lbnRhdGlvbi4gQWxzbywgZmluZCB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgY3J5cHRvIG9uIElFMTEuXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0bykpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZihtc0NyeXB0bykgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT0gJ2Z1bmN0aW9uJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xuXG5pZiAoZ2V0UmFuZG9tVmFsdWVzKSB7XG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xuICB2YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcbiAgICBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xuICAgIHJldHVybiBybmRzODtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIE1hdGgucmFuZG9tKCktYmFzZWQgKFJORylcbiAgLy9cbiAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHVzZSBNYXRoLnJhbmRvbSgpLiAgSXQncyBmYXN0LCBidXQgaXMgb2YgdW5zcGVjaWZpZWRcbiAgLy8gcXVhbGl0eS5cbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWF0aFJORygpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGlmICgoaSAmIDB4MDMpID09PSAwKSByID0gTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMDAwO1xuICAgICAgcm5kc1tpXSA9IHIgPj4+ICgoaSAmIDB4MDMpIDw8IDMpICYgMHhmZjtcbiAgICB9XG5cbiAgICByZXR1cm4gcm5kcztcbiAgfTtcbn1cbiIsInZhciBybmcgPSByZXF1aXJlKCcuL2xpYi9ybmcnKTtcbnZhciBieXRlc1RvVXVpZCA9IHJlcXVpcmUoJy4vbGliL2J5dGVzVG9VdWlkJyk7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcbiAgICBidWYgPSBvcHRpb25zID09PSAnYmluYXJ5JyA/IG5ldyBBcnJheSgxNikgOiBudWxsO1xuICAgIG9wdGlvbnMgPSBudWxsO1xuICB9XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcblxuICAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcbiAgcm5kc1s4XSA9IChybmRzWzhdICYgMHgzZikgfCAweDgwO1xuXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuICBpZiAoYnVmKSB7XG4gICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDE2OyArK2lpKSB7XG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWYgfHwgYnl0ZXNUb1V1aWQocm5kcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdjQ7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFRpbWVyIH0gZnJvbSAnLi9UaW1lci5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSA2MDsgLy8gc2Vjb25kc1xyXG5cclxuZXhwb3J0IGNsYXNzIEFjY2Vzc1Rva2VuRXZlbnRzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUsXHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyaW5nXCIpLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyZWRcIilcclxuICAgIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcgPSBhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXI7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkID0gYWNjZXNzVG9rZW5FeHBpcmVkVGltZXI7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZChjb250YWluZXIpIHtcclxuICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGV2ZW50cyBpZiB0aGVyZSdzIGFuIGFjY2VzcyB0b2tlbiBhbmQgaXQgaGFzIGFuIGV4cGlyYXRpb25cclxuICAgICAgICBpZiAoY29udGFpbmVyLmFjY2Vzc190b2tlbiAmJiBjb250YWluZXIuZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IGNvbnRhaW5lci5leHBpcmVzX2luO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiBhY2Nlc3MgdG9rZW4gcHJlc2VudCwgcmVtYWluaW5nIGR1cmF0aW9uOlwiLCBkdXJhdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHVyYXRpb24gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGV4cGlyaW5nIGlmIHdlIHN0aWxsIGhhdmUgdGltZVxyXG4gICAgICAgICAgICAgICAgbGV0IGV4cGlyaW5nID0gZHVyYXRpb24gLSB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuICAgICAgICAgICAgICAgIGlmIChleHBpcmluZyA8PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBleHBpcmluZyA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IHJlZ2lzdGVyaW5nIGV4cGlyaW5nIHRpbWVyIGluOlwiLCBleHBpcmluZyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmluaXQoZXhwaXJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogY2FuY2VsaW5nIGV4aXN0aW5nIGV4cGlyaW5nIHRpbWVyIGJlY2FzZSB3ZSdyZSBwYXN0IGV4cGlyYXRpb24uXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaWYgaXQncyBuZWdhdGl2ZSwgaXQgd2lsbCBzdGlsbCBmaXJlXHJcbiAgICAgICAgICAgIGxldCBleHBpcmVkID0gZHVyYXRpb24gKyAxO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiByZWdpc3RlcmluZyBleHBpcmVkIHRpbWVyIGluOlwiLCBleHBpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmluaXQoZXhwaXJlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQuY2FuY2VsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVubG9hZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy51bmxvYWQ6IGNhbmNlbGluZyBleGlzdGluZyBhY2Nlc3MgdG9rZW4gdGltZXJzXCIpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuY2FuY2VsKCk7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcoY2IpIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyhjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRJbnRlcnZhbCA9IDIwMDA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hlY2tTZXNzaW9uSUZyYW1lIHtcclxuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCBjbGllbnRfaWQsIHVybCwgaW50ZXJ2YWwsIHN0b3BPbkVycm9yID0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX3VybCA9IHVybDtcclxuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IGludGVydmFsIHx8IERlZmF1bHRJbnRlcnZhbDtcclxuICAgICAgICB0aGlzLl9zdG9wT25FcnJvciA9IHN0b3BPbkVycm9yO1xyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdXJsLmluZGV4T2YoXCIvXCIsIHVybC5pbmRleE9mKFwiLy9cIikgKyAyKTtcclxuICAgICAgICB0aGlzLl9mcmFtZV9vcmlnaW4gPSB1cmwuc3Vic3RyKDAsIGlkeCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUud2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnNyYyA9IHVybDtcclxuICAgIH1cclxuICAgIGxvYWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCA9IHRoaXMuX21lc3NhZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfbWVzc2FnZShlKSB7XHJcbiAgICAgICAgaWYgKGUub3JpZ2luID09PSB0aGlzLl9mcmFtZV9vcmlnaW4gJiZcclxuICAgICAgICAgICAgZS5zb3VyY2UgPT09IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3dcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKGUuZGF0YSA9PT0gXCJlcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJDaGVja1Nlc3Npb25JRnJhbWU6IGVycm9yIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdG9wT25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGUuZGF0YSA9PT0gXCJjaGFuZ2VkXCIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZTogY2hhbmdlZCBtZXNzYWdlIGZyb20gY2hlY2sgc2Vzc2lvbiBvcCBpZnJhbWVcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWU6IFwiICsgZS5kYXRhICsgXCIgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhcnQoc2Vzc2lvbl9zdGF0ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uX3N0YXRlICE9PSBzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdGFydFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbl9zdGF0ZSA9IHNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgICAgICBsZXQgc2VuZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UodGhpcy5fY2xpZW50X2lkICsgXCIgXCIgKyB0aGlzLl9zZXNzaW9uX3N0YXRlLCB0aGlzLl9mcmFtZV9vcmlnaW4pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gdHJpZ2dlciBub3dcclxuICAgICAgICAgICAgc2VuZCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gYW5kIHNldHVwIHRpbWVyXHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gd2luZG93LnNldEludGVydmFsKHNlbmQsIHRoaXMuX2ludGVydmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zZXNzaW9uX3N0YXRlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdG9wXCIpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IENvcmRvdmFQb3B1cFdpbmRvdyB9IGZyb20gJy4vQ29yZG92YVBvcHVwV2luZG93LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKHBhcmFtcykge1xyXG4gICAgICAgIHBhcmFtcy5wb3B1cFdpbmRvd0ZlYXR1cmVzID0gJ2hpZGRlbj15ZXMnO1xyXG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBDb3Jkb3ZhUG9wdXBXaW5kb3cocGFyYW1zKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBXaW5kb3cgfSBmcm9tICcuL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZG92YVBvcHVwTmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKHBhcmFtcykge1xyXG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBDb3Jkb3ZhUG9wdXBXaW5kb3cocGFyYW1zKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHpvb209bm8nO1xyXG5jb25zdCBEZWZhdWx0UG9wdXBUYXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvcmRvdmFQb3B1cFdpbmRvdyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5mZWF0dXJlcyA9IHBhcmFtcy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IERlZmF1bHRQb3B1cEZlYXR1cmVzO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gcGFyYW1zLnBvcHVwV2luZG93VGFyZ2V0IHx8IERlZmF1bHRQb3B1cFRhcmdldDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnJlZGlyZWN0X3VyaSA9IHBhcmFtcy5zdGFydFVybDtcclxuICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3cuY3RvcjogcmVkaXJlY3RfdXJpOiBcIiArIHRoaXMucmVkaXJlY3RfdXJpKTtcclxuICAgIH1cclxuXHJcbiAgICBfaXNJbkFwcEJyb3dzZXJJbnN0YWxsZWQoY29yZG92YU1ldGFkYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcImNvcmRvdmEtcGx1Z2luLWluYXBwYnJvd3NlclwiLCBcImNvcmRvdmEtcGx1Z2luLWluYXBwYnJvd3Nlci5pbmFwcGJyb3dzZXJcIiwgXCJvcmcuYXBhY2hlLmNvcmRvdmEuaW5hcHBicm93c2VyXCJdLnNvbWUoZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvcmRvdmFNZXRhZGF0YS5oYXNPd25Qcm9wZXJ0eShuYW1lKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghd2luZG93LmNvcmRvdmEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvcihcImNvcmRvdmEgaXMgdW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBjb3Jkb3ZhTWV0YWRhdGEgPSB3aW5kb3cuY29yZG92YS5yZXF1aXJlKFwiY29yZG92YS9wbHVnaW5fbGlzdFwiKS5tZXRhZGF0YTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW5BcHBCcm93c2VySW5zdGFsbGVkKGNvcmRvdmFNZXRhZGF0YSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3IoXCJJbkFwcEJyb3dzZXIgcGx1Z2luIG5vdCBmb3VuZFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwID0gY29yZG92YS5JbkFwcEJyb3dzZXIub3BlbihwYXJhbXMudXJsLCB0aGlzLnRhcmdldCwgdGhpcy5mZWF0dXJlcyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wb3B1cCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93Lm5hdmlnYXRlOiBwb3B1cCBzdWNjZXNzZnVsbHkgY3JlYXRlZFwiKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQgPSB0aGlzLl9leGl0Q2FsbGJhY2suYmluZCh0aGlzKTsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50ID0gdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wdXAuYWRkRXZlbnRMaXN0ZW5lcihcImV4aXRcIiwgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVwLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2Fkc3RhcnRcIiwgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJFcnJvciBvcGVuaW5nIHBvcHVwIHdpbmRvd1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9taXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkU3RhcnRDYWxsYmFjayhldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC51cmwuaW5kZXhPZih0aGlzLnJlZGlyZWN0X3VyaSkgPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogZXZlbnQudXJsIH0pO1xyXG4gICAgICAgIH0gICAgXHJcbiAgICB9XHJcbiAgICBfZXhpdENhbGxiYWNrKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9lcnJvcihtZXNzYWdlKTsgICAgXHJcbiAgICB9XHJcbiAgICBcclxuICAgIF9zdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdzogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGNvcmRvdmEgcG9wdXAgd2luZG93XCIpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBfZXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuXHJcbiAgICAgICAgTG9nLmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBfY2xlYW51cCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcG9wdXApe1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3c6IGNsZWFuaW5nIHVwIHBvcHVwXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXhpdFwiLCB0aGlzLl9leGl0Q2FsbGJhY2tFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZHN0YXJ0XCIsIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcG9wdXAgPSBudWxsO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFcnJvclJlc3BvbnNlIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3Ioe2Vycm9yLCBlcnJvcl9kZXNjcmlwdGlvbiwgZXJyb3JfdXJpLCBzdGF0ZX09e31cclxuICAgICkge1xyXG4gICAgICAgICBpZiAoIWVycm9yKXtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiTm8gZXJyb3IgcGFzc2VkIHRvIEVycm9yUmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVycm9yXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3VwZXIoZXJyb3JfZGVzY3JpcHRpb24gfHwgZXJyb3IpO1xyXG5cclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkVycm9yUmVzcG9uc2VcIjtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBlcnJvcl9kZXNjcmlwdGlvbjtcclxuICAgICAgICB0aGlzLmVycm9yX3VyaSA9IGVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFdmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IobmFtZSkge1xyXG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEhhbmRsZXIoY2IpIHtcclxuICAgICAgICB0aGlzLl9jYWxsYmFja3MucHVzaChjYik7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSGFuZGxlcihjYikge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jYWxsYmFja3MuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gY2IpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3Muc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJhaXNlKC4uLnBhcmFtcykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkV2ZW50OiBSYWlzaW5nIGV2ZW50OiBcIiArIHRoaXMuX25hbWUpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1tpXSguLi5wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5jb25zdCB0aW1lciA9IHtcclxuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoY2IsIGR1cmF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsKGNiLCBkdXJhdGlvbik7XHJcbiAgICB9LFxyXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xyXG4gICAgICAgIHJldHVybiBjbGVhckludGVydmFsKGhhbmRsZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5sZXQgdGVzdGluZyA9IGZhbHNlO1xyXG5sZXQgcmVxdWVzdCA9IG51bGw7XHJcblxyXG5leHBvcnQgY2xhc3MgR2xvYmFsIHtcclxuXHJcbiAgICBzdGF0aWMgX3Rlc3RpbmcoKSB7XHJcbiAgICAgICAgdGVzdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsb2NhdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGxvY2FsU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBzZXNzaW9uU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2V0WE1MSHR0cFJlcXVlc3QobmV3UmVxdWVzdCkge1xyXG4gICAgICAgIHJlcXVlc3QgPSBuZXdSZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgWE1MSHR0cFJlcXVlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0IHx8IFhNTEh0dHBSZXF1ZXN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHRpbWVyKCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGltZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSUZyYW1lV2luZG93IH0gZnJvbSAnLi9JRnJhbWVXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgZnJhbWUgPSBuZXcgSUZyYW1lV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmcmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lTmF2aWdhdG9yLmNhbGxiYWNrXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50KHVybCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0VGltZW91dCA9IDEwMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZVdpbmRvdyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUud2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2ZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gcGFyYW1zLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IERlZmF1bHRUaW1lb3V0O1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubmF2aWdhdGU6IFVzaW5nIHRpbWVvdXQgb2Y6XCIsIHRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuX3RpbWVvdXQuYmluZCh0aGlzKSwgdGltZW91dCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLnNyYyA9IHBhcmFtcy51cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9taXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdzogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGZyYW1lIHdpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdzogY2xlYW51cFwiKTtcclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcclxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3RpbWVvdXQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93LnRpbWVvdXRcIik7XHJcbiAgICAgICAgdGhpcy5fZXJyb3IoXCJGcmFtZSB3aW5kb3cgdGltZWQgb3V0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIF9tZXNzYWdlKGUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubWVzc2FnZVwiKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyICYmXHJcbiAgICAgICAgICAgIGUub3JpZ2luID09PSB0aGlzLl9vcmlnaW4gJiZcclxuICAgICAgICAgICAgZS5zb3VyY2UgPT09IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3dcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IHVybCA9IGUuZGF0YTtcclxuICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogdXJsIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIGZyb20gZnJhbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9vcmlnaW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbm90aWZ5UGFyZW50KHVybCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5ub3RpZnlQYXJlbnRcIik7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50OiBwb3N0aW5nIHVybCBtZXNzYWdlIHRvIHBhcmVudFwiKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UodXJsLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJbk1lbW9yeVdlYlN0b3JhZ2V7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtKGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5nZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJdGVtKGtleSwgdmFsdWUpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5zZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgdGhpcy5fZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSXRlbShrZXkpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5yZW1vdmVJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9kYXRhKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAga2V5KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX2RhdGEpW2luZGV4XTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0gZnJvbSAnLi9jcnlwdG8vanNyc2FzaWduJztcclxuaW1wb3J0IGdldEpvc2VVdGlsIGZyb20gJy4vSm9zZVV0aWxJbXBsJztcclxuXHJcbmV4cG9ydCBjb25zdCBKb3NlVXRpbCA9IGdldEpvc2VVdGlsKHsgandzLCBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXgsIEFsbG93ZWRTaWduaW5nQWxncyB9KTtcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pIHtcclxuICAgIHJldHVybiBjbGFzcyBKb3NlVXRpbCB7XHJcblxyXG4gICAgICAgIHN0YXRpYyBwYXJzZUp3dChqd3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwucGFyc2VKd3RcIik7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBqd3MuSldTLnBhcnNlKGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogdG9rZW4uaGVhZGVyT2JqLFxyXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRva2VuLnBheWxvYWRPYmpcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3Qoand0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwudmFsaWRhdGVKd3RcIik7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleS5rdHkgPT09IFwiUlNBXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmUgJiYga2V5Lm4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS54NWMgJiYga2V5Lng1Yy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IGI2NHRvaGV4KGtleS54NWNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGhleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lmt0eSA9PT0gXCJFQ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5jcnYgJiYga2V5LnggJiYga2V5LnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogRUMga2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJFQyBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFVuc3VwcG9ydGVkIGtleSB0eXBlXCIsIGtleSAmJiBrZXkua3R5KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2V5IHR5cGU6IFwiICsga2V5ICYmIGtleS5rdHkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwuX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUgJiYgZS5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiSldUIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWNsb2NrU2tldykge1xyXG4gICAgICAgICAgICAgICAgY2xvY2tTa2V3ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFub3cpIHtcclxuICAgICAgICAgICAgICAgIG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBKb3NlVXRpbC5wYXJzZUp3dChqd3QpLnBheWxvYWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQuaXNzKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGF5bG9hZC5pc3MgIT09IGlzc3Vlcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBJbnZhbGlkIGlzc3VlciBpbiB0b2tlblwiLCBwYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBpc3N1ZXIgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5pc3MpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF1ZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBhdWQgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdWQgd2FzIG5vdCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHZhbGlkQXVkaWVuY2UgPSBwYXlsb2FkLmF1ZCA9PT0gYXVkaWVuY2UgfHwgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdWQpICYmIHBheWxvYWQuYXVkLmluZGV4T2YoYXVkaWVuY2UpID49IDApO1xyXG4gICAgICAgICAgICBpZiAoIXZhbGlkQXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlblwiLCBwYXlsb2FkLmF1ZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlbjogXCIgKyBwYXlsb2FkLmF1ZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gYXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhenAgaW4gdG9rZW5cIiwgcGF5bG9hZC5henApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgYXpwIGluIHRva2VuOiBcIiArIHBheWxvYWQuYXpwKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGltZUluc2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG93ZXJOb3cgPSBub3cgKyBjbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXBwZXJOb3cgPSBub3cgLSBjbG9ja1NrZXc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlhdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogaWF0IHdhcyBub3QgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsb3dlck5vdyA8IHBheWxvYWQuaWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpYXQgaXMgaW4gdGhlIGZ1dHVyZVwiLCBwYXlsb2FkLmlhdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCBpcyBpbiB0aGUgZnV0dXJlOiBcIiArIHBheWxvYWQuaWF0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubmJmICYmIGxvd2VyTm93IDwgcGF5bG9hZC5uYmYpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IG5iZiBpcyBpbiB0aGUgZnV0dXJlXCIsIHBheWxvYWQubmJmKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibmJmIGlzIGluIHRoZSBmdXR1cmU6IFwiICsgcGF5bG9hZC5uYmYpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZXhwIHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZXhwIDwgdXBwZXJOb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGV4cCBpcyBpbiB0aGUgcGFzdFwiLCBwYXlsb2FkLmV4cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImV4cCBpcyBpbiB0aGUgcGFzdDpcIiArIHBheWxvYWQuZXhwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd3MuSldTLnZlcmlmeShqd3QsIGtleSwgQWxsb3dlZFNpZ25pbmdBbGdzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IHNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhhc2hTdHJpbmcodmFsdWUsIGFsZykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5VdGlsLmhhc2hTdHJpbmcodmFsdWUsIGFsZyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhleFRvQmFzZTY0VXJsKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaGV4dG9iNjR1KHZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZW50VHlwZXMgPSBudWxsLCBcclxuICAgICAgICBYTUxIdHRwUmVxdWVzdEN0b3IgPSBHbG9iYWwuWE1MSHR0cFJlcXVlc3QsIFxyXG4gICAgICAgIGp3dEhhbmRsZXIgPSBudWxsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbENvbnRlbnRUeXBlcyAmJiBBcnJheS5pc0FycmF5KGFkZGl0aW9uYWxDb250ZW50VHlwZXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzID0gYWRkaXRpb25hbENvbnRlbnRUeXBlcy5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGVudFR5cGVzLnB1c2goJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgICAgICBpZiAoand0SGFuZGxlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMucHVzaCgnYXBwbGljYXRpb24vand0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9YTUxIdHRwUmVxdWVzdCA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9qd3RIYW5kbGVyID0gand0SGFuZGxlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRKc29uKHVybCwgdG9rZW4pIHtcclxuICAgICAgICBpZiAoIXVybCl7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb24sIHVybDogXCIsIHVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFsbG93ZWRDb250ZW50VHlwZXMgPSB0aGlzLl9jb250ZW50VHlwZXM7XHJcbiAgICAgICAgICAgIHZhciBqd3RIYW5kbGVyID0gdGhpcy5fand0SGFuZGxlcjtcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb246IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCByZXEuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBcImFwcGxpY2F0aW9uL2p3dFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqd3RIYW5kbGVyKHJlcSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogbmV0d29yayBlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uOiB0b2tlbiBwYXNzZWQsIHNldHRpbmcgQXV0aG9yaXphdGlvbiBoZWFkZXJcIik7XHJcbiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIgKyB0b2tlbik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEZvcm0odXJsLCBwYXlsb2FkKSB7XHJcbiAgICAgICAgaWYgKCF1cmwpe1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UucG9zdEZvcm0sIHVybDogXCIsIHVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHJlcS5vcGVuKCdQT1NUJywgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhbGxvd2VkQ29udGVudFR5cGVzID0gdGhpcy5fY29udGVudFR5cGVzO1xyXG5cclxuICAgICAgICAgICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCByZXEuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UocmVxLnJlc3BvbnNlVGV4dCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gNDAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF5bG9hZCA9IEpTT04ucGFyc2UocmVxLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgZnJvbSBzZXJ2ZXI6IFwiLCBwYXlsb2FkLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihwYXlsb2FkLmVycm9yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihyZXEuc3RhdHVzVGV4dCArIFwiIChcIiArIHJlcS5zdGF0dXMgKyBcIilcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBuZXR3b3JrIGVycm9yXCIpO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiTmV0d29yayBFcnJvclwiKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBsZXQgYm9keSA9IFwiXCI7XHJcbiAgICAgICAgICAgIGZvcihsZXQga2V5IGluIHBheWxvYWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBwYXlsb2FkW2tleV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSArPSBcIiZcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSArPSBcIj1cIjtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xyXG4gICAgICAgICAgICByZXEuc2VuZChib2R5KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5sZXQgbm9wTG9nZ2VyID0ge1xyXG4gICAgZGVidWcoKXt9LFxyXG4gICAgaW5mbygpe30sXHJcbiAgICB3YXJuKCl7fSxcclxuICAgIGVycm9yKCl7fVxyXG59O1xyXG5cclxuY29uc3QgTk9ORSA9IDA7XHJcbmNvbnN0IEVSUk9SID0gMTtcclxuY29uc3QgV0FSTiA9IDI7XHJcbmNvbnN0IElORk8gPSAzO1xyXG5jb25zdCBERUJVRyA9IDQ7XHJcblxyXG5sZXQgbG9nZ2VyO1xyXG5sZXQgbGV2ZWw7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9nIHtcclxuICAgIHN0YXRpYyBnZXQgTk9ORSgpIHtyZXR1cm4gTk9ORX07XHJcbiAgICBzdGF0aWMgZ2V0IEVSUk9SKCkge3JldHVybiBFUlJPUn07XHJcbiAgICBzdGF0aWMgZ2V0IFdBUk4oKSB7cmV0dXJuIFdBUk59O1xyXG4gICAgc3RhdGljIGdldCBJTkZPKCkge3JldHVybiBJTkZPfTtcclxuICAgIHN0YXRpYyBnZXQgREVCVUcoKSB7cmV0dXJuIERFQlVHfTtcclxuICAgIFxyXG4gICAgc3RhdGljIHJlc2V0KCl7XHJcbiAgICAgICAgbGV2ZWwgPSBJTkZPO1xyXG4gICAgICAgIGxvZ2dlciA9IG5vcExvZ2dlcjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGdldCBsZXZlbCgpe1xyXG4gICAgICAgIHJldHVybiBsZXZlbDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzZXQgbGV2ZWwodmFsdWUpe1xyXG4gICAgICAgIGlmIChOT05FIDw9IHZhbHVlICYmIHZhbHVlIDw9IERFQlVHKXtcclxuICAgICAgICAgICAgbGV2ZWwgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nIGxldmVsXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGdldCBsb2dnZXIoKXtcclxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHNldCBsb2dnZXIodmFsdWUpe1xyXG4gICAgICAgIGlmICghdmFsdWUuZGVidWcgJiYgdmFsdWUuaW5mbykge1xyXG4gICAgICAgICAgICAvLyBqdXN0IHRvIHN0YXkgYmFja3dhcmRzIGNvbXBhdC4gY2FuIHJlbW92ZSBpbiAyLjBcclxuICAgICAgICAgICAgdmFsdWUuZGVidWcgPSB2YWx1ZS5pbmZvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlLmRlYnVnICYmIHZhbHVlLmluZm8gJiYgdmFsdWUud2FybiAmJiB2YWx1ZS5lcnJvcil7XHJcbiAgICAgICAgICAgIGxvZ2dlciA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsb2dnZXJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdGF0aWMgZGVidWcoLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IERFQlVHKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGluZm8oLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IElORk8pe1xyXG4gICAgICAgICAgICBsb2dnZXIuaW5mby5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyB3YXJuKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBXQVJOKXtcclxuICAgICAgICAgICAgbG9nZ2VyLndhcm4uYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZXJyb3IoLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IEVSUk9SKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5Mb2cucmVzZXQoKTtcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5cclxuY29uc3QgT2lkY01ldGFkYXRhVXJsUGF0aCA9ICcud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbic7XHJcblxyXG5leHBvcnQgY2xhc3MgTWV0YWRhdGFTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlOiBObyBzZXR0aW5ncyBwYXNzZWQgdG8gTWV0YWRhdGFTZXJ2aWNlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKFsnYXBwbGljYXRpb24vandrLXNldCtqc29uJ10pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtZXRhZGF0YVVybCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX21ldGFkYXRhVXJsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YVVybDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybCAmJiB0aGlzLl9tZXRhZGF0YVVybC5pbmRleE9mKE9pZGNNZXRhZGF0YVVybFBhdGgpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybFt0aGlzLl9tZXRhZGF0YVVybC5sZW5ndGggLSAxXSAhPT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9ICcvJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgKz0gT2lkY01ldGFkYXRhVXJsUGF0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1ldGFkYXRhKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IFJldHVybmluZyBtZXRhZGF0YSBmcm9tIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IE5vIGF1dGhvcml0eSBvciBtZXRhZGF0YVVybCBjb25maWd1cmVkIG9uIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXV0aG9yaXR5IG9yIG1ldGFkYXRhVXJsIGNvbmZpZ3VyZWQgb24gc2V0dGluZ3NcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBnZXR0aW5nIG1ldGFkYXRhIGZyb21cIiwgdGhpcy5tZXRhZGF0YVVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKHRoaXMubWV0YWRhdGFVcmwpXHJcbiAgICAgICAgICAgIC50aGVuKG1ldGFkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YToganNvbiByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhID0gbWV0YWRhdGE7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldElzc3VlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImlzc3VlclwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJhdXRob3JpemF0aW9uX2VuZHBvaW50XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJJbmZvRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJ1c2VyaW5mb19lbmRwb2ludFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUb2tlbkVuZHBvaW50KG9wdGlvbmFsPXRydWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInRva2VuX2VuZHBvaW50XCIsIG9wdGlvbmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGVja1Nlc3Npb25JZnJhbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJjaGVja19zZXNzaW9uX2lmcmFtZVwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbmRTZXNzaW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJlbmRfc2Vzc2lvbl9lbmRwb2ludFwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXZvY2F0aW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJyZXZvY2F0aW9uX2VuZHBvaW50XCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEtleXNFbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImp3a3NfdXJpXCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF9nZXRNZXRhZGF0YVByb3BlcnR5KG5hbWUsIG9wdGlvbmFsPWZhbHNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHkgZm9yOiBcIiArIG5hbWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogbWV0YWRhdGEgcmVjaWV2ZWRcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAobWV0YWRhdGFbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25hbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IE1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gb3B0aW9uYWwgcHJvcGVydHkgXCIgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IE1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gcHJvcGVydHkgXCIgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIHByb3BlcnR5IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YVtuYW1lXTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaWduaW5nS2V5cygpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBSZXR1cm5pbmcgc2lnbmluZ0tleXMgZnJvbSBzZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImp3a3NfdXJpXCIpLnRoZW4oandrc191cmkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IGp3a3NfdXJpIHJlY2VpdmVkXCIsIGp3a3NfdXJpKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKGp3a3NfdXJpKS50aGVuKGtleVNldCA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IGtleSBzZXQgcmVjZWl2ZWRcIiwga2V5U2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWtleVNldC5rZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBNaXNzaW5nIGtleXMgb24ga2V5c2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcga2V5cyBvbiBrZXlzZXRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMgPSBrZXlTZXQua2V5cztcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuL0Vycm9yUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5SZXF1ZXN0IH0gZnJvbSAnLi9TaWduaW5SZXF1ZXN0LmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVzcG9uc2UgfSBmcm9tICcuL1NpZ25pblJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgU2lnbm91dFJlcXVlc3QgfSBmcm9tICcuL1NpZ25vdXRSZXF1ZXN0LmpzJztcclxuaW1wb3J0IHsgU2lnbm91dFJlc3BvbnNlIH0gZnJvbSAnLi9TaWdub3V0UmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE9pZGNDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MgPSB7fSkge1xyXG4gICAgICAgIGlmIChzZXR0aW5ncyBpbnN0YW5jZW9mIE9pZGNDbGllbnRTZXR0aW5ncykge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBuZXcgT2lkY0NsaWVudFNldHRpbmdzKHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9zdGF0ZVN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnN0YXRlU3RvcmU7XHJcbiAgICB9XHJcbiAgICBnZXQgX3ZhbGlkYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy52YWxpZGF0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX21ldGFkYXRhU2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcclxuICAgIH1cclxuICAgIGdldCBtZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTaWduaW5SZXF1ZXN0KHtcclxuICAgICAgICByZXNwb25zZV90eXBlLCBzY29wZSwgcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIC8vIGRhdGEgd2FzIG1lYW50IHRvIGJlIHRoZSBwbGFjZSBhIGNhbGxlciBjb3VsZCBpbmRpY2F0ZSB0aGUgZGF0YSB0b1xyXG4gICAgICAgIC8vIGhhdmUgcm91bmQgdHJpcHBlZCwgYnV0IHBlb3BsZSB3ZXJlIGdldHRpbmcgY29uZnVzZWQsIHNvIGkgYWRkZWQgc3RhdGUgKHNpbmNlIHRoYXQgbWF0Y2hlcyB0aGUgc3BlYylcclxuICAgICAgICAvLyBhbmQgc28gbm93IGlmIGRhdGEgaXMgbm90IHBhc3NlZCwgYnV0IHN0YXRlIGlzIHRoZW4gc3RhdGUgd2lsbCBiZSB1c2VkXHJcbiAgICAgICAgZGF0YSwgc3RhdGUsIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcyxcclxuICAgICAgICByZXNvdXJjZSwgcmVxdWVzdCwgcmVxdWVzdF91cmksIHJlc3BvbnNlX21vZGUsIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSB9ID0ge30sXHJcbiAgICAgICAgc3RhdGVTdG9yZVxyXG4gICAgKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWduaW5SZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICBsZXQgY2xpZW50X2lkID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgIHJlc3BvbnNlX3R5cGUgPSByZXNwb25zZV90eXBlIHx8IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX3R5cGU7XHJcbiAgICAgICAgc2NvcGUgPSBzY29wZSB8fCB0aGlzLl9zZXR0aW5ncy5zY29wZTtcclxuICAgICAgICByZWRpcmVjdF91cmkgPSByZWRpcmVjdF91cmkgfHwgdGhpcy5fc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG5cclxuICAgICAgICAvLyBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50IGFyZW4ndCBhbGxvd2VkIG9uIF9zZXR0aW5nc1xyXG4gICAgICAgIHByb21wdCA9IHByb21wdCB8fCB0aGlzLl9zZXR0aW5ncy5wcm9tcHQ7XHJcbiAgICAgICAgZGlzcGxheSA9IGRpc3BsYXkgfHwgdGhpcy5fc2V0dGluZ3MuZGlzcGxheTtcclxuICAgICAgICBtYXhfYWdlID0gbWF4X2FnZSB8fCB0aGlzLl9zZXR0aW5ncy5tYXhfYWdlO1xyXG4gICAgICAgIHVpX2xvY2FsZXMgPSB1aV9sb2NhbGVzIHx8IHRoaXMuX3NldHRpbmdzLnVpX2xvY2FsZXM7XHJcbiAgICAgICAgYWNyX3ZhbHVlcyA9IGFjcl92YWx1ZXMgfHwgdGhpcy5fc2V0dGluZ3MuYWNyX3ZhbHVlcztcclxuICAgICAgICByZXNvdXJjZSA9IHJlc291cmNlIHx8IHRoaXMuX3NldHRpbmdzLnJlc291cmNlO1xyXG4gICAgICAgIHJlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlIHx8IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGU7XHJcbiAgICAgICAgZXh0cmFRdWVyeVBhcmFtcyA9IGV4dHJhUXVlcnlQYXJhbXMgfHwgdGhpcy5fc2V0dGluZ3MuZXh0cmFRdWVyeVBhcmFtcztcclxuXHJcbiAgICAgICAgbGV0IGF1dGhvcml0eSA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgaWYgKFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpICYmIHJlc3BvbnNlX3R5cGUgIT09IFwiY29kZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJPcGVuSUQgQ29ubmVjdCBoeWJyaWQgZmxvdyBpcyBub3Qgc3VwcG9ydGVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25pblJlcXVlc3Q6IFJlY2VpdmVkIGF1dGhvcml6YXRpb24gZW5kcG9pbnRcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBzaWduaW5SZXF1ZXN0ID0gbmV3IFNpZ25pblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50X2lkLFxyXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZSxcclxuICAgICAgICAgICAgICAgIHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGF1dGhvcml0eSxcclxuICAgICAgICAgICAgICAgIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcyxcclxuICAgICAgICAgICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlLCByZXNwb25zZV9tb2RlXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZ25pblN0YXRlID0gc2lnbmluUmVxdWVzdC5zdGF0ZTtcclxuICAgICAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZVN0b3JlLnNldChzaWduaW5TdGF0ZS5pZCwgc2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pblJlcXVlc3Q7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgcmVtb3ZlU3RhdGUgPSBmYWxzZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIGxldCB1c2VRdWVyeSA9IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGUgPT09IFwicXVlcnlcIiB8fCBcclxuICAgICAgICAgICAgKCF0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlICYmIFNpZ25pblJlcXVlc3QuaXNDb2RlKHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX3R5cGUpKTtcclxuICAgICAgICBsZXQgZGVsaW1pdGVyID0gdXNlUXVlcnkgPyBcIj9cIiA6IFwiI1wiO1xyXG5cclxuICAgICAgICB2YXIgcmVzcG9uc2UgPSBuZXcgU2lnbmluUmVzcG9uc2UodXJsLCBkZWxpbWl0ZXIpO1xyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIHN0YXRlIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3RhdGUgaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgdmFyIHN0YXRlQXBpID0gcmVtb3ZlU3RhdGUgPyBzdGF0ZVN0b3JlLnJlbW92ZS5iaW5kKHN0YXRlU3RvcmUpIDogc3RhdGVTdG9yZS5nZXQuYmluZChzdGF0ZVN0b3JlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0YXRlQXBpKHJlc3BvbnNlLnN0YXRlKS50aGVuKHN0b3JlZFN0YXRlU3RyaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzdG9yZWRTdGF0ZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5yZWFkU2lnbmluUmVzcG9uc2VTdGF0ZTogTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IFNpZ25pblN0YXRlLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JlZFN0YXRlU3RyaW5nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtzdGF0ZSwgcmVzcG9uc2V9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NTaWduaW5SZXNwb25zZSh1cmwsIHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWduaW5SZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25pblJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCB0cnVlKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWduaW5SZXNwb25zZTogUmVjZWl2ZWQgc3RhdGUgZnJvbSBzdG9yYWdlOyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTaWdub3V0UmVxdWVzdCh7aWRfdG9rZW5faGludCwgZGF0YSwgc3RhdGUsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlIH0gPSB7fSxcclxuICAgICAgICBzdGF0ZVN0b3JlXHJcbiAgICApIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5fc2V0dGluZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSBleHRyYVF1ZXJ5UGFyYW1zIHx8IHRoaXMuX3NldHRpbmdzLmV4dHJhUXVlcnlQYXJhbXM7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0RW5kU2Vzc2lvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdDogTm8gZW5kIHNlc3Npb24gZW5kcG9pbnQgdXJsIHJldHVybmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZW5kIHNlc3Npb24gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFJlY2VpdmVkIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IG5ldyBTaWdub3V0UmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgICAgICBpZF90b2tlbl9oaW50LFxyXG4gICAgICAgICAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGV4dHJhUXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0X3R5cGVcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2lnbm91dFN0YXRlID0gcmVxdWVzdC5zdGF0ZTtcclxuICAgICAgICAgICAgaWYgKHNpZ25vdXRTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdDogU2lnbm91dCByZXF1ZXN0IGhhcyBzdGF0ZSB0byBwZXJzaXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZVN0b3JlLnNldChzaWdub3V0U3RhdGUuaWQsIHNpZ25vdXRTdGF0ZS50b1N0b3JhZ2VTdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHJlbW92ZVN0YXRlID0gZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZVwiKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25vdXRSZXNwb25zZSh1cmwpO1xyXG4gICAgICAgIGlmICghcmVzcG9uc2Uuc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGU6IE5vIHN0YXRlIGluIHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cud2FybihcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBSZXNwb25zZSB3YXMgZXJyb3I6IFwiLCByZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7dW5kZWZpbmVkLCByZXNwb25zZX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXRlS2V5ID0gcmVzcG9uc2Uuc3RhdGU7XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XHJcbiAgICAgICAgcmV0dXJuIHN0YXRlQXBpKHN0YXRlS2V5KS50aGVuKHN0b3JlZFN0YXRlU3RyaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzdG9yZWRTdGF0ZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBTdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhzdG9yZWRTdGF0ZVN0cmluZyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge3N0YXRlLCByZXNwb25zZX07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2Vzc1NpZ25vdXRSZXNwb25zZSh1cmwsIHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWdub3V0UmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHRydWUpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZTogUmVjZWl2ZWQgc3RhdGUgZnJvbSBzdG9yYWdlOyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJTdGFsZVN0YXRlKHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNsZWFyU3RhbGVTdGF0ZVwiKTtcclxuXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFN0YXRlLmNsZWFyU3RhbGVTdGF0ZShzdGF0ZVN0b3JlLCB0aGlzLnNldHRpbmdzLnN0YWxlU3RhdGVBZ2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgV2ViU3RvcmFnZVN0YXRlU3RvcmUgfSBmcm9tICcuL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzJztcclxuaW1wb3J0IHsgUmVzcG9uc2VWYWxpZGF0b3IgfSBmcm9tICcuL1Jlc3BvbnNlVmFsaWRhdG9yLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5cclxuY29uc3QgT2lkY01ldGFkYXRhVXJsUGF0aCA9ICcud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbic7XHJcblxyXG5jb25zdCBEZWZhdWx0UmVzcG9uc2VUeXBlID0gXCJpZF90b2tlblwiO1xyXG5jb25zdCBEZWZhdWx0U2NvcGUgPSBcIm9wZW5pZFwiO1xyXG5jb25zdCBEZWZhdWx0U3RhbGVTdGF0ZUFnZSA9IDYwICogMTU7IC8vIHNlY29uZHNcclxuY29uc3QgRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyA9IDYwICogNTtcclxuXHJcbmV4cG9ydCBjbGFzcyBPaWRjQ2xpZW50U2V0dGluZ3Mge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIC8vIG1ldGFkYXRhIHJlbGF0ZWRcclxuICAgICAgICBhdXRob3JpdHksIG1ldGFkYXRhVXJsLCBtZXRhZGF0YSwgc2lnbmluZ0tleXMsXHJcbiAgICAgICAgLy8gY2xpZW50IHJlbGF0ZWRcclxuICAgICAgICBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHJlc3BvbnNlX3R5cGUgPSBEZWZhdWx0UmVzcG9uc2VUeXBlLCBzY29wZSA9IERlZmF1bHRTY29wZSxcclxuICAgICAgICByZWRpcmVjdF91cmksIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICAvLyBvcHRpb25hbCBwcm90b2NvbFxyXG4gICAgICAgIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgYWNyX3ZhbHVlcywgcmVzb3VyY2UsIHJlc3BvbnNlX21vZGUsXHJcbiAgICAgICAgLy8gYmVoYXZpb3IgZmxhZ3NcclxuICAgICAgICBmaWx0ZXJQcm90b2NvbENsYWltcyA9IHRydWUsIGxvYWRVc2VySW5mbyA9IHRydWUsXHJcbiAgICAgICAgc3RhbGVTdGF0ZUFnZSA9IERlZmF1bHRTdGFsZVN0YXRlQWdlLCBjbG9ja1NrZXcgPSBEZWZhdWx0Q2xvY2tTa2V3SW5TZWNvbmRzLFxyXG4gICAgICAgIHVzZXJJbmZvSnd0SXNzdWVyID0gJ09QJyxcclxuICAgICAgICAvLyBvdGhlciBiZWhhdmlvclxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBuZXcgV2ViU3RvcmFnZVN0YXRlU3RvcmUoKSxcclxuICAgICAgICBSZXNwb25zZVZhbGlkYXRvckN0b3IgPSBSZXNwb25zZVZhbGlkYXRvcixcclxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgICAgIC8vIGV4dHJhIHF1ZXJ5IHBhcmFtc1xyXG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSB7fVxyXG4gICAgfSA9IHt9KSB7XHJcblxyXG4gICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IGF1dGhvcml0eTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IG1ldGFkYXRhVXJsO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhID0gbWV0YWRhdGE7XHJcbiAgICAgICAgdGhpcy5fc2lnbmluZ0tleXMgPSBzaWduaW5nS2V5cztcclxuXHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX3R5cGUgPSByZXNwb25zZV90eXBlO1xyXG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJvbXB0ID0gcHJvbXB0O1xyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXkgPSBkaXNwbGF5O1xyXG4gICAgICAgIHRoaXMuX21heF9hZ2UgPSBtYXhfYWdlO1xyXG4gICAgICAgIHRoaXMuX3VpX2xvY2FsZXMgPSB1aV9sb2NhbGVzO1xyXG4gICAgICAgIHRoaXMuX2Fjcl92YWx1ZXMgPSBhY3JfdmFsdWVzO1xyXG4gICAgICAgIHRoaXMuX3Jlc291cmNlID0gcmVzb3VyY2U7XHJcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VfbW9kZSA9IHJlc3BvbnNlX21vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zID0gISFmaWx0ZXJQcm90b2NvbENsYWltcztcclxuICAgICAgICB0aGlzLl9sb2FkVXNlckluZm8gPSAhIWxvYWRVc2VySW5mbztcclxuICAgICAgICB0aGlzLl9zdGFsZVN0YXRlQWdlID0gc3RhbGVTdGF0ZUFnZTtcclxuICAgICAgICB0aGlzLl9jbG9ja1NrZXcgPSBjbG9ja1NrZXc7XHJcbiAgICAgICAgdGhpcy5fdXNlckluZm9Kd3RJc3N1ZXIgPSB1c2VySW5mb0p3dElzc3VlcjtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmU7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdG9yID0gbmV3IFJlc3BvbnNlVmFsaWRhdG9yQ3Rvcih0aGlzKTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHR5cGVvZiBleHRyYVF1ZXJ5UGFyYW1zID09PSAnb2JqZWN0JyA/IGV4dHJhUXVlcnlQYXJhbXMgOiB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjbGllbnQgY29uZmlnXHJcbiAgICBnZXQgY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgY2xpZW50X2lkKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgLy8gb25lLXRpbWUgc2V0IG9ubHlcclxuICAgICAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50U2V0dGluZ3Muc2V0X2NsaWVudF9pZDogY2xpZW50X2lkIGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNsaWVudF9pZCBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBjbGllbnRfc2VjcmV0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfc2VjcmV0O1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlc3BvbnNlX3R5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlX3R5cGU7XHJcbiAgICB9XHJcbiAgICBnZXQgc2NvcGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njb3BlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3RfdXJpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBvcHRpb25hbCBwcm90b2NvbCBwYXJhbXNcclxuICAgIGdldCBwcm9tcHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21wdDtcclxuICAgIH1cclxuICAgIGdldCBkaXNwbGF5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5O1xyXG4gICAgfVxyXG4gICAgZ2V0IG1heF9hZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heF9hZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgdWlfbG9jYWxlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdWlfbG9jYWxlcztcclxuICAgIH1cclxuICAgIGdldCBhY3JfdmFsdWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3JfdmFsdWVzO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlc291cmNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZTtcclxuICAgIH1cclxuICAgIGdldCByZXNwb25zZV9tb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV9tb2RlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBtZXRhZGF0YVxyXG4gICAgZ2V0IGF1dGhvcml0eSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0aG9yaXR5O1xyXG4gICAgfVxyXG4gICAgc2V0IGF1dGhvcml0eSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIC8vIG9uZS10aW1lIHNldCBvbmx5XHJcbiAgICAgICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudFNldHRpbmdzLnNldF9hdXRob3JpdHk6IGF1dGhvcml0eSBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHkgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuYXV0aG9yaXR5O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsICYmIHRoaXMuX21ldGFkYXRhVXJsLmluZGV4T2YoT2lkY01ldGFkYXRhVXJsUGF0aCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmxbdGhpcy5fbWV0YWRhdGFVcmwubGVuZ3RoIC0gMV0gIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9ICcvJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9IE9pZGNNZXRhZGF0YVVybFBhdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXR0YWJsZS9jYWNoYWJsZSBtZXRhZGF0YSB2YWx1ZXNcclxuICAgIGdldCBtZXRhZGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGE7XHJcbiAgICB9XHJcbiAgICBzZXQgbWV0YWRhdGEodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaWduaW5nS2V5cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluZ0tleXM7XHJcbiAgICB9XHJcbiAgICBzZXQgc2lnbmluZ0tleXModmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9zaWduaW5nS2V5cyA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGJlaGF2aW9yIGZsYWdzXHJcbiAgICBnZXQgZmlsdGVyUHJvdG9jb2xDbGFpbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zO1xyXG4gICAgfVxyXG4gICAgZ2V0IGxvYWRVc2VySW5mbygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXJJbmZvO1xyXG4gICAgfVxyXG4gICAgZ2V0IHN0YWxlU3RhdGVBZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWxlU3RhdGVBZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xvY2tTa2V3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9ja1NrZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgdXNlckluZm9Kd3RJc3N1ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJJbmZvSnd0SXNzdWVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzdGF0ZVN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZVN0b3JlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbGlkYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhU2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGV4dHJhIHF1ZXJ5IHBhcmFtc1xyXG4gICAgZ2V0IGV4dHJhUXVlcnlQYXJhbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXM7XHJcbiAgICB9XHJcbiAgICBzZXQgZXh0cmFRdWVyeVBhcmFtcyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKXtcclxuICAgICAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBQb3B1cFdpbmRvdyB9IGZyb20gJy4vUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvcHVwTmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKHBhcmFtcykge1xyXG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBQb3B1cFdpbmRvdyhwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9wdXApO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxiYWNrKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwTmF2aWdhdG9yLmNhbGxiYWNrXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXIodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcblxyXG5jb25zdCBDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwgPSA1MDA7XHJcbmNvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sd2lkdGg9NTAwLGhlaWdodD01MDAsbGVmdD0xMDAsdG9wPTEwMDsnO1xyXG4vL2NvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sd2lkdGg9NTAwLGhlaWdodD01MDAsbGVmdD0xMDAsdG9wPTEwMDtyZXNpemFibGU9eWVzJztcclxuXHJcbmNvbnN0IERlZmF1bHRQb3B1cFRhcmdldCA9IFwiX2JsYW5rXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9wdXBXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXQgPSBwYXJhbXMucG9wdXBXaW5kb3dUYXJnZXQgfHwgRGVmYXVsdFBvcHVwVGFyZ2V0O1xyXG4gICAgICAgIGxldCBmZWF0dXJlcyA9IHBhcmFtcy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IERlZmF1bHRQb3B1cEZlYXR1cmVzO1xyXG5cclxuICAgICAgICB0aGlzLl9wb3B1cCA9IHdpbmRvdy5vcGVuKCcnLCB0YXJnZXQsIGZlYXR1cmVzKTtcclxuICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY3RvcjogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkLmJpbmQodGhpcyksIENoZWNrRm9yUG9wdXBDbG9zZWRJbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9taXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogbm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93Lm5hdmlnYXRlOiBTZXR0aW5nIFVSTCBpbiBwb3B1cFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2lkID0gcGFyYW1zLmlkO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faWQpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvd1tcInBvcHVwQ2FsbGJhY2tfXCIgKyBwYXJhbXMuaWRdID0gdGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAuZm9jdXMoKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAud2luZG93LmxvY2F0aW9uID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX3N1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrOiBTdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gcG9wdXAgd2luZG93XCIpO1xyXG5cclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZShkYXRhKTtcclxuICAgIH1cclxuICAgIF9lcnJvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgTG9nLmVycm9yKFwiUG9wdXBXaW5kb3cuZXJyb3I6IFwiLCBtZXNzYWdlKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICAgICAgdGhpcy5fcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoa2VlcE9wZW4pIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jbGVhbnVwXCIpO1xyXG5cclxuICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIpO1xyXG4gICAgICAgIHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciA9IG51bGw7XHJcblxyXG4gICAgICAgIGRlbGV0ZSB3aW5kb3dbXCJwb3B1cENhbGxiYWNrX1wiICsgdGhpcy5faWRdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcG9wdXAgJiYgIWtlZXBPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfY2hlY2tGb3JQb3B1cENsb3NlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcHVwIHx8IHRoaXMuX3BvcHVwLmNsb3NlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIlBvcHVwIHdpbmRvdyBjbG9zZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cChrZWVwT3Blbik7XHJcblxyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2sgc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogdXJsIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2s6IEludmFsaWQgcmVzcG9uc2UgZnJvbSBwb3B1cFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIGZyb20gcG9wdXBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBub3RpZnlPcGVuZXIodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5vcGVuZXIpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIGRlbGltaXRlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IFwicG9wdXBDYWxsYmFja19cIiArIGRhdGEuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gd2luZG93Lm9wZW5lcltuYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBwYXNzaW5nIHVybCBtZXNzYWdlIHRvIG9wZW5lclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodXJsLCBrZWVwT3Blbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gbWF0Y2hpbmcgY2FsbGJhY2sgZm91bmQgb24gb3BlbmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyBzdGF0ZSBmb3VuZCBpbiByZXNwb25zZSB1cmxcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyB3aW5kb3cub3BlbmVyLiBDYW4ndCBjb21wbGV0ZSBub3RpZmljYXRpb24uXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVkaXJlY3ROYXZpZ2F0b3Ige1xyXG5cclxuICAgIHByZXBhcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZWRpcmVjdE5hdmlnYXRvci5uYXZpZ2F0ZTogTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYXJhbXMudXNlUmVwbGFjZVRvTmF2aWdhdGUpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UocGFyYW1zLnVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBwYXJhbXMudXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1cmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBVc2VySW5mb1NlcnZpY2UgfSBmcm9tICcuL1VzZXJJbmZvU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IFRva2VuQ2xpZW50IH0gZnJvbSAnLi9Ub2tlbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuL0Vycm9yUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuY29uc3QgUHJvdG9jb2xDbGFpbXMgPSBbXCJub25jZVwiLCBcImF0X2hhc2hcIiwgXCJpYXRcIiwgXCJuYmZcIiwgXCJleHBcIiwgXCJhdWRcIiwgXCJpc3NcIiwgXCJjX2hhc2hcIl07XHJcblxyXG5leHBvcnQgY2xhc3MgUmVzcG9uc2VWYWxpZGF0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBcclxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgICAgIFVzZXJJbmZvU2VydmljZUN0b3IgPSBVc2VySW5mb1NlcnZpY2UsIFxyXG4gICAgICAgIGpvc2VVdGlsID0gSm9zZVV0aWwsXHJcbiAgICAgICAgVG9rZW5DbGllbnRDdG9yID0gVG9rZW5DbGllbnQpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZCB0byBSZXNwb25zZVZhbGlkYXRvclwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl91c2VySW5mb1NlcnZpY2UgPSBuZXcgVXNlckluZm9TZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcclxuICAgICAgICB0aGlzLl90b2tlbkNsaWVudCA9IG5ldyBUb2tlbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlU2lnbmluUmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NTaWduaW5QYXJhbXMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZTogc3RhdGUgcHJvY2Vzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVUb2tlbnMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IHRva2VucyB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0NsYWltcyhyZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZTogY2xhaW1zIHByb2Nlc3NlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGVTaWdub3V0UmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHN0YXRlLmlkICE9PSByZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogU3RhdGUgZG9lcyBub3QgbWF0Y2hcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IHRoZSBzdGF0ZSBtYXRjaGVzLCB0YWtlIHRoZSBzdG9yZWQgZGF0YVxyXG4gICAgICAgIC8vIGFuZCBzZXQgaXQgaW50byB0aGUgcmVzcG9uc2Ugc28gY2FsbGVycyBjYW4gZ2V0IHRoZWlyIHN0YXRlXHJcbiAgICAgICAgLy8gdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGJvdGggc3VjY2VzcyAmIGVycm9yIG91dGNvbWVzXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IHN0YXRlIHZhbGlkYXRlZFwiKTtcclxuICAgICAgICByZXNwb25zZS5zdGF0ZSA9IHN0YXRlLmRhdGE7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBSZXNwb25zZSB3YXMgZXJyb3JcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzU2lnbmluUGFyYW1zKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChzdGF0ZS5pZCAhPT0gcmVzcG9uc2Uuc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IFN0YXRlIGRvZXMgbm90IG1hdGNoXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiU3RhdGUgZG9lcyBub3QgbWF0Y2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vIGNsaWVudF9pZCBvbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGNsaWVudF9pZCBvbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXN0YXRlLmF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm8gYXV0aG9yaXR5IG9uIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXV0aG9yaXR5IG9uIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoaXMgYWxsb3dzIHRoZSBhdXRob3JpdHkgdG8gYmUgbG9hZGVkIGZyb20gdGhlIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGlmICghdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSA9IHN0YXRlLmF1dGhvcml0eTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZW5zdXJlIHdlJ3JlIHVzaW5nIHRoZSBjb3JyZWN0IGF1dGhvcml0eSBpZiB0aGUgYXV0aG9yaXR5IGlzIG5vdCBsb2FkZWQgZnJvbSBzaWduaW4gc3RhdGVcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgJiYgdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ICE9PSBzdGF0ZS5hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IGF1dGhvcml0eSBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXV0aG9yaXR5IG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzIGFsbG93cyB0aGUgY2xpZW50X2lkIHRvIGJlIGxvYWRlZCBmcm9tIHRoZSBzaWduaW4gc3RhdGVcclxuICAgICAgICBpZiAoIXRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgPSBzdGF0ZS5jbGllbnRfaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVuc3VyZSB3ZSdyZSB1c2luZyB0aGUgY29ycmVjdCBjbGllbnRfaWQgaWYgdGhlIGNsaWVudF9pZCBpcyBub3QgbG9hZGVkIGZyb20gc2lnbmluIHN0YXRlXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkICYmIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCAhPT0gc3RhdGUuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBjbGllbnRfaWQgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImNsaWVudF9pZCBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgdGhlIHN0YXRlIG1hdGNoZXMsIHRha2UgdGhlIHN0b3JlZCBkYXRhXHJcbiAgICAgICAgLy8gYW5kIHNldCBpdCBpbnRvIHRoZSByZXNwb25zZSBzbyBjYWxsZXJzIGNhbiBnZXQgdGhlaXIgc3RhdGVcclxuICAgICAgICAvLyB0aGlzIGlzIGltcG9ydGFudCBmb3IgYm90aCBzdWNjZXNzICYgZXJyb3Igb3V0Y29tZXNcclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogc3RhdGUgdmFsaWRhdGVkXCIpO1xyXG4gICAgICAgIHJlc3BvbnNlLnN0YXRlID0gc3RhdGUuZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XHJcbiAgICAgICAgICAgIExvZy53YXJuKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IFJlc3BvbnNlIHdhcyBlcnJvclwiLCByZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3JSZXNwb25zZShyZXNwb25zZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLm5vbmNlICYmICFyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogRXhwZWN0aW5nIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gaWRfdG9rZW4gaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5ub25jZSAmJiByZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm90IGV4cGVjdGluZyBpZF90b2tlbiBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgaWRfdG9rZW4gaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLmNvZGVfdmVyaWZpZXIgJiYgIXJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IEV4cGVjdGluZyBjb2RlIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gY29kZSBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXN0YXRlLmNvZGVfdmVyaWZpZXIgJiYgcmVzcG9uc2UuY29kZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm90IGV4cGVjdGluZyBjb2RlIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5leHBlY3RlZCBjb2RlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzQ2xhaW1zKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmlzT3BlbklkQ29ubmVjdCkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogcmVzcG9uc2UgaXMgT0lEQywgcHJvY2Vzc2luZyBjbGFpbXNcIik7XHJcblxyXG4gICAgICAgICAgICByZXNwb25zZS5wcm9maWxlID0gdGhpcy5fZmlsdGVyUHJvdG9jb2xDbGFpbXMocmVzcG9uc2UucHJvZmlsZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubG9hZFVzZXJJbmZvICYmIHJlc3BvbnNlLmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IGxvYWRpbmcgdXNlciBpbmZvXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zKHJlc3BvbnNlLmFjY2Vzc190b2tlbikudGhlbihjbGFpbXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiB1c2VyIGluZm8gY2xhaW1zIHJlY2VpdmVkIGZyb20gdXNlciBpbmZvIGVuZHBvaW50XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xhaW1zLnN1YiAhPT0gcmVzcG9uc2UucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gYWNjZXNzX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic3ViIGZyb20gdXNlciBpbmZvIGVuZHBvaW50IGRvZXMgbm90IG1hdGNoIHN1YiBpbiBhY2Nlc3NfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX21lcmdlQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHVzZXIgaW5mbyBjbGFpbXMgcmVjZWl2ZWQsIHVwZGF0ZWQgcHJvZmlsZTpcIiwgcmVzcG9uc2UucHJvZmlsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IG5vdCBsb2FkaW5nIHVzZXIgaW5mb1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIG5vdCBPSURDLCBub3QgcHJvY2Vzc2luZyBjbGFpbXNcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfbWVyZ2VDbGFpbXMoY2xhaW1zMSwgY2xhaW1zMikge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjbGFpbXMxKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBjbGFpbXMyKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBjbGFpbXMyW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gW3ZhbHVlc107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFtuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRbbmFtZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtuYW1lXS5pbmRleE9mKHZhbHVlKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdFtuYW1lXSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSB0aGlzLl9tZXJnZUNsYWltcyhyZXN1bHRbbmFtZV0sIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBbcmVzdWx0W25hbWVdLCB2YWx1ZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIF9maWx0ZXJQcm90b2NvbENsYWltcyhjbGFpbXMpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXMsIGluY29taW5nIGNsYWltczpcIiwgY2xhaW1zKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGNsYWltcyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5fZmlsdGVyUHJvdG9jb2xDbGFpbXMpIHtcclxuICAgICAgICAgICAgUHJvdG9jb2xDbGFpbXMuZm9yRWFjaCh0eXBlID0+IHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSByZXN1bHRbdHlwZV07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zOiBwcm90b2NvbCBjbGFpbXMgZmlsdGVyZWRcIiwgcmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltczogcHJvdG9jb2wgY2xhaW1zIG5vdCBmaWx0ZXJlZFwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVUb2tlbnMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGNvZGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzQ29kZShzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBpZF90b2tlbiBhbmQgYWNjZXNzX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkFuZEFjY2Vzc1Rva2VuKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBObyBjb2RlIHRvIHByb2Nlc3Mgb3IgaWRfdG9rZW4gdG8gdmFsaWRhdGVcIik7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Byb2Nlc3NDb2RlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHZhciByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBjbGllbnRfaWQ6IHN0YXRlLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldCxcclxuICAgICAgICAgICAgY29kZSA6IHJlc3BvbnNlLmNvZGUsXHJcbiAgICAgICAgICAgIHJlZGlyZWN0X3VyaTogc3RhdGUucmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiBzdGF0ZS5jb2RlX3ZlcmlmaWVyLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZShyZXF1ZXN0KS50aGVuKHRva2VuUmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yKHZhciBrZXkgaW4gdG9rZW5SZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Vba2V5XSA9IHRva2VuUmVzcG9uc2Vba2V5XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NvZGU6IHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NmdWwsIHByb2Nlc3NpbmcgaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlcyhzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDb2RlOiB0b2tlbiByZXNwb25zZSBzdWNjZXNzZnVsLCByZXR1cm5pbmcgcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlcyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcclxuXHJcbiAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHN0YXRlLmNsaWVudF9pZDtcclxuICAgICAgICAgICAgbGV0IGNsb2NrU2tld0luU2Vjb25kcyA9IHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldztcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IFZhbGlkYWluZyBKV1QgYXR0cmlidXRlczsgdXNpbmcgY2xvY2sgc2tldyAoaW4gc2Vjb25kcykgb2Y6IFwiLCBjbG9ja1NrZXdJblNlY29uZHMpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0QXR0cmlidXRlcyhyZXNwb25zZS5pZF90b2tlbiwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3SW5TZWNvbmRzKS50aGVuKHBheWxvYWQgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ub25jZSAmJiBzdGF0ZS5ub25jZSAhPT0gcGF5bG9hZC5ub25jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzOiBJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IE5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHBheWxvYWQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUlkVG9rZW5BbmRBY2Nlc3NUb2tlbihzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUFjY2Vzc1Rva2VuKHJlc3BvbnNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmICghc3RhdGUubm9uY2UpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8gbm9uY2Ugb24gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBub25jZSBvbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVzcG9uc2UuaWRfdG9rZW4pO1xyXG4gICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyIHx8ICFqd3QucGF5bG9hZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIiwgand0KTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RhdGUubm9uY2UgIT09IGp3dC5wYXlsb2FkLm5vbmNlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IEludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBraWQgPSBqd3QuaGVhZGVyLmtpZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IFJlY2VpdmVkIGlzc3VlclwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXMoKS50aGVuKGtleXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFrZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBSZWNlaXZlZCBzaWduaW5nIGtleXNcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICAgICAgaWYgKCFraWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlzID0gdGhpcy5fZmlsdGVyQnlBbGcoa2V5cywgand0LmhlYWRlci5hbGcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpZCBpcyBtYW5kYXRvcnkgb25seSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBrZXlzIGluIHRoZSByZWZlcmVuY2VkIEpXSyBTZXQgZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjU2lnbmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkua2lkID09PSBraWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gc3RhdGUuY2xpZW50X2lkO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBWYWxpZGFpbmcgSldUOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0KHJlc3BvbnNlLmlkX3Rva2VuLCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcykudGhlbigoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IEpXVCB2YWxpZGF0aW9uIHN1Y2Nlc3NmdWxcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghand0LnBheWxvYWQuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IGp3dC5wYXlsb2FkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2ZpbHRlckJ5QWxnKGtleXMsIGFsZyl7XHJcbiAgICAgICAgdmFyIGt0eSA9IG51bGw7XHJcbiAgICAgICAgaWYgKGFsZy5zdGFydHNXaXRoKFwiUlNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJSU0FcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJQU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIlBTXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiRVNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJFQ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBhbGcgbm90IHN1cHBvcnRlZDogXCIsIGFsZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogTG9va2luZyBmb3Iga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSk7XHJcblxyXG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5Lmt0eSA9PT0ga3R5O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyQnlBbGc6IE51bWJlciBvZiBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5LCBrZXlzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIHJldHVybiBrZXlzO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUFjY2Vzc1Rva2VuKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5wcm9maWxlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBObyBwcm9maWxlIGxvYWRlZCBmcm9tIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gcHJvZmlsZSBsb2FkZWQgZnJvbSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogTm8gYXRfaGFzaCBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF0X2hhc2ggaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogTm8gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVzcG9uc2UuaWRfdG9rZW4pO1xyXG4gICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIiwgand0KTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaGFzaEFsZyA9IGp3dC5oZWFkZXIuYWxnO1xyXG4gICAgICAgIGlmICghaGFzaEFsZyB8fCBoYXNoQWxnLmxlbmd0aCAhPT0gNSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGFsZzogXCIgKyBoYXNoQWxnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaGFzaEJpdHMgPSBoYXNoQWxnLnN1YnN0cigyLCAzKTtcclxuICAgICAgICBpZiAoIWhhc2hCaXRzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcsIGhhc2hCaXRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGFsZzogXCIgKyBoYXNoQWxnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBoYXNoQml0cyA9IHBhcnNlSW50KGhhc2hCaXRzKTtcclxuICAgICAgICBpZiAoaGFzaEJpdHMgIT09IDI1NiAmJiBoYXNoQml0cyAhPT0gMzg0ICYmIGhhc2hCaXRzICE9PSA1MTIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZywgaGFzaEJpdHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnOiBcIiArIGhhc2hBbGcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzaGEgPSBcInNoYVwiICsgaGFzaEJpdHM7XHJcbiAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9qb3NlVXRpbC5oYXNoU3RyaW5nKHJlc3BvbnNlLmFjY2Vzc190b2tlbiwgc2hhKTtcclxuICAgICAgICBpZiAoIWhhc2gpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbiBoYXNoIGZhaWxlZDpcIiwgc2hhKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBhdF9oYXNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBsZWZ0ID0gaGFzaC5zdWJzdHIoMCwgaGFzaC5sZW5ndGggLyAyKTtcclxuICAgICAgICB2YXIgbGVmdF9iNjR1ID0gdGhpcy5fam9zZVV0aWwuaGV4VG9CYXNlNjRVcmwobGVmdCk7XHJcbiAgICAgICAgaWYgKGxlZnRfYjY0dSAhPT0gcmVzcG9uc2UucHJvZmlsZS5hdF9oYXNoKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiLCBsZWZ0X2I2NHUsIHJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogc3VjY2Vzc1wiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBDaGVja1Nlc3Npb25JRnJhbWUgfSBmcm9tICcuL0NoZWNrU2Vzc2lvbklGcmFtZS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk1vbml0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHVzZXJNYW5hZ2VyLCBDaGVja1Nlc3Npb25JRnJhbWVDdG9yID0gQ2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgaWYgKCF1c2VyTWFuYWdlcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvci5jdG9yOiBObyB1c2VyIG1hbmFnZXIgcGFzc2VkIHRvIFNlc3Npb25Nb25pdG9yXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VyTWFuYWdlclwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyID0gdXNlck1hbmFnZXI7XHJcbiAgICAgICAgdGhpcy5fQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciA9IENoZWNrU2Vzc2lvbklGcmFtZUN0b3I7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5hZGRVc2VyTG9hZGVkKHRoaXMuX3N0YXJ0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5hZGRVc2VyVW5sb2FkZWQodGhpcy5fc3RvcC5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZ2V0VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIC8vIGRvaW5nIHRoaXMgbWFudWFsbHkgaGVyZSBzaW5jZSBjYWxsaW5nIGdldFVzZXIgXHJcbiAgICAgICAgICAgIC8vIGRvZXNuJ3QgdHJpZ2dlciBsb2FkIGV2ZW50LlxyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodXNlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gYSBjdG9yXHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yIGN0b3I6IGVycm9yIGZyb20gZ2V0VXNlcjpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfc2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLnNldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9tZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLm1ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuICAgIGdldCBfY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgX2NoZWNrU2Vzc2lvbkludGVydmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgIH1cclxuICAgIGdldCBfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdGFydCh1c2VyKSB7XHJcbiAgICAgICAgbGV0IHNlc3Npb25fc3RhdGUgPSB1c2VyLnNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgIGlmIChzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1YiA9IHVzZXIucHJvZmlsZS5zdWI7XHJcbiAgICAgICAgICAgIHRoaXMuX3NpZCA9IHVzZXIucHJvZmlsZS5zaWQ7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdGFydDogc2Vzc2lvbl9zdGF0ZTpcIiwgc2Vzc2lvbl9zdGF0ZSwgXCIsIHN1YjpcIiwgdGhpcy5fc3ViKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lKCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBJbml0aWFsaXppbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWVcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGllbnRfaWQgPSB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnRlcnZhbCA9IHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RvcE9uRXJyb3IgPSB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZSA9IG5ldyB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yKHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyksIGNsaWVudF9pZCwgdXJsLCBpbnRlcnZhbCwgc3RvcE9uRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBObyBjaGVjayBzZXNzaW9uIGlmcmFtZSBmb3VuZCBpbiB0aGUgbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gbm9uLXByb21pc2UgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IEVycm9yIGZyb20gZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdGFydChzZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zdWIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3NpZCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0b3BcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICB2YXIgcmFpc2VVc2VyU2lnbmVkT3V0RXZlbnQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnN1YiA9PT0gdGhpcy5fc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmFpc2VVc2VyU2lnbmVkT3V0RXZlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RhcnQoc2Vzc2lvbi5zZXNzaW9uX3N0YXRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc2lkID09PSB0aGlzLl9zaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTYW1lIHN1YiBzdGlsbCBsb2dnZWQgaW4gYXQgT1AsIHJlc3RhcnRpbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWU7IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFNhbWUgc3ViIHN0aWxsIGxvZ2dlZCBpbiBhdCBPUCwgc2Vzc2lvbiBzdGF0ZSBoYXMgY2hhbmdlZCwgcmVzdGFydGluZyBjaGVjayBzZXNzaW9uIGlmcmFtZTsgc2Vzc2lvbl9zdGF0ZTpcIiwgc2Vzc2lvbi5zZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogRGlmZmVyZW50IHN1YmplY3Qgc2lnbmVkIGludG8gT1A6XCIsIHNlc3Npb24uc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU3ViamVjdCBubyBsb25nZXIgc2lnbmVkIGludG8gT1BcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyYWlzZVVzZXJTaWduZWRPdXRFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s7IHJhaXNpbmcgc2lnbmVkIG91dCBldmVudFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IEVycm9yIGNhbGxpbmcgcXVlcnlDdXJyZW50U2lnbmluU2Vzc2lvbjsgcmFpc2luZyBzaWduZWQgb3V0IGV2ZW50XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblJlcXVlc3Qge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIC8vIG1hbmRhdG9yeVxyXG4gICAgICAgIHVybCwgY2xpZW50X2lkLCByZWRpcmVjdF91cmksIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCBhdXRob3JpdHksXHJcbiAgICAgICAgLy8gb3B0aW9uYWxcclxuICAgICAgICBkYXRhLCBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGVcclxuICAgIH0pIHtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyBjbGllbnRfaWQgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGllbnRfaWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVkaXJlY3RfdXJpKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gcmVkaXJlY3RfdXJpIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVkaXJlY3RfdXJpXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXJlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyByZXNwb25zZV90eXBlIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVzcG9uc2VfdHlwZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzY29wZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHNjb3BlIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NvcGVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gYXV0aG9yaXR5IHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXV0aG9yaXR5XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG9pZGMgPSBTaWduaW5SZXF1ZXN0LmlzT2lkYyhyZXNwb25zZV90eXBlKTtcclxuICAgICAgICBsZXQgY29kZSA9IFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpO1xyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlX21vZGUpIHtcclxuICAgICAgICAgICAgcmVzcG9uc2VfbW9kZSA9IFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpID8gXCJxdWVyeVwiIDogbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgU2lnbmluU3RhdGUoeyBub25jZTogb2lkYywgXHJcbiAgICAgICAgICAgIGRhdGEsIGNsaWVudF9pZCwgYXV0aG9yaXR5LCByZWRpcmVjdF91cmksIFxyXG4gICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiBjb2RlLCBcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlLCByZXNwb25zZV9tb2RlIH0pO1xyXG5cclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcImNsaWVudF9pZFwiLCBjbGllbnRfaWQpO1xyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwicmVkaXJlY3RfdXJpXCIsIHJlZGlyZWN0X3VyaSk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJyZXNwb25zZV90eXBlXCIsIHJlc3BvbnNlX3R5cGUpO1xyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic2NvcGVcIiwgc2NvcGUpO1xyXG5cclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInN0YXRlXCIsIHRoaXMuc3RhdGUuaWQpO1xyXG4gICAgICAgIGlmIChvaWRjKSB7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwibm9uY2VcIiwgdGhpcy5zdGF0ZS5ub25jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2RlKSB7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiY29kZV9jaGFsbGVuZ2VcIiwgdGhpcy5zdGF0ZS5jb2RlX2NoYWxsZW5nZSk7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kXCIsIFwiUzI1NlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvcHRpb25hbCA9IHsgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50LCBhY3JfdmFsdWVzLCByZXNvdXJjZSwgcmVxdWVzdCwgcmVxdWVzdF91cmksIHJlc3BvbnNlX21vZGUgfTtcclxuICAgICAgICBmb3IobGV0IGtleSBpbiBvcHRpb25hbCl7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25hbFtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIG9wdGlvbmFsW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IobGV0IGtleSBpbiBleHRyYVF1ZXJ5UGFyYW1zKXtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwga2V5LCBleHRyYVF1ZXJ5UGFyYW1zW2tleV0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVybCA9IHVybDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNPaWRjKHJlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gcmVzcG9uc2VfdHlwZS5zcGxpdCgvXFxzKy9nKS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbSA9PT0gXCJpZF90b2tlblwiO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAhIShyZXN1bHRbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc09BdXRoKHJlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gcmVzcG9uc2VfdHlwZS5zcGxpdCgvXFxzKy9nKS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbSA9PT0gXCJ0b2tlblwiO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAhIShyZXN1bHRbMF0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdGF0aWMgaXNDb2RlKHJlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gcmVzcG9uc2VfdHlwZS5zcGxpdCgvXFxzKy9nKS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbSA9PT0gXCJjb2RlXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcblxyXG5jb25zdCBPaWRjU2NvcGUgPSBcIm9wZW5pZFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblJlc3BvbnNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHVybCwgZGVsaW1pdGVyID0gXCIjXCIpIHtcclxuXHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIGRlbGltaXRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuZXJyb3IgPSB2YWx1ZXMuZXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJvcl9kZXNjcmlwdGlvbiA9IHZhbHVlcy5lcnJvcl9kZXNjcmlwdGlvbjtcclxuICAgICAgICB0aGlzLmVycm9yX3VyaSA9IHZhbHVlcy5lcnJvcl91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuY29kZSA9IHZhbHVlcy5jb2RlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB2YWx1ZXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5pZF90b2tlbiA9IHZhbHVlcy5pZF90b2tlbjtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSB2YWx1ZXMuc2Vzc2lvbl9zdGF0ZTtcclxuICAgICAgICB0aGlzLmFjY2Vzc190b2tlbiA9IHZhbHVlcy5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgdGhpcy50b2tlbl90eXBlID0gdmFsdWVzLnRva2VuX3R5cGU7XHJcbiAgICAgICAgdGhpcy5zY29wZSA9IHZhbHVlcy5zY29wZTtcclxuICAgICAgICB0aGlzLnByb2ZpbGUgPSB1bmRlZmluZWQ7IC8vIHdpbGwgYmUgc2V0IGZyb20gUmVzcG9uc2VWYWxpZGF0b3JcclxuXHJcbiAgICAgICAgdGhpcy5leHBpcmVzX2luID0gdmFsdWVzLmV4cGlyZXNfaW47XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cGlyZXNfaW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJlc19hdCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHBpcmVzX2F0IC0gbm93O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4cGlyZXNfaW4odmFsdWUpe1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXhwaXJlc19pbiA9PT0gJ251bWJlcicgJiYgZXhwaXJlc19pbiA+IDApIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gbm93ICsgZXhwaXJlc19pbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cGlyZWQoKSB7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSB0aGlzLmV4cGlyZXNfaW47XHJcbiAgICAgICAgaWYgKGV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhwaXJlc19pbiA8PSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY29wZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNjb3BlIHx8IFwiXCIpLnNwbGl0KFwiIFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNPcGVuSWRDb25uZWN0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNjb3Blcy5pbmRleE9mKE9pZGNTY29wZSkgPj0gMCB8fCAhIXRoaXMuaWRfdG9rZW47XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5pbXBvcnQgcmFuZG9tIGZyb20gJy4vcmFuZG9tLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTaWduaW5TdGF0ZSBleHRlbmRzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtub25jZSwgYXV0aG9yaXR5LCBjbGllbnRfaWQsIHJlZGlyZWN0X3VyaSwgY29kZV92ZXJpZmllciwgcmVzcG9uc2VfbW9kZX0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKGFyZ3VtZW50c1swXSk7XHJcblxyXG4gICAgICAgIGlmIChub25jZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub25jZSA9IHJhbmRvbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub25jZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub25jZSA9IG5vbmNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvZGVfdmVyaWZpZXIgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgLy8gcmFuZG9tKCkgcHJvZHVjZXMgMzIgbGVuZ3RoXHJcbiAgICAgICAgICAgIHRoaXMuX2NvZGVfdmVyaWZpZXIgPSByYW5kb20oKSArIHJhbmRvbSgpICsgcmFuZG9tKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvZGVfdmVyaWZpZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29kZV92ZXJpZmllciA9IGNvZGVfdmVyaWZpZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLmNvZGVfdmVyaWZpZXIpIHtcclxuICAgICAgICAgICAgbGV0IGhhc2ggPSBKb3NlVXRpbC5oYXNoU3RyaW5nKHRoaXMuY29kZV92ZXJpZmllciwgXCJTSEEyNTZcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvZGVfY2hhbGxlbmdlID0gSm9zZVV0aWwuaGV4VG9CYXNlNjRVcmwoaGFzaCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yZWRpcmVjdF91cmkgPSByZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fYXV0aG9yaXR5ID0gYXV0aG9yaXR5O1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IGNsaWVudF9pZDtcclxuICAgICAgICB0aGlzLl9yZXNwb25zZV9tb2RlID0gcmVzcG9uc2VfbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm9uY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vbmNlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGF1dGhvcml0eSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0aG9yaXR5O1xyXG4gICAgfVxyXG4gICAgZ2V0IGNsaWVudF9pZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X2lkO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3RfdXJpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNvZGVfdmVyaWZpZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVfdmVyaWZpZXI7XHJcbiAgICB9XHJcbiAgICBnZXQgY29kZV9jaGFsbGVuZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVfY2hhbGxlbmdlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlc3BvbnNlX21vZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlX21vZGU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRvU3RvcmFnZVN0cmluZygpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJTaWduaW5TdGF0ZS50b1N0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcclxuICAgICAgICAgICAgY3JlYXRlZDogdGhpcy5jcmVhdGVkLFxyXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGU6IHRoaXMucmVxdWVzdF90eXBlLFxyXG4gICAgICAgICAgICBub25jZTogdGhpcy5ub25jZSxcclxuICAgICAgICAgICAgY29kZV92ZXJpZmllcjogdGhpcy5jb2RlX3ZlcmlmaWVyLFxyXG4gICAgICAgICAgICByZWRpcmVjdF91cmk6IHRoaXMucmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICBhdXRob3JpdHk6IHRoaXMuYXV0aG9yaXR5LFxyXG4gICAgICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50X2lkLFxyXG4gICAgICAgICAgICByZXNwb25zZV9tb2RlOiB0aGlzLnJlc3BvbnNlX21vZGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlNpZ25pblN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKTtcclxuICAgICAgICByZXR1cm4gbmV3IFNpZ25pblN0YXRlKGRhdGEpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbm91dFJlcXVlc3Qge1xyXG4gICAgY29uc3RydWN0b3Ioe3VybCwgaWRfdG9rZW5faGludCwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLCBkYXRhLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGV9KSB7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbm91dFJlcXVlc3QuY3RvcjogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkX3Rva2VuX2hpbnQpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJpZF90b2tlbl9oaW50XCIsIGlkX3Rva2VuX2hpbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSkge1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaVwiLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgU3RhdGUoeyBkYXRhLCByZXF1ZXN0X3R5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzdGF0ZVwiLCB0aGlzLnN0YXRlLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gZXh0cmFRdWVyeVBhcmFtcyl7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgZXh0cmFRdWVyeVBhcmFtc1trZXldKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbm91dFJlc3BvbnNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHVybCkge1xyXG5cclxuICAgICAgICB2YXIgdmFsdWVzID0gVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50KHVybCwgXCI/XCIpO1xyXG5cclxuICAgICAgICB0aGlzLmVycm9yID0gdmFsdWVzLmVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSB2YWx1ZXMuZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSB2YWx1ZXMuZXJyb3JfdXJpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0gdmFsdWVzLnN0YXRlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTaWxlbnRSZW5ld1NlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHVzZXJNYW5hZ2VyKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIgPSB1c2VyTWFuYWdlcjtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gdGhpcy5fdG9rZW5FeHBpcmluZy5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuYWRkQWNjZXNzVG9rZW5FeHBpcmluZyh0aGlzLl9jYWxsYmFjayk7XHJcblxyXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgdHJpZ2dlciBsb2FkaW5nIG9mIHRoZSB1c2VyIHNvIHRoZSBleHBpcmluZyBldmVudHMgY2FuIGJlIGluaXRpYWxpemVkXHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmdldFVzZXIoKS50aGVuKHVzZXI9PntcclxuICAgICAgICAgICAgICAgIC8vIGRlbGliZXJhdGUgbm9wXHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGVycj0+e1xyXG4gICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY3RvclxyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lsZW50UmVuZXdTZXJ2aWNlLnN0YXJ0OiBFcnJvciBmcm9tIGdldFVzZXI6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5yZW1vdmVBY2Nlc3NUb2tlbkV4cGlyaW5nKHRoaXMuX2NhbGxiYWNrKTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfdG9rZW5FeHBpcmluZygpIHtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5zaWduaW5TaWxlbnQoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJTaWxlbnRSZW5ld1NlcnZpY2UuX3Rva2VuRXhwaXJpbmc6IFNpbGVudCB0b2tlbiByZW5ld2FsIHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBFcnJvciBmcm9tIHNpZ25pblNpbGVudDpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlU2lsZW50UmVuZXdFcnJvcihlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHJhbmRvbSBmcm9tICcuL3JhbmRvbS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU3RhdGUge1xyXG4gICAgY29uc3RydWN0b3Ioe2lkLCBkYXRhLCBjcmVhdGVkLCByZXF1ZXN0X3R5cGV9ID0ge30pIHtcclxuICAgICAgICB0aGlzLl9pZCA9IGlkIHx8IHJhbmRvbSgpO1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNyZWF0ZWQgPT09ICdudW1iZXInICYmIGNyZWF0ZWQgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWQgPSBjcmVhdGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fY3JlYXRlZCA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcmVxdWVzdF90eXBlID0gIHJlcXVlc3RfdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gICAgfVxyXG4gICAgZ2V0IGRhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgICB9XHJcbiAgICBnZXQgY3JlYXRlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlZDtcclxuICAgIH1cclxuICAgIGdldCByZXF1ZXN0X3R5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RfdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiB0aGlzLnJlcXVlc3RfdHlwZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTdGF0ZShKU09OLnBhcnNlKHN0b3JhZ2VTdHJpbmcpKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgY2xlYXJTdGFsZVN0YXRlKHN0b3JhZ2UsIGFnZSkge1xyXG5cclxuICAgICAgICB2YXIgY3V0b2ZmID0gRGF0ZS5ub3coKSAvIDEwMDAgLSBhZ2U7XHJcblxyXG4gICAgICAgIHJldHVybiBzdG9yYWdlLmdldEFsbEtleXMoKS50aGVuKGtleXMgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IGdvdCBrZXlzXCIsIGtleXMpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHByb21pc2VzID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGtleXNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHN0b3JhZ2UuZ2V0KGtleSkudGhlbihpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVtb3ZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBTdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhpdGVtKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogZ290IGl0ZW0gZnJvbSBrZXk6IFwiLCBrZXksIHN0YXRlLmNyZWF0ZWQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5jcmVhdGVkIDw9IGN1dG9mZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogRXJyb3IgcGFyc2luZyBzdGF0ZSBmb3Iga2V5XCIsIGtleSwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogbm8gaXRlbSBpbiBzdG9yYWdlIGZvciBrZXk6IFwiLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IHJlbW92ZWQgaXRlbSBmb3Iga2V5OiBcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2UucmVtb3ZlKGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiB3YWl0aW5nIG9uIHByb21pc2UgY291bnQ6XCIsIHByb21pc2VzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSAnLi9FdmVudC5qcyc7XHJcblxyXG5jb25zdCBUaW1lckR1cmF0aW9uID0gNTsgLy8gc2Vjb25kc1xyXG5cclxuZXhwb3J0IGNsYXNzIFRpbWVyIGV4dGVuZHMgRXZlbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHRpbWVyID0gR2xvYmFsLnRpbWVyLCBub3dGdW5jID0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5fdGltZXIgPSB0aW1lcjtcclxuXHJcbiAgICAgICAgaWYgKG5vd0Z1bmMpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm93RnVuYyA9IG5vd0Z1bmM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3dGdW5jID0gKCkgPT4gRGF0ZS5ub3coKSAvIDEwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBub3coKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuX25vd0Z1bmMoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdChkdXJhdGlvbikge1xyXG4gICAgICAgIGlmIChkdXJhdGlvbiA8PSAwKSB7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZHVyYXRpb24gPSBwYXJzZUludChkdXJhdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBleHBpcmF0aW9uID0gdGhpcy5ub3cgKyBkdXJhdGlvbjtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmF0aW9uID09PSBleHBpcmF0aW9uICYmIHRoaXMuX3RpbWVySGFuZGxlKSB7XHJcbiAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gcmVpbml0aWFsaXplIHRvIHNhbWUgZXhwaXJhdGlvbiwgc28gYmFpbCBvdXRcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuaW5pdCB0aW1lciBcIiArIHRoaXMuX25hbWUgKyBcIiBza2lwcGluZyBpbml0aWFsaXphdGlvbiBzaW5jZSBhbHJlYWR5IGluaXRpYWxpemVkIGZvciBleHBpcmF0aW9uOlwiLCB0aGlzLmV4cGlyYXRpb24pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhbmNlbCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJUaW1lci5pbml0IHRpbWVyIFwiICsgdGhpcy5fbmFtZSArIFwiIGZvciBkdXJhdGlvbjpcIiwgZHVyYXRpb24pO1xyXG4gICAgICAgIHRoaXMuX2V4cGlyYXRpb24gPSBleHBpcmF0aW9uO1xyXG5cclxuICAgICAgICAvLyB3ZSdyZSB1c2luZyBhIGZhaXJseSBzaG9ydCB0aW1lciBhbmQgdGhlbiBjaGVja2luZyB0aGUgZXhwaXJhdGlvbiBpbiB0aGVcclxuICAgICAgICAvLyBjYWxsYmFjayB0byBoYW5kbGUgc2NlbmFyaW9zIHdoZXJlIHRoZSBicm93c2VyIGRldmljZSBzbGVlcHMsIGFuZCB0aGVuXHJcbiAgICAgICAgLy8gdGhlIHRpbWVycyBlbmQgdXAgZ2V0dGluZyBkZWxheWVkLlxyXG4gICAgICAgIHZhciB0aW1lckR1cmF0aW9uID0gVGltZXJEdXJhdGlvbjtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPCB0aW1lckR1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRpbWVyRHVyYXRpb24gPSBkdXJhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSB0aGlzLl90aW1lci5zZXRJbnRlcnZhbCh0aGlzLl9jYWxsYmFjay5iaW5kKHRoaXMpLCB0aW1lckR1cmF0aW9uICogMTAwMCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBleHBpcmF0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBpcmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbmNlbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fdGltZXJIYW5kbGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FuY2VsOiBcIiwgdGhpcy5fbmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyLmNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXJIYW5kbGUpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lckhhbmRsZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjaygpIHtcclxuICAgICAgICB2YXIgZGlmZiA9IHRoaXMuX2V4cGlyYXRpb24gLSB0aGlzLm5vdztcclxuICAgICAgICBMb2cuZGVidWcoXCJUaW1lci5jYWxsYmFjazsgXCIgKyB0aGlzLl9uYW1lICsgXCIgdGltZXIgZXhwaXJlcyBpbjpcIiwgZGlmZik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9leHBpcmF0aW9uIDw9IHRoaXMubm93KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIHN1cGVyLnJhaXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IEpzb25TZXJ2aWNlIH0gZnJvbSAnLi9Kc29uU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRva2VuQ2xpZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSwgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuY3RvcjogTm8gc2V0dGluZ3MgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKCk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4Y2hhbmdlQ29kZShhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzLmdyYW50X3R5cGUgPSBhcmdzLmdyYW50X3R5cGUgfHwgXCJhdXRob3JpemF0aW9uX2NvZGVcIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjb2RlIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY29kZSBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWRpcmVjdF91cmkgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNvZGVfdmVyaWZpZXIgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjb2RlX3ZlcmlmaWVyIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFRva2VuRW5kcG9pbnQoZmFsc2UpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBSZWNlaXZlZCB0b2tlbiBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiByZXNwb25zZSByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhjaGFuZ2VSZWZyZXNoVG9rZW4oYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncy5ncmFudF90eXBlID0gYXJncy5ncmFudF90eXBlIHx8IFwicmVmcmVzaF90b2tlblwiO1xyXG4gICAgICAgIGFyZ3MuY2xpZW50X2lkID0gYXJncy5jbGllbnRfaWQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgIGFyZ3MuY2xpZW50X3NlY3JldCA9IGFyZ3MuY2xpZW50X3NlY3JldCB8fCB0aGlzLl9zZXR0aW5ncy5jbGllbnRfc2VjcmV0O1xyXG5cclxuICAgICAgICBpZiAoIWFyZ3MucmVmcmVzaF90b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogTm8gcmVmcmVzaF90b2tlbiBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIHJlZnJlc2hfdG9rZW4gaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBObyBjbGllbnRfaWQgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjbGllbnRfaWQgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRUb2tlbkVuZHBvaW50KGZhbHNlKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBSZWNlaXZlZCB0b2tlbiBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IHJlc3BvbnNlIHJlY2VpdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuY29uc3QgQWNjZXNzVG9rZW5UeXBlSGludCA9IFwiYWNjZXNzX3Rva2VuXCI7XHJcbmNvbnN0IFJlZnJlc2hUb2tlblR5cGVIaW50ID0gXCJyZWZyZXNoX3Rva2VuXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBYTUxIdHRwUmVxdWVzdEN0b3IgPSBHbG9iYWwuWE1MSHR0cFJlcXVlc3QsIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5jdG9yOiBObyBzZXR0aW5ncyBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2V0dGluZ3MgcHJvdmlkZWQuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLl9YTUxIdHRwUmVxdWVzdEN0b3IgPSBYTUxIdHRwUmVxdWVzdEN0b3I7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldm9rZSh0b2tlbiwgcmVxdWlyZWQsIHR5cGUgPSBcImFjY2Vzc190b2tlblwiKSB7XHJcbiAgICAgICAgaWYgKCF0b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBObyB0b2tlbiBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdG9rZW4gcHJvdmlkZWQuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGUgIT09IEFjY2Vzc1Rva2VuVHlwZUhpbnQgJiYgdHlwZSAhPSBSZWZyZXNoVG9rZW5UeXBlSGludCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBJbnZhbGlkIHRva2VuIHR5cGVcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdG9rZW4gdHlwZS5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFJldm9jYXRpb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IFJldm9jYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXZvY2F0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbm90IHJlcXVpcmVkLCBzbyBkb24ndCBlcnJvciBhbmQganVzdCByZXR1cm5cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogUmV2b2tpbmcgXCIgKyB0eXBlKTtcclxuICAgICAgICAgICAgdmFyIGNsaWVudF9pZCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICAgICAgdmFyIGNsaWVudF9zZWNyZXQgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfc2VjcmV0O1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlKHVybCwgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCB0b2tlbiwgdHlwZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZSh1cmwsIGNsaWVudF9pZCwgY2xpZW50X3NlY3JldCwgdG9rZW4sIHR5cGUpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgdGhpcy5fWE1MSHR0cFJlcXVlc3RDdG9yKCk7XHJcbiAgICAgICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCB4aHIuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHhoci5zdGF0dXNUZXh0ICsgXCIgKFwiICsgeGhyLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4geyBcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IE5ldHdvcmsgRXJyb3IuXCIpXHJcbiAgICAgICAgICAgICAgICByZWplY3QoXCJOZXR3b3JrIEVycm9yXCIpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdmFyIGJvZHkgPSBcImNsaWVudF9pZD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChjbGllbnRfaWQpO1xyXG4gICAgICAgICAgICBpZiAoY2xpZW50X3NlY3JldCkge1xyXG4gICAgICAgICAgICAgICAgYm9keSArPSBcIiZjbGllbnRfc2VjcmV0PVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGNsaWVudF9zZWNyZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJvZHkgKz0gXCImdG9rZW5fdHlwZV9oaW50PVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHR5cGUpO1xyXG4gICAgICAgICAgICBib2R5ICs9IFwiJnRva2VuPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xyXG4gICAgICAgICAgICB4aHIuc2VuZChib2R5KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVcmxVdGlsaXR5IHtcclxuICAgIHN0YXRpYyBhZGRRdWVyeVBhcmFtKHVybCwgbmFtZSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA8IDApIHtcclxuICAgICAgICAgICAgdXJsICs9IFwiP1wiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVybFt1cmwubGVuZ3RoIC0gMV0gIT09IFwiP1wiKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBcIiZcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHVybCArPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSk7XHJcbiAgICAgICAgdXJsICs9IFwiPVwiO1xyXG4gICAgICAgIHVybCArPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBwYXJzZVVybEZyYWdtZW50KHZhbHVlLCBkZWxpbWl0ZXIgPSBcIiNcIiwgZ2xvYmFsID0gR2xvYmFsKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpe1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGdsb2JhbC5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGlkeCA9IHZhbHVlLmxhc3RJbmRleE9mKGRlbGltaXRlcik7XHJcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyKGlkeCArIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRlbGltaXRlciA9PT0gXCI/XCIpIHtcclxuICAgICAgICAgICAgLy8gaWYgd2UncmUgZG9pbmcgcXVlcnksIHRoZW4gc3RyaXAgb2ZmIGhhc2ggZnJhZ21lbnQgYmVmb3JlIHdlIHBhcnNlXHJcbiAgICAgICAgICAgIGlkeCA9IHZhbHVlLmluZGV4T2YoJyMnKTtcclxuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cigwLCBpZHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcGFyYW1zID0ge30sXHJcbiAgICAgICAgICAgIHJlZ2V4ID0gLyhbXiY9XSspPShbXiZdKikvZyxcclxuICAgICAgICAgICAgbTtcclxuXHJcbiAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xyXG4gICAgICAgIHdoaWxlIChtID0gcmVnZXguZXhlYyh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudChtWzFdKV0gPSBkZWNvZGVVUklDb21wb25lbnQobVsyXSk7XHJcbiAgICAgICAgICAgIGlmIChjb3VudGVyKysgPiA1MCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50OiByZXNwb25zZSBleGNlZWRlZCBleHBlY3RlZCBudW1iZXIgb2YgcGFyYW1ldGVyc1wiLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIlJlc3BvbnNlIGV4Y2VlZGVkIGV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzXCJcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIHByb3AgaW4gcGFyYW1zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXIge1xyXG4gICAgY29uc3RydWN0b3Ioe2lkX3Rva2VuLCBzZXNzaW9uX3N0YXRlLCBhY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIHRva2VuX3R5cGUsIHNjb3BlLCBwcm9maWxlLCBleHBpcmVzX2F0LCBzdGF0ZX0pIHtcclxuICAgICAgICB0aGlzLmlkX3Rva2VuID0gaWRfdG9rZW47XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uX3N0YXRlID0gc2Vzc2lvbl9zdGF0ZTtcclxuICAgICAgICB0aGlzLmFjY2Vzc190b2tlbiA9IGFjY2Vzc190b2tlbjtcclxuICAgICAgICB0aGlzLnJlZnJlc2hfdG9rZW4gPSByZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgIHRoaXMudG9rZW5fdHlwZSA9IHRva2VuX3R5cGU7XHJcbiAgICAgICAgdGhpcy5zY29wZSA9IHNjb3BlO1xyXG4gICAgICAgIHRoaXMucHJvZmlsZSA9IHByb2ZpbGU7XHJcbiAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gZXhwaXJlc19hdDtcclxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cGlyZXNfaW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJlc19hdCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHBpcmVzX2F0IC0gbm93O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4cGlyZXNfaW4odmFsdWUpIHtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICBpZiAodHlwZW9mIGV4cGlyZXNfaW4gPT09ICdudW1iZXInICYmIGV4cGlyZXNfaW4gPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc19hdCA9IG5vdyArIGV4cGlyZXNfaW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBleHBpcmVkKCkge1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gdGhpcy5leHBpcmVzX2luO1xyXG4gICAgICAgIGlmIChleHBpcmVzX2luICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGV4cGlyZXNfaW4gPD0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2NvcGVzKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zY29wZSB8fCBcIlwiKS5zcGxpdChcIiBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdG9yYWdlU3RyaW5nKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXIudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkX3Rva2VuOiB0aGlzLmlkX3Rva2VuLFxyXG4gICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiB0aGlzLnNlc3Npb25fc3RhdGUsXHJcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogdGhpcy5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHRoaXMucmVmcmVzaF90b2tlbixcclxuICAgICAgICAgICAgdG9rZW5fdHlwZTogdGhpcy50b2tlbl90eXBlLFxyXG4gICAgICAgICAgICBzY29wZTogdGhpcy5zY29wZSxcclxuICAgICAgICAgICAgcHJvZmlsZTogdGhpcy5wcm9maWxlLFxyXG4gICAgICAgICAgICBleHBpcmVzX2F0OiB0aGlzLmV4cGlyZXNfYXRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXIuZnJvbVN0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBVc2VyKEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZykpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IEpzb25TZXJ2aWNlIH0gZnJvbSAnLi9Kc29uU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJJbmZvU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBzZXR0aW5ncywgXHJcbiAgICAgICAgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UsIFxyXG4gICAgICAgIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UsIFxyXG4gICAgICAgIGpvc2VVdGlsID0gSm9zZVV0aWxcclxuICAgICkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3Rvcih1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy5fZ2V0Q2xhaW1zRnJvbUp3dC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDbGFpbXModG9rZW4pIHtcclxuICAgICAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5nZXRDbGFpbXM6IE5vIHRva2VuIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgdG9rZW4gaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRVc2VySW5mb0VuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zOiByZWNlaXZlZCB1c2VyaW5mbyB1cmxcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKHVybCwgdG9rZW4pLnRoZW4oY2xhaW1zID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5nZXRDbGFpbXM6IGNsYWltcyByZWNlaXZlZFwiLCBjbGFpbXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldENsYWltc0Zyb21Kd3QocmVxKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlcS5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlciB8fCAhand0LnBheWxvYWQpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogRmFpbGVkIHRvIHBhcnNlIEpXVFwiLCBqd3QpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBraWQgPSBqd3QuaGVhZGVyLmtpZDtcclxuXHJcbiAgICAgICAgICAgIGxldCBpc3N1ZXJQcm9taXNlO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3NldHRpbmdzLnVzZXJJbmZvSnd0SXNzdWVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdPUCc6XHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVyUHJvbWlzZSA9IHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0FOWSc6XHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVyUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShqd3QucGF5bG9hZC5pc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLnVzZXJJbmZvSnd0SXNzdWVyKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGlzc3VlclByb21pc2UudGhlbihpc3N1ZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBSZWNlaXZlZCBpc3N1ZXI6XCIgKyBpc3N1ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXMoKS50aGVuKGtleXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgha2V5cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBSZWNlaXZlZCBzaWduaW5nIGtleXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWtpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzID0gdGhpcy5fZmlsdGVyQnlBbGcoa2V5cywgand0LmhlYWRlci5hbGcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2lkIGlzIG1hbmRhdG9yeSBvbmx5IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGtleXMgaW4gdGhlIHJlZmVyZW5jZWQgSldLIFNldCBkb2N1bWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjU2lnbmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5c1swXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkua2lkID09PSBraWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2xvY2tTa2V3SW5TZWNvbmRzID0gdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3O1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogVmFsaWRhaW5nIEpXVDsgdXNpbmcgY2xvY2sgc2tldyAoaW4gc2Vjb25kcykgb2Y6IFwiLCBjbG9ja1NrZXdJblNlY29uZHMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3QocmVxLnJlc3BvbnNlVGV4dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMsIHVuZGVmaW5lZCwgdHJ1ZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogSldUIHZhbGlkYXRpb24gc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp3dC5wYXlsb2FkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogRXJyb3IgcGFyc2luZyBKV1QgcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9maWx0ZXJCeUFsZyhrZXlzLCBhbGcpIHtcclxuICAgICAgICB2YXIga3R5ID0gbnVsbDtcclxuICAgICAgICBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJSU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIlJTQVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIlBTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUFNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJFU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIkVDXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2ZpbHRlckJ5QWxnOiBhbGcgbm90IHN1cHBvcnRlZDogXCIsIGFsZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IExvb2tpbmcgZm9yIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHkpO1xyXG5cclxuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGtleS5rdHkgPT09IGt0eTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogTnVtYmVyIG9mIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHksIGtleXMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGtleXM7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50IH0gZnJvbSAnLi9PaWRjQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgVXNlck1hbmFnZXJTZXR0aW5ncyB9IGZyb20gJy4vVXNlck1hbmFnZXJTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL1VzZXIuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlckV2ZW50cyB9IGZyb20gJy4vVXNlck1hbmFnZXJFdmVudHMuanMnO1xyXG5pbXBvcnQgeyBTaWxlbnRSZW5ld1NlcnZpY2UgfSBmcm9tICcuL1NpbGVudFJlbmV3U2VydmljZS5qcyc7XHJcbmltcG9ydCB7IFNlc3Npb25Nb25pdG9yIH0gZnJvbSAnLi9TZXNzaW9uTW9uaXRvci5qcyc7XHJcbmltcG9ydCB7IFRva2VuUmV2b2NhdGlvbkNsaWVudCB9IGZyb20gJy4vVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgVG9rZW5DbGllbnQgfSBmcm9tICcuL1Rva2VuQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZXIgZXh0ZW5kcyBPaWRjQ2xpZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzID0ge30sXHJcbiAgICAgICAgU2lsZW50UmVuZXdTZXJ2aWNlQ3RvciA9IFNpbGVudFJlbmV3U2VydmljZSxcclxuICAgICAgICBTZXNzaW9uTW9uaXRvckN0b3IgPSBTZXNzaW9uTW9uaXRvcixcclxuICAgICAgICBUb2tlblJldm9jYXRpb25DbGllbnRDdG9yID0gVG9rZW5SZXZvY2F0aW9uQ2xpZW50LFxyXG4gICAgICAgIFRva2VuQ2xpZW50Q3RvciA9IFRva2VuQ2xpZW50LFxyXG4gICAgICAgIGpvc2VVdGlsID0gSm9zZVV0aWxcclxuICAgICkge1xyXG5cclxuICAgICAgICBpZiAoIShzZXR0aW5ncyBpbnN0YW5jZW9mIFVzZXJNYW5hZ2VyU2V0dGluZ3MpKSB7XHJcbiAgICAgICAgICAgIHNldHRpbmdzID0gbmV3IFVzZXJNYW5hZ2VyU2V0dGluZ3Moc2V0dGluZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlcihzZXR0aW5ncyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBVc2VyTWFuYWdlckV2ZW50cyhzZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdTZXJ2aWNlID0gbmV3IFNpbGVudFJlbmV3U2VydmljZUN0b3IodGhpcyk7XHJcblxyXG4gICAgICAgIC8vIG9yZGVyIGlzIGltcG9ydGFudCBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOyB0aGVzZSBzZXJ2aWNlcyBkZXBlbmQgdXBvbiB0aGUgZXZlbnRzLlxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmF1dG9tYXRpY1NpbGVudFJlbmV3KSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLmN0b3I6IGF1dG9tYXRpY1NpbGVudFJlbmV3IGlzIGNvbmZpZ3VyZWQsIHNldHRpbmcgdXAgc2lsZW50IHJlbmV3XCIpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0U2lsZW50UmVuZXcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLm1vbml0b3JTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLmN0b3I6IG1vbml0b3JTZXNzaW9uIGlzIGNvbmZpZ3VyZWQsIHNldHRpbmcgdXAgc2Vzc2lvbiBtb25pdG9yXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uTW9uaXRvciA9IG5ldyBTZXNzaW9uTW9uaXRvckN0b3IodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQgPSBuZXcgVG9rZW5SZXZvY2F0aW9uQ2xpZW50Q3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fdG9rZW5DbGllbnQgPSBuZXcgVG9rZW5DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9qb3NlVXRpbCA9IGpvc2VVdGlsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfcmVkaXJlY3ROYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucmVkaXJlY3ROYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX3BvcHVwTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnBvcHVwTmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9pZnJhbWVOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuaWZyYW1lTmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IF91c2VyU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MudXNlclN0b3JlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBldmVudHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cztcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLmdldFVzZXI6IHVzZXIgbG9hZGVkXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuZ2V0VXNlcjogdXNlciBub3QgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlVXNlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIobnVsbCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucmVtb3ZlVXNlcjogdXNlciByZW1vdmVkIGZyb20gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzLnVubG9hZCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblJlZGlyZWN0KGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzaTpyXCI7XHJcbiAgICAgICAgbGV0IG5hdlBhcmFtcyA9IHtcclxuICAgICAgICAgICAgdXNlUmVwbGFjZVRvTmF2aWdhdGUgOiBhcmdzLnVzZVJlcGxhY2VUb05hdmlnYXRlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU3RhcnQoYXJncywgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IsIG5hdlBhcmFtcykudGhlbigoKT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblJlZGlyZWN0OiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbmluUmVkaXJlY3RDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluRW5kKHVybCB8fCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvci51cmwpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblJlZGlyZWN0Q2FsbGJhY2s6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUmVkaXJlY3RDYWxsYmFjazogbm8gc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduaW5Qb3B1cChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6cFwiO1xyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvcHVwX3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cDogTm8gcG9wdXBfcmVkaXJlY3RfdXJpIG9yIHJlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gcG9wdXBfcmVkaXJlY3RfdXJpIG9yIHJlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MuZGlzcGxheSA9IFwicG9wdXBcIjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbihhcmdzLCB0aGlzLl9wb3B1cE5hdmlnYXRvciwge1xyXG4gICAgICAgICAgICBzdGFydFVybDogdXJsLFxyXG4gICAgICAgICAgICBwb3B1cFdpbmRvd0ZlYXR1cmVzOiBhcmdzLnBvcHVwV2luZG93RmVhdHVyZXMgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd0ZlYXR1cmVzLFxyXG4gICAgICAgICAgICBwb3B1cFdpbmRvd1RhcmdldDogYXJncy5wb3B1cFdpbmRvd1RhcmdldCB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93VGFyZ2V0XHJcbiAgICAgICAgfSkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IHNpZ25pblBvcHVwIHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzaWduaW5Qb3B1cENhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5DYWxsYmFjayh1cmwsIHRoaXMuX3BvcHVwTmF2aWdhdG9yKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrOiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwQ2FsbGJhY2s6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSkuY2F0Y2goZXJyPT57XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwQ2FsbGJhY2sgZXJyb3I6IFwiICsgZXJyICYmIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduaW5TaWxlbnQoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnNcIjtcclxuICAgICAgICAvLyBmaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhIHJlZnJlc2ggdG9rZW4sIG9yIG5lZWQgdG8gdXNlIGlmcmFtZVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIucmVmcmVzaF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgYXJncy5yZWZyZXNoX3Rva2VuID0gdXNlci5yZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZVJlZnJlc2hUb2tlbihhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFyZ3MuaWRfdG9rZW5faGludCA9IGFyZ3MuaWRfdG9rZW5faGludCB8fCAodGhpcy5zZXR0aW5ncy5pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgJiYgdXNlciAmJiB1c2VyLmlkX3Rva2VuKTtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyICYmIHRoaXMuX3NldHRpbmdzLnZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudCwgc3ViamVjdCBwcmlvciB0byBzaWxlbnQgcmVuZXc6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgICAgICBhcmdzLmN1cnJlbnRfc3ViID0gdXNlci5wcm9maWxlLnN1YjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TaWxlbnRJZnJhbWUoYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdXNlUmVmcmVzaFRva2VuKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbihhcmdzKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiBObyByZXNwb25zZSByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiTm8gcmVzcG9uc2UgcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IE5vIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiTm8gYWNjZXNzIHRva2VuIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZFRva2VuVmFsaWRhdGlvbiA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRUb2tlblZhbGlkYXRpb24gPSB0aGlzLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW4odXNlci5wcm9maWxlLCByZXN1bHQuaWRfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkVG9rZW5WYWxpZGF0aW9uLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiByZWZyZXNoIHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuYWNjZXNzX3Rva2VuID0gcmVzdWx0LmFjY2Vzc190b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5yZWZyZXNoX3Rva2VuID0gcmVzdWx0LnJlZnJlc2hfdG9rZW4gfHwgdXNlci5yZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmV4cGlyZXNfaW4gPSByZXN1bHQuZXhwaXJlc19pbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuKHByb2ZpbGUsIGlkX3Rva2VuKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dEF0dHJpYnV0ZXMoaWRfdG9rZW4sIGlzc3VlciwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkLCB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXcpLnRoZW4ocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBGYWlsZWQgdG8gdmFsaWRhdGUgaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5zdWIgIT09IHByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogc3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJzdWIgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggY3VycmVudCBzdWJcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXV0aF90aW1lICYmIHBheWxvYWQuYXV0aF90aW1lICE9PSBwcm9maWxlLmF1dGhfdGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF1dGhfdGltZSBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhdXRoX3RpbWVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1dGhfdGltZSBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhdXRoX3RpbWVcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXpwICYmIHBheWxvYWQuYXpwICE9PSBwcm9maWxlLmF6cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF6cCAmJiBwcm9maWxlLmF6cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBub3QgaW4gaWRfdG9rZW4sIGJ1dCBwcmVzZW50IGluIG9yaWdpbmFsIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhenAgbm90IGluIGlkX3Rva2VuLCBidXQgcHJlc2VudCBpbiBvcmlnaW5hbCBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfc2lnbmluU2lsZW50SWZyYW1lKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnNpbGVudF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50OiBObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSB1cmw7XHJcbiAgICAgICAgYXJncy5wcm9tcHQgPSBhcmdzLnByb21wdCB8fCBcIm5vbmVcIjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbihhcmdzLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgc2lsZW50UmVxdWVzdFRpbWVvdXQ6IGFyZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRSZXF1ZXN0VGltZW91dFxyXG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluU2lsZW50Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkNhbGxiYWNrKHVybCwgdGhpcy5faWZyYW1lTmF2aWdhdG9yKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnRDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnRDYWxsYmFjazogbm8gc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduaW5DYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6clwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5SZWRpcmVjdENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpwXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblBvcHVwQ2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnNcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluU2lsZW50Q2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZV90eXBlIGluIHN0YXRlXCIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWdub3V0Q2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzbzpyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWdub3V0UmVkaXJlY3RDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzbzpwXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWdub3V0UG9wdXBDYWxsYmFjayh1cmwsIGtlZXBPcGVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJpbnZhbGlkIHJlc3BvbnNlX3R5cGUgaW4gc3RhdGVcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBxdWVyeVNlc3Npb25TdGF0dXMoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnNcIjsgLy8gdGhpcyBhY3RzIGxpa2UgYSBzaWduaW4gc2lsZW50XHJcbiAgICAgICAgbGV0IHVybCA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IE5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLnByb21wdCA9IFwibm9uZVwiO1xyXG4gICAgICAgIGFyZ3MucmVzcG9uc2VfdHlwZSA9IGFyZ3MucmVzcG9uc2VfdHlwZSB8fCB0aGlzLnNldHRpbmdzLnF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIGFyZ3Muc2NvcGUgPSBcIm9wZW5pZFwiO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU3RhcnQoYXJncywgdGhpcy5faWZyYW1lTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0OiBhcmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXRcclxuICAgICAgICB9KS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25pblJlc3BvbnNlKG5hdlJlc3BvbnNlLnVybCkudGhlbihzaWduaW5SZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IGdvdCBzaWduaW4gcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNpZ25pblJlc3BvbnNlLnNlc3Npb25fc3RhdGUgJiYgc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogcXVlcnlTZXNzaW9uU3RhdHVzIHN1Y2Nlc3MgZm9yIHN1YjogXCIsICBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogc2lnbmluUmVzcG9uc2Uuc2Vzc2lvbl9zdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1YixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkOiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnNpZFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcInF1ZXJ5U2Vzc2lvblN0YXR1cyBzdWNjZXNzZnVsLCB1c2VyIG5vdCBhdXRoZW50aWNhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfc2lnbmluKGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU3RhcnQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMpLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluRW5kKG5hdlJlc3BvbnNlLnVybCwgYXJncyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbmluU3RhcnQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG5cclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLnByZXBhcmUobmF2aWdhdG9yUGFyYW1zKS50aGVuKGhhbmRsZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogZ290IG5hdmlnYXRvciB3aW5kb3cgaGFuZGxlXCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2lnbmluUmVxdWVzdChhcmdzKS50aGVuKHNpZ25pblJlcXVlc3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pblN0YXJ0OiBnb3Qgc2lnbmluIHJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yUGFyYW1zLnVybCA9IHNpZ25pblJlcXVlc3QudXJsO1xyXG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yUGFyYW1zLmlkID0gc2lnbmluUmVxdWVzdC5zdGF0ZS5pZDtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlLm5hdmlnYXRlKG5hdmlnYXRvclBhcmFtcyk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLmNsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pblN0YXJ0OiBFcnJvciBhZnRlciBwcmVwYXJpbmcgbmF2aWdhdG9yLCBjbG9zaW5nIG5hdmlnYXRvciB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25pbkVuZCh1cmwsIGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTaWduaW5SZXNwb25zZSh1cmwpLnRoZW4oc2lnbmluUmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiBnb3Qgc2lnbmluIHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHVzZXIgPSBuZXcgVXNlcihzaWduaW5SZXNwb25zZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJncy5jdXJyZW50X3N1Yikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuY3VycmVudF9zdWIgIT09IHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiBjdXJyZW50IHVzZXIgZG9lcyBub3QgbWF0Y2ggdXNlciByZXR1cm5lZCBmcm9tIHNpZ25pbi4gc3ViIGZyb20gc2lnbmluOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImxvZ2luX3JlcXVpcmVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IGN1cnJlbnQgdXNlciBtYXRjaGVzIHVzZXIgcmV0dXJuZWQgZnJvbSBzaWduaW5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IHVzZXIgc3RvcmVkXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWduaW5DYWxsYmFjayh1cmwsIG5hdmlnYXRvcikge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5DYWxsYmFja1wiKTtcclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLmNhbGxiYWNrKHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbm91dFJlZGlyZWN0KGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzbzpyXCI7XHJcbiAgICAgICAgbGV0IHBvc3RMb2dvdXRSZWRpcmVjdFVyaSA9IGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmIChwb3N0TG9nb3V0UmVkaXJlY3RVcmkpe1xyXG4gICAgICAgICAgICBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvc3RMb2dvdXRSZWRpcmVjdFVyaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRTdGFydChhcmdzLCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvcikudGhlbigoKT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRSZWRpcmVjdDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25vdXRSZWRpcmVjdENhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0RW5kKHVybCB8fCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvci51cmwpLnRoZW4ocmVzcG9uc2U9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UmVkaXJlY3RDYWxsYmFjazogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25vdXRQb3B1cChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic286cFwiO1xyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcbiAgICAgICAgaWYgKGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKXtcclxuICAgICAgICAgICAgLy8gd2UncmUgcHV0dGluZyBhIGR1bW15IGVudHJ5IGluIGhlcmUgYmVjYXVzZSB3ZVxyXG4gICAgICAgICAgICAvLyBuZWVkIGEgdW5pcXVlIGlkIGZyb20gdGhlIHN0YXRlIGZvciBub3RpZmljYXRpb25cclxuICAgICAgICAgICAgLy8gdG8gdGhlIHBhcmVudCB3aW5kb3csIHdoaWNoIGlzIG5lY2Vzc2FyeSBpZiB3ZVxyXG4gICAgICAgICAgICAvLyBwbGFuIHRvIHJldHVybiBiYWNrIHRvIHRoZSBjbGllbnQgYWZ0ZXIgc2lnbm91dFxyXG4gICAgICAgICAgICAvLyBhbmQgc28gd2UgY2FuIGNsb3NlIHRoZSBwb3B1cCBhZnRlciBzaWdub3V0XHJcbiAgICAgICAgICAgIGFyZ3Muc3RhdGUgPSBhcmdzLnN0YXRlIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXQoYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRQb3B1cDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25vdXRQb3B1cENhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcclxuICAgICAgICBpZiAodHlwZW9mKGtlZXBPcGVuKSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKHVybCkgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICBrZWVwT3BlbiA9IHVybDtcclxuICAgICAgICAgICAgdXJsID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkZWxpbWl0ZXIgPSAnPyc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwTmF2aWdhdG9yLmNhbGxiYWNrKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFBvcHVwQ2FsbGJhY2s6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3NpZ25vdXQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0U3RhcnQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMpLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dEVuZChuYXZSZXNwb25zZS51cmwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25vdXRTdGFydChhcmdzID0ge30sIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLnByZXBhcmUobmF2aWdhdG9yUGFyYW1zKS50aGVuKGhhbmRsZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGdvdCBuYXZpZ2F0b3Igd2luZG93IGhhbmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBsb2FkZWQgY3VycmVudCB1c2VyIGZyb20gc3RvcmFnZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmV2b2tlUHJvbWlzZSA9IHRoaXMuX3NldHRpbmdzLnJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID8gdGhpcy5fcmV2b2tlSW50ZXJuYWwodXNlcikgOiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXZva2VQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaWRfdG9rZW4gPSBhcmdzLmlkX3Rva2VuX2hpbnQgfHwgdXNlciAmJiB1c2VyLmlkX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBTZXR0aW5nIGlkX3Rva2VuIGludG8gc2lnbm91dCByZXF1ZXN0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmlkX3Rva2VuX2hpbnQgPSBpZF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZVVzZXIoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogdXNlciByZW1vdmVkLCBjcmVhdGluZyBzaWdub3V0IHJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTaWdub3V0UmVxdWVzdChhcmdzKS50aGVuKHNpZ25vdXRSZXF1ZXN0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGdvdCBzaWdub3V0IHJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yUGFyYW1zLnVybCA9IHNpZ25vdXRSZXF1ZXN0LnVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWdub3V0UmVxdWVzdC5zdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy5pZCA9IHNpZ25vdXRSZXF1ZXN0LnN0YXRlLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYXZpZ2F0ZShuYXZpZ2F0b3JQYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5jbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IEVycm9yIGFmdGVyIHByZXBhcmluZyBuYXZpZ2F0b3IsIGNsb3NpbmcgbmF2aWdhdG9yIHdpbmRvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbm91dEVuZCh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbm91dFJlc3BvbnNlKHVybCkudGhlbihzaWdub3V0UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dEVuZDogZ290IHNpZ25vdXQgcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc2lnbm91dFJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldm9rZUFjY2Vzc1Rva2VuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VJbnRlcm5hbCh1c2VyLCB0cnVlKS50aGVuKHN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogcmVtb3ZpbmcgdG9rZW4gcHJvcGVydGllcyBmcm9tIHVzZXIgYW5kIHJlLXN0b3JpbmdcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuYWNjZXNzX3Rva2VuID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLnJlZnJlc2hfdG9rZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuZXhwaXJlc19hdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci50b2tlbl90eXBlID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKHVzZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogdXNlciBzdG9yZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IGFjY2VzcyB0b2tlbiByZXZva2VkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlSW50ZXJuYWwodXNlciwgcmVxdWlyZWQpIHtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICB2YXIgYWNjZXNzX3Rva2VuID0gdXNlci5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgIHZhciByZWZyZXNoX3Rva2VuID0gdXNlci5yZWZyZXNoX3Rva2VuO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwoYWNjZXNzX3Rva2VuLCByZXF1aXJlZClcclxuICAgICAgICAgICAgICAgIC50aGVuKGF0U3VjY2VzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihydFN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdFN1Y2Nlc3MgJiYgIXJ0U3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiBubyBuZWVkIHRvIHJldm9rZSBkdWUgdG8gbm8gdG9rZW4ocyksIG9yIEpXVCBmb3JtYXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdFN1Y2Nlc3MgfHwgcnRTdWNjZXNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwoYWNjZXNzX3Rva2VuLCByZXF1aXJlZCkge1xyXG4gICAgICAgIC8vIGNoZWNrIGZvciBKV1QgdnMuIHJlZmVyZW5jZSB0b2tlblxyXG4gICAgICAgIGlmICghYWNjZXNzX3Rva2VuIHx8IGFjY2Vzc190b2tlbi5pbmRleE9mKCcuJykgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpLnRoZW4oKCkgPT4gdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkKSB7XHJcbiAgICAgICAgaWYgKCFyZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2UocmVmcmVzaF90b2tlbiwgcmVxdWlyZWQsIFwicmVmcmVzaF90b2tlblwiKS50aGVuKCgpID0+IHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0U2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcFNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZS5zdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF91c2VyU3RvcmVLZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIGB1c2VyOiR7dGhpcy5zZXR0aW5ncy5hdXRob3JpdHl9OiR7dGhpcy5zZXR0aW5ncy5jbGllbnRfaWR9YDtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5nZXQodGhpcy5fdXNlclN0b3JlS2V5KS50aGVuKHN0b3JhZ2VTdHJpbmcgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX2xvYWRVc2VyOiB1c2VyIHN0b3JhZ2VTdHJpbmcgbG9hZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFVzZXIuZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9sb2FkVXNlcjogbm8gdXNlciBzdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9yZVVzZXIodXNlcikge1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnN0b3JlVXNlcjogc3RvcmluZyB1c2VyXCIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN0b3JhZ2VTdHJpbmcgPSB1c2VyLnRvU3RvcmFnZVN0cmluZygpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlLnNldCh0aGlzLl91c2VyU3RvcmVLZXksIHN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwic3RvcmVVc2VyLnN0b3JlVXNlcjogcmVtb3ZpbmcgdXNlclwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5yZW1vdmUodGhpcy5fdXNlclN0b3JlS2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBBY2Nlc3NUb2tlbkV2ZW50cyB9IGZyb20gJy4vQWNjZXNzVG9rZW5FdmVudHMuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyRXZlbnRzIGV4dGVuZHMgQWNjZXNzVG9rZW5FdmVudHMge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XHJcbiAgICAgICAgc3VwZXIoc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQgPSBuZXcgRXZlbnQoXCJVc2VyIGxvYWRlZFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQgPSBuZXcgRXZlbnQoXCJVc2VyIHVubG9hZGVkXCIpO1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IgPSBuZXcgRXZlbnQoXCJTaWxlbnQgcmVuZXcgZXJyb3JcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dCA9IG5ldyBFdmVudChcIlVzZXIgc2lnbmVkIG91dFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQgPSBuZXcgRXZlbnQoXCJVc2VyIHNlc3Npb24gY2hhbmdlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkKHVzZXIsIHJhaXNlRXZlbnQ9dHJ1ZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLmxvYWRcIik7XHJcbiAgICAgICAgc3VwZXIubG9hZCh1c2VyKTtcclxuICAgICAgICBpZiAocmFpc2VFdmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTG9hZGVkLnJhaXNlKHVzZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHVubG9hZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy51bmxvYWRcIik7XHJcbiAgICAgICAgc3VwZXIudW5sb2FkKCk7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLnJhaXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlckxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyTG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlckxvYWRlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyVW5sb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyVW5sb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU2lsZW50UmVuZXdFcnJvcihjYikge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVTaWxlbnRSZW5ld0Vycm9yKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3JcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLnJhaXNlKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJTaWduZWRPdXQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0LmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclNpZ25lZE91dChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VVc2VyU2lnbmVkT3V0KGUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0XCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQucmFpc2UoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclNlc3Npb25DaGFuZ2VkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkKGUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLnJhaXNlKGUpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudFNldHRpbmdzIH0gZnJvbSAnLi9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xyXG5pbXBvcnQgeyBSZWRpcmVjdE5hdmlnYXRvciB9IGZyb20gJy4vUmVkaXJlY3ROYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBQb3B1cE5hdmlnYXRvciB9IGZyb20gJy4vUG9wdXBOYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBJRnJhbWVOYXZpZ2F0b3IgfSBmcm9tICcuL0lGcmFtZU5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVxdWVzdCB9IGZyb20gJy4vU2lnbmluUmVxdWVzdC5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSA2MDtcclxuY29uc3QgRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsID0gMjAwMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlclNldHRpbmdzIGV4dGVuZHMgT2lkY0NsaWVudFNldHRpbmdzIHtcclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICBwb3B1cF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIHBvcHVwV2luZG93RmVhdHVyZXMsXHJcbiAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQsXHJcbiAgICAgICAgc2lsZW50X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBzaWxlbnRSZXF1ZXN0VGltZW91dCxcclxuICAgICAgICBhdXRvbWF0aWNTaWxlbnRSZW5ldyA9IGZhbHNlLFxyXG4gICAgICAgIHZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyA9IGZhbHNlLFxyXG4gICAgICAgIGluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyA9IHRydWUsXHJcbiAgICAgICAgbW9uaXRvclNlc3Npb24gPSB0cnVlLFxyXG4gICAgICAgIGNoZWNrU2Vzc2lvbkludGVydmFsID0gRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsLFxyXG4gICAgICAgIHN0b3BDaGVja1Nlc3Npb25PbkVycm9yID0gdHJ1ZSxcclxuICAgICAgICBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSxcclxuICAgICAgICByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA9IGZhbHNlLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lLFxyXG4gICAgICAgIHJlZGlyZWN0TmF2aWdhdG9yID0gbmV3IFJlZGlyZWN0TmF2aWdhdG9yKCksXHJcbiAgICAgICAgcG9wdXBOYXZpZ2F0b3IgPSBuZXcgUG9wdXBOYXZpZ2F0b3IoKSxcclxuICAgICAgICBpZnJhbWVOYXZpZ2F0b3IgPSBuZXcgSUZyYW1lTmF2aWdhdG9yKCksXHJcbiAgICAgICAgdXNlclN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKHsgc3RvcmU6IEdsb2JhbC5zZXNzaW9uU3RvcmFnZSB9KVxyXG4gICAgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoYXJndW1lbnRzWzBdKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcG9wdXBfcmVkaXJlY3RfdXJpID0gcG9wdXBfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3B1cFdpbmRvd0ZlYXR1cmVzID0gcG9wdXBXaW5kb3dGZWF0dXJlcztcclxuICAgICAgICB0aGlzLl9wb3B1cFdpbmRvd1RhcmdldCA9IHBvcHVwV2luZG93VGFyZ2V0O1xyXG5cclxuICAgICAgICB0aGlzLl9zaWxlbnRfcmVkaXJlY3RfdXJpID0gc2lsZW50X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZXF1ZXN0VGltZW91dCA9IHNpbGVudFJlcXVlc3RUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY1NpbGVudFJlbmV3ID0gYXV0b21hdGljU2lsZW50UmVuZXc7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3ID0gdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3O1xyXG4gICAgICAgIHRoaXMuX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyA9IGluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldztcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG5cclxuICAgICAgICB0aGlzLl9tb25pdG9yU2Vzc2lvbiA9IG1vbml0b3JTZXNzaW9uO1xyXG4gICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsID0gY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XHJcbiAgICAgICAgdGhpcy5fc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IgPSBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuICAgICAgICBpZiAocXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50c1swXSAmJiBhcmd1bWVudHNbMF0ucmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKGFyZ3VtZW50c1swXS5yZXNwb25zZV90eXBlKSA/IFwiaWRfdG9rZW5cIiA6IFwiY29kZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBcImlkX3Rva2VuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID0gcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQ7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yID0gcmVkaXJlY3ROYXZpZ2F0b3I7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBOYXZpZ2F0b3IgPSBwb3B1cE5hdmlnYXRvcjtcclxuICAgICAgICB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IgPSBpZnJhbWVOYXZpZ2F0b3I7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJTdG9yZSA9IHVzZXJTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcG9wdXBfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBXaW5kb3dGZWF0dXJlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBXaW5kb3dGZWF0dXJlcztcclxuICAgIH1cclxuICAgIGdldCBwb3B1cFdpbmRvd1RhcmdldCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBXaW5kb3dUYXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNpbGVudF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpbGVudF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICAgZ2V0IHNpbGVudFJlcXVlc3RUaW1lb3V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWxlbnRSZXF1ZXN0VGltZW91dDtcclxuICAgIH1cclxuICAgIGdldCBhdXRvbWF0aWNTaWxlbnRSZW5ldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b21hdGljU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb25pdG9yU2Vzc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbW9uaXRvclNlc3Npb247XHJcbiAgICB9XHJcbiAgICBnZXQgY2hlY2tTZXNzaW9uSW50ZXJ2YWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgfVxyXG4gICAgZ2V0IHN0b3BDaGVja1Nlc3Npb25PbkVycm9yKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVkaXJlY3ROYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBpZnJhbWVOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lmcmFtZU5hdmlnYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXNlclN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmU7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgV2ViU3RvcmFnZVN0YXRlU3RvcmUge1xyXG4gICAgY29uc3RydWN0b3Ioe3ByZWZpeCA9IFwib2lkYy5cIiwgc3RvcmUgPSBHbG9iYWwubG9jYWxTdG9yYWdlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5fc3RvcmUgPSBzdG9yZTtcclxuICAgICAgICB0aGlzLl9wcmVmaXggPSBwcmVmaXg7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5zZXRcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICB0aGlzLl9zdG9yZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLmdldFwiLCBrZXkpO1xyXG5cclxuICAgICAgICBrZXkgPSB0aGlzLl9wcmVmaXggKyBrZXk7XHJcblxyXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5fc3RvcmUuZ2V0SXRlbShrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZShrZXkpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5yZW1vdmVcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3N0b3JlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICB0aGlzLl9zdG9yZS5yZW1vdmVJdGVtKGtleSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsS2V5cygpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5nZXRBbGxLZXlzXCIpO1xyXG5cclxuICAgICAgICB2YXIga2V5cyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fc3RvcmUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGxldCBrZXkgPSB0aGlzLl9zdG9yZS5rZXkoaW5kZXgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKHRoaXMuX3ByZWZpeCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkuc3Vic3RyKHRoaXMuX3ByZWZpeC5sZW5ndGgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXlzKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBqd3MsIEtFWVVUSUwgYXMgS2V5VXRpbCwgWDUwOSwgY3J5cHRvLCBoZXh0b2I2NHUsIGI2NHRvaGV4IH0gZnJvbSAnLi4vLi4vanNyc2FzaWduL2Rpc3QvanNyc2FzaWduLmpzJztcclxuXHJcbmNvbnN0IEFsbG93ZWRTaWduaW5nQWxncyA9IFsnUlMyNTYnLCAnUlMzODQnLCAnUlM1MTInLCAnUFMyNTYnLCAnUFMzODQnLCAnUFM1MTInLCAnRVMyNTYnLCAnRVMzODQnLCAnRVM1MTInXTtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBqd3MsXHJcbiAgICBLZXlVdGlsLFxyXG4gICAgWDUwOSxcclxuICAgIGNyeXB0byxcclxuICAgIGhleHRvYjY0dSxcclxuICAgIGI2NHRvaGV4LFxyXG4gICAgQWxsb3dlZFNpZ25pbmdBbGdzXHJcbn07XHJcbiIsImltcG9ydCB1dWlkNCBmcm9tICd1dWlkL3Y0JztcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgUkZDNDEyMiB2ZXJzaW9uIDQgZ3VpZCAoKVxyXG4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmRvbSgpIHtcclxuICByZXR1cm4gdXVpZDQoKS5yZXBsYWNlKC8tL2csICcnKTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vanNyc2FzaWduL2Rpc3QvanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaWFkZGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaXN1YmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL3V1aWQvbGliL3JuZy1icm93c2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvdXVpZC92NC5qcyIsIndlYnBhY2s6Ly9PaWRjLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0FjY2Vzc1Rva2VuRXZlbnRzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YUlGcmFtZU5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFQb3B1cE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0Vycm9yUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9FdmVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0dsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0lGcmFtZU5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0lGcmFtZVdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0luTWVtb3J5V2ViU3RvcmFnZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0pvc2VVdGlsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxJbXBsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSnNvblNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Mb2cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9NZXRhZGF0YVNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9PaWRjQ2xpZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvT2lkY0NsaWVudFNldHRpbmdzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUG9wdXBOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Qb3B1cFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1JlZGlyZWN0TmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUmVzcG9uc2VWYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TZXNzaW9uTW9uaXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWduaW5SZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblN0YXRlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbm91dFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWdub3V0UmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWxlbnRSZW5ld1NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TdGF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1RpbWVyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVG9rZW5DbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Ub2tlblJldm9jYXRpb25DbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9VcmxVdGlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJJbmZvU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXJFdmVudHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlclNldHRpbmdzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9jcnlwdG8vanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvcmFuZG9tLmpzIiwid2VicGFjazovL09pZGMvLi92ZXJzaW9uLmpzIl0sIm5hbWVzIjpbIlZlcnNpb24iLCJMb2ciLCJPaWRjQ2xpZW50IiwiT2lkY0NsaWVudFNldHRpbmdzIiwiV2ViU3RvcmFnZVN0YXRlU3RvcmUiLCJJbk1lbW9yeVdlYlN0b3JhZ2UiLCJVc2VyTWFuYWdlciIsIkFjY2Vzc1Rva2VuRXZlbnRzIiwiTWV0YWRhdGFTZXJ2aWNlIiwiQ29yZG92YVBvcHVwTmF2aWdhdG9yIiwiQ29yZG92YUlGcmFtZU5hdmlnYXRvciIsIkNoZWNrU2Vzc2lvbklGcmFtZSIsIlRva2VuUmV2b2NhdGlvbkNsaWVudCIsIlNlc3Npb25Nb25pdG9yIiwiR2xvYmFsIiwiVXNlciIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIndpbmRvdyIsIllBSE9PIiwidW5kZWZpbmVkIiwibGFuZyIsImV4dGVuZCIsImciLCJoIiwiZiIsIkVycm9yIiwiZCIsInByb3RvdHlwZSIsImNvbnN0cnVjdG9yIiwic3VwZXJjbGFzcyIsIk9iamVjdCIsImIiLCJlIiwiYyIsInRlc3QiLCJqIiwiaSIsImxlbmd0aCIsImwiLCJrIiwiYSIsIkNyeXB0b0pTIiwibGliIiwiQmFzZSIsIm4iLCJwIiwibyIsIm1peEluIiwiaGFzT3duUHJvcGVydHkiLCJpbml0IiwiJHN1cGVyIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJjcmVhdGUiLCJ0b1N0cmluZyIsImNsb25lIiwiV29yZEFycmF5Iiwid29yZHMiLCJzaWdCeXRlcyIsInN0cmluZ2lmeSIsImNvbmNhdCIsInQiLCJxIiwicyIsImNsYW1wIiwiciIsImNlaWwiLCJjYWxsIiwic2xpY2UiLCJyYW5kb20iLCJwdXNoIiwibSIsImVuYyIsIkhleCIsImpvaW4iLCJwYXJzZSIsInBhcnNlSW50Iiwic3Vic3RyIiwiTGF0aW4xIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiY2hhckNvZGVBdCIsIlV0ZjgiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0iLCJyZXNldCIsIl9kYXRhIiwiX25EYXRhQnl0ZXMiLCJfYXBwZW5kIiwiX3Byb2Nlc3MiLCJ3IiwieCIsImJsb2NrU2l6ZSIsInYiLCJ1IiwibWF4IiwiX21pbkJ1ZmZlclNpemUiLCJtaW4iLCJfZG9Qcm9jZXNzQmxvY2siLCJzcGxpY2UiLCJIYXNoZXIiLCJjZmciLCJfZG9SZXNldCIsInVwZGF0ZSIsImZpbmFsaXplIiwiX2RvRmluYWxpemUiLCJfY3JlYXRlSGVscGVyIiwiX2NyZWF0ZUhtYWNIZWxwZXIiLCJITUFDIiwiYWxnbyIsIk1hdGgiLCJ4NjQiLCJXb3JkIiwiaGlnaCIsImxvdyIsInRvWDMyIiwiQmFzZTY0IiwiX21hcCIsImNoYXJBdCIsImluZGV4T2YiLCJzcXJ0IiwicG93IiwiU0hBMjU2IiwiX2hhc2giLCJmbG9vciIsIkhtYWNTSEEyNTYiLCJUIiwiZWEiLCJTSEE1MTIiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIlgiLCJLIiwiWSIsIkwiLCJaIiwiTSIsIiQiLCJOIiwiYWEiLCJPIiwiYmEiLCJQIiwiY2EiLCJRIiwieiIsIkEiLCJ5IiwiVSIsIkIiLCJSIiwiQyIsIlMiLCJEIiwiViIsIkUiLCJXIiwiZmEiLCJkYSIsIkhtYWNTSEE1MTIiLCJTSEEzODQiLCJIbWFjU0hBMzg0IiwiYjY0bWFwIiwiYjY0cGFkIiwiaGV4MmI2NCIsInN1YnN0cmluZyIsImI2NHRvaGV4IiwiaW50MmNoYXIiLCJiNjR0b0JBIiwiQXJyYXkiLCJkYml0cyIsImNhbmFyeSIsImpfbG0iLCJCaWdJbnRlZ2VyIiwiZnJvbU51bWJlciIsImZyb21TdHJpbmciLCJuYmkiLCJhbTEiLCJhbTIiLCJhbTMiLCJhcHBOYW1lIiwiYW0iLCJEQiIsIkRNIiwiRFYiLCJCSV9GUCIsIkZWIiwiRjEiLCJGMiIsIkJJX1JNIiwiQklfUkMiLCJyciIsInZ2IiwiaW50QXQiLCJibnBDb3B5VG8iLCJibnBGcm9tSW50IiwibmJ2IiwiZnJvbUludCIsImJucEZyb21TdHJpbmciLCJmcm9tUmFkaXgiLCJaRVJPIiwic3ViVG8iLCJibnBDbGFtcCIsImJuVG9TdHJpbmciLCJuZWdhdGUiLCJ0b1JhZGl4IiwiYm5OZWdhdGUiLCJibkFicyIsImJuQ29tcGFyZVRvIiwibmJpdHMiLCJibkJpdExlbmd0aCIsImJucERMU2hpZnRUbyIsImJucERSU2hpZnRUbyIsImJucExTaGlmdFRvIiwiYm5wUlNoaWZ0VG8iLCJibnBTdWJUbyIsImJucE11bHRpcGx5VG8iLCJhYnMiLCJibnBTcXVhcmVUbyIsImJucERpdlJlbVRvIiwiY29weVRvIiwibFNoaWZ0VG8iLCJkbFNoaWZ0VG8iLCJjb21wYXJlVG8iLCJPTkUiLCJkclNoaWZ0VG8iLCJyU2hpZnRUbyIsImJuTW9kIiwiZGl2UmVtVG8iLCJDbGFzc2ljIiwiY0NvbnZlcnQiLCJtb2QiLCJjUmV2ZXJ0IiwiY1JlZHVjZSIsImNNdWxUbyIsIm11bHRpcGx5VG8iLCJyZWR1Y2UiLCJjU3FyVG8iLCJzcXVhcmVUbyIsImNvbnZlcnQiLCJyZXZlcnQiLCJtdWxUbyIsInNxclRvIiwiYm5wSW52RGlnaXQiLCJNb250Z29tZXJ5IiwibXAiLCJpbnZEaWdpdCIsIm1wbCIsIm1waCIsInVtIiwibXQyIiwibW9udENvbnZlcnQiLCJtb250UmV2ZXJ0IiwibW9udFJlZHVjZSIsIm1vbnRTcXJUbyIsIm1vbnRNdWxUbyIsImJucElzRXZlbiIsImJucEV4cCIsImJuTW9kUG93SW50IiwiaXNFdmVuIiwiZXhwIiwiYml0TGVuZ3RoIiwibW9kUG93SW50IiwiYm5DbG9uZSIsImJuSW50VmFsdWUiLCJibkJ5dGVWYWx1ZSIsImJuU2hvcnRWYWx1ZSIsImJucENodW5rU2l6ZSIsIkxOMiIsImxvZyIsImJuU2lnTnVtIiwiYm5wVG9SYWRpeCIsInNpZ251bSIsImNodW5rU2l6ZSIsImludFZhbHVlIiwiYm5wRnJvbVJhZGl4IiwiZE11bHRpcGx5IiwiZEFkZE9mZnNldCIsImJucEZyb21OdW1iZXIiLCJ0ZXN0Qml0IiwiYml0d2lzZVRvIiwic2hpZnRMZWZ0Iiwib3Bfb3IiLCJpc1Byb2JhYmxlUHJpbWUiLCJuZXh0Qnl0ZXMiLCJiblRvQnl0ZUFycmF5IiwiYm5FcXVhbHMiLCJibk1pbiIsImJuTWF4IiwiYm5wQml0d2lzZVRvIiwib3BfYW5kIiwiYm5BbmQiLCJibk9yIiwib3BfeG9yIiwiYm5Yb3IiLCJvcF9hbmRub3QiLCJibkFuZE5vdCIsImJuTm90IiwiYm5TaGlmdExlZnQiLCJiblNoaWZ0UmlnaHQiLCJsYml0IiwiYm5HZXRMb3dlc3RTZXRCaXQiLCJjYml0IiwiYm5CaXRDb3VudCIsImJuVGVzdEJpdCIsImJucENoYW5nZUJpdCIsImJuU2V0Qml0IiwiY2hhbmdlQml0IiwiYm5DbGVhckJpdCIsImJuRmxpcEJpdCIsImJucEFkZFRvIiwiYm5BZGQiLCJhZGRUbyIsImJuU3VidHJhY3QiLCJibk11bHRpcGx5IiwiYm5TcXVhcmUiLCJibkRpdmlkZSIsImJuUmVtYWluZGVyIiwiYm5EaXZpZGVBbmRSZW1haW5kZXIiLCJibnBETXVsdGlwbHkiLCJibnBEQWRkT2Zmc2V0IiwiTnVsbEV4cCIsIm5Ob3AiLCJuTXVsVG8iLCJuU3FyVG8iLCJiblBvdyIsImJucE11bHRpcGx5TG93ZXJUbyIsImJucE11bHRpcGx5VXBwZXJUbyIsIkJhcnJldHQiLCJyMiIsInEzIiwibXUiLCJkaXZpZGUiLCJiYXJyZXR0Q29udmVydCIsImJhcnJldHRSZXZlcnQiLCJiYXJyZXR0UmVkdWNlIiwibXVsdGlwbHlVcHBlclRvIiwibXVsdGlwbHlMb3dlclRvIiwiYmFycmV0dFNxclRvIiwiYmFycmV0dE11bFRvIiwiYm5Nb2RQb3ciLCJibkdDRCIsImdldExvd2VzdFNldEJpdCIsImJucE1vZEludCIsImJuTW9kSW52ZXJzZSIsInN1YnRyYWN0IiwiYWRkIiwibG93cHJpbWVzIiwibHBsaW0iLCJibklzUHJvYmFibGVQcmltZSIsIm1vZEludCIsIm1pbGxlclJhYmluIiwiYm5wTWlsbGVyUmFiaW4iLCJzaGlmdFJpZ2h0IiwibW9kUG93IiwiYnl0ZVZhbHVlIiwic2hvcnRWYWx1ZSIsInRvQnl0ZUFycmF5IiwiZXF1YWxzIiwiYW5kIiwib3IiLCJ4b3IiLCJhbmROb3QiLCJub3QiLCJiaXRDb3VudCIsInNldEJpdCIsImNsZWFyQml0IiwiZmxpcEJpdCIsIm11bHRpcGx5IiwicmVtYWluZGVyIiwiZGl2aWRlQW5kUmVtYWluZGVyIiwibW9kSW52ZXJzZSIsImdjZCIsInNxdWFyZSIsIkFyY2ZvdXIiLCJBUkM0aW5pdCIsIkFSQzRuZXh0IiwibmV4dCIsInBybmdfbmV3c3RhdGUiLCJybmdfcHNpemUiLCJybmdfc3RhdGUiLCJybmdfcG9vbCIsInJuZ19wcHRyIiwicm5nX3NlZWRfaW50Iiwicm5nX3NlZWRfdGltZSIsIkRhdGUiLCJnZXRUaW1lIiwiY3J5cHRvIiwibXNDcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJ1YSIsIlVpbnQ4QXJyYXkiLCJhcHBWZXJzaW9uIiwicm5nX2dldF9ieXRlIiwicm5nX2dldF9ieXRlcyIsIlNlY3VyZVJhbmRvbSIsInBhcnNlQmlnSW50IiwibGluZWJyayIsImJ5dGUySGV4IiwicGtjczFwYWQyIiwib2FlcF9tZ2YxX2FyciIsIm9hZXBfcGFkIiwiS0pVUiIsIk1lc3NhZ2VEaWdlc3QiLCJVdGlsIiwiZ2V0Q2Fub25pY2FsQWxnTmFtZSIsImdldEhhc2hMZW5ndGgiLCJoZXh0b3JzdHIiLCJoYXNoSGV4IiwicnN0cnRvaGV4IiwiUlNBS2V5IiwiZG1wMSIsImRtcTEiLCJjb2VmZiIsIlJTQVNldFB1YmxpYyIsImlzUHVibGljIiwiaXNQcml2YXRlIiwiUlNBRG9QdWJsaWMiLCJSU0FFbmNyeXB0IiwiZG9QdWJsaWMiLCJSU0FFbmNyeXB0T0FFUCIsInNldFB1YmxpYyIsImVuY3J5cHQiLCJlbmNyeXB0T0FFUCIsInR5cGUiLCJFQ0ZpZWxkRWxlbWVudEZwIiwiZmVGcEVxdWFscyIsImZlRnBUb0JpZ0ludGVnZXIiLCJmZUZwTmVnYXRlIiwiZmVGcEFkZCIsInRvQmlnSW50ZWdlciIsImZlRnBTdWJ0cmFjdCIsImZlRnBNdWx0aXBseSIsImZlRnBTcXVhcmUiLCJmZUZwRGl2aWRlIiwiRUNQb2ludEZwIiwiY3VydmUiLCJ6aW52IiwicG9pbnRGcEdldFgiLCJmcm9tQmlnSW50ZWdlciIsInBvaW50RnBHZXRZIiwicG9pbnRGcEVxdWFscyIsImlzSW5maW5pdHkiLCJwb2ludEZwSXNJbmZpbml0eSIsInBvaW50RnBOZWdhdGUiLCJwb2ludEZwQWRkIiwidHdpY2UiLCJnZXRJbmZpbml0eSIsInBvaW50RnBUd2ljZSIsInBvaW50RnBNdWx0aXBseSIsInBvaW50RnBNdWx0aXBseVR3byIsImdldFgiLCJnZXRZIiwibXVsdGlwbHlUd28iLCJFQ0N1cnZlRnAiLCJpbmZpbml0eSIsImN1cnZlRnBHZXRRIiwiY3VydmVGcEdldEEiLCJjdXJ2ZUZwR2V0QiIsImN1cnZlRnBFcXVhbHMiLCJjdXJ2ZUZwR2V0SW5maW5pdHkiLCJjdXJ2ZUZwRnJvbUJpZ0ludGVnZXIiLCJjdXJ2ZUZwRGVjb2RlUG9pbnRIZXgiLCJnZXRRIiwiZ2V0QSIsImdldEIiLCJkZWNvZGVQb2ludEhleCIsImdldEJ5dGVMZW5ndGgiLCJnZXRFbmNvZGVkIiwidG9CeXRlQXJyYXlVbnNpZ25lZCIsInVuc2hpZnQiLCJkZWNvZGVGcm9tIiwiZGVjb2RlRnJvbUhleCIsImFkZDJEIiwidHdpY2UyRCIsInZhbHVlT2YiLCJtdWx0aXBseTJEIiwiaXNPbkN1cnZlIiwidmFsaWRhdGUiLCJqc29uUGFyc2UiLCJSZWdFeHAiLCJtYXRjaCIsInJlcGxhY2UiLCJzaGlmdCIsImFzbjEiLCJBU04xVXRpbCIsImludGVnZXJUb0J5dGVIZXgiLCJiaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleCIsImdldFBFTVN0cmluZ0Zyb21IZXgiLCJoZXh0b3BlbSIsIm5ld09iamVjdCIsIkRFUkJvb2xlYW4iLCJERVJJbnRlZ2VyIiwiREVSQml0U3RyaW5nIiwiREVST2N0ZXRTdHJpbmciLCJERVJOdWxsIiwiREVST2JqZWN0SWRlbnRpZmllciIsIkRFUkVudW1lcmF0ZWQiLCJERVJVVEY4U3RyaW5nIiwiREVSTnVtZXJpY1N0cmluZyIsIkRFUlByaW50YWJsZVN0cmluZyIsIkRFUlRlbGV0ZXhTdHJpbmciLCJERVJJQTVTdHJpbmciLCJERVJVVENUaW1lIiwiREVSR2VuZXJhbGl6ZWRUaW1lIiwiREVSU2VxdWVuY2UiLCJERVJTZXQiLCJERVJUYWdnZWRPYmplY3QiLCJrZXlzIiwiYXJyYXkiLCJ0YWciLCJleHBsaWNpdCIsIm9iaiIsImpzb25Ub0FTTjFIRVgiLCJnZXRFbmNvZGVkSGV4Iiwib2lkSGV4VG9JbnQiLCJvaWRJbnRUb0hleCIsInNwbGl0IiwiQVNOMU9iamVjdCIsImdldExlbmd0aEhleEZyb21WYWx1ZSIsImhWIiwiaFRMViIsImlzTW9kaWZpZWQiLCJnZXRGcmVzaFZhbHVlSGV4IiwiaEwiLCJoVCIsImdldFZhbHVlSGV4IiwiREVSQWJzdHJhY3RTdHJpbmciLCJnZXRTdHJpbmciLCJzZXRTdHJpbmciLCJ1dGY4dG9oZXgiLCJ0b0xvd2VyQ2FzZSIsInNldFN0cmluZ0hleCIsInN0ciIsImhleCIsIkRFUkFic3RyYWN0VGltZSIsImxvY2FsRGF0ZVRvVVRDIiwidXRjIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJmb3JtYXREYXRlIiwiemVyb1BhZGRpbmciLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZXRNaWxsaXNlY29uZHMiLCJzdG9oZXgiLCJzZXRCeURhdGVWYWx1ZSIsIlVUQyIsInNldEJ5RGF0ZSIsIkRFUkFic3RyYWN0U3RydWN0dXJlZCIsInNldEJ5QVNOMU9iamVjdEFycmF5IiwiYXNuMUFycmF5IiwiYXBwZW5kQVNOMU9iamVjdCIsInNldEJ5QmlnSW50ZWdlciIsInNldEJ5SW50ZWdlciIsInNldFZhbHVlSGV4IiwiYmlnaW50Iiwic2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzIiwic2V0VW51c2VkQml0c0FuZEhleFZhbHVlIiwic2V0QnlCaW5hcnlTdHJpbmciLCJzZXRCeUJvb2xlYW5BcnJheSIsIm5ld0ZhbHNlQXJyYXkiLCJiaW4iLCJzZXRWYWx1ZU9pZFN0cmluZyIsInNldFZhbHVlTmFtZSIsIng1MDkiLCJPSUQiLCJuYW1lMm9pZCIsIm9pZCIsIm5hbWUiLCJkYXRlIiwid2l0aE1pbGxpcyIsIm1pbGxpcyIsInNvcnRGbGFnIiwic29ydCIsInNvcnRmbGFnIiwiaXNFeHBsaWNpdCIsImFzbjFPYmplY3QiLCJzZXRBU04xT2JqZWN0IiwiQVNOMUhFWCIsImdldExibGVuIiwiZ2V0TCIsImdldFZibGVuIiwiZ2V0VmlkeCIsImdldFYiLCJnZXRUTFYiLCJnZXROZXh0U2libGluZ0lkeCIsImdldENoaWxkSWR4IiwiZ2V0TnRoQ2hpbGRJZHgiLCJnZXRJZHhieUxpc3QiLCJnZXRUTFZieUxpc3QiLCJnZXRWYnlMaXN0IiwiaGV4dG9vaWRzdHIiLCJkdW1wIiwib21taXRfbG9uZ19vY3RldCIsImlzQVNOMUhFWCIsIm9pZDJuYW1lIiwiaGV4dG91dGY4Iiwib2lkbmFtZSIsIkpTT04iLCJ4NTA5RXh0TmFtZSIsImlzSGV4IiwiQmFzZTY0eCIsInN0b0JBIiwiQkF0b3MiLCJCQXRvaGV4Iiwic3RvYjY0Iiwic3RvYjY0dSIsImI2NHRvYjY0dSIsImI2NHV0b3MiLCJiNjR1dG9iNjQiLCJoZXh0b2I2NHUiLCJiNjR1dG9oZXgiLCJ1dGY4dG9iNjR1IiwiYjY0dXRvdXRmOCIsIkJ1ZmZlciIsInVyaWNtcHRvaGV4IiwiZW5jb2RlVVJJQ29tcG9uZW50QWxsIiwiaGV4dG91cmljbXAiLCJ1dGY4dG9iNjQiLCJiNjR0b3V0ZjgiLCJoZXh0b2I2NCIsImhleHRvYjY0bmwiLCJiNjRubHRvaGV4IiwicGVtdG9oZXgiLCJoZXh0b0FycmF5QnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJEYXRhVmlldyIsInNldFVpbnQ4IiwiQXJyYXlCdWZmZXJ0b2hleCIsImJ5dGVMZW5ndGgiLCJnZXRVaW50OCIsInp1bHV0b21zZWMiLCJ6dWx1dG9zZWMiLCJ6dWx1dG9kYXRlIiwiZGF0ZXRvenVsdSIsImdldFVUQ0Z1bGxZZWFyIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENEYXRlIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImlwdjZ0b2hleCIsInJlcGVhdCIsImhleHRvaXB2NiIsImhleHRvaXAiLCJpcHRvaGV4IiwibmV3bGluZV90b1VuaXgiLCJuZXdsaW5lX3RvRG9zIiwiaXNJbnRlZ2VyIiwiaXNCYXNlNjQiLCJpc0Jhc2U2NFVSTCIsImlzSW50ZWdlckFycmF5IiwiaGV4dG9wb3NoZXgiLCJpbnRhcnlzdHJ0b2hleCIsIm1hcCIsInN0cmRpZmZpZHgiLCJESUdFU1RJTkZPSEVBRCIsInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDIiLCJtZDUiLCJyaXBlbWQxNjAiLCJERUZBVUxUUFJPVklERVIiLCJobWFjbWQ1IiwiaG1hY3NoYTEiLCJobWFjc2hhMjI0IiwiaG1hY3NoYTI1NiIsImhtYWNzaGEzODQiLCJobWFjc2hhNTEyIiwiaG1hY3JpcGVtZDE2MCIsIk1ENXdpdGhSU0EiLCJTSEExd2l0aFJTQSIsIlNIQTIyNHdpdGhSU0EiLCJTSEEyNTZ3aXRoUlNBIiwiU0hBMzg0d2l0aFJTQSIsIlNIQTUxMndpdGhSU0EiLCJSSVBFTUQxNjB3aXRoUlNBIiwiTUQ1d2l0aEVDRFNBIiwiU0hBMXdpdGhFQ0RTQSIsIlNIQTIyNHdpdGhFQ0RTQSIsIlNIQTI1NndpdGhFQ0RTQSIsIlNIQTM4NHdpdGhFQ0RTQSIsIlNIQTUxMndpdGhFQ0RTQSIsIlJJUEVNRDE2MHdpdGhFQ0RTQSIsIlNIQTF3aXRoRFNBIiwiU0hBMjI0d2l0aERTQSIsIlNIQTI1NndpdGhEU0EiLCJNRDV3aXRoUlNBYW5kTUdGMSIsIlNIQTF3aXRoUlNBYW5kTUdGMSIsIlNIQTIyNHdpdGhSU0FhbmRNR0YxIiwiU0hBMjU2d2l0aFJTQWFuZE1HRjEiLCJTSEEzODR3aXRoUlNBYW5kTUdGMSIsIlNIQTUxMndpdGhSU0FhbmRNR0YxIiwiUklQRU1EMTYwd2l0aFJTQWFuZE1HRjEiLCJDUllQVE9KU01FU1NBR0VESUdFU1ROQU1FIiwiTUQ1IiwiU0hBMSIsIlNIQTIyNCIsIlJJUEVNRDE2MCIsImdldERpZ2VzdEluZm9IZXgiLCJnZXRQYWRkZWREaWdlc3RJbmZvSGV4IiwiaGFzaFN0cmluZyIsImFsZyIsImRpZ2VzdFN0cmluZyIsImRpZ2VzdEhleCIsInByb3YiLCJzaGEyNTZIZXgiLCJzaGE1MTJIZXgiLCJTRUNVUkVSQU5ET01HRU4iLCJnZXRSYW5kb21IZXhPZk5ieXRlcyIsImdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcyIsImdldFJhbmRvbUhleE9mTmJpdHMiLCJnZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cyIsImdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgiLCJnZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXgiLCJzZXRBbGdBbmRQcm92aWRlciIsIm1kIiwidXBkYXRlU3RyaW5nIiwidXBkYXRlSGV4IiwiZGlnZXN0Iiwic2pjbCIsImhhc2giLCJjb2RlYyIsInRvQml0cyIsImZyb21CaXRzIiwiYWxnTmFtZSIsInByb3ZOYW1lIiwiSEFTSExFTkdUSCIsIk1hYyIsImFsZ1Byb3YiLCJtYWMiLCJwYXNzIiwiZG9GaW5hbCIsImRvRmluYWxTdHJpbmciLCJkb0ZpbmFsSGV4Iiwic2V0UGFzc3dvcmQiLCJ1dGY4IiwicnN0ciIsImI2NCIsImI2NHUiLCJTaWduYXR1cmUiLCJfc2V0QWxnTmFtZXMiLCJtZEFsZ05hbWUiLCJwdWJrZXlBbGdOYW1lIiwiX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUiLCJLRVlVVElMIiwiZ2V0S2V5IiwicHJ2S2V5Iiwic3RhdGUiLCJwdWJLZXkiLCJzaWduIiwic0hhc2hIZXgiLCJlY3BydmhleCIsImVjY3VydmVuYW1lIiwiRUNEU0EiLCJoU2lnbiIsInNpZ25IZXgiLCJzaWduV2l0aE1lc3NhZ2VIYXNoUFNTIiwicHNzU2FsdExlbiIsInNpZ25XaXRoTWVzc2FnZUhhc2giLCJEU0EiLCJzaWduU3RyaW5nIiwidmVyaWZ5IiwiZWNwdWJoZXgiLCJ2ZXJpZnlIZXgiLCJ2ZXJpZnlXaXRoTWVzc2FnZUhhc2hQU1MiLCJ2ZXJpZnlXaXRoTWVzc2FnZUhhc2giLCJhbGdQcm92TmFtZSIsImluaXRQYXJhbXMiLCJwc3NzYWx0bGVuIiwicHJ2a2V5cGVtIiwicHJ2a2V5cGFzIiwiQ2lwaGVyIiwiZ2V0QWxnQnlLZXlBbmROYW1lIiwiZGVjcnlwdCIsImRlY3J5cHRPQUVQIiwib2lkaGV4Mm5hbWUiLCJnZXRCaWdSYW5kb20iLCJzZXROYW1lZEN1cnZlIiwiZWNwYXJhbXMiLCJFQ1BhcmFtZXRlckRCIiwiZ2V0QnlOYW1lIiwicHJ2S2V5SGV4IiwicHViS2V5SGV4IiwiY3VydmVOYW1lIiwic2V0UHJpdmF0ZUtleUhleCIsInNldFB1YmxpY0tleUhleCIsImdldFB1YmxpY0tleVhZSGV4Iiwia2V5bGVuIiwiZ2V0U2hvcnROSVNUUEN1cnZlTmFtZSIsImdlbmVyYXRlS2V5UGFpckhleCIsImJpUlNTaWdUb0FTTjFTaWciLCJmcm9tQnl0ZUFycmF5VW5zaWduZWQiLCJzZXJpYWxpemVTaWciLCJwYXJzZVNpZ0hleCIsInZlcmlmeVJhdyIsIkJpdGNvaW4iLCJpc0FycmF5IiwicGFyc2VTaWciLCJ0b0J5dGVBcnJheVNpZ25lZCIsInBhcnNlU2lnQ29tcGFjdCIsInJlYWRQS0NTNVBydktleUhleCIsImdldE5hbWUiLCJyZWFkUEtDUzhQcnZLZXlIZXgiLCJyZWFkUEtDUzhQdWJLZXlIZXgiLCJyZWFkQ2VydFB1YktleUhleCIsInBydiIsInB1YiIsInBhcnNlU2lnSGV4SW5IZXhSUyIsImFzbjFTaWdUb0NvbmNhdFNpZyIsImNvbmNhdFNpZ1RvQVNOMVNpZyIsImhleFJTU2lnVG9BU04xU2lnIiwicmVnaXN0IiwiQUVTIiwiVHJpcGxlREVTIiwiREVTIiwia2V5IiwiaXYiLCJjaXBoZXJ0ZXh0IiwicHJvYyIsImVwcm9jIiwiaXZsZW4iLCJjaXBoZXIiLCJpdnNhbHQiLCJkYXRhIiwia2V5aGV4IiwiaXZoZXgiLCJ2ZXJzaW9uIiwicGFyc2VQS0NTNVBFTSIsImdldEtleUFuZFVudXNlZEl2QnlQYXNzY29kZUFuZEl2c2FsdCIsImRlY3J5cHRLZXlCNjQiLCJnZXREZWNyeXB0ZWRLZXlIZXgiLCJnZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgiLCJ0b1VwcGVyQ2FzZSIsInBhcnNlSGV4T2ZFbmNyeXB0ZWRQS0NTOCIsImVuY3J5cHRpb25TY2hlbWVBbGciLCJlbmNyeXB0aW9uU2NoZW1lSVYiLCJwYmtkZjJTYWx0IiwicGJrZGYySXRlciIsImdldFBCS0RGMktleUhleEZyb21QYXJhbSIsIlBCS0RGMiIsImtleVNpemUiLCJpdGVyYXRpb25zIiwiX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU0iLCJnZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU0iLCJnZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgiLCJwYXJzZVBsYWluUHJpdmF0ZVBLQ1M4SGV4IiwiYWxncGFyYW0iLCJhbGdvaWQiLCJrZXlpZHgiLCJnZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhQRU0iLCJfZ2V0S2V5RnJvbVB1YmxpY1BLQ1M4SGV4IiwicGFyc2VQdWJsaWNSYXdSU0FLZXlIZXgiLCJwYXJzZVB1YmxpY1BLQ1M4SGV4IiwieHkiLCJrdHkiLCJkcCIsImRxIiwiY28iLCJxaSIsInNldFByaXZhdGVFeCIsInNldFByaXZhdGUiLCJjcnYiLCJYNTA5IiwiZ2V0UHVibGljS2V5RnJvbUNlcnRIZXgiLCJnZXRQdWJsaWNLZXlGcm9tQ2VydFBFTSIsImdlbmVyYXRlS2V5cGFpciIsImdlbmVyYXRlIiwicHJ2S2V5T2JqIiwicHViS2V5T2JqIiwiZ2V0UEVNIiwiU3ViamVjdFB1YmxpY0tleUluZm8iLCJzZXEiLCJvY3RzdHIiLCJiaXRzdHIiLCJnZXRLZXlGcm9tQ1NSUEVNIiwiZ2V0S2V5RnJvbUNTUkhleCIsInBhcnNlQ1NSSGV4IiwicDhwdWJrZXloZXgiLCJnZXRKV0tGcm9tS2V5IiwiZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsImdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsInJlYWRQcml2YXRlS2V5RnJvbVBFTVN0cmluZyIsInJlYWRQS0NTNVB1YktleUhleCIsInJlYWRDZXJ0SGV4IiwiZ2V0UHVibGljS2V5SGV4IiwiX1JFX0hFWERFQ09OTFkiLCJjb21waWxlIiwiX3JzYXNpZ25fZ2V0SGV4UGFkZGVkRGlnZXN0SW5mb0ZvclN0cmluZyIsImRvUHJpdmF0ZSIsInBzc19tZ2YxX3N0ciIsInNpZ25QU1MiLCJfcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkiLCJfcnNhc2lnbl9nZXRIZXhEaWdlc3RJbmZvRnJvbVNpZyIsIl9yc2FzaWduX2dldEFsZ05hbWVBbmRIYXNoRnJvbUhleERpc2dlc3RJbmZvIiwidmVyaWZ5UFNTIiwiU0FMVF9MRU5fSExFTiIsIlNBTFRfTEVOX01BWCIsIlNBTFRfTEVOX1JFQ09WRVIiLCJmb2Zmc2V0IiwiYUV4dEluZm8iLCJnZXRWZXJzaW9uIiwiZ2V0U2VyaWFsTnVtYmVySGV4IiwiZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQiLCJnZXRJc3N1ZXJIZXgiLCJnZXRJc3N1ZXJTdHJpbmciLCJoZXgyZG4iLCJnZXRTdWJqZWN0SGV4IiwiZ2V0U3ViamVjdFN0cmluZyIsImdldE5vdEJlZm9yZSIsImdldE5vdEFmdGVyIiwiZ2V0UHVibGljS2V5SWR4IiwiZ2V0UHVibGljS2V5Q29udGVudElkeCIsImdldFB1YmxpY0tleSIsImdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWUiLCJnZXRTaWduYXR1cmVWYWx1ZUhleCIsInZlcmlmeVNpZ25hdHVyZSIsInBhcnNlRXh0IiwiY3JpdGljYWwiLCJ2aWR4IiwiZ2V0RXh0SW5mbyIsImdldEV4dEJhc2ljQ29uc3RyYWludHMiLCJjQSIsInBhdGhMZW4iLCJnZXRFeHRLZXlVc2FnZUJpbiIsImdldEV4dEtleVVzYWdlU3RyaW5nIiwiS0VZVVNBR0VfTkFNRSIsImdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyIiwiZ2V0RXh0QXV0aG9yaXR5S2V5SWRlbnRpZmllciIsImtpZCIsImdldEV4dEV4dEtleVVzYWdlTmFtZSIsImdldEV4dFN1YmplY3RBbHROYW1lIiwiZ2V0RXh0U3ViamVjdEFsdE5hbWUyIiwiZ2V0RXh0Q1JMRGlzdHJpYnV0aW9uUG9pbnRzVVJJIiwiZ2V0RXh0QUlBSW5mbyIsIm9jc3AiLCJjYWlzc3VlciIsImdldEV4dENlcnRpZmljYXRlUG9saWNpZXMiLCJpZCIsImNwcyIsInVub3RpY2UiLCJyZWFkQ2VydFBFTSIsImdldEluZm8iLCJoZXgycmRuIiwiaGV4MmF0dHJUeXBlVmFsdWUiLCJvaWQyYXR5cGUiLCJnZXRQdWJsaWNLZXlJbmZvUHJvcE9mQ2VydFBFTSIsImp3cyIsIkpXUyIsImlzU2FmZUpTT05TdHJpbmciLCJwYXJzZUpXUyIsInBhcnNlZEpXUyIsInNpZ3ZhbEgiLCJoZWFkQjY0VSIsInBheWxvYWRCNjRVIiwic2lndmFsQjY0VSIsInNpIiwic2lndmFsQkkiLCJoZWFkUyIsInBheWxvYWRTIiwicmVhZFNhZmVKU09OU3RyaW5nIiwiandzYWxnMnNpZ2FsZyIsImhBU04xU2lnIiwiaGVhZGVyT2JqIiwicGF5bG9hZE9iaiIsImhlYWRlclBQIiwicGF5bG9hZFBQIiwic2lnSGV4IiwidmVyaWZ5SldUIiwiaW5BcnJheSIsImluY2x1ZGVkQXJyYXkiLCJpc3MiLCJzdWIiLCJhdWQiLCJJbnREYXRlIiwiZ2V0Tm93IiwidmVyaWZ5QXQiLCJncmFjZVBlcmlvZCIsIm5iZiIsImlhdCIsImp0aSIsIkhTMjU2IiwiSFMzODQiLCJIUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIkVTMjU2IiwiRVMzODQiLCJQUzI1NiIsIlBTMzg0IiwiUFM1MTIiLCJub25lIiwiZ2V0RW5jb2RlZFNpZ25hdHVyZVZhbHVlRnJvbUpXUyIsImdldEpXS3RodW1icHJpbnQiLCJnZXQiLCJnZXRadWx1IiwiaW50RGF0ZTJVVENTdHJpbmciLCJ0b1VUQ1N0cmluZyIsImludERhdGUyWnVsdSIsIkVEU0EiLCJfY3J5cHRvIiwiRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUiLCJhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXIiLCJUaW1lciIsImFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmciLCJfYWNjZXNzVG9rZW5FeHBpcmVkIiwibG9hZCIsImNvbnRhaW5lciIsImFjY2Vzc190b2tlbiIsImV4cGlyZXNfaW4iLCJkdXJhdGlvbiIsImRlYnVnIiwiZXhwaXJpbmciLCJjYW5jZWwiLCJleHBpcmVkIiwidW5sb2FkIiwiYWRkQWNjZXNzVG9rZW5FeHBpcmluZyIsImNiIiwiYWRkSGFuZGxlciIsInJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJpbmciLCJyZW1vdmVIYW5kbGVyIiwiYWRkQWNjZXNzVG9rZW5FeHBpcmVkIiwicmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkIiwiRGVmYXVsdEludGVydmFsIiwiY2FsbGJhY2siLCJjbGllbnRfaWQiLCJ1cmwiLCJpbnRlcnZhbCIsInN0b3BPbkVycm9yIiwiX2NhbGxiYWNrIiwiX2NsaWVudF9pZCIsIl91cmwiLCJfaW50ZXJ2YWwiLCJfc3RvcE9uRXJyb3IiLCJpZHgiLCJfZnJhbWVfb3JpZ2luIiwiX2ZyYW1lIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJ2aXNpYmlsaXR5IiwicG9zaXRpb24iLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJzcmMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9ubG9hZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsIl9ib3VuZE1lc3NhZ2VFdmVudCIsIl9tZXNzYWdlIiwiYmluZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJvcmlnaW4iLCJzb3VyY2UiLCJjb250ZW50V2luZG93IiwiZXJyb3IiLCJzdG9wIiwic3RhcnQiLCJzZXNzaW9uX3N0YXRlIiwiX3Nlc3Npb25fc3RhdGUiLCJzZW5kIiwicG9zdE1lc3NhZ2UiLCJfdGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJwcmVwYXJlIiwicGFyYW1zIiwicG9wdXBXaW5kb3dGZWF0dXJlcyIsInBvcHVwIiwiQ29yZG92YVBvcHVwV2luZG93IiwiRGVmYXVsdFBvcHVwRmVhdHVyZXMiLCJEZWZhdWx0UG9wdXBUYXJnZXQiLCJfcHJvbWlzZSIsInJlamVjdCIsIl9yZXNvbHZlIiwiX3JlamVjdCIsImZlYXR1cmVzIiwidGFyZ2V0IiwicG9wdXBXaW5kb3dUYXJnZXQiLCJyZWRpcmVjdF91cmkiLCJzdGFydFVybCIsIl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZCIsImNvcmRvdmFNZXRhZGF0YSIsInNvbWUiLCJuYXZpZ2F0ZSIsIl9lcnJvciIsImNvcmRvdmEiLCJyZXF1aXJlIiwibWV0YWRhdGEiLCJfcG9wdXAiLCJJbkFwcEJyb3dzZXIiLCJvcGVuIiwiX2V4aXRDYWxsYmFja0V2ZW50IiwiX2V4aXRDYWxsYmFjayIsIl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50IiwiX2xvYWRTdGFydENhbGxiYWNrIiwicHJvbWlzZSIsImV2ZW50IiwiX3N1Y2Nlc3MiLCJtZXNzYWdlIiwiX2NsZWFudXAiLCJjbG9zZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFcnJvclJlc3BvbnNlIiwiZXJyb3JfZGVzY3JpcHRpb24iLCJlcnJvcl91cmkiLCJFdmVudCIsIl9uYW1lIiwiX2NhbGxiYWNrcyIsImZpbmRJbmRleCIsIml0ZW0iLCJyYWlzZSIsInRpbWVyIiwiaGFuZGxlIiwidGVzdGluZyIsInJlcXVlc3QiLCJfdGVzdGluZyIsInNldFhNTEh0dHBSZXF1ZXN0IiwibmV3UmVxdWVzdCIsImxvY2F0aW9uIiwibG9jYWxTdG9yYWdlIiwic2Vzc2lvblN0b3JhZ2UiLCJYTUxIdHRwUmVxdWVzdCIsIklGcmFtZU5hdmlnYXRvciIsImZyYW1lIiwiSUZyYW1lV2luZG93Iiwibm90aWZ5UGFyZW50IiwiRGVmYXVsdFRpbWVvdXQiLCJ0aW1lb3V0Iiwic2lsZW50UmVxdWVzdFRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiX3RpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsIl9vcmlnaW4iLCJmcmFtZUVsZW1lbnQiLCJocmVmIiwicGFyZW50IiwicHJvdG9jb2wiLCJob3N0IiwiZ2V0SXRlbSIsInNldEl0ZW0iLCJ2YWx1ZSIsInJlbW92ZUl0ZW0iLCJpbmRleCIsImdldE93blByb3BlcnR5TmFtZXMiLCJKb3NlVXRpbCIsIktleVV0aWwiLCJBbGxvd2VkU2lnbmluZ0FsZ3MiLCJnZXRKb3NlVXRpbCIsInBhcnNlSnd0Iiwiand0IiwidG9rZW4iLCJoZWFkZXIiLCJwYXlsb2FkIiwidmFsaWRhdGVKd3QiLCJpc3N1ZXIiLCJhdWRpZW5jZSIsImNsb2NrU2tldyIsIm5vdyIsInRpbWVJbnNlbnNpdGl2ZSIsIng1YyIsIl92YWxpZGF0ZUp3dCIsInZhbGlkYXRlSnd0QXR0cmlidXRlcyIsInZhbGlkQXVkaWVuY2UiLCJhenAiLCJsb3dlck5vdyIsInVwcGVyTm93IiwidGhlbiIsImhleFRvQmFzZTY0VXJsIiwiSnNvblNlcnZpY2UiLCJhZGRpdGlvbmFsQ29udGVudFR5cGVzIiwiWE1MSHR0cFJlcXVlc3RDdG9yIiwiand0SGFuZGxlciIsIl9jb250ZW50VHlwZXMiLCJfWE1MSHR0cFJlcXVlc3QiLCJfand0SGFuZGxlciIsImdldEpzb24iLCJyZXEiLCJhbGxvd2VkQ29udGVudFR5cGVzIiwic3RhdHVzIiwiY29udGVudFR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImZvdW5kIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwib25lcnJvciIsInNldFJlcXVlc3RIZWFkZXIiLCJwb3N0Rm9ybSIsIm5vcExvZ2dlciIsImluZm8iLCJ3YXJuIiwiTk9ORSIsIkVSUk9SIiwiV0FSTiIsIklORk8iLCJERUJVRyIsImxvZ2dlciIsImxldmVsIiwiYXJncyIsImZyb20iLCJPaWRjTWV0YWRhdGFVcmxQYXRoIiwic2V0dGluZ3MiLCJKc29uU2VydmljZUN0b3IiLCJfc2V0dGluZ3MiLCJfanNvblNlcnZpY2UiLCJnZXRNZXRhZGF0YSIsIm1ldGFkYXRhVXJsIiwiZ2V0SXNzdWVyIiwiX2dldE1ldGFkYXRhUHJvcGVydHkiLCJnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQiLCJnZXRVc2VySW5mb0VuZHBvaW50IiwiZ2V0VG9rZW5FbmRwb2ludCIsIm9wdGlvbmFsIiwiZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lIiwiZ2V0RW5kU2Vzc2lvbkVuZHBvaW50IiwiZ2V0UmV2b2NhdGlvbkVuZHBvaW50IiwiZ2V0S2V5c0VuZHBvaW50IiwiZ2V0U2lnbmluZ0tleXMiLCJzaWduaW5nS2V5cyIsImp3a3NfdXJpIiwia2V5U2V0IiwiX21ldGFkYXRhVXJsIiwiYXV0aG9yaXR5IiwiY3JlYXRlU2lnbmluUmVxdWVzdCIsInJlc3BvbnNlX3R5cGUiLCJzY29wZSIsInByb21wdCIsIm1heF9hZ2UiLCJ1aV9sb2NhbGVzIiwiaWRfdG9rZW5faGludCIsImxvZ2luX2hpbnQiLCJhY3JfdmFsdWVzIiwicmVzb3VyY2UiLCJyZXF1ZXN0X3VyaSIsInJlc3BvbnNlX21vZGUiLCJleHRyYVF1ZXJ5UGFyYW1zIiwicmVxdWVzdF90eXBlIiwic3RhdGVTdG9yZSIsIlNpZ25pblJlcXVlc3QiLCJpc0NvZGUiLCJfbWV0YWRhdGFTZXJ2aWNlIiwic2lnbmluUmVxdWVzdCIsInNpZ25pblN0YXRlIiwiX3N0YXRlU3RvcmUiLCJzZXQiLCJ0b1N0b3JhZ2VTdHJpbmciLCJyZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSIsInJlbW92ZVN0YXRlIiwidXNlUXVlcnkiLCJkZWxpbWl0ZXIiLCJyZXNwb25zZSIsIlNpZ25pblJlc3BvbnNlIiwic3RhdGVBcGkiLCJyZW1vdmUiLCJzdG9yZWRTdGF0ZVN0cmluZyIsIlNpZ25pblN0YXRlIiwiZnJvbVN0b3JhZ2VTdHJpbmciLCJwcm9jZXNzU2lnbmluUmVzcG9uc2UiLCJfdmFsaWRhdG9yIiwidmFsaWRhdGVTaWduaW5SZXNwb25zZSIsImNyZWF0ZVNpZ25vdXRSZXF1ZXN0IiwicG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiU2lnbm91dFJlcXVlc3QiLCJzaWdub3V0U3RhdGUiLCJyZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUiLCJTaWdub3V0UmVzcG9uc2UiLCJzdGF0ZUtleSIsIlN0YXRlIiwicHJvY2Vzc1NpZ25vdXRSZXNwb25zZSIsInZhbGlkYXRlU2lnbm91dFJlc3BvbnNlIiwiY2xlYXJTdGFsZVN0YXRlIiwic3RhbGVTdGF0ZUFnZSIsInZhbGlkYXRvciIsIm1ldGFkYXRhU2VydmljZSIsIkRlZmF1bHRSZXNwb25zZVR5cGUiLCJEZWZhdWx0U2NvcGUiLCJEZWZhdWx0U3RhbGVTdGF0ZUFnZSIsIkRlZmF1bHRDbG9ja1NrZXdJblNlY29uZHMiLCJjbGllbnRfc2VjcmV0IiwiZmlsdGVyUHJvdG9jb2xDbGFpbXMiLCJsb2FkVXNlckluZm8iLCJ1c2VySW5mb0p3dElzc3VlciIsIlJlc3BvbnNlVmFsaWRhdG9yQ3RvciIsIlJlc3BvbnNlVmFsaWRhdG9yIiwiTWV0YWRhdGFTZXJ2aWNlQ3RvciIsIl9hdXRob3JpdHkiLCJfbWV0YWRhdGEiLCJfc2lnbmluZ0tleXMiLCJfY2xpZW50X3NlY3JldCIsIl9yZXNwb25zZV90eXBlIiwiX3Njb3BlIiwiX3JlZGlyZWN0X3VyaSIsIl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfcHJvbXB0IiwiX2Rpc3BsYXkiLCJfbWF4X2FnZSIsIl91aV9sb2NhbGVzIiwiX2Fjcl92YWx1ZXMiLCJfcmVzb3VyY2UiLCJfcmVzcG9uc2VfbW9kZSIsIl9maWx0ZXJQcm90b2NvbENsYWltcyIsIl9sb2FkVXNlckluZm8iLCJfc3RhbGVTdGF0ZUFnZSIsIl9jbG9ja1NrZXciLCJfdXNlckluZm9Kd3RJc3N1ZXIiLCJfZXh0cmFRdWVyeVBhcmFtcyIsIlBvcHVwTmF2aWdhdG9yIiwiUG9wdXBXaW5kb3ciLCJrZWVwT3BlbiIsIm5vdGlmeU9wZW5lciIsIkNoZWNrRm9yUG9wdXBDbG9zZWRJbnRlcnZhbCIsIl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIiLCJfY2hlY2tGb3JQb3B1cENsb3NlZCIsIl9pZCIsImZvY3VzIiwiY2xvc2VkIiwib3BlbmVyIiwiVXJsVXRpbGl0eSIsInBhcnNlVXJsRnJhZ21lbnQiLCJSZWRpcmVjdE5hdmlnYXRvciIsInVzZVJlcGxhY2VUb05hdmlnYXRlIiwiUHJvdG9jb2xDbGFpbXMiLCJVc2VySW5mb1NlcnZpY2VDdG9yIiwiVXNlckluZm9TZXJ2aWNlIiwiam9zZVV0aWwiLCJUb2tlbkNsaWVudEN0b3IiLCJUb2tlbkNsaWVudCIsIl91c2VySW5mb1NlcnZpY2UiLCJfam9zZVV0aWwiLCJfdG9rZW5DbGllbnQiLCJfcHJvY2Vzc1NpZ25pblBhcmFtcyIsIl92YWxpZGF0ZVRva2VucyIsIl9wcm9jZXNzQ2xhaW1zIiwibm9uY2UiLCJpZF90b2tlbiIsImNvZGVfdmVyaWZpZXIiLCJjb2RlIiwiaXNPcGVuSWRDb25uZWN0IiwicHJvZmlsZSIsImdldENsYWltcyIsImNsYWltcyIsIl9tZXJnZUNsYWltcyIsImNsYWltczEiLCJjbGFpbXMyIiwicmVzdWx0IiwiYXNzaWduIiwidmFsdWVzIiwiZm9yRWFjaCIsIl9wcm9jZXNzQ29kZSIsIl92YWxpZGF0ZUlkVG9rZW5BbmRBY2Nlc3NUb2tlbiIsIl92YWxpZGF0ZUlkVG9rZW4iLCJleGNoYW5nZUNvZGUiLCJ0b2tlblJlc3BvbnNlIiwiX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMiLCJjbG9ja1NrZXdJblNlY29uZHMiLCJfdmFsaWRhdGVBY2Nlc3NUb2tlbiIsIl9maWx0ZXJCeUFsZyIsImZpbHRlciIsImF0X2hhc2giLCJoYXNoQWxnIiwiaGFzaEJpdHMiLCJzaGEiLCJsZWZ0IiwibGVmdF9iNjR1IiwidXNlck1hbmFnZXIiLCJDaGVja1Nlc3Npb25JRnJhbWVDdG9yIiwiX3VzZXJNYW5hZ2VyIiwiX0NoZWNrU2Vzc2lvbklGcmFtZUN0b3IiLCJldmVudHMiLCJhZGRVc2VyTG9hZGVkIiwiX3N0YXJ0IiwiYWRkVXNlclVubG9hZGVkIiwiX3N0b3AiLCJnZXRVc2VyIiwidXNlciIsImNhdGNoIiwiZXJyIiwiX3N1YiIsIl9zaWQiLCJzaWQiLCJfY2hlY2tTZXNzaW9uSUZyYW1lIiwiX2NoZWNrU2Vzc2lvbkludGVydmFsIiwiX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yIiwicXVlcnlTZXNzaW9uU3RhdHVzIiwicmFpc2VVc2VyU2lnbmVkT3V0RXZlbnQiLCJzZXNzaW9uIiwiX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkIiwiX3JhaXNlVXNlclNpZ25lZE91dCIsImNoZWNrU2Vzc2lvbkludGVydmFsIiwic3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IiLCJvaWRjIiwiaXNPaWRjIiwiYWRkUXVlcnlQYXJhbSIsImNvZGVfY2hhbGxlbmdlIiwiaXNPQXV0aCIsIk9pZGNTY29wZSIsInRva2VuX3R5cGUiLCJleHBpcmVzX2F0Iiwic2NvcGVzIiwiX25vbmNlIiwiX2NvZGVfdmVyaWZpZXIiLCJfY29kZV9jaGFsbGVuZ2UiLCJjcmVhdGVkIiwic3RvcmFnZVN0cmluZyIsIlNpbGVudFJlbmV3U2VydmljZSIsIl90b2tlbkV4cGlyaW5nIiwic2lnbmluU2lsZW50IiwiX3JhaXNlU2lsZW50UmVuZXdFcnJvciIsIl9jcmVhdGVkIiwiX3JlcXVlc3RfdHlwZSIsInN0b3JhZ2UiLCJhZ2UiLCJjdXRvZmYiLCJnZXRBbGxLZXlzIiwicHJvbWlzZXMiLCJhbGwiLCJUaW1lckR1cmF0aW9uIiwibm93RnVuYyIsIl9ub3dGdW5jIiwiZXhwaXJhdGlvbiIsIl90aW1lckhhbmRsZSIsIl9leHBpcmF0aW9uIiwidGltZXJEdXJhdGlvbiIsImRpZmYiLCJncmFudF90eXBlIiwiZXhjaGFuZ2VSZWZyZXNoVG9rZW4iLCJyZWZyZXNoX3Rva2VuIiwiQWNjZXNzVG9rZW5UeXBlSGludCIsIlJlZnJlc2hUb2tlblR5cGVIaW50IiwiX1hNTEh0dHBSZXF1ZXN0Q3RvciIsInJldm9rZSIsInJlcXVpcmVkIiwiX3Jldm9rZSIsInhociIsImdsb2JhbCIsImxhc3RJbmRleE9mIiwicmVnZXgiLCJjb3VudGVyIiwiZXhlYyIsInByb3AiLCJfZ2V0Q2xhaW1zRnJvbUp3dCIsImlzc3VlclByb21pc2UiLCJTaWxlbnRSZW5ld1NlcnZpY2VDdG9yIiwiU2Vzc2lvbk1vbml0b3JDdG9yIiwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50Q3RvciIsIlVzZXJNYW5hZ2VyU2V0dGluZ3MiLCJfZXZlbnRzIiwiVXNlck1hbmFnZXJFdmVudHMiLCJfc2lsZW50UmVuZXdTZXJ2aWNlIiwiYXV0b21hdGljU2lsZW50UmVuZXciLCJzdGFydFNpbGVudFJlbmV3IiwibW9uaXRvclNlc3Npb24iLCJfc2Vzc2lvbk1vbml0b3IiLCJfdG9rZW5SZXZvY2F0aW9uQ2xpZW50IiwiX2xvYWRVc2VyIiwicmVtb3ZlVXNlciIsInN0b3JlVXNlciIsInNpZ25pblJlZGlyZWN0IiwibmF2UGFyYW1zIiwiX3NpZ25pblN0YXJ0IiwiX3JlZGlyZWN0TmF2aWdhdG9yIiwic2lnbmluUmVkaXJlY3RDYWxsYmFjayIsIl9zaWduaW5FbmQiLCJzaWduaW5Qb3B1cCIsInBvcHVwX3JlZGlyZWN0X3VyaSIsIl9zaWduaW4iLCJfcG9wdXBOYXZpZ2F0b3IiLCJzaWduaW5Qb3B1cENhbGxiYWNrIiwiX3NpZ25pbkNhbGxiYWNrIiwiX3VzZVJlZnJlc2hUb2tlbiIsImluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyIsInZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyIsImN1cnJlbnRfc3ViIiwiX3NpZ25pblNpbGVudElmcmFtZSIsImlkVG9rZW5WYWxpZGF0aW9uIiwiX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbiIsImF1dGhfdGltZSIsInNpbGVudF9yZWRpcmVjdF91cmkiLCJfaWZyYW1lTmF2aWdhdG9yIiwic2lnbmluU2lsZW50Q2FsbGJhY2siLCJzaWduaW5DYWxsYmFjayIsInNpZ25vdXRDYWxsYmFjayIsInNpZ25vdXRSZWRpcmVjdENhbGxiYWNrIiwic2lnbm91dFBvcHVwQ2FsbGJhY2siLCJxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSIsIm5hdlJlc3BvbnNlIiwic2lnbmluUmVzcG9uc2UiLCJuYXZpZ2F0b3JQYXJhbXMiLCJzaWdub3V0UmVkaXJlY3QiLCJwb3N0TG9nb3V0UmVkaXJlY3RVcmkiLCJfc2lnbm91dFN0YXJ0IiwiX3NpZ25vdXRFbmQiLCJzaWdub3V0UG9wdXAiLCJwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfc2lnbm91dCIsInJldm9rZVByb21pc2UiLCJyZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCIsIl9yZXZva2VJbnRlcm5hbCIsInNpZ25vdXRSZXF1ZXN0Iiwic2lnbm91dFJlc3BvbnNlIiwicmV2b2tlQWNjZXNzVG9rZW4iLCJzdWNjZXNzIiwiX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwiLCJfcmV2b2tlUmVmcmVzaFRva2VuSW50ZXJuYWwiLCJhdFN1Y2Nlc3MiLCJydFN1Y2Nlc3MiLCJzdG9wU2lsZW50UmVuZXciLCJfdXNlclN0b3JlIiwiX3VzZXJTdG9yZUtleSIsInJlZGlyZWN0TmF2aWdhdG9yIiwicG9wdXBOYXZpZ2F0b3IiLCJpZnJhbWVOYXZpZ2F0b3IiLCJ1c2VyU3RvcmUiLCJfdXNlckxvYWRlZCIsIl91c2VyVW5sb2FkZWQiLCJfc2lsZW50UmVuZXdFcnJvciIsIl91c2VyU2lnbmVkT3V0IiwiX3VzZXJTZXNzaW9uQ2hhbmdlZCIsInJhaXNlRXZlbnQiLCJyZW1vdmVVc2VyTG9hZGVkIiwicmVtb3ZlVXNlclVubG9hZGVkIiwiYWRkU2lsZW50UmVuZXdFcnJvciIsInJlbW92ZVNpbGVudFJlbmV3RXJyb3IiLCJhZGRVc2VyU2lnbmVkT3V0IiwicmVtb3ZlVXNlclNpZ25lZE91dCIsImFkZFVzZXJTZXNzaW9uQ2hhbmdlZCIsInJlbW92ZVVzZXJTZXNzaW9uQ2hhbmdlZCIsIkRlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCIsInN0b3JlIiwiX3BvcHVwX3JlZGlyZWN0X3VyaSIsIl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfcG9wdXBXaW5kb3dGZWF0dXJlcyIsIl9wb3B1cFdpbmRvd1RhcmdldCIsIl9zaWxlbnRfcmVkaXJlY3RfdXJpIiwiX3NpbGVudFJlcXVlc3RUaW1lb3V0IiwiX2F1dG9tYXRpY1NpbGVudFJlbmV3IiwiX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyIsIl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXciLCJfbW9uaXRvclNlc3Npb24iLCJfcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUiLCJfcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQiLCJwcmVmaXgiLCJfc3RvcmUiLCJfcHJlZml4Il0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9FQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFuQkE7QUFDQTs7a0JBb0JlO0FBQ1hBLDZCQURXO0FBRVhDLGlCQUZXO0FBR1hDLHNDQUhXO0FBSVhDLDhEQUpXO0FBS1hDLG9FQUxXO0FBTVhDLDhEQU5XO0FBT1hDLHlDQVBXO0FBUVhDLDJEQVJXO0FBU1hDLHFEQVRXO0FBVVhDLHVFQVZXO0FBV1hDLDBFQVhXO0FBWVhDLDhEQVpXO0FBYVhDLHVFQWJXO0FBY1hDLGtEQWRXO0FBZVhDLDBCQWZXO0FBZ0JYQztBQWhCVyxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyQmY7Ozs7QUFJQSxJQUFJQyxZQUFZLEVBQWhCO0FBQ0FBLFVBQVVDLFNBQVYsR0FBc0IsS0FBdEI7O0FBRUEsSUFBSUMsU0FBUyxFQUFiOztBQUVBOzs7Ozs7QUFNQSxJQUFHQyxVQUFRQyxTQUFYLEVBQXFCO0FBQUMsTUFBSUQsUUFBTSxFQUFWO0FBQWEsT0FBTUUsSUFBTixHQUFXLEVBQUNDLFFBQU8sZ0JBQVNDLENBQVQsRUFBV0MsQ0FBWCxFQUFhQyxDQUFiLEVBQWU7QUFBQyxRQUFHLENBQUNELENBQUQsSUFBSSxDQUFDRCxDQUFSLEVBQVU7QUFBQyxZQUFNLElBQUlHLEtBQUosQ0FBVSw0RUFBVixDQUFOO0FBQThGLFNBQUlDLElBQUUsU0FBRkEsQ0FBRSxHQUFVLENBQUUsQ0FBbEIsQ0FBbUJBLEVBQUVDLFNBQUYsR0FBWUosRUFBRUksU0FBZCxDQUF3QkwsRUFBRUssU0FBRixHQUFZLElBQUlELENBQUosRUFBWixDQUFvQkosRUFBRUssU0FBRixDQUFZQyxXQUFaLEdBQXdCTixDQUF4QixDQUEwQkEsRUFBRU8sVUFBRixHQUFhTixFQUFFSSxTQUFmLENBQXlCLElBQUdKLEVBQUVJLFNBQUYsQ0FBWUMsV0FBWixJQUF5QkUsT0FBT0gsU0FBUCxDQUFpQkMsV0FBN0MsRUFBeUQ7QUFBQ0wsUUFBRUksU0FBRixDQUFZQyxXQUFaLEdBQXdCTCxDQUF4QjtBQUEwQixTQUFHQyxDQUFILEVBQUs7QUFBQyxVQUFJTyxDQUFKLENBQU0sS0FBSUEsQ0FBSixJQUFTUCxDQUFULEVBQVc7QUFBQ0YsVUFBRUssU0FBRixDQUFZSSxDQUFaLElBQWVQLEVBQUVPLENBQUYsQ0FBZjtBQUFvQixXQUFJQyxJQUFFLGFBQVUsQ0FBRSxDQUFsQjtBQUFBLFVBQW1CQyxJQUFFLENBQUMsVUFBRCxFQUFZLFNBQVosQ0FBckIsQ0FBNEMsSUFBRztBQUFDLFlBQUcsT0FBT0MsSUFBUCxDQUFZbkIsVUFBVUMsU0FBdEIsQ0FBSCxFQUFvQztBQUFDZ0IsY0FBRSxXQUFTRyxDQUFULEVBQVdDLENBQVgsRUFBYTtBQUFDLGlCQUFJTCxJQUFFLENBQU4sRUFBUUEsSUFBRUUsRUFBRUksTUFBWixFQUFtQk4sSUFBRUEsSUFBRSxDQUF2QixFQUF5QjtBQUFDLGtCQUFJTyxJQUFFTCxFQUFFRixDQUFGLENBQU47QUFBQSxrQkFBV1EsSUFBRUgsRUFBRUUsQ0FBRixDQUFiLENBQWtCLElBQUcsT0FBT0MsQ0FBUCxLQUFXLFVBQVgsSUFBdUJBLEtBQUdULE9BQU9ILFNBQVAsQ0FBaUJXLENBQWpCLENBQTdCLEVBQWlEO0FBQUNILGtCQUFFRyxDQUFGLElBQUtDLENBQUw7QUFBTztBQUFDO0FBQUMsV0FBdkg7QUFBd0g7QUFBQyxPQUFsSyxDQUFrSyxPQUFNQyxDQUFOLEVBQVEsQ0FBRSxHQUFFbEIsRUFBRUssU0FBSixFQUFjSCxDQUFkO0FBQWlCO0FBQUMsR0FBN2xCLEVBQVg7QUFDbkM7Ozs7Ozs7O0FBUUEsSUFBSWlCLFdBQVNBLFlBQVcsVUFBU1QsQ0FBVCxFQUFXVixDQUFYLEVBQWE7QUFBQyxNQUFJa0IsSUFBRSxFQUFOLENBQVMsSUFBSVQsSUFBRVMsRUFBRUUsR0FBRixHQUFNLEVBQVosQ0FBZSxJQUFJUCxJQUFFSixFQUFFWSxJQUFGLEdBQVEsWUFBVTtBQUFDLGFBQVNDLENBQVQsR0FBWSxDQUFFLFFBQU0sRUFBQ3ZCLFFBQU8sZ0JBQVN3QixDQUFULEVBQVc7QUFBQ0QsVUFBRWpCLFNBQUYsR0FBWSxJQUFaLENBQWlCLElBQUltQixJQUFFLElBQUlGLENBQUosRUFBTixDQUFjLElBQUdDLENBQUgsRUFBSztBQUFDQyxZQUFFQyxLQUFGLENBQVFGLENBQVI7QUFBVyxhQUFHLENBQUNDLEVBQUVFLGNBQUYsQ0FBaUIsTUFBakIsQ0FBSixFQUE2QjtBQUFDRixZQUFFRyxJQUFGLEdBQU8sWUFBVTtBQUFDSCxjQUFFSSxNQUFGLENBQVNELElBQVQsQ0FBY0UsS0FBZCxDQUFvQixJQUFwQixFQUF5QkMsU0FBekI7QUFBb0MsV0FBdEQ7QUFBdUQsV0FBRUgsSUFBRixDQUFPdEIsU0FBUCxHQUFpQm1CLENBQWpCLENBQW1CQSxFQUFFSSxNQUFGLEdBQVMsSUFBVCxDQUFjLE9BQU9KLENBQVA7QUFBUyxPQUFuTSxFQUFvTU8sUUFBTyxrQkFBVTtBQUFDLFlBQUlQLElBQUUsS0FBS3pCLE1BQUwsRUFBTixDQUFvQnlCLEVBQUVHLElBQUYsQ0FBT0UsS0FBUCxDQUFhTCxDQUFiLEVBQWVNLFNBQWYsRUFBMEIsT0FBT04sQ0FBUDtBQUFTLE9BQTdRLEVBQThRRyxNQUFLLGdCQUFVLENBQUUsQ0FBL1IsRUFBZ1NGLE9BQU0sZUFBU0YsQ0FBVCxFQUFXO0FBQUMsYUFBSSxJQUFJQyxDQUFSLElBQWFELENBQWIsRUFBZTtBQUFDLGNBQUdBLEVBQUVHLGNBQUYsQ0FBaUJGLENBQWpCLENBQUgsRUFBdUI7QUFBQyxpQkFBS0EsQ0FBTCxJQUFRRCxFQUFFQyxDQUFGLENBQVI7QUFBYTtBQUFDLGFBQUdELEVBQUVHLGNBQUYsQ0FBaUIsVUFBakIsQ0FBSCxFQUFnQztBQUFDLGVBQUtNLFFBQUwsR0FBY1QsRUFBRVMsUUFBaEI7QUFBeUI7QUFBQyxPQUFuYSxFQUFvYUMsT0FBTSxpQkFBVTtBQUFDLGVBQU8sS0FBS04sSUFBTCxDQUFVdEIsU0FBVixDQUFvQk4sTUFBcEIsQ0FBMkIsSUFBM0IsQ0FBUDtBQUF3QyxPQUE3ZCxFQUFOO0FBQXFlLEdBQTlmLEVBQWQsQ0FBZ2hCLElBQUlpQixJQUFFUCxFQUFFeUIsU0FBRixHQUFZckIsRUFBRWQsTUFBRixDQUFTLEVBQUM0QixNQUFLLGNBQVNILENBQVQsRUFBV0YsQ0FBWCxFQUFhO0FBQUNFLFVBQUUsS0FBS1csS0FBTCxHQUFXWCxLQUFHLEVBQWhCLENBQW1CLElBQUdGLEtBQUd0QixDQUFOLEVBQVE7QUFBQyxhQUFLb0MsUUFBTCxHQUFjZCxDQUFkO0FBQWdCLE9BQXpCLE1BQTZCO0FBQUMsYUFBS2MsUUFBTCxHQUFjWixFQUFFVCxNQUFGLEdBQVMsQ0FBdkI7QUFBeUI7QUFBQyxLQUEvRixFQUFnR2lCLFVBQVMsa0JBQVNWLENBQVQsRUFBVztBQUFDLGFBQU0sQ0FBQ0EsS0FBR3JCLENBQUosRUFBT29DLFNBQVAsQ0FBaUIsSUFBakIsQ0FBTjtBQUE2QixLQUFsSixFQUFtSkMsUUFBTyxnQkFBU0MsQ0FBVCxFQUFXO0FBQUMsVUFBSUMsSUFBRSxLQUFLTCxLQUFYLENBQWlCLElBQUlaLElBQUVnQixFQUFFSixLQUFSLENBQWMsSUFBSWIsSUFBRSxLQUFLYyxRQUFYLENBQW9CLElBQUlLLElBQUVGLEVBQUVILFFBQVIsQ0FBaUIsS0FBS00sS0FBTCxHQUFhLElBQUdwQixJQUFFLENBQUwsRUFBTztBQUFDLGFBQUksSUFBSXFCLElBQUUsQ0FBVixFQUFZQSxJQUFFRixDQUFkLEVBQWdCRSxHQUFoQixFQUFvQjtBQUFDLGNBQUluQixJQUFHRCxFQUFFb0IsTUFBSSxDQUFOLE1BQVksS0FBSUEsSUFBRSxDQUFILEdBQU0sQ0FBdEIsR0FBMEIsR0FBaEMsQ0FBb0NILEVBQUdsQixJQUFFcUIsQ0FBSCxLQUFRLENBQVYsS0FBY25CLEtBQUksS0FBSSxDQUFDRixJQUFFcUIsQ0FBSCxJQUFNLENBQVAsR0FBVSxDQUEvQjtBQUFrQztBQUFDLE9BQXBHLE1BQXdHO0FBQUMsYUFBSSxJQUFJQSxJQUFFLENBQVYsRUFBWUEsSUFBRUYsQ0FBZCxFQUFnQkUsS0FBRyxDQUFuQixFQUFxQjtBQUFDSCxZQUFHbEIsSUFBRXFCLENBQUgsS0FBUSxDQUFWLElBQWFwQixFQUFFb0IsTUFBSSxDQUFOLENBQWI7QUFBc0I7QUFBQyxZQUFLUCxRQUFMLElBQWVLLENBQWYsQ0FBaUIsT0FBTyxJQUFQO0FBQVksS0FBMWEsRUFBMmFDLE9BQU0saUJBQVU7QUFBQyxVQUFJbEIsSUFBRSxLQUFLVyxLQUFYLENBQWlCLElBQUliLElBQUUsS0FBS2MsUUFBWCxDQUFvQlosRUFBRUYsTUFBSSxDQUFOLEtBQVUsY0FBYSxLQUFJQSxJQUFFLENBQUgsR0FBTSxDQUFoQyxDQUFtQ0UsRUFBRVQsTUFBRixHQUFTTCxFQUFFa0MsSUFBRixDQUFPdEIsSUFBRSxDQUFULENBQVQ7QUFBcUIsS0FBemhCLEVBQTBoQlcsT0FBTSxpQkFBVTtBQUFDLFVBQUlYLElBQUVULEVBQUVvQixLQUFGLENBQVFZLElBQVIsQ0FBYSxJQUFiLENBQU4sQ0FBeUJ2QixFQUFFYSxLQUFGLEdBQVEsS0FBS0EsS0FBTCxDQUFXVyxLQUFYLENBQWlCLENBQWpCLENBQVIsQ0FBNEIsT0FBT3hCLENBQVA7QUFBUyxLQUF6bUIsRUFBMG1CeUIsUUFBTyxnQkFBU3hCLENBQVQsRUFBVztBQUFDLFVBQUlDLElBQUUsRUFBTixDQUFTLEtBQUksSUFBSUYsSUFBRSxDQUFWLEVBQVlBLElBQUVDLENBQWQsRUFBZ0JELEtBQUcsQ0FBbkIsRUFBcUI7QUFBQ0UsVUFBRXdCLElBQUYsQ0FBUXRDLEVBQUVxQyxNQUFGLEtBQVcsVUFBWixHQUF3QixDQUEvQjtBQUFrQyxjQUFPLElBQUkvQixFQUFFVyxJQUFOLENBQVdILENBQVgsRUFBYUQsQ0FBYixDQUFQO0FBQXVCLEtBQXJ0QixFQUFULENBQWxCLENBQW12QixJQUFJMEIsSUFBRS9CLEVBQUVnQyxHQUFGLEdBQU0sRUFBWixDQUFlLElBQUlqRCxJQUFFZ0QsRUFBRUUsR0FBRixHQUFNLEVBQUNkLFdBQVUsbUJBQVNkLENBQVQsRUFBVztBQUFDLFVBQUlvQixJQUFFcEIsRUFBRVksS0FBUixDQUFjLElBQUlYLElBQUVELEVBQUVhLFFBQVIsQ0FBaUIsSUFBSUksSUFBRSxFQUFOLENBQVMsS0FBSSxJQUFJbEIsSUFBRSxDQUFWLEVBQVlBLElBQUVFLENBQWQsRUFBZ0JGLEdBQWhCLEVBQW9CO0FBQUMsWUFBSW1CLElBQUdFLEVBQUVyQixNQUFJLENBQU4sTUFBWSxLQUFJQSxJQUFFLENBQUgsR0FBTSxDQUF0QixHQUEwQixHQUFoQyxDQUFvQ2tCLEVBQUVRLElBQUYsQ0FBTyxDQUFDUCxNQUFJLENBQUwsRUFBUVQsUUFBUixDQUFpQixFQUFqQixDQUFQLEVBQTZCUSxFQUFFUSxJQUFGLENBQU8sQ0FBQ1AsSUFBRSxFQUFILEVBQU9ULFFBQVAsQ0FBZ0IsRUFBaEIsQ0FBUDtBQUE0QixjQUFPUSxFQUFFWSxJQUFGLENBQU8sRUFBUCxDQUFQO0FBQWtCLEtBQW5NLEVBQW9NQyxPQUFNLGVBQVM5QixDQUFULEVBQVc7QUFBQyxVQUFJRCxJQUFFQyxFQUFFUixNQUFSLENBQWUsSUFBSXlCLElBQUUsRUFBTixDQUFTLEtBQUksSUFBSWhCLElBQUUsQ0FBVixFQUFZQSxJQUFFRixDQUFkLEVBQWdCRSxLQUFHLENBQW5CLEVBQXFCO0FBQUNnQixVQUFFaEIsTUFBSSxDQUFOLEtBQVU4QixTQUFTL0IsRUFBRWdDLE1BQUYsQ0FBUy9CLENBQVQsRUFBVyxDQUFYLENBQVQsRUFBdUIsRUFBdkIsS0FBNkIsS0FBSUEsSUFBRSxDQUFILEdBQU0sQ0FBaEQ7QUFBbUQsY0FBTyxJQUFJUixFQUFFVyxJQUFOLENBQVdhLENBQVgsRUFBYWxCLElBQUUsQ0FBZixDQUFQO0FBQXlCLEtBQWhWLEVBQVosQ0FBOFYsSUFBSWxCLElBQUU2QyxFQUFFTyxNQUFGLEdBQVMsRUFBQ25CLFdBQVUsbUJBQVNHLENBQVQsRUFBVztBQUFDLFVBQUlHLElBQUVILEVBQUVMLEtBQVIsQ0FBYyxJQUFJWixJQUFFaUIsRUFBRUosUUFBUixDQUFpQixJQUFJZCxJQUFFLEVBQU4sQ0FBUyxLQUFJLElBQUlFLElBQUUsQ0FBVixFQUFZQSxJQUFFRCxDQUFkLEVBQWdCQyxHQUFoQixFQUFvQjtBQUFDLFlBQUlpQixJQUFHRSxFQUFFbkIsTUFBSSxDQUFOLE1BQVksS0FBSUEsSUFBRSxDQUFILEdBQU0sQ0FBdEIsR0FBMEIsR0FBaEMsQ0FBb0NGLEVBQUUwQixJQUFGLENBQU9TLE9BQU9DLFlBQVAsQ0FBb0JqQixDQUFwQixDQUFQO0FBQStCLGNBQU9uQixFQUFFOEIsSUFBRixDQUFPLEVBQVAsQ0FBUDtBQUFrQixLQUF6SyxFQUEwS0MsT0FBTSxlQUFTOUIsQ0FBVCxFQUFXO0FBQUMsVUFBSUQsSUFBRUMsRUFBRVIsTUFBUixDQUFlLElBQUl5QixJQUFFLEVBQU4sQ0FBUyxLQUFJLElBQUloQixJQUFFLENBQVYsRUFBWUEsSUFBRUYsQ0FBZCxFQUFnQkUsR0FBaEIsRUFBb0I7QUFBQ2dCLFVBQUVoQixNQUFJLENBQU4sS0FBVSxDQUFDRCxFQUFFb0MsVUFBRixDQUFhbkMsQ0FBYixJQUFnQixHQUFqQixLQUF3QixLQUFJQSxJQUFFLENBQUgsR0FBTSxDQUEzQztBQUE4QyxjQUFPLElBQUlSLEVBQUVXLElBQU4sQ0FBV2EsQ0FBWCxFQUFhbEIsQ0FBYixDQUFQO0FBQXVCLEtBQTlTLEVBQWYsQ0FBK1QsSUFBSVgsSUFBRXNDLEVBQUVXLElBQUYsR0FBTyxFQUFDdkIsV0FBVSxtQkFBU2YsQ0FBVCxFQUFXO0FBQUMsVUFBRztBQUFDLGVBQU91QyxtQkFBbUJDLE9BQU8xRCxFQUFFaUMsU0FBRixDQUFZZixDQUFaLENBQVAsQ0FBbkIsQ0FBUDtBQUFrRCxPQUF0RCxDQUFzRCxPQUFNRSxDQUFOLEVBQVE7QUFBQyxjQUFNLElBQUlyQixLQUFKLENBQVUsc0JBQVYsQ0FBTjtBQUF3QztBQUFDLEtBQS9ILEVBQWdJa0QsT0FBTSxlQUFTL0IsQ0FBVCxFQUFXO0FBQUMsYUFBT2xCLEVBQUVpRCxLQUFGLENBQVFVLFNBQVNDLG1CQUFtQjFDLENBQW5CLENBQVQsQ0FBUixDQUFQO0FBQWdELEtBQWxNLEVBQWIsQ0FBaU4sSUFBSVIsSUFBRUwsRUFBRXdELHNCQUFGLEdBQXlCcEQsRUFBRWQsTUFBRixDQUFTLEVBQUNtRSxPQUFNLGlCQUFVO0FBQUMsV0FBS0MsS0FBTCxHQUFXLElBQUluRCxFQUFFVyxJQUFOLEVBQVgsQ0FBd0IsS0FBS3lDLFdBQUwsR0FBaUIsQ0FBakI7QUFBbUIsS0FBN0QsRUFBOERDLFNBQVEsaUJBQVMvQyxDQUFULEVBQVc7QUFBQyxVQUFHLE9BQU9BLENBQVAsSUFBVSxRQUFiLEVBQXNCO0FBQUNBLFlBQUVYLEVBQUUwQyxLQUFGLENBQVEvQixDQUFSLENBQUY7QUFBYSxZQUFLNkMsS0FBTCxDQUFXN0IsTUFBWCxDQUFrQmhCLENBQWxCLEVBQXFCLEtBQUs4QyxXQUFMLElBQWtCOUMsRUFBRWMsUUFBcEI7QUFBNkIsS0FBeEssRUFBeUtrQyxVQUFTLGtCQUFTQyxDQUFULEVBQVc7QUFBQyxVQUFJL0IsSUFBRSxLQUFLMkIsS0FBWCxDQUFpQixJQUFJSyxJQUFFaEMsRUFBRUwsS0FBUixDQUFjLElBQUliLElBQUVrQixFQUFFSixRQUFSLENBQWlCLElBQUlHLElBQUUsS0FBS2tDLFNBQVgsQ0FBcUIsSUFBSUMsSUFBRW5DLElBQUUsQ0FBUixDQUFVLElBQUlvQyxJQUFFckQsSUFBRW9ELENBQVIsQ0FBVSxJQUFHSCxDQUFILEVBQUs7QUFBQ0ksWUFBRWpFLEVBQUVrQyxJQUFGLENBQU8rQixDQUFQLENBQUY7QUFBWSxPQUFsQixNQUFzQjtBQUFDQSxZQUFFakUsRUFBRWtFLEdBQUYsQ0FBTSxDQUFDRCxJQUFFLENBQUgsSUFBTSxLQUFLRSxjQUFqQixFQUFnQyxDQUFoQyxDQUFGO0FBQXFDLFdBQUlwQyxJQUFFa0MsSUFBRXBDLENBQVIsQ0FBVSxJQUFJSSxJQUFFakMsRUFBRW9FLEdBQUYsQ0FBTXJDLElBQUUsQ0FBUixFQUFVbkIsQ0FBVixDQUFOLENBQW1CLElBQUdtQixDQUFILEVBQUs7QUFBQyxhQUFJLElBQUlsQixJQUFFLENBQVYsRUFBWUEsSUFBRWtCLENBQWQsRUFBZ0JsQixLQUFHZ0IsQ0FBbkIsRUFBcUI7QUFBQyxlQUFLd0MsZUFBTCxDQUFxQlAsQ0FBckIsRUFBdUJqRCxDQUF2QjtBQUEwQixhQUFJQyxJQUFFZ0QsRUFBRVEsTUFBRixDQUFTLENBQVQsRUFBV3ZDLENBQVgsQ0FBTixDQUFvQkQsRUFBRUosUUFBRixJQUFZTyxDQUFaO0FBQWMsY0FBTyxJQUFJM0IsRUFBRVcsSUFBTixDQUFXSCxDQUFYLEVBQWFtQixDQUFiLENBQVA7QUFBdUIsS0FBL2QsRUFBZ2VWLE9BQU0saUJBQVU7QUFBQyxVQUFJWCxJQUFFVCxFQUFFb0IsS0FBRixDQUFRWSxJQUFSLENBQWEsSUFBYixDQUFOLENBQXlCdkIsRUFBRTZDLEtBQUYsR0FBUSxLQUFLQSxLQUFMLENBQVdsQyxLQUFYLEVBQVIsQ0FBMkIsT0FBT1gsQ0FBUDtBQUFTLEtBQTlpQixFQUEraUJ1RCxnQkFBZSxDQUE5akIsRUFBVCxDQUEvQixDQUEwbUIsSUFBSTNFLElBQUVPLEVBQUV3RSxNQUFGLEdBQVNuRSxFQUFFZixNQUFGLENBQVMsRUFBQ21GLEtBQUlyRSxFQUFFZCxNQUFGLEVBQUwsRUFBZ0I0QixNQUFLLGNBQVNMLENBQVQsRUFBVztBQUFDLFdBQUs0RCxHQUFMLEdBQVMsS0FBS0EsR0FBTCxDQUFTbkYsTUFBVCxDQUFnQnVCLENBQWhCLENBQVQsQ0FBNEIsS0FBSzRDLEtBQUw7QUFBYSxLQUExRSxFQUEyRUEsT0FBTSxpQkFBVTtBQUFDcEQsUUFBRW9ELEtBQUYsQ0FBUXJCLElBQVIsQ0FBYSxJQUFiLEVBQW1CLEtBQUtzQyxRQUFMO0FBQWdCLEtBQS9ILEVBQWdJQyxRQUFPLGdCQUFTOUQsQ0FBVCxFQUFXO0FBQUMsV0FBSytDLE9BQUwsQ0FBYS9DLENBQWIsRUFBZ0IsS0FBS2dELFFBQUwsR0FBZ0IsT0FBTyxJQUFQO0FBQVksS0FBL0wsRUFBZ01lLFVBQVMsa0JBQVMvRCxDQUFULEVBQVc7QUFBQyxVQUFHQSxDQUFILEVBQUs7QUFBQyxhQUFLK0MsT0FBTCxDQUFhL0MsQ0FBYjtBQUFnQixXQUFJRSxJQUFFLEtBQUs4RCxXQUFMLEVBQU4sQ0FBeUIsT0FBTzlELENBQVA7QUFBUyxLQUE3USxFQUE4UWlELFdBQVUsTUFBSSxFQUE1UixFQUErUmMsZUFBYyx1QkFBU2pFLENBQVQsRUFBVztBQUFDLGFBQU8sVUFBU0MsQ0FBVCxFQUFXQyxDQUFYLEVBQWE7QUFBQyxlQUFPLElBQUlGLEVBQUVLLElBQU4sQ0FBV0gsQ0FBWCxFQUFjNkQsUUFBZCxDQUF1QjlELENBQXZCLENBQVA7QUFBaUMsT0FBdEQ7QUFBdUQsS0FBaFgsRUFBaVhpRSxtQkFBa0IsMkJBQVNsRSxDQUFULEVBQVc7QUFBQyxhQUFPLFVBQVNDLENBQVQsRUFBV0MsQ0FBWCxFQUFhO0FBQUMsZUFBTyxJQUFJUCxFQUFFd0UsSUFBRixDQUFPOUQsSUFBWCxDQUFnQkwsQ0FBaEIsRUFBa0JFLENBQWxCLEVBQXFCNkQsUUFBckIsQ0FBOEI5RCxDQUE5QixDQUFQO0FBQXdDLE9BQTdEO0FBQThELEtBQTdjLEVBQVQsQ0FBZixDQUF3ZSxJQUFJTixJQUFFQyxFQUFFd0UsSUFBRixHQUFPLEVBQWIsQ0FBZ0IsT0FBT3hFLENBQVA7QUFBUyxDQUFqeEcsQ0FBa3hHeUUsSUFBbHhHLENBQXhCO0FBQ0E7Ozs7OztBQU1BLENBQUMsVUFBUzNGLENBQVQsRUFBVztBQUFDLE1BQUlrQixJQUFFQyxRQUFOO0FBQUEsTUFBZWpCLElBQUVnQixFQUFFRSxHQUFuQjtBQUFBLE1BQXVCVixJQUFFUixFQUFFbUIsSUFBM0I7QUFBQSxNQUFnQ3BCLElBQUVDLEVBQUVnQyxTQUFwQztBQUFBLE1BQThDaEIsSUFBRUEsRUFBRTBFLEdBQUYsR0FBTSxFQUF0RCxDQUF5RDFFLEVBQUUyRSxJQUFGLEdBQU9uRixFQUFFWCxNQUFGLENBQVMsRUFBQzRCLE1BQUssY0FBU2xCLENBQVQsRUFBV0UsQ0FBWCxFQUFhO0FBQUMsV0FBS21GLElBQUwsR0FBVXJGLENBQVYsQ0FBWSxLQUFLc0YsR0FBTCxHQUFTcEYsQ0FBVDtBQUFXLEtBQTNDLEVBQVQsQ0FBUCxDQUE4RE8sRUFBRWdCLFNBQUYsR0FBWXhCLEVBQUVYLE1BQUYsQ0FBUyxFQUFDNEIsTUFBSyxjQUFTbEIsQ0FBVCxFQUFXRSxDQUFYLEVBQWE7QUFBQ0YsVUFBRSxLQUFLMEIsS0FBTCxHQUFXMUIsS0FBRyxFQUFoQixDQUFtQixLQUFLMkIsUUFBTCxHQUFjekIsS0FBR1gsQ0FBSCxHQUFLVyxDQUFMLEdBQU8sSUFBRUYsRUFBRU0sTUFBekI7QUFBZ0MsS0FBdkUsRUFBd0VpRixPQUFNLGlCQUFVO0FBQUMsV0FBSSxJQUFJdkYsSUFBRSxLQUFLMEIsS0FBWCxFQUFpQnhCLElBQUVGLEVBQUVNLE1BQXJCLEVBQTRCRyxJQUFFLEVBQTlCLEVBQWlDZCxJQUFFLENBQXZDLEVBQXlDQSxJQUFFTyxDQUEzQyxFQUE2Q1AsR0FBN0MsRUFBaUQ7QUFBQyxZQUFJTSxJQUFFRCxFQUFFTCxDQUFGLENBQU4sQ0FBV2MsRUFBRThCLElBQUYsQ0FBT3RDLEVBQUVvRixJQUFULEVBQWU1RSxFQUFFOEIsSUFBRixDQUFPdEMsRUFBRXFGLEdBQVQ7QUFBYyxjQUFPOUYsRUFBRThCLE1BQUYsQ0FBU2IsQ0FBVCxFQUFXLEtBQUtrQixRQUFoQixDQUFQO0FBQWlDLEtBQXBOLEVBQXFOSCxPQUFNLGlCQUFVO0FBQUMsV0FBSSxJQUFJeEIsSUFBRUMsRUFBRXVCLEtBQUYsQ0FBUVksSUFBUixDQUFhLElBQWIsQ0FBTixFQUF5QmxDLElBQUVGLEVBQUUwQixLQUFGLEdBQVEsS0FBS0EsS0FBTCxDQUFXVyxLQUFYLENBQWlCLENBQWpCLENBQW5DLEVBQXVENUIsSUFBRVAsRUFBRUksTUFBM0QsRUFBa0VYLElBQUUsQ0FBeEUsRUFBMEVBLElBQUVjLENBQTVFLEVBQThFZCxHQUE5RTtBQUFrRk8sVUFBRVAsQ0FBRixJQUFLTyxFQUFFUCxDQUFGLEVBQUs2QixLQUFMLEVBQUw7QUFBbEYsT0FBb0csT0FBT3hCLENBQVA7QUFBUyxLQUFuVixFQUFULENBQVo7QUFBMlcsQ0FBL2U7O0FBRUE7Ozs7OztBQU1BLENBQUMsWUFBVTtBQUFDLE1BQUlSLElBQUVrQixRQUFOO0FBQUEsTUFBZU4sSUFBRVosRUFBRW1CLEdBQUYsQ0FBTWMsU0FBdkIsQ0FBaUNqQyxFQUFFaUQsR0FBRixDQUFNK0MsTUFBTixHQUFhLEVBQUM1RCxXQUFVLG1CQUFTNUIsQ0FBVCxFQUFXO0FBQUMsVUFBSUMsSUFBRUQsRUFBRTBCLEtBQVI7QUFBQSxVQUFjakMsSUFBRU8sRUFBRTJCLFFBQWxCO0FBQUEsVUFBMkJ6QixJQUFFLEtBQUt1RixJQUFsQyxDQUF1Q3pGLEVBQUVpQyxLQUFGLEdBQVVqQyxJQUFFLEVBQUYsQ0FBSyxLQUFJLElBQUlTLElBQUUsQ0FBVixFQUFZQSxJQUFFaEIsQ0FBZCxFQUFnQmdCLEtBQUcsQ0FBbkI7QUFBcUIsYUFBSSxJQUFJZCxJQUFFLENBQUNNLEVBQUVRLE1BQUksQ0FBTixNQUFXLEtBQUcsS0FBR0EsSUFBRSxDQUFMLENBQWQsR0FBc0IsR0FBdkIsS0FBNkIsRUFBN0IsR0FBZ0MsQ0FBQ1IsRUFBRVEsSUFBRSxDQUFGLEtBQU0sQ0FBUixNQUFhLEtBQUcsS0FBRyxDQUFDQSxJQUFFLENBQUgsSUFBTSxDQUFULENBQWhCLEdBQTRCLEdBQTdCLEtBQW1DLENBQW5FLEdBQXFFUixFQUFFUSxJQUFFLENBQUYsS0FBTSxDQUFSLE1BQWEsS0FBRyxLQUFHLENBQUNBLElBQUUsQ0FBSCxJQUFNLENBQVQsQ0FBaEIsR0FBNEIsR0FBdkcsRUFBMkdsQixJQUFFLENBQWpILEVBQW1ILElBQUVBLENBQUYsSUFBS2tCLElBQUUsT0FBS2xCLENBQVAsR0FBU0UsQ0FBakksRUFBbUlGLEdBQW5JO0FBQXVJUyxZQUFFdUMsSUFBRixDQUFPckMsRUFBRXdGLE1BQUYsQ0FBUy9GLE1BQUksS0FBRyxJQUFFSixDQUFMLENBQUosR0FBWSxFQUFyQixDQUFQO0FBQXZJO0FBQXJCLE9BQTZMLElBQUdVLElBQUVDLEVBQUV3RixNQUFGLENBQVMsRUFBVCxDQUFMLEVBQWtCLE9BQUsxRixFQUFFTSxNQUFGLEdBQVMsQ0FBZDtBQUFpQk4sVUFBRXVDLElBQUYsQ0FBT3RDLENBQVA7QUFBakIsT0FBMkIsT0FBT0QsRUFBRTJDLElBQUYsQ0FBTyxFQUFQLENBQVA7QUFBa0IsS0FBelUsRUFBMFVDLE9BQU0sZUFBUzVDLENBQVQsRUFBVztBQUFDLFVBQUlDLElBQUVELEVBQUVNLE1BQVI7QUFBQSxVQUFlYixJQUFFLEtBQUtnRyxJQUF0QjtBQUFBLFVBQTJCdkYsSUFBRVQsRUFBRWlHLE1BQUYsQ0FBUyxFQUFULENBQTdCLENBQTBDeEYsTUFBSUEsSUFBRUYsRUFBRTJGLE9BQUYsQ0FBVXpGLENBQVYsQ0FBRixFQUFlLENBQUMsQ0FBRCxJQUFJQSxDQUFKLEtBQVFELElBQUVDLENBQVYsQ0FBbkIsRUFBaUMsS0FBSSxJQUFJQSxJQUFFLEVBQU4sRUFBU08sSUFBRSxDQUFYLEVBQWFkLElBQUUsQ0FBbkIsRUFBcUJBLElBQ3RmTSxDQURpZSxFQUMvZE4sR0FEK2Q7QUFDM2QsWUFBR0EsSUFBRSxDQUFMLEVBQU87QUFBQyxjQUFJSixJQUFFRSxFQUFFa0csT0FBRixDQUFVM0YsRUFBRTBGLE1BQUYsQ0FBUy9GLElBQUUsQ0FBWCxDQUFWLEtBQTBCLEtBQUdBLElBQUUsQ0FBTCxDQUFoQztBQUFBLGNBQXdDSCxJQUFFQyxFQUFFa0csT0FBRixDQUFVM0YsRUFBRTBGLE1BQUYsQ0FBUy9GLENBQVQsQ0FBVixNQUF5QixJQUFFLEtBQUdBLElBQUUsQ0FBTCxDQUFyRSxDQUE2RU8sRUFBRU8sTUFBSSxDQUFOLEtBQVUsQ0FBQ2xCLElBQUVDLENBQUgsS0FBTyxLQUFHLEtBQUdpQixJQUFFLENBQUwsQ0FBcEIsQ0FBNEJBO0FBQUk7QUFEc1csT0FDdFcsT0FBT0wsRUFBRWtCLE1BQUYsQ0FBU3BCLENBQVQsRUFBV08sQ0FBWCxDQUFQO0FBQXFCLEtBRHRGLEVBQ3VGZ0YsTUFBSyxtRUFENUYsRUFBYjtBQUM4SyxDQUQzTjs7QUFHQTs7Ozs7O0FBTUEsQ0FBQyxVQUFTakYsQ0FBVCxFQUFXO0FBQUMsT0FBSSxJQUFJakIsSUFBRW1CLFFBQU4sRUFBZWxCLElBQUVELEVBQUVvQixHQUFuQixFQUF1QnNELElBQUV6RSxFQUFFaUMsU0FBM0IsRUFBcUNyQixJQUFFWixFQUFFZ0YsTUFBekMsRUFBZ0RoRixJQUFFRCxFQUFFMEYsSUFBcEQsRUFBeURqRCxJQUFFLEVBQTNELEVBQThERixJQUFFLEVBQWhFLEVBQW1Fb0MsSUFBRSxTQUFGQSxDQUFFLENBQVNuQyxDQUFULEVBQVc7QUFBQyxXQUFPLGNBQVlBLEtBQUdBLElBQUUsQ0FBTCxDQUFaLElBQXFCLENBQTVCO0FBQThCLEdBQS9HLEVBQWdIeEIsSUFBRSxDQUFsSCxFQUFvSFAsSUFBRSxDQUExSCxFQUE0SCxLQUFHQSxDQUEvSCxHQUFrSTtBQUFDLFFBQUlMLENBQUosQ0FBTWMsR0FBRTtBQUFDZCxVQUFFWSxDQUFGLENBQUksS0FBSSxJQUFJdUQsSUFBRXRELEVBQUVvRixJQUFGLENBQU9qRyxDQUFQLENBQU4sRUFBZ0J1QyxJQUFFLENBQXRCLEVBQXdCQSxLQUFHNEIsQ0FBM0IsRUFBNkI1QixHQUE3QjtBQUFpQyxZQUFHLEVBQUV2QyxJQUFFdUMsQ0FBSixDQUFILEVBQVU7QUFBQ3ZDLGNBQUUsQ0FBQyxDQUFILENBQUssTUFBTWMsQ0FBTjtBQUFRO0FBQXpELE9BQXlEZCxJQUFFLENBQUMsQ0FBSDtBQUFLLFdBQUksSUFBRUssQ0FBRixLQUFNZ0MsRUFBRWhDLENBQUYsSUFBS2tFLEVBQUUxRCxFQUFFcUYsR0FBRixDQUFNdEYsQ0FBTixFQUFRLEdBQVIsQ0FBRixDQUFYLEdBQTRCdUIsRUFBRTlCLENBQUYsSUFBS2tFLEVBQUUxRCxFQUFFcUYsR0FBRixDQUFNdEYsQ0FBTixFQUFRLElBQUUsQ0FBVixDQUFGLENBQWpDLEVBQWlEUCxHQUFyRCxFQUEwRE87QUFBSSxPQUFJTSxJQUFFLEVBQU47QUFBQSxNQUFTckIsSUFBRUEsRUFBRXNHLE1BQUYsR0FBUzFGLEVBQUVkLE1BQUYsQ0FBUyxFQUFDb0YsVUFBUyxvQkFBVTtBQUFDLFdBQUtxQixLQUFMLEdBQVcsSUFBSTlCLEVBQUUvQyxJQUFOLENBQVdjLEVBQUVLLEtBQUYsQ0FBUSxDQUFSLENBQVgsQ0FBWDtBQUFrQyxLQUF2RCxFQUF3RGlDLGlCQUFnQix5QkFBU3ZDLENBQVQsRUFBV3ZDLENBQVgsRUFBYTtBQUFDLFdBQUksSUFBSWlCLElBQUUsS0FBS3NGLEtBQUwsQ0FBV3JFLEtBQWpCLEVBQXVCeEIsSUFBRU8sRUFBRSxDQUFGLENBQXpCLEVBQThCZCxJQUFFYyxFQUFFLENBQUYsQ0FBaEMsRUFBcUNULElBQUVTLEVBQUUsQ0FBRixDQUF2QyxFQUE0Q0QsSUFBRUMsRUFBRSxDQUFGLENBQTlDLEVBQW1EaEIsSUFBRWdCLEVBQUUsQ0FBRixDQUFyRCxFQUEwRGxCLElBQUVrQixFQUFFLENBQUYsQ0FBNUQsRUFBaUVMLElBQUVLLEVBQUUsQ0FBRixDQUFuRSxFQUF3RUYsSUFBRUUsRUFBRSxDQUFGLENBQTFFLEVBQStFUixJQUFFLENBQXJGLEVBQXVGLEtBQUdBLENBQTFGLEVBQTRGQSxHQUE1RixFQUFnRztBQUFDLFlBQUcsS0FBR0EsQ0FBTixFQUFRWSxFQUFFWixDQUFGLElBQ3JmOEIsRUFBRXZDLElBQUVTLENBQUosSUFBTyxDQUQ4ZSxDQUFSLEtBQ2hlO0FBQUMsY0FBSXVDLElBQUUzQixFQUFFWixJQUFFLEVBQUosQ0FBTjtBQUFBLGNBQWNhLElBQUVELEVBQUVaLElBQUUsQ0FBSixDQUFoQixDQUF1QlksRUFBRVosQ0FBRixJQUFLLENBQUMsQ0FBQ3VDLEtBQUcsRUFBSCxHQUFNQSxNQUFJLENBQVgsS0FBZUEsS0FBRyxFQUFILEdBQU1BLE1BQUksRUFBekIsSUFBNkJBLE1BQUksQ0FBbEMsSUFBcUMzQixFQUFFWixJQUFFLENBQUosQ0FBckMsSUFBNkMsQ0FBQ2EsS0FBRyxFQUFILEdBQU1BLE1BQUksRUFBWCxLQUFnQkEsS0FBRyxFQUFILEdBQU1BLE1BQUksRUFBMUIsSUFBOEJBLE1BQUksRUFBL0UsSUFBbUZELEVBQUVaLElBQUUsRUFBSixDQUF4RjtBQUFnRyxhQUFFTSxLQUFHLENBQUNkLEtBQUcsRUFBSCxHQUFNQSxNQUFJLENBQVgsS0FBZUEsS0FBRyxFQUFILEdBQU1BLE1BQUksRUFBekIsS0FBOEJBLEtBQUcsQ0FBSCxHQUFLQSxNQUFJLEVBQXZDLENBQUgsS0FBZ0RBLElBQUVGLENBQUYsR0FBSSxDQUFDRSxDQUFELEdBQUdXLENBQXZELElBQTBEMEIsRUFBRTdCLENBQUYsQ0FBMUQsR0FBK0RZLEVBQUVaLENBQUYsQ0FBakUsQ0FBc0VhLElBQUUsQ0FBQyxDQUFDWixLQUFHLEVBQUgsR0FBTUEsTUFBSSxDQUFYLEtBQWVBLEtBQUcsRUFBSCxHQUFNQSxNQUFJLEVBQXpCLEtBQThCQSxLQUFHLEVBQUgsR0FBTUEsTUFBSSxFQUF4QyxDQUFELEtBQStDQSxJQUFFUCxDQUFGLEdBQUlPLElBQUVGLENBQU4sR0FBUUwsSUFBRUssQ0FBekQsQ0FBRixDQUE4RE8sSUFBRUgsQ0FBRixDQUFJQSxJQUFFYixDQUFGLENBQUlBLElBQUVFLENBQUYsQ0FBSUEsSUFBRWUsSUFBRWdDLENBQUYsR0FBSSxDQUFOLENBQVFoQyxJQUFFUixDQUFGLENBQUlBLElBQUVMLENBQUYsQ0FBSUEsSUFBRU8sQ0FBRixDQUFJQSxJQUFFc0MsSUFBRTFCLENBQUYsR0FBSSxDQUFOO0FBQVEsU0FBRSxDQUFGLElBQUtMLEVBQUUsQ0FBRixJQUFLUCxDQUFMLEdBQU8sQ0FBWixDQUFjTyxFQUFFLENBQUYsSUFBS0EsRUFBRSxDQUFGLElBQUtkLENBQUwsR0FBTyxDQUFaLENBQWNjLEVBQUUsQ0FBRixJQUFLQSxFQUFFLENBQUYsSUFBS1QsQ0FBTCxHQUFPLENBQVosQ0FBY1MsRUFBRSxDQUFGLElBQUtBLEVBQUUsQ0FBRixJQUFLRCxDQUFMLEdBQU8sQ0FBWixDQUFjQyxFQUFFLENBQUYsSUFBS0EsRUFBRSxDQUFGLElBQUtoQixDQUFMLEdBQU8sQ0FBWixDQUFjZ0IsRUFBRSxDQUFGLElBQUtBLEVBQUUsQ0FBRixJQUFLbEIsQ0FBTCxHQUFPLENBQVosQ0FBY2tCLEVBQUUsQ0FBRixJQUFLQSxFQUFFLENBQUYsSUFBS0wsQ0FBTCxHQUFPLENBQVosQ0FBY0ssRUFBRSxDQUFGLElBQUtBLEVBQUUsQ0FBRixJQUFLRixDQUFMLEdBQU8sQ0FBWjtBQUFjLEtBRDNHLEVBQzRHc0UsYUFBWSx1QkFBVTtBQUFDLFVBQUlsRixJQUFFLEtBQUsrRCxLQUFYO0FBQUEsVUFBaUIxRCxJQUFFTCxFQUFFK0IsS0FBckI7QUFBQSxVQUEyQmpCLElBQUUsSUFBRSxLQUFLa0QsV0FBcEM7QUFBQSxVQUFnRHpELElBQUUsSUFBRVAsRUFBRWdDLFFBQXREO0FBQ3piM0IsUUFBRUUsTUFBSSxDQUFOLEtBQVUsT0FBSyxLQUFHQSxJQUFFLEVBQXBCLENBQXVCRixFQUFFLENBQUNFLElBQUUsRUFBRixLQUFPLENBQVAsSUFBVSxDQUFYLElBQWMsRUFBaEIsSUFBb0JNLEVBQUV3RixLQUFGLENBQVF2RixJQUFFLFVBQVYsQ0FBcEIsQ0FBMENULEVBQUUsQ0FBQ0UsSUFBRSxFQUFGLEtBQU8sQ0FBUCxJQUFVLENBQVgsSUFBYyxFQUFoQixJQUFvQk8sQ0FBcEIsQ0FBc0JkLEVBQUVnQyxRQUFGLEdBQVcsSUFBRTNCLEVBQUVNLE1BQWYsQ0FBc0IsS0FBS3VELFFBQUwsR0FBZ0IsT0FBTyxLQUFLa0MsS0FBWjtBQUFrQixLQUZ1SyxFQUV0S3ZFLE9BQU0saUJBQVU7QUFBQyxVQUFJeEIsSUFBRUksRUFBRW9CLEtBQUYsQ0FBUVksSUFBUixDQUFhLElBQWIsQ0FBTixDQUF5QnBDLEVBQUUrRixLQUFGLEdBQVEsS0FBS0EsS0FBTCxDQUFXdkUsS0FBWCxFQUFSLENBQTJCLE9BQU94QixDQUFQO0FBQVMsS0FGd0YsRUFBVCxDQUFwQixDQUV4RFQsRUFBRXVHLE1BQUYsR0FBUzFGLEVBQUUwRSxhQUFGLENBQWdCdEYsQ0FBaEIsQ0FBVCxDQUE0QkQsRUFBRTBHLFVBQUYsR0FBYTdGLEVBQUUyRSxpQkFBRixDQUFvQnZGLENBQXBCLENBQWI7QUFBb0MsQ0FGalMsRUFFbVMwRixJQUZuUzs7QUFJQTs7Ozs7O0FBTUEsQ0FBQyxZQUFVO0FBQUMsV0FBU3pFLENBQVQsR0FBWTtBQUFDLFdBQU9kLEVBQUUyQixNQUFGLENBQVNGLEtBQVQsQ0FBZXpCLENBQWYsRUFBaUIwQixTQUFqQixDQUFQO0FBQW1DLFFBQUksSUFBSVIsSUFBRUgsUUFBTixFQUFld0IsSUFBRXJCLEVBQUVGLEdBQUYsQ0FBTTZELE1BQXZCLEVBQThCdkUsSUFBRVksRUFBRXNFLEdBQWxDLEVBQXNDeEYsSUFBRU0sRUFBRW1GLElBQTFDLEVBQStDYyxJQUFFakcsRUFBRXdCLFNBQW5ELEVBQTZEeEIsSUFBRVksRUFBRW9FLElBQWpFLEVBQXNFa0IsS0FBRyxDQUFDMUYsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUFELEVBQTBCQSxFQUFFLFVBQUYsRUFBYSxTQUFiLENBQTFCLEVBQWtEQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBQWxELEVBQTJFQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBQTNFLEVBQW9HQSxFQUFFLFNBQUYsRUFBWSxVQUFaLENBQXBHLEVBQTRIQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBQTVILEVBQXFKQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBQXJKLEVBQThLQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBQTlLLEVBQXVNQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBQXZNLEVBQWdPQSxFQUFFLFNBQUYsRUFBWSxVQUFaLENBQWhPLEVBQXdQQSxFQUFFLFNBQUYsRUFBWSxVQUFaLENBQXhQLEVBQWdSQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBQWhSLEVBQXlTQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBQXpTLEVBQWtVQSxFQUFFLFVBQUYsRUFBYSxTQUFiLENBQWxVLEVBQTBWQSxFQUFFLFVBQUYsRUFBYSxTQUFiLENBQTFWLEVBQ3pJQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBRHlJLEVBQ2hIQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBRGdILEVBQ3ZGQSxFQUFFLFVBQUYsRUFBYSxTQUFiLENBRHVGLEVBQy9EQSxFQUFFLFNBQUYsRUFBWSxVQUFaLENBRCtELEVBQ3ZDQSxFQUFFLFNBQUYsRUFBWSxVQUFaLENBRHVDLEVBQ2ZBLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FEZSxFQUNTQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBRFQsRUFDa0NBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FEbEMsRUFDMkRBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FEM0QsRUFDb0ZBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FEcEYsRUFDNkdBLEVBQUUsVUFBRixFQUFhLFNBQWIsQ0FEN0csRUFDcUlBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FEckksRUFDOEpBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FEOUosRUFDdUxBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FEdkwsRUFDZ05BLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FEaE4sRUFDeU9BLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FEek8sRUFDaVFBLEVBQUUsU0FBRixFQUFZLFNBQVosQ0FEalEsRUFDd1JBLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FEeFIsRUFDZ1RBLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FEaFQsRUFDd1VBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FEeFUsRUFDaVdBLEVBQUUsVUFBRixFQUMxZSxVQUQwZSxDQURqVyxFQUU3SEEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUY2SCxFQUVwR0EsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUZvRyxFQUUzRUEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUYyRSxFQUVsREEsRUFBRSxVQUFGLEVBQWEsU0FBYixDQUZrRCxFQUUxQkEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUYwQixFQUVEQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBRkMsRUFFd0JBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FGeEIsRUFFaURBLEVBQUUsVUFBRixFQUFhLFNBQWIsQ0FGakQsRUFFeUVBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FGekUsRUFFa0dBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FGbEcsRUFFMkhBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FGM0gsRUFFb0pBLEVBQUUsU0FBRixFQUFZLFNBQVosQ0FGcEosRUFFMktBLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FGM0ssRUFFbU1BLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FGbk0sRUFFMk5BLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FGM04sRUFFbVBBLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FGblAsRUFFMlFBLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FGM1EsRUFFbVNBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FGblMsRUFFNFRBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FGNVQsRUFFcVZBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FGclYsRUFHeklBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FIeUksRUFHaEhBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FIZ0gsRUFHdkZBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FIdUYsRUFHOURBLEVBQUUsVUFBRixFQUFhLFNBQWIsQ0FIOEQsRUFHdENBLEVBQUUsVUFBRixFQUFhLFNBQWIsQ0FIc0MsRUFHZEEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUhjLEVBR1dBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FIWCxFQUdvQ0EsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUhwQyxFQUc2REEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUg3RCxFQUdzRkEsRUFBRSxVQUFGLEVBQWEsU0FBYixDQUh0RixFQUc4R0EsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUg5RyxFQUd1SUEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUh2SSxFQUdnS0EsRUFBRSxTQUFGLEVBQVksVUFBWixDQUhoSyxFQUd3TEEsRUFBRSxTQUFGLEVBQVksVUFBWixDQUh4TCxFQUdnTkEsRUFBRSxTQUFGLEVBQVksVUFBWixDQUhoTixFQUd3T0EsRUFBRSxTQUFGLEVBQVksU0FBWixDQUh4TyxFQUcrUEEsRUFBRSxTQUFGLEVBQVksU0FBWixDQUgvUCxFQUdzUkEsRUFBRSxTQUFGLEVBQVksVUFBWixDQUh0UixFQUc4U0EsRUFBRSxVQUFGLEVBQWEsU0FBYixDQUg5UyxFQUdzVUEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUh0VSxFQUcrVkEsRUFBRSxVQUFGLEVBQ3hlLFVBRHdlLENBSC9WLEVBSTdIQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBSjZILEVBSXBHQSxFQUFFLFVBQUYsRUFBYSxTQUFiLENBSm9HLEVBSTVFQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBSjRFLENBQXpFLEVBSXVCd0QsSUFBRSxFQUp6QixFQUk0QkgsSUFBRSxDQUpsQyxFQUlvQyxLQUFHQSxDQUp2QyxFQUl5Q0EsR0FKekM7QUFJNkNHLE1BQUVILENBQUYsSUFBS3JELEdBQUw7QUFKN0MsR0FJc0RSLElBQUVBLEVBQUVtRyxNQUFGLEdBQVNsRSxFQUFFNUMsTUFBRixDQUFTLEVBQUNvRixVQUFTLG9CQUFVO0FBQUMsV0FBS3FCLEtBQUwsR0FBVyxJQUFJRyxFQUFFaEYsSUFBTixDQUFXLENBQUMsSUFBSXZCLEVBQUV1QixJQUFOLENBQVcsVUFBWCxFQUFzQixVQUF0QixDQUFELEVBQW1DLElBQUl2QixFQUFFdUIsSUFBTixDQUFXLFVBQVgsRUFBc0IsVUFBdEIsQ0FBbkMsRUFBcUUsSUFBSXZCLEVBQUV1QixJQUFOLENBQVcsVUFBWCxFQUFzQixVQUF0QixDQUFyRSxFQUF1RyxJQUFJdkIsRUFBRXVCLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFVBQXRCLENBQXZHLEVBQXlJLElBQUl2QixFQUFFdUIsSUFBTixDQUFXLFVBQVgsRUFBc0IsVUFBdEIsQ0FBekksRUFBMkssSUFBSXZCLEVBQUV1QixJQUFOLENBQVcsVUFBWCxFQUFzQixTQUF0QixDQUEzSyxFQUE0TSxJQUFJdkIsRUFBRXVCLElBQU4sQ0FBVyxTQUFYLEVBQXFCLFVBQXJCLENBQTVNLEVBQTZPLElBQUl2QixFQUFFdUIsSUFBTixDQUFXLFVBQVgsRUFBc0IsU0FBdEIsQ0FBN08sQ0FBWCxDQUFYO0FBQXNTLEtBQTNULEVBQTRUb0QsaUJBQWdCLHlCQUFTN0QsQ0FBVCxFQUFXZCxDQUFYLEVBQWE7QUFBQyxXQUFJLElBQUlGLElBQUUsS0FBS3NHLEtBQUwsQ0FBV3JFLEtBQWpCLEVBQ3BlMkUsSUFBRTVHLEVBQUUsQ0FBRixDQURrZSxFQUM3ZFEsSUFBRVIsRUFBRSxDQUFGLENBRDJkLEVBQ3Rkb0IsSUFBRXBCLEVBQUUsQ0FBRixDQURvZCxFQUMvY3lDLElBQUV6QyxFQUFFLENBQUYsQ0FENmMsRUFDeGM2RyxJQUFFN0csRUFBRSxDQUFGLENBRHNjLEVBQ2pjOEcsSUFBRTlHLEVBQUUsQ0FBRixDQUQrYixFQUMxYitHLElBQUUvRyxFQUFFLENBQUYsQ0FEd2IsRUFDbmJBLElBQUVBLEVBQUUsQ0FBRixDQURpYixFQUM1YXFFLElBQUV1QyxFQUFFaEIsSUFEd2EsRUFDbmFvQixJQUFFSixFQUFFZixHQUQrWixFQUMzWm9CLElBQUV6RyxFQUFFb0YsSUFEdVosRUFDbFpzQixJQUFFMUcsRUFBRXFGLEdBRDhZLEVBQzFZc0IsSUFBRS9GLEVBQUV3RSxJQURzWSxFQUNqWXdCLElBQUVoRyxFQUFFeUUsR0FENlgsRUFDelh3QixJQUFFNUUsRUFBRW1ELElBRHFYLEVBQ2hYMEIsSUFBRTdFLEVBQUVvRCxHQUQ0VyxFQUN4VzBCLElBQUVWLEVBQUVqQixJQURvVyxFQUMvVjRCLElBQUVYLEVBQUVoQixHQUQyVixFQUN2VjRCLEtBQUdYLEVBQUVsQixJQURrVixFQUM3VThCLElBQUVaLEVBQUVqQixHQUR5VSxFQUNyVThCLEtBQUdaLEVBQUVuQixJQURnVSxFQUMzVGdDLElBQUViLEVBQUVsQixHQUR1VCxFQUNuVGdDLEtBQUc3SCxFQUFFNEYsSUFEOFMsRUFDelNrQyxJQUFFOUgsRUFBRTZGLEdBRHFTLEVBQ2pTOUUsSUFBRXNELENBRCtSLEVBQzdSdkUsSUFBRWtILENBRDJSLEVBQ3pSZSxJQUFFZCxDQUR1UixFQUNyUjNDLElBQUU0QyxDQURtUixFQUNqUmMsSUFBRWIsQ0FEK1EsRUFDN1FjLElBQUViLENBRDJRLEVBQ3pRYyxJQUFFYixDQUR1USxFQUNyUWMsSUFBRWIsQ0FEbVEsRUFDalF4RyxJQUFFeUcsQ0FEK1AsRUFDN1B4SCxJQUFFeUgsQ0FEMlAsRUFDelBZLElBQUVYLEVBRHVQLEVBQ3BQWSxJQUFFWCxDQURrUCxFQUNoUFksSUFBRVgsRUFEOE8sRUFDM09ZLElBQUVYLENBRHlPLEVBQ3ZPWSxJQUFFWCxFQURxTyxFQUNsT1ksSUFBRVgsQ0FEZ08sRUFDOU4vRSxJQUFFLENBRHdOLEVBQ3ROLEtBQUdBLENBRG1OLEVBQ2pOQSxHQURpTixFQUM3TTtBQUFDLFlBQUlSLElBQUVpQyxFQUFFekIsQ0FBRixDQUFOLENBQVcsSUFBRyxLQUFHQSxDQUFOLEVBQVEsSUFBSXBDLElBQUU0QixFQUFFcUQsSUFBRixHQUFPNUUsRUFBRWQsSUFBRSxJQUFFNkMsQ0FBTixJQUFTLENBQXRCO0FBQUEsWUFBd0J4QyxJQUFFZ0MsRUFBRXNELEdBQUYsR0FBTTdFLEVBQUVkLElBQUUsSUFBRTZDLENBQUosR0FBTSxDQUFSLElBQVcsQ0FBM0MsQ0FBUixLQUF5RDtBQUFDLGNBQUlwQyxJQUFFNkQsRUFBRXpCLElBQUUsRUFBSixDQUFOO0FBQUEsY0FBY3hDLElBQUVJLEVBQUVpRixJQUFsQjtBQUFBLGNBQXVCdkUsSUFBRVYsRUFBRWtGLEdBQTNCO0FBQUEsY0FBK0JsRixJQUFFLENBQUNKLE1BQUksQ0FBSixHQUFNYyxLQUFHLEVBQVYsS0FBZWQsTUFBSSxDQUFKLEdBQU1jLEtBQUcsRUFBeEIsSUFBNEJkLE1BQUksQ0FBakU7QUFBQSxjQUFtRWMsSUFBRSxDQUFDQSxNQUFJLENBQUosR0FBTWQsS0FBRyxFQUFWLEtBQWVjLE1BQUksQ0FBSixHQUFNZCxLQUFHLEVBQXhCLEtBQTZCYyxNQUFJLENBQUosR0FBTWQsS0FBRyxFQUF0QyxDQUFyRTtBQUFBLGNBQStHa0UsSUFBRUQsRUFBRXpCLElBQUUsQ0FBSixDQUFqSDtBQUFBLGNBQXdIeEMsSUFBRWtFLEVBQUVtQixJQUE1SDtBQUFBLGNBQWlJbkYsSUFBRWdFLEVBQUVvQixHQUFySTtBQUFBLGNBQXlJcEIsSUFBRSxDQUFDbEUsTUFBSSxFQUFKLEdBQU9FLEtBQUcsRUFBWCxLQUFnQkYsS0FDcGYsQ0FEb2YsR0FDbGZFLE1BQUksRUFEOGQsSUFDMWRGLE1BQUksQ0FEMlU7QUFBQSxjQUN6VUUsSUFBRSxDQUFDQSxNQUFJLEVBQUosR0FBT0YsS0FBRyxFQUFYLEtBQWdCRSxLQUFHLENBQUgsR0FBS0YsTUFBSSxFQUF6QixLQUE4QkUsTUFBSSxDQUFKLEdBQU1GLEtBQUcsRUFBdkMsQ0FEdVU7QUFBQSxjQUM1UkEsSUFBRWlFLEVBQUV6QixJQUFFLENBQUosQ0FEMFI7QUFBQSxjQUNuUjJGLElBQUVuSSxFQUFFcUYsSUFEK1E7QUFBQSxjQUMxUXZELElBQUVtQyxFQUFFekIsSUFBRSxFQUFKLENBRHdRO0FBQUEsY0FDaFFULElBQUVELEVBQUV1RCxJQUQ0UDtBQUFBLGNBQ3ZQdkQsSUFBRUEsRUFBRXdELEdBRG1QO0FBQUEsY0FDL090RixJQUFFYyxJQUFFZCxFQUFFc0YsR0FEeU87QUFBQSxjQUNyT2xGLElBQUVBLElBQUUrSCxDQUFGLElBQUtuSSxNQUFJLENBQUosR0FBTWMsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQW5CLENBRG1PO0FBQUEsY0FDN01kLElBQUVBLElBQUVFLENBRHlNO0FBQUEsY0FDdk1FLElBQUVBLElBQUU4RCxDQUFGLElBQUtsRSxNQUFJLENBQUosR0FBTUUsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQW5CLENBRHFNO0FBQUEsY0FDL0tGLElBQUVBLElBQUU4QixDQUQySztBQUFBLGNBQ3pLMUIsSUFBRUEsSUFBRTJCLENBQUYsSUFBSy9CLE1BQUksQ0FBSixHQUFNOEIsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQW5CLENBRHVLLENBQ2pKRSxFQUFFcUQsSUFBRixHQUFPakYsQ0FBUCxDQUFTNEIsRUFBRXNELEdBQUYsR0FBTXRGLENBQU47QUFBUSxhQUFJbUksSUFBRTVILElBQUVzSCxDQUFGLEdBQUksQ0FBQ3RILENBQUQsR0FBR3dILENBQWI7QUFBQSxZQUFlakcsSUFBRXRDLElBQUVzSSxDQUFGLEdBQUksQ0FBQ3RJLENBQUQsR0FBR3dJLENBQXhCO0FBQUEsWUFBMEJoRyxJQUFFeEIsSUFBRWdILENBQUYsR0FBSWhILElBQUVpSCxDQUFOLEdBQVFELElBQUVDLENBQXRDO0FBQUEsWUFBd0N2QixJQUFFM0csSUFBRXdFLENBQUYsR0FBSXhFLElBQUVtSSxDQUFOLEdBQVEzRCxJQUFFMkQsQ0FBcEQ7QUFBQSxZQUFzRDVHLElBQUUsQ0FBQ04sTUFBSSxFQUFKLEdBQU9qQixLQUFHLENBQVgsS0FBZWlCLEtBQUcsRUFBSCxHQUFNakIsTUFBSSxDQUF6QixLQUE2QmlCLEtBQUcsRUFBSCxHQUFNakIsTUFBSSxDQUF2QyxDQUF4RDtBQUFBLFlBQWtHMkUsSUFBRSxDQUFDM0UsTUFBSSxFQUFKLEdBQU9pQixLQUFHLENBQVgsS0FBZWpCLEtBQUcsRUFBSCxHQUFNaUIsTUFBSSxDQUF6QixLQUE2QmpCLEtBQUcsRUFBSCxHQUFNaUIsTUFBSSxDQUF2QyxDQUFwRztBQUFBLFlBQThJTixJQUFFaUcsR0FBRzNELENBQUgsQ0FBaEo7QUFBQSxZQUFzSjRGLEtBQUdsSSxFQUFFbUYsSUFBM0o7QUFBQSxZQUFnS2dELEtBQUduSSxFQUFFb0YsR0FBcks7QUFBQSxZQUF5S3BGLElBQUVnSSxLQUFHLENBQUMxSSxNQUFJLEVBQUosR0FBT2UsS0FBRyxFQUFYLEtBQWdCZixNQUFJLEVBQUosR0FBT2UsS0FBRyxFQUExQixLQUErQmYsS0FBRyxFQUFILEdBQU1lLE1BQUksQ0FBekMsQ0FBSCxDQUEzSztBQUFBLFlBQTJOd0IsSUFBRWtHLEtBQUcsQ0FBQzFILE1BQUksRUFBSixHQUFPZixLQUFHLEVBQVgsS0FBZ0JlLE1BQUksRUFBSixHQUFPZixLQUFHLEVBQTFCLEtBQStCZSxLQUFHLEVBQUgsR0FBTWYsTUFBSSxDQUF6QyxDQUFILEtBQWlEVSxNQUFJLENBQUosR0FBTWdJLE1BQUksQ0FBVixHQUFZLENBQVosR0FDdmUsQ0FEc2IsQ0FBN047QUFBQSxZQUN0TmhJLElBQUVBLElBQUU0QixDQURrTjtBQUFBLFlBQ2hOQyxJQUFFQSxJQUFFb0csQ0FBRixJQUFLakksTUFBSSxDQUFKLEdBQU00QixNQUFJLENBQVYsR0FBWSxDQUFaLEdBQWMsQ0FBbkIsQ0FEOE07QUFBQSxZQUN4TDVCLElBQUVBLElBQUVtSSxFQURvTDtBQUFBLFlBQ2pMdEcsSUFBRUEsSUFBRXFHLEVBQUYsSUFBTWxJLE1BQUksQ0FBSixHQUFNbUksT0FBSyxDQUFYLEdBQWEsQ0FBYixHQUFlLENBQXJCLENBRCtLO0FBQUEsWUFDdkpuSSxJQUFFQSxJQUFFRixDQURtSjtBQUFBLFlBQ2pKK0IsSUFBRUEsSUFBRTNCLENBQUYsSUFBS0YsTUFBSSxDQUFKLEdBQU1GLE1BQUksQ0FBVixHQUFZLENBQVosR0FBYyxDQUFuQixDQUQrSTtBQUFBLFlBQ3pIQSxJQUFFa0UsSUFBRWdDLENBRHFIO0FBQUEsWUFDbkhsRSxJQUFFbEIsSUFBRWtCLENBQUYsSUFBS2hDLE1BQUksQ0FBSixHQUFNa0UsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQW5CLENBRGlIO0FBQUEsWUFDM0YrRCxJQUFFRixDQUR5RjtBQUFBLFlBQ3ZGRyxJQUFFRixDQURxRjtBQUFBLFlBQ25GRCxJQUFFRixDQURpRjtBQUFBLFlBQy9FRyxJQUFFRixDQUQ2RTtBQUFBLFlBQzNFRCxJQUFFdEgsQ0FEeUU7QUFBQSxZQUN2RXVILElBQUV0SSxDQURxRTtBQUFBLFlBQ25FQSxJQUFFb0ksSUFBRTFILENBQUYsR0FBSSxDQUQ2RDtBQUFBLFlBQzNESyxJQUFFb0gsSUFBRTVGLENBQUYsSUFBS3ZDLE1BQUksQ0FBSixHQUFNb0ksTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQW5CLElBQXNCLENBRG1DO0FBQUEsWUFDakNELElBQUVGLENBRCtCO0FBQUEsWUFDN0JHLElBQUVGLENBRDJCO0FBQUEsWUFDekJELElBQUVELENBRHVCO0FBQUEsWUFDckJFLElBQUUzRCxDQURtQjtBQUFBLFlBQ2pCeUQsSUFBRWhILENBRGU7QUFBQSxZQUNidUQsSUFBRXhFLENBRFc7QUFBQSxZQUNUQSxJQUFFVyxJQUFFRixDQUFGLEdBQUksQ0FERztBQUFBLFlBQ0RRLElBQUV1QixJQUFFQyxDQUFGLElBQUt6QyxNQUFJLENBQUosR0FBTVcsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQW5CLElBQXNCLENBRHZCO0FBQ3lCLFdBQUVtRyxFQUFFZixHQUFGLEdBQU1tQixJQUFFbEgsQ0FBVixDQUFZOEcsRUFBRWhCLElBQUYsR0FBT3ZCLElBQUV0RCxDQUFGLElBQUtpRyxNQUFJLENBQUosR0FBTWxILE1BQUksQ0FBVixHQUFZLENBQVosR0FBYyxDQUFuQixDQUFQLENBQTZCb0gsSUFBRTFHLEVBQUVxRixHQUFGLEdBQU1xQixJQUFFNUMsQ0FBVixDQUFZOUQsRUFBRW9GLElBQUYsR0FBT3FCLElBQUVjLENBQUYsSUFBS2IsTUFBSSxDQUFKLEdBQU01QyxNQUFJLENBQVYsR0FBWSxDQUFaLEdBQWMsQ0FBbkIsQ0FBUCxDQUE2QjhDLElBQUVoRyxFQUFFeUUsR0FBRixHQUFNdUIsSUFBRWEsQ0FBVixDQUFZN0csRUFBRXdFLElBQUYsR0FBT3VCLElBQUVhLENBQUYsSUFBS1osTUFBSSxDQUFKLEdBQU1hLE1BQUksQ0FBVixHQUFZLENBQVosR0FBYyxDQUFuQixDQUFQLENBQTZCWCxJQUFFN0UsRUFBRW9ELEdBQUYsR0FBTXlCLElBQUVhLENBQVYsQ0FBWTFGLEVBQUVtRCxJQUFGLEdBQU95QixJQUFFYSxDQUFGLElBQUtaLE1BQUksQ0FBSixHQUFNYSxNQUFJLENBQVYsR0FBWSxDQUFaLEdBQWMsQ0FBbkIsQ0FBUCxDQUE2QlgsSUFBRVgsRUFBRWhCLEdBQUYsR0FBTTJCLElBQUV6SCxDQUFWLENBQVk4RyxFQUFFakIsSUFBRixHQUFPMkIsSUFBRXpHLENBQUYsSUFBSzBHLE1BQUksQ0FBSixHQUFNekgsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQW5CLENBQVAsQ0FBNkIySCxJQUFFWixFQUFFakIsR0FBRixHQUFNNkIsSUFBRVcsQ0FBVixDQUFZdkIsRUFBRWxCLElBQUYsR0FBTzZCLEtBQUdXLENBQUgsSUFBTVYsTUFBSSxDQUFKLEdBQU1XLE1BQUksQ0FBVixHQUFZLENBQVosR0FBYyxDQUFwQixDQUFQLENBQThCVCxJQUFFYixFQUFFbEIsR0FBRixHQUFNK0IsSUFBRVcsQ0FBVjtBQUN6ZXhCLFFBQUVuQixJQUFGLEdBQU8rQixLQUFHVyxDQUFILElBQU1WLE1BQUksQ0FBSixHQUFNVyxNQUFJLENBQVYsR0FBWSxDQUFaLEdBQWMsQ0FBcEIsQ0FBUCxDQUE4QlQsSUFBRTlILEVBQUU2RixHQUFGLEdBQU1pQyxJQUFFVyxDQUFWLENBQVl6SSxFQUFFNEYsSUFBRixHQUFPaUMsS0FBR1csQ0FBSCxJQUFNVixNQUFJLENBQUosR0FBTVcsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQXBCLENBQVA7QUFBOEIsS0FKOEQsRUFJN0RyRCxhQUFZLHVCQUFVO0FBQUMsVUFBSXBFLElBQUUsS0FBS2lELEtBQVg7QUFBQSxVQUFpQi9ELElBQUVjLEVBQUVpQixLQUFyQjtBQUFBLFVBQTJCakMsSUFBRSxJQUFFLEtBQUtrRSxXQUFwQztBQUFBLFVBQWdEMUQsSUFBRSxJQUFFUSxFQUFFa0IsUUFBdEQsQ0FBK0RoQyxFQUFFTSxNQUFJLENBQU4sS0FBVSxPQUFLLEtBQUdBLElBQUUsRUFBcEIsQ0FBdUJOLEVBQUUsQ0FBQ00sSUFBRSxHQUFGLEtBQVEsRUFBUixJQUFZLENBQWIsSUFBZ0IsRUFBbEIsSUFBc0JpRixLQUFLYyxLQUFMLENBQVd2RyxJQUFFLFVBQWIsQ0FBdEIsQ0FBK0NFLEVBQUUsQ0FBQ00sSUFBRSxHQUFGLEtBQVEsRUFBUixJQUFZLENBQWIsSUFBZ0IsRUFBbEIsSUFBc0JSLENBQXRCLENBQXdCZ0IsRUFBRWtCLFFBQUYsR0FBVyxJQUFFaEMsRUFBRVcsTUFBZixDQUFzQixLQUFLdUQsUUFBTCxHQUFnQixPQUFPLEtBQUtrQyxLQUFMLENBQVdSLEtBQVgsRUFBUDtBQUEwQixLQUp2TCxFQUl3TC9ELE9BQU0saUJBQVU7QUFBQyxVQUFJZixJQUFFeUIsRUFBRVYsS0FBRixDQUFRWSxJQUFSLENBQWEsSUFBYixDQUFOLENBQXlCM0IsRUFBRXNGLEtBQUYsR0FBUSxLQUFLQSxLQUFMLENBQVd2RSxLQUFYLEVBQVIsQ0FBMkIsT0FBT2YsQ0FBUDtBQUFTLEtBSnRRLEVBSXVRdUQsV0FBVSxFQUpqUixFQUFULENBQVgsQ0FJMFNuRCxFQUFFdUYsTUFBRixHQUFTbEUsRUFBRTRDLGFBQUYsQ0FBZ0I3RSxDQUFoQixDQUFULENBQTRCWSxFQUFFeUgsVUFBRixHQUFhcEcsRUFBRTZDLGlCQUFGLENBQW9COUUsQ0FBcEIsQ0FBYjtBQUFvQyxDQVI1ZDs7QUFVQTs7Ozs7O0FBTUEsQ0FBQyxZQUFVO0FBQUMsTUFBSUMsSUFBRVEsUUFBTjtBQUFBLE1BQWVELElBQUVQLEVBQUVpRixHQUFuQjtBQUFBLE1BQXVCbkYsSUFBRVMsRUFBRTJFLElBQTNCO0FBQUEsTUFBZ0NuRixJQUFFUSxFQUFFZ0IsU0FBcEM7QUFBQSxNQUE4Q2hCLElBQUVQLEVBQUUrRSxJQUFsRDtBQUFBLE1BQXVEdEYsSUFBRWMsRUFBRTJGLE1BQTNEO0FBQUEsTUFBa0UzRixJQUFFQSxFQUFFOEgsTUFBRixHQUFTNUksRUFBRUwsTUFBRixDQUFTLEVBQUNvRixVQUFTLG9CQUFVO0FBQUMsV0FBS3FCLEtBQUwsR0FBVyxJQUFJOUYsRUFBRWlCLElBQU4sQ0FBVyxDQUFDLElBQUlsQixFQUFFa0IsSUFBTixDQUFXLFVBQVgsRUFBc0IsVUFBdEIsQ0FBRCxFQUFtQyxJQUFJbEIsRUFBRWtCLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFNBQXRCLENBQW5DLEVBQW9FLElBQUlsQixFQUFFa0IsSUFBTixDQUFXLFVBQVgsRUFBc0IsU0FBdEIsQ0FBcEUsRUFBcUcsSUFBSWxCLEVBQUVrQixJQUFOLENBQVcsU0FBWCxFQUFxQixVQUFyQixDQUFyRyxFQUFzSSxJQUFJbEIsRUFBRWtCLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFVBQXRCLENBQXRJLEVBQXdLLElBQUlsQixFQUFFa0IsSUFBTixDQUFXLFVBQVgsRUFBc0IsVUFBdEIsQ0FBeEssRUFBME0sSUFBSWxCLEVBQUVrQixJQUFOLENBQVcsVUFBWCxFQUFzQixVQUF0QixDQUExTSxFQUE0TyxJQUFJbEIsRUFBRWtCLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFVBQXRCLENBQTVPLENBQVgsQ0FBWDtBQUFzUyxLQUEzVCxFQUE0VDJELGFBQVksdUJBQVU7QUFBQyxVQUFJcEUsSUFBRWQsRUFBRWtGLFdBQUYsQ0FBY3pDLElBQWQsQ0FBbUIsSUFBbkIsQ0FBTixDQUErQjNCLEVBQUVrQixRQUFGLElBQVksRUFBWixDQUFlLE9BQU9sQixDQUFQO0FBQVMsS0FBMVksRUFBVCxDQUE3RSxDQUFtZVAsRUFBRXFJLE1BQUYsR0FDL2U1SSxFQUFFbUYsYUFBRixDQUFnQnJFLENBQWhCLENBRCtlLENBQzVkUCxFQUFFc0ksVUFBRixHQUFhN0ksRUFBRW9GLGlCQUFGLENBQW9CdEUsQ0FBcEIsQ0FBYjtBQUFvQyxDQUR2RDs7QUFHQTs7QUFFQSxJQUFJZ0ksU0FBTyxrRUFBWCxDQUE4RSxJQUFJQyxTQUFPLEdBQVgsQ0FBZSxTQUFTQyxPQUFULENBQWlCaEosQ0FBakIsRUFBbUI7QUFBQyxNQUFJSyxDQUFKLENBQU0sSUFBSUMsQ0FBSixDQUFNLElBQUlRLElBQUUsRUFBTixDQUFTLEtBQUlULElBQUUsQ0FBTixFQUFRQSxJQUFFLENBQUYsSUFBS0wsRUFBRVcsTUFBZixFQUFzQk4sS0FBRyxDQUF6QixFQUEyQjtBQUFDQyxRQUFFNEMsU0FBU2xELEVBQUVpSixTQUFGLENBQVk1SSxDQUFaLEVBQWNBLElBQUUsQ0FBaEIsQ0FBVCxFQUE0QixFQUE1QixDQUFGLENBQWtDUyxLQUFHZ0ksT0FBTy9DLE1BQVAsQ0FBY3pGLEtBQUcsQ0FBakIsSUFBb0J3SSxPQUFPL0MsTUFBUCxDQUFjekYsSUFBRSxFQUFoQixDQUF2QjtBQUEyQyxPQUFHRCxJQUFFLENBQUYsSUFBS0wsRUFBRVcsTUFBVixFQUFpQjtBQUFDTCxRQUFFNEMsU0FBU2xELEVBQUVpSixTQUFGLENBQVk1SSxDQUFaLEVBQWNBLElBQUUsQ0FBaEIsQ0FBVCxFQUE0QixFQUE1QixDQUFGLENBQWtDUyxLQUFHZ0ksT0FBTy9DLE1BQVAsQ0FBY3pGLEtBQUcsQ0FBakIsQ0FBSDtBQUF1QixHQUEzRSxNQUErRTtBQUFDLFFBQUdELElBQUUsQ0FBRixJQUFLTCxFQUFFVyxNQUFWLEVBQWlCO0FBQUNMLFVBQUU0QyxTQUFTbEQsRUFBRWlKLFNBQUYsQ0FBWTVJLENBQVosRUFBY0EsSUFBRSxDQUFoQixDQUFULEVBQTRCLEVBQTVCLENBQUYsQ0FBa0NTLEtBQUdnSSxPQUFPL0MsTUFBUCxDQUFjekYsS0FBRyxDQUFqQixJQUFvQndJLE9BQU8vQyxNQUFQLENBQWMsQ0FBQ3pGLElBQUUsQ0FBSCxLQUFPLENBQXJCLENBQXZCO0FBQStDO0FBQUMsT0FBR3lJLE1BQUgsRUFBVTtBQUFDLFdBQU0sQ0FBQ2pJLEVBQUVILE1BQUYsR0FBUyxDQUFWLElBQWEsQ0FBbkIsRUFBcUI7QUFBQ0csV0FBR2lJLE1BQUg7QUFBVTtBQUFDLFVBQU9qSSxDQUFQO0FBQVMsVUFBU29JLFFBQVQsQ0FBa0JwSixDQUFsQixFQUFvQjtBQUFDLE1BQUlFLElBQUUsRUFBTixDQUFTLElBQUlNLENBQUosQ0FBTSxJQUFJRCxJQUFFLENBQU4sQ0FBUSxJQUFJRSxDQUFKLENBQU0sSUFBSU8sQ0FBSixDQUFNLEtBQUlSLElBQUUsQ0FBTixFQUFRQSxJQUFFUixFQUFFYSxNQUFaLEVBQW1CLEVBQUVMLENBQXJCLEVBQXVCO0FBQUMsUUFBR1IsRUFBRWlHLE1BQUYsQ0FBU3pGLENBQVQsS0FBYXlJLE1BQWhCLEVBQXVCO0FBQUM7QUFBTSxTQUFFRCxPQUFPOUMsT0FBUCxDQUFlbEcsRUFBRWlHLE1BQUYsQ0FBU3pGLENBQVQsQ0FBZixDQUFGLENBQThCLElBQUdRLElBQUUsQ0FBTCxFQUFPO0FBQUM7QUFBUyxTQUFHVCxLQUFHLENBQU4sRUFBUTtBQUFDTCxXQUFHbUosU0FBU3JJLEtBQUcsQ0FBWixDQUFILENBQWtCUCxJQUFFTyxJQUFFLENBQUosQ0FBTVQsSUFBRSxDQUFGO0FBQUksS0FBckMsTUFBeUM7QUFBQyxVQUFHQSxLQUFHLENBQU4sRUFBUTtBQUFDTCxhQUFHbUosU0FBVTVJLEtBQUcsQ0FBSixHQUFRTyxLQUFHLENBQXBCLENBQUgsQ0FBMkJQLElBQUVPLElBQUUsRUFBSixDQUFPVCxJQUFFLENBQUY7QUFBSSxPQUEvQyxNQUFtRDtBQUFDLFlBQUdBLEtBQUcsQ0FBTixFQUFRO0FBQUNMLGVBQUdtSixTQUFTNUksQ0FBVCxDQUFILENBQWVQLEtBQUdtSixTQUFTckksS0FBRyxDQUFaLENBQUgsQ0FBa0JQLElBQUVPLElBQUUsQ0FBSixDQUFNVCxJQUFFLENBQUY7QUFBSSxTQUFwRCxNQUF3RDtBQUFDTCxlQUFHbUosU0FBVTVJLEtBQUcsQ0FBSixHQUFRTyxLQUFHLENBQXBCLENBQUgsQ0FBMkJkLEtBQUdtSixTQUFTckksSUFBRSxFQUFYLENBQUgsQ0FBa0JULElBQUUsQ0FBRjtBQUFJO0FBQUM7QUFBQztBQUFDLE9BQUdBLEtBQUcsQ0FBTixFQUFRO0FBQUNMLFNBQUdtSixTQUFTNUksS0FBRyxDQUFaLENBQUg7QUFBa0IsVUFBT1AsQ0FBUDtBQUFTLFVBQVNvSixPQUFULENBQWlCOUksQ0FBakIsRUFBbUI7QUFBQyxNQUFJTixJQUFFa0osU0FBUzVJLENBQVQsQ0FBTixDQUFrQixJQUFJQyxDQUFKLENBQU0sSUFBSUYsSUFBRSxJQUFJZ0osS0FBSixFQUFOLENBQWtCLEtBQUk5SSxJQUFFLENBQU4sRUFBUSxJQUFFQSxDQUFGLEdBQUlQLEVBQUVXLE1BQWQsRUFBcUIsRUFBRUosQ0FBdkIsRUFBeUI7QUFBQ0YsTUFBRUUsQ0FBRixJQUFLMkMsU0FBU2xELEVBQUVpSixTQUFGLENBQVksSUFBRTFJLENBQWQsRUFBZ0IsSUFBRUEsQ0FBRixHQUFJLENBQXBCLENBQVQsRUFBZ0MsRUFBaEMsQ0FBTDtBQUF5QyxVQUFPRixDQUFQO0FBQVM7QUFDOStCOztBQUVBLElBQUlpSixLQUFKLENBQVUsSUFBSUMsU0FBTyxlQUFYLENBQTJCLElBQUlDLE9BQU0sQ0FBQ0QsU0FBTyxRQUFSLEtBQW1CLFFBQTdCLENBQXVDLFNBQVNFLFVBQVQsQ0FBb0JuSixDQUFwQixFQUFzQk4sQ0FBdEIsRUFBd0JGLENBQXhCLEVBQTBCO0FBQUMsTUFBR1EsS0FBRyxJQUFOLEVBQVc7QUFBQyxRQUFHLFlBQVUsT0FBT0EsQ0FBcEIsRUFBc0I7QUFBQyxXQUFLb0osVUFBTCxDQUFnQnBKLENBQWhCLEVBQWtCTixDQUFsQixFQUFvQkYsQ0FBcEI7QUFBdUIsS0FBOUMsTUFBa0Q7QUFBQyxVQUFHRSxLQUFHLElBQUgsSUFBUyxZQUFVLE9BQU9NLENBQTdCLEVBQStCO0FBQUMsYUFBS3FKLFVBQUwsQ0FBZ0JySixDQUFoQixFQUFrQixHQUFsQjtBQUF1QixPQUF2RCxNQUEyRDtBQUFDLGFBQUtxSixVQUFMLENBQWdCckosQ0FBaEIsRUFBa0JOLENBQWxCO0FBQXFCO0FBQUM7QUFBQztBQUFDLFVBQVM0SixHQUFULEdBQWM7QUFBQyxTQUFPLElBQUlILFVBQUosQ0FBZSxJQUFmLENBQVA7QUFBNEIsVUFBU0ksR0FBVCxDQUFhL0osQ0FBYixFQUFlZ0IsQ0FBZixFQUFpQlQsQ0FBakIsRUFBbUJDLENBQW5CLEVBQXFCVCxDQUFyQixFQUF1QkQsQ0FBdkIsRUFBeUI7QUFBQyxTQUFNLEVBQUVBLENBQUYsSUFBSyxDQUFYLEVBQWE7QUFBQyxRQUFJSSxJQUFFYyxJQUFFLEtBQUtoQixHQUFMLENBQUYsR0FBWU8sRUFBRUMsQ0FBRixDQUFaLEdBQWlCVCxDQUF2QixDQUF5QkEsSUFBRTBGLEtBQUtjLEtBQUwsQ0FBV3JHLElBQUUsUUFBYixDQUFGLENBQXlCSyxFQUFFQyxHQUFGLElBQU9OLElBQUUsUUFBVDtBQUFrQixVQUFPSCxDQUFQO0FBQVMsVUFBU2lLLEdBQVQsQ0FBYWhLLENBQWIsRUFBZXNDLENBQWYsRUFBaUJHLENBQWpCLEVBQW1CakMsQ0FBbkIsRUFBcUJjLENBQXJCLEVBQXVCTixDQUF2QixFQUF5QjtBQUFDLE1BQUlELElBQUV1QixJQUFFLEtBQVI7QUFBQSxNQUFjakIsSUFBRWlCLEtBQUcsRUFBbkIsQ0FBc0IsT0FBTSxFQUFFdEIsQ0FBRixJQUFLLENBQVgsRUFBYTtBQUFDLFFBQUlkLElBQUUsS0FBS0YsQ0FBTCxJQUFRLEtBQWQsQ0FBb0IsSUFBSUYsSUFBRSxLQUFLRSxHQUFMLEtBQVcsRUFBakIsQ0FBb0IsSUFBSU8sSUFBRWMsSUFBRW5CLENBQUYsR0FBSUosSUFBRWlCLENBQVosQ0FBY2IsSUFBRWEsSUFBRWIsQ0FBRixJQUFLLENBQUNLLElBQUUsS0FBSCxLQUFXLEVBQWhCLElBQW9Ca0MsRUFBRWpDLENBQUYsQ0FBcEIsSUFBMEJjLElBQUUsVUFBNUIsQ0FBRixDQUEwQ0EsSUFBRSxDQUFDcEIsTUFBSSxFQUFMLEtBQVVLLE1BQUksRUFBZCxJQUFrQmMsSUFBRXZCLENBQXBCLElBQXVCd0IsTUFBSSxFQUEzQixDQUFGLENBQWlDbUIsRUFBRWpDLEdBQUYsSUFBT04sSUFBRSxVQUFUO0FBQW9CLFVBQU9vQixDQUFQO0FBQVMsVUFBUzJJLEdBQVQsQ0FBYWpLLENBQWIsRUFBZXNDLENBQWYsRUFBaUJHLENBQWpCLEVBQW1CakMsQ0FBbkIsRUFBcUJjLENBQXJCLEVBQXVCTixDQUF2QixFQUF5QjtBQUFDLE1BQUlELElBQUV1QixJQUFFLEtBQVI7QUFBQSxNQUFjakIsSUFBRWlCLEtBQUcsRUFBbkIsQ0FBc0IsT0FBTSxFQUFFdEIsQ0FBRixJQUFLLENBQVgsRUFBYTtBQUFDLFFBQUlkLElBQUUsS0FBS0YsQ0FBTCxJQUFRLEtBQWQsQ0FBb0IsSUFBSUYsSUFBRSxLQUFLRSxHQUFMLEtBQVcsRUFBakIsQ0FBb0IsSUFBSU8sSUFBRWMsSUFBRW5CLENBQUYsR0FBSUosSUFBRWlCLENBQVosQ0FBY2IsSUFBRWEsSUFBRWIsQ0FBRixJQUFLLENBQUNLLElBQUUsS0FBSCxLQUFXLEVBQWhCLElBQW9Ca0MsRUFBRWpDLENBQUYsQ0FBcEIsR0FBeUJjLENBQTNCLENBQTZCQSxJQUFFLENBQUNwQixLQUFHLEVBQUosS0FBU0ssS0FBRyxFQUFaLElBQWdCYyxJQUFFdkIsQ0FBcEIsQ0FBc0IyQyxFQUFFakMsR0FBRixJQUFPTixJQUFFLFNBQVQ7QUFBbUIsVUFBT29CLENBQVA7QUFBUyxLQUFHb0ksUUFBT25LLFVBQVUySyxPQUFWLElBQW1CLDZCQUE3QixFQUE0RDtBQUFDUCxhQUFXeEosU0FBWCxDQUFxQmdLLEVBQXJCLEdBQXdCSCxHQUF4QixDQUE0QlIsUUFBTSxFQUFOO0FBQVMsQ0FBbEcsTUFBc0c7QUFBQyxNQUFHRSxRQUFPbkssVUFBVTJLLE9BQVYsSUFBbUIsVUFBN0IsRUFBeUM7QUFBQ1AsZUFBV3hKLFNBQVgsQ0FBcUJnSyxFQUFyQixHQUF3QkosR0FBeEIsQ0FBNEJQLFFBQU0sRUFBTjtBQUFTLEdBQS9FLE1BQW1GO0FBQUNHLGVBQVd4SixTQUFYLENBQXFCZ0ssRUFBckIsR0FBd0JGLEdBQXhCLENBQTRCVCxRQUFNLEVBQU47QUFBUztBQUFDLFlBQVdySixTQUFYLENBQXFCaUssRUFBckIsR0FBd0JaLEtBQXhCLENBQThCRyxXQUFXeEosU0FBWCxDQUFxQmtLLEVBQXJCLEdBQXlCLENBQUMsS0FBR2IsS0FBSixJQUFXLENBQXBDLENBQXVDRyxXQUFXeEosU0FBWCxDQUFxQm1LLEVBQXJCLEdBQXlCLEtBQUdkLEtBQTVCLENBQW1DLElBQUllLFFBQU0sRUFBVixDQUFhWixXQUFXeEosU0FBWCxDQUFxQnFLLEVBQXJCLEdBQXdCL0UsS0FBS1csR0FBTCxDQUFTLENBQVQsRUFBV21FLEtBQVgsQ0FBeEIsQ0FBMENaLFdBQVd4SixTQUFYLENBQXFCc0ssRUFBckIsR0FBd0JGLFFBQU1mLEtBQTlCLENBQW9DRyxXQUFXeEosU0FBWCxDQUFxQnVLLEVBQXJCLEdBQXdCLElBQUVsQixLQUFGLEdBQVFlLEtBQWhDLENBQXNDLElBQUlJLFFBQU0sc0NBQVYsQ0FBaUQsSUFBSUMsUUFBTSxJQUFJckIsS0FBSixFQUFWLENBQXNCLElBQUlzQixFQUFKLEVBQU9DLEVBQVAsQ0FBVUQsS0FBRyxJQUFJcEgsVUFBSixDQUFlLENBQWYsQ0FBSCxDQUFxQixLQUFJcUgsS0FBRyxDQUFQLEVBQVNBLE1BQUksQ0FBYixFQUFlLEVBQUVBLEVBQWpCLEVBQW9CO0FBQUNGLFFBQU1DLElBQU4sSUFBWUMsRUFBWjtBQUFlLE1BQUcsSUFBSXJILFVBQUosQ0FBZSxDQUFmLENBQUgsQ0FBcUIsS0FBSXFILEtBQUcsRUFBUCxFQUFVQSxLQUFHLEVBQWIsRUFBZ0IsRUFBRUEsRUFBbEIsRUFBcUI7QUFBQ0YsUUFBTUMsSUFBTixJQUFZQyxFQUFaO0FBQWUsTUFBRyxJQUFJckgsVUFBSixDQUFlLENBQWYsQ0FBSCxDQUFxQixLQUFJcUgsS0FBRyxFQUFQLEVBQVVBLEtBQUcsRUFBYixFQUFnQixFQUFFQSxFQUFsQixFQUFxQjtBQUFDRixRQUFNQyxJQUFOLElBQVlDLEVBQVo7QUFBZSxVQUFTekIsUUFBVCxDQUFrQnJJLENBQWxCLEVBQW9CO0FBQUMsU0FBTzJKLE1BQU0xRSxNQUFOLENBQWFqRixDQUFiLENBQVA7QUFBdUIsVUFBUytKLEtBQVQsQ0FBZXhLLENBQWYsRUFBaUJTLENBQWpCLEVBQW1CO0FBQUMsTUFBSWQsSUFBRTBLLE1BQU1ySyxFQUFFa0QsVUFBRixDQUFhekMsQ0FBYixDQUFOLENBQU4sQ0FBNkIsT0FBT2QsS0FBRyxJQUFKLEdBQVUsQ0FBQyxDQUFYLEdBQWFBLENBQW5CO0FBQXFCLFVBQVM4SyxTQUFULENBQW1CekssQ0FBbkIsRUFBcUI7QUFBQyxPQUFJLElBQUlTLElBQUUsS0FBS3FCLENBQUwsR0FBTyxDQUFqQixFQUFtQnJCLEtBQUcsQ0FBdEIsRUFBd0IsRUFBRUEsQ0FBMUIsRUFBNEI7QUFBQ1QsTUFBRVMsQ0FBRixJQUFLLEtBQUtBLENBQUwsQ0FBTDtBQUFhLEtBQUVxQixDQUFGLEdBQUksS0FBS0EsQ0FBVCxDQUFXOUIsRUFBRWdDLENBQUYsR0FBSSxLQUFLQSxDQUFUO0FBQVcsVUFBUzBJLFVBQVQsQ0FBb0JqSyxDQUFwQixFQUFzQjtBQUFDLE9BQUtxQixDQUFMLEdBQU8sQ0FBUCxDQUFTLEtBQUtFLENBQUwsR0FBUXZCLElBQUUsQ0FBSCxHQUFNLENBQUMsQ0FBUCxHQUFTLENBQWhCLENBQWtCLElBQUdBLElBQUUsQ0FBTCxFQUFPO0FBQUMsU0FBSyxDQUFMLElBQVFBLENBQVI7QUFBVSxHQUFsQixNQUFzQjtBQUFDLFFBQUdBLElBQUUsQ0FBQyxDQUFOLEVBQVE7QUFBQyxXQUFLLENBQUwsSUFBUUEsSUFBRSxLQUFLc0osRUFBZjtBQUFrQixLQUEzQixNQUErQjtBQUFDLFdBQUtqSSxDQUFMLEdBQU8sQ0FBUDtBQUFTO0FBQUM7QUFBQyxVQUFTNkksR0FBVCxDQUFhbEssQ0FBYixFQUFlO0FBQUMsTUFBSVQsSUFBRXVKLEtBQU4sQ0FBWXZKLEVBQUU0SyxPQUFGLENBQVVuSyxDQUFWLEVBQWEsT0FBT1QsQ0FBUDtBQUFTLFVBQVM2SyxhQUFULENBQXVCckwsQ0FBdkIsRUFBeUJVLENBQXpCLEVBQTJCO0FBQUMsTUFBSUQsQ0FBSixDQUFNLElBQUdDLEtBQUcsRUFBTixFQUFTO0FBQUNELFFBQUUsQ0FBRjtBQUFJLEdBQWQsTUFBa0I7QUFBQyxRQUFHQyxLQUFHLENBQU4sRUFBUTtBQUFDRCxVQUFFLENBQUY7QUFBSSxLQUFiLE1BQWlCO0FBQUMsVUFBR0MsS0FBRyxHQUFOLEVBQVU7QUFBQ0QsWUFBRSxDQUFGO0FBQUksT0FBZixNQUFtQjtBQUFDLFlBQUdDLEtBQUcsQ0FBTixFQUFRO0FBQUNELGNBQUUsQ0FBRjtBQUFJLFNBQWIsTUFBaUI7QUFBQyxjQUFHQyxLQUFHLEVBQU4sRUFBUztBQUFDRCxnQkFBRSxDQUFGO0FBQUksV0FBZCxNQUFrQjtBQUFDLGdCQUFHQyxLQUFHLENBQU4sRUFBUTtBQUFDRCxrQkFBRSxDQUFGO0FBQUksYUFBYixNQUFpQjtBQUFDLG1CQUFLNkssU0FBTCxDQUFldEwsQ0FBZixFQUFpQlUsQ0FBakIsRUFBb0I7QUFBTztBQUFDO0FBQUM7QUFBQztBQUFDO0FBQUMsUUFBSzRCLENBQUwsR0FBTyxDQUFQLENBQVMsS0FBS0UsQ0FBTCxHQUFPLENBQVAsQ0FBUyxJQUFJekMsSUFBRUMsRUFBRWMsTUFBUjtBQUFBLE1BQWVYLElBQUUsS0FBakI7QUFBQSxNQUF1QkYsSUFBRSxDQUF6QixDQUEyQixPQUFNLEVBQUVGLENBQUYsSUFBSyxDQUFYLEVBQWE7QUFBQyxRQUFJa0IsSUFBR1IsS0FBRyxDQUFKLEdBQU9ULEVBQUVELENBQUYsSUFBSyxHQUFaLEdBQWdCaUwsTUFBTWhMLENBQU4sRUFBUUQsQ0FBUixDQUF0QixDQUFpQyxJQUFHa0IsSUFBRSxDQUFMLEVBQU87QUFBQyxVQUFHakIsRUFBRWtHLE1BQUYsQ0FBU25HLENBQVQsS0FBYSxHQUFoQixFQUFvQjtBQUFDSSxZQUFFLElBQUY7QUFBTztBQUFTLFNBQUUsS0FBRixDQUFRLElBQUdGLEtBQUcsQ0FBTixFQUFRO0FBQUMsV0FBSyxLQUFLcUMsQ0FBTCxFQUFMLElBQWVyQixDQUFmO0FBQWlCLEtBQTFCLE1BQThCO0FBQUMsVUFBR2hCLElBQUVRLENBQUYsR0FBSSxLQUFLNEosRUFBWixFQUFlO0FBQUMsYUFBSyxLQUFLL0gsQ0FBTCxHQUFPLENBQVosS0FBZ0IsQ0FBQ3JCLElBQUcsQ0FBQyxLQUFJLEtBQUtvSixFQUFMLEdBQVFwSyxDQUFiLElBQWlCLENBQXJCLEtBQTBCQSxDQUExQyxDQUE0QyxLQUFLLEtBQUtxQyxDQUFMLEVBQUwsSUFBZ0JyQixLQUFJLEtBQUtvSixFQUFMLEdBQVFwSyxDQUE1QjtBQUFnQyxPQUE1RixNQUFnRztBQUFDLGFBQUssS0FBS3FDLENBQUwsR0FBTyxDQUFaLEtBQWdCckIsS0FBR2hCLENBQW5CO0FBQXFCO0FBQUMsVUFBR1EsQ0FBSCxDQUFLLElBQUdSLEtBQUcsS0FBS29LLEVBQVgsRUFBYztBQUFDcEssV0FBRyxLQUFLb0ssRUFBUjtBQUFXO0FBQUMsT0FBRzVKLEtBQUcsQ0FBSCxJQUFNLENBQUNULEVBQUUsQ0FBRixJQUFLLEdBQU4sS0FBWSxDQUFyQixFQUF1QjtBQUFDLFNBQUt3QyxDQUFMLEdBQU8sQ0FBQyxDQUFSLENBQVUsSUFBR3ZDLElBQUUsQ0FBTCxFQUFPO0FBQUMsV0FBSyxLQUFLcUMsQ0FBTCxHQUFPLENBQVosS0FBaUIsQ0FBQyxLQUFJLEtBQUsrSCxFQUFMLEdBQVFwSyxDQUFiLElBQWlCLENBQWxCLElBQXNCQSxDQUF0QztBQUF3QztBQUFDLFFBQUt3QyxLQUFMLEdBQWEsSUFBR3RDLENBQUgsRUFBSztBQUFDeUosZUFBVzJCLElBQVgsQ0FBZ0JDLEtBQWhCLENBQXNCLElBQXRCLEVBQTJCLElBQTNCO0FBQWlDO0FBQUMsVUFBU0MsUUFBVCxHQUFtQjtBQUFDLE1BQUl4SyxJQUFFLEtBQUt1QixDQUFMLEdBQU8sS0FBSzhILEVBQWxCLENBQXFCLE9BQU0sS0FBS2hJLENBQUwsR0FBTyxDQUFQLElBQVUsS0FBSyxLQUFLQSxDQUFMLEdBQU8sQ0FBWixLQUFnQnJCLENBQWhDLEVBQWtDO0FBQUMsTUFBRSxLQUFLcUIsQ0FBUDtBQUFTO0FBQUMsVUFBU29KLFVBQVQsQ0FBb0JoTCxDQUFwQixFQUFzQjtBQUFDLE1BQUcsS0FBSzhCLENBQUwsR0FBTyxDQUFWLEVBQVk7QUFBQyxXQUFNLE1BQUksS0FBS21KLE1BQUwsR0FBYzVKLFFBQWQsQ0FBdUJyQixDQUF2QixDQUFWO0FBQW9DLE9BQUlELENBQUosQ0FBTSxJQUFHQyxLQUFHLEVBQU4sRUFBUztBQUFDRCxRQUFFLENBQUY7QUFBSSxHQUFkLE1BQWtCO0FBQUMsUUFBR0MsS0FBRyxDQUFOLEVBQVE7QUFBQ0QsVUFBRSxDQUFGO0FBQUksS0FBYixNQUFpQjtBQUFDLFVBQUdDLEtBQUcsQ0FBTixFQUFRO0FBQUNELFlBQUUsQ0FBRjtBQUFJLE9BQWIsTUFBaUI7QUFBQyxZQUFHQyxLQUFHLEVBQU4sRUFBUztBQUFDRCxjQUFFLENBQUY7QUFBSSxTQUFkLE1BQWtCO0FBQUMsY0FBR0MsS0FBRyxDQUFOLEVBQVE7QUFBQ0QsZ0JBQUUsQ0FBRjtBQUFJLFdBQWIsTUFBaUI7QUFBQyxtQkFBTyxLQUFLbUwsT0FBTCxDQUFhbEwsQ0FBYixDQUFQO0FBQXVCO0FBQUM7QUFBQztBQUFDO0FBQUMsT0FBSVgsSUFBRSxDQUFDLEtBQUdVLENBQUosSUFBTyxDQUFiO0FBQUEsTUFBZU0sQ0FBZjtBQUFBLE1BQWlCRSxJQUFFLEtBQW5CO0FBQUEsTUFBeUJqQixJQUFFLEVBQTNCO0FBQUEsTUFBOEJDLElBQUUsS0FBS3FDLENBQXJDLENBQXVDLElBQUkxQixJQUFFLEtBQUt5SixFQUFMLEdBQVNwSyxJQUFFLEtBQUtvSyxFQUFSLEdBQVk1SixDQUExQixDQUE0QixJQUFHUixNQUFJLENBQVAsRUFBUztBQUFDLFFBQUdXLElBQUUsS0FBS3lKLEVBQVAsSUFBVyxDQUFDdEosSUFBRSxLQUFLZCxDQUFMLEtBQVNXLENBQVosSUFBZSxDQUE3QixFQUErQjtBQUFDSyxVQUFFLElBQUYsQ0FBT2pCLElBQUVzSixTQUFTdkksQ0FBVCxDQUFGO0FBQWMsWUFBTWQsS0FBRyxDQUFULEVBQVc7QUFBQyxVQUFHVyxJQUFFSCxDQUFMLEVBQU87QUFBQ00sWUFBRSxDQUFDLEtBQUtkLENBQUwsSUFBUyxDQUFDLEtBQUdXLENBQUosSUFBTyxDQUFqQixLQUF1QkgsSUFBRUcsQ0FBM0IsQ0FBOEJHLEtBQUcsS0FBSyxFQUFFZCxDQUFQLE1BQVlXLEtBQUcsS0FBS3lKLEVBQUwsR0FBUTVKLENBQXZCLENBQUg7QUFBNkIsT0FBbkUsTUFBdUU7QUFBQ00sWUFBRyxLQUFLZCxDQUFMLE1BQVVXLEtBQUdILENBQWIsQ0FBRCxHQUFrQlYsQ0FBcEIsQ0FBc0IsSUFBR2EsS0FBRyxDQUFOLEVBQVE7QUFBQ0EsZUFBRyxLQUFLeUosRUFBUixDQUFXLEVBQUVwSyxDQUFGO0FBQUk7QUFBQyxXQUFHYyxJQUFFLENBQUwsRUFBTztBQUFDRSxZQUFFLElBQUY7QUFBTyxXQUFHQSxDQUFILEVBQUs7QUFBQ2pCLGFBQUdzSixTQUFTdkksQ0FBVCxDQUFIO0FBQWU7QUFBQztBQUFDLFVBQU9FLElBQUVqQixDQUFGLEdBQUksR0FBWDtBQUFlLFVBQVM2TCxRQUFULEdBQW1CO0FBQUMsTUFBSTVLLElBQUU4SSxLQUFOLENBQVlILFdBQVcyQixJQUFYLENBQWdCQyxLQUFoQixDQUFzQixJQUF0QixFQUEyQnZLLENBQTNCLEVBQThCLE9BQU9BLENBQVA7QUFBUyxVQUFTNkssS0FBVCxHQUFnQjtBQUFDLFNBQU8sS0FBS3RKLENBQUwsR0FBTyxDQUFSLEdBQVcsS0FBS21KLE1BQUwsRUFBWCxHQUF5QixJQUEvQjtBQUFvQyxVQUFTSSxXQUFULENBQXFCdkwsQ0FBckIsRUFBdUI7QUFBQyxNQUFJTCxJQUFFLEtBQUtxQyxDQUFMLEdBQU9oQyxFQUFFZ0MsQ0FBZixDQUFpQixJQUFHckMsS0FBRyxDQUFOLEVBQVE7QUFBQyxXQUFPQSxDQUFQO0FBQVMsT0FBSU8sSUFBRSxLQUFLNEIsQ0FBWCxDQUFhbkMsSUFBRU8sSUFBRUYsRUFBRThCLENBQU4sQ0FBUSxJQUFHbkMsS0FBRyxDQUFOLEVBQVE7QUFBQyxXQUFPLEtBQUtxQyxDQUFMLEdBQU8sQ0FBUixHQUFXLENBQUNyQyxDQUFaLEdBQWNBLENBQXBCO0FBQXNCLFVBQU0sRUFBRU8sQ0FBRixJQUFLLENBQVgsRUFBYTtBQUFDLFFBQUcsQ0FBQ1AsSUFBRSxLQUFLTyxDQUFMLElBQVFGLEVBQUVFLENBQUYsQ0FBWCxLQUFrQixDQUFyQixFQUF1QjtBQUFDLGFBQU9QLENBQVA7QUFBUztBQUFDLFVBQU8sQ0FBUDtBQUFTLFVBQVM2TCxLQUFULENBQWUvSyxDQUFmLEVBQWlCO0FBQUMsTUFBSVAsSUFBRSxDQUFOO0FBQUEsTUFBUUYsQ0FBUixDQUFVLElBQUcsQ0FBQ0EsSUFBRVMsTUFBSSxFQUFQLEtBQVksQ0FBZixFQUFpQjtBQUFDQSxRQUFFVCxDQUFGLENBQUlFLEtBQUcsRUFBSDtBQUFNLE9BQUcsQ0FBQ0YsSUFBRVMsS0FBRyxDQUFOLEtBQVUsQ0FBYixFQUFlO0FBQUNBLFFBQUVULENBQUYsQ0FBSUUsS0FBRyxDQUFIO0FBQUssT0FBRyxDQUFDRixJQUFFUyxLQUFHLENBQU4sS0FBVSxDQUFiLEVBQWU7QUFBQ0EsUUFBRVQsQ0FBRixDQUFJRSxLQUFHLENBQUg7QUFBSyxPQUFHLENBQUNGLElBQUVTLEtBQUcsQ0FBTixLQUFVLENBQWIsRUFBZTtBQUFDQSxRQUFFVCxDQUFGLENBQUlFLEtBQUcsQ0FBSDtBQUFLLE9BQUcsQ0FBQ0YsSUFBRVMsS0FBRyxDQUFOLEtBQVUsQ0FBYixFQUFlO0FBQUNBLFFBQUVULENBQUYsQ0FBSUUsS0FBRyxDQUFIO0FBQUssVUFBT0EsQ0FBUDtBQUFTLFVBQVN1TCxXQUFULEdBQXNCO0FBQUMsTUFBRyxLQUFLM0osQ0FBTCxJQUFRLENBQVgsRUFBYTtBQUFDLFdBQU8sQ0FBUDtBQUFTLFVBQU8sS0FBSytILEVBQUwsSUFBUyxLQUFLL0gsQ0FBTCxHQUFPLENBQWhCLElBQW1CMEosTUFBTSxLQUFLLEtBQUsxSixDQUFMLEdBQU8sQ0FBWixJQUFnQixLQUFLRSxDQUFMLEdBQU8sS0FBSzhILEVBQWxDLENBQTFCO0FBQWlFLFVBQVM0QixZQUFULENBQXNCeEwsQ0FBdEIsRUFBd0JGLENBQXhCLEVBQTBCO0FBQUMsTUFBSVMsQ0FBSixDQUFNLEtBQUlBLElBQUUsS0FBS3FCLENBQUwsR0FBTyxDQUFiLEVBQWVyQixLQUFHLENBQWxCLEVBQW9CLEVBQUVBLENBQXRCLEVBQXdCO0FBQUNULE1BQUVTLElBQUVQLENBQUosSUFBTyxLQUFLTyxDQUFMLENBQVA7QUFBZSxRQUFJQSxJQUFFUCxJQUFFLENBQVIsRUFBVU8sS0FBRyxDQUFiLEVBQWUsRUFBRUEsQ0FBakIsRUFBbUI7QUFBQ1QsTUFBRVMsQ0FBRixJQUFLLENBQUw7QUFBTyxLQUFFcUIsQ0FBRixHQUFJLEtBQUtBLENBQUwsR0FBTzVCLENBQVgsQ0FBYUYsRUFBRWdDLENBQUYsR0FBSSxLQUFLQSxDQUFUO0FBQVcsVUFBUzJKLFlBQVQsQ0FBc0J6TCxDQUF0QixFQUF3QkYsQ0FBeEIsRUFBMEI7QUFBQyxPQUFJLElBQUlTLElBQUVQLENBQVYsRUFBWU8sSUFBRSxLQUFLcUIsQ0FBbkIsRUFBcUIsRUFBRXJCLENBQXZCLEVBQXlCO0FBQUNULE1BQUVTLElBQUVQLENBQUosSUFBTyxLQUFLTyxDQUFMLENBQVA7QUFBZSxLQUFFcUIsQ0FBRixHQUFJb0QsS0FBS2YsR0FBTCxDQUFTLEtBQUtyQyxDQUFMLEdBQU81QixDQUFoQixFQUFrQixDQUFsQixDQUFKLENBQXlCRixFQUFFZ0MsQ0FBRixHQUFJLEtBQUtBLENBQVQ7QUFBVyxVQUFTNEosV0FBVCxDQUFxQnhMLENBQXJCLEVBQXVCSCxDQUF2QixFQUF5QjtBQUFDLE1BQUlELElBQUVJLElBQUUsS0FBS3lKLEVBQWIsQ0FBZ0IsSUFBSXBKLElBQUUsS0FBS29KLEVBQUwsR0FBUTdKLENBQWQsQ0FBZ0IsSUFBSVQsSUFBRSxDQUFDLEtBQUdrQixDQUFKLElBQU8sQ0FBYixDQUFlLElBQUloQixJQUFFeUYsS0FBS2MsS0FBTCxDQUFXNUYsSUFBRSxLQUFLeUosRUFBbEIsQ0FBTjtBQUFBLE1BQTRCckssSUFBRyxLQUFLd0MsQ0FBTCxJQUFRaEMsQ0FBVCxHQUFZLEtBQUs4SixFQUEvQztBQUFBLE1BQWtEbkssQ0FBbEQsQ0FBb0QsS0FBSUEsSUFBRSxLQUFLbUMsQ0FBTCxHQUFPLENBQWIsRUFBZW5DLEtBQUcsQ0FBbEIsRUFBb0IsRUFBRUEsQ0FBdEIsRUFBd0I7QUFBQ00sTUFBRU4sSUFBRUYsQ0FBRixHQUFJLENBQU4sSUFBVSxLQUFLRSxDQUFMLEtBQVNjLENBQVYsR0FBYWpCLENBQXRCLENBQXdCQSxJQUFFLENBQUMsS0FBS0csQ0FBTCxJQUFRSixDQUFULEtBQWFTLENBQWY7QUFBaUIsUUFBSUwsSUFBRUYsSUFBRSxDQUFSLEVBQVVFLEtBQUcsQ0FBYixFQUFlLEVBQUVBLENBQWpCLEVBQW1CO0FBQUNNLE1BQUVOLENBQUYsSUFBSyxDQUFMO0FBQU8sS0FBRUYsQ0FBRixJQUFLRCxDQUFMLENBQU9TLEVBQUU2QixDQUFGLEdBQUksS0FBS0EsQ0FBTCxHQUFPckMsQ0FBUCxHQUFTLENBQWIsQ0FBZVEsRUFBRStCLENBQUYsR0FBSSxLQUFLQSxDQUFULENBQVcvQixFQUFFZ0MsS0FBRjtBQUFVLFVBQVM0SixXQUFULENBQXFCdE0sQ0FBckIsRUFBdUJJLENBQXZCLEVBQXlCO0FBQUNBLElBQUVxQyxDQUFGLEdBQUksS0FBS0EsQ0FBVCxDQUFXLElBQUkvQixJQUFFaUYsS0FBS2MsS0FBTCxDQUFXekcsSUFBRSxLQUFLc0ssRUFBbEIsQ0FBTixDQUE0QixJQUFHNUosS0FBRyxLQUFLNkIsQ0FBWCxFQUFhO0FBQUNuQyxNQUFFbUMsQ0FBRixHQUFJLENBQUosQ0FBTTtBQUFPLE9BQUk5QixJQUFFVCxJQUFFLEtBQUtzSyxFQUFiLENBQWdCLElBQUlwSixJQUFFLEtBQUtvSixFQUFMLEdBQVE3SixDQUFkLENBQWdCLElBQUlQLElBQUUsQ0FBQyxLQUFHTyxDQUFKLElBQU8sQ0FBYixDQUFlTCxFQUFFLENBQUYsSUFBSyxLQUFLTSxDQUFMLEtBQVNELENBQWQsQ0FBZ0IsS0FBSSxJQUFJRSxJQUFFRCxJQUFFLENBQVosRUFBY0MsSUFBRSxLQUFLNEIsQ0FBckIsRUFBdUIsRUFBRTVCLENBQXpCLEVBQTJCO0FBQUNQLE1BQUVPLElBQUVELENBQUYsR0FBSSxDQUFOLEtBQVUsQ0FBQyxLQUFLQyxDQUFMLElBQVFULENBQVQsS0FBYWdCLENBQXZCLENBQXlCZCxFQUFFTyxJQUFFRCxDQUFKLElBQU8sS0FBS0MsQ0FBTCxLQUFTRixDQUFoQjtBQUFrQixPQUFHQSxJQUFFLENBQUwsRUFBTztBQUFDTCxNQUFFLEtBQUttQyxDQUFMLEdBQU83QixDQUFQLEdBQVMsQ0FBWCxLQUFlLENBQUMsS0FBSytCLENBQUwsR0FBT3ZDLENBQVIsS0FBWWdCLENBQTNCO0FBQTZCLEtBQUVxQixDQUFGLEdBQUksS0FBS0EsQ0FBTCxHQUFPN0IsQ0FBWCxDQUFhTixFQUFFc0MsS0FBRjtBQUFVLFVBQVM2SixRQUFULENBQWtCbk0sQ0FBbEIsRUFBb0JGLENBQXBCLEVBQXNCO0FBQUMsTUFBSVEsSUFBRSxDQUFOO0FBQUEsTUFBUVYsSUFBRSxDQUFWO0FBQUEsTUFBWVMsSUFBRWtGLEtBQUtiLEdBQUwsQ0FBUzFFLEVBQUVtQyxDQUFYLEVBQWEsS0FBS0EsQ0FBbEIsQ0FBZCxDQUFtQyxPQUFNN0IsSUFBRUQsQ0FBUixFQUFVO0FBQUNULFNBQUcsS0FBS1UsQ0FBTCxJQUFRTixFQUFFTSxDQUFGLENBQVgsQ0FBZ0JSLEVBQUVRLEdBQUYsSUFBT1YsSUFBRSxLQUFLdUssRUFBZCxDQUFpQnZLLE1BQUksS0FBS3NLLEVBQVQ7QUFBWSxPQUFHbEssRUFBRW1DLENBQUYsR0FBSSxLQUFLQSxDQUFaLEVBQWM7QUFBQ3ZDLFNBQUdJLEVBQUVxQyxDQUFMLENBQU8sT0FBTS9CLElBQUUsS0FBSzZCLENBQWIsRUFBZTtBQUFDdkMsV0FBRyxLQUFLVSxDQUFMLENBQUgsQ0FBV1IsRUFBRVEsR0FBRixJQUFPVixJQUFFLEtBQUt1SyxFQUFkLENBQWlCdkssTUFBSSxLQUFLc0ssRUFBVDtBQUFZLFVBQUcsS0FBSzdILENBQVI7QUFBVSxHQUF4RixNQUE0RjtBQUFDekMsU0FBRyxLQUFLeUMsQ0FBUixDQUFVLE9BQU0vQixJQUFFTixFQUFFbUMsQ0FBVixFQUFZO0FBQUN2QyxXQUFHSSxFQUFFTSxDQUFGLENBQUgsQ0FBUVIsRUFBRVEsR0FBRixJQUFPVixJQUFFLEtBQUt1SyxFQUFkLENBQWlCdkssTUFBSSxLQUFLc0ssRUFBVDtBQUFZLFVBQUdsSyxFQUFFcUMsQ0FBTDtBQUFPLEtBQUVBLENBQUYsR0FBS3pDLElBQUUsQ0FBSCxHQUFNLENBQUMsQ0FBUCxHQUFTLENBQWIsQ0FBZSxJQUFHQSxJQUFFLENBQUMsQ0FBTixFQUFRO0FBQUNFLE1BQUVRLEdBQUYsSUFBTyxLQUFLOEosRUFBTCxHQUFReEssQ0FBZjtBQUFpQixHQUExQixNQUE4QjtBQUFDLFFBQUdBLElBQUUsQ0FBTCxFQUFPO0FBQUNFLFFBQUVRLEdBQUYsSUFBT1YsQ0FBUDtBQUFTO0FBQUMsS0FBRXVDLENBQUYsR0FBSTdCLENBQUosQ0FBTVIsRUFBRXdDLEtBQUY7QUFBVSxVQUFTOEosYUFBVCxDQUF1QjdMLENBQXZCLEVBQXlCRCxDQUF6QixFQUEyQjtBQUFDLE1BQUlELElBQUUsS0FBS2dNLEdBQUwsRUFBTjtBQUFBLE1BQWlCdk0sSUFBRVMsRUFBRThMLEdBQUYsRUFBbkIsQ0FBMkIsSUFBSXJNLElBQUVLLEVBQUU4QixDQUFSLENBQVU3QixFQUFFNkIsQ0FBRixHQUFJbkMsSUFBRUYsRUFBRXFDLENBQVIsQ0FBVSxPQUFNLEVBQUVuQyxDQUFGLElBQUssQ0FBWCxFQUFhO0FBQUNNLE1BQUVOLENBQUYsSUFBSyxDQUFMO0FBQU8sUUFBSUEsSUFBRSxDQUFOLEVBQVFBLElBQUVGLEVBQUVxQyxDQUFaLEVBQWMsRUFBRW5DLENBQWhCLEVBQWtCO0FBQUNNLE1BQUVOLElBQUVLLEVBQUU4QixDQUFOLElBQVM5QixFQUFFNEosRUFBRixDQUFLLENBQUwsRUFBT25LLEVBQUVFLENBQUYsQ0FBUCxFQUFZTSxDQUFaLEVBQWNOLENBQWQsRUFBZ0IsQ0FBaEIsRUFBa0JLLEVBQUU4QixDQUFwQixDQUFUO0FBQWdDLEtBQUVFLENBQUYsR0FBSSxDQUFKLENBQU0vQixFQUFFZ0MsS0FBRixHQUFVLElBQUcsS0FBS0QsQ0FBTCxJQUFROUIsRUFBRThCLENBQWIsRUFBZTtBQUFDb0gsZUFBVzJCLElBQVgsQ0FBZ0JDLEtBQWhCLENBQXNCL0ssQ0FBdEIsRUFBd0JBLENBQXhCO0FBQTJCO0FBQUMsVUFBU2dNLFdBQVQsQ0FBcUJ0TSxDQUFyQixFQUF1QjtBQUFDLE1BQUljLElBQUUsS0FBS3VMLEdBQUwsRUFBTixDQUFpQixJQUFJaE0sSUFBRUwsRUFBRW1DLENBQUYsR0FBSSxJQUFFckIsRUFBRXFCLENBQWQsQ0FBZ0IsT0FBTSxFQUFFOUIsQ0FBRixJQUFLLENBQVgsRUFBYTtBQUFDTCxNQUFFSyxDQUFGLElBQUssQ0FBTDtBQUFPLFFBQUlBLElBQUUsQ0FBTixFQUFRQSxJQUFFUyxFQUFFcUIsQ0FBRixHQUFJLENBQWQsRUFBZ0IsRUFBRTlCLENBQWxCLEVBQW9CO0FBQUMsUUFBSUMsSUFBRVEsRUFBRW1KLEVBQUYsQ0FBSzVKLENBQUwsRUFBT1MsRUFBRVQsQ0FBRixDQUFQLEVBQVlMLENBQVosRUFBYyxJQUFFSyxDQUFoQixFQUFrQixDQUFsQixFQUFvQixDQUFwQixDQUFOLENBQTZCLElBQUcsQ0FBQ0wsRUFBRUssSUFBRVMsRUFBRXFCLENBQU4sS0FBVXJCLEVBQUVtSixFQUFGLENBQUs1SixJQUFFLENBQVAsRUFBUyxJQUFFUyxFQUFFVCxDQUFGLENBQVgsRUFBZ0JMLENBQWhCLEVBQWtCLElBQUVLLENBQUYsR0FBSSxDQUF0QixFQUF3QkMsQ0FBeEIsRUFBMEJRLEVBQUVxQixDQUFGLEdBQUk5QixDQUFKLEdBQU0sQ0FBaEMsQ0FBWCxLQUFnRFMsRUFBRXNKLEVBQXJELEVBQXdEO0FBQUNwSyxRQUFFSyxJQUFFUyxFQUFFcUIsQ0FBTixLQUFVckIsRUFBRXNKLEVBQVosQ0FBZXBLLEVBQUVLLElBQUVTLEVBQUVxQixDQUFKLEdBQU0sQ0FBUixJQUFXLENBQVg7QUFBYTtBQUFDLE9BQUduQyxFQUFFbUMsQ0FBRixHQUFJLENBQVAsRUFBUztBQUFDbkMsTUFBRUEsRUFBRW1DLENBQUYsR0FBSSxDQUFOLEtBQVVyQixFQUFFbUosRUFBRixDQUFLNUosQ0FBTCxFQUFPUyxFQUFFVCxDQUFGLENBQVAsRUFBWUwsQ0FBWixFQUFjLElBQUVLLENBQWhCLEVBQWtCLENBQWxCLEVBQW9CLENBQXBCLENBQVY7QUFBaUMsS0FBRWdDLENBQUYsR0FBSSxDQUFKLENBQU1yQyxFQUFFc0MsS0FBRjtBQUFVLFVBQVNpSyxXQUFULENBQXFCckwsQ0FBckIsRUFBdUJyQixDQUF2QixFQUF5QkQsQ0FBekIsRUFBMkI7QUFBQyxNQUFJdUUsSUFBRWpELEVBQUVtTCxHQUFGLEVBQU4sQ0FBYyxJQUFHbEksRUFBRWhDLENBQUYsSUFBSyxDQUFSLEVBQVU7QUFBQztBQUFPLE9BQUl0QixJQUFFLEtBQUt3TCxHQUFMLEVBQU4sQ0FBaUIsSUFBR3hMLEVBQUVzQixDQUFGLEdBQUlnQyxFQUFFaEMsQ0FBVCxFQUFXO0FBQUMsUUFBR3RDLEtBQUcsSUFBTixFQUFXO0FBQUNBLFFBQUVvTCxPQUFGLENBQVUsQ0FBVjtBQUFhLFNBQUdyTCxLQUFHLElBQU4sRUFBVztBQUFDLFdBQUs0TSxNQUFMLENBQVk1TSxDQUFaO0FBQWU7QUFBTyxPQUFHQSxLQUFHLElBQU4sRUFBVztBQUFDQSxRQUFFZ0ssS0FBRjtBQUFRLE9BQUk1SixJQUFFNEosS0FBTjtBQUFBLE1BQVk5SSxJQUFFLEtBQUt1QixDQUFuQjtBQUFBLE1BQXFCekIsSUFBRU0sRUFBRW1CLENBQXpCLENBQTJCLElBQUlpQyxJQUFFLEtBQUs0RixFQUFMLEdBQVEyQixNQUFNMUgsRUFBRUEsRUFBRWhDLENBQUYsR0FBSSxDQUFOLENBQU4sQ0FBZCxDQUE4QixJQUFHbUMsSUFBRSxDQUFMLEVBQU87QUFBQ0gsTUFBRXNJLFFBQUYsQ0FBV25JLENBQVgsRUFBYXRFLENBQWIsRUFBZ0JhLEVBQUU0TCxRQUFGLENBQVduSSxDQUFYLEVBQWExRSxDQUFiO0FBQWdCLEdBQXhDLE1BQTRDO0FBQUN1RSxNQUFFcUksTUFBRixDQUFTeE0sQ0FBVCxFQUFZYSxFQUFFMkwsTUFBRixDQUFTNU0sQ0FBVDtBQUFZLE9BQUl1QixJQUFFbkIsRUFBRW1DLENBQVIsQ0FBVSxJQUFJOUIsSUFBRUwsRUFBRW1CLElBQUUsQ0FBSixDQUFOLENBQWEsSUFBR2QsS0FBRyxDQUFOLEVBQVE7QUFBQztBQUFPLE9BQUllLElBQUVmLEtBQUcsS0FBRyxLQUFLa0ssRUFBWCxLQUFpQnBKLElBQUUsQ0FBSCxHQUFNbkIsRUFBRW1CLElBQUUsQ0FBSixLQUFRLEtBQUtxSixFQUFuQixHQUFzQixDQUF0QyxDQUFOLENBQStDLElBQUkxQyxJQUFFLEtBQUt3QyxFQUFMLEdBQVFsSixDQUFkO0FBQUEsTUFBZ0J5RyxJQUFFLENBQUMsS0FBRyxLQUFLMEMsRUFBVCxJQUFhbkosQ0FBL0I7QUFBQSxNQUFpQ2dELElBQUUsS0FBRyxLQUFLb0csRUFBM0MsQ0FBOEMsSUFBSWpHLElBQUUzRSxFQUFFdUMsQ0FBUjtBQUFBLE1BQVVFLElBQUVrQyxJQUFFcEQsQ0FBZDtBQUFBLE1BQWdCckIsSUFBR0QsS0FBRyxJQUFKLEdBQVUrSixLQUFWLEdBQWdCL0osQ0FBbEMsQ0FBb0NHLEVBQUUwTSxTQUFGLENBQVlySyxDQUFaLEVBQWN2QyxDQUFkLEVBQWlCLElBQUdGLEVBQUUrTSxTQUFGLENBQVk3TSxDQUFaLEtBQWdCLENBQW5CLEVBQXFCO0FBQUNGLE1BQUVBLEVBQUV1QyxDQUFGLEVBQUYsSUFBUyxDQUFULENBQVd2QyxFQUFFeUwsS0FBRixDQUFRdkwsQ0FBUixFQUFVRixDQUFWO0FBQWEsY0FBV2dOLEdBQVgsQ0FBZUYsU0FBZixDQUF5QnZMLENBQXpCLEVBQTJCckIsQ0FBM0IsRUFBOEJBLEVBQUV1TCxLQUFGLENBQVFyTCxDQUFSLEVBQVVBLENBQVYsRUFBYSxPQUFNQSxFQUFFbUMsQ0FBRixHQUFJaEIsQ0FBVixFQUFZO0FBQUNuQixNQUFFQSxFQUFFbUMsQ0FBRixFQUFGLElBQVMsQ0FBVDtBQUFXLFVBQU0sRUFBRUUsQ0FBRixJQUFLLENBQVgsRUFBYTtBQUFDLFFBQUk5QixJQUFHWCxFQUFFLEVBQUUyRSxDQUFKLEtBQVFsRSxDQUFULEdBQVksS0FBSzhKLEVBQWpCLEdBQW9CNUUsS0FBS2MsS0FBTCxDQUFXekcsRUFBRTJFLENBQUYsSUFBS3VELENBQUwsR0FBTyxDQUFDbEksRUFBRTJFLElBQUUsQ0FBSixJQUFPSCxDQUFSLElBQVd5RCxDQUE3QixDQUExQixDQUEwRCxJQUFHLENBQUNqSSxFQUFFMkUsQ0FBRixLQUFNdkUsRUFBRWlLLEVBQUYsQ0FBSyxDQUFMLEVBQU8xSixDQUFQLEVBQVNYLENBQVQsRUFBV3lDLENBQVgsRUFBYSxDQUFiLEVBQWVsQixDQUFmLENBQVAsSUFBMEJaLENBQTdCLEVBQStCO0FBQUNQLFFBQUUwTSxTQUFGLENBQVlySyxDQUFaLEVBQWN2QyxDQUFkLEVBQWlCRixFQUFFeUwsS0FBRixDQUFRdkwsQ0FBUixFQUFVRixDQUFWLEVBQWEsT0FBTUEsRUFBRTJFLENBQUYsSUFBSyxFQUFFaEUsQ0FBYixFQUFlO0FBQUNYLFVBQUV5TCxLQUFGLENBQVF2TCxDQUFSLEVBQVVGLENBQVY7QUFBYTtBQUFDO0FBQUMsT0FBR0MsS0FBRyxJQUFOLEVBQVc7QUFBQ0QsTUFBRWlOLFNBQUYsQ0FBWTFMLENBQVosRUFBY3RCLENBQWQsRUFBaUIsSUFBR2lCLEtBQUdGLENBQU4sRUFBUTtBQUFDNkksaUJBQVcyQixJQUFYLENBQWdCQyxLQUFoQixDQUFzQnhMLENBQXRCLEVBQXdCQSxDQUF4QjtBQUEyQjtBQUFDLEtBQUVzQyxDQUFGLEdBQUloQixDQUFKLENBQU12QixFQUFFMEMsS0FBRixHQUFVLElBQUdnQyxJQUFFLENBQUwsRUFBTztBQUFDMUUsTUFBRWtOLFFBQUYsQ0FBV3hJLENBQVgsRUFBYTFFLENBQWI7QUFBZ0IsT0FBR2tCLElBQUUsQ0FBTCxFQUFPO0FBQUMySSxlQUFXMkIsSUFBWCxDQUFnQkMsS0FBaEIsQ0FBc0J6TCxDQUF0QixFQUF3QkEsQ0FBeEI7QUFBMkI7QUFBQyxVQUFTbU4sS0FBVCxDQUFlMU0sQ0FBZixFQUFpQjtBQUFDLE1BQUlFLElBQUVxSixLQUFOLENBQVksS0FBS3lDLEdBQUwsR0FBV1csUUFBWCxDQUFvQjNNLENBQXBCLEVBQXNCLElBQXRCLEVBQTJCRSxDQUEzQixFQUE4QixJQUFHLEtBQUs4QixDQUFMLEdBQU8sQ0FBUCxJQUFVOUIsRUFBRW9NLFNBQUYsQ0FBWWxELFdBQVcyQixJQUF2QixJQUE2QixDQUExQyxFQUE0QztBQUFDL0ssTUFBRWdMLEtBQUYsQ0FBUTlLLENBQVIsRUFBVUEsQ0FBVjtBQUFhLFVBQU9BLENBQVA7QUFBUyxVQUFTME0sT0FBVCxDQUFpQm5NLENBQWpCLEVBQW1CO0FBQUMsT0FBSytCLENBQUwsR0FBTy9CLENBQVA7QUFBUyxVQUFTb00sUUFBVCxDQUFrQnBNLENBQWxCLEVBQW9CO0FBQUMsTUFBR0EsRUFBRXVCLENBQUYsR0FBSSxDQUFKLElBQU92QixFQUFFNkwsU0FBRixDQUFZLEtBQUs5SixDQUFqQixLQUFxQixDQUEvQixFQUFpQztBQUFDLFdBQU8vQixFQUFFcU0sR0FBRixDQUFNLEtBQUt0SyxDQUFYLENBQVA7QUFBcUIsR0FBdkQsTUFBMkQ7QUFBQyxXQUFPL0IsQ0FBUDtBQUFTO0FBQUMsVUFBU3NNLE9BQVQsQ0FBaUJ0TSxDQUFqQixFQUFtQjtBQUFDLFNBQU9BLENBQVA7QUFBUyxVQUFTdU0sT0FBVCxDQUFpQnZNLENBQWpCLEVBQW1CO0FBQUNBLElBQUVrTSxRQUFGLENBQVcsS0FBS25LLENBQWhCLEVBQWtCLElBQWxCLEVBQXVCL0IsQ0FBdkI7QUFBMEIsVUFBU3dNLE1BQVQsQ0FBZ0J4TSxDQUFoQixFQUFrQlAsQ0FBbEIsRUFBb0JGLENBQXBCLEVBQXNCO0FBQUNTLElBQUV5TSxVQUFGLENBQWFoTixDQUFiLEVBQWVGLENBQWYsRUFBa0IsS0FBS21OLE1BQUwsQ0FBWW5OLENBQVo7QUFBZSxVQUFTb04sTUFBVCxDQUFnQjNNLENBQWhCLEVBQWtCVCxDQUFsQixFQUFvQjtBQUFDUyxJQUFFNE0sUUFBRixDQUFXck4sQ0FBWCxFQUFjLEtBQUttTixNQUFMLENBQVluTixDQUFaO0FBQWUsU0FBUUosU0FBUixDQUFrQjBOLE9BQWxCLEdBQTBCVCxRQUExQixDQUFtQ0QsUUFBUWhOLFNBQVIsQ0FBa0IyTixNQUFsQixHQUF5QlIsT0FBekIsQ0FBaUNILFFBQVFoTixTQUFSLENBQWtCdU4sTUFBbEIsR0FBeUJILE9BQXpCLENBQWlDSixRQUFRaE4sU0FBUixDQUFrQjROLEtBQWxCLEdBQXdCUCxNQUF4QixDQUErQkwsUUFBUWhOLFNBQVIsQ0FBa0I2TixLQUFsQixHQUF3QkwsTUFBeEIsQ0FBK0IsU0FBU00sV0FBVCxHQUFzQjtBQUFDLE1BQUcsS0FBSzVMLENBQUwsR0FBTyxDQUFWLEVBQVk7QUFBQyxXQUFPLENBQVA7QUFBUyxPQUFJckIsSUFBRSxLQUFLLENBQUwsQ0FBTixDQUFjLElBQUcsQ0FBQ0EsSUFBRSxDQUFILEtBQU8sQ0FBVixFQUFZO0FBQUMsV0FBTyxDQUFQO0FBQVMsT0FBSVQsSUFBRVMsSUFBRSxDQUFSLENBQVVULElBQUdBLEtBQUcsSUFBRSxDQUFDUyxJQUFFLEVBQUgsSUFBT1QsQ0FBWixDQUFELEdBQWlCLEVBQW5CLENBQXNCQSxJQUFHQSxLQUFHLElBQUUsQ0FBQ1MsSUFBRSxHQUFILElBQVFULENBQWIsQ0FBRCxHQUFrQixHQUFwQixDQUF3QkEsSUFBR0EsS0FBRyxLQUFJLENBQUNTLElBQUUsS0FBSCxJQUFVVCxDQUFYLEdBQWMsS0FBakIsQ0FBSCxDQUFELEdBQThCLEtBQWhDLENBQXNDQSxJQUFHQSxLQUFHLElBQUVTLElBQUVULENBQUYsR0FBSSxLQUFLK0osRUFBZCxDQUFELEdBQW9CLEtBQUtBLEVBQTNCLENBQThCLE9BQU8vSixJQUFFLENBQUgsR0FBTSxLQUFLK0osRUFBTCxHQUFRL0osQ0FBZCxHQUFnQixDQUFDQSxDQUF2QjtBQUF5QixVQUFTMk4sVUFBVCxDQUFvQmxOLENBQXBCLEVBQXNCO0FBQUMsT0FBSytCLENBQUwsR0FBTy9CLENBQVAsQ0FBUyxLQUFLbU4sRUFBTCxHQUFRbk4sRUFBRW9OLFFBQUYsRUFBUixDQUFxQixLQUFLQyxHQUFMLEdBQVMsS0FBS0YsRUFBTCxHQUFRLEtBQWpCLENBQXVCLEtBQUtHLEdBQUwsR0FBUyxLQUFLSCxFQUFMLElBQVMsRUFBbEIsQ0FBcUIsS0FBS0ksRUFBTCxHQUFRLENBQUMsS0FBSXZOLEVBQUVvSixFQUFGLEdBQUssRUFBVixJQUFlLENBQXZCLENBQXlCLEtBQUtvRSxHQUFMLEdBQVMsSUFBRXhOLEVBQUVxQixDQUFiO0FBQWUsVUFBU29NLFdBQVQsQ0FBcUJ6TixDQUFyQixFQUF1QjtBQUFDLE1BQUlULElBQUV1SixLQUFOLENBQVk5SSxFQUFFdUwsR0FBRixHQUFRSyxTQUFSLENBQWtCLEtBQUs3SixDQUFMLENBQU9WLENBQXpCLEVBQTJCOUIsQ0FBM0IsRUFBOEJBLEVBQUUyTSxRQUFGLENBQVcsS0FBS25LLENBQWhCLEVBQWtCLElBQWxCLEVBQXVCeEMsQ0FBdkIsRUFBMEIsSUFBR1MsRUFBRXVCLENBQUYsR0FBSSxDQUFKLElBQU9oQyxFQUFFc00sU0FBRixDQUFZbEQsV0FBVzJCLElBQXZCLElBQTZCLENBQXZDLEVBQXlDO0FBQUMsU0FBS3ZJLENBQUwsQ0FBT3dJLEtBQVAsQ0FBYWhMLENBQWIsRUFBZUEsQ0FBZjtBQUFrQixVQUFPQSxDQUFQO0FBQVMsVUFBU21PLFVBQVQsQ0FBb0IxTixDQUFwQixFQUFzQjtBQUFDLE1BQUlULElBQUV1SixLQUFOLENBQVk5SSxFQUFFMEwsTUFBRixDQUFTbk0sQ0FBVCxFQUFZLEtBQUttTixNQUFMLENBQVluTixDQUFaLEVBQWUsT0FBT0EsQ0FBUDtBQUFTLFVBQVNvTyxVQUFULENBQW9CM04sQ0FBcEIsRUFBc0I7QUFBQyxTQUFNQSxFQUFFcUIsQ0FBRixJQUFLLEtBQUttTSxHQUFoQixFQUFvQjtBQUFDeE4sTUFBRUEsRUFBRXFCLENBQUYsRUFBRixJQUFTLENBQVQ7QUFBVyxRQUFJLElBQUk1QixJQUFFLENBQVYsRUFBWUEsSUFBRSxLQUFLc0MsQ0FBTCxDQUFPVixDQUFyQixFQUF1QixFQUFFNUIsQ0FBekIsRUFBMkI7QUFBQyxRQUFJRixJQUFFUyxFQUFFUCxDQUFGLElBQUssS0FBWCxDQUFpQixJQUFJUCxJQUFHSyxJQUFFLEtBQUs4TixHQUFQLElBQVksQ0FBRTlOLElBQUUsS0FBSytOLEdBQVAsR0FBVyxDQUFDdE4sRUFBRVAsQ0FBRixLQUFNLEVBQVAsSUFBVyxLQUFLNE4sR0FBNUIsR0FBaUMsS0FBS0UsRUFBdkMsS0FBNEMsRUFBeEQsQ0FBRCxHQUE4RHZOLEVBQUVxSixFQUF0RSxDQUF5RTlKLElBQUVFLElBQUUsS0FBS3NDLENBQUwsQ0FBT1YsQ0FBWCxDQUFhckIsRUFBRVQsQ0FBRixLQUFNLEtBQUt3QyxDQUFMLENBQU9vSCxFQUFQLENBQVUsQ0FBVixFQUFZakssQ0FBWixFQUFjYyxDQUFkLEVBQWdCUCxDQUFoQixFQUFrQixDQUFsQixFQUFvQixLQUFLc0MsQ0FBTCxDQUFPVixDQUEzQixDQUFOLENBQW9DLE9BQU1yQixFQUFFVCxDQUFGLEtBQU1TLEVBQUVzSixFQUFkLEVBQWlCO0FBQUN0SixRQUFFVCxDQUFGLEtBQU1TLEVBQUVzSixFQUFSLENBQVd0SixFQUFFLEVBQUVULENBQUo7QUFBUztBQUFDLEtBQUVpQyxLQUFGLEdBQVV4QixFQUFFK0wsU0FBRixDQUFZLEtBQUtoSyxDQUFMLENBQU9WLENBQW5CLEVBQXFCckIsQ0FBckIsRUFBd0IsSUFBR0EsRUFBRTZMLFNBQUYsQ0FBWSxLQUFLOUosQ0FBakIsS0FBcUIsQ0FBeEIsRUFBMEI7QUFBQy9CLE1BQUV1SyxLQUFGLENBQVEsS0FBS3hJLENBQWIsRUFBZS9CLENBQWY7QUFBa0I7QUFBQyxVQUFTNE4sU0FBVCxDQUFtQjVOLENBQW5CLEVBQXFCVCxDQUFyQixFQUF1QjtBQUFDUyxJQUFFNE0sUUFBRixDQUFXck4sQ0FBWCxFQUFjLEtBQUttTixNQUFMLENBQVluTixDQUFaO0FBQWUsVUFBU3NPLFNBQVQsQ0FBbUI3TixDQUFuQixFQUFxQlAsQ0FBckIsRUFBdUJGLENBQXZCLEVBQXlCO0FBQUNTLElBQUV5TSxVQUFGLENBQWFoTixDQUFiLEVBQWVGLENBQWYsRUFBa0IsS0FBS21OLE1BQUwsQ0FBWW5OLENBQVo7QUFBZSxZQUFXSixTQUFYLENBQXFCME4sT0FBckIsR0FBNkJZLFdBQTdCLENBQXlDUCxXQUFXL04sU0FBWCxDQUFxQjJOLE1BQXJCLEdBQTRCWSxVQUE1QixDQUF1Q1IsV0FBVy9OLFNBQVgsQ0FBcUJ1TixNQUFyQixHQUE0QmlCLFVBQTVCLENBQXVDVCxXQUFXL04sU0FBWCxDQUFxQjROLEtBQXJCLEdBQTJCYyxTQUEzQixDQUFxQ1gsV0FBVy9OLFNBQVgsQ0FBcUI2TixLQUFyQixHQUEyQlksU0FBM0IsQ0FBcUMsU0FBU0UsU0FBVCxHQUFvQjtBQUFDLFNBQU0sQ0FBRSxLQUFLek0sQ0FBTCxHQUFPLENBQVIsR0FBWSxLQUFLLENBQUwsSUFBUSxDQUFwQixHQUF1QixLQUFLRSxDQUE3QixLQUFpQyxDQUF2QztBQUF5QyxVQUFTd00sTUFBVCxDQUFnQmhQLENBQWhCLEVBQWtCWSxDQUFsQixFQUFvQjtBQUFDLE1BQUdaLElBQUUsVUFBRixJQUFjQSxJQUFFLENBQW5CLEVBQXFCO0FBQUMsV0FBTzRKLFdBQVdtRCxHQUFsQjtBQUFzQixPQUFJOU0sSUFBRThKLEtBQU47QUFBQSxNQUFZOUksSUFBRThJLEtBQWQ7QUFBQSxNQUFvQjVKLElBQUVTLEVBQUVrTixPQUFGLENBQVUsSUFBVixDQUF0QjtBQUFBLE1BQXNDcE4sSUFBRXNMLE1BQU1oTSxDQUFOLElBQVMsQ0FBakQsQ0FBbURHLEVBQUV3TSxNQUFGLENBQVMxTSxDQUFULEVBQVksT0FBTSxFQUFFUyxDQUFGLElBQUssQ0FBWCxFQUFhO0FBQUNFLE1BQUVxTixLQUFGLENBQVFoTyxDQUFSLEVBQVVnQixDQUFWLEVBQWEsSUFBRyxDQUFDakIsSUFBRyxLQUFHVSxDQUFQLElBQVcsQ0FBZCxFQUFnQjtBQUFDRSxRQUFFb04sS0FBRixDQUFRL00sQ0FBUixFQUFVZCxDQUFWLEVBQVlGLENBQVo7QUFBZSxLQUFoQyxNQUFvQztBQUFDLFVBQUlPLElBQUVQLENBQU4sQ0FBUUEsSUFBRWdCLENBQUYsQ0FBSUEsSUFBRVQsQ0FBRjtBQUFJO0FBQUMsVUFBT0ksRUFBRW1OLE1BQUYsQ0FBUzlOLENBQVQsQ0FBUDtBQUFtQixVQUFTZ1AsV0FBVCxDQUFxQnpPLENBQXJCLEVBQXVCUyxDQUF2QixFQUF5QjtBQUFDLE1BQUlQLENBQUosQ0FBTSxJQUFHRixJQUFFLEdBQUYsSUFBT1MsRUFBRWlPLE1BQUYsRUFBVixFQUFxQjtBQUFDeE8sUUFBRSxJQUFJME0sT0FBSixDQUFZbk0sQ0FBWixDQUFGO0FBQWlCLEdBQXZDLE1BQTJDO0FBQUNQLFFBQUUsSUFBSXlOLFVBQUosQ0FBZWxOLENBQWYsQ0FBRjtBQUFvQixVQUFPLEtBQUtrTyxHQUFMLENBQVMzTyxDQUFULEVBQVdFLENBQVgsQ0FBUDtBQUFxQixZQUFXTixTQUFYLENBQXFCdU0sTUFBckIsR0FBNEIxQixTQUE1QixDQUFzQ3JCLFdBQVd4SixTQUFYLENBQXFCZ0wsT0FBckIsR0FBNkJGLFVBQTdCLENBQXdDdEIsV0FBV3hKLFNBQVgsQ0FBcUIwSixVQUFyQixHQUFnQ3VCLGFBQWhDLENBQThDekIsV0FBV3hKLFNBQVgsQ0FBcUJxQyxLQUFyQixHQUEyQmdKLFFBQTNCLENBQW9DN0IsV0FBV3hKLFNBQVgsQ0FBcUJ5TSxTQUFyQixHQUErQlgsWUFBL0IsQ0FBNEN0QyxXQUFXeEosU0FBWCxDQUFxQjRNLFNBQXJCLEdBQStCYixZQUEvQixDQUE0Q3ZDLFdBQVd4SixTQUFYLENBQXFCd00sUUFBckIsR0FBOEJSLFdBQTlCLENBQTBDeEMsV0FBV3hKLFNBQVgsQ0FBcUI2TSxRQUFyQixHQUE4QlosV0FBOUIsQ0FBMEN6QyxXQUFXeEosU0FBWCxDQUFxQm9MLEtBQXJCLEdBQTJCYyxRQUEzQixDQUFvQzFDLFdBQVd4SixTQUFYLENBQXFCc04sVUFBckIsR0FBZ0NuQixhQUFoQyxDQUE4QzNDLFdBQVd4SixTQUFYLENBQXFCeU4sUUFBckIsR0FBOEJwQixXQUE5QixDQUEwQzdDLFdBQVd4SixTQUFYLENBQXFCK00sUUFBckIsR0FBOEJULFdBQTlCLENBQTBDOUMsV0FBV3hKLFNBQVgsQ0FBcUJpTyxRQUFyQixHQUE4QkgsV0FBOUIsQ0FBMEN0RSxXQUFXeEosU0FBWCxDQUFxQjhPLE1BQXJCLEdBQTRCSCxTQUE1QixDQUFzQ25GLFdBQVd4SixTQUFYLENBQXFCK08sR0FBckIsR0FBeUJILE1BQXpCLENBQWdDcEYsV0FBV3hKLFNBQVgsQ0FBcUIyQixRQUFyQixHQUE4QjJKLFVBQTlCLENBQXlDOUIsV0FBV3hKLFNBQVgsQ0FBcUJ1TCxNQUFyQixHQUE0QkUsUUFBNUIsQ0FBcUNqQyxXQUFXeEosU0FBWCxDQUFxQm9NLEdBQXJCLEdBQXlCVixLQUF6QixDQUErQmxDLFdBQVd4SixTQUFYLENBQXFCME0sU0FBckIsR0FBK0JmLFdBQS9CLENBQTJDbkMsV0FBV3hKLFNBQVgsQ0FBcUJnUCxTQUFyQixHQUErQm5ELFdBQS9CLENBQTJDckMsV0FBV3hKLFNBQVgsQ0FBcUJrTixHQUFyQixHQUF5QkosS0FBekIsQ0FBK0J0RCxXQUFXeEosU0FBWCxDQUFxQmlQLFNBQXJCLEdBQStCSixXQUEvQixDQUEyQ3JGLFdBQVcyQixJQUFYLEdBQWdCSixJQUFJLENBQUosQ0FBaEIsQ0FBdUJ2QixXQUFXbUQsR0FBWCxHQUFlNUIsSUFBSSxDQUFKLENBQWY7QUFDbHBTOztBQUVBLFNBQVNtRSxPQUFULEdBQWtCO0FBQUMsTUFBSXJPLElBQUU4SSxLQUFOLENBQVksS0FBSzRDLE1BQUwsQ0FBWTFMLENBQVosRUFBZSxPQUFPQSxDQUFQO0FBQVMsVUFBU3NPLFVBQVQsR0FBcUI7QUFBQyxNQUFHLEtBQUsvTSxDQUFMLEdBQU8sQ0FBVixFQUFZO0FBQUMsUUFBRyxLQUFLRixDQUFMLElBQVEsQ0FBWCxFQUFhO0FBQUMsYUFBTyxLQUFLLENBQUwsSUFBUSxLQUFLaUksRUFBcEI7QUFBdUIsS0FBckMsTUFBeUM7QUFBQyxVQUFHLEtBQUtqSSxDQUFMLElBQVEsQ0FBWCxFQUFhO0FBQUMsZUFBTyxDQUFDLENBQVI7QUFBVTtBQUFDO0FBQUMsR0FBakYsTUFBcUY7QUFBQyxRQUFHLEtBQUtBLENBQUwsSUFBUSxDQUFYLEVBQWE7QUFBQyxhQUFPLEtBQUssQ0FBTCxDQUFQO0FBQWUsS0FBN0IsTUFBaUM7QUFBQyxVQUFHLEtBQUtBLENBQUwsSUFBUSxDQUFYLEVBQWE7QUFBQyxlQUFPLENBQVA7QUFBUztBQUFDO0FBQUMsVUFBTyxDQUFDLEtBQUssQ0FBTCxJQUFTLENBQUMsS0FBSSxLQUFHLEtBQUsrSCxFQUFiLElBQWtCLENBQTVCLEtBQWlDLEtBQUtBLEVBQXZDLEdBQTJDLEtBQUssQ0FBTCxDQUFqRDtBQUF5RCxVQUFTbUYsV0FBVCxHQUFzQjtBQUFDLFNBQU8sS0FBS2xOLENBQUwsSUFBUSxDQUFULEdBQVksS0FBS0UsQ0FBakIsR0FBb0IsS0FBSyxDQUFMLEtBQVMsRUFBVixJQUFlLEVBQXhDO0FBQTJDLFVBQVNpTixZQUFULEdBQXVCO0FBQUMsU0FBTyxLQUFLbk4sQ0FBTCxJQUFRLENBQVQsR0FBWSxLQUFLRSxDQUFqQixHQUFvQixLQUFLLENBQUwsS0FBUyxFQUFWLElBQWUsRUFBeEM7QUFBMkMsVUFBU2tOLFlBQVQsQ0FBc0J6TyxDQUF0QixFQUF3QjtBQUFDLFNBQU95RSxLQUFLYyxLQUFMLENBQVdkLEtBQUtpSyxHQUFMLEdBQVMsS0FBS3RGLEVBQWQsR0FBaUIzRSxLQUFLa0ssR0FBTCxDQUFTM08sQ0FBVCxDQUE1QixDQUFQO0FBQWdELFVBQVM0TyxRQUFULEdBQW1CO0FBQUMsTUFBRyxLQUFLck4sQ0FBTCxHQUFPLENBQVYsRUFBWTtBQUFDLFdBQU8sQ0FBQyxDQUFSO0FBQVUsR0FBdkIsTUFBMkI7QUFBQyxRQUFHLEtBQUtGLENBQUwsSUFBUSxDQUFSLElBQVksS0FBS0EsQ0FBTCxJQUFRLENBQVIsSUFBVyxLQUFLLENBQUwsS0FBUyxDQUFuQyxFQUFzQztBQUFDLGFBQU8sQ0FBUDtBQUFTLEtBQWhELE1BQW9EO0FBQUMsYUFBTyxDQUFQO0FBQVM7QUFBQztBQUFDLFVBQVN3TixVQUFULENBQW9CcFAsQ0FBcEIsRUFBc0I7QUFBQyxNQUFHQSxLQUFHLElBQU4sRUFBVztBQUFDQSxRQUFFLEVBQUY7QUFBSyxPQUFHLEtBQUtxUCxNQUFMLE1BQWUsQ0FBZixJQUFrQnJQLElBQUUsQ0FBcEIsSUFBdUJBLElBQUUsRUFBNUIsRUFBK0I7QUFBQyxXQUFNLEdBQU47QUFBVSxPQUFJVCxJQUFFLEtBQUsrUCxTQUFMLENBQWV0UCxDQUFmLENBQU4sQ0FBd0IsSUFBSUQsSUFBRWlGLEtBQUtXLEdBQUwsQ0FBUzNGLENBQVQsRUFBV1QsQ0FBWCxDQUFOLENBQW9CLElBQUlZLElBQUVzSyxJQUFJMUssQ0FBSixDQUFOO0FBQUEsTUFBYUcsSUFBRW1KLEtBQWY7QUFBQSxNQUFxQi9KLElBQUUrSixLQUF2QjtBQUFBLE1BQTZCaEssSUFBRSxFQUEvQixDQUFrQyxLQUFLb04sUUFBTCxDQUFjdE0sQ0FBZCxFQUFnQkQsQ0FBaEIsRUFBa0JaLENBQWxCLEVBQXFCLE9BQU1ZLEVBQUVtUCxNQUFGLEtBQVcsQ0FBakIsRUFBbUI7QUFBQ2hRLFFBQUUsQ0FBQ1UsSUFBRVQsRUFBRWlRLFFBQUYsRUFBSCxFQUFpQmxPLFFBQWpCLENBQTBCckIsQ0FBMUIsRUFBNkI0QyxNQUE3QixDQUFvQyxDQUFwQyxJQUF1Q3ZELENBQXpDLENBQTJDYSxFQUFFdU0sUUFBRixDQUFXdE0sQ0FBWCxFQUFhRCxDQUFiLEVBQWVaLENBQWY7QUFBa0IsVUFBT0EsRUFBRWlRLFFBQUYsR0FBYWxPLFFBQWIsQ0FBc0JyQixDQUF0QixJQUF5QlgsQ0FBaEM7QUFBa0MsVUFBU21RLFlBQVQsQ0FBc0JsTixDQUF0QixFQUF3QmhELENBQXhCLEVBQTBCO0FBQUMsT0FBS29MLE9BQUwsQ0FBYSxDQUFiLEVBQWdCLElBQUdwTCxLQUFHLElBQU4sRUFBVztBQUFDQSxRQUFFLEVBQUY7QUFBSyxPQUFJQyxJQUFFLEtBQUsrUCxTQUFMLENBQWVoUSxDQUFmLENBQU4sQ0FBd0IsSUFBSUQsSUFBRTJGLEtBQUtXLEdBQUwsQ0FBU3JHLENBQVQsRUFBV0MsQ0FBWCxDQUFOO0FBQUEsTUFBb0JRLElBQUUsS0FBdEI7QUFBQSxNQUE0QlEsSUFBRSxDQUE5QjtBQUFBLE1BQWdDRixJQUFFLENBQWxDLENBQW9DLEtBQUksSUFBSUwsSUFBRSxDQUFWLEVBQVlBLElBQUVzQyxFQUFFbEMsTUFBaEIsRUFBdUIsRUFBRUosQ0FBekIsRUFBMkI7QUFBQyxRQUFJTSxJQUFFZ0ssTUFBTWhJLENBQU4sRUFBUXRDLENBQVIsQ0FBTixDQUFpQixJQUFHTSxJQUFFLENBQUwsRUFBTztBQUFDLFVBQUdnQyxFQUFFa0QsTUFBRixDQUFTeEYsQ0FBVCxLQUFhLEdBQWIsSUFBa0IsS0FBS3FQLE1BQUwsTUFBZSxDQUFwQyxFQUFzQztBQUFDdFAsWUFBRSxJQUFGO0FBQU87QUFBUyxTQUFFVCxJQUFFZSxDQUFGLEdBQUlDLENBQU4sQ0FBUSxJQUFHLEVBQUVDLENBQUYsSUFBS2hCLENBQVIsRUFBVTtBQUFDLFdBQUtrUSxTQUFMLENBQWVwUSxDQUFmLEVBQWtCLEtBQUtxUSxVQUFMLENBQWdCclAsQ0FBaEIsRUFBa0IsQ0FBbEIsRUFBcUJFLElBQUUsQ0FBRixDQUFJRixJQUFFLENBQUY7QUFBSTtBQUFDLE9BQUdFLElBQUUsQ0FBTCxFQUFPO0FBQUMsU0FBS2tQLFNBQUwsQ0FBZXpLLEtBQUtXLEdBQUwsQ0FBU3JHLENBQVQsRUFBV2lCLENBQVgsQ0FBZixFQUE4QixLQUFLbVAsVUFBTCxDQUFnQnJQLENBQWhCLEVBQWtCLENBQWxCO0FBQXFCLE9BQUdOLENBQUgsRUFBSztBQUFDbUosZUFBVzJCLElBQVgsQ0FBZ0JDLEtBQWhCLENBQXNCLElBQXRCLEVBQTJCLElBQTNCO0FBQWlDO0FBQUMsVUFBUzZFLGFBQVQsQ0FBdUJwUSxDQUF2QixFQUF5QlEsQ0FBekIsRUFBMkJULENBQTNCLEVBQTZCO0FBQUMsTUFBRyxZQUFVLE9BQU9TLENBQXBCLEVBQXNCO0FBQUMsUUFBR1IsSUFBRSxDQUFMLEVBQU87QUFBQyxXQUFLbUwsT0FBTCxDQUFhLENBQWI7QUFBZ0IsS0FBeEIsTUFBNEI7QUFBQyxXQUFLdkIsVUFBTCxDQUFnQjVKLENBQWhCLEVBQWtCRCxDQUFsQixFQUFxQixJQUFHLENBQUMsS0FBS3NRLE9BQUwsQ0FBYXJRLElBQUUsQ0FBZixDQUFKLEVBQXNCO0FBQUMsYUFBS3NRLFNBQUwsQ0FBZTNHLFdBQVdtRCxHQUFYLENBQWV5RCxTQUFmLENBQXlCdlEsSUFBRSxDQUEzQixDQUFmLEVBQTZDd1EsS0FBN0MsRUFBbUQsSUFBbkQ7QUFBeUQsV0FBRyxLQUFLdkIsTUFBTCxFQUFILEVBQWlCO0FBQUMsYUFBS2tCLFVBQUwsQ0FBZ0IsQ0FBaEIsRUFBa0IsQ0FBbEI7QUFBcUIsY0FBTSxDQUFDLEtBQUtNLGVBQUwsQ0FBcUJqUSxDQUFyQixDQUFQLEVBQStCO0FBQUMsYUFBSzJQLFVBQUwsQ0FBZ0IsQ0FBaEIsRUFBa0IsQ0FBbEIsRUFBcUIsSUFBRyxLQUFLaEIsU0FBTCxLQUFpQm5QLENBQXBCLEVBQXNCO0FBQUMsZUFBS3VMLEtBQUwsQ0FBVzVCLFdBQVdtRCxHQUFYLENBQWV5RCxTQUFmLENBQXlCdlEsSUFBRSxDQUEzQixDQUFYLEVBQXlDLElBQXpDO0FBQStDO0FBQUM7QUFBQztBQUFDLEdBQTlULE1BQWtVO0FBQUMsUUFBSUUsSUFBRSxJQUFJcUosS0FBSixFQUFOO0FBQUEsUUFBa0J6SixJQUFFRSxJQUFFLENBQXRCLENBQXdCRSxFQUFFVyxNQUFGLEdBQVMsQ0FBQ2IsS0FBRyxDQUFKLElBQU8sQ0FBaEIsQ0FBa0JRLEVBQUVrUSxTQUFGLENBQVl4USxDQUFaLEVBQWUsSUFBR0osSUFBRSxDQUFMLEVBQU87QUFBQ0ksUUFBRSxDQUFGLEtBQU8sQ0FBQyxLQUFHSixDQUFKLElBQU8sQ0FBZDtBQUFpQixLQUF6QixNQUE2QjtBQUFDSSxRQUFFLENBQUYsSUFBSyxDQUFMO0FBQU8sVUFBSzJKLFVBQUwsQ0FBZ0IzSixDQUFoQixFQUFrQixHQUFsQjtBQUF1QjtBQUFDLFVBQVN5USxhQUFULEdBQXdCO0FBQUMsTUFBSXBRLElBQUUsS0FBSzhCLENBQVg7QUFBQSxNQUFhNUIsSUFBRSxJQUFJOEksS0FBSixFQUFmLENBQTJCOUksRUFBRSxDQUFGLElBQUssS0FBSzhCLENBQVYsQ0FBWSxJQUFJL0IsSUFBRSxLQUFLNEosRUFBTCxHQUFTN0osSUFBRSxLQUFLNkosRUFBUixHQUFZLENBQTFCO0FBQUEsTUFBNEJwSyxDQUE1QjtBQUFBLE1BQThCZ0IsSUFBRSxDQUFoQyxDQUFrQyxJQUFHVCxNQUFJLENBQVAsRUFBUztBQUFDLFFBQUdDLElBQUUsS0FBSzRKLEVBQVAsSUFBVyxDQUFDcEssSUFBRSxLQUFLTyxDQUFMLEtBQVNDLENBQVosS0FBZ0IsQ0FBQyxLQUFLK0IsQ0FBTCxHQUFPLEtBQUs4SCxFQUFiLEtBQWtCN0osQ0FBaEQsRUFBa0Q7QUFBQ0MsUUFBRU8sR0FBRixJQUFPaEIsSUFBRyxLQUFLdUMsQ0FBTCxJQUFTLEtBQUs2SCxFQUFMLEdBQVE1SixDQUEzQjtBQUErQixZQUFNRCxLQUFHLENBQVQsRUFBVztBQUFDLFVBQUdDLElBQUUsQ0FBTCxFQUFPO0FBQUNSLFlBQUUsQ0FBQyxLQUFLTyxDQUFMLElBQVMsQ0FBQyxLQUFHQyxDQUFKLElBQU8sQ0FBakIsS0FBdUIsSUFBRUEsQ0FBM0IsQ0FBOEJSLEtBQUcsS0FBSyxFQUFFTyxDQUFQLE1BQVlDLEtBQUcsS0FBSzRKLEVBQUwsR0FBUSxDQUF2QixDQUFIO0FBQTZCLE9BQW5FLE1BQXVFO0FBQUNwSyxZQUFHLEtBQUtPLENBQUwsTUFBVUMsS0FBRyxDQUFiLENBQUQsR0FBa0IsR0FBcEIsQ0FBd0IsSUFBR0EsS0FBRyxDQUFOLEVBQVE7QUFBQ0EsZUFBRyxLQUFLNEosRUFBUixDQUFXLEVBQUU3SixDQUFGO0FBQUk7QUFBQyxXQUFHLENBQUNQLElBQUUsR0FBSCxLQUFTLENBQVosRUFBYztBQUFDQSxhQUFHLENBQUMsR0FBSjtBQUFRLFdBQUdnQixLQUFHLENBQUgsSUFBTSxDQUFDLEtBQUt1QixDQUFMLEdBQU8sR0FBUixNQUFldkMsSUFBRSxHQUFqQixDQUFULEVBQStCO0FBQUMsVUFBRWdCLENBQUY7QUFBSSxXQUFHQSxJQUFFLENBQUYsSUFBS2hCLEtBQUcsS0FBS3VDLENBQWhCLEVBQWtCO0FBQUM5QixVQUFFTyxHQUFGLElBQU9oQixDQUFQO0FBQVM7QUFBQztBQUFDLFVBQU9TLENBQVA7QUFBUyxVQUFTbVEsUUFBVCxDQUFrQnJRLENBQWxCLEVBQW9CO0FBQUMsU0FBTyxLQUFLc00sU0FBTCxDQUFldE0sQ0FBZixLQUFtQixDQUExQjtBQUE2QixVQUFTc1EsS0FBVCxDQUFldFEsQ0FBZixFQUFpQjtBQUFDLFNBQU8sS0FBS3NNLFNBQUwsQ0FBZXRNLENBQWYsSUFBa0IsQ0FBbkIsR0FBc0IsSUFBdEIsR0FBMkJBLENBQWpDO0FBQW1DLFVBQVN1USxLQUFULENBQWV2USxDQUFmLEVBQWlCO0FBQUMsU0FBTyxLQUFLc00sU0FBTCxDQUFldE0sQ0FBZixJQUFrQixDQUFuQixHQUFzQixJQUF0QixHQUEyQkEsQ0FBakM7QUFBbUMsVUFBU3dRLFlBQVQsQ0FBc0J0USxDQUF0QixFQUF3QlYsQ0FBeEIsRUFBMEJTLENBQTFCLEVBQTRCO0FBQUMsTUFBSU4sQ0FBSjtBQUFBLE1BQU1KLENBQU47QUFBQSxNQUFRUyxJQUFFa0YsS0FBS2IsR0FBTCxDQUFTbkUsRUFBRTRCLENBQVgsRUFBYSxLQUFLQSxDQUFsQixDQUFWLENBQStCLEtBQUluQyxJQUFFLENBQU4sRUFBUUEsSUFBRUssQ0FBVixFQUFZLEVBQUVMLENBQWQsRUFBZ0I7QUFBQ00sTUFBRU4sQ0FBRixJQUFLSCxFQUFFLEtBQUtHLENBQUwsQ0FBRixFQUFVTyxFQUFFUCxDQUFGLENBQVYsQ0FBTDtBQUFxQixPQUFHTyxFQUFFNEIsQ0FBRixHQUFJLEtBQUtBLENBQVosRUFBYztBQUFDdkMsUUFBRVcsRUFBRThCLENBQUYsR0FBSSxLQUFLOEgsRUFBWCxDQUFjLEtBQUluSyxJQUFFSyxDQUFOLEVBQVFMLElBQUUsS0FBS21DLENBQWYsRUFBaUIsRUFBRW5DLENBQW5CLEVBQXFCO0FBQUNNLFFBQUVOLENBQUYsSUFBS0gsRUFBRSxLQUFLRyxDQUFMLENBQUYsRUFBVUosQ0FBVixDQUFMO0FBQWtCLE9BQUV1QyxDQUFGLEdBQUksS0FBS0EsQ0FBVDtBQUFXLEdBQWhGLE1BQW9GO0FBQUN2QyxRQUFFLEtBQUt5QyxDQUFMLEdBQU8sS0FBSzhILEVBQWQsQ0FBaUIsS0FBSW5LLElBQUVLLENBQU4sRUFBUUwsSUFBRU8sRUFBRTRCLENBQVosRUFBYyxFQUFFbkMsQ0FBaEIsRUFBa0I7QUFBQ00sUUFBRU4sQ0FBRixJQUFLSCxFQUFFRCxDQUFGLEVBQUlXLEVBQUVQLENBQUYsQ0FBSixDQUFMO0FBQWUsT0FBRW1DLENBQUYsR0FBSTVCLEVBQUU0QixDQUFOO0FBQVEsS0FBRUUsQ0FBRixHQUFJeEMsRUFBRSxLQUFLd0MsQ0FBUCxFQUFTOUIsRUFBRThCLENBQVgsQ0FBSixDQUFrQi9CLEVBQUVnQyxLQUFGO0FBQVUsVUFBU3dPLE1BQVQsQ0FBZ0JoUSxDQUFoQixFQUFrQlQsQ0FBbEIsRUFBb0I7QUFBQyxTQUFPUyxJQUFFVCxDQUFUO0FBQVcsVUFBUzBRLEtBQVQsQ0FBZTFRLENBQWYsRUFBaUI7QUFBQyxNQUFJRSxJQUFFcUosS0FBTixDQUFZLEtBQUt3RyxTQUFMLENBQWUvUCxDQUFmLEVBQWlCeVEsTUFBakIsRUFBd0J2USxDQUF4QixFQUEyQixPQUFPQSxDQUFQO0FBQVMsVUFBUytQLEtBQVQsQ0FBZXhQLENBQWYsRUFBaUJULENBQWpCLEVBQW1CO0FBQUMsU0FBT1MsSUFBRVQsQ0FBVDtBQUFXLFVBQVMyUSxJQUFULENBQWMzUSxDQUFkLEVBQWdCO0FBQUMsTUFBSUUsSUFBRXFKLEtBQU4sQ0FBWSxLQUFLd0csU0FBTCxDQUFlL1AsQ0FBZixFQUFpQmlRLEtBQWpCLEVBQXVCL1AsQ0FBdkIsRUFBMEIsT0FBT0EsQ0FBUDtBQUFTLFVBQVMwUSxNQUFULENBQWdCblEsQ0FBaEIsRUFBa0JULENBQWxCLEVBQW9CO0FBQUMsU0FBT1MsSUFBRVQsQ0FBVDtBQUFXLFVBQVM2USxLQUFULENBQWU3USxDQUFmLEVBQWlCO0FBQUMsTUFBSUUsSUFBRXFKLEtBQU4sQ0FBWSxLQUFLd0csU0FBTCxDQUFlL1AsQ0FBZixFQUFpQjRRLE1BQWpCLEVBQXdCMVEsQ0FBeEIsRUFBMkIsT0FBT0EsQ0FBUDtBQUFTLFVBQVM0USxTQUFULENBQW1CclEsQ0FBbkIsRUFBcUJULENBQXJCLEVBQXVCO0FBQUMsU0FBT1MsSUFBRSxDQUFDVCxDQUFWO0FBQVksVUFBUytRLFFBQVQsQ0FBa0IvUSxDQUFsQixFQUFvQjtBQUFDLE1BQUlFLElBQUVxSixLQUFOLENBQVksS0FBS3dHLFNBQUwsQ0FBZS9QLENBQWYsRUFBaUI4USxTQUFqQixFQUEyQjVRLENBQTNCLEVBQThCLE9BQU9BLENBQVA7QUFBUyxVQUFTOFEsS0FBVCxHQUFnQjtBQUFDLE1BQUloUixJQUFFdUosS0FBTixDQUFZLEtBQUksSUFBSTlJLElBQUUsQ0FBVixFQUFZQSxJQUFFLEtBQUtxQixDQUFuQixFQUFxQixFQUFFckIsQ0FBdkIsRUFBeUI7QUFBQ1QsTUFBRVMsQ0FBRixJQUFLLEtBQUtxSixFQUFMLEdBQVEsQ0FBQyxLQUFLckosQ0FBTCxDQUFkO0FBQXNCLEtBQUVxQixDQUFGLEdBQUksS0FBS0EsQ0FBVCxDQUFXOUIsRUFBRWdDLENBQUYsR0FBSSxDQUFDLEtBQUtBLENBQVYsQ0FBWSxPQUFPaEMsQ0FBUDtBQUFTLFVBQVNpUixXQUFULENBQXFCalIsQ0FBckIsRUFBdUI7QUFBQyxNQUFJUyxJQUFFOEksS0FBTixDQUFZLElBQUd2SixJQUFFLENBQUwsRUFBTztBQUFDLFNBQUt5TSxRQUFMLENBQWMsQ0FBQ3pNLENBQWYsRUFBaUJTLENBQWpCO0FBQW9CLEdBQTVCLE1BQWdDO0FBQUMsU0FBSzJMLFFBQUwsQ0FBY3BNLENBQWQsRUFBZ0JTLENBQWhCO0FBQW1CLFVBQU9BLENBQVA7QUFBUyxVQUFTeVEsWUFBVCxDQUFzQmxSLENBQXRCLEVBQXdCO0FBQUMsTUFBSVMsSUFBRThJLEtBQU4sQ0FBWSxJQUFHdkosSUFBRSxDQUFMLEVBQU87QUFBQyxTQUFLb00sUUFBTCxDQUFjLENBQUNwTSxDQUFmLEVBQWlCUyxDQUFqQjtBQUFvQixHQUE1QixNQUFnQztBQUFDLFNBQUtnTSxRQUFMLENBQWN6TSxDQUFkLEVBQWdCUyxDQUFoQjtBQUFtQixVQUFPQSxDQUFQO0FBQVMsVUFBUzBRLElBQVQsQ0FBYzFRLENBQWQsRUFBZ0I7QUFBQyxNQUFHQSxLQUFHLENBQU4sRUFBUTtBQUFDLFdBQU8sQ0FBQyxDQUFSO0FBQVUsT0FBSVQsSUFBRSxDQUFOLENBQVEsSUFBRyxDQUFDUyxJQUFFLEtBQUgsS0FBVyxDQUFkLEVBQWdCO0FBQUNBLFVBQUksRUFBSixDQUFPVCxLQUFHLEVBQUg7QUFBTSxPQUFHLENBQUNTLElBQUUsR0FBSCxLQUFTLENBQVosRUFBYztBQUFDQSxVQUFJLENBQUosQ0FBTVQsS0FBRyxDQUFIO0FBQUssT0FBRyxDQUFDUyxJQUFFLEVBQUgsS0FBUSxDQUFYLEVBQWE7QUFBQ0EsVUFBSSxDQUFKLENBQU1ULEtBQUcsQ0FBSDtBQUFLLE9BQUcsQ0FBQ1MsSUFBRSxDQUFILEtBQU8sQ0FBVixFQUFZO0FBQUNBLFVBQUksQ0FBSixDQUFNVCxLQUFHLENBQUg7QUFBSyxPQUFHLENBQUNTLElBQUUsQ0FBSCxLQUFPLENBQVYsRUFBWTtBQUFDLE1BQUVULENBQUY7QUFBSSxVQUFPQSxDQUFQO0FBQVMsVUFBU29SLGlCQUFULEdBQTRCO0FBQUMsT0FBSSxJQUFJM1EsSUFBRSxDQUFWLEVBQVlBLElBQUUsS0FBS3FCLENBQW5CLEVBQXFCLEVBQUVyQixDQUF2QixFQUF5QjtBQUFDLFFBQUcsS0FBS0EsQ0FBTCxLQUFTLENBQVosRUFBYztBQUFDLGFBQU9BLElBQUUsS0FBS29KLEVBQVAsR0FBVXNILEtBQUssS0FBSzFRLENBQUwsQ0FBTCxDQUFqQjtBQUErQjtBQUFDLE9BQUcsS0FBS3VCLENBQUwsR0FBTyxDQUFWLEVBQVk7QUFBQyxXQUFPLEtBQUtGLENBQUwsR0FBTyxLQUFLK0gsRUFBbkI7QUFBc0IsVUFBTyxDQUFDLENBQVI7QUFBVSxVQUFTd0gsSUFBVCxDQUFjNVEsQ0FBZCxFQUFnQjtBQUFDLE1BQUlULElBQUUsQ0FBTixDQUFRLE9BQU1TLEtBQUcsQ0FBVCxFQUFXO0FBQUNBLFNBQUdBLElBQUUsQ0FBTCxDQUFPLEVBQUVULENBQUY7QUFBSSxVQUFPQSxDQUFQO0FBQVMsVUFBU3NSLFVBQVQsR0FBcUI7QUFBQyxNQUFJcFIsSUFBRSxDQUFOO0FBQUEsTUFBUU8sSUFBRSxLQUFLdUIsQ0FBTCxHQUFPLEtBQUs4SCxFQUF0QixDQUF5QixLQUFJLElBQUk5SixJQUFFLENBQVYsRUFBWUEsSUFBRSxLQUFLOEIsQ0FBbkIsRUFBcUIsRUFBRTlCLENBQXZCLEVBQXlCO0FBQUNFLFNBQUdtUixLQUFLLEtBQUtyUixDQUFMLElBQVFTLENBQWIsQ0FBSDtBQUFtQixVQUFPUCxDQUFQO0FBQVMsVUFBU3FSLFNBQVQsQ0FBbUJ2UixDQUFuQixFQUFxQjtBQUFDLE1BQUlTLElBQUV5RSxLQUFLYyxLQUFMLENBQVdoRyxJQUFFLEtBQUs2SixFQUFsQixDQUFOLENBQTRCLElBQUdwSixLQUFHLEtBQUtxQixDQUFYLEVBQWE7QUFBQyxXQUFPLEtBQUtFLENBQUwsSUFBUSxDQUFmO0FBQWtCLFVBQU8sQ0FBQyxLQUFLdkIsQ0FBTCxJQUFTLEtBQUlULElBQUUsS0FBSzZKLEVBQXJCLEtBQTRCLENBQW5DO0FBQXNDLFVBQVMySCxZQUFULENBQXNCdFIsQ0FBdEIsRUFBd0JGLENBQXhCLEVBQTBCO0FBQUMsTUFBSVMsSUFBRTJJLFdBQVdtRCxHQUFYLENBQWV5RCxTQUFmLENBQXlCOVAsQ0FBekIsQ0FBTixDQUFrQyxLQUFLNlAsU0FBTCxDQUFldFAsQ0FBZixFQUFpQlQsQ0FBakIsRUFBbUJTLENBQW5CLEVBQXNCLE9BQU9BLENBQVA7QUFBUyxVQUFTZ1IsUUFBVCxDQUFrQmhSLENBQWxCLEVBQW9CO0FBQUMsU0FBTyxLQUFLaVIsU0FBTCxDQUFlalIsQ0FBZixFQUFpQndQLEtBQWpCLENBQVA7QUFBK0IsVUFBUzBCLFVBQVQsQ0FBb0JsUixDQUFwQixFQUFzQjtBQUFDLFNBQU8sS0FBS2lSLFNBQUwsQ0FBZWpSLENBQWYsRUFBaUJxUSxTQUFqQixDQUFQO0FBQW1DLFVBQVNjLFNBQVQsQ0FBbUJuUixDQUFuQixFQUFxQjtBQUFDLFNBQU8sS0FBS2lSLFNBQUwsQ0FBZWpSLENBQWYsRUFBaUJtUSxNQUFqQixDQUFQO0FBQWdDLFVBQVNpQixRQUFULENBQWtCbFMsQ0FBbEIsRUFBb0JGLENBQXBCLEVBQXNCO0FBQUMsTUFBSVEsSUFBRSxDQUFOO0FBQUEsTUFBUVYsSUFBRSxDQUFWO0FBQUEsTUFBWVMsSUFBRWtGLEtBQUtiLEdBQUwsQ0FBUzFFLEVBQUVtQyxDQUFYLEVBQWEsS0FBS0EsQ0FBbEIsQ0FBZCxDQUFtQyxPQUFNN0IsSUFBRUQsQ0FBUixFQUFVO0FBQUNULFNBQUcsS0FBS1UsQ0FBTCxJQUFRTixFQUFFTSxDQUFGLENBQVgsQ0FBZ0JSLEVBQUVRLEdBQUYsSUFBT1YsSUFBRSxLQUFLdUssRUFBZCxDQUFpQnZLLE1BQUksS0FBS3NLLEVBQVQ7QUFBWSxPQUFHbEssRUFBRW1DLENBQUYsR0FBSSxLQUFLQSxDQUFaLEVBQWM7QUFBQ3ZDLFNBQUdJLEVBQUVxQyxDQUFMLENBQU8sT0FBTS9CLElBQUUsS0FBSzZCLENBQWIsRUFBZTtBQUFDdkMsV0FBRyxLQUFLVSxDQUFMLENBQUgsQ0FBV1IsRUFBRVEsR0FBRixJQUFPVixJQUFFLEtBQUt1SyxFQUFkLENBQWlCdkssTUFBSSxLQUFLc0ssRUFBVDtBQUFZLFVBQUcsS0FBSzdILENBQVI7QUFBVSxHQUF4RixNQUE0RjtBQUFDekMsU0FBRyxLQUFLeUMsQ0FBUixDQUFVLE9BQU0vQixJQUFFTixFQUFFbUMsQ0FBVixFQUFZO0FBQUN2QyxXQUFHSSxFQUFFTSxDQUFGLENBQUgsQ0FBUVIsRUFBRVEsR0FBRixJQUFPVixJQUFFLEtBQUt1SyxFQUFkLENBQWlCdkssTUFBSSxLQUFLc0ssRUFBVDtBQUFZLFVBQUdsSyxFQUFFcUMsQ0FBTDtBQUFPLEtBQUVBLENBQUYsR0FBS3pDLElBQUUsQ0FBSCxHQUFNLENBQUMsQ0FBUCxHQUFTLENBQWIsQ0FBZSxJQUFHQSxJQUFFLENBQUwsRUFBTztBQUFDRSxNQUFFUSxHQUFGLElBQU9WLENBQVA7QUFBUyxHQUFqQixNQUFxQjtBQUFDLFFBQUdBLElBQUUsQ0FBQyxDQUFOLEVBQVE7QUFBQ0UsUUFBRVEsR0FBRixJQUFPLEtBQUs4SixFQUFMLEdBQVF4SyxDQUFmO0FBQWlCO0FBQUMsS0FBRXVDLENBQUYsR0FBSTdCLENBQUosQ0FBTVIsRUFBRXdDLEtBQUY7QUFBVSxVQUFTNlAsS0FBVCxDQUFlOVIsQ0FBZixFQUFpQjtBQUFDLE1BQUlFLElBQUVxSixLQUFOLENBQVksS0FBS3dJLEtBQUwsQ0FBVy9SLENBQVgsRUFBYUUsQ0FBYixFQUFnQixPQUFPQSxDQUFQO0FBQVMsVUFBUzhSLFVBQVQsQ0FBb0JoUyxDQUFwQixFQUFzQjtBQUFDLE1BQUlFLElBQUVxSixLQUFOLENBQVksS0FBS3lCLEtBQUwsQ0FBV2hMLENBQVgsRUFBYUUsQ0FBYixFQUFnQixPQUFPQSxDQUFQO0FBQVMsVUFBUytSLFVBQVQsQ0FBb0JqUyxDQUFwQixFQUFzQjtBQUFDLE1BQUlFLElBQUVxSixLQUFOLENBQVksS0FBSzJELFVBQUwsQ0FBZ0JsTixDQUFoQixFQUFrQkUsQ0FBbEIsRUFBcUIsT0FBT0EsQ0FBUDtBQUFTLFVBQVNnUyxRQUFULEdBQW1CO0FBQUMsTUFBSXpSLElBQUU4SSxLQUFOLENBQVksS0FBSzhELFFBQUwsQ0FBYzVNLENBQWQsRUFBaUIsT0FBT0EsQ0FBUDtBQUFTLFVBQVMwUixRQUFULENBQWtCblMsQ0FBbEIsRUFBb0I7QUFBQyxNQUFJRSxJQUFFcUosS0FBTixDQUFZLEtBQUtvRCxRQUFMLENBQWMzTSxDQUFkLEVBQWdCRSxDQUFoQixFQUFrQixJQUFsQixFQUF3QixPQUFPQSxDQUFQO0FBQVMsVUFBU2tTLFdBQVQsQ0FBcUJwUyxDQUFyQixFQUF1QjtBQUFDLE1BQUlFLElBQUVxSixLQUFOLENBQVksS0FBS29ELFFBQUwsQ0FBYzNNLENBQWQsRUFBZ0IsSUFBaEIsRUFBcUJFLENBQXJCLEVBQXdCLE9BQU9BLENBQVA7QUFBUyxVQUFTbVMsb0JBQVQsQ0FBOEJyUyxDQUE5QixFQUFnQztBQUFDLE1BQUlMLElBQUU0SixLQUFOO0FBQUEsTUFBWXJKLElBQUVxSixLQUFkLENBQW9CLEtBQUtvRCxRQUFMLENBQWMzTSxDQUFkLEVBQWdCTCxDQUFoQixFQUFrQk8sQ0FBbEIsRUFBcUIsT0FBTyxJQUFJOEksS0FBSixDQUFVckosQ0FBVixFQUFZTyxDQUFaLENBQVA7QUFBc0IsVUFBU29TLFlBQVQsQ0FBc0I3UixDQUF0QixFQUF3QjtBQUFDLE9BQUssS0FBS3FCLENBQVYsSUFBYSxLQUFLOEgsRUFBTCxDQUFRLENBQVIsRUFBVW5KLElBQUUsQ0FBWixFQUFjLElBQWQsRUFBbUIsQ0FBbkIsRUFBcUIsQ0FBckIsRUFBdUIsS0FBS3FCLENBQTVCLENBQWIsQ0FBNEMsRUFBRSxLQUFLQSxDQUFQLENBQVMsS0FBS0csS0FBTDtBQUFhLFVBQVNzUSxhQUFULENBQXVCdlMsQ0FBdkIsRUFBeUJTLENBQXpCLEVBQTJCO0FBQUMsTUFBR1QsS0FBRyxDQUFOLEVBQVE7QUFBQztBQUFPLFVBQU0sS0FBSzhCLENBQUwsSUFBUXJCLENBQWQsRUFBZ0I7QUFBQyxTQUFLLEtBQUtxQixDQUFMLEVBQUwsSUFBZSxDQUFmO0FBQWlCLFFBQUtyQixDQUFMLEtBQVNULENBQVQsQ0FBVyxPQUFNLEtBQUtTLENBQUwsS0FBUyxLQUFLc0osRUFBcEIsRUFBdUI7QUFBQyxTQUFLdEosQ0FBTCxLQUFTLEtBQUtzSixFQUFkLENBQWlCLElBQUcsRUFBRXRKLENBQUYsSUFBSyxLQUFLcUIsQ0FBYixFQUFlO0FBQUMsV0FBSyxLQUFLQSxDQUFMLEVBQUwsSUFBZSxDQUFmO0FBQWlCLE9BQUUsS0FBS3JCLENBQUwsQ0FBRjtBQUFVO0FBQUMsVUFBUytSLE9BQVQsR0FBa0IsQ0FBRSxVQUFTQyxJQUFULENBQWNoUyxDQUFkLEVBQWdCO0FBQUMsU0FBT0EsQ0FBUDtBQUFTLFVBQVNpUyxNQUFULENBQWdCalMsQ0FBaEIsRUFBa0JQLENBQWxCLEVBQW9CRixDQUFwQixFQUFzQjtBQUFDUyxJQUFFeU0sVUFBRixDQUFhaE4sQ0FBYixFQUFlRixDQUFmO0FBQWtCLFVBQVMyUyxNQUFULENBQWdCbFMsQ0FBaEIsRUFBa0JULENBQWxCLEVBQW9CO0FBQUNTLElBQUU0TSxRQUFGLENBQVdyTixDQUFYO0FBQWMsU0FBUUosU0FBUixDQUFrQjBOLE9BQWxCLEdBQTBCbUYsSUFBMUIsQ0FBK0JELFFBQVE1UyxTQUFSLENBQWtCMk4sTUFBbEIsR0FBeUJrRixJQUF6QixDQUE4QkQsUUFBUTVTLFNBQVIsQ0FBa0I0TixLQUFsQixHQUF3QmtGLE1BQXhCLENBQStCRixRQUFRNVMsU0FBUixDQUFrQjZOLEtBQWxCLEdBQXdCa0YsTUFBeEIsQ0FBK0IsU0FBU0MsS0FBVCxDQUFlblMsQ0FBZixFQUFpQjtBQUFDLFNBQU8sS0FBS2tPLEdBQUwsQ0FBU2xPLENBQVQsRUFBVyxJQUFJK1IsT0FBSixFQUFYLENBQVA7QUFBaUMsVUFBU0ssa0JBQVQsQ0FBNEI3UyxDQUE1QixFQUE4QlAsQ0FBOUIsRUFBZ0NRLENBQWhDLEVBQWtDO0FBQUMsTUFBSU4sSUFBRXVGLEtBQUtiLEdBQUwsQ0FBUyxLQUFLdkMsQ0FBTCxHQUFPOUIsRUFBRThCLENBQWxCLEVBQW9CckMsQ0FBcEIsQ0FBTixDQUE2QlEsRUFBRStCLENBQUYsR0FBSSxDQUFKLENBQU0vQixFQUFFNkIsQ0FBRixHQUFJbkMsQ0FBSixDQUFNLE9BQU1BLElBQUUsQ0FBUixFQUFVO0FBQUNNLE1BQUUsRUFBRU4sQ0FBSixJQUFPLENBQVA7QUFBUyxPQUFJTyxDQUFKLENBQU0sS0FBSUEsSUFBRUQsRUFBRTZCLENBQUYsR0FBSSxLQUFLQSxDQUFmLEVBQWlCbkMsSUFBRU8sQ0FBbkIsRUFBcUIsRUFBRVAsQ0FBdkIsRUFBeUI7QUFBQ00sTUFBRU4sSUFBRSxLQUFLbUMsQ0FBVCxJQUFZLEtBQUs4SCxFQUFMLENBQVEsQ0FBUixFQUFVNUosRUFBRUwsQ0FBRixDQUFWLEVBQWVNLENBQWYsRUFBaUJOLENBQWpCLEVBQW1CLENBQW5CLEVBQXFCLEtBQUttQyxDQUExQixDQUFaO0FBQXlDLFFBQUk1QixJQUFFZ0YsS0FBS2IsR0FBTCxDQUFTckUsRUFBRThCLENBQVgsRUFBYXJDLENBQWIsQ0FBTixFQUFzQkUsSUFBRU8sQ0FBeEIsRUFBMEIsRUFBRVAsQ0FBNUIsRUFBOEI7QUFBQyxTQUFLaUssRUFBTCxDQUFRLENBQVIsRUFBVTVKLEVBQUVMLENBQUYsQ0FBVixFQUFlTSxDQUFmLEVBQWlCTixDQUFqQixFQUFtQixDQUFuQixFQUFxQkYsSUFBRUUsQ0FBdkI7QUFBMEIsS0FBRXNDLEtBQUY7QUFBVSxVQUFTNlEsa0JBQVQsQ0FBNEI5UyxDQUE1QixFQUE4QkMsQ0FBOUIsRUFBZ0NOLENBQWhDLEVBQWtDO0FBQUMsSUFBRU0sQ0FBRixDQUFJLElBQUlDLElBQUVQLEVBQUVtQyxDQUFGLEdBQUksS0FBS0EsQ0FBTCxHQUFPOUIsRUFBRThCLENBQVQsR0FBVzdCLENBQXJCLENBQXVCTixFQUFFcUMsQ0FBRixHQUFJLENBQUosQ0FBTSxPQUFNLEVBQUU5QixDQUFGLElBQUssQ0FBWCxFQUFhO0FBQUNQLE1BQUVPLENBQUYsSUFBSyxDQUFMO0FBQU8sUUFBSUEsSUFBRWdGLEtBQUtmLEdBQUwsQ0FBU2xFLElBQUUsS0FBSzZCLENBQWhCLEVBQWtCLENBQWxCLENBQU4sRUFBMkI1QixJQUFFRixFQUFFOEIsQ0FBL0IsRUFBaUMsRUFBRTVCLENBQW5DLEVBQXFDO0FBQUNQLE1BQUUsS0FBS21DLENBQUwsR0FBTzVCLENBQVAsR0FBU0QsQ0FBWCxJQUFjLEtBQUsySixFQUFMLENBQVEzSixJQUFFQyxDQUFWLEVBQVlGLEVBQUVFLENBQUYsQ0FBWixFQUFpQlAsQ0FBakIsRUFBbUIsQ0FBbkIsRUFBcUIsQ0FBckIsRUFBdUIsS0FBS21DLENBQUwsR0FBTzVCLENBQVAsR0FBU0QsQ0FBaEMsQ0FBZDtBQUFpRCxLQUFFZ0MsS0FBRixHQUFVdEMsRUFBRTZNLFNBQUYsQ0FBWSxDQUFaLEVBQWM3TSxDQUFkO0FBQWlCLFVBQVNvVCxPQUFULENBQWlCdFMsQ0FBakIsRUFBbUI7QUFBQyxPQUFLdVMsRUFBTCxHQUFRekosS0FBUixDQUFjLEtBQUswSixFQUFMLEdBQVExSixLQUFSLENBQWNILFdBQVdtRCxHQUFYLENBQWVGLFNBQWYsQ0FBeUIsSUFBRTVMLEVBQUVxQixDQUE3QixFQUErQixLQUFLa1IsRUFBcEMsRUFBd0MsS0FBS0UsRUFBTCxHQUFRLEtBQUtGLEVBQUwsQ0FBUUcsTUFBUixDQUFlMVMsQ0FBZixDQUFSLENBQTBCLEtBQUsrQixDQUFMLEdBQU8vQixDQUFQO0FBQVMsVUFBUzJTLGNBQVQsQ0FBd0IzUyxDQUF4QixFQUEwQjtBQUFDLE1BQUdBLEVBQUV1QixDQUFGLEdBQUksQ0FBSixJQUFPdkIsRUFBRXFCLENBQUYsR0FBSSxJQUFFLEtBQUtVLENBQUwsQ0FBT1YsQ0FBdkIsRUFBeUI7QUFBQyxXQUFPckIsRUFBRXFNLEdBQUYsQ0FBTSxLQUFLdEssQ0FBWCxDQUFQO0FBQXFCLEdBQS9DLE1BQW1EO0FBQUMsUUFBRy9CLEVBQUU2TCxTQUFGLENBQVksS0FBSzlKLENBQWpCLElBQW9CLENBQXZCLEVBQXlCO0FBQUMsYUFBTy9CLENBQVA7QUFBUyxLQUFuQyxNQUF1QztBQUFDLFVBQUlULElBQUV1SixLQUFOLENBQVk5SSxFQUFFMEwsTUFBRixDQUFTbk0sQ0FBVCxFQUFZLEtBQUttTixNQUFMLENBQVluTixDQUFaLEVBQWUsT0FBT0EsQ0FBUDtBQUFTO0FBQUM7QUFBQyxVQUFTcVQsYUFBVCxDQUF1QjVTLENBQXZCLEVBQXlCO0FBQUMsU0FBT0EsQ0FBUDtBQUFTLFVBQVM2UyxhQUFULENBQXVCN1MsQ0FBdkIsRUFBeUI7QUFBQ0EsSUFBRStMLFNBQUYsQ0FBWSxLQUFLaEssQ0FBTCxDQUFPVixDQUFQLEdBQVMsQ0FBckIsRUFBdUIsS0FBS2tSLEVBQTVCLEVBQWdDLElBQUd2UyxFQUFFcUIsQ0FBRixHQUFJLEtBQUtVLENBQUwsQ0FBT1YsQ0FBUCxHQUFTLENBQWhCLEVBQWtCO0FBQUNyQixNQUFFcUIsQ0FBRixHQUFJLEtBQUtVLENBQUwsQ0FBT1YsQ0FBUCxHQUFTLENBQWIsQ0FBZXJCLEVBQUV3QixLQUFGO0FBQVUsUUFBS2lSLEVBQUwsQ0FBUUssZUFBUixDQUF3QixLQUFLUCxFQUE3QixFQUFnQyxLQUFLeFEsQ0FBTCxDQUFPVixDQUFQLEdBQVMsQ0FBekMsRUFBMkMsS0FBS21SLEVBQWhELEVBQW9ELEtBQUt6USxDQUFMLENBQU9nUixlQUFQLENBQXVCLEtBQUtQLEVBQTVCLEVBQStCLEtBQUt6USxDQUFMLENBQU9WLENBQVAsR0FBUyxDQUF4QyxFQUEwQyxLQUFLa1IsRUFBL0MsRUFBbUQsT0FBTXZTLEVBQUU2TCxTQUFGLENBQVksS0FBSzBHLEVBQWpCLElBQXFCLENBQTNCLEVBQTZCO0FBQUN2UyxNQUFFbVAsVUFBRixDQUFhLENBQWIsRUFBZSxLQUFLcE4sQ0FBTCxDQUFPVixDQUFQLEdBQVMsQ0FBeEI7QUFBMkIsS0FBRWtKLEtBQUYsQ0FBUSxLQUFLZ0ksRUFBYixFQUFnQnZTLENBQWhCLEVBQW1CLE9BQU1BLEVBQUU2TCxTQUFGLENBQVksS0FBSzlKLENBQWpCLEtBQXFCLENBQTNCLEVBQTZCO0FBQUMvQixNQUFFdUssS0FBRixDQUFRLEtBQUt4SSxDQUFiLEVBQWUvQixDQUFmO0FBQWtCO0FBQUMsVUFBU2dULFlBQVQsQ0FBc0JoVCxDQUF0QixFQUF3QlQsQ0FBeEIsRUFBMEI7QUFBQ1MsSUFBRTRNLFFBQUYsQ0FBV3JOLENBQVgsRUFBYyxLQUFLbU4sTUFBTCxDQUFZbk4sQ0FBWjtBQUFlLFVBQVMwVCxZQUFULENBQXNCalQsQ0FBdEIsRUFBd0JQLENBQXhCLEVBQTBCRixDQUExQixFQUE0QjtBQUFDUyxJQUFFeU0sVUFBRixDQUFhaE4sQ0FBYixFQUFlRixDQUFmLEVBQWtCLEtBQUttTixNQUFMLENBQVluTixDQUFaO0FBQWUsU0FBUUosU0FBUixDQUFrQjBOLE9BQWxCLEdBQTBCOEYsY0FBMUIsQ0FBeUNMLFFBQVFuVCxTQUFSLENBQWtCMk4sTUFBbEIsR0FBeUI4RixhQUF6QixDQUF1Q04sUUFBUW5ULFNBQVIsQ0FBa0J1TixNQUFsQixHQUF5Qm1HLGFBQXpCLENBQXVDUCxRQUFRblQsU0FBUixDQUFrQjROLEtBQWxCLEdBQXdCa0csWUFBeEIsQ0FBcUNYLFFBQVFuVCxTQUFSLENBQWtCNk4sS0FBbEIsR0FBd0JnRyxZQUF4QixDQUFxQyxTQUFTRSxRQUFULENBQWtCNVIsQ0FBbEIsRUFBb0J0QyxDQUFwQixFQUFzQjtBQUFDLE1BQUlzQixJQUFFZ0IsRUFBRTZNLFNBQUYsRUFBTjtBQUFBLE1BQW9CcFAsQ0FBcEI7QUFBQSxNQUFzQlEsSUFBRTJLLElBQUksQ0FBSixDQUF4QjtBQUFBLE1BQStCMUcsQ0FBL0IsQ0FBaUMsSUFBR2xELEtBQUcsQ0FBTixFQUFRO0FBQUMsV0FBT2YsQ0FBUDtBQUFTLEdBQWxCLE1BQXNCO0FBQUMsUUFBR2UsSUFBRSxFQUFMLEVBQVE7QUFBQ3ZCLFVBQUUsQ0FBRjtBQUFJLEtBQWIsTUFBaUI7QUFBQyxVQUFHdUIsSUFBRSxFQUFMLEVBQVE7QUFBQ3ZCLFlBQUUsQ0FBRjtBQUFJLE9BQWIsTUFBaUI7QUFBQyxZQUFHdUIsSUFBRSxHQUFMLEVBQVM7QUFBQ3ZCLGNBQUUsQ0FBRjtBQUFJLFNBQWQsTUFBa0I7QUFBQyxjQUFHdUIsSUFBRSxHQUFMLEVBQVM7QUFBQ3ZCLGdCQUFFLENBQUY7QUFBSSxXQUFkLE1BQWtCO0FBQUNBLGdCQUFFLENBQUY7QUFBSTtBQUFDO0FBQUM7QUFBQztBQUFDLE9BQUd1QixJQUFFLENBQUwsRUFBTztBQUFDa0QsUUFBRSxJQUFJMkksT0FBSixDQUFZbk4sQ0FBWixDQUFGO0FBQWlCLEdBQXpCLE1BQTZCO0FBQUMsUUFBR0EsRUFBRWlQLE1BQUYsRUFBSCxFQUFjO0FBQUN6SyxVQUFFLElBQUk4TyxPQUFKLENBQVl0VCxDQUFaLENBQUY7QUFBaUIsS0FBaEMsTUFBb0M7QUFBQ3dFLFVBQUUsSUFBSTBKLFVBQUosQ0FBZWxPLENBQWYsQ0FBRjtBQUFvQjtBQUFDLE9BQUlxQixJQUFFLElBQUlrSSxLQUFKLEVBQU47QUFBQSxNQUFrQnJKLElBQUUsQ0FBcEI7QUFBQSxNQUFzQnFDLElBQUV4QyxJQUFFLENBQTFCO0FBQUEsTUFBNEJpQixJQUFFLENBQUMsS0FBR2pCLENBQUosSUFBTyxDQUFyQyxDQUF1Q3NCLEVBQUUsQ0FBRixJQUFLbUQsRUFBRXFKLE9BQUYsQ0FBVSxJQUFWLENBQUwsQ0FBcUIsSUFBRzlOLElBQUUsQ0FBTCxFQUFPO0FBQUMsUUFBSWlJLElBQUU4QixLQUFOLENBQVl0RixFQUFFd0osS0FBRixDQUFRM00sRUFBRSxDQUFGLENBQVIsRUFBYTJHLENBQWIsRUFBZ0IsT0FBTTlILEtBQUdjLENBQVQsRUFBVztBQUFDSyxRQUFFbkIsQ0FBRixJQUFLNEosS0FBTCxDQUFXdEYsRUFBRXVKLEtBQUYsQ0FBUS9GLENBQVIsRUFBVTNHLEVBQUVuQixJQUFFLENBQUosQ0FBVixFQUFpQm1CLEVBQUVuQixDQUFGLENBQWpCLEVBQXVCQSxLQUFHLENBQUg7QUFBSztBQUFDLE9BQUlZLElBQUV3QixFQUFFRCxDQUFGLEdBQUksQ0FBVjtBQUFBLE1BQVlpQyxDQUFaO0FBQUEsTUFBY0csSUFBRSxJQUFoQjtBQUFBLE1BQXFCaEUsSUFBRXFKLEtBQXZCO0FBQUEsTUFBNkI3QixDQUE3QixDQUErQjNHLElBQUV5SyxNQUFNekosRUFBRXhCLENBQUYsQ0FBTixJQUFZLENBQWQsQ0FBZ0IsT0FBTUEsS0FBRyxDQUFULEVBQVc7QUFBQyxRQUFHUSxLQUFHaUIsQ0FBTixFQUFRO0FBQUMrQixVQUFHaEMsRUFBRXhCLENBQUYsS0FBT1EsSUFBRWlCLENBQVYsR0FBY3ZCLENBQWhCO0FBQWtCLEtBQTNCLE1BQStCO0FBQUNzRCxVQUFFLENBQUNoQyxFQUFFeEIsQ0FBRixJQUFNLENBQUMsS0FBSVEsSUFBRSxDQUFQLElBQVcsQ0FBbEIsS0FBd0JpQixJQUFFakIsQ0FBNUIsQ0FBK0IsSUFBR1IsSUFBRSxDQUFMLEVBQU87QUFBQ3dELGFBQUdoQyxFQUFFeEIsSUFBRSxDQUFKLEtBQVMsS0FBS3NKLEVBQUwsR0FBUTlJLENBQVIsR0FBVWlCLENBQXRCO0FBQXlCO0FBQUMsU0FBRXhDLENBQUYsQ0FBSSxPQUFNLENBQUN1RSxJQUFFLENBQUgsS0FBTyxDQUFiLEVBQWU7QUFBQ0EsWUFBSSxDQUFKLENBQU0sRUFBRXBFLENBQUY7QUFBSSxTQUFHLENBQUNvQixLQUFHcEIsQ0FBSixJQUFPLENBQVYsRUFBWTtBQUFDb0IsV0FBRyxLQUFLOEksRUFBUixDQUFXLEVBQUV0SixDQUFGO0FBQUksU0FBRzJELENBQUgsRUFBSztBQUFDcEQsUUFBRWlELENBQUYsRUFBS29JLE1BQUwsQ0FBWW5NLENBQVosRUFBZWtFLElBQUUsS0FBRjtBQUFRLEtBQTdCLE1BQWlDO0FBQUMsYUFBTXZFLElBQUUsQ0FBUixFQUFVO0FBQUNzRSxVQUFFd0osS0FBRixDQUFRek4sQ0FBUixFQUFVRSxDQUFWLEVBQWErRCxFQUFFd0osS0FBRixDQUFRdk4sQ0FBUixFQUFVRixDQUFWLEVBQWFMLEtBQUcsQ0FBSDtBQUFLLFdBQUdBLElBQUUsQ0FBTCxFQUFPO0FBQUNzRSxVQUFFd0osS0FBRixDQUFRek4sQ0FBUixFQUFVRSxDQUFWO0FBQWEsT0FBckIsTUFBeUI7QUFBQ3dILFlBQUUxSCxDQUFGLENBQUlBLElBQUVFLENBQUYsQ0FBSUEsSUFBRXdILENBQUY7QUFBSSxTQUFFOEYsS0FBRixDQUFRdE4sQ0FBUixFQUFVWSxFQUFFaUQsQ0FBRixDQUFWLEVBQWUvRCxDQUFmO0FBQWtCLFlBQU1PLEtBQUcsQ0FBSCxJQUFNLENBQUN3QixFQUFFeEIsQ0FBRixJQUFNLEtBQUdRLENBQVYsS0FBZSxDQUEzQixFQUE2QjtBQUFDa0QsUUFBRXdKLEtBQUYsQ0FBUXpOLENBQVIsRUFBVUUsQ0FBVixFQUFhd0gsSUFBRTFILENBQUYsQ0FBSUEsSUFBRUUsQ0FBRixDQUFJQSxJQUFFd0gsQ0FBRixDQUFJLElBQUcsRUFBRTNHLENBQUYsR0FBSSxDQUFQLEVBQVM7QUFBQ0EsWUFBRSxLQUFLOEksRUFBTCxHQUFRLENBQVYsQ0FBWSxFQUFFdEosQ0FBRjtBQUFJO0FBQUM7QUFBQyxVQUFPMEQsRUFBRXNKLE1BQUYsQ0FBU3ZOLENBQVQsQ0FBUDtBQUFtQixVQUFTNFQsS0FBVCxDQUFlMVQsQ0FBZixFQUFpQjtBQUFDLE1BQUlGLElBQUcsS0FBS2dDLENBQUwsR0FBTyxDQUFSLEdBQVcsS0FBS21KLE1BQUwsRUFBWCxHQUF5QixLQUFLM0osS0FBTCxFQUEvQixDQUE0QyxJQUFJaEMsSUFBR1UsRUFBRThCLENBQUYsR0FBSSxDQUFMLEdBQVE5QixFQUFFaUwsTUFBRixFQUFSLEdBQW1CakwsRUFBRXNCLEtBQUYsRUFBekIsQ0FBbUMsSUFBR3hCLEVBQUVzTSxTQUFGLENBQVk5TSxDQUFaLElBQWUsQ0FBbEIsRUFBb0I7QUFBQyxRQUFJUyxJQUFFRCxDQUFOLENBQVFBLElBQUVSLENBQUYsQ0FBSUEsSUFBRVMsQ0FBRjtBQUFJLE9BQUlOLElBQUVLLEVBQUU2VCxlQUFGLEVBQU47QUFBQSxNQUEwQnBVLElBQUVELEVBQUVxVSxlQUFGLEVBQTVCLENBQWdELElBQUdwVSxJQUFFLENBQUwsRUFBTztBQUFDLFdBQU9PLENBQVA7QUFBUyxPQUFHTCxJQUFFRixDQUFMLEVBQU87QUFBQ0EsUUFBRUUsQ0FBRjtBQUFJLE9BQUdGLElBQUUsQ0FBTCxFQUFPO0FBQUNPLE1BQUV5TSxRQUFGLENBQVdoTixDQUFYLEVBQWFPLENBQWIsRUFBZ0JSLEVBQUVpTixRQUFGLENBQVdoTixDQUFYLEVBQWFELENBQWI7QUFBZ0IsVUFBTVEsRUFBRXVQLE1BQUYsS0FBVyxDQUFqQixFQUFtQjtBQUFDLFFBQUcsQ0FBQzVQLElBQUVLLEVBQUU2VCxlQUFGLEVBQUgsSUFBd0IsQ0FBM0IsRUFBNkI7QUFBQzdULFFBQUV5TSxRQUFGLENBQVc5TSxDQUFYLEVBQWFLLENBQWI7QUFBZ0IsU0FBRyxDQUFDTCxJQUFFSCxFQUFFcVUsZUFBRixFQUFILElBQXdCLENBQTNCLEVBQTZCO0FBQUNyVSxRQUFFaU4sUUFBRixDQUFXOU0sQ0FBWCxFQUFhSCxDQUFiO0FBQWdCLFNBQUdRLEVBQUVzTSxTQUFGLENBQVk5TSxDQUFaLEtBQWdCLENBQW5CLEVBQXFCO0FBQUNRLFFBQUVnTCxLQUFGLENBQVF4TCxDQUFSLEVBQVVRLENBQVYsRUFBYUEsRUFBRXlNLFFBQUYsQ0FBVyxDQUFYLEVBQWF6TSxDQUFiO0FBQWdCLEtBQW5ELE1BQXVEO0FBQUNSLFFBQUV3TCxLQUFGLENBQVFoTCxDQUFSLEVBQVVSLENBQVYsRUFBYUEsRUFBRWlOLFFBQUYsQ0FBVyxDQUFYLEVBQWFqTixDQUFiO0FBQWdCO0FBQUMsT0FBR0MsSUFBRSxDQUFMLEVBQU87QUFBQ0QsTUFBRTRNLFFBQUYsQ0FBVzNNLENBQVgsRUFBYUQsQ0FBYjtBQUFnQixVQUFPQSxDQUFQO0FBQVMsVUFBU3NVLFNBQVQsQ0FBbUI3VCxDQUFuQixFQUFxQjtBQUFDLE1BQUdBLEtBQUcsQ0FBTixFQUFRO0FBQUMsV0FBTyxDQUFQO0FBQVMsT0FBSUMsSUFBRSxLQUFLNkosRUFBTCxHQUFROUosQ0FBZDtBQUFBLE1BQWdCRCxJQUFHLEtBQUtnQyxDQUFMLEdBQU8sQ0FBUixHQUFXL0IsSUFBRSxDQUFiLEdBQWUsQ0FBakMsQ0FBbUMsSUFBRyxLQUFLNkIsQ0FBTCxHQUFPLENBQVYsRUFBWTtBQUFDLFFBQUc1QixLQUFHLENBQU4sRUFBUTtBQUFDRixVQUFFLEtBQUssQ0FBTCxJQUFRQyxDQUFWO0FBQVksS0FBckIsTUFBeUI7QUFBQyxXQUFJLElBQUlRLElBQUUsS0FBS3FCLENBQUwsR0FBTyxDQUFqQixFQUFtQnJCLEtBQUcsQ0FBdEIsRUFBd0IsRUFBRUEsQ0FBMUIsRUFBNEI7QUFBQ1QsWUFBRSxDQUFDRSxJQUFFRixDQUFGLEdBQUksS0FBS1MsQ0FBTCxDQUFMLElBQWNSLENBQWhCO0FBQWtCO0FBQUM7QUFBQyxVQUFPRCxDQUFQO0FBQVMsVUFBUytULFlBQVQsQ0FBc0J0VSxDQUF0QixFQUF3QjtBQUFDLE1BQUlXLElBQUVYLEVBQUVpUCxNQUFGLEVBQU4sQ0FBaUIsSUFBSSxLQUFLQSxNQUFMLE1BQWV0TyxDQUFoQixJQUFvQlgsRUFBRThQLE1BQUYsTUFBWSxDQUFuQyxFQUFxQztBQUFDLFdBQU9uRyxXQUFXMkIsSUFBbEI7QUFBdUIsT0FBSTFLLElBQUVaLEVBQUUrQixLQUFGLEVBQU47QUFBQSxNQUFnQmhDLElBQUUsS0FBS2dDLEtBQUwsRUFBbEIsQ0FBK0IsSUFBSWpDLElBQUVvTCxJQUFJLENBQUosQ0FBTjtBQUFBLE1BQWExSyxJQUFFMEssSUFBSSxDQUFKLENBQWY7QUFBQSxNQUFzQnBLLElBQUVvSyxJQUFJLENBQUosQ0FBeEI7QUFBQSxNQUErQm5LLElBQUVtSyxJQUFJLENBQUosQ0FBakMsQ0FBd0MsT0FBTXRLLEVBQUVrUCxNQUFGLE1BQVksQ0FBbEIsRUFBb0I7QUFBQyxXQUFNbFAsRUFBRXFPLE1BQUYsRUFBTixFQUFpQjtBQUFDck8sUUFBRW9NLFFBQUYsQ0FBVyxDQUFYLEVBQWFwTSxDQUFiLEVBQWdCLElBQUdELENBQUgsRUFBSztBQUFDLFlBQUcsQ0FBQ2IsRUFBRW1QLE1BQUYsRUFBRCxJQUFhLENBQUN6TyxFQUFFeU8sTUFBRixFQUFqQixFQUE0QjtBQUFDblAsWUFBRXdTLEtBQUYsQ0FBUSxJQUFSLEVBQWF4UyxDQUFiLEVBQWdCVSxFQUFFK0ssS0FBRixDQUFRdkwsQ0FBUixFQUFVUSxDQUFWO0FBQWEsV0FBRXdNLFFBQUYsQ0FBVyxDQUFYLEVBQWFsTixDQUFiO0FBQWdCLE9BQWhGLE1BQW9GO0FBQUMsWUFBRyxDQUFDVSxFQUFFeU8sTUFBRixFQUFKLEVBQWU7QUFBQ3pPLFlBQUUrSyxLQUFGLENBQVF2TCxDQUFSLEVBQVVRLENBQVY7QUFBYTtBQUFDLFNBQUV3TSxRQUFGLENBQVcsQ0FBWCxFQUFheE0sQ0FBYjtBQUFnQixZQUFNVCxFQUFFa1AsTUFBRixFQUFOLEVBQWlCO0FBQUNsUCxRQUFFaU4sUUFBRixDQUFXLENBQVgsRUFBYWpOLENBQWIsRUFBZ0IsSUFBR1ksQ0FBSCxFQUFLO0FBQUMsWUFBRyxDQUFDRyxFQUFFbU8sTUFBRixFQUFELElBQWEsQ0FBQ2xPLEVBQUVrTyxNQUFGLEVBQWpCLEVBQTRCO0FBQUNuTyxZQUFFd1IsS0FBRixDQUFRLElBQVIsRUFBYXhSLENBQWIsRUFBZ0JDLEVBQUV3SyxLQUFGLENBQVF2TCxDQUFSLEVBQVVlLENBQVY7QUFBYSxXQUFFaU0sUUFBRixDQUFXLENBQVgsRUFBYWxNLENBQWI7QUFBZ0IsT0FBaEYsTUFBb0Y7QUFBQyxZQUFHLENBQUNDLEVBQUVrTyxNQUFGLEVBQUosRUFBZTtBQUFDbE8sWUFBRXdLLEtBQUYsQ0FBUXZMLENBQVIsRUFBVWUsQ0FBVjtBQUFhO0FBQUMsU0FBRWlNLFFBQUYsQ0FBVyxDQUFYLEVBQWFqTSxDQUFiO0FBQWdCLFNBQUdILEVBQUVpTSxTQUFGLENBQVk5TSxDQUFaLEtBQWdCLENBQW5CLEVBQXFCO0FBQUNhLFFBQUUySyxLQUFGLENBQVF4TCxDQUFSLEVBQVVhLENBQVYsRUFBYSxJQUFHRCxDQUFILEVBQUs7QUFBQ2IsVUFBRXlMLEtBQUYsQ0FBUXpLLENBQVIsRUFBVWhCLENBQVY7QUFBYSxTQUFFeUwsS0FBRixDQUFReEssQ0FBUixFQUFVUCxDQUFWO0FBQWEsS0FBbkUsTUFBdUU7QUFBQ1QsUUFBRXdMLEtBQUYsQ0FBUTNLLENBQVIsRUFBVWIsQ0FBVixFQUFhLElBQUdZLENBQUgsRUFBSztBQUFDRyxVQUFFeUssS0FBRixDQUFRekwsQ0FBUixFQUFVZ0IsQ0FBVjtBQUFhLFNBQUV5SyxLQUFGLENBQVEvSyxDQUFSLEVBQVVPLENBQVY7QUFBYTtBQUFDLE9BQUdoQixFQUFFOE0sU0FBRixDQUFZbEQsV0FBV21ELEdBQXZCLEtBQTZCLENBQWhDLEVBQWtDO0FBQUMsV0FBT25ELFdBQVcyQixJQUFsQjtBQUF1QixPQUFHdkssRUFBRThMLFNBQUYsQ0FBWTdNLENBQVosS0FBZ0IsQ0FBbkIsRUFBcUI7QUFBQyxXQUFPZSxFQUFFd1QsUUFBRixDQUFXdlUsQ0FBWCxDQUFQO0FBQXFCLE9BQUdlLEVBQUUrTyxNQUFGLEtBQVcsQ0FBZCxFQUFnQjtBQUFDL08sTUFBRXVSLEtBQUYsQ0FBUXRTLENBQVIsRUFBVWUsQ0FBVjtBQUFhLEdBQTlCLE1BQWtDO0FBQUMsV0FBT0EsQ0FBUDtBQUFTLE9BQUdBLEVBQUUrTyxNQUFGLEtBQVcsQ0FBZCxFQUFnQjtBQUFDLFdBQU8vTyxFQUFFeVQsR0FBRixDQUFNeFUsQ0FBTixDQUFQO0FBQWdCLEdBQWpDLE1BQXFDO0FBQUMsV0FBT2UsQ0FBUDtBQUFTO0FBQUMsS0FBSTBULFlBQVUsQ0FBQyxDQUFELEVBQUcsQ0FBSCxFQUFLLENBQUwsRUFBTyxDQUFQLEVBQVMsRUFBVCxFQUFZLEVBQVosRUFBZSxFQUFmLEVBQWtCLEVBQWxCLEVBQXFCLEVBQXJCLEVBQXdCLEVBQXhCLEVBQTJCLEVBQTNCLEVBQThCLEVBQTlCLEVBQWlDLEVBQWpDLEVBQW9DLEVBQXBDLEVBQXVDLEVBQXZDLEVBQTBDLEVBQTFDLEVBQTZDLEVBQTdDLEVBQWdELEVBQWhELEVBQW1ELEVBQW5ELEVBQXNELEVBQXRELEVBQXlELEVBQXpELEVBQTRELEVBQTVELEVBQStELEVBQS9ELEVBQWtFLEVBQWxFLEVBQXFFLEVBQXJFLEVBQXdFLEdBQXhFLEVBQTRFLEdBQTVFLEVBQWdGLEdBQWhGLEVBQW9GLEdBQXBGLEVBQXdGLEdBQXhGLEVBQTRGLEdBQTVGLEVBQWdHLEdBQWhHLEVBQW9HLEdBQXBHLEVBQXdHLEdBQXhHLEVBQTRHLEdBQTVHLEVBQWdILEdBQWhILEVBQW9ILEdBQXBILEVBQXdILEdBQXhILEVBQTRILEdBQTVILEVBQWdJLEdBQWhJLEVBQW9JLEdBQXBJLEVBQXdJLEdBQXhJLEVBQTRJLEdBQTVJLEVBQWdKLEdBQWhKLEVBQW9KLEdBQXBKLEVBQXdKLEdBQXhKLEVBQTRKLEdBQTVKLEVBQWdLLEdBQWhLLEVBQW9LLEdBQXBLLEVBQXdLLEdBQXhLLEVBQTRLLEdBQTVLLEVBQWdMLEdBQWhMLEVBQW9MLEdBQXBMLEVBQXdMLEdBQXhMLEVBQTRMLEdBQTVMLEVBQWdNLEdBQWhNLEVBQW9NLEdBQXBNLEVBQXdNLEdBQXhNLEVBQTRNLEdBQTVNLEVBQWdOLEdBQWhOLEVBQW9OLEdBQXBOLEVBQXdOLEdBQXhOLEVBQTROLEdBQTVOLEVBQWdPLEdBQWhPLEVBQW9PLEdBQXBPLEVBQXdPLEdBQXhPLEVBQTRPLEdBQTVPLEVBQWdQLEdBQWhQLEVBQW9QLEdBQXBQLEVBQXdQLEdBQXhQLEVBQTRQLEdBQTVQLEVBQWdRLEdBQWhRLEVBQW9RLEdBQXBRLEVBQXdRLEdBQXhRLEVBQTRRLEdBQTVRLEVBQWdSLEdBQWhSLEVBQW9SLEdBQXBSLEVBQXdSLEdBQXhSLEVBQTRSLEdBQTVSLEVBQWdTLEdBQWhTLEVBQW9TLEdBQXBTLEVBQXdTLEdBQXhTLEVBQTRTLEdBQTVTLEVBQWdULEdBQWhULEVBQW9ULEdBQXBULEVBQXdULEdBQXhULEVBQTRULEdBQTVULEVBQWdVLEdBQWhVLEVB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztB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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsbURBQW1EO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEVBQUU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGVBQWU7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEM7QUFDQSxxQkFBcUIsZUFBZTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLFFBQVE7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixZQUFZO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFD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QUN4QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdHQUFxQztBQUM3QyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLHNGQUE0QjtB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QTlDLEVBQXVELE9BQXZELEVBQWdFLE9BQWhFLEVBQXlFLE9BQXpFLENBQTNCOztRQUdJaE4sRyxHQUFBQSxjO1FBQ0ErTSxPLEdBQUFBLGtCO1FBQ0FuUyxJLEdBQUFBLGU7UUFDQXBlLE0sR0FBQUEsaUI7UUFDQW1PLFMsR0FBQUEsb0I7UUFDQWhjLFEsR0FBQUEsbUI7UUFDQXErQixrQixHQUFBQSxrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7a0JDTG9CNWtDLE07O0FBTnhCOzs7Ozs7QUFFQTs7OztBQUllLFNBQVNBLE1BQVQsR0FBa0I7QUFDL0IsU0FBTyxtQkFBUW1hLE9BQVIsQ0FBZ0IsSUFBaEIsRUFBc0IsRUFBdEIsQ0FBUDtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNSRCxJQUFNemUsVUFBVSxjQUFoQixDLFFBQXdDQSxPLEdBQUFBLE8iLCJmaWxlIjoib2lkYy1jbGllbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL3NyYy9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50IH0gZnJvbSAnLi9zcmMvT2lkY0NsaWVudC5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vc3JjL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9zcmMvV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBJbk1lbW9yeVdlYlN0b3JhZ2UgfSBmcm9tICcuL3NyYy9Jbk1lbW9yeVdlYlN0b3JhZ2UuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlciB9IGZyb20gJy4vc3JjL1VzZXJNYW5hZ2VyLmpzJztcclxuaW1wb3J0IHsgQWNjZXNzVG9rZW5FdmVudHMgfSBmcm9tICcuL3NyYy9BY2Nlc3NUb2tlbkV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vc3JjL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IENvcmRvdmFQb3B1cE5hdmlnYXRvciB9IGZyb20gJy4vc3JjL0NvcmRvdmFQb3B1cE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IENvcmRvdmFJRnJhbWVOYXZpZ2F0b3IgfSBmcm9tICcuL3NyYy9Db3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzJztcclxuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9zcmMvVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL3NyYy9TZXNzaW9uTW9uaXRvci5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vc3JjL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL3NyYy9Vc2VyLmpzJztcclxuXHJcbmltcG9ydCB7IFZlcnNpb24gfSBmcm9tICcuL3ZlcnNpb24uanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgVmVyc2lvbixcclxuICAgIExvZyxcclxuICAgIE9pZGNDbGllbnQsXHJcbiAgICBPaWRjQ2xpZW50U2V0dGluZ3MsXHJcbiAgICBXZWJTdG9yYWdlU3RhdGVTdG9yZSxcclxuICAgIEluTWVtb3J5V2ViU3RvcmFnZSxcclxuICAgIFVzZXJNYW5hZ2VyLFxyXG4gICAgQWNjZXNzVG9rZW5FdmVudHMsXHJcbiAgICBNZXRhZGF0YVNlcnZpY2UsXHJcbiAgICBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IsXHJcbiAgICBDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLFxyXG4gICAgQ2hlY2tTZXNzaW9uSUZyYW1lLFxyXG4gICAgVG9rZW5SZXZvY2F0aW9uQ2xpZW50LFxyXG4gICAgU2Vzc2lvbk1vbml0b3IsXHJcbiAgICBHbG9iYWwsXHJcbiAgICBVc2VyXHJcbn07XHJcbiIsIi8qXHJcbiAqIGpzcnNhc2lnbihhbGwpIDguMC4xMiAoMjAxOC0wNC0yMikgKGMpIDIwMTAtMjAxOCBLZW5qaSBVcnVzaGltYSB8IGtqdXIuZ2l0aHViLmNvbS9qc3JzYXNpZ24vbGljZW5zZVxyXG4gKi9cclxuXHJcbnZhciBuYXZpZ2F0b3IgPSB7fTtcclxubmF2aWdhdG9yLnVzZXJBZ2VudCA9IGZhbHNlO1xyXG5cclxudmFyIHdpbmRvdyA9IHt9O1xyXG5cbi8qIVxyXG5Db3B5cmlnaHQgKGMpIDIwMTEsIFlhaG9vISBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkNvZGUgbGljZW5zZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlOlxyXG5odHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1sXHJcbnZlcnNpb246IDIuOS4wXHJcbiovXHJcbmlmKFlBSE9PPT09dW5kZWZpbmVkKXt2YXIgWUFIT089e319WUFIT08ubGFuZz17ZXh0ZW5kOmZ1bmN0aW9uKGcsaCxmKXtpZighaHx8IWcpe3Rocm93IG5ldyBFcnJvcihcIllBSE9PLmxhbmcuZXh0ZW5kIGZhaWxlZCwgcGxlYXNlIGNoZWNrIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQuXCIpfXZhciBkPWZ1bmN0aW9uKCl7fTtkLnByb3RvdHlwZT1oLnByb3RvdHlwZTtnLnByb3RvdHlwZT1uZXcgZCgpO2cucHJvdG90eXBlLmNvbnN0cnVjdG9yPWc7Zy5zdXBlcmNsYXNzPWgucHJvdG90eXBlO2lmKGgucHJvdG90eXBlLmNvbnN0cnVjdG9yPT1PYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yKXtoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ofWlmKGYpe3ZhciBiO2ZvcihiIGluIGYpe2cucHJvdG90eXBlW2JdPWZbYl19dmFyIGU9ZnVuY3Rpb24oKXt9LGM9W1widG9TdHJpbmdcIixcInZhbHVlT2ZcIl07dHJ5e2lmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKXtlPWZ1bmN0aW9uKGosaSl7Zm9yKGI9MDtiPGMubGVuZ3RoO2I9YisxKXt2YXIgbD1jW2JdLGs9aVtsXTtpZih0eXBlb2Ygaz09PVwiZnVuY3Rpb25cIiYmayE9T2JqZWN0LnByb3RvdHlwZVtsXSl7altsXT1rfX19fX1jYXRjaChhKXt9ZShnLnByb3RvdHlwZSxmKX19fTtcbi8qISBDcnlwdG9KUyB2My4xLjIgY29yZS1maXguanNcclxuICogY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbiAqIChjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBjb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiAqIFRISVMgSVMgRklYIG9mICdjb3JlLmpzJyB0byBmaXggSG1hYyBpc3N1ZS5cclxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvaXNzdWVzL2RldGFpbD9pZD04NFxyXG4gKiBodHRwczovL2NyeXB0by1qcy5nb29nbGVjb2RlLmNvbS9zdm4taGlzdG9yeS9yNjY3L2JyYW5jaGVzLzMueC9zcmMvY29yZS5qc1xyXG4gKi9cclxudmFyIENyeXB0b0pTPUNyeXB0b0pTfHwoZnVuY3Rpb24oZSxnKXt2YXIgYT17fTt2YXIgYj1hLmxpYj17fTt2YXIgaj1iLkJhc2U9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe31yZXR1cm57ZXh0ZW5kOmZ1bmN0aW9uKHApe24ucHJvdG90eXBlPXRoaXM7dmFyIG89bmV3IG4oKTtpZihwKXtvLm1peEluKHApfWlmKCFvLmhhc093blByb3BlcnR5KFwiaW5pdFwiKSl7by5pbml0PWZ1bmN0aW9uKCl7by4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fW8uaW5pdC5wcm90b3R5cGU9bztvLiRzdXBlcj10aGlzO3JldHVybiBvfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgbz10aGlzLmV4dGVuZCgpO28uaW5pdC5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIG99LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKHApe2Zvcih2YXIgbyBpbiBwKXtpZihwLmhhc093blByb3BlcnR5KG8pKXt0aGlzW29dPXBbb119fWlmKHAuaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSl7dGhpcy50b1N0cmluZz1wLnRvU3RyaW5nfX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyl9fX0oKSk7dmFyIGw9Yi5Xb3JkQXJyYXk9ai5leHRlbmQoe2luaXQ6ZnVuY3Rpb24obyxuKXtvPXRoaXMud29yZHM9b3x8W107aWYobiE9Zyl7dGhpcy5zaWdCeXRlcz1ufWVsc2V7dGhpcy5zaWdCeXRlcz1vLmxlbmd0aCo0fX0sdG9TdHJpbmc6ZnVuY3Rpb24obil7cmV0dXJuKG58fGgpLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBxPXRoaXMud29yZHM7dmFyIHA9dC53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO3ZhciBzPXQuc2lnQnl0ZXM7dGhpcy5jbGFtcCgpO2lmKG4lNCl7Zm9yKHZhciByPTA7cjxzO3IrKyl7dmFyIG89KHBbcj4+PjJdPj4+KDI0LShyJTQpKjgpKSYyNTU7cVsobityKT4+PjJdfD1vPDwoMjQtKChuK3IpJTQpKjgpfX1lbHNle2Zvcih2YXIgcj0wO3I8cztyKz00KXtxWyhuK3IpPj4+Ml09cFtyPj4+Ml19fXRoaXMuc2lnQnl0ZXMrPXM7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKCl7dmFyIG89dGhpcy53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO29bbj4+PjJdJj00Mjk0OTY3Mjk1PDwoMzItKG4lNCkqOCk7by5sZW5ndGg9ZS5jZWlsKG4vNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24ud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKTtyZXR1cm4gbn0scmFuZG9tOmZ1bmN0aW9uKHApe3ZhciBvPVtdO2Zvcih2YXIgbj0wO248cDtuKz00KXtvLnB1c2goKGUucmFuZG9tKCkqNDI5NDk2NzI5Nil8MCl9cmV0dXJuIG5ldyBsLmluaXQobyxwKX19KTt2YXIgbT1hLmVuYz17fTt2YXIgaD1tLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKHApe3ZhciByPXAud29yZHM7dmFyIG89cC5zaWdCeXRlczt2YXIgcT1bXTtmb3IodmFyIG49MDtuPG87bisrKXt2YXIgcz0ocltuPj4+Ml0+Pj4oMjQtKG4lNCkqOCkpJjI1NTtxLnB1c2goKHM+Pj40KS50b1N0cmluZygxNikpO3EucHVzaCgocyYxNSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcS5qb2luKFwiXCIpfSxwYXJzZTpmdW5jdGlvbihwKXt2YXIgbj1wLmxlbmd0aDt2YXIgcT1bXTtmb3IodmFyIG89MDtvPG47bys9Mil7cVtvPj4+M118PXBhcnNlSW50KHAuc3Vic3RyKG8sMiksMTYpPDwoMjQtKG8lOCkqNCl9cmV0dXJuIG5ldyBsLmluaXQocSxuLzIpfX07dmFyIGQ9bS5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihxKXt2YXIgcj1xLndvcmRzO3ZhciBwPXEuc2lnQnl0ZXM7dmFyIG49W107Zm9yKHZhciBvPTA7bzxwO28rKyl7dmFyIHM9KHJbbz4+PjJdPj4+KDI0LShvJTQpKjgpKSYyNTU7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocykpfXJldHVybiBuLmpvaW4oXCJcIil9LHBhcnNlOmZ1bmN0aW9uKHApe3ZhciBuPXAubGVuZ3RoO3ZhciBxPVtdO2Zvcih2YXIgbz0wO288bjtvKyspe3Fbbz4+PjJdfD0ocC5jaGFyQ29kZUF0KG8pJjI1NSk8PCgyNC0obyU0KSo4KX1yZXR1cm4gbmV3IGwuaW5pdChxLG4pfX07dmFyIGM9bS5VdGY4PXtzdHJpbmdpZnk6ZnVuY3Rpb24obil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGQuc3RyaW5naWZ5KG4pKSl9Y2F0Y2gobyl7dGhyb3cgbmV3IEVycm9yKFwiTWFsZm9ybWVkIFVURi04IGRhdGFcIil9fSxwYXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gZC5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQobikpKX19O3ZhciBpPWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobT1qLmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBsLmluaXQoKTt0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24obil7aWYodHlwZW9mIG49PVwic3RyaW5nXCIpe249Yy5wYXJzZShuKX10aGlzLl9kYXRhLmNvbmNhdChuKTt0aGlzLl9uRGF0YUJ5dGVzKz1uLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbih3KXt2YXIgcT10aGlzLl9kYXRhO3ZhciB4PXEud29yZHM7dmFyIG49cS5zaWdCeXRlczt2YXIgdD10aGlzLmJsb2NrU2l6ZTt2YXIgdj10KjQ7dmFyIHU9bi92O2lmKHcpe3U9ZS5jZWlsKHUpfWVsc2V7dT1lLm1heCgodXwwKS10aGlzLl9taW5CdWZmZXJTaXplLDApfXZhciBzPXUqdDt2YXIgcj1lLm1pbihzKjQsbik7aWYocyl7Zm9yKHZhciBwPTA7cDxzO3ArPXQpe3RoaXMuX2RvUHJvY2Vzc0Jsb2NrKHgscCl9dmFyIG89eC5zcGxpY2UoMCxzKTtxLnNpZ0J5dGVzLT1yfXJldHVybiBuZXcgbC5pbml0KG8scil9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24uX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpO3JldHVybiBufSxfbWluQnVmZmVyU2l6ZTowfSk7dmFyIGY9Yi5IYXNoZXI9aS5leHRlbmQoe2NmZzpqLmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24obil7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKG4pO3RoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtpLnJlc2V0LmNhbGwodGhpcyk7dGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24obil7dGhpcy5fYXBwZW5kKG4pO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24obil7aWYobil7dGhpcy5fYXBwZW5kKG4pfXZhciBvPXRoaXMuX2RvRmluYWxpemUoKTtyZXR1cm4gb30sYmxvY2tTaXplOjUxMi8zMixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihwLG8pe3JldHVybiBuZXcgbi5pbml0KG8pLmZpbmFsaXplKHApfX0sX2NyZWF0ZUhtYWNIZWxwZXI6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHAsbyl7cmV0dXJuIG5ldyBrLkhNQUMuaW5pdChuLG8pLmZpbmFsaXplKHApfX19KTt2YXIgaz1hLmFsZ289e307cmV0dXJuIGF9KE1hdGgpKTtcbi8qXHJcbkNyeXB0b0pTIHYzLjEuMiB4NjQtY29yZS1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbihnKXt2YXIgYT1DcnlwdG9KUyxmPWEubGliLGU9Zi5CYXNlLGg9Zi5Xb3JkQXJyYXksYT1hLng2ND17fTthLldvcmQ9ZS5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oYixjKXt0aGlzLmhpZ2g9Yjt0aGlzLmxvdz1jfX0pO2EuV29yZEFycmF5PWUuZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKGIsYyl7Yj10aGlzLndvcmRzPWJ8fFtdO3RoaXMuc2lnQnl0ZXM9YyE9Zz9jOjgqYi5sZW5ndGh9LHRvWDMyOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMud29yZHMsYz1iLmxlbmd0aCxhPVtdLGQ9MDtkPGM7ZCsrKXt2YXIgZT1iW2RdO2EucHVzaChlLmhpZ2gpO2EucHVzaChlLmxvdyl9cmV0dXJuIGguY3JlYXRlKGEsdGhpcy5zaWdCeXRlcyl9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWUuY2xvbmUuY2FsbCh0aGlzKSxjPWIud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxhPWMubGVuZ3RoLGQ9MDtkPGE7ZCsrKWNbZF09Y1tkXS5jbG9uZSgpO3JldHVybiBifX0pfSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgZW5jLWJhc2U2NC5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7dmFyIGg9Q3J5cHRvSlMsaj1oLmxpYi5Xb3JkQXJyYXk7aC5lbmMuQmFzZTY0PXtzdHJpbmdpZnk6ZnVuY3Rpb24oYil7dmFyIGU9Yi53b3JkcyxmPWIuc2lnQnl0ZXMsYz10aGlzLl9tYXA7Yi5jbGFtcCgpO2I9W107Zm9yKHZhciBhPTA7YTxmO2ErPTMpZm9yKHZhciBkPShlW2E+Pj4yXT4+PjI0LTgqKGElNCkmMjU1KTw8MTZ8KGVbYSsxPj4+Ml0+Pj4yNC04KigoYSsxKSU0KSYyNTUpPDw4fGVbYSsyPj4+Ml0+Pj4yNC04KigoYSsyKSU0KSYyNTUsZz0wOzQ+ZyYmYSswLjc1Kmc8ZjtnKyspYi5wdXNoKGMuY2hhckF0KGQ+Pj42KigzLWcpJjYzKSk7aWYoZT1jLmNoYXJBdCg2NCkpZm9yKDtiLmxlbmd0aCU0OyliLnB1c2goZSk7cmV0dXJuIGIuam9pbihcIlwiKX0scGFyc2U6ZnVuY3Rpb24oYil7dmFyIGU9Yi5sZW5ndGgsZj10aGlzLl9tYXAsYz1mLmNoYXJBdCg2NCk7YyYmKGM9Yi5pbmRleE9mKGMpLC0xIT1jJiYoZT1jKSk7Zm9yKHZhciBjPVtdLGE9MCxkPTA7ZDxcclxuZTtkKyspaWYoZCU0KXt2YXIgZz1mLmluZGV4T2YoYi5jaGFyQXQoZC0xKSk8PDIqKGQlNCksaD1mLmluZGV4T2YoYi5jaGFyQXQoZCkpPj4+Ni0yKihkJTQpO2NbYT4+PjJdfD0oZ3xoKTw8MjQtOCooYSU0KTthKyt9cmV0dXJuIGouY3JlYXRlKGMsYSl9LF9tYXA6XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwifX0pKCk7XHJcblxuLypcclxuQ3J5cHRvSlMgdjMuMS4yIHNoYTI1Ni1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbihrKXtmb3IodmFyIGc9Q3J5cHRvSlMsaD1nLmxpYix2PWguV29yZEFycmF5LGo9aC5IYXNoZXIsaD1nLmFsZ28scz1bXSx0PVtdLHU9ZnVuY3Rpb24ocSl7cmV0dXJuIDQyOTQ5NjcyOTYqKHEtKHF8MCkpfDB9LGw9MixiPTA7NjQ+Yjspe3ZhciBkO2E6e2Q9bDtmb3IodmFyIHc9ay5zcXJ0KGQpLHI9MjtyPD13O3IrKylpZighKGQlcikpe2Q9ITE7YnJlYWsgYX1kPSEwfWQmJig4PmImJihzW2JdPXUoay5wb3cobCwwLjUpKSksdFtiXT11KGsucG93KGwsMS8zKSksYisrKTtsKyt9dmFyIG49W10saD1oLlNIQTI1Nj1qLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB2LmluaXQocy5zbGljZSgwKSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihxLGgpe2Zvcih2YXIgYT10aGlzLl9oYXNoLndvcmRzLGM9YVswXSxkPWFbMV0sYj1hWzJdLGs9YVszXSxmPWFbNF0sZz1hWzVdLGo9YVs2XSxsPWFbN10sZT0wOzY0PmU7ZSsrKXtpZigxNj5lKW5bZV09XHJcbnFbaCtlXXwwO2Vsc2V7dmFyIG09bltlLTE1XSxwPW5bZS0yXTtuW2VdPSgobTw8MjV8bT4+PjcpXihtPDwxNHxtPj4+MTgpXm0+Pj4zKStuW2UtN10rKChwPDwxNXxwPj4+MTcpXihwPDwxM3xwPj4+MTkpXnA+Pj4xMCkrbltlLTE2XX1tPWwrKChmPDwyNnxmPj4+NileKGY8PDIxfGY+Pj4xMSleKGY8PDd8Zj4+PjI1KSkrKGYmZ15+ZiZqKSt0W2VdK25bZV07cD0oKGM8PDMwfGM+Pj4yKV4oYzw8MTl8Yz4+PjEzKV4oYzw8MTB8Yz4+PjIyKSkrKGMmZF5jJmJeZCZiKTtsPWo7aj1nO2c9ZjtmPWsrbXwwO2s9YjtiPWQ7ZD1jO2M9bStwfDB9YVswXT1hWzBdK2N8MDthWzFdPWFbMV0rZHwwO2FbMl09YVsyXStifDA7YVszXT1hWzNdK2t8MDthWzRdPWFbNF0rZnwwO2FbNV09YVs1XStnfDA7YVs2XT1hWzZdK2p8MDthWzddPWFbN10rbHwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuX2RhdGEsYj1kLndvcmRzLGE9OCp0aGlzLl9uRGF0YUJ5dGVzLGM9OCpkLnNpZ0J5dGVzO1xyXG5iW2M+Pj41XXw9MTI4PDwyNC1jJTMyO2JbKGMrNjQ+Pj45PDw0KSsxNF09ay5mbG9vcihhLzQyOTQ5NjcyOTYpO2JbKGMrNjQ+Pj45PDw0KSsxNV09YTtkLnNpZ0J5dGVzPTQqYi5sZW5ndGg7dGhpcy5fcHJvY2VzcygpO3JldHVybiB0aGlzLl9oYXNofSxjbG9uZTpmdW5jdGlvbigpe3ZhciBiPWouY2xvbmUuY2FsbCh0aGlzKTtiLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYn19KTtnLlNIQTI1Nj1qLl9jcmVhdGVIZWxwZXIoaCk7Zy5IbWFjU0hBMjU2PWouX2NyZWF0ZUhtYWNIZWxwZXIoaCl9KShNYXRoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhNTEyLW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe3JldHVybiBkLmNyZWF0ZS5hcHBseShkLGFyZ3VtZW50cyl9Zm9yKHZhciBuPUNyeXB0b0pTLHI9bi5saWIuSGFzaGVyLGU9bi54NjQsZD1lLldvcmQsVD1lLldvcmRBcnJheSxlPW4uYWxnbyxlYT1bYSgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLGEoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLGEoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxhKDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksYSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksYSgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLGEoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxhKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksYSgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLGEoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLGEoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLGEoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxhKDE5MjUwNzgzODgsNDA2ODE4MjM4MyksYSgyMTYyMDc4MjA2LDk5MTMzNjExMyksYSgyNjE0ODg4MTAzLDYzMzgwMzMxNyksXHJcbmEoMzI0ODIyMjU4MCwzNDc5Nzc0ODY4KSxhKDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCksYSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksYSgyNjQzNDcwNzgsMjM0MTI2Mjc3MyksYSg2MDQ4MDc2MjgsMjAwNzgwMDkzMyksYSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksYSgxMjQ5MTUwMTIyLDE4NTY0MzEyMzUpLGEoMTU1NTA4MTY5MiwzMTc1MjE4MTMyKSxhKDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksYSgyNTU0MjIwODgyLDM5OTk3MTkzMzkpLGEoMjgyMTgzNDM0OSw3NjY3ODQwMTYpLGEoMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxhKDMyMTAzMTM2NzEsMzIwMzMzNzk1NiksYSgzMzM2NTcxODkxLDEwMzQ0NTcwMjYpLGEoMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxhKDExMzkyNjk5MywzNzU4MzI2MzgzKSxhKDMzODI0MTg5NSwxNjg3MTc5MzYpLGEoNjY2MzA3MjA1LDExODgxNzk5NjQpLGEoNzczNTI5OTEyLDE1NDYwNDU3MzQpLGEoMTI5NDc1NzM3MiwxNTIyODA1NDg1KSxhKDEzOTYxODIyOTEsXHJcbjI2NDM4MzM4MjMpLGEoMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxhKDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCksYSgyMTc3MDI2MzUwLDEyMDY3NTkxNDIpLGEoMjQ1Njk1NjAzNywzNDQwNzc2MjcpLGEoMjczMDQ4NTkyMSwxMjkwODYzNDYwKSxhKDI4MjAzMDI0MTEsMzE1ODQ1NDI3MyksYSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLGEoMzM0NTc2NDc3MSwxMDYyMTcwMDgpLGEoMzUxNjA2NTgxNywzNjA2MDA4MzQ0KSxhKDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksYSg0MDk0NTcxOTA5LDE0NjcwMzE1OTQpLGEoMjc1NDIzMzQ0LDg1MTE2OTcyMCksYSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksYSg1MDY5NDg2MTYsMTM2MzI1ODE5NSksYSg2NTkwNjA1NTYsMzc1MDY4NTU5MyksYSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksYSg5NTgxMzk1NzEsMzMxODMwNzQyNyksYSgxMzIyODIyMjE4LDM4MTI3MjM0MDMpLGEoMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxhKDE3NDc4NzM3NzksMzYwMjAzNjg5OSksXHJcbmEoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxhKDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksYSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLGEoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLGEoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLGEoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxhKDMyMDQwMzE0NzksMjk5OTM1MTU3MyksYSgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLGEoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxhKDM1MTUyNjcyNzEsNTY2MjgwNzExKSxhKDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksYSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLGEoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLGEoMTc0MjkyNDIxLDI3MzEwNTUyNzApLGEoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLGEoNDYwMzkzMjY5LDMyMDYyMDMxNSksYSg2ODU0NzE3MzMsNTg3NDk2ODM2KSxhKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxhKDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxhKDExMjYwMDA1ODAsMjYxODI5NzY3NiksYSgxMjg4MDMzNDcwLFxyXG4zNDA5ODU1MTU4KSxhKDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksYSgxNjA3MTY3OTE1LDk4NzE2NzQ2OCksYSgxODE2NDAyMzE2LDEyNDYxODk1OTEpXSx2PVtdLHc9MDs4MD53O3crKyl2W3ddPWEoKTtlPWUuU0hBNTEyPXIuZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IFQuaW5pdChbbmV3IGQuaW5pdCgxNzc5MDMzNzAzLDQwODkyMzU3MjApLG5ldyBkLmluaXQoMzE0NDEzNDI3NywyMjI3ODczNTk1KSxuZXcgZC5pbml0KDEwMTM5MDQyNDIsNDI3MTE3NTcyMyksbmV3IGQuaW5pdCgyNzczNDgwNzYyLDE1OTU3NTAxMjkpLG5ldyBkLmluaXQoMTM1OTg5MzExOSwyOTE3NTY1MTM3KSxuZXcgZC5pbml0KDI2MDA4MjI5MjQsNzI1NTExMTk5KSxuZXcgZC5pbml0KDUyODczNDYzNSw0MjE1Mzg5NTQ3KSxuZXcgZC5pbml0KDE1NDE0NTkyMjUsMzI3MDMzMjA5KV0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oYSxkKXtmb3IodmFyIGY9dGhpcy5faGFzaC53b3JkcyxcclxuRj1mWzBdLGU9ZlsxXSxuPWZbMl0scj1mWzNdLEc9Zls0XSxIPWZbNV0sST1mWzZdLGY9Zls3XSx3PUYuaGlnaCxKPUYubG93LFg9ZS5oaWdoLEs9ZS5sb3csWT1uLmhpZ2gsTD1uLmxvdyxaPXIuaGlnaCxNPXIubG93LCQ9Ry5oaWdoLE49Ry5sb3csYWE9SC5oaWdoLE89SC5sb3csYmE9SS5oaWdoLFA9SS5sb3csY2E9Zi5oaWdoLFE9Zi5sb3csaz13LGc9Six6PVgseD1LLEE9WSx5PUwsVT1aLEI9TSxsPSQsaD1OLFI9YWEsQz1PLFM9YmEsRD1QLFY9Y2EsRT1RLG09MDs4MD5tO20rKyl7dmFyIHM9dlttXTtpZigxNj5tKXZhciBqPXMuaGlnaD1hW2QrMiptXXwwLGI9cy5sb3c9YVtkKzIqbSsxXXwwO2Vsc2V7dmFyIGo9dlttLTE1XSxiPWouaGlnaCxwPWoubG93LGo9KGI+Pj4xfHA8PDMxKV4oYj4+Pjh8cDw8MjQpXmI+Pj43LHA9KHA+Pj4xfGI8PDMxKV4ocD4+Pjh8Yjw8MjQpXihwPj4+N3xiPDwyNSksdT12W20tMl0sYj11LmhpZ2gsYz11Lmxvdyx1PShiPj4+MTl8Yzw8MTMpXihiPDxcclxuM3xjPj4+MjkpXmI+Pj42LGM9KGM+Pj4xOXxiPDwxMyleKGM8PDN8Yj4+PjI5KV4oYz4+PjZ8Yjw8MjYpLGI9dlttLTddLFc9Yi5oaWdoLHQ9dlttLTE2XSxxPXQuaGlnaCx0PXQubG93LGI9cCtiLmxvdyxqPWorVysoYj4+PjA8cD4+PjA/MTowKSxiPWIrYyxqPWordSsoYj4+PjA8Yz4+PjA/MTowKSxiPWIrdCxqPWorcSsoYj4+PjA8dD4+PjA/MTowKTtzLmhpZ2g9ajtzLmxvdz1ifXZhciBXPWwmUl5+bCZTLHQ9aCZDXn5oJkQscz1rJnpeayZBXnomQSxUPWcmeF5nJnleeCZ5LHA9KGs+Pj4yOHxnPDw0KV4oazw8MzB8Zz4+PjIpXihrPDwyNXxnPj4+NyksdT0oZz4+PjI4fGs8PDQpXihnPDwzMHxrPj4+MileKGc8PDI1fGs+Pj43KSxjPWVhW21dLGZhPWMuaGlnaCxkYT1jLmxvdyxjPUUrKChoPj4+MTR8bDw8MTgpXihoPj4+MTh8bDw8MTQpXihoPDwyM3xsPj4+OSkpLHE9VisoKGw+Pj4xNHxoPDwxOCleKGw+Pj4xOHxoPDwxNCleKGw8PDIzfGg+Pj45KSkrKGM+Pj4wPEU+Pj4wPzE6XHJcbjApLGM9Yyt0LHE9cStXKyhjPj4+MDx0Pj4+MD8xOjApLGM9YytkYSxxPXErZmErKGM+Pj4wPGRhPj4+MD8xOjApLGM9YytiLHE9cStqKyhjPj4+MDxiPj4+MD8xOjApLGI9dStULHM9cCtzKyhiPj4+MDx1Pj4+MD8xOjApLFY9UyxFPUQsUz1SLEQ9QyxSPWwsQz1oLGg9QitjfDAsbD1VK3ErKGg+Pj4wPEI+Pj4wPzE6MCl8MCxVPUEsQj15LEE9eix5PXgsej1rLHg9ZyxnPWMrYnwwLGs9cStzKyhnPj4+MDxjPj4+MD8xOjApfDB9Sj1GLmxvdz1KK2c7Ri5oaWdoPXcraysoSj4+PjA8Zz4+PjA/MTowKTtLPWUubG93PUsreDtlLmhpZ2g9WCt6KyhLPj4+MDx4Pj4+MD8xOjApO0w9bi5sb3c9TCt5O24uaGlnaD1ZK0ErKEw+Pj4wPHk+Pj4wPzE6MCk7TT1yLmxvdz1NK0I7ci5oaWdoPVorVSsoTT4+PjA8Qj4+PjA/MTowKTtOPUcubG93PU4raDtHLmhpZ2g9JCtsKyhOPj4+MDxoPj4+MD8xOjApO089SC5sb3c9TytDO0guaGlnaD1hYStSKyhPPj4+MDxDPj4+MD8xOjApO1A9SS5sb3c9UCtEO1xyXG5JLmhpZ2g9YmErUysoUD4+PjA8RD4+PjA/MTowKTtRPWYubG93PVErRTtmLmhpZ2g9Y2ErVisoUT4+PjA8RT4+PjA/MTowKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9kYXRhLGQ9YS53b3JkcyxmPTgqdGhpcy5fbkRhdGFCeXRlcyxlPTgqYS5zaWdCeXRlcztkW2U+Pj41XXw9MTI4PDwyNC1lJTMyO2RbKGUrMTI4Pj4+MTA8PDUpKzMwXT1NYXRoLmZsb29yKGYvNDI5NDk2NzI5Nik7ZFsoZSsxMjg+Pj4xMDw8NSkrMzFdPWY7YS5zaWdCeXRlcz00KmQubGVuZ3RoO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpcy5faGFzaC50b1gzMigpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBhPXIuY2xvbmUuY2FsbCh0aGlzKTthLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYX0sYmxvY2tTaXplOjMyfSk7bi5TSEE1MTI9ci5fY3JlYXRlSGVscGVyKGUpO24uSG1hY1NIQTUxMj1yLl9jcmVhdGVIbWFjSGVscGVyKGUpfSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhMzg0LW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7dmFyIGM9Q3J5cHRvSlMsYT1jLng2NCxiPWEuV29yZCxlPWEuV29yZEFycmF5LGE9Yy5hbGdvLGQ9YS5TSEE1MTIsYT1hLlNIQTM4ND1kLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBlLmluaXQoW25ldyBiLmluaXQoMzQxODA3MDM2NSwzMjM4MzcxMDMyKSxuZXcgYi5pbml0KDE2NTQyNzAyNTAsOTE0MTUwNjYzKSxuZXcgYi5pbml0KDI0Mzg1MjkzNzAsODEyNzAyOTk5KSxuZXcgYi5pbml0KDM1NTQ2MjM2MCw0MTQ0OTEyNjk3KSxuZXcgYi5pbml0KDE3MzE0MDU0MTUsNDI5MDc3NTg1NyksbmV3IGIuaW5pdCgyMzk0MTgwMjMxLDE3NTA2MDMwMjUpLG5ldyBiLmluaXQoMzY3NTAwODUyNSwxNjk0MDc2ODM5KSxuZXcgYi5pbml0KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCldKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT1kLl9kb0ZpbmFsaXplLmNhbGwodGhpcyk7YS5zaWdCeXRlcy09MTY7cmV0dXJuIGF9fSk7Yy5TSEEzODQ9XHJcbmQuX2NyZWF0ZUhlbHBlcihhKTtjLkhtYWNTSEEzODQ9ZC5fY3JlYXRlSG1hY0hlbHBlcihhKX0pKCk7XHJcblxuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG52YXIgYjY0bWFwPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO3ZhciBiNjRwYWQ9XCI9XCI7ZnVuY3Rpb24gaGV4MmI2NChkKXt2YXIgYjt2YXIgZTt2YXIgYT1cIlwiO2ZvcihiPTA7YiszPD1kLmxlbmd0aDtiKz0zKXtlPXBhcnNlSW50KGQuc3Vic3RyaW5nKGIsYiszKSwxNik7YSs9YjY0bWFwLmNoYXJBdChlPj42KStiNjRtYXAuY2hhckF0KGUmNjMpfWlmKGIrMT09ZC5sZW5ndGgpe2U9cGFyc2VJbnQoZC5zdWJzdHJpbmcoYixiKzEpLDE2KTthKz1iNjRtYXAuY2hhckF0KGU8PDIpfWVsc2V7aWYoYisyPT1kLmxlbmd0aCl7ZT1wYXJzZUludChkLnN1YnN0cmluZyhiLGIrMiksMTYpO2ErPWI2NG1hcC5jaGFyQXQoZT4+MikrYjY0bWFwLmNoYXJBdCgoZSYzKTw8NCl9fWlmKGI2NHBhZCl7d2hpbGUoKGEubGVuZ3RoJjMpPjApe2ErPWI2NHBhZH19cmV0dXJuIGF9ZnVuY3Rpb24gYjY0dG9oZXgoZil7dmFyIGQ9XCJcIjt2YXIgZTt2YXIgYj0wO3ZhciBjO3ZhciBhO2ZvcihlPTA7ZTxmLmxlbmd0aDsrK2Upe2lmKGYuY2hhckF0KGUpPT1iNjRwYWQpe2JyZWFrfWE9YjY0bWFwLmluZGV4T2YoZi5jaGFyQXQoZSkpO2lmKGE8MCl7Y29udGludWV9aWYoYj09MCl7ZCs9aW50MmNoYXIoYT4+Mik7Yz1hJjM7Yj0xfWVsc2V7aWYoYj09MSl7ZCs9aW50MmNoYXIoKGM8PDIpfChhPj40KSk7Yz1hJjE1O2I9Mn1lbHNle2lmKGI9PTIpe2QrPWludDJjaGFyKGMpO2QrPWludDJjaGFyKGE+PjIpO2M9YSYzO2I9M31lbHNle2QrPWludDJjaGFyKChjPDwyKXwoYT4+NCkpO2QrPWludDJjaGFyKGEmMTUpO2I9MH19fX1pZihiPT0xKXtkKz1pbnQyY2hhcihjPDwyKX1yZXR1cm4gZH1mdW5jdGlvbiBiNjR0b0JBKGUpe3ZhciBkPWI2NHRvaGV4KGUpO3ZhciBjO3ZhciBiPW5ldyBBcnJheSgpO2ZvcihjPTA7MipjPGQubGVuZ3RoOysrYyl7YltjXT1wYXJzZUludChkLnN1YnN0cmluZygyKmMsMipjKzIpLDE2KX1yZXR1cm4gYn07XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbnZhciBkYml0czt2YXIgY2FuYXJ5PTI0NDgzNzgxNDA5NDU5MDt2YXIgal9sbT0oKGNhbmFyeSYxNjc3NzIxNSk9PTE1NzE1MDcwKTtmdW5jdGlvbiBCaWdJbnRlZ2VyKGUsZCxmKXtpZihlIT1udWxsKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7dGhpcy5mcm9tTnVtYmVyKGUsZCxmKX1lbHNle2lmKGQ9PW51bGwmJlwic3RyaW5nXCIhPXR5cGVvZiBlKXt0aGlzLmZyb21TdHJpbmcoZSwyNTYpfWVsc2V7dGhpcy5mcm9tU3RyaW5nKGUsZCl9fX19ZnVuY3Rpb24gbmJpKCl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKG51bGwpfWZ1bmN0aW9uIGFtMShmLGEsYixlLGgsZyl7d2hpbGUoLS1nPj0wKXt2YXIgZD1hKnRoaXNbZisrXStiW2VdK2g7aD1NYXRoLmZsb29yKGQvNjcxMDg4NjQpO2JbZSsrXT1kJjY3MTA4ODYzfXJldHVybiBofWZ1bmN0aW9uIGFtMihmLHEscixlLG8sYSl7dmFyIGs9cSYzMjc2NyxwPXE+PjE1O3doaWxlKC0tYT49MCl7dmFyIGQ9dGhpc1tmXSYzMjc2Nzt2YXIgZz10aGlzW2YrK10+PjE1O3ZhciBiPXAqZCtnKms7ZD1rKmQrKChiJjMyNzY3KTw8MTUpK3JbZV0rKG8mMTA3Mzc0MTgyMyk7bz0oZD4+PjMwKSsoYj4+PjE1KStwKmcrKG8+Pj4zMCk7cltlKytdPWQmMTA3Mzc0MTgyM31yZXR1cm4gb31mdW5jdGlvbiBhbTMoZixxLHIsZSxvLGEpe3ZhciBrPXEmMTYzODMscD1xPj4xNDt3aGlsZSgtLWE+PTApe3ZhciBkPXRoaXNbZl0mMTYzODM7dmFyIGc9dGhpc1tmKytdPj4xNDt2YXIgYj1wKmQrZyprO2Q9aypkKygoYiYxNjM4Myk8PDE0KStyW2VdK287bz0oZD4+MjgpKyhiPj4xNCkrcCpnO3JbZSsrXT1kJjI2ODQzNTQ1NX1yZXR1cm4gb31pZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWU9PVwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCIpKXtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbT1hbTI7ZGJpdHM9MzB9ZWxzZXtpZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWUhPVwiTmV0c2NhcGVcIikpe0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMTtkYml0cz0yNn1lbHNle0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMztkYml0cz0yOH19QmlnSW50ZWdlci5wcm90b3R5cGUuREI9ZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRE09KCgxPDxkYml0cyktMSk7QmlnSW50ZWdlci5wcm90b3R5cGUuRFY9KDE8PGRiaXRzKTt2YXIgQklfRlA9NTI7QmlnSW50ZWdlci5wcm90b3R5cGUuRlY9TWF0aC5wb3coMixCSV9GUCk7QmlnSW50ZWdlci5wcm90b3R5cGUuRjE9QklfRlAtZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRjI9MipkYml0cy1CSV9GUDt2YXIgQklfUk09XCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjt2YXIgQklfUkM9bmV3IEFycmF5KCk7dmFyIHJyLHZ2O3JyPVwiMFwiLmNoYXJDb2RlQXQoMCk7Zm9yKHZ2PTA7dnY8PTk7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJhXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJBXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9ZnVuY3Rpb24gaW50MmNoYXIoYSl7cmV0dXJuIEJJX1JNLmNoYXJBdChhKX1mdW5jdGlvbiBpbnRBdChiLGEpe3ZhciBkPUJJX1JDW2IuY2hhckNvZGVBdChhKV07cmV0dXJuKGQ9PW51bGwpPy0xOmR9ZnVuY3Rpb24gYm5wQ29weVRvKGIpe2Zvcih2YXIgYT10aGlzLnQtMTthPj0wOy0tYSl7YlthXT10aGlzW2FdfWIudD10aGlzLnQ7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBGcm9tSW50KGEpe3RoaXMudD0xO3RoaXMucz0oYTwwKT8tMTowO2lmKGE+MCl7dGhpc1swXT1hfWVsc2V7aWYoYTwtMSl7dGhpc1swXT1hK3RoaXMuRFZ9ZWxzZXt0aGlzLnQ9MH19fWZ1bmN0aW9uIG5idihhKXt2YXIgYj1uYmkoKTtiLmZyb21JbnQoYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5wRnJvbVN0cmluZyhoLGMpe3ZhciBlO2lmKGM9PTE2KXtlPTR9ZWxzZXtpZihjPT04KXtlPTN9ZWxzZXtpZihjPT0yNTYpe2U9OH1lbHNle2lmKGM9PTIpe2U9MX1lbHNle2lmKGM9PTMyKXtlPTV9ZWxzZXtpZihjPT00KXtlPTJ9ZWxzZXt0aGlzLmZyb21SYWRpeChoLGMpO3JldHVybn19fX19fXRoaXMudD0wO3RoaXMucz0wO3ZhciBnPWgubGVuZ3RoLGQ9ZmFsc2UsZj0wO3doaWxlKC0tZz49MCl7dmFyIGE9KGU9PTgpP2hbZ10mMjU1OmludEF0KGgsZyk7aWYoYTwwKXtpZihoLmNoYXJBdChnKT09XCItXCIpe2Q9dHJ1ZX1jb250aW51ZX1kPWZhbHNlO2lmKGY9PTApe3RoaXNbdGhpcy50KytdPWF9ZWxzZXtpZihmK2U+dGhpcy5EQil7dGhpc1t0aGlzLnQtMV18PShhJigoMTw8KHRoaXMuREItZikpLTEpKTw8Zjt0aGlzW3RoaXMudCsrXT0oYT4+KHRoaXMuREItZikpfWVsc2V7dGhpc1t0aGlzLnQtMV18PWE8PGZ9fWYrPWU7aWYoZj49dGhpcy5EQil7Zi09dGhpcy5EQn19aWYoZT09OCYmKGhbMF0mMTI4KSE9MCl7dGhpcy5zPS0xO2lmKGY+MCl7dGhpc1t0aGlzLnQtMV18PSgoMTw8KHRoaXMuREItZikpLTEpPDxmfX10aGlzLmNsYW1wKCk7aWYoZCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyl9fWZ1bmN0aW9uIGJucENsYW1wKCl7dmFyIGE9dGhpcy5zJnRoaXMuRE07d2hpbGUodGhpcy50PjAmJnRoaXNbdGhpcy50LTFdPT1hKXstLXRoaXMudH19ZnVuY3Rpb24gYm5Ub1N0cmluZyhjKXtpZih0aGlzLnM8MCl7cmV0dXJuXCItXCIrdGhpcy5uZWdhdGUoKS50b1N0cmluZyhjKX12YXIgZTtpZihjPT0xNil7ZT00fWVsc2V7aWYoYz09OCl7ZT0zfWVsc2V7aWYoYz09Mil7ZT0xfWVsc2V7aWYoYz09MzIpe2U9NX1lbHNle2lmKGM9PTQpe2U9Mn1lbHNle3JldHVybiB0aGlzLnRvUmFkaXgoYyl9fX19fXZhciBnPSgxPDxlKS0xLGwsYT1mYWxzZSxoPVwiXCIsZj10aGlzLnQ7dmFyIGo9dGhpcy5EQi0oZip0aGlzLkRCKSVlO2lmKGYtLT4wKXtpZihqPHRoaXMuREImJihsPXRoaXNbZl0+PmopPjApe2E9dHJ1ZTtoPWludDJjaGFyKGwpfXdoaWxlKGY+PTApe2lmKGo8ZSl7bD0odGhpc1tmXSYoKDE8PGopLTEpKTw8KGUtaik7bHw9dGhpc1stLWZdPj4oais9dGhpcy5EQi1lKX1lbHNle2w9KHRoaXNbZl0+PihqLT1lKSkmZztpZihqPD0wKXtqKz10aGlzLkRCOy0tZn19aWYobD4wKXthPXRydWV9aWYoYSl7aCs9aW50MmNoYXIobCl9fX1yZXR1cm4gYT9oOlwiMFwifWZ1bmN0aW9uIGJuTmVnYXRlKCl7dmFyIGE9bmJpKCk7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5BYnMoKXtyZXR1cm4odGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpc31mdW5jdGlvbiBibkNvbXBhcmVUbyhiKXt2YXIgZD10aGlzLnMtYi5zO2lmKGQhPTApe3JldHVybiBkfXZhciBjPXRoaXMudDtkPWMtYi50O2lmKGQhPTApe3JldHVybih0aGlzLnM8MCk/LWQ6ZH13aGlsZSgtLWM+PTApe2lmKChkPXRoaXNbY10tYltjXSkhPTApe3JldHVybiBkfX1yZXR1cm4gMH1mdW5jdGlvbiBuYml0cyhhKXt2YXIgYz0xLGI7aWYoKGI9YT4+PjE2KSE9MCl7YT1iO2MrPTE2fWlmKChiPWE+PjgpIT0wKXthPWI7Yys9OH1pZigoYj1hPj40KSE9MCl7YT1iO2MrPTR9aWYoKGI9YT4+MikhPTApe2E9YjtjKz0yfWlmKChiPWE+PjEpIT0wKXthPWI7Yys9MX1yZXR1cm4gY31mdW5jdGlvbiBibkJpdExlbmd0aCgpe2lmKHRoaXMudDw9MCl7cmV0dXJuIDB9cmV0dXJuIHRoaXMuREIqKHRoaXMudC0xKStuYml0cyh0aGlzW3RoaXMudC0xXV4odGhpcy5zJnRoaXMuRE0pKX1mdW5jdGlvbiBibnBETFNoaWZ0VG8oYyxiKXt2YXIgYTtmb3IoYT10aGlzLnQtMTthPj0wOy0tYSl7YlthK2NdPXRoaXNbYV19Zm9yKGE9Yy0xO2E+PTA7LS1hKXtiW2FdPTB9Yi50PXRoaXMudCtjO2Iucz10aGlzLnN9ZnVuY3Rpb24gYm5wRFJTaGlmdFRvKGMsYil7Zm9yKHZhciBhPWM7YTx0aGlzLnQ7KythKXtiW2EtY109dGhpc1thXX1iLnQ9TWF0aC5tYXgodGhpcy50LWMsMCk7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBMU2hpZnRUbyhqLGUpe3ZhciBiPWoldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGc9KDE8PGEpLTE7dmFyIGY9TWF0aC5mbG9vcihqL3RoaXMuREIpLGg9KHRoaXMuczw8YikmdGhpcy5ETSxkO2ZvcihkPXRoaXMudC0xO2Q+PTA7LS1kKXtlW2QrZisxXT0odGhpc1tkXT4+YSl8aDtoPSh0aGlzW2RdJmcpPDxifWZvcihkPWYtMTtkPj0wOy0tZCl7ZVtkXT0wfWVbZl09aDtlLnQ9dGhpcy50K2YrMTtlLnM9dGhpcy5zO2UuY2xhbXAoKX1mdW5jdGlvbiBibnBSU2hpZnRUbyhnLGQpe2Qucz10aGlzLnM7dmFyIGU9TWF0aC5mbG9vcihnL3RoaXMuREIpO2lmKGU+PXRoaXMudCl7ZC50PTA7cmV0dXJufXZhciBiPWcldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGY9KDE8PGIpLTE7ZFswXT10aGlzW2VdPj5iO2Zvcih2YXIgYz1lKzE7Yzx0aGlzLnQ7KytjKXtkW2MtZS0xXXw9KHRoaXNbY10mZik8PGE7ZFtjLWVdPXRoaXNbY10+PmJ9aWYoYj4wKXtkW3RoaXMudC1lLTFdfD0odGhpcy5zJmYpPDxhfWQudD10aGlzLnQtZTtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wU3ViVG8oZCxmKXt2YXIgZT0wLGc9MCxiPU1hdGgubWluKGQudCx0aGlzLnQpO3doaWxlKGU8Yil7Zys9dGhpc1tlXS1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9aWYoZC50PHRoaXMudCl7Zy09ZC5zO3doaWxlKGU8dGhpcy50KXtnKz10aGlzW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zys9dGhpcy5zfWVsc2V7Zys9dGhpcy5zO3doaWxlKGU8ZC50KXtnLT1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zy09ZC5zfWYucz0oZzwwKT8tMTowO2lmKGc8LTEpe2ZbZSsrXT10aGlzLkRWK2d9ZWxzZXtpZihnPjApe2ZbZSsrXT1nfX1mLnQ9ZTtmLmNsYW1wKCl9ZnVuY3Rpb24gYm5wTXVsdGlwbHlUbyhjLGUpe3ZhciBiPXRoaXMuYWJzKCksZj1jLmFicygpO3ZhciBkPWIudDtlLnQ9ZCtmLnQ7d2hpbGUoLS1kPj0wKXtlW2RdPTB9Zm9yKGQ9MDtkPGYudDsrK2Qpe2VbZCtiLnRdPWIuYW0oMCxmW2RdLGUsZCwwLGIudCl9ZS5zPTA7ZS5jbGFtcCgpO2lmKHRoaXMucyE9Yy5zKXtCaWdJbnRlZ2VyLlpFUk8uc3ViVG8oZSxlKX19ZnVuY3Rpb24gYm5wU3F1YXJlVG8oZCl7dmFyIGE9dGhpcy5hYnMoKTt2YXIgYj1kLnQ9MiphLnQ7d2hpbGUoLS1iPj0wKXtkW2JdPTB9Zm9yKGI9MDtiPGEudC0xOysrYil7dmFyIGU9YS5hbShiLGFbYl0sZCwyKmIsMCwxKTtpZigoZFtiK2EudF0rPWEuYW0oYisxLDIqYVtiXSxkLDIqYisxLGUsYS50LWItMSkpPj1hLkRWKXtkW2IrYS50XS09YS5EVjtkW2IrYS50KzFdPTF9fWlmKGQudD4wKXtkW2QudC0xXSs9YS5hbShiLGFbYl0sZCwyKmIsMCwxKX1kLnM9MDtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wRGl2UmVtVG8obixoLGcpe3ZhciB3PW4uYWJzKCk7aWYody50PD0wKXtyZXR1cm59dmFyIGs9dGhpcy5hYnMoKTtpZihrLnQ8dy50KXtpZihoIT1udWxsKXtoLmZyb21JbnQoMCl9aWYoZyE9bnVsbCl7dGhpcy5jb3B5VG8oZyl9cmV0dXJufWlmKGc9PW51bGwpe2c9bmJpKCl9dmFyIGQ9bmJpKCksYT10aGlzLnMsbD1uLnM7dmFyIHY9dGhpcy5EQi1uYml0cyh3W3cudC0xXSk7aWYodj4wKXt3LmxTaGlmdFRvKHYsZCk7ay5sU2hpZnRUbyh2LGcpfWVsc2V7dy5jb3B5VG8oZCk7ay5jb3B5VG8oZyl9dmFyIHA9ZC50O3ZhciBiPWRbcC0xXTtpZihiPT0wKXtyZXR1cm59dmFyIG89YiooMTw8dGhpcy5GMSkrKChwPjEpP2RbcC0yXT4+dGhpcy5GMjowKTt2YXIgQT10aGlzLkZWL28sej0oMTw8dGhpcy5GMSkvbyx4PTE8PHRoaXMuRjI7dmFyIHU9Zy50LHM9dS1wLGY9KGg9PW51bGwpP25iaSgpOmg7ZC5kbFNoaWZ0VG8ocyxmKTtpZihnLmNvbXBhcmVUbyhmKT49MCl7Z1tnLnQrK109MTtnLnN1YlRvKGYsZyl9QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKHAsZik7Zi5zdWJUbyhkLGQpO3doaWxlKGQudDxwKXtkW2QudCsrXT0wfXdoaWxlKC0tcz49MCl7dmFyIGM9KGdbLS11XT09Yik/dGhpcy5ETTpNYXRoLmZsb29yKGdbdV0qQSsoZ1t1LTFdK3gpKnopO2lmKChnW3VdKz1kLmFtKDAsYyxnLHMsMCxwKSk8Yyl7ZC5kbFNoaWZ0VG8ocyxmKTtnLnN1YlRvKGYsZyk7d2hpbGUoZ1t1XTwtLWMpe2cuc3ViVG8oZixnKX19fWlmKGghPW51bGwpe2cuZHJTaGlmdFRvKHAsaCk7aWYoYSE9bCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKGgsaCl9fWcudD1wO2cuY2xhbXAoKTtpZih2PjApe2cuclNoaWZ0VG8odixnKX1pZihhPDApe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyhnLGcpfX1mdW5jdGlvbiBibk1vZChiKXt2YXIgYz1uYmkoKTt0aGlzLmFicygpLmRpdlJlbVRvKGIsbnVsbCxjKTtpZih0aGlzLnM8MCYmYy5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXtiLnN1YlRvKGMsYyl9cmV0dXJuIGN9ZnVuY3Rpb24gQ2xhc3NpYyhhKXt0aGlzLm09YX1mdW5jdGlvbiBjQ29udmVydChhKXtpZihhLnM8MHx8YS5jb21wYXJlVG8odGhpcy5tKT49MCl7cmV0dXJuIGEubW9kKHRoaXMubSl9ZWxzZXtyZXR1cm4gYX19ZnVuY3Rpb24gY1JldmVydChhKXtyZXR1cm4gYX1mdW5jdGlvbiBjUmVkdWNlKGEpe2EuZGl2UmVtVG8odGhpcy5tLG51bGwsYSl9ZnVuY3Rpb24gY011bFRvKGEsYyxiKXthLm11bHRpcGx5VG8oYyxiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBjU3FyVG8oYSxiKXthLnNxdWFyZVRvKGIpO3RoaXMucmVkdWNlKGIpfUNsYXNzaWMucHJvdG90eXBlLmNvbnZlcnQ9Y0NvbnZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmV2ZXJ0PWNSZXZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmVkdWNlPWNSZWR1Y2U7Q2xhc3NpYy5wcm90b3R5cGUubXVsVG89Y011bFRvO0NsYXNzaWMucHJvdG90eXBlLnNxclRvPWNTcXJUbztmdW5jdGlvbiBibnBJbnZEaWdpdCgpe2lmKHRoaXMudDwxKXtyZXR1cm4gMH12YXIgYT10aGlzWzBdO2lmKChhJjEpPT0wKXtyZXR1cm4gMH12YXIgYj1hJjM7Yj0oYiooMi0oYSYxNSkqYikpJjE1O2I9KGIqKDItKGEmMjU1KSpiKSkmMjU1O2I9KGIqKDItKCgoYSY2NTUzNSkqYikmNjU1MzUpKSkmNjU1MzU7Yj0oYiooMi1hKmIldGhpcy5EVikpJXRoaXMuRFY7cmV0dXJuKGI+MCk/dGhpcy5EVi1iOi1ifWZ1bmN0aW9uIE1vbnRnb21lcnkoYSl7dGhpcy5tPWE7dGhpcy5tcD1hLmludkRpZ2l0KCk7dGhpcy5tcGw9dGhpcy5tcCYzMjc2Nzt0aGlzLm1waD10aGlzLm1wPj4xNTt0aGlzLnVtPSgxPDwoYS5EQi0xNSkpLTE7dGhpcy5tdDI9MiphLnR9ZnVuY3Rpb24gbW9udENvbnZlcnQoYSl7dmFyIGI9bmJpKCk7YS5hYnMoKS5kbFNoaWZ0VG8odGhpcy5tLnQsYik7Yi5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxiKTtpZihhLnM8MCYmYi5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXt0aGlzLm0uc3ViVG8oYixiKX1yZXR1cm4gYn1mdW5jdGlvbiBtb250UmV2ZXJ0KGEpe3ZhciBiPW5iaSgpO2EuY29weVRvKGIpO3RoaXMucmVkdWNlKGIpO3JldHVybiBifWZ1bmN0aW9uIG1vbnRSZWR1Y2UoYSl7d2hpbGUoYS50PD10aGlzLm10Mil7YVthLnQrK109MH1mb3IodmFyIGM9MDtjPHRoaXMubS50OysrYyl7dmFyIGI9YVtjXSYzMjc2Nzt2YXIgZD0oYip0aGlzLm1wbCsoKChiKnRoaXMubXBoKyhhW2NdPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwxNSkpJmEuRE07Yj1jK3RoaXMubS50O2FbYl0rPXRoaXMubS5hbSgwLGQsYSxjLDAsdGhpcy5tLnQpO3doaWxlKGFbYl0+PWEuRFYpe2FbYl0tPWEuRFY7YVsrK2JdKyt9fWEuY2xhbXAoKTthLmRyU2hpZnRUbyh0aGlzLm0udCxhKTtpZihhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gbW9udFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBtb250TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfU1vbnRnb21lcnkucHJvdG90eXBlLmNvbnZlcnQ9bW9udENvbnZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmV2ZXJ0PW1vbnRSZXZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmVkdWNlPW1vbnRSZWR1Y2U7TW9udGdvbWVyeS5wcm90b3R5cGUubXVsVG89bW9udE11bFRvO01vbnRnb21lcnkucHJvdG90eXBlLnNxclRvPW1vbnRTcXJUbztmdW5jdGlvbiBibnBJc0V2ZW4oKXtyZXR1cm4oKHRoaXMudD4wKT8odGhpc1swXSYxKTp0aGlzLnMpPT0wfWZ1bmN0aW9uIGJucEV4cChoLGope2lmKGg+NDI5NDk2NzI5NXx8aDwxKXtyZXR1cm4gQmlnSW50ZWdlci5PTkV9dmFyIGY9bmJpKCksYT1uYmkoKSxkPWouY29udmVydCh0aGlzKSxjPW5iaXRzKGgpLTE7ZC5jb3B5VG8oZik7d2hpbGUoLS1jPj0wKXtqLnNxclRvKGYsYSk7aWYoKGgmKDE8PGMpKT4wKXtqLm11bFRvKGEsZCxmKX1lbHNle3ZhciBiPWY7Zj1hO2E9Yn19cmV0dXJuIGoucmV2ZXJ0KGYpfWZ1bmN0aW9uIGJuTW9kUG93SW50KGIsYSl7dmFyIGM7aWYoYjwyNTZ8fGEuaXNFdmVuKCkpe2M9bmV3IENsYXNzaWMoYSl9ZWxzZXtjPW5ldyBNb250Z29tZXJ5KGEpfXJldHVybiB0aGlzLmV4cChiLGMpfUJpZ0ludGVnZXIucHJvdG90eXBlLmNvcHlUbz1ibnBDb3B5VG87QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbUludD1ibnBGcm9tSW50O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21TdHJpbmc9Ym5wRnJvbVN0cmluZztCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbGFtcD1ibnBDbGFtcDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kbFNoaWZ0VG89Ym5wRExTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRyU2hpZnRUbz1ibnBEUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUubFNoaWZ0VG89Ym5wTFNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuclNoaWZ0VG89Ym5wUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuc3ViVG89Ym5wU3ViVG87QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlUbz1ibnBNdWx0aXBseVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLnNxdWFyZVRvPWJucFNxdWFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdlJlbVRvPWJucERpdlJlbVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmludkRpZ2l0PWJucEludkRpZ2l0O0JpZ0ludGVnZXIucHJvdG90eXBlLmlzRXZlbj1ibnBJc0V2ZW47QmlnSW50ZWdlci5wcm90b3R5cGUuZXhwPWJucEV4cDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b1N0cmluZz1iblRvU3RyaW5nO0JpZ0ludGVnZXIucHJvdG90eXBlLm5lZ2F0ZT1ibk5lZ2F0ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hYnM9Ym5BYnM7QmlnSW50ZWdlci5wcm90b3R5cGUuY29tcGFyZVRvPWJuQ29tcGFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdExlbmd0aD1ibkJpdExlbmd0aDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2Q9Ym5Nb2Q7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93SW50PWJuTW9kUG93SW50O0JpZ0ludGVnZXIuWkVSTz1uYnYoMCk7QmlnSW50ZWdlci5PTkU9bmJ2KDEpO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBibkNsb25lKCl7dmFyIGE9bmJpKCk7dGhpcy5jb3B5VG8oYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5JbnRWYWx1ZSgpe2lmKHRoaXMuczwwKXtpZih0aGlzLnQ9PTEpe3JldHVybiB0aGlzWzBdLXRoaXMuRFZ9ZWxzZXtpZih0aGlzLnQ9PTApe3JldHVybiAtMX19fWVsc2V7aWYodGhpcy50PT0xKXtyZXR1cm4gdGhpc1swXX1lbHNle2lmKHRoaXMudD09MCl7cmV0dXJuIDB9fX1yZXR1cm4oKHRoaXNbMV0mKCgxPDwoMzItdGhpcy5EQikpLTEpKTw8dGhpcy5EQil8dGhpc1swXX1mdW5jdGlvbiBibkJ5dGVWYWx1ZSgpe3JldHVybih0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MjQpPj4yNH1mdW5jdGlvbiBiblNob3J0VmFsdWUoKXtyZXR1cm4odGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDE2KT4+MTZ9ZnVuY3Rpb24gYm5wQ2h1bmtTaXplKGEpe3JldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKnRoaXMuREIvTWF0aC5sb2coYSkpfWZ1bmN0aW9uIGJuU2lnTnVtKCl7aWYodGhpcy5zPDApe3JldHVybiAtMX1lbHNle2lmKHRoaXMudDw9MHx8KHRoaXMudD09MSYmdGhpc1swXTw9MCkpe3JldHVybiAwfWVsc2V7cmV0dXJuIDF9fX1mdW5jdGlvbiBibnBUb1JhZGl4KGMpe2lmKGM9PW51bGwpe2M9MTB9aWYodGhpcy5zaWdudW0oKT09MHx8YzwyfHxjPjM2KXtyZXR1cm5cIjBcIn12YXIgZj10aGlzLmNodW5rU2l6ZShjKTt2YXIgZT1NYXRoLnBvdyhjLGYpO3ZhciBpPW5idihlKSxqPW5iaSgpLGg9bmJpKCksZz1cIlwiO3RoaXMuZGl2UmVtVG8oaSxqLGgpO3doaWxlKGouc2lnbnVtKCk+MCl7Zz0oZStoLmludFZhbHVlKCkpLnRvU3RyaW5nKGMpLnN1YnN0cigxKStnO2ouZGl2UmVtVG8oaSxqLGgpfXJldHVybiBoLmludFZhbHVlKCkudG9TdHJpbmcoYykrZ31mdW5jdGlvbiBibnBGcm9tUmFkaXgobSxoKXt0aGlzLmZyb21JbnQoMCk7aWYoaD09bnVsbCl7aD0xMH12YXIgZj10aGlzLmNodW5rU2l6ZShoKTt2YXIgZz1NYXRoLnBvdyhoLGYpLGU9ZmFsc2UsYT0wLGw9MDtmb3IodmFyIGM9MDtjPG0ubGVuZ3RoOysrYyl7dmFyIGs9aW50QXQobSxjKTtpZihrPDApe2lmKG0uY2hhckF0KGMpPT1cIi1cIiYmdGhpcy5zaWdudW0oKT09MCl7ZT10cnVlfWNvbnRpbnVlfWw9aCpsK2s7aWYoKythPj1mKXt0aGlzLmRNdWx0aXBseShnKTt0aGlzLmRBZGRPZmZzZXQobCwwKTthPTA7bD0wfX1pZihhPjApe3RoaXMuZE11bHRpcGx5KE1hdGgucG93KGgsYSkpO3RoaXMuZEFkZE9mZnNldChsLDApfWlmKGUpe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpfX1mdW5jdGlvbiBibnBGcm9tTnVtYmVyKGYsZSxoKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoZjwyKXt0aGlzLmZyb21JbnQoMSl9ZWxzZXt0aGlzLmZyb21OdW1iZXIoZixoKTtpZighdGhpcy50ZXN0Qml0KGYtMSkpe3RoaXMuYml0d2lzZVRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChmLTEpLG9wX29yLHRoaXMpfWlmKHRoaXMuaXNFdmVuKCkpe3RoaXMuZEFkZE9mZnNldCgxLDApfXdoaWxlKCF0aGlzLmlzUHJvYmFibGVQcmltZShlKSl7dGhpcy5kQWRkT2Zmc2V0KDIsMCk7aWYodGhpcy5iaXRMZW5ndGgoKT5mKXt0aGlzLnN1YlRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChmLTEpLHRoaXMpfX19fWVsc2V7dmFyIGQ9bmV3IEFycmF5KCksZz1mJjc7ZC5sZW5ndGg9KGY+PjMpKzE7ZS5uZXh0Qnl0ZXMoZCk7aWYoZz4wKXtkWzBdJj0oKDE8PGcpLTEpfWVsc2V7ZFswXT0wfXRoaXMuZnJvbVN0cmluZyhkLDI1Nil9fWZ1bmN0aW9uIGJuVG9CeXRlQXJyYXkoKXt2YXIgYj10aGlzLnQsYz1uZXcgQXJyYXkoKTtjWzBdPXRoaXMuczt2YXIgZT10aGlzLkRCLShiKnRoaXMuREIpJTgsZixhPTA7aWYoYi0tPjApe2lmKGU8dGhpcy5EQiYmKGY9dGhpc1tiXT4+ZSkhPSh0aGlzLnMmdGhpcy5ETSk+PmUpe2NbYSsrXT1mfCh0aGlzLnM8PCh0aGlzLkRCLWUpKX13aGlsZShiPj0wKXtpZihlPDgpe2Y9KHRoaXNbYl0mKCgxPDxlKS0xKSk8PCg4LWUpO2Z8PXRoaXNbLS1iXT4+KGUrPXRoaXMuREItOCl9ZWxzZXtmPSh0aGlzW2JdPj4oZS09OCkpJjI1NTtpZihlPD0wKXtlKz10aGlzLkRCOy0tYn19aWYoKGYmMTI4KSE9MCl7Znw9LTI1Nn1pZihhPT0wJiYodGhpcy5zJjEyOCkhPShmJjEyOCkpeysrYX1pZihhPjB8fGYhPXRoaXMucyl7Y1thKytdPWZ9fX1yZXR1cm4gY31mdW5jdGlvbiBibkVxdWFscyhiKXtyZXR1cm4odGhpcy5jb21wYXJlVG8oYik9PTApfWZ1bmN0aW9uIGJuTWluKGIpe3JldHVybih0aGlzLmNvbXBhcmVUbyhiKTwwKT90aGlzOmJ9ZnVuY3Rpb24gYm5NYXgoYil7cmV0dXJuKHRoaXMuY29tcGFyZVRvKGIpPjApP3RoaXM6Yn1mdW5jdGlvbiBibnBCaXR3aXNlVG8oYyxoLGUpe3ZhciBkLGcsYj1NYXRoLm1pbihjLnQsdGhpcy50KTtmb3IoZD0wO2Q8YjsrK2Qpe2VbZF09aCh0aGlzW2RdLGNbZF0pfWlmKGMudDx0aGlzLnQpe2c9Yy5zJnRoaXMuRE07Zm9yKGQ9YjtkPHRoaXMudDsrK2Qpe2VbZF09aCh0aGlzW2RdLGcpfWUudD10aGlzLnR9ZWxzZXtnPXRoaXMucyZ0aGlzLkRNO2ZvcihkPWI7ZDxjLnQ7KytkKXtlW2RdPWgoZyxjW2RdKX1lLnQ9Yy50fWUucz1oKHRoaXMucyxjLnMpO2UuY2xhbXAoKX1mdW5jdGlvbiBvcF9hbmQoYSxiKXtyZXR1cm4gYSZifWZ1bmN0aW9uIGJuQW5kKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3BfYW5kLGMpO3JldHVybiBjfWZ1bmN0aW9uIG9wX29yKGEsYil7cmV0dXJuIGF8Yn1mdW5jdGlvbiBibk9yKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3Bfb3IsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gb3BfeG9yKGEsYil7cmV0dXJuIGFeYn1mdW5jdGlvbiBiblhvcihiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX3hvcixjKTtyZXR1cm4gY31mdW5jdGlvbiBvcF9hbmRub3QoYSxiKXtyZXR1cm4gYSZ+Yn1mdW5jdGlvbiBibkFuZE5vdChiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX2FuZG5vdCxjKTtyZXR1cm4gY31mdW5jdGlvbiBibk5vdCgpe3ZhciBiPW5iaSgpO2Zvcih2YXIgYT0wO2E8dGhpcy50OysrYSl7YlthXT10aGlzLkRNJn50aGlzW2FdfWIudD10aGlzLnQ7Yi5zPX50aGlzLnM7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5TaGlmdExlZnQoYil7dmFyIGE9bmJpKCk7aWYoYjwwKXt0aGlzLnJTaGlmdFRvKC1iLGEpfWVsc2V7dGhpcy5sU2hpZnRUbyhiLGEpfXJldHVybiBhfWZ1bmN0aW9uIGJuU2hpZnRSaWdodChiKXt2YXIgYT1uYmkoKTtpZihiPDApe3RoaXMubFNoaWZ0VG8oLWIsYSl9ZWxzZXt0aGlzLnJTaGlmdFRvKGIsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gbGJpdChhKXtpZihhPT0wKXtyZXR1cm4gLTF9dmFyIGI9MDtpZigoYSY2NTUzNSk9PTApe2E+Pj0xNjtiKz0xNn1pZigoYSYyNTUpPT0wKXthPj49ODtiKz04fWlmKChhJjE1KT09MCl7YT4+PTQ7Yis9NH1pZigoYSYzKT09MCl7YT4+PTI7Yis9Mn1pZigoYSYxKT09MCl7KytifXJldHVybiBifWZ1bmN0aW9uIGJuR2V0TG93ZXN0U2V0Qml0KCl7Zm9yKHZhciBhPTA7YTx0aGlzLnQ7KythKXtpZih0aGlzW2FdIT0wKXtyZXR1cm4gYSp0aGlzLkRCK2xiaXQodGhpc1thXSl9fWlmKHRoaXMuczwwKXtyZXR1cm4gdGhpcy50KnRoaXMuREJ9cmV0dXJuIC0xfWZ1bmN0aW9uIGNiaXQoYSl7dmFyIGI9MDt3aGlsZShhIT0wKXthJj1hLTE7KytifXJldHVybiBifWZ1bmN0aW9uIGJuQml0Q291bnQoKXt2YXIgYz0wLGE9dGhpcy5zJnRoaXMuRE07Zm9yKHZhciBiPTA7Yjx0aGlzLnQ7KytiKXtjKz1jYml0KHRoaXNbYl1eYSl9cmV0dXJuIGN9ZnVuY3Rpb24gYm5UZXN0Qml0KGIpe3ZhciBhPU1hdGguZmxvb3IoYi90aGlzLkRCKTtpZihhPj10aGlzLnQpe3JldHVybih0aGlzLnMhPTApfXJldHVybigodGhpc1thXSYoMTw8KGIldGhpcy5EQikpKSE9MCl9ZnVuY3Rpb24gYm5wQ2hhbmdlQml0KGMsYil7dmFyIGE9QmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGMpO3RoaXMuYml0d2lzZVRvKGEsYixhKTtyZXR1cm4gYX1mdW5jdGlvbiBiblNldEJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF9vcil9ZnVuY3Rpb24gYm5DbGVhckJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF9hbmRub3QpfWZ1bmN0aW9uIGJuRmxpcEJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF94b3IpfWZ1bmN0aW9uIGJucEFkZFRvKGQsZil7dmFyIGU9MCxnPTAsYj1NYXRoLm1pbihkLnQsdGhpcy50KTt3aGlsZShlPGIpe2crPXRoaXNbZV0rZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWlmKGQudDx0aGlzLnQpe2crPWQuczt3aGlsZShlPHRoaXMudCl7Zys9dGhpc1tlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPXRoaXMuc31lbHNle2crPXRoaXMuczt3aGlsZShlPGQudCl7Zys9ZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPWQuc31mLnM9KGc8MCk/LTE6MDtpZihnPjApe2ZbZSsrXT1nfWVsc2V7aWYoZzwtMSl7ZltlKytdPXRoaXMuRFYrZ319Zi50PWU7Zi5jbGFtcCgpfWZ1bmN0aW9uIGJuQWRkKGIpe3ZhciBjPW5iaSgpO3RoaXMuYWRkVG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBiblN1YnRyYWN0KGIpe3ZhciBjPW5iaSgpO3RoaXMuc3ViVG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBibk11bHRpcGx5KGIpe3ZhciBjPW5iaSgpO3RoaXMubXVsdGlwbHlUbyhiLGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuU3F1YXJlKCl7dmFyIGE9bmJpKCk7dGhpcy5zcXVhcmVUbyhhKTtyZXR1cm4gYX1mdW5jdGlvbiBibkRpdmlkZShiKXt2YXIgYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsYyxudWxsKTtyZXR1cm4gY31mdW5jdGlvbiBiblJlbWFpbmRlcihiKXt2YXIgYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsbnVsbCxjKTtyZXR1cm4gY31mdW5jdGlvbiBibkRpdmlkZUFuZFJlbWFpbmRlcihiKXt2YXIgZD1uYmkoKSxjPW5iaSgpO3RoaXMuZGl2UmVtVG8oYixkLGMpO3JldHVybiBuZXcgQXJyYXkoZCxjKX1mdW5jdGlvbiBibnBETXVsdGlwbHkoYSl7dGhpc1t0aGlzLnRdPXRoaXMuYW0oMCxhLTEsdGhpcywwLDAsdGhpcy50KTsrK3RoaXMudDt0aGlzLmNsYW1wKCl9ZnVuY3Rpb24gYm5wREFkZE9mZnNldChiLGEpe2lmKGI9PTApe3JldHVybn13aGlsZSh0aGlzLnQ8PWEpe3RoaXNbdGhpcy50KytdPTB9dGhpc1thXSs9Yjt3aGlsZSh0aGlzW2FdPj10aGlzLkRWKXt0aGlzW2FdLT10aGlzLkRWO2lmKCsrYT49dGhpcy50KXt0aGlzW3RoaXMudCsrXT0wfSsrdGhpc1thXX19ZnVuY3Rpb24gTnVsbEV4cCgpe31mdW5jdGlvbiBuTm9wKGEpe3JldHVybiBhfWZ1bmN0aW9uIG5NdWxUbyhhLGMsYil7YS5tdWx0aXBseVRvKGMsYil9ZnVuY3Rpb24gblNxclRvKGEsYil7YS5zcXVhcmVUbyhiKX1OdWxsRXhwLnByb3RvdHlwZS5jb252ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUucmV2ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUubXVsVG89bk11bFRvO051bGxFeHAucHJvdG90eXBlLnNxclRvPW5TcXJUbztmdW5jdGlvbiBiblBvdyhhKXtyZXR1cm4gdGhpcy5leHAoYSxuZXcgTnVsbEV4cCgpKX1mdW5jdGlvbiBibnBNdWx0aXBseUxvd2VyVG8oYixmLGUpe3ZhciBkPU1hdGgubWluKHRoaXMudCtiLnQsZik7ZS5zPTA7ZS50PWQ7d2hpbGUoZD4wKXtlWy0tZF09MH12YXIgYztmb3IoYz1lLnQtdGhpcy50O2Q8YzsrK2Qpe2VbZCt0aGlzLnRdPXRoaXMuYW0oMCxiW2RdLGUsZCwwLHRoaXMudCl9Zm9yKGM9TWF0aC5taW4oYi50LGYpO2Q8YzsrK2Qpe3RoaXMuYW0oMCxiW2RdLGUsZCwwLGYtZCl9ZS5jbGFtcCgpfWZ1bmN0aW9uIGJucE11bHRpcGx5VXBwZXJUbyhiLGUsZCl7LS1lO3ZhciBjPWQudD10aGlzLnQrYi50LWU7ZC5zPTA7d2hpbGUoLS1jPj0wKXtkW2NdPTB9Zm9yKGM9TWF0aC5tYXgoZS10aGlzLnQsMCk7YzxiLnQ7KytjKXtkW3RoaXMudCtjLWVdPXRoaXMuYW0oZS1jLGJbY10sZCwwLDAsdGhpcy50K2MtZSl9ZC5jbGFtcCgpO2QuZHJTaGlmdFRvKDEsZCl9ZnVuY3Rpb24gQmFycmV0dChhKXt0aGlzLnIyPW5iaSgpO3RoaXMucTM9bmJpKCk7QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKDIqYS50LHRoaXMucjIpO3RoaXMubXU9dGhpcy5yMi5kaXZpZGUoYSk7dGhpcy5tPWF9ZnVuY3Rpb24gYmFycmV0dENvbnZlcnQoYSl7aWYoYS5zPDB8fGEudD4yKnRoaXMubS50KXtyZXR1cm4gYS5tb2QodGhpcy5tKX1lbHNle2lmKGEuY29tcGFyZVRvKHRoaXMubSk8MCl7cmV0dXJuIGF9ZWxzZXt2YXIgYj1uYmkoKTthLmNvcHlUbyhiKTt0aGlzLnJlZHVjZShiKTtyZXR1cm4gYn19fWZ1bmN0aW9uIGJhcnJldHRSZXZlcnQoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gYmFycmV0dFJlZHVjZShhKXthLmRyU2hpZnRUbyh0aGlzLm0udC0xLHRoaXMucjIpO2lmKGEudD50aGlzLm0udCsxKXthLnQ9dGhpcy5tLnQrMTthLmNsYW1wKCl9dGhpcy5tdS5tdWx0aXBseVVwcGVyVG8odGhpcy5yMix0aGlzLm0udCsxLHRoaXMucTMpO3RoaXMubS5tdWx0aXBseUxvd2VyVG8odGhpcy5xMyx0aGlzLm0udCsxLHRoaXMucjIpO3doaWxlKGEuY29tcGFyZVRvKHRoaXMucjIpPDApe2EuZEFkZE9mZnNldCgxLHRoaXMubS50KzEpfWEuc3ViVG8odGhpcy5yMixhKTt3aGlsZShhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gYmFycmV0dFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBiYXJyZXR0TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfUJhcnJldHQucHJvdG90eXBlLmNvbnZlcnQ9YmFycmV0dENvbnZlcnQ7QmFycmV0dC5wcm90b3R5cGUucmV2ZXJ0PWJhcnJldHRSZXZlcnQ7QmFycmV0dC5wcm90b3R5cGUucmVkdWNlPWJhcnJldHRSZWR1Y2U7QmFycmV0dC5wcm90b3R5cGUubXVsVG89YmFycmV0dE11bFRvO0JhcnJldHQucHJvdG90eXBlLnNxclRvPWJhcnJldHRTcXJUbztmdW5jdGlvbiBibk1vZFBvdyhxLGYpe3ZhciBvPXEuYml0TGVuZ3RoKCksaCxiPW5idigxKSx2O2lmKG88PTApe3JldHVybiBifWVsc2V7aWYobzwxOCl7aD0xfWVsc2V7aWYobzw0OCl7aD0zfWVsc2V7aWYobzwxNDQpe2g9NH1lbHNle2lmKG88NzY4KXtoPTV9ZWxzZXtoPTZ9fX19fWlmKG88OCl7dj1uZXcgQ2xhc3NpYyhmKX1lbHNle2lmKGYuaXNFdmVuKCkpe3Y9bmV3IEJhcnJldHQoZil9ZWxzZXt2PW5ldyBNb250Z29tZXJ5KGYpfX12YXIgcD1uZXcgQXJyYXkoKSxkPTMscz1oLTEsYT0oMTw8aCktMTtwWzFdPXYuY29udmVydCh0aGlzKTtpZihoPjEpe3ZhciBBPW5iaSgpO3Yuc3FyVG8ocFsxXSxBKTt3aGlsZShkPD1hKXtwW2RdPW5iaSgpO3YubXVsVG8oQSxwW2QtMl0scFtkXSk7ZCs9Mn19dmFyIGw9cS50LTEseCx1PXRydWUsYz1uYmkoKSx5O289bmJpdHMocVtsXSktMTt3aGlsZShsPj0wKXtpZihvPj1zKXt4PShxW2xdPj4oby1zKSkmYX1lbHNle3g9KHFbbF0mKCgxPDwobysxKSktMSkpPDwocy1vKTtpZihsPjApe3h8PXFbbC0xXT4+KHRoaXMuREIrby1zKX19ZD1oO3doaWxlKCh4JjEpPT0wKXt4Pj49MTstLWR9aWYoKG8tPWQpPDApe28rPXRoaXMuREI7LS1sfWlmKHUpe3BbeF0uY29weVRvKGIpO3U9ZmFsc2V9ZWxzZXt3aGlsZShkPjEpe3Yuc3FyVG8oYixjKTt2LnNxclRvKGMsYik7ZC09Mn1pZihkPjApe3Yuc3FyVG8oYixjKX1lbHNle3k9YjtiPWM7Yz15fXYubXVsVG8oYyxwW3hdLGIpfXdoaWxlKGw+PTAmJihxW2xdJigxPDxvKSk9PTApe3Yuc3FyVG8oYixjKTt5PWI7Yj1jO2M9eTtpZigtLW88MCl7bz10aGlzLkRCLTE7LS1sfX19cmV0dXJuIHYucmV2ZXJ0KGIpfWZ1bmN0aW9uIGJuR0NEKGMpe3ZhciBiPSh0aGlzLnM8MCk/dGhpcy5uZWdhdGUoKTp0aGlzLmNsb25lKCk7dmFyIGg9KGMuczwwKT9jLm5lZ2F0ZSgpOmMuY2xvbmUoKTtpZihiLmNvbXBhcmVUbyhoKTwwKXt2YXIgZT1iO2I9aDtoPWV9dmFyIGQ9Yi5nZXRMb3dlc3RTZXRCaXQoKSxmPWguZ2V0TG93ZXN0U2V0Qml0KCk7aWYoZjwwKXtyZXR1cm4gYn1pZihkPGYpe2Y9ZH1pZihmPjApe2IuclNoaWZ0VG8oZixiKTtoLnJTaGlmdFRvKGYsaCl9d2hpbGUoYi5zaWdudW0oKT4wKXtpZigoZD1iLmdldExvd2VzdFNldEJpdCgpKT4wKXtiLnJTaGlmdFRvKGQsYil9aWYoKGQ9aC5nZXRMb3dlc3RTZXRCaXQoKSk+MCl7aC5yU2hpZnRUbyhkLGgpfWlmKGIuY29tcGFyZVRvKGgpPj0wKXtiLnN1YlRvKGgsYik7Yi5yU2hpZnRUbygxLGIpfWVsc2V7aC5zdWJUbyhiLGgpO2guclNoaWZ0VG8oMSxoKX19aWYoZj4wKXtoLmxTaGlmdFRvKGYsaCl9cmV0dXJuIGh9ZnVuY3Rpb24gYm5wTW9kSW50KGUpe2lmKGU8PTApe3JldHVybiAwfXZhciBjPXRoaXMuRFYlZSxiPSh0aGlzLnM8MCk/ZS0xOjA7aWYodGhpcy50PjApe2lmKGM9PTApe2I9dGhpc1swXSVlfWVsc2V7Zm9yKHZhciBhPXRoaXMudC0xO2E+PTA7LS1hKXtiPShjKmIrdGhpc1thXSklZX19fXJldHVybiBifWZ1bmN0aW9uIGJuTW9kSW52ZXJzZShmKXt2YXIgaj1mLmlzRXZlbigpO2lmKCh0aGlzLmlzRXZlbigpJiZqKXx8Zi5zaWdudW0oKT09MCl7cmV0dXJuIEJpZ0ludGVnZXIuWkVST312YXIgaT1mLmNsb25lKCksaD10aGlzLmNsb25lKCk7dmFyIGc9bmJ2KDEpLGU9bmJ2KDApLGw9bmJ2KDApLGs9bmJ2KDEpO3doaWxlKGkuc2lnbnVtKCkhPTApe3doaWxlKGkuaXNFdmVuKCkpe2kuclNoaWZ0VG8oMSxpKTtpZihqKXtpZighZy5pc0V2ZW4oKXx8IWUuaXNFdmVuKCkpe2cuYWRkVG8odGhpcyxnKTtlLnN1YlRvKGYsZSl9Zy5yU2hpZnRUbygxLGcpfWVsc2V7aWYoIWUuaXNFdmVuKCkpe2Uuc3ViVG8oZixlKX19ZS5yU2hpZnRUbygxLGUpfXdoaWxlKGguaXNFdmVuKCkpe2guclNoaWZ0VG8oMSxoKTtpZihqKXtpZighbC5pc0V2ZW4oKXx8IWsuaXNFdmVuKCkpe2wuYWRkVG8odGhpcyxsKTtrLnN1YlRvKGYsayl9bC5yU2hpZnRUbygxLGwpfWVsc2V7aWYoIWsuaXNFdmVuKCkpe2suc3ViVG8oZixrKX19ay5yU2hpZnRUbygxLGspfWlmKGkuY29tcGFyZVRvKGgpPj0wKXtpLnN1YlRvKGgsaSk7aWYoail7Zy5zdWJUbyhsLGcpfWUuc3ViVG8oayxlKX1lbHNle2guc3ViVG8oaSxoKTtpZihqKXtsLnN1YlRvKGcsbCl9ay5zdWJUbyhlLGspfX1pZihoLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkhPTApe3JldHVybiBCaWdJbnRlZ2VyLlpFUk99aWYoay5jb21wYXJlVG8oZik+PTApe3JldHVybiBrLnN1YnRyYWN0KGYpfWlmKGsuc2lnbnVtKCk8MCl7ay5hZGRUbyhmLGspfWVsc2V7cmV0dXJuIGt9aWYoay5zaWdudW0oKTwwKXtyZXR1cm4gay5hZGQoZil9ZWxzZXtyZXR1cm4ga319dmFyIGxvd3ByaW1lcz1bMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3XTt2YXIgbHBsaW09KDE8PDI2KS9sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXTtmdW5jdGlvbiBibklzUHJvYmFibGVQcmltZShlKXt2YXIgZCxiPXRoaXMuYWJzKCk7aWYoYi50PT0xJiZiWzBdPD1sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXSl7Zm9yKGQ9MDtkPGxvd3ByaW1lcy5sZW5ndGg7KytkKXtpZihiWzBdPT1sb3dwcmltZXNbZF0pe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9aWYoYi5pc0V2ZW4oKSl7cmV0dXJuIGZhbHNlfWQ9MTt3aGlsZShkPGxvd3ByaW1lcy5sZW5ndGgpe3ZhciBhPWxvd3ByaW1lc1tkXSxjPWQrMTt3aGlsZShjPGxvd3ByaW1lcy5sZW5ndGgmJmE8bHBsaW0pe2EqPWxvd3ByaW1lc1tjKytdfWE9Yi5tb2RJbnQoYSk7d2hpbGUoZDxjKXtpZihhJWxvd3ByaW1lc1tkKytdPT0wKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gYi5taWxsZXJSYWJpbihlKX1mdW5jdGlvbiBibnBNaWxsZXJSYWJpbihmKXt2YXIgZz10aGlzLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTt2YXIgYz1nLmdldExvd2VzdFNldEJpdCgpO2lmKGM8PTApe3JldHVybiBmYWxzZX12YXIgaD1nLnNoaWZ0UmlnaHQoYyk7Zj0oZisxKT4+MTtpZihmPmxvd3ByaW1lcy5sZW5ndGgpe2Y9bG93cHJpbWVzLmxlbmd0aH12YXIgYj1uYmkoKTtmb3IodmFyIGU9MDtlPGY7KytlKXtiLmZyb21JbnQobG93cHJpbWVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsb3dwcmltZXMubGVuZ3RoKV0pO3ZhciBsPWIubW9kUG93KGgsdGhpcyk7aWYobC5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpIT0wJiZsLmNvbXBhcmVUbyhnKSE9MCl7dmFyIGQ9MTt3aGlsZShkKys8YyYmbC5jb21wYXJlVG8oZykhPTApe2w9bC5tb2RQb3dJbnQoMix0aGlzKTtpZihsLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSk9PTApe3JldHVybiBmYWxzZX19aWYobC5jb21wYXJlVG8oZykhPTApe3JldHVybiBmYWxzZX19fXJldHVybiB0cnVlfUJpZ0ludGVnZXIucHJvdG90eXBlLmNodW5rU2l6ZT1ibnBDaHVua1NpemU7QmlnSW50ZWdlci5wcm90b3R5cGUudG9SYWRpeD1ibnBUb1JhZGl4O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21SYWRpeD1ibnBGcm9tUmFkaXg7QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbU51bWJlcj1ibnBGcm9tTnVtYmVyO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdHdpc2VUbz1ibnBCaXR3aXNlVG87QmlnSW50ZWdlci5wcm90b3R5cGUuY2hhbmdlQml0PWJucENoYW5nZUJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hZGRUbz1ibnBBZGRUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5kTXVsdGlwbHk9Ym5wRE11bHRpcGx5O0JpZ0ludGVnZXIucHJvdG90eXBlLmRBZGRPZmZzZXQ9Ym5wREFkZE9mZnNldDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseUxvd2VyVG89Ym5wTXVsdGlwbHlMb3dlclRvO0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VXBwZXJUbz1ibnBNdWx0aXBseVVwcGVyVG87QmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW50PWJucE1vZEludDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5taWxsZXJSYWJpbj1ibnBNaWxsZXJSYWJpbjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbG9uZT1ibkNsb25lO0JpZ0ludGVnZXIucHJvdG90eXBlLmludFZhbHVlPWJuSW50VmFsdWU7QmlnSW50ZWdlci5wcm90b3R5cGUuYnl0ZVZhbHVlPWJuQnl0ZVZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLnNob3J0VmFsdWU9Ym5TaG9ydFZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLnNpZ251bT1iblNpZ051bTtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b0J5dGVBcnJheT1iblRvQnl0ZUFycmF5O0JpZ0ludGVnZXIucHJvdG90eXBlLmVxdWFscz1ibkVxdWFscztCaWdJbnRlZ2VyLnByb3RvdHlwZS5taW49Ym5NaW47QmlnSW50ZWdlci5wcm90b3R5cGUubWF4PWJuTWF4O0JpZ0ludGVnZXIucHJvdG90eXBlLmFuZD1ibkFuZDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5vcj1ibk9yO0JpZ0ludGVnZXIucHJvdG90eXBlLnhvcj1iblhvcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmROb3Q9Ym5BbmROb3Q7QmlnSW50ZWdlci5wcm90b3R5cGUubm90PWJuTm90O0JpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0TGVmdD1iblNoaWZ0TGVmdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdFJpZ2h0PWJuU2hpZnRSaWdodDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5nZXRMb3dlc3RTZXRCaXQ9Ym5HZXRMb3dlc3RTZXRCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuYml0Q291bnQ9Ym5CaXRDb3VudDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50ZXN0Qml0PWJuVGVzdEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zZXRCaXQ9Ym5TZXRCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuY2xlYXJCaXQ9Ym5DbGVhckJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5mbGlwQml0PWJuRmxpcEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hZGQ9Ym5BZGQ7QmlnSW50ZWdlci5wcm90b3R5cGUuc3VidHJhY3Q9Ym5TdWJ0cmFjdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseT1ibk11bHRpcGx5O0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdmlkZT1ibkRpdmlkZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5yZW1haW5kZXI9Ym5SZW1haW5kZXI7QmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlQW5kUmVtYWluZGVyPWJuRGl2aWRlQW5kUmVtYWluZGVyO0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZFBvdz1ibk1vZFBvdztCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnZlcnNlPWJuTW9kSW52ZXJzZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5wb3c9Ym5Qb3c7QmlnSW50ZWdlci5wcm90b3R5cGUuZ2NkPWJuR0NEO0JpZ0ludGVnZXIucHJvdG90eXBlLmlzUHJvYmFibGVQcmltZT1ibklzUHJvYmFibGVQcmltZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmU9Ym5TcXVhcmU7XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbmZ1bmN0aW9uIEFyY2ZvdXIoKXt0aGlzLmk9MDt0aGlzLmo9MDt0aGlzLlM9bmV3IEFycmF5KCl9ZnVuY3Rpb24gQVJDNGluaXQoZCl7dmFyIGMsYSxiO2ZvcihjPTA7YzwyNTY7KytjKXt0aGlzLlNbY109Y31hPTA7Zm9yKGM9MDtjPDI1NjsrK2Mpe2E9KGErdGhpcy5TW2NdK2RbYyVkLmxlbmd0aF0pJjI1NTtiPXRoaXMuU1tjXTt0aGlzLlNbY109dGhpcy5TW2FdO3RoaXMuU1thXT1ifXRoaXMuaT0wO3RoaXMuaj0wfWZ1bmN0aW9uIEFSQzRuZXh0KCl7dmFyIGE7dGhpcy5pPSh0aGlzLmkrMSkmMjU1O3RoaXMuaj0odGhpcy5qK3RoaXMuU1t0aGlzLmldKSYyNTU7YT10aGlzLlNbdGhpcy5pXTt0aGlzLlNbdGhpcy5pXT10aGlzLlNbdGhpcy5qXTt0aGlzLlNbdGhpcy5qXT1hO3JldHVybiB0aGlzLlNbKGErdGhpcy5TW3RoaXMuaV0pJjI1NV19QXJjZm91ci5wcm90b3R5cGUuaW5pdD1BUkM0aW5pdDtBcmNmb3VyLnByb3RvdHlwZS5uZXh0PUFSQzRuZXh0O2Z1bmN0aW9uIHBybmdfbmV3c3RhdGUoKXtyZXR1cm4gbmV3IEFyY2ZvdXIoKX12YXIgcm5nX3BzaXplPTI1Njtcbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG4gKi9cclxudmFyIHJuZ19zdGF0ZTt2YXIgcm5nX3Bvb2w7dmFyIHJuZ19wcHRyO2Z1bmN0aW9uIHJuZ19zZWVkX2ludChhKXtybmdfcG9vbFtybmdfcHB0cisrXV49YSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj44KSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj4xNikmMjU1O3JuZ19wb29sW3JuZ19wcHRyKytdXj0oYT4+MjQpJjI1NTtpZihybmdfcHB0cj49cm5nX3BzaXplKXtybmdfcHB0ci09cm5nX3BzaXplfX1mdW5jdGlvbiBybmdfc2VlZF90aW1lKCl7cm5nX3NlZWRfaW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpKX1pZihybmdfcG9vbD09bnVsbCl7cm5nX3Bvb2w9bmV3IEFycmF5KCk7cm5nX3BwdHI9MDt2YXIgdDtpZih3aW5kb3chPT11bmRlZmluZWQmJih3aW5kb3cuY3J5cHRvIT09dW5kZWZpbmVkfHx3aW5kb3cubXNDcnlwdG8hPT11bmRlZmluZWQpKXt2YXIgY3J5cHRvPXdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0bztpZihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXt2YXIgdWE9bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXModWEpO2Zvcih0PTA7dDwzMjsrK3Qpe3JuZ19wb29sW3JuZ19wcHRyKytdPXVhW3RdfX1lbHNle2lmKG5hdmlnYXRvci5hcHBOYW1lPT1cIk5ldHNjYXBlXCImJm5hdmlnYXRvci5hcHBWZXJzaW9uPFwiNVwiKXt2YXIgej13aW5kb3cuY3J5cHRvLnJhbmRvbSgzMik7Zm9yKHQ9MDt0PHoubGVuZ3RoOysrdCl7cm5nX3Bvb2xbcm5nX3BwdHIrK109ei5jaGFyQ29kZUF0KHQpJjI1NX19fX13aGlsZShybmdfcHB0cjxybmdfcHNpemUpe3Q9TWF0aC5mbG9vcig2NTUzNipNYXRoLnJhbmRvbSgpKTtybmdfcG9vbFtybmdfcHB0cisrXT10Pj4+ODtybmdfcG9vbFtybmdfcHB0cisrXT10JjI1NX1ybmdfcHB0cj0wO3JuZ19zZWVkX3RpbWUoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGUoKXtpZihybmdfc3RhdGU9PW51bGwpe3JuZ19zZWVkX3RpbWUoKTtybmdfc3RhdGU9cHJuZ19uZXdzdGF0ZSgpO3JuZ19zdGF0ZS5pbml0KHJuZ19wb29sKTtmb3Iocm5nX3BwdHI9MDtybmdfcHB0cjxybmdfcG9vbC5sZW5ndGg7KytybmdfcHB0cil7cm5nX3Bvb2xbcm5nX3BwdHJdPTB9cm5nX3BwdHI9MH1yZXR1cm4gcm5nX3N0YXRlLm5leHQoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGVzKGIpe3ZhciBhO2ZvcihhPTA7YTxiLmxlbmd0aDsrK2Epe2JbYV09cm5nX2dldF9ieXRlKCl9fWZ1bmN0aW9uIFNlY3VyZVJhbmRvbSgpe31TZWN1cmVSYW5kb20ucHJvdG90eXBlLm5leHRCeXRlcz1ybmdfZ2V0X2J5dGVzO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUJpZ0ludChiLGEpe3JldHVybiBuZXcgQmlnSW50ZWdlcihiLGEpfWZ1bmN0aW9uIGxpbmVicmsoYyxkKXt2YXIgYT1cIlwiO3ZhciBiPTA7d2hpbGUoYitkPGMubGVuZ3RoKXthKz1jLnN1YnN0cmluZyhiLGIrZCkrXCJcXG5cIjtiKz1kfXJldHVybiBhK2Muc3Vic3RyaW5nKGIsYy5sZW5ndGgpfWZ1bmN0aW9uIGJ5dGUySGV4KGEpe2lmKGE8MTYpe3JldHVyblwiMFwiK2EudG9TdHJpbmcoMTYpfWVsc2V7cmV0dXJuIGEudG9TdHJpbmcoMTYpfX1mdW5jdGlvbiBwa2NzMXBhZDIoZSxoKXtpZihoPGUubGVuZ3RoKzExKXt0aHJvd1wiTWVzc2FnZSB0b28gbG9uZyBmb3IgUlNBXCI7cmV0dXJuIG51bGx9dmFyIGc9bmV3IEFycmF5KCk7dmFyIGQ9ZS5sZW5ndGgtMTt3aGlsZShkPj0wJiZoPjApe3ZhciBmPWUuY2hhckNvZGVBdChkLS0pO2lmKGY8MTI4KXtnWy0taF09Zn1lbHNle2lmKChmPjEyNykmJihmPDIwNDgpKXtnWy0taF09KGYmNjMpfDEyODtnWy0taF09KGY+PjYpfDE5Mn1lbHNle2dbLS1oXT0oZiY2Myl8MTI4O2dbLS1oXT0oKGY+PjYpJjYzKXwxMjg7Z1stLWhdPShmPj4xMil8MjI0fX19Z1stLWhdPTA7dmFyIGI9bmV3IFNlY3VyZVJhbmRvbSgpO3ZhciBhPW5ldyBBcnJheSgpO3doaWxlKGg+Mil7YVswXT0wO3doaWxlKGFbMF09PTApe2IubmV4dEJ5dGVzKGEpfWdbLS1oXT1hWzBdfWdbLS1oXT0yO2dbLS1oXT0wO3JldHVybiBuZXcgQmlnSW50ZWdlcihnKX1mdW5jdGlvbiBvYWVwX21nZjFfYXJyKGMsYSxlKXt2YXIgYj1cIlwiLGQ9MDt3aGlsZShiLmxlbmd0aDxhKXtiKz1lKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGMuY29uY2F0KFsoZCY0Mjc4MTkwMDgwKT4+MjQsKGQmMTY3MTE2ODApPj4xNiwoZCY2NTI4MCk+PjgsZCYyNTVdKSkpO2QrPTF9cmV0dXJuIGJ9ZnVuY3Rpb24gb2FlcF9wYWQocSxhLGYsbCl7dmFyIGM9S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdDt2YXIgbz1LSlVSLmNyeXB0by5VdGlsO3ZhciBiPW51bGw7aWYoIWYpe2Y9XCJzaGExXCJ9aWYodHlwZW9mIGY9PT1cInN0cmluZ1wiKXtiPWMuZ2V0Q2Fub25pY2FsQWxnTmFtZShmKTtsPWMuZ2V0SGFzaExlbmd0aChiKTtmPWZ1bmN0aW9uKGkpe3JldHVybiBoZXh0b3JzdHIoby5oYXNoSGV4KHJzdHJ0b2hleChpKSxiKSl9fWlmKHEubGVuZ3RoKzIqbCsyPmEpe3Rocm93XCJNZXNzYWdlIHRvbyBsb25nIGZvciBSU0FcIn12YXIgaz1cIlwiLGU7Zm9yKGU9MDtlPGEtcS5sZW5ndGgtMipsLTI7ZSs9MSl7ays9XCJcXHgwMFwifXZhciBoPWYoXCJcIikraytcIlxceDAxXCIrcTt2YXIgZz1uZXcgQXJyYXkobCk7bmV3IFNlY3VyZVJhbmRvbSgpLm5leHRCeXRlcyhnKTt2YXIgaj1vYWVwX21nZjFfYXJyKGcsaC5sZW5ndGgsZik7dmFyIHA9W107Zm9yKGU9MDtlPGgubGVuZ3RoO2UrPTEpe3BbZV09aC5jaGFyQ29kZUF0KGUpXmouY2hhckNvZGVBdChlKX12YXIgbT1vYWVwX21nZjFfYXJyKHAsZy5sZW5ndGgsZik7dmFyIGQ9WzBdO2ZvcihlPTA7ZTxnLmxlbmd0aDtlKz0xKXtkW2UrMV09Z1tlXV5tLmNoYXJDb2RlQXQoZSl9cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGQuY29uY2F0KHApKX1mdW5jdGlvbiBSU0FLZXkoKXt0aGlzLm49bnVsbDt0aGlzLmU9MDt0aGlzLmQ9bnVsbDt0aGlzLnA9bnVsbDt0aGlzLnE9bnVsbDt0aGlzLmRtcDE9bnVsbDt0aGlzLmRtcTE9bnVsbDt0aGlzLmNvZWZmPW51bGx9ZnVuY3Rpb24gUlNBU2V0UHVibGljKGIsYSl7dGhpcy5pc1B1YmxpYz10cnVlO3RoaXMuaXNQcml2YXRlPWZhbHNlO2lmKHR5cGVvZiBiIT09XCJzdHJpbmdcIil7dGhpcy5uPWI7dGhpcy5lPWF9ZWxzZXtpZihiIT1udWxsJiZhIT1udWxsJiZiLmxlbmd0aD4wJiZhLmxlbmd0aD4wKXt0aGlzLm49cGFyc2VCaWdJbnQoYiwxNik7dGhpcy5lPXBhcnNlSW50KGEsMTYpfWVsc2V7dGhyb3dcIkludmFsaWQgUlNBIHB1YmxpYyBrZXlcIn19fWZ1bmN0aW9uIFJTQURvUHVibGljKGEpe3JldHVybiBhLm1vZFBvd0ludCh0aGlzLmUsdGhpcy5uKX1mdW5jdGlvbiBSU0FFbmNyeXB0KGQpe3ZhciBhPXBrY3MxcGFkMihkLCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMpO2lmKGE9PW51bGwpe3JldHVybiBudWxsfXZhciBlPXRoaXMuZG9QdWJsaWMoYSk7aWYoZT09bnVsbCl7cmV0dXJuIG51bGx9dmFyIGI9ZS50b1N0cmluZygxNik7aWYoKGIubGVuZ3RoJjEpPT0wKXtyZXR1cm4gYn1lbHNle3JldHVyblwiMFwiK2J9fWZ1bmN0aW9uIFJTQUVuY3J5cHRPQUVQKGYsZSxiKXt2YXIgYT1vYWVwX3BhZChmLCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMsZSxiKTtpZihhPT1udWxsKXtyZXR1cm4gbnVsbH12YXIgZz10aGlzLmRvUHVibGljKGEpO2lmKGc9PW51bGwpe3JldHVybiBudWxsfXZhciBkPWcudG9TdHJpbmcoMTYpO2lmKChkLmxlbmd0aCYxKT09MCl7cmV0dXJuIGR9ZWxzZXtyZXR1cm5cIjBcIitkfX1SU0FLZXkucHJvdG90eXBlLmRvUHVibGljPVJTQURvUHVibGljO1JTQUtleS5wcm90b3R5cGUuc2V0UHVibGljPVJTQVNldFB1YmxpYztSU0FLZXkucHJvdG90eXBlLmVuY3J5cHQ9UlNBRW5jcnlwdDtSU0FLZXkucHJvdG90eXBlLmVuY3J5cHRPQUVQPVJTQUVuY3J5cHRPQUVQO1JTQUtleS5wcm90b3R5cGUudHlwZT1cIlJTQVwiO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBFQ0ZpZWxkRWxlbWVudEZwKGIsYSl7dGhpcy54PWE7dGhpcy5xPWJ9ZnVuY3Rpb24gZmVGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1yZXR1cm4odGhpcy5xLmVxdWFscyhhLnEpJiZ0aGlzLnguZXF1YWxzKGEueCkpfWZ1bmN0aW9uIGZlRnBUb0JpZ0ludGVnZXIoKXtyZXR1cm4gdGhpcy54fWZ1bmN0aW9uIGZlRnBOZWdhdGUoKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5uZWdhdGUoKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcEFkZChhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5hZGQoYS50b0JpZ0ludGVnZXIoKSkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBTdWJ0cmFjdChhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5zdWJ0cmFjdChhLnRvQmlnSW50ZWdlcigpKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcE11bHRpcGx5KGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54Lm11bHRpcGx5KGEudG9CaWdJbnRlZ2VyKCkpLm1vZCh0aGlzLnEpKX1mdW5jdGlvbiBmZUZwU3F1YXJlKCl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLnguc3F1YXJlKCkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBEaXZpZGUoYSl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLngubXVsdGlwbHkoYS50b0JpZ0ludGVnZXIoKS5tb2RJbnZlcnNlKHRoaXMucSkpLm1vZCh0aGlzLnEpKX1FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5lcXVhbHM9ZmVGcEVxdWFscztFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS50b0JpZ0ludGVnZXI9ZmVGcFRvQmlnSW50ZWdlcjtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5uZWdhdGU9ZmVGcE5lZ2F0ZTtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5hZGQ9ZmVGcEFkZDtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5zdWJ0cmFjdD1mZUZwU3VidHJhY3Q7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUubXVsdGlwbHk9ZmVGcE11bHRpcGx5O0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLnNxdWFyZT1mZUZwU3F1YXJlO0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLmRpdmlkZT1mZUZwRGl2aWRlO2Z1bmN0aW9uIEVDUG9pbnRGcChjLGEsZCxiKXt0aGlzLmN1cnZlPWM7dGhpcy54PWE7dGhpcy55PWQ7aWYoYj09bnVsbCl7dGhpcy56PUJpZ0ludGVnZXIuT05FfWVsc2V7dGhpcy56PWJ9dGhpcy56aW52PW51bGx9ZnVuY3Rpb24gcG9pbnRGcEdldFgoKXtpZih0aGlzLnppbnY9PW51bGwpe3RoaXMuemludj10aGlzLnoubW9kSW52ZXJzZSh0aGlzLmN1cnZlLnEpfXJldHVybiB0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnppbnYpLm1vZCh0aGlzLmN1cnZlLnEpKX1mdW5jdGlvbiBwb2ludEZwR2V0WSgpe2lmKHRoaXMuemludj09bnVsbCl7dGhpcy56aW52PXRoaXMuei5tb2RJbnZlcnNlKHRoaXMuY3VydmUucSl9cmV0dXJuIHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIodGhpcy55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMuemludikubW9kKHRoaXMuY3VydmUucSkpfWZ1bmN0aW9uIHBvaW50RnBFcXVhbHMoYSl7aWYoYT09dGhpcyl7cmV0dXJuIHRydWV9aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiBhLmlzSW5maW5pdHkoKX1pZihhLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpfXZhciBjLGI7Yz1hLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkoYS56KSkubW9kKHRoaXMuY3VydmUucSk7aWYoIWMuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpe3JldHVybiBmYWxzZX1iPWEueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShhLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gYi5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKX1mdW5jdGlvbiBwb2ludEZwSXNJbmZpbml0eSgpe2lmKCh0aGlzLng9PW51bGwpJiYodGhpcy55PT1udWxsKSl7cmV0dXJuIHRydWV9cmV0dXJuIHRoaXMuei5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSYmIXRoaXMueS50b0JpZ0ludGVnZXIoKS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKX1mdW5jdGlvbiBwb2ludEZwTmVnYXRlKCl7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLngsdGhpcy55Lm5lZ2F0ZSgpLHRoaXMueil9ZnVuY3Rpb24gcG9pbnRGcEFkZChsKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGx9aWYobC5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfXZhciBwPWwueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShsLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgbz1sLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkobC56KSkubW9kKHRoaXMuY3VydmUucSk7aWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyhvKSl7aWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyhwKSl7cmV0dXJuIHRoaXMudHdpY2UoKX1yZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBqPW5ldyBCaWdJbnRlZ2VyKFwiM1wiKTt2YXIgZT10aGlzLngudG9CaWdJbnRlZ2VyKCk7dmFyIG49dGhpcy55LnRvQmlnSW50ZWdlcigpO3ZhciBjPWwueC50b0JpZ0ludGVnZXIoKTt2YXIgaz1sLnkudG9CaWdJbnRlZ2VyKCk7dmFyIG09by5zcXVhcmUoKTt2YXIgaT1tLm11bHRpcGx5KG8pO3ZhciBkPWUubXVsdGlwbHkobSk7dmFyIGc9cC5zcXVhcmUoKS5tdWx0aXBseSh0aGlzLnopO3ZhciBhPWcuc3VidHJhY3QoZC5zaGlmdExlZnQoMSkpLm11bHRpcGx5KGwueikuc3VidHJhY3QoaSkubXVsdGlwbHkobykubW9kKHRoaXMuY3VydmUucSk7dmFyIGg9ZC5tdWx0aXBseShqKS5tdWx0aXBseShwKS5zdWJ0cmFjdChuLm11bHRpcGx5KGkpKS5zdWJ0cmFjdChnLm11bHRpcGx5KHApKS5tdWx0aXBseShsLnopLmFkZChwLm11bHRpcGx5KGkpKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZj1pLm11bHRpcGx5KHRoaXMueikubXVsdGlwbHkobC56KS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoYSksdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihoKSxmKX1mdW5jdGlvbiBwb2ludEZwVHdpY2UoKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBnPW5ldyBCaWdJbnRlZ2VyKFwiM1wiKTt2YXIgYz10aGlzLngudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy55LnRvQmlnSW50ZWdlcigpO3ZhciBlPWgubXVsdGlwbHkodGhpcy56KTt2YXIgaj1lLm11bHRpcGx5KGgpLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBpPXRoaXMuY3VydmUuYS50b0JpZ0ludGVnZXIoKTt2YXIgaz1jLnNxdWFyZSgpLm11bHRpcGx5KGcpO2lmKCFCaWdJbnRlZ2VyLlpFUk8uZXF1YWxzKGkpKXtrPWsuYWRkKHRoaXMuei5zcXVhcmUoKS5tdWx0aXBseShpKSl9az1rLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBiPWsuc3F1YXJlKCkuc3VidHJhY3QoYy5zaGlmdExlZnQoMykubXVsdGlwbHkoaikpLnNoaWZ0TGVmdCgxKS5tdWx0aXBseShlKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZj1rLm11bHRpcGx5KGcpLm11bHRpcGx5KGMpLnN1YnRyYWN0KGouc2hpZnRMZWZ0KDEpKS5zaGlmdExlZnQoMikubXVsdGlwbHkoaikuc3VidHJhY3Qoay5zcXVhcmUoKS5tdWx0aXBseShrKSkubW9kKHRoaXMuY3VydmUucSk7dmFyIGQ9ZS5zcXVhcmUoKS5tdWx0aXBseShlKS5zaGlmdExlZnQoMykubW9kKHRoaXMuY3VydmUucSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKGIpLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoZiksZCl9ZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5KGIpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpc31pZihiLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBnPWI7dmFyIGY9Zy5tdWx0aXBseShuZXcgQmlnSW50ZWdlcihcIjNcIikpO3ZhciBsPXRoaXMubmVnYXRlKCk7dmFyIGQ9dGhpczt2YXIgYztmb3IoYz1mLmJpdExlbmd0aCgpLTI7Yz4wOy0tYyl7ZD1kLnR3aWNlKCk7dmFyIGE9Zi50ZXN0Qml0KGMpO3ZhciBqPWcudGVzdEJpdChjKTtpZihhIT1qKXtkPWQuYWRkKGE/dGhpczpsKX19cmV0dXJuIGR9ZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5VHdvKGMsYSxiKXt2YXIgZDtpZihjLmJpdExlbmd0aCgpPmIuYml0TGVuZ3RoKCkpe2Q9Yy5iaXRMZW5ndGgoKS0xfWVsc2V7ZD1iLmJpdExlbmd0aCgpLTF9dmFyIGY9dGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpO3ZhciBlPXRoaXMuYWRkKGEpO3doaWxlKGQ+PTApe2Y9Zi50d2ljZSgpO2lmKGMudGVzdEJpdChkKSl7aWYoYi50ZXN0Qml0KGQpKXtmPWYuYWRkKGUpfWVsc2V7Zj1mLmFkZCh0aGlzKX19ZWxzZXtpZihiLnRlc3RCaXQoZCkpe2Y9Zi5hZGQoYSl9fS0tZH1yZXR1cm4gZn1FQ1BvaW50RnAucHJvdG90eXBlLmdldFg9cG9pbnRGcEdldFg7RUNQb2ludEZwLnByb3RvdHlwZS5nZXRZPXBvaW50RnBHZXRZO0VDUG9pbnRGcC5wcm90b3R5cGUuZXF1YWxzPXBvaW50RnBFcXVhbHM7RUNQb2ludEZwLnByb3RvdHlwZS5pc0luZmluaXR5PXBvaW50RnBJc0luZmluaXR5O0VDUG9pbnRGcC5wcm90b3R5cGUubmVnYXRlPXBvaW50RnBOZWdhdGU7RUNQb2ludEZwLnByb3RvdHlwZS5hZGQ9cG9pbnRGcEFkZDtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlPXBvaW50RnBUd2ljZTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5PXBvaW50RnBNdWx0aXBseTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5VHdvPXBvaW50RnBNdWx0aXBseVR3bztmdW5jdGlvbiBFQ0N1cnZlRnAoZSxkLGMpe3RoaXMucT1lO3RoaXMuYT10aGlzLmZyb21CaWdJbnRlZ2VyKGQpO3RoaXMuYj10aGlzLmZyb21CaWdJbnRlZ2VyKGMpO3RoaXMuaW5maW5pdHk9bmV3IEVDUG9pbnRGcCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gY3VydmVGcEdldFEoKXtyZXR1cm4gdGhpcy5xfWZ1bmN0aW9uIGN1cnZlRnBHZXRBKCl7cmV0dXJuIHRoaXMuYX1mdW5jdGlvbiBjdXJ2ZUZwR2V0Qigpe3JldHVybiB0aGlzLmJ9ZnVuY3Rpb24gY3VydmVGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1yZXR1cm4odGhpcy5xLmVxdWFscyhhLnEpJiZ0aGlzLmEuZXF1YWxzKGEuYSkmJnRoaXMuYi5lcXVhbHMoYS5iKSl9ZnVuY3Rpb24gY3VydmVGcEdldEluZmluaXR5KCl7cmV0dXJuIHRoaXMuaW5maW5pdHl9ZnVuY3Rpb24gY3VydmVGcEZyb21CaWdJbnRlZ2VyKGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsYSl9ZnVuY3Rpb24gY3VydmVGcERlY29kZVBvaW50SGV4KGQpe3N3aXRjaChwYXJzZUludChkLnN1YnN0cigwLDIpLDE2KSl7Y2FzZSAwOnJldHVybiB0aGlzLmluZmluaXR5O2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG51bGw7Y2FzZSA0OmNhc2UgNjpjYXNlIDc6dmFyIGE9KGQubGVuZ3RoLTIpLzI7dmFyIGM9ZC5zdWJzdHIoMixhKTt2YXIgYj1kLnN1YnN0cihhKzIsYSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcyx0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKGMsMTYpKSx0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKGIsMTYpKSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19RUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRRPWN1cnZlRnBHZXRRO0VDQ3VydmVGcC5wcm90b3R5cGUuZ2V0QT1jdXJ2ZUZwR2V0QTtFQ0N1cnZlRnAucHJvdG90eXBlLmdldEI9Y3VydmVGcEdldEI7RUNDdXJ2ZUZwLnByb3RvdHlwZS5lcXVhbHM9Y3VydmVGcEVxdWFscztFQ0N1cnZlRnAucHJvdG90eXBlLmdldEluZmluaXR5PWN1cnZlRnBHZXRJbmZpbml0eTtFQ0N1cnZlRnAucHJvdG90eXBlLmZyb21CaWdJbnRlZ2VyPWN1cnZlRnBGcm9tQmlnSW50ZWdlcjtFQ0N1cnZlRnAucHJvdG90eXBlLmRlY29kZVBvaW50SGV4PWN1cnZlRnBEZWNvZGVQb2ludEhleDtcbi8qISAoYykgU3RlZmFuIFRob21hcyB8IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luanMvYml0Y29pbmpzLWxpYlxyXG4gKi9cclxuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuZ2V0Qnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKCh0aGlzLnRvQmlnSW50ZWdlcigpLmJpdExlbmd0aCgpKzcpLzgpfTtFQ1BvaW50RnAucHJvdG90eXBlLmdldEVuY29kZWQ9ZnVuY3Rpb24oYyl7dmFyIGQ9ZnVuY3Rpb24oaCxmKXt2YXIgZz1oLnRvQnl0ZUFycmF5VW5zaWduZWQoKTtpZihmPGcubGVuZ3RoKXtnPWcuc2xpY2UoZy5sZW5ndGgtZil9ZWxzZXt3aGlsZShmPmcubGVuZ3RoKXtnLnVuc2hpZnQoMCl9fXJldHVybiBnfTt2YXIgYT10aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKTt2YXIgZT10aGlzLmdldFkoKS50b0JpZ0ludGVnZXIoKTt2YXIgYj1kKGEsMzIpO2lmKGMpe2lmKGUuaXNFdmVuKCkpe2IudW5zaGlmdCgyKX1lbHNle2IudW5zaGlmdCgzKX19ZWxzZXtiLnVuc2hpZnQoNCk7Yj1iLmNvbmNhdChkKGUsMzIpKX1yZXR1cm4gYn07RUNQb2ludEZwLmRlY29kZUZyb209ZnVuY3Rpb24oZyxjKXt2YXIgZj1jWzBdO3ZhciBlPWMubGVuZ3RoLTE7dmFyIGQ9Yy5zbGljZSgxLDErZS8yKTt2YXIgYj1jLnNsaWNlKDErZS8yLDErZSk7ZC51bnNoaWZ0KDApO2IudW5zaGlmdCgwKTt2YXIgYT1uZXcgQmlnSW50ZWdlcihkKTt2YXIgaD1uZXcgQmlnSW50ZWdlcihiKTtyZXR1cm4gbmV3IEVDUG9pbnRGcChnLGcuZnJvbUJpZ0ludGVnZXIoYSksZy5mcm9tQmlnSW50ZWdlcihoKSl9O0VDUG9pbnRGcC5kZWNvZGVGcm9tSGV4PWZ1bmN0aW9uKGcsYyl7dmFyIGY9Yy5zdWJzdHIoMCwyKTt2YXIgZT1jLmxlbmd0aC0yO3ZhciBkPWMuc3Vic3RyKDIsZS8yKTt2YXIgYj1jLnN1YnN0cigyK2UvMixlLzIpO3ZhciBhPW5ldyBCaWdJbnRlZ2VyKGQsMTYpO3ZhciBoPW5ldyBCaWdJbnRlZ2VyKGIsMTYpO3JldHVybiBuZXcgRUNQb2ludEZwKGcsZy5mcm9tQmlnSW50ZWdlcihhKSxnLmZyb21CaWdJbnRlZ2VyKGgpKX07RUNQb2ludEZwLnByb3RvdHlwZS5hZGQyRD1mdW5jdGlvbihjKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGN9aWYoYy5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfWlmKHRoaXMueC5lcXVhbHMoYy54KSl7aWYodGhpcy55LmVxdWFscyhjLnkpKXtyZXR1cm4gdGhpcy50d2ljZSgpfXJldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCl9dmFyIGc9Yy54LnN1YnRyYWN0KHRoaXMueCk7dmFyIGU9Yy55LnN1YnRyYWN0KHRoaXMueSk7dmFyIGE9ZS5kaXZpZGUoZyk7dmFyIGQ9YS5zcXVhcmUoKS5zdWJ0cmFjdCh0aGlzLngpLnN1YnRyYWN0KGMueCk7dmFyIGY9YS5tdWx0aXBseSh0aGlzLnguc3VidHJhY3QoZCkpLnN1YnRyYWN0KHRoaXMueSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSxkLGYpfTtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlMkQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBiPXRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKDIpKTt2YXIgZT10aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZigzKSk7dmFyIGE9dGhpcy54LnNxdWFyZSgpLm11bHRpcGx5KGUpLmFkZCh0aGlzLmN1cnZlLmEpLmRpdmlkZSh0aGlzLnkubXVsdGlwbHkoYikpO3ZhciBjPWEuc3F1YXJlKCkuc3VidHJhY3QodGhpcy54Lm11bHRpcGx5KGIpKTt2YXIgZD1hLm11bHRpcGx5KHRoaXMueC5zdWJ0cmFjdChjKSkuc3VidHJhY3QodGhpcy55KTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLGMsZCl9O0VDUG9pbnRGcC5wcm90b3R5cGUubXVsdGlwbHkyRD1mdW5jdGlvbihiKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYoYi5zaWdudW0oKT09MCl7cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgZz1iO3ZhciBmPWcubXVsdGlwbHkobmV3IEJpZ0ludGVnZXIoXCIzXCIpKTt2YXIgbD10aGlzLm5lZ2F0ZSgpO3ZhciBkPXRoaXM7dmFyIGM7Zm9yKGM9Zi5iaXRMZW5ndGgoKS0yO2M+MDstLWMpe2Q9ZC50d2ljZSgpO3ZhciBhPWYudGVzdEJpdChjKTt2YXIgaj1nLnRlc3RCaXQoYyk7aWYoYSE9ail7ZD1kLmFkZDJEKGE/dGhpczpsKX19cmV0dXJuIGR9O0VDUG9pbnRGcC5wcm90b3R5cGUuaXNPbkN1cnZlPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGk9dGhpcy5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGY9dGhpcy5jdXJ2ZS5nZXRBKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGM9dGhpcy5jdXJ2ZS5nZXRCKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy5jdXJ2ZS5nZXRRKCk7dmFyIGU9aS5tdWx0aXBseShpKS5tb2QoaCk7dmFyIGc9ZC5tdWx0aXBseShkKS5tdWx0aXBseShkKS5hZGQoZi5tdWx0aXBseShkKSkuYWRkKGMpLm1vZChoKTtyZXR1cm4gZS5lcXVhbHMoZyl9O0VDUG9pbnRGcC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIihcIit0aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpK1wiLFwiK3RoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkrXCIpXCJ9O0VDUG9pbnRGcC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmN1cnZlLmdldFEoKTtpZih0aGlzLmlzSW5maW5pdHkoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgYXQgaW5maW5pdHkuXCIpfXZhciBhPXRoaXMuZ2V0WCgpLnRvQmlnSW50ZWdlcigpO3ZhciBiPXRoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpO2lmKGEuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHxhLmNvbXBhcmVUbyhjLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKSk+MCl7dGhyb3cgbmV3IEVycm9yKFwieCBjb29yZGluYXRlIG91dCBvZiBib3VuZHNcIil9aWYoYi5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPDB8fGIuY29tcGFyZVRvKGMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKT4wKXt0aHJvdyBuZXcgRXJyb3IoXCJ5IGNvb3JkaW5hdGUgb3V0IG9mIGJvdW5kc1wiKX1pZighdGhpcy5pc09uQ3VydmUoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgbm90IG9uIHRoZSBjdXJ2ZS5cIil9aWYodGhpcy5tdWx0aXBseShjKS5pc0luZmluaXR5KCkpe3Rocm93IG5ldyBFcnJvcihcIlBvaW50IGlzIG5vdCBhIHNjYWxhciBtdWx0aXBsZSBvZiBHLlwiKX1yZXR1cm4gdHJ1ZX07XG4vKiEgTWlrZSBTYW11ZWwgKGMpIDIwMDkgfCBjb2RlLmdvb2dsZS5jb20vcC9qc29uLXNhbnMtZXZhbFxyXG4gKi9cclxudmFyIGpzb25QYXJzZT0oZnVuY3Rpb24oKXt2YXIgZT1cIig/Oi0/XFxcXGIoPzowfFsxLTldWzAtOV0qKSg/OlxcXFwuWzAtOV0rKT8oPzpbZUVdWystXT9bMC05XSspP1xcXFxiKVwiO3ZhciBqPScoPzpbXlxcXFwwLVxcXFx4MDhcXFxceDBhLVxcXFx4MWZcIlxcXFxcXFxcXXxcXFxcXFxcXCg/OltcIi9cXFxcXFxcXGJmbnJ0XXx1WzAtOUEtRmEtZl17NH0pKSc7dmFyIGk9Jyg/OlwiJytqKycqXCIpJzt2YXIgZD1uZXcgUmVnRXhwKFwiKD86ZmFsc2V8dHJ1ZXxudWxsfFtcXFxce1xcXFx9XFxcXFtcXFxcXV18XCIrZStcInxcIitpK1wiKVwiLFwiZ1wiKTt2YXIgaz1uZXcgUmVnRXhwKFwiXFxcXFxcXFwoPzooW151XSl8dSguezR9KSlcIixcImdcIik7dmFyIGc9eydcIic6J1wiJyxcIi9cIjpcIi9cIixcIlxcXFxcIjpcIlxcXFxcIixiOlwiXFxiXCIsZjpcIlxcZlwiLG46XCJcXG5cIixyOlwiXFxyXCIsdDpcIlxcdFwifTtmdW5jdGlvbiBoKGwsbSxuKXtyZXR1cm4gbT9nW21dOlN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobiwxNikpfXZhciBjPW5ldyBTdHJpbmcoXCJcIik7dmFyIGE9XCJcXFxcXCI7dmFyIGY9e1wie1wiOk9iamVjdCxcIltcIjpBcnJheX07dmFyIGI9T2JqZWN0Lmhhc093blByb3BlcnR5O3JldHVybiBmdW5jdGlvbih1LHEpe3ZhciBwPXUubWF0Y2goZCk7dmFyIHg7dmFyIHY9cFswXTt2YXIgbD1mYWxzZTtpZihcIntcIj09PXYpe3g9e319ZWxzZXtpZihcIltcIj09PXYpe3g9W119ZWxzZXt4PVtdO2w9dHJ1ZX19dmFyIHQ7dmFyIHI9W3hdO2Zvcih2YXIgbz0xLWwsbT1wLmxlbmd0aDtvPG07KytvKXt2PXBbb107dmFyIHc7c3dpdGNoKHYuY2hhckNvZGVBdCgwKSl7ZGVmYXVsdDp3PXJbMF07d1t0fHx3Lmxlbmd0aF09Kyh2KTt0PXZvaWQgMDticmVhaztjYXNlIDM0OnY9di5zdWJzdHJpbmcoMSx2Lmxlbmd0aC0xKTtpZih2LmluZGV4T2YoYSkhPT0tMSl7dj12LnJlcGxhY2UoayxoKX13PXJbMF07aWYoIXQpe2lmKHcgaW5zdGFuY2VvZiBBcnJheSl7dD13Lmxlbmd0aH1lbHNle3Q9dnx8YzticmVha319d1t0XT12O3Q9dm9pZCAwO2JyZWFrO2Nhc2UgOTE6dz1yWzBdO3IudW5zaGlmdCh3W3R8fHcubGVuZ3RoXT1bXSk7dD12b2lkIDA7YnJlYWs7Y2FzZSA5MzpyLnNoaWZ0KCk7YnJlYWs7Y2FzZSAxMDI6dz1yWzBdO3dbdHx8dy5sZW5ndGhdPWZhbHNlO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTEwOnc9clswXTt3W3R8fHcubGVuZ3RoXT1udWxsO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTE2Onc9clswXTt3W3R8fHcubGVuZ3RoXT10cnVlO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTIzOnc9clswXTtyLnVuc2hpZnQod1t0fHx3Lmxlbmd0aF09e30pO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTI1OnIuc2hpZnQoKTticmVha319aWYobCl7aWYoci5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoKX14PXhbMF19ZWxzZXtpZihyLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCl9fWlmKHEpe3ZhciBzPWZ1bmN0aW9uKEMsQil7dmFyIEQ9Q1tCXTtpZihEJiZ0eXBlb2YgRD09PVwib2JqZWN0XCIpe3ZhciBuPW51bGw7Zm9yKHZhciB6IGluIEQpe2lmKGIuY2FsbChELHopJiZEIT09Qyl7dmFyIHk9cyhELHopO2lmKHkhPT12b2lkIDApe0Rbel09eX1lbHNle2lmKCFuKXtuPVtdfW4ucHVzaCh6KX19fWlmKG4pe2Zvcih2YXIgQT1uLmxlbmd0aDstLUE+PTA7KXtkZWxldGUgRFtuW0FdXX19fXJldHVybiBxLmNhbGwoQyxCLEQpfTt4PXMoe1wiXCI6eH0sXCJcIil9cmV0dXJuIHh9fSkoKTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5hc24xPT1cInVuZGVmaW5lZFwifHwhS0pVUi5hc24xKXtLSlVSLmFzbjE9e319S0pVUi5hc24xLkFTTjFVdGlsPW5ldyBmdW5jdGlvbigpe3RoaXMuaW50ZWdlclRvQnl0ZUhleD1mdW5jdGlvbihhKXt2YXIgYj1hLnRvU3RyaW5nKDE2KTtpZigoYi5sZW5ndGglMik9PTEpe2I9XCIwXCIrYn1yZXR1cm4gYn07dGhpcy5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleD1mdW5jdGlvbihqKXt2YXIgZj1qLnRvU3RyaW5nKDE2KTtpZihmLnN1YnN0cigwLDEpIT1cIi1cIil7aWYoZi5sZW5ndGglMj09MSl7Zj1cIjBcIitmfWVsc2V7aWYoIWYubWF0Y2goL15bMC03XS8pKXtmPVwiMDBcIitmfX19ZWxzZXt2YXIgYT1mLnN1YnN0cigxKTt2YXIgZT1hLmxlbmd0aDtpZihlJTI9PTEpe2UrPTF9ZWxzZXtpZighZi5tYXRjaCgvXlswLTddLykpe2UrPTJ9fXZhciBnPVwiXCI7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7Zys9XCJmXCJ9dmFyIGM9bmV3IEJpZ0ludGVnZXIoZywxNik7dmFyIGI9Yy54b3IoaikuYWRkKEJpZ0ludGVnZXIuT05FKTtmPWIudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14tLyxcIlwiKX1yZXR1cm4gZn07dGhpcy5nZXRQRU1TdHJpbmdGcm9tSGV4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGhleHRvcGVtKGEsYil9O3RoaXMubmV3T2JqZWN0PWZ1bmN0aW9uKGspe3ZhciBEPUtKVVIsbj1ELmFzbjEsej1uLkRFUkJvb2xlYW4sZT1uLkRFUkludGVnZXIscz1uLkRFUkJpdFN0cmluZyxoPW4uREVST2N0ZXRTdHJpbmcsdj1uLkRFUk51bGwsdz1uLkRFUk9iamVjdElkZW50aWZpZXIsbD1uLkRFUkVudW1lcmF0ZWQsZz1uLkRFUlVURjhTdHJpbmcsZj1uLkRFUk51bWVyaWNTdHJpbmcseT1uLkRFUlByaW50YWJsZVN0cmluZyx1PW4uREVSVGVsZXRleFN0cmluZyxwPW4uREVSSUE1U3RyaW5nLEM9bi5ERVJVVENUaW1lLGo9bi5ERVJHZW5lcmFsaXplZFRpbWUsbT1uLkRFUlNlcXVlbmNlLGM9bi5ERVJTZXQscj1uLkRFUlRhZ2dlZE9iamVjdCxvPW4uQVNOMVV0aWwubmV3T2JqZWN0O3ZhciB0PU9iamVjdC5rZXlzKGspO2lmKHQubGVuZ3RoIT0xKXt0aHJvd1wia2V5IG9mIHBhcmFtIHNoYWxsIGJlIG9ubHkgb25lLlwifXZhciBGPXRbMF07aWYoXCI6Ym9vbDppbnQ6Yml0c3RyOm9jdHN0cjpudWxsOm9pZDplbnVtOnV0ZjhzdHI6bnVtc3RyOnBybnN0cjp0ZWxzdHI6aWE1c3RyOnV0Y3RpbWU6Z2VudGltZTpzZXE6c2V0OnRhZzpcIi5pbmRleE9mKFwiOlwiK0YrXCI6XCIpPT0tMSl7dGhyb3dcInVuZGVmaW5lZCBrZXk6IFwiK0Z9aWYoRj09XCJib29sXCIpe3JldHVybiBuZXcgeihrW0ZdKX1pZihGPT1cImludFwiKXtyZXR1cm4gbmV3IGUoa1tGXSl9aWYoRj09XCJiaXRzdHJcIil7cmV0dXJuIG5ldyBzKGtbRl0pfWlmKEY9PVwib2N0c3RyXCIpe3JldHVybiBuZXcgaChrW0ZdKX1pZihGPT1cIm51bGxcIil7cmV0dXJuIG5ldyB2KGtbRl0pfWlmKEY9PVwib2lkXCIpe3JldHVybiBuZXcgdyhrW0ZdKX1pZihGPT1cImVudW1cIil7cmV0dXJuIG5ldyBsKGtbRl0pfWlmKEY9PVwidXRmOHN0clwiKXtyZXR1cm4gbmV3IGcoa1tGXSl9aWYoRj09XCJudW1zdHJcIil7cmV0dXJuIG5ldyBmKGtbRl0pfWlmKEY9PVwicHJuc3RyXCIpe3JldHVybiBuZXcgeShrW0ZdKX1pZihGPT1cInRlbHN0clwiKXtyZXR1cm4gbmV3IHUoa1tGXSl9aWYoRj09XCJpYTVzdHJcIil7cmV0dXJuIG5ldyBwKGtbRl0pfWlmKEY9PVwidXRjdGltZVwiKXtyZXR1cm4gbmV3IEMoa1tGXSl9aWYoRj09XCJnZW50aW1lXCIpe3JldHVybiBuZXcgaihrW0ZdKX1pZihGPT1cInNlcVwiKXt2YXIgZD1rW0ZdO3ZhciBFPVtdO2Zvcih2YXIgeD0wO3g8ZC5sZW5ndGg7eCsrKXt2YXIgQj1vKGRbeF0pO0UucHVzaChCKX1yZXR1cm4gbmV3IG0oe2FycmF5OkV9KX1pZihGPT1cInNldFwiKXt2YXIgZD1rW0ZdO3ZhciBFPVtdO2Zvcih2YXIgeD0wO3g8ZC5sZW5ndGg7eCsrKXt2YXIgQj1vKGRbeF0pO0UucHVzaChCKX1yZXR1cm4gbmV3IGMoe2FycmF5OkV9KX1pZihGPT1cInRhZ1wiKXt2YXIgQT1rW0ZdO2lmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChBKT09PVwiW29iamVjdCBBcnJheV1cIiYmQS5sZW5ndGg9PTMpe3ZhciBxPW8oQVsyXSk7cmV0dXJuIG5ldyByKHt0YWc6QVswXSxleHBsaWNpdDpBWzFdLG9iajpxfSl9ZWxzZXt2YXIgYj17fTtpZihBLmV4cGxpY2l0IT09dW5kZWZpbmVkKXtiLmV4cGxpY2l0PUEuZXhwbGljaXR9aWYoQS50YWchPT11bmRlZmluZWQpe2IudGFnPUEudGFnfWlmKEEub2JqPT09dW5kZWZpbmVkKXt0aHJvd1wib2JqIHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgJ3RhZycuXCJ9Yi5vYmo9byhBLm9iaik7cmV0dXJuIG5ldyByKGIpfX19O3RoaXMuanNvblRvQVNOMUhFWD1mdW5jdGlvbihiKXt2YXIgYT10aGlzLm5ld09iamVjdChiKTtyZXR1cm4gYS5nZXRFbmNvZGVkSGV4KCl9fTtLSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQ9ZnVuY3Rpb24oYSl7dmFyIGo9XCJcIjt2YXIgaz1wYXJzZUludChhLnN1YnN0cigwLDIpLDE2KTt2YXIgZD1NYXRoLmZsb29yKGsvNDApO3ZhciBjPWslNDA7dmFyIGo9ZCtcIi5cIitjO3ZhciBlPVwiXCI7Zm9yKHZhciBmPTI7ZjxhLmxlbmd0aDtmKz0yKXt2YXIgZz1wYXJzZUludChhLnN1YnN0cihmLDIpLDE2KTt2YXIgaD0oXCIwMDAwMDAwMFwiK2cudG9TdHJpbmcoMikpLnNsaWNlKC04KTtlPWUraC5zdWJzdHIoMSw3KTtpZihoLnN1YnN0cigwLDEpPT1cIjBcIil7dmFyIGI9bmV3IEJpZ0ludGVnZXIoZSwyKTtqPWorXCIuXCIrYi50b1N0cmluZygxMCk7ZT1cIlwifX1yZXR1cm4gan07S0pVUi5hc24xLkFTTjFVdGlsLm9pZEludFRvSGV4PWZ1bmN0aW9uKGYpe3ZhciBlPWZ1bmN0aW9uKGEpe3ZhciBrPWEudG9TdHJpbmcoMTYpO2lmKGsubGVuZ3RoPT0xKXtrPVwiMFwiK2t9cmV0dXJuIGt9O3ZhciBkPWZ1bmN0aW9uKG8pe3ZhciBuPVwiXCI7dmFyIGs9bmV3IEJpZ0ludGVnZXIobywxMCk7dmFyIGE9ay50b1N0cmluZygyKTt2YXIgbD03LWEubGVuZ3RoJTc7aWYobD09Nyl7bD0wfXZhciBxPVwiXCI7Zm9yKHZhciBtPTA7bTxsO20rKyl7cSs9XCIwXCJ9YT1xK2E7Zm9yKHZhciBtPTA7bTxhLmxlbmd0aC0xO20rPTcpe3ZhciBwPWEuc3Vic3RyKG0sNyk7aWYobSE9YS5sZW5ndGgtNyl7cD1cIjFcIitwfW4rPWUocGFyc2VJbnQocCwyKSl9cmV0dXJuIG59O2lmKCFmLm1hdGNoKC9eWzAtOS5dKyQvKSl7dGhyb3dcIm1hbGZvcm1lZCBvaWQgc3RyaW5nOiBcIitmfXZhciBnPVwiXCI7dmFyIGI9Zi5zcGxpdChcIi5cIik7dmFyIGo9cGFyc2VJbnQoYlswXSkqNDArcGFyc2VJbnQoYlsxXSk7Zys9ZShqKTtiLnNwbGljZSgwLDIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXtnKz1kKGJbY10pfXJldHVybiBnfTtLSlVSLmFzbjEuQVNOMU9iamVjdD1mdW5jdGlvbigpe3ZhciBjPXRydWU7dmFyIGI9bnVsbDt2YXIgZD1cIjAwXCI7dmFyIGU9XCIwMFwiO3ZhciBhPVwiXCI7dGhpcy5nZXRMZW5ndGhIZXhGcm9tVmFsdWU9ZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5oVj09XCJ1bmRlZmluZWRcInx8dGhpcy5oVj09bnVsbCl7dGhyb3dcInRoaXMuaFYgaXMgbnVsbCBvciB1bmRlZmluZWQuXCJ9aWYodGhpcy5oVi5sZW5ndGglMj09MSl7dGhyb3dcInZhbHVlIGhleCBtdXN0IGJlIGV2ZW4gbGVuZ3RoOiBuPVwiK2EubGVuZ3RoK1wiLHY9XCIrdGhpcy5oVn12YXIgaT10aGlzLmhWLmxlbmd0aC8yO3ZhciBoPWkudG9TdHJpbmcoMTYpO2lmKGgubGVuZ3RoJTI9PTEpe2g9XCIwXCIraH1pZihpPDEyOCl7cmV0dXJuIGh9ZWxzZXt2YXIgZz1oLmxlbmd0aC8yO2lmKGc+MTUpe3Rocm93XCJBU04uMSBsZW5ndGggdG9vIGxvbmcgdG8gcmVwcmVzZW50IGJ5IDh4OiBuID0gXCIraS50b1N0cmluZygxNil9dmFyIGY9MTI4K2c7cmV0dXJuIGYudG9TdHJpbmcoMTYpK2h9fTt0aGlzLmdldEVuY29kZWRIZXg9ZnVuY3Rpb24oKXtpZih0aGlzLmhUTFY9PW51bGx8fHRoaXMuaXNNb2RpZmllZCl7dGhpcy5oVj10aGlzLmdldEZyZXNoVmFsdWVIZXgoKTt0aGlzLmhMPXRoaXMuZ2V0TGVuZ3RoSGV4RnJvbVZhbHVlKCk7dGhpcy5oVExWPXRoaXMuaFQrdGhpcy5oTCt0aGlzLmhWO3RoaXMuaXNNb2RpZmllZD1mYWxzZX1yZXR1cm4gdGhpcy5oVExWfTt0aGlzLmdldFZhbHVlSGV4PWZ1bmN0aW9uKCl7dGhpcy5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIHRoaXMuaFZ9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVyblwiXCJ9fTtLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmc9ZnVuY3Rpb24oYyl7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYj1udWxsO3ZhciBhPW51bGw7dGhpcy5nZXRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfTt0aGlzLnNldFN0cmluZz1mdW5jdGlvbihkKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9ZDt0aGlzLmhWPXV0Zjh0b2hleCh0aGlzLnMpLnRvTG93ZXJDYXNlKCl9O3RoaXMuc2V0U3RyaW5nSGV4PWZ1bmN0aW9uKGQpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1udWxsO3RoaXMuaFY9ZH07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBjIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYz09XCJzdHJpbmdcIil7dGhpcy5zZXRTdHJpbmcoYyl9ZWxzZXtpZih0eXBlb2YgYy5zdHIhPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0U3RyaW5nKGMuc3RyKX1lbHNle2lmKHR5cGVvZiBjLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRTdHJpbmdIZXgoYy5oZXgpfX19fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lPWZ1bmN0aW9uKGMpe0tKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBiPW51bGw7dmFyIGE9bnVsbDt0aGlzLmxvY2FsRGF0ZVRvVVRDPWZ1bmN0aW9uKGYpe3V0Yz1mLmdldFRpbWUoKSsoZi5nZXRUaW1lem9uZU9mZnNldCgpKjYwMDAwKTt2YXIgZT1uZXcgRGF0ZSh1dGMpO3JldHVybiBlfTt0aGlzLmZvcm1hdERhdGU9ZnVuY3Rpb24obSxvLGUpe3ZhciBnPXRoaXMuemVyb1BhZGRpbmc7dmFyIG49dGhpcy5sb2NhbERhdGVUb1VUQyhtKTt2YXIgcD1TdHJpbmcobi5nZXRGdWxsWWVhcigpKTtpZihvPT1cInV0Y1wiKXtwPXAuc3Vic3RyKDIsMil9dmFyIGw9ZyhTdHJpbmcobi5nZXRNb250aCgpKzEpLDIpO3ZhciBxPWcoU3RyaW5nKG4uZ2V0RGF0ZSgpKSwyKTt2YXIgaD1nKFN0cmluZyhuLmdldEhvdXJzKCkpLDIpO3ZhciBpPWcoU3RyaW5nKG4uZ2V0TWludXRlcygpKSwyKTt2YXIgaj1nKFN0cmluZyhuLmdldFNlY29uZHMoKSksMik7dmFyIHI9cCtsK3EraCtpK2o7aWYoZT09PXRydWUpe3ZhciBmPW4uZ2V0TWlsbGlzZWNvbmRzKCk7aWYoZiE9MCl7dmFyIGs9ZyhTdHJpbmcoZiksMyk7az1rLnJlcGxhY2UoL1swXSskLyxcIlwiKTtyPXIrXCIuXCIra319cmV0dXJuIHIrXCJaXCJ9O3RoaXMuemVyb1BhZGRpbmc9ZnVuY3Rpb24oZSxkKXtpZihlLmxlbmd0aD49ZCl7cmV0dXJuIGV9cmV0dXJuIG5ldyBBcnJheShkLWUubGVuZ3RoKzEpLmpvaW4oXCIwXCIpK2V9O3RoaXMuZ2V0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc307dGhpcy5zZXRTdHJpbmc9ZnVuY3Rpb24oZCl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPWQ7dGhpcy5oVj1zdG9oZXgoZCl9O3RoaXMuc2V0QnlEYXRlVmFsdWU9ZnVuY3Rpb24oaCxqLGUsZCxmLGcpe3ZhciBpPW5ldyBEYXRlKERhdGUuVVRDKGgsai0xLGUsZCxmLGcsMCkpO3RoaXMuc2V0QnlEYXRlKGkpfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQ9ZnVuY3Rpb24oYil7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYT1udWxsO3RoaXMuc2V0QnlBU04xT2JqZWN0QXJyYXk9ZnVuY3Rpb24oYyl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5hc24xQXJyYXk9Y307dGhpcy5hcHBlbmRBU04xT2JqZWN0PWZ1bmN0aW9uKGMpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuYXNuMUFycmF5LnB1c2goYyl9O3RoaXMuYXNuMUFycmF5PW5ldyBBcnJheSgpO2lmKHR5cGVvZiBiIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYi5hcnJheSE9XCJ1bmRlZmluZWRcIil7dGhpcy5hc24xQXJyYXk9Yi5hcnJheX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQm9vbGVhbj1mdW5jdGlvbigpe0tKVVIuYXNuMS5ERVJCb29sZWFuLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDFcIjt0aGlzLmhUTFY9XCIwMTAxZmZcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkJvb2xlYW4sS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJJbnRlZ2VyPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJJbnRlZ2VyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDJcIjt0aGlzLnNldEJ5QmlnSW50ZWdlcj1mdW5jdGlvbihiKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPUtKVVIuYXNuMS5BU04xVXRpbC5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleChiKX07dGhpcy5zZXRCeUludGVnZXI9ZnVuY3Rpb24oYyl7dmFyIGI9bmV3IEJpZ0ludGVnZXIoU3RyaW5nKGMpLDEwKTt0aGlzLnNldEJ5QmlnSW50ZWdlcihiKX07dGhpcy5zZXRWYWx1ZUhleD1mdW5jdGlvbihiKXt0aGlzLmhWPWJ9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYSE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGEuYmlnaW50IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5QmlnSW50ZWdlcihhLmJpZ2ludCl9ZWxzZXtpZih0eXBlb2YgYVtcImludFwiXSE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUludGVnZXIoYVtcImludFwiXSl9ZWxzZXtpZih0eXBlb2YgYT09XCJudW1iZXJcIil7dGhpcy5zZXRCeUludGVnZXIoYSl9ZWxzZXtpZih0eXBlb2YgYS5oZXghPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0VmFsdWVIZXgoYS5oZXgpfX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJJbnRlZ2VyLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQml0U3RyaW5nPWZ1bmN0aW9uKGIpe2lmKGIhPT11bmRlZmluZWQmJnR5cGVvZiBiLm9iaiE9PVwidW5kZWZpbmVkXCIpe3ZhciBhPUtKVVIuYXNuMS5BU04xVXRpbC5uZXdPYmplY3QoYi5vYmopO2IuaGV4PVwiMDBcIithLmdldEVuY29kZWRIZXgoKX1LSlVSLmFzbjEuREVSQml0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDNcIjt0aGlzLnNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cz1mdW5jdGlvbihjKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPWN9O3RoaXMuc2V0VW51c2VkQml0c0FuZEhleFZhbHVlPWZ1bmN0aW9uKGMsZSl7aWYoYzwwfHw3PGMpe3Rocm93XCJ1bnVzZWQgYml0cyBzaGFsbCBiZSBmcm9tIDAgdG8gNzogdSA9IFwiK2N9dmFyIGQ9XCIwXCIrYzt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPWQrZX07dGhpcy5zZXRCeUJpbmFyeVN0cmluZz1mdW5jdGlvbihlKXtlPWUucmVwbGFjZSgvMCskLyxcIlwiKTt2YXIgZj04LWUubGVuZ3RoJTg7aWYoZj09OCl7Zj0wfWZvcih2YXIgZz0wO2c8PWY7ZysrKXtlKz1cIjBcIn12YXIgaj1cIlwiO2Zvcih2YXIgZz0wO2c8ZS5sZW5ndGgtMTtnKz04KXt2YXIgZD1lLnN1YnN0cihnLDgpO3ZhciBjPXBhcnNlSW50KGQsMikudG9TdHJpbmcoMTYpO2lmKGMubGVuZ3RoPT0xKXtjPVwiMFwiK2N9ais9Y310aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPVwiMFwiK2Yran07dGhpcy5zZXRCeUJvb2xlYW5BcnJheT1mdW5jdGlvbihlKXt2YXIgZD1cIlwiO2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXtpZihlW2NdPT10cnVlKXtkKz1cIjFcIn1lbHNle2QrPVwiMFwifX10aGlzLnNldEJ5QmluYXJ5U3RyaW5nKGQpfTt0aGlzLm5ld0ZhbHNlQXJyYXk9ZnVuY3Rpb24oZSl7dmFyIGM9bmV3IEFycmF5KGUpO2Zvcih2YXIgZD0wO2Q8ZTtkKyspe2NbZF09ZmFsc2V9cmV0dXJuIGN9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYiE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGI9PVwic3RyaW5nXCImJmIudG9Mb3dlckNhc2UoKS5tYXRjaCgvXlswLTlhLWZdKyQvKSl7dGhpcy5zZXRIZXhWYWx1ZUluY2x1ZGluZ1VudXNlZEJpdHMoYil9ZWxzZXtpZih0eXBlb2YgYi5oZXghPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzKGIuaGV4KX1lbHNle2lmKHR5cGVvZiBiLmJpbiE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUJpbmFyeVN0cmluZyhiLmJpbil9ZWxzZXtpZih0eXBlb2YgYi5hcnJheSE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUJvb2xlYW5BcnJheShiLmFycmF5KX19fX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQml0U3RyaW5nLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVST2N0ZXRTdHJpbmc9ZnVuY3Rpb24oYil7aWYoYiE9PXVuZGVmaW5lZCYmdHlwZW9mIGIub2JqIT09XCJ1bmRlZmluZWRcIil7dmFyIGE9S0pVUi5hc24xLkFTTjFVdGlsLm5ld09iamVjdChiLm9iaik7Yi5oZXg9YS5nZXRFbmNvZGVkSGV4KCl9S0pVUi5hc24xLkRFUk9jdGV0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGIpO3RoaXMuaFQ9XCIwNFwifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVST2N0ZXRTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSTnVsbD1mdW5jdGlvbigpe0tKVVIuYXNuMS5ERVJOdWxsLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDVcIjt0aGlzLmhUTFY9XCIwNTAwXCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJOdWxsLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllcj1mdW5jdGlvbihjKXt2YXIgYj1mdW5jdGlvbihkKXt2YXIgZT1kLnRvU3RyaW5nKDE2KTtpZihlLmxlbmd0aD09MSl7ZT1cIjBcIitlfXJldHVybiBlfTt2YXIgYT1mdW5jdGlvbihrKXt2YXIgaj1cIlwiO3ZhciBlPW5ldyBCaWdJbnRlZ2VyKGssMTApO3ZhciBkPWUudG9TdHJpbmcoMik7dmFyIGY9Ny1kLmxlbmd0aCU3O2lmKGY9PTcpe2Y9MH12YXIgbT1cIlwiO2Zvcih2YXIgZz0wO2c8ZjtnKyspe20rPVwiMFwifWQ9bStkO2Zvcih2YXIgZz0wO2c8ZC5sZW5ndGgtMTtnKz03KXt2YXIgbD1kLnN1YnN0cihnLDcpO2lmKGchPWQubGVuZ3RoLTcpe2w9XCIxXCIrbH1qKz1iKHBhcnNlSW50KGwsMikpfXJldHVybiBqfTtLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllci5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjA2XCI7dGhpcy5zZXRWYWx1ZUhleD1mdW5jdGlvbihkKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9bnVsbDt0aGlzLmhWPWR9O3RoaXMuc2V0VmFsdWVPaWRTdHJpbmc9ZnVuY3Rpb24oZil7aWYoIWYubWF0Y2goL15bMC05Ll0rJC8pKXt0aHJvd1wibWFsZm9ybWVkIG9pZCBzdHJpbmc6IFwiK2Z9dmFyIGc9XCJcIjt2YXIgZD1mLnNwbGl0KFwiLlwiKTt2YXIgaj1wYXJzZUludChkWzBdKSo0MCtwYXJzZUludChkWzFdKTtnKz1iKGopO2Quc3BsaWNlKDAsMik7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspe2crPWEoZFtlXSl9dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPW51bGw7dGhpcy5oVj1nfTt0aGlzLnNldFZhbHVlTmFtZT1mdW5jdGlvbihlKXt2YXIgZD1LSlVSLmFzbjEueDUwOS5PSUQubmFtZTJvaWQoZSk7aWYoZCE9PVwiXCIpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoZCl9ZWxzZXt0aHJvd1wiREVST2JqZWN0SWRlbnRpZmllciBvaWROYW1lIHVuZGVmaW5lZDogXCIrZX19O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZihjIT09dW5kZWZpbmVkKXtpZih0eXBlb2YgYz09PVwic3RyaW5nXCIpe2lmKGMubWF0Y2goL15bMC0yXS5bMC05Ll0rJC8pKXt0aGlzLnNldFZhbHVlT2lkU3RyaW5nKGMpfWVsc2V7dGhpcy5zZXRWYWx1ZU5hbWUoYyl9fWVsc2V7aWYoYy5vaWQhPT11bmRlZmluZWQpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoYy5vaWQpfWVsc2V7aWYoYy5oZXghPT11bmRlZmluZWQpe3RoaXMuc2V0VmFsdWVIZXgoYy5oZXgpfWVsc2V7aWYoYy5uYW1lIT09dW5kZWZpbmVkKXt0aGlzLnNldFZhbHVlTmFtZShjLm5hbWUpfX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSRW51bWVyYXRlZD1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSRW51bWVyYXRlZC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjBhXCI7dGhpcy5zZXRCeUJpZ0ludGVnZXI9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5oVj1LSlVSLmFzbjEuQVNOMVV0aWwuYmlnSW50VG9NaW5Ud29zQ29tcGxlbWVudHNIZXgoYil9O3RoaXMuc2V0QnlJbnRlZ2VyPWZ1bmN0aW9uKGMpe3ZhciBiPW5ldyBCaWdJbnRlZ2VyKFN0cmluZyhjKSwxMCk7dGhpcy5zZXRCeUJpZ0ludGVnZXIoYil9O3RoaXMuc2V0VmFsdWVIZXg9ZnVuY3Rpb24oYil7dGhpcy5oVj1ifTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn07aWYodHlwZW9mIGEhPVwidW5kZWZpbmVkXCIpe2lmKHR5cGVvZiBhW1wiaW50XCJdIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5SW50ZWdlcihhW1wiaW50XCJdKX1lbHNle2lmKHR5cGVvZiBhPT1cIm51bWJlclwiKXt0aGlzLnNldEJ5SW50ZWdlcihhKX1lbHNle2lmKHR5cGVvZiBhLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRWYWx1ZUhleChhLmhleCl9fX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSRW51bWVyYXRlZCxLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUlVURjhTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlVURjhTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjBjXCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJVVEY4U3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUk51bWVyaWNTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUk51bWVyaWNTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjEyXCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUlByaW50YWJsZVN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSUHJpbnRhYmxlU3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxM1wifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSUHJpbnRhYmxlU3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUlRlbGV0ZXhTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlRlbGV0ZXhTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjE0XCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJUZWxldGV4U3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUklBNVN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSSUE1U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxNlwifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSSUE1U3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUlVUQ1RpbWU9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlVUQ1RpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjE3XCI7dGhpcy5zZXRCeURhdGU9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5kYXRlPWI7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJ1dGNcIik7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMuZGF0ZT09XCJ1bmRlZmluZWRcIiYmdHlwZW9mIHRoaXMucz09XCJ1bmRlZmluZWRcIil7dGhpcy5kYXRlPW5ldyBEYXRlKCk7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJ1dGNcIik7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX1yZXR1cm4gdGhpcy5oVn07aWYoYSE9PXVuZGVmaW5lZCl7aWYoYS5zdHIhPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nKGEuc3RyKX1lbHNle2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiJiZhLm1hdGNoKC9eWzAtOV17MTJ9WiQvKSl7dGhpcy5zZXRTdHJpbmcoYSl9ZWxzZXtpZihhLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmdIZXgoYS5oZXgpfWVsc2V7aWYoYS5kYXRlIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5RGF0ZShhLmRhdGUpfX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJVVENUaW1lLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUpO0tKVVIuYXNuMS5ERVJHZW5lcmFsaXplZFRpbWU9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMThcIjt0aGlzLndpdGhNaWxsaXM9ZmFsc2U7dGhpcy5zZXRCeURhdGU9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5kYXRlPWI7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJnZW5cIix0aGlzLndpdGhNaWxsaXMpO3RoaXMuaFY9c3RvaGV4KHRoaXMucyl9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe2lmKHRoaXMuZGF0ZT09PXVuZGVmaW5lZCYmdGhpcy5zPT09dW5kZWZpbmVkKXt0aGlzLmRhdGU9bmV3IERhdGUoKTt0aGlzLnM9dGhpcy5mb3JtYXREYXRlKHRoaXMuZGF0ZSxcImdlblwiLHRoaXMud2l0aE1pbGxpcyk7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX1yZXR1cm4gdGhpcy5oVn07aWYoYSE9PXVuZGVmaW5lZCl7aWYoYS5zdHIhPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nKGEuc3RyKX1lbHNle2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiJiZhLm1hdGNoKC9eWzAtOV17MTR9WiQvKSl7dGhpcy5zZXRTdHJpbmcoYSl9ZWxzZXtpZihhLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmdIZXgoYS5oZXgpfWVsc2V7aWYoYS5kYXRlIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5RGF0ZShhLmRhdGUpfX19fWlmKGEubWlsbGlzPT09dHJ1ZSl7dGhpcy53aXRoTWlsbGlzPXRydWV9fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZSxLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lKTtLSlVSLmFzbjEuREVSU2VxdWVuY2U9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlNlcXVlbmNlLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIzMFwiO3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3ZhciBjPVwiXCI7Zm9yKHZhciBiPTA7Yjx0aGlzLmFzbjFBcnJheS5sZW5ndGg7YisrKXt2YXIgZD10aGlzLmFzbjFBcnJheVtiXTtjKz1kLmdldEVuY29kZWRIZXgoKX10aGlzLmhWPWM7cmV0dXJuIHRoaXMuaFZ9fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSU2VxdWVuY2UsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RydWN0dXJlZCk7S0pVUi5hc24xLkRFUlNldD1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSU2V0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIzMVwiO3RoaXMuc29ydEZsYWc9dHJ1ZTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgQXJyYXkoKTtmb3IodmFyIGM9MDtjPHRoaXMuYXNuMUFycmF5Lmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuYXNuMUFycmF5W2NdO2IucHVzaChkLmdldEVuY29kZWRIZXgoKSl9aWYodGhpcy5zb3J0RmxhZz09dHJ1ZSl7Yi5zb3J0KCl9dGhpcy5oVj1iLmpvaW4oXCJcIik7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS5zb3J0ZmxhZyE9XCJ1bmRlZmluZWRcIiYmYS5zb3J0ZmxhZz09ZmFsc2Upe3RoaXMuc29ydEZsYWc9ZmFsc2V9fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlNldCxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkKTtLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0PWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3Quc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCJhMFwiO3RoaXMuaFY9XCJcIjt0aGlzLmlzRXhwbGljaXQ9dHJ1ZTt0aGlzLmFzbjFPYmplY3Q9bnVsbDt0aGlzLnNldEFTTjFPYmplY3Q9ZnVuY3Rpb24oYixjLGQpe3RoaXMuaFQ9Yzt0aGlzLmlzRXhwbGljaXQ9Yjt0aGlzLmFzbjFPYmplY3Q9ZDtpZih0aGlzLmlzRXhwbGljaXQpe3RoaXMuaFY9dGhpcy5hc24xT2JqZWN0LmdldEVuY29kZWRIZXgoKTt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZX1lbHNle3RoaXMuaFY9bnVsbDt0aGlzLmhUTFY9ZC5nZXRFbmNvZGVkSGV4KCk7dGhpcy5oVExWPXRoaXMuaFRMVi5yZXBsYWNlKC9eLi4vLGMpO3RoaXMuaXNNb2RpZmllZD1mYWxzZX19O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYSE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGEudGFnIT1cInVuZGVmaW5lZFwiKXt0aGlzLmhUPWEudGFnfWlmKHR5cGVvZiBhLmV4cGxpY2l0IT1cInVuZGVmaW5lZFwiKXt0aGlzLmlzRXhwbGljaXQ9YS5leHBsaWNpdH1pZih0eXBlb2YgYS5vYmohPVwidW5kZWZpbmVkXCIpe3RoaXMuYXNuMU9iamVjdD1hLm9iajt0aGlzLnNldEFTTjFPYmplY3QodGhpcy5pc0V4cGxpY2l0LHRoaXMuaFQsdGhpcy5hc24xT2JqZWN0KX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0LEtKVVIuYXNuMS5BU04xT2JqZWN0KTtcbnZhciBBU04xSEVYPW5ldyBmdW5jdGlvbigpe307QVNOMUhFWC5nZXRMYmxlbj1mdW5jdGlvbihjLGEpe2lmKGMuc3Vic3RyKGErMiwxKSE9XCI4XCIpe3JldHVybiAxfXZhciBiPXBhcnNlSW50KGMuc3Vic3RyKGErMywxKSk7aWYoYj09MCl7cmV0dXJuIC0xfWlmKDA8YiYmYjwxMCl7cmV0dXJuIGIrMX1yZXR1cm4gLTJ9O0FTTjFIRVguZ2V0TD1mdW5jdGlvbihjLGIpe3ZhciBhPUFTTjFIRVguZ2V0TGJsZW4oYyxiKTtpZihhPDEpe3JldHVyblwiXCJ9cmV0dXJuIGMuc3Vic3RyKGIrMixhKjIpfTtBU04xSEVYLmdldFZibGVuPWZ1bmN0aW9uKGQsYSl7dmFyIGMsYjtjPUFTTjFIRVguZ2V0TChkLGEpO2lmKGM9PVwiXCIpe3JldHVybiAtMX1pZihjLnN1YnN0cigwLDEpPT09XCI4XCIpe2I9bmV3IEJpZ0ludGVnZXIoYy5zdWJzdHIoMiksMTYpfWVsc2V7Yj1uZXcgQmlnSW50ZWdlcihjLDE2KX1yZXR1cm4gYi5pbnRWYWx1ZSgpfTtBU04xSEVYLmdldFZpZHg9ZnVuY3Rpb24oYyxiKXt2YXIgYT1BU04xSEVYLmdldExibGVuKGMsYik7aWYoYTwwKXtyZXR1cm4gYX1yZXR1cm4gYisoYSsxKSoyfTtBU04xSEVYLmdldFY9ZnVuY3Rpb24oZCxhKXt2YXIgYz1BU04xSEVYLmdldFZpZHgoZCxhKTt2YXIgYj1BU04xSEVYLmdldFZibGVuKGQsYSk7cmV0dXJuIGQuc3Vic3RyKGMsYioyKX07QVNOMUhFWC5nZXRUTFY9ZnVuY3Rpb24oYixhKXtyZXR1cm4gYi5zdWJzdHIoYSwyKStBU04xSEVYLmdldEwoYixhKStBU04xSEVYLmdldFYoYixhKX07QVNOMUhFWC5nZXROZXh0U2libGluZ0lkeD1mdW5jdGlvbihkLGEpe3ZhciBjPUFTTjFIRVguZ2V0VmlkeChkLGEpO3ZhciBiPUFTTjFIRVguZ2V0VmJsZW4oZCxhKTtyZXR1cm4gYytiKjJ9O0FTTjFIRVguZ2V0Q2hpbGRJZHg9ZnVuY3Rpb24oZSxmKXt2YXIgaj1BU04xSEVYO3ZhciBnPW5ldyBBcnJheSgpO3ZhciBpPWouZ2V0VmlkeChlLGYpO2lmKGUuc3Vic3RyKGYsMik9PVwiMDNcIil7Zy5wdXNoKGkrMil9ZWxzZXtnLnB1c2goaSl9dmFyIGw9ai5nZXRWYmxlbihlLGYpO3ZhciBjPWk7dmFyIGQ9MDt3aGlsZSgxKXt2YXIgYj1qLmdldE5leHRTaWJsaW5nSWR4KGUsYyk7aWYoYj09bnVsbHx8KGItaT49KGwqMikpKXticmVha31pZihkPj0yMDApe2JyZWFrfWcucHVzaChiKTtjPWI7ZCsrfXJldHVybiBnfTtBU04xSEVYLmdldE50aENoaWxkSWR4PWZ1bmN0aW9uKGQsYixlKXt2YXIgYz1BU04xSEVYLmdldENoaWxkSWR4KGQsYik7cmV0dXJuIGNbZV19O0FTTjFIRVguZ2V0SWR4YnlMaXN0PWZ1bmN0aW9uKGUsZCxjLGkpe3ZhciBnPUFTTjFIRVg7dmFyIGYsYjtpZihjLmxlbmd0aD09MCl7aWYoaSE9PXVuZGVmaW5lZCl7aWYoZS5zdWJzdHIoZCwyKSE9PWkpe3Rocm93XCJjaGVja2luZyB0YWcgZG9lc24ndCBtYXRjaDogXCIrZS5zdWJzdHIoZCwyKStcIiE9XCIraX19cmV0dXJuIGR9Zj1jLnNoaWZ0KCk7Yj1nLmdldENoaWxkSWR4KGUsZCk7cmV0dXJuIGcuZ2V0SWR4YnlMaXN0KGUsYltmXSxjLGkpfTtBU04xSEVYLmdldFRMVmJ5TGlzdD1mdW5jdGlvbihkLGMsYixmKXt2YXIgZT1BU04xSEVYO3ZhciBhPWUuZ2V0SWR4YnlMaXN0KGQsYyxiKTtpZihhPT09dW5kZWZpbmVkKXt0aHJvd1wiY2FuJ3QgZmluZCBudGhMaXN0IG9iamVjdFwifWlmKGYhPT11bmRlZmluZWQpe2lmKGQuc3Vic3RyKGEsMikhPWYpe3Rocm93XCJjaGVja2luZyB0YWcgZG9lc24ndCBtYXRjaDogXCIrZC5zdWJzdHIoYSwyKStcIiE9XCIrZn19cmV0dXJuIGUuZ2V0VExWKGQsYSl9O0FTTjFIRVguZ2V0VmJ5TGlzdD1mdW5jdGlvbihlLGMsYixnLGkpe3ZhciBmPUFTTjFIRVg7dmFyIGEsZDthPWYuZ2V0SWR4YnlMaXN0KGUsYyxiLGcpO2lmKGE9PT11bmRlZmluZWQpe3Rocm93XCJjYW4ndCBmaW5kIG50aExpc3Qgb2JqZWN0XCJ9ZD1mLmdldFYoZSxhKTtpZihpPT09dHJ1ZSl7ZD1kLnN1YnN0cigyKX1yZXR1cm4gZH07QVNOMUhFWC5oZXh0b29pZHN0cj1mdW5jdGlvbihlKXt2YXIgaD1mdW5jdGlvbihiLGEpe2lmKGIubGVuZ3RoPj1hKXtyZXR1cm4gYn1yZXR1cm4gbmV3IEFycmF5KGEtYi5sZW5ndGgrMSkuam9pbihcIjBcIikrYn07dmFyIGw9W107dmFyIG89ZS5zdWJzdHIoMCwyKTt2YXIgZj1wYXJzZUludChvLDE2KTtsWzBdPW5ldyBTdHJpbmcoTWF0aC5mbG9vcihmLzQwKSk7bFsxXT1uZXcgU3RyaW5nKGYlNDApO3ZhciBtPWUuc3Vic3RyKDIpO3ZhciBrPVtdO2Zvcih2YXIgZz0wO2c8bS5sZW5ndGgvMjtnKyspe2sucHVzaChwYXJzZUludChtLnN1YnN0cihnKjIsMiksMTYpKX12YXIgaj1bXTt2YXIgZD1cIlwiO2Zvcih2YXIgZz0wO2c8ay5sZW5ndGg7ZysrKXtpZihrW2ddJjEyOCl7ZD1kK2goKGtbZ10mMTI3KS50b1N0cmluZygyKSw3KX1lbHNle2Q9ZCtoKChrW2ddJjEyNykudG9TdHJpbmcoMiksNyk7ai5wdXNoKG5ldyBTdHJpbmcocGFyc2VJbnQoZCwyKSkpO2Q9XCJcIn19dmFyIG49bC5qb2luKFwiLlwiKTtpZihqLmxlbmd0aD4wKXtuPW4rXCIuXCIrai5qb2luKFwiLlwiKX1yZXR1cm4gbn07QVNOMUhFWC5kdW1wPWZ1bmN0aW9uKHQsYyxsLGcpe3ZhciBwPUFTTjFIRVg7dmFyIGo9cC5nZXRWO3ZhciB5PXAuZHVtcDt2YXIgdz1wLmdldENoaWxkSWR4O3ZhciBlPXQ7aWYodCBpbnN0YW5jZW9mIEtKVVIuYXNuMS5BU04xT2JqZWN0KXtlPXQuZ2V0RW5jb2RlZEhleCgpfXZhciBxPWZ1bmN0aW9uKEEsaSl7aWYoQS5sZW5ndGg8PWkqMil7cmV0dXJuIEF9ZWxzZXt2YXIgdj1BLnN1YnN0cigwLGkpK1wiLi4odG90YWwgXCIrQS5sZW5ndGgvMitcImJ5dGVzKS4uXCIrQS5zdWJzdHIoQS5sZW5ndGgtaSxpKTtyZXR1cm4gdn19O2lmKGM9PT11bmRlZmluZWQpe2M9e29tbWl0X2xvbmdfb2N0ZXQ6MzJ9fWlmKGw9PT11bmRlZmluZWQpe2w9MH1pZihnPT09dW5kZWZpbmVkKXtnPVwiXCJ9dmFyIHg9Yy5vbW1pdF9sb25nX29jdGV0O2lmKGUuc3Vic3RyKGwsMik9PVwiMDFcIil7dmFyIGg9aihlLGwpO2lmKGg9PVwiMDBcIil7cmV0dXJuIGcrXCJCT09MRUFOIEZBTFNFXFxuXCJ9ZWxzZXtyZXR1cm4gZytcIkJPT0xFQU4gVFJVRVxcblwifX1pZihlLnN1YnN0cihsLDIpPT1cIjAyXCIpe3ZhciBoPWooZSxsKTtyZXR1cm4gZytcIklOVEVHRVIgXCIrcShoLHgpK1wiXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIwM1wiKXt2YXIgaD1qKGUsbCk7cmV0dXJuIGcrXCJCSVRTVFJJTkcgXCIrcShoLHgpK1wiXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIwNFwiKXt2YXIgaD1qKGUsbCk7aWYocC5pc0FTTjFIRVgoaCkpe3ZhciBrPWcrXCJPQ1RFVFNUUklORywgZW5jYXBzdWxhdGVzXFxuXCI7az1rK3koaCxjLDAsZytcIiAgXCIpO3JldHVybiBrfWVsc2V7cmV0dXJuIGcrXCJPQ1RFVFNUUklORyBcIitxKGgseCkrXCJcXG5cIn19aWYoZS5zdWJzdHIobCwyKT09XCIwNVwiKXtyZXR1cm4gZytcIk5VTExcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjA2XCIpe3ZhciBtPWooZSxsKTt2YXIgYT1LSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQobSk7dmFyIG89S0pVUi5hc24xLng1MDkuT0lELm9pZDJuYW1lKGEpO3ZhciBiPWEucmVwbGFjZSgvXFwuL2csXCIgXCIpO2lmKG8hPVwiXCIpe3JldHVybiBnK1wiT2JqZWN0SWRlbnRpZmllciBcIitvK1wiIChcIitiK1wiKVxcblwifWVsc2V7cmV0dXJuIGcrXCJPYmplY3RJZGVudGlmaWVyIChcIitiK1wiKVxcblwifX1pZihlLnN1YnN0cihsLDIpPT1cIjBjXCIpe3JldHVybiBnK1wiVVRGOFN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxM1wiKXtyZXR1cm4gZytcIlByaW50YWJsZVN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxNFwiKXtyZXR1cm4gZytcIlRlbGV0ZXhTdHJpbmcgJ1wiK2hleHRvdXRmOChqKGUsbCkpK1wiJ1xcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMTZcIil7cmV0dXJuIGcrXCJJQTVTdHJpbmcgJ1wiK2hleHRvdXRmOChqKGUsbCkpK1wiJ1xcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMTdcIil7cmV0dXJuIGcrXCJVVENUaW1lIFwiK2hleHRvdXRmOChqKGUsbCkpK1wiXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxOFwiKXtyZXR1cm4gZytcIkdlbmVyYWxpemVkVGltZSBcIitoZXh0b3V0ZjgoaihlLGwpKStcIlxcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMzBcIil7aWYoZS5zdWJzdHIobCw0KT09XCIzMDAwXCIpe3JldHVybiBnK1wiU0VRVUVOQ0Uge31cXG5cIn12YXIgaz1nK1wiU0VRVUVOQ0VcXG5cIjt2YXIgZD13KGUsbCk7dmFyIGY9YztpZigoZC5sZW5ndGg9PTJ8fGQubGVuZ3RoPT0zKSYmZS5zdWJzdHIoZFswXSwyKT09XCIwNlwiJiZlLnN1YnN0cihkW2QubGVuZ3RoLTFdLDIpPT1cIjA0XCIpe3ZhciBvPXAub2lkbmFtZShqKGUsZFswXSkpO3ZhciByPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpO3IueDUwOUV4dE5hbWU9bztmPXJ9Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsZixkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga31pZihlLnN1YnN0cihsLDIpPT1cIjMxXCIpe3ZhciBrPWcrXCJTRVRcXG5cIjt2YXIgZD13KGUsbCk7Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsYyxkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga312YXIgej1wYXJzZUludChlLnN1YnN0cihsLDIpLDE2KTtpZigoeiYxMjgpIT0wKXt2YXIgbj16JjMxO2lmKCh6JjMyKSE9MCl7dmFyIGs9ZytcIltcIituK1wiXVxcblwiO3ZhciBkPXcoZSxsKTtmb3IodmFyIHU9MDt1PGQubGVuZ3RoO3UrKyl7az1rK3koZSxjLGRbdV0sZytcIiAgXCIpfXJldHVybiBrfWVsc2V7dmFyIGg9aihlLGwpO2lmKGguc3Vic3RyKDAsOCk9PVwiNjg3NDc0NzBcIil7aD1oZXh0b3V0ZjgoaCl9aWYoYy54NTA5RXh0TmFtZT09PVwic3ViamVjdEFsdE5hbWVcIiYmbj09Mil7aD1oZXh0b3V0ZjgoaCl9dmFyIGs9ZytcIltcIituK1wiXSBcIitoK1wiXFxuXCI7cmV0dXJuIGt9fXJldHVybiBnK1wiVU5LTk9XTihcIitlLnN1YnN0cihsLDIpK1wiKSBcIitqKGUsbCkrXCJcXG5cIn07QVNOMUhFWC5pc0FTTjFIRVg9ZnVuY3Rpb24oZSl7dmFyIGQ9QVNOMUhFWDtpZihlLmxlbmd0aCUyPT0xKXtyZXR1cm4gZmFsc2V9dmFyIGM9ZC5nZXRWYmxlbihlLDApO3ZhciBiPWUuc3Vic3RyKDAsMik7dmFyIGY9ZC5nZXRMKGUsMCk7dmFyIGE9ZS5sZW5ndGgtYi5sZW5ndGgtZi5sZW5ndGg7aWYoYT09YyoyKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O0FTTjFIRVgub2lkbmFtZT1mdW5jdGlvbihhKXt2YXIgYz1LSlVSLmFzbjE7aWYoS0pVUi5sYW5nLlN0cmluZy5pc0hleChhKSl7YT1jLkFTTjFVdGlsLm9pZEhleFRvSW50KGEpfXZhciBiPWMueDUwOS5PSUQub2lkMm5hbWUoYSk7aWYoYj09PVwiXCIpe2I9YX1yZXR1cm4gYn07XG52YXIgS0pVUjtpZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIubGFuZz09XCJ1bmRlZmluZWRcInx8IUtKVVIubGFuZyl7S0pVUi5sYW5nPXt9fUtKVVIubGFuZy5TdHJpbmc9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIEJhc2U2NHgoKXt9ZnVuY3Rpb24gc3RvQkEoZCl7dmFyIGI9bmV3IEFycmF5KCk7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2JbY109ZC5jaGFyQ29kZUF0KGMpfXJldHVybiBifWZ1bmN0aW9uIEJBdG9zKGIpe3ZhciBkPVwiXCI7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe2Q9ZCtTdHJpbmcuZnJvbUNoYXJDb2RlKGJbY10pfXJldHVybiBkfWZ1bmN0aW9uIEJBdG9oZXgoYil7dmFyIGU9XCJcIjtmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGM9YltkXS50b1N0cmluZygxNik7aWYoYy5sZW5ndGg9PTEpe2M9XCIwXCIrY31lPWUrY31yZXR1cm4gZX1mdW5jdGlvbiBzdG9oZXgoYSl7cmV0dXJuIEJBdG9oZXgoc3RvQkEoYSkpfWZ1bmN0aW9uIHN0b2I2NChhKXtyZXR1cm4gaGV4MmI2NChzdG9oZXgoYSkpfWZ1bmN0aW9uIHN0b2I2NHUoYSl7cmV0dXJuIGI2NHRvYjY0dShoZXgyYjY0KHN0b2hleChhKSkpfWZ1bmN0aW9uIGI2NHV0b3MoYSl7cmV0dXJuIEJBdG9zKGI2NHRvQkEoYjY0dXRvYjY0KGEpKSl9ZnVuY3Rpb24gYjY0dG9iNjR1KGEpe2E9YS5yZXBsYWNlKC9cXD0vZyxcIlwiKTthPWEucmVwbGFjZSgvXFwrL2csXCItXCIpO2E9YS5yZXBsYWNlKC9cXC8vZyxcIl9cIik7cmV0dXJuIGF9ZnVuY3Rpb24gYjY0dXRvYjY0KGEpe2lmKGEubGVuZ3RoJTQ9PTIpe2E9YStcIj09XCJ9ZWxzZXtpZihhLmxlbmd0aCU0PT0zKXthPWErXCI9XCJ9fWE9YS5yZXBsYWNlKC8tL2csXCIrXCIpO2E9YS5yZXBsYWNlKC9fL2csXCIvXCIpO3JldHVybiBhfWZ1bmN0aW9uIGhleHRvYjY0dShhKXtpZihhLmxlbmd0aCUyPT0xKXthPVwiMFwiK2F9cmV0dXJuIGI2NHRvYjY0dShoZXgyYjY0KGEpKX1mdW5jdGlvbiBiNjR1dG9oZXgoYSl7cmV0dXJuIGI2NHRvaGV4KGI2NHV0b2I2NChhKSl9dmFyIHV0Zjh0b2I2NHUsYjY0dXRvdXRmODtpZih0eXBlb2YgQnVmZmVyPT09XCJmdW5jdGlvblwiKXt1dGY4dG9iNjR1PWZ1bmN0aW9uKGEpe3JldHVybiBiNjR0b2I2NHUobmV3IEJ1ZmZlcihhLFwidXRmOFwiKS50b1N0cmluZyhcImJhc2U2NFwiKSl9O2I2NHV0b3V0Zjg9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBCdWZmZXIoYjY0dXRvYjY0KGEpLFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmOFwiKX19ZWxzZXt1dGY4dG9iNjR1PWZ1bmN0aW9uKGEpe3JldHVybiBoZXh0b2I2NHUodXJpY21wdG9oZXgoZW5jb2RlVVJJQ29tcG9uZW50QWxsKGEpKSl9O2I2NHV0b3V0Zjg9ZnVuY3Rpb24oYSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChoZXh0b3VyaWNtcChiNjR1dG9oZXgoYSkpKX19ZnVuY3Rpb24gdXRmOHRvYjY0KGEpe3JldHVybiBoZXgyYjY0KHVyaWNtcHRvaGV4KGVuY29kZVVSSUNvbXBvbmVudEFsbChhKSkpfWZ1bmN0aW9uIGI2NHRvdXRmOChhKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGhleHRvdXJpY21wKGI2NHRvaGV4KGEpKSl9ZnVuY3Rpb24gdXRmOHRvaGV4KGEpe3JldHVybiB1cmljbXB0b2hleChlbmNvZGVVUklDb21wb25lbnRBbGwoYSkpfWZ1bmN0aW9uIGhleHRvdXRmOChhKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGhleHRvdXJpY21wKGEpKX1mdW5jdGlvbiBoZXh0b3JzdHIoYyl7dmFyIGI9XCJcIjtmb3IodmFyIGE9MDthPGMubGVuZ3RoLTE7YSs9Mil7Yis9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChjLnN1YnN0cihhLDIpLDE2KSl9cmV0dXJuIGJ9ZnVuY3Rpb24gcnN0cnRvaGV4KGMpe3ZhciBhPVwiXCI7Zm9yKHZhciBiPTA7YjxjLmxlbmd0aDtiKyspe2ErPShcIjBcIitjLmNoYXJDb2RlQXQoYikudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9cmV0dXJuIGF9ZnVuY3Rpb24gaGV4dG9iNjQoYSl7cmV0dXJuIGhleDJiNjQoYSl9ZnVuY3Rpb24gaGV4dG9iNjRubChiKXt2YXIgYT1oZXh0b2I2NChiKTt2YXIgYz1hLnJlcGxhY2UoLyguezY0fSkvZyxcIiQxXFxyXFxuXCIpO2M9Yy5yZXBsYWNlKC9cXHJcXG4kLyxcIlwiKTtyZXR1cm4gY31mdW5jdGlvbiBiNjRubHRvaGV4KGIpe3ZhciBhPWIucmVwbGFjZSgvW14wLTlBLVphLXpcXC8rPV0qL2csXCJcIik7dmFyIGM9YjY0dG9oZXgoYSk7cmV0dXJuIGN9ZnVuY3Rpb24gaGV4dG9wZW0oYSxiKXt2YXIgYz1oZXh0b2I2NG5sKGEpO3JldHVyblwiLS0tLS1CRUdJTiBcIitiK1wiLS0tLS1cXHJcXG5cIitjK1wiXFxyXFxuLS0tLS1FTkQgXCIrYitcIi0tLS0tXFxyXFxuXCJ9ZnVuY3Rpb24gcGVtdG9oZXgoYSxiKXtpZihhLmluZGV4T2YoXCItLS0tLUJFR0lOIFwiKT09LTEpe3Rocm93XCJjYW4ndCBmaW5kIFBFTSBoZWFkZXI6IFwiK2J9aWYoYiE9PXVuZGVmaW5lZCl7YT1hLnJlcGxhY2UoXCItLS0tLUJFR0lOIFwiK2IrXCItLS0tLVwiLFwiXCIpO2E9YS5yZXBsYWNlKFwiLS0tLS1FTkQgXCIrYitcIi0tLS0tXCIsXCJcIil9ZWxzZXthPWEucmVwbGFjZSgvLS0tLS1CRUdJTiBbXi1dKy0tLS0tLyxcIlwiKTthPWEucmVwbGFjZSgvLS0tLS1FTkQgW14tXSstLS0tLS8sXCJcIil9cmV0dXJuIGI2NG5sdG9oZXgoYSl9ZnVuY3Rpb24gaGV4dG9BcnJheUJ1ZmZlcihkKXtpZihkLmxlbmd0aCUyIT0wKXt0aHJvd1wiaW5wdXQgaXMgbm90IGV2ZW4gbGVuZ3RoXCJ9aWYoZC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKT09bnVsbCl7dGhyb3dcImlucHV0IGlzIG5vdCBoZXhhZGVjaW1hbFwifXZhciBiPW5ldyBBcnJheUJ1ZmZlcihkLmxlbmd0aC8yKTt2YXIgYT1uZXcgRGF0YVZpZXcoYik7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aC8yO2MrKyl7YS5zZXRVaW50OChjLHBhcnNlSW50KGQuc3Vic3RyKGMqMiwyKSwxNikpfXJldHVybiBifWZ1bmN0aW9uIEFycmF5QnVmZmVydG9oZXgoYil7dmFyIGQ9XCJcIjt2YXIgYT1uZXcgRGF0YVZpZXcoYik7Zm9yKHZhciBjPTA7YzxiLmJ5dGVMZW5ndGg7YysrKXtkKz0oXCIwMFwiK2EuZ2V0VWludDgoYykudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9cmV0dXJuIGR9ZnVuY3Rpb24genVsdXRvbXNlYyhuKXt2YXIgbCxqLG0sZSxmLGksYixrO3ZhciBhLGgsZyxjO2M9bi5tYXRjaCgvXihcXGR7Mn18XFxkezR9KShcXGRcXGQpKFxcZFxcZCkoXFxkXFxkKShcXGRcXGQpKFxcZFxcZCkofFxcLlxcZCspWiQvKTtpZihjKXthPWNbMV07bD1wYXJzZUludChhKTtpZihhLmxlbmd0aD09PTIpe2lmKDUwPD1sJiZsPDEwMCl7bD0xOTAwK2x9ZWxzZXtpZigwPD1sJiZsPDUwKXtsPTIwMDArbH19fWo9cGFyc2VJbnQoY1syXSktMTttPXBhcnNlSW50KGNbM10pO2U9cGFyc2VJbnQoY1s0XSk7Zj1wYXJzZUludChjWzVdKTtpPXBhcnNlSW50KGNbNl0pO2I9MDtoPWNbN107aWYoaCE9PVwiXCIpe2c9KGguc3Vic3RyKDEpK1wiMDBcIikuc3Vic3RyKDAsMyk7Yj1wYXJzZUludChnKX1yZXR1cm4gRGF0ZS5VVEMobCxqLG0sZSxmLGksYil9dGhyb3dcInVuc3VwcG9ydGVkIHp1bHUgZm9ybWF0OiBcIitufWZ1bmN0aW9uIHp1bHV0b3NlYyhhKXt2YXIgYj16dWx1dG9tc2VjKGEpO3JldHVybiB+fihiLzEwMDApfWZ1bmN0aW9uIHp1bHV0b2RhdGUoYSl7cmV0dXJuIG5ldyBEYXRlKHp1bHV0b21zZWMoYSkpfWZ1bmN0aW9uIGRhdGV0b3p1bHUoZyxlLGYpe3ZhciBiO3ZhciBhPWcuZ2V0VVRDRnVsbFllYXIoKTtpZihlKXtpZihhPDE5NTB8fDIwNDk8YSl7dGhyb3dcIm5vdCBwcm9wZXIgeWVhciBmb3IgVVRDVGltZTogXCIrYX1iPShcIlwiK2EpLnNsaWNlKC0yKX1lbHNle2I9KFwiMDAwXCIrYSkuc2xpY2UoLTQpfWIrPShcIjBcIisoZy5nZXRVVENNb250aCgpKzEpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDRGF0ZSgpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ01pbnV0ZXMoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpO2lmKGYpe3ZhciBjPWcuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7aWYoYyE9PTApe2M9KFwiMDBcIitjKS5zbGljZSgtMyk7Yz1jLnJlcGxhY2UoLzArJC9nLFwiXCIpO2IrPVwiLlwiK2N9fWIrPVwiWlwiO3JldHVybiBifWZ1bmN0aW9uIHVyaWNtcHRvaGV4KGEpe3JldHVybiBhLnJlcGxhY2UoLyUvZyxcIlwiKX1mdW5jdGlvbiBoZXh0b3VyaWNtcChhKXtyZXR1cm4gYS5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIil9ZnVuY3Rpb24gaXB2NnRvaGV4KGcpe3ZhciBiPVwibWFsZm9ybWVkIElQdjYgYWRkcmVzc1wiO2lmKCFnLm1hdGNoKC9eWzAtOUEtRmEtZjpdKyQvKSl7dGhyb3cgYn1nPWcudG9Mb3dlckNhc2UoKTt2YXIgZD1nLnNwbGl0KFwiOlwiKS5sZW5ndGgtMTtpZihkPDIpe3Rocm93IGJ9dmFyIGU9XCI6XCIucmVwZWF0KDctZCsyKTtnPWcucmVwbGFjZShcIjo6XCIsZSk7dmFyIGM9Zy5zcGxpdChcIjpcIik7aWYoYy5sZW5ndGghPTgpe3Rocm93IGJ9Zm9yKHZhciBmPTA7Zjw4O2YrKyl7Y1tmXT0oXCIwMDAwXCIrY1tmXSkuc2xpY2UoLTQpfXJldHVybiBjLmpvaW4oXCJcIil9ZnVuY3Rpb24gaGV4dG9pcHY2KGUpe2lmKCFlLm1hdGNoKC9eWzAtOUEtRmEtZl17MzJ9JC8pKXt0aHJvd1wibWFsZm9ybWVkIElQdjYgYWRkcmVzcyBvY3RldFwifWU9ZS50b0xvd2VyQ2FzZSgpO3ZhciBiPWUubWF0Y2goLy57MSw0fS9nKTtmb3IodmFyIGQ9MDtkPDg7ZCsrKXtiW2RdPWJbZF0ucmVwbGFjZSgvXjArLyxcIlwiKTtpZihiW2RdPT1cIlwiKXtiW2RdPVwiMFwifX1lPVwiOlwiK2Iuam9pbihcIjpcIikrXCI6XCI7dmFyIGM9ZS5tYXRjaCgvOigwOil7Mix9L2cpO2lmKGM9PT1udWxsKXtyZXR1cm4gZS5zbGljZSgxLC0xKX12YXIgZj1cIlwiO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtpZihjW2RdLmxlbmd0aD5mLmxlbmd0aCl7Zj1jW2RdfX1lPWUucmVwbGFjZShmLFwiOjpcIik7cmV0dXJuIGUuc2xpY2UoMSwtMSl9ZnVuY3Rpb24gaGV4dG9pcChiKXt2YXIgZD1cIm1hbGZvcm1lZCBoZXggdmFsdWVcIjtpZighYi5tYXRjaCgvXihbMC05QS1GYS1mXVswLTlBLUZhLWZdKXsxLH0kLykpe3Rocm93IGR9aWYoYi5sZW5ndGg9PTgpe3ZhciBjO3RyeXtjPXBhcnNlSW50KGIuc3Vic3RyKDAsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDIsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDQsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDYsMiksMTYpO3JldHVybiBjfWNhdGNoKGEpe3Rocm93IGR9fWVsc2V7aWYoYi5sZW5ndGg9PTMyKXtyZXR1cm4gaGV4dG9pcHY2KGIpfWVsc2V7cmV0dXJuIGJ9fX1mdW5jdGlvbiBpcHRvaGV4KGYpe3ZhciBqPVwibWFsZm9ybWVkIElQIGFkZHJlc3NcIjtmPWYudG9Mb3dlckNhc2UoZik7aWYoZi5tYXRjaCgvXlswLTkuXSskLykpe3ZhciBiPWYuc3BsaXQoXCIuXCIpO2lmKGIubGVuZ3RoIT09NCl7dGhyb3cgan12YXIgZz1cIlwiO3RyeXtmb3IodmFyIGU9MDtlPDQ7ZSsrKXt2YXIgaD1wYXJzZUludChiW2VdKTtnKz0oXCIwXCIraC50b1N0cmluZygxNikpLnNsaWNlKC0yKX1yZXR1cm4gZ31jYXRjaChjKXt0aHJvdyBqfX1lbHNle2lmKGYubWF0Y2goL15bMC05YS1mOl0rJC8pJiZmLmluZGV4T2YoXCI6XCIpIT09LTEpe3JldHVybiBpcHY2dG9oZXgoZil9ZWxzZXt0aHJvdyBqfX19ZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50QWxsKGEpe3ZhciBkPWVuY29kZVVSSUNvbXBvbmVudChhKTt2YXIgYj1cIlwiO2Zvcih2YXIgYz0wO2M8ZC5sZW5ndGg7YysrKXtpZihkW2NdPT1cIiVcIil7Yj1iK2Quc3Vic3RyKGMsMyk7Yz1jKzJ9ZWxzZXtiPWIrXCIlXCIrc3RvaGV4KGRbY10pfX1yZXR1cm4gYn1mdW5jdGlvbiBuZXdsaW5lX3RvVW5peChhKXthPWEucmVwbGFjZSgvXFxyXFxuL21nLFwiXFxuXCIpO3JldHVybiBhfWZ1bmN0aW9uIG5ld2xpbmVfdG9Eb3MoYSl7YT1hLnJlcGxhY2UoL1xcclxcbi9tZyxcIlxcblwiKTthPWEucmVwbGFjZSgvXFxuL21nLFwiXFxyXFxuXCIpO3JldHVybiBhfUtKVVIubGFuZy5TdHJpbmcuaXNJbnRlZ2VyPWZ1bmN0aW9uKGEpe2lmKGEubWF0Y2goL15bMC05XSskLykpe3JldHVybiB0cnVlfWVsc2V7aWYoYS5tYXRjaCgvXi1bMC05XSskLykpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX19O0tKVVIubGFuZy5TdHJpbmcuaXNIZXg9ZnVuY3Rpb24oYSl7aWYoYS5sZW5ndGglMj09MCYmKGEubWF0Y2goL15bMC05YS1mXSskLyl8fGEubWF0Y2goL15bMC05QS1GXSskLykpKXtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O0tKVVIubGFuZy5TdHJpbmcuaXNCYXNlNjQ9ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1xccysvZyxcIlwiKTtpZihhLm1hdGNoKC9eWzAtOUEtWmEteitcXC9dKz17MCwzfSQvKSYmYS5sZW5ndGglND09MCl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fTtLSlVSLmxhbmcuU3RyaW5nLmlzQmFzZTY0VVJMPWZ1bmN0aW9uKGEpe2lmKGEubWF0Y2goL1srLz1dLykpe3JldHVybiBmYWxzZX1hPWI2NHV0b2I2NChhKTtyZXR1cm4gS0pVUi5sYW5nLlN0cmluZy5pc0Jhc2U2NChhKX07S0pVUi5sYW5nLlN0cmluZy5pc0ludGVnZXJBcnJheT1mdW5jdGlvbihhKXthPWEucmVwbGFjZSgvXFxzKy9nLFwiXCIpO2lmKGEubWF0Y2goL15cXFtbMC05LF0rXFxdJC8pKXtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O2Z1bmN0aW9uIGhleHRvcG9zaGV4KGEpe2lmKGEubGVuZ3RoJTI9PTEpe3JldHVyblwiMFwiK2F9aWYoYS5zdWJzdHIoMCwxKT5cIjdcIil7cmV0dXJuXCIwMFwiK2F9cmV0dXJuIGF9ZnVuY3Rpb24gaW50YXJ5c3RydG9oZXgoYil7Yj1iLnJlcGxhY2UoL15cXHMqXFxbXFxzKi8sXCJcIik7Yj1iLnJlcGxhY2UoL1xccypcXF1cXHMqJC8sXCJcIik7Yj1iLnJlcGxhY2UoL1xccyovZyxcIlwiKTt0cnl7dmFyIGM9Yi5zcGxpdCgvLC8pLm1hcChmdW5jdGlvbihnLGUsaCl7dmFyIGY9cGFyc2VJbnQoZyk7aWYoZjwwfHwyNTU8Zil7dGhyb3dcImludGVnZXIgbm90IGluIHJhbmdlIDAtMjU1XCJ9dmFyIGQ9KFwiMDBcIitmLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO3JldHVybiBkfSkuam9pbihcIlwiKTtyZXR1cm4gY31jYXRjaChhKXt0aHJvd1wibWFsZm9ybWVkIGludGVnZXIgYXJyYXkgc3RyaW5nOiBcIithfX12YXIgc3RyZGlmZmlkeD1mdW5jdGlvbihjLGEpe3ZhciBkPWMubGVuZ3RoO2lmKGMubGVuZ3RoPmEubGVuZ3RoKXtkPWEubGVuZ3RofWZvcih2YXIgYj0wO2I8ZDtiKyspe2lmKGMuY2hhckNvZGVBdChiKSE9YS5jaGFyQ29kZUF0KGIpKXtyZXR1cm4gYn19aWYoYy5sZW5ndGghPWEubGVuZ3RoKXtyZXR1cm4gZH1yZXR1cm4gLTF9O1xuaWYodHlwZW9mIEtKVVI9PVwidW5kZWZpbmVkXCJ8fCFLSlVSKXtLSlVSPXt9fWlmKHR5cGVvZiBLSlVSLmNyeXB0bz09XCJ1bmRlZmluZWRcInx8IUtKVVIuY3J5cHRvKXtLSlVSLmNyeXB0bz17fX1LSlVSLmNyeXB0by5VdGlsPW5ldyBmdW5jdGlvbigpe3RoaXMuRElHRVNUSU5GT0hFQUQ9e3NoYTE6XCIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTRcIixzaGEyMjQ6XCIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxY1wiLHNoYTI1NjpcIjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwXCIsc2hhMzg0OlwiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzBcIixzaGE1MTI6XCIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MFwiLG1kMjpcIjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDIwNTAwMDQxMFwiLG1kNTpcIjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMFwiLHJpcGVtZDE2MDpcIjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNFwiLH07dGhpcy5ERUZBVUxUUFJPVklERVI9e21kNTpcImNyeXB0b2pzXCIsc2hhMTpcImNyeXB0b2pzXCIsc2hhMjI0OlwiY3J5cHRvanNcIixzaGEyNTY6XCJjcnlwdG9qc1wiLHNoYTM4NDpcImNyeXB0b2pzXCIsc2hhNTEyOlwiY3J5cHRvanNcIixyaXBlbWQxNjA6XCJjcnlwdG9qc1wiLGhtYWNtZDU6XCJjcnlwdG9qc1wiLGhtYWNzaGExOlwiY3J5cHRvanNcIixobWFjc2hhMjI0OlwiY3J5cHRvanNcIixobWFjc2hhMjU2OlwiY3J5cHRvanNcIixobWFjc2hhMzg0OlwiY3J5cHRvanNcIixobWFjc2hhNTEyOlwiY3J5cHRvanNcIixobWFjcmlwZW1kMTYwOlwiY3J5cHRvanNcIixNRDV3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixTSEExd2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjU2d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMzg0d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBNTEyd2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsUklQRU1EMTYwd2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsTUQ1d2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEExd2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyMjR3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMzg0d2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEE1MTJ3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFJJUEVNRDE2MHdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMXdpdGhEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTIyNHdpdGhEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLE1ENXdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEExd2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTIyNHdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMzg0d2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTUxMndpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixSSVBFTUQxNjB3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsfTt0aGlzLkNSWVBUT0pTTUVTU0FHRURJR0VTVE5BTUU9e21kNTpDcnlwdG9KUy5hbGdvLk1ENSxzaGExOkNyeXB0b0pTLmFsZ28uU0hBMSxzaGEyMjQ6Q3J5cHRvSlMuYWxnby5TSEEyMjQsc2hhMjU2OkNyeXB0b0pTLmFsZ28uU0hBMjU2LHNoYTM4NDpDcnlwdG9KUy5hbGdvLlNIQTM4NCxzaGE1MTI6Q3J5cHRvSlMuYWxnby5TSEE1MTIscmlwZW1kMTYwOkNyeXB0b0pTLmFsZ28uUklQRU1EMTYwfTt0aGlzLmdldERpZ2VzdEluZm9IZXg9ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgdGhpcy5ESUdFU1RJTkZPSEVBRFtiXT09XCJ1bmRlZmluZWRcIil7dGhyb3dcImFsZyBub3Qgc3VwcG9ydGVkIGluIFV0aWwuRElHRVNUSU5GT0hFQUQ6IFwiK2J9cmV0dXJuIHRoaXMuRElHRVNUSU5GT0hFQURbYl0rYX07dGhpcy5nZXRQYWRkZWREaWdlc3RJbmZvSGV4PWZ1bmN0aW9uKGgsYSxqKXt2YXIgYz10aGlzLmdldERpZ2VzdEluZm9IZXgoaCxhKTt2YXIgZD1qLzQ7aWYoYy5sZW5ndGgrMjI+ZCl7dGhyb3dcImtleSBpcyB0b28gc2hvcnQgZm9yIFNpZ0FsZzoga2V5bGVuPVwiK2orXCIsXCIrYX12YXIgYj1cIjAwMDFcIjt2YXIgaz1cIjAwXCIrYzt2YXIgZz1cIlwiO3ZhciBsPWQtYi5sZW5ndGgtay5sZW5ndGg7Zm9yKHZhciBmPTA7ZjxsO2YrPTIpe2crPVwiZmZcIn12YXIgZT1iK2craztyZXR1cm4gZX07dGhpcy5oYXNoU3RyaW5nPWZ1bmN0aW9uKGEsYyl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpjfSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTt0aGlzLmhhc2hIZXg9ZnVuY3Rpb24oYixjKXt2YXIgYT1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOmN9KTtyZXR1cm4gYS5kaWdlc3RIZXgoYil9O3RoaXMuc2hhMT1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwic2hhMVwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTt0aGlzLnNoYTI1Nj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwic2hhMjU2XCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O3RoaXMuc2hhMjU2SGV4PWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJzaGEyNTZcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdEhleChhKX07dGhpcy5zaGE1MTI9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInNoYTUxMlwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTt0aGlzLnNoYTUxMkhleD1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwic2hhNTEyXCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RIZXgoYSl9fTtLSlVSLmNyeXB0by5VdGlsLm1kNT1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwibWQ1XCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O0tKVVIuY3J5cHRvLlV0aWwucmlwZW1kMTYwPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJyaXBlbWQxNjBcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07S0pVUi5jcnlwdG8uVXRpbC5TRUNVUkVSQU5ET01HRU49bmV3IFNlY3VyZVJhbmRvbSgpO0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tSGV4T2ZOYnl0ZXM9ZnVuY3Rpb24oYil7dmFyIGE9bmV3IEFycmF5KGIpO0tKVVIuY3J5cHRvLlV0aWwuU0VDVVJFUkFORE9NR0VOLm5leHRCeXRlcyhhKTtyZXR1cm4gQkF0b2hleChhKX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYnl0ZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKEtKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tSGV4T2ZOYnl0ZXMoYSksMTYpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUhleE9mTmJpdHM9ZnVuY3Rpb24oZCl7dmFyIGM9ZCU4O3ZhciBhPShkLWMpLzg7dmFyIGI9bmV3IEFycmF5KGErMSk7S0pVUi5jcnlwdG8uVXRpbC5TRUNVUkVSQU5ET01HRU4ubmV4dEJ5dGVzKGIpO2JbMF09KCgoMjU1PDxjKSYyNTUpXjI1NSkmYlswXTtyZXR1cm4gQkF0b2hleChiKX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoS0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5iaXRzKGEpLDE2KX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyWmVyb1RvTWF4PWZ1bmN0aW9uKGIpe3ZhciBhPWIuYml0TGVuZ3RoKCk7d2hpbGUoMSl7dmFyIGM9S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cyhhKTtpZihiLmNvbXBhcmVUbyhjKSE9LTEpe3JldHVybiBjfX19O0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tQmlnSW50ZWdlck1pblRvTWF4PWZ1bmN0aW9uKGUsYil7dmFyIGM9ZS5jb21wYXJlVG8oYik7aWYoYz09MSl7dGhyb3dcImJpTWluIGlzIGdyZWF0ZXIgdGhhbiBiaU1heFwifWlmKGM9PTApe3JldHVybiBlfXZhciBhPWIuc3VidHJhY3QoZSk7dmFyIGQ9S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyWmVyb1RvTWF4KGEpO3JldHVybiBkLmFkZChlKX07S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdD1mdW5jdGlvbihjKXt2YXIgYj1udWxsO3ZhciBhPW51bGw7dmFyIGQ9bnVsbDt0aGlzLnNldEFsZ0FuZFByb3ZpZGVyPWZ1bmN0aW9uKGcsZil7Zz1LSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0LmdldENhbm9uaWNhbEFsZ05hbWUoZyk7aWYoZyE9PW51bGwmJmY9PT11bmRlZmluZWQpe2Y9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbZ119aWYoXCI6bWQ1OnNoYTE6c2hhMjI0OnNoYTI1NjpzaGEzODQ6c2hhNTEyOnJpcGVtZDE2MDpcIi5pbmRleE9mKGcpIT0tMSYmZj09XCJjcnlwdG9qc1wiKXt0cnl7dGhpcy5tZD1LSlVSLmNyeXB0by5VdGlsLkNSWVBUT0pTTUVTU0FHRURJR0VTVE5BTUVbZ10uY3JlYXRlKCl9Y2F0Y2goZSl7dGhyb3dcInNldEFsZ0FuZFByb3ZpZGVyIGhhc2ggYWxnIHNldCBmYWlsIGFsZz1cIitnK1wiL1wiK2V9dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24oaCl7dGhpcy5tZC51cGRhdGUoaCl9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGgpe3ZhciBpPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoaCk7dGhpcy5tZC51cGRhdGUoaSl9O3RoaXMuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGg9dGhpcy5tZC5maW5hbGl6ZSgpO3JldHVybiBoLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpfTt0aGlzLmRpZ2VzdFN0cmluZz1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZVN0cmluZyhoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX07dGhpcy5kaWdlc3RIZXg9ZnVuY3Rpb24oaCl7dGhpcy51cGRhdGVIZXgoaCk7cmV0dXJuIHRoaXMuZGlnZXN0KCl9fWlmKFwiOnNoYTI1NjpcIi5pbmRleE9mKGcpIT0tMSYmZj09XCJzamNsXCIpe3RyeXt0aGlzLm1kPW5ldyBzamNsLmhhc2guc2hhMjU2KCl9Y2F0Y2goZSl7dGhyb3dcInNldEFsZ0FuZFByb3ZpZGVyIGhhc2ggYWxnIHNldCBmYWlsIGFsZz1cIitnK1wiL1wiK2V9dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24oaCl7dGhpcy5tZC51cGRhdGUoaCl9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGkpe3ZhciBoPXNqY2wuY29kZWMuaGV4LnRvQml0cyhpKTt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgaD10aGlzLm1kLmZpbmFsaXplKCk7cmV0dXJuIHNqY2wuY29kZWMuaGV4LmZyb21CaXRzKGgpfTt0aGlzLmRpZ2VzdFN0cmluZz1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZVN0cmluZyhoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX07dGhpcy5kaWdlc3RIZXg9ZnVuY3Rpb24oaCl7dGhpcy51cGRhdGVIZXgoaCk7cmV0dXJuIHRoaXMuZGlnZXN0KCl9fX07dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24oZSl7dGhyb3dcInVwZGF0ZVN0cmluZyhzdHIpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihlKXt0aHJvd1widXBkYXRlSGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMuZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3dcImRpZ2VzdCgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTt0aGlzLmRpZ2VzdFN0cmluZz1mdW5jdGlvbihlKXt0aHJvd1wiZGlnZXN0U3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMuZGlnZXN0SGV4PWZ1bmN0aW9uKGUpe3Rocm93XCJkaWdlc3RIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07aWYoYyE9PXVuZGVmaW5lZCl7aWYoYy5hbGchPT11bmRlZmluZWQpe3RoaXMuYWxnTmFtZT1jLmFsZztpZihjLnByb3Y9PT11bmRlZmluZWQpe3RoaXMucHJvdk5hbWU9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbdGhpcy5hbGdOYW1lXX10aGlzLnNldEFsZ0FuZFByb3ZpZGVyKHRoaXMuYWxnTmFtZSx0aGlzLnByb3ZOYW1lKX19fTtLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0LmdldENhbm9uaWNhbEFsZ05hbWU9ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PT1cInN0cmluZ1wiKXthPWEudG9Mb3dlckNhc2UoKTthPWEucmVwbGFjZSgvLS8sXCJcIil9cmV0dXJuIGF9O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0SGFzaExlbmd0aD1mdW5jdGlvbihjKXt2YXIgYj1LSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0O3ZhciBhPWIuZ2V0Q2Fub25pY2FsQWxnTmFtZShjKTtpZihiLkhBU0hMRU5HVEhbYV09PT11bmRlZmluZWQpe3Rocm93XCJub3Qgc3VwcG9ydGVkIGFsZ29yaXRobTogXCIrY31yZXR1cm4gYi5IQVNITEVOR1RIW2FdfTtLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0LkhBU0hMRU5HVEg9e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2NCxyaXBlbWQxNjA6MjB9O0tKVVIuY3J5cHRvLk1hYz1mdW5jdGlvbihkKXt2YXIgZj1udWxsO3ZhciBjPW51bGw7dmFyIGE9bnVsbDt2YXIgZT1udWxsO3ZhciBiPW51bGw7dGhpcy5zZXRBbGdBbmRQcm92aWRlcj1mdW5jdGlvbihrLGkpe2s9ay50b0xvd2VyQ2FzZSgpO2lmKGs9PW51bGwpe2s9XCJobWFjc2hhMVwifWs9ay50b0xvd2VyQ2FzZSgpO2lmKGsuc3Vic3RyKDAsNCkhPVwiaG1hY1wiKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgdW5zdXBwb3J0ZWQgSE1BQyBhbGc6IFwiK2t9aWYoaT09PXVuZGVmaW5lZCl7aT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUltrXX10aGlzLmFsZ1Byb3Y9aytcIi9cIitpO3ZhciBnPWsuc3Vic3RyKDQpO2lmKFwiOm1kNTpzaGExOnNoYTIyNDpzaGEyNTY6c2hhMzg0OnNoYTUxMjpyaXBlbWQxNjA6XCIuaW5kZXhPZihnKSE9LTEmJmk9PVwiY3J5cHRvanNcIil7dHJ5e3ZhciBqPUtKVVIuY3J5cHRvLlV0aWwuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRVtnXTt0aGlzLm1hYz1DcnlwdG9KUy5hbGdvLkhNQUMuY3JlYXRlKGosdGhpcy5wYXNzKX1jYXRjaChoKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgaGFzaEFsZz1cIitnK1wiL1wiK2h9dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24obCl7dGhpcy5tYWMudXBkYXRlKGwpfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihsKXt2YXIgbT1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGwpO3RoaXMubWFjLnVwZGF0ZShtKX07dGhpcy5kb0ZpbmFsPWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5tYWMuZmluYWxpemUoKTtyZXR1cm4gbC50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KX07dGhpcy5kb0ZpbmFsU3RyaW5nPWZ1bmN0aW9uKGwpe3RoaXMudXBkYXRlU3RyaW5nKGwpO3JldHVybiB0aGlzLmRvRmluYWwoKX07dGhpcy5kb0ZpbmFsSGV4PWZ1bmN0aW9uKGwpe3RoaXMudXBkYXRlSGV4KGwpO3JldHVybiB0aGlzLmRvRmluYWwoKX19fTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihnKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihnKXt0aHJvd1widXBkYXRlSGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLmRvRmluYWw9ZnVuY3Rpb24oKXt0aHJvd1wiZGlnZXN0KCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLmRvRmluYWxTdHJpbmc9ZnVuY3Rpb24oZyl7dGhyb3dcImRpZ2VzdFN0cmluZyhzdHIpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnUHJvdn07dGhpcy5kb0ZpbmFsSGV4PWZ1bmN0aW9uKGcpe3Rocm93XCJkaWdlc3RIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuc2V0UGFzc3dvcmQ9ZnVuY3Rpb24oaCl7aWYodHlwZW9mIGg9PVwic3RyaW5nXCIpe3ZhciBnPWg7aWYoaC5sZW5ndGglMj09MXx8IWgubWF0Y2goL15bMC05QS1GYS1mXSskLykpe2c9cnN0cnRvaGV4KGgpfXRoaXMucGFzcz1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGcpO3JldHVybn1pZih0eXBlb2YgaCE9XCJvYmplY3RcIil7dGhyb3dcIktKVVIuY3J5cHRvLk1hYyB1bnN1cHBvcnRlZCBwYXNzd29yZCB0eXBlOiBcIitofXZhciBnPW51bGw7aWYoaC5oZXghPT11bmRlZmluZWQpe2lmKGguaGV4Lmxlbmd0aCUyIT0wfHwhaC5oZXgubWF0Y2goL15bMC05QS1GYS1mXSskLykpe3Rocm93XCJNYWM6IHdyb25nIGhleCBwYXNzd29yZDogXCIraC5oZXh9Zz1oLmhleH1pZihoLnV0ZjghPT11bmRlZmluZWQpe2c9dXRmOHRvaGV4KGgudXRmOCl9aWYoaC5yc3RyIT09dW5kZWZpbmVkKXtnPXJzdHJ0b2hleChoLnJzdHIpfWlmKGguYjY0IT09dW5kZWZpbmVkKXtnPWI2NHRvaGV4KGguYjY0KX1pZihoLmI2NHUhPT11bmRlZmluZWQpe2c9YjY0dXRvaGV4KGguYjY0dSl9aWYoZz09bnVsbCl7dGhyb3dcIktKVVIuY3J5cHRvLk1hYyB1bnN1cHBvcnRlZCBwYXNzd29yZCB0eXBlOiBcIitofXRoaXMucGFzcz1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGcpfTtpZihkIT09dW5kZWZpbmVkKXtpZihkLnBhc3MhPT11bmRlZmluZWQpe3RoaXMuc2V0UGFzc3dvcmQoZC5wYXNzKX1pZihkLmFsZyE9PXVuZGVmaW5lZCl7dGhpcy5hbGdOYW1lPWQuYWxnO2lmKGQucHJvdj09PXVuZGVmaW5lZCl7dGhpcy5wcm92TmFtZT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUlt0aGlzLmFsZ05hbWVdfXRoaXMuc2V0QWxnQW5kUHJvdmlkZXIodGhpcy5hbGdOYW1lLHRoaXMucHJvdk5hbWUpfX19O0tKVVIuY3J5cHRvLlNpZ25hdHVyZT1mdW5jdGlvbihvKXt2YXIgcT1udWxsO3ZhciBuPW51bGw7dmFyIHI9bnVsbDt2YXIgYz1udWxsO3ZhciBsPW51bGw7dmFyIGQ9bnVsbDt2YXIgaz1udWxsO3ZhciBoPW51bGw7dmFyIHA9bnVsbDt2YXIgZT1udWxsO3ZhciBiPS0xO3ZhciBnPW51bGw7dmFyIGo9bnVsbDt2YXIgYT1udWxsO3ZhciBpPW51bGw7dmFyIGY9bnVsbDt0aGlzLl9zZXRBbGdOYW1lcz1mdW5jdGlvbigpe3ZhciBzPXRoaXMuYWxnTmFtZS5tYXRjaCgvXiguKyl3aXRoKC4rKSQvKTtpZihzKXt0aGlzLm1kQWxnTmFtZT1zWzFdLnRvTG93ZXJDYXNlKCk7dGhpcy5wdWJrZXlBbGdOYW1lPXNbMl0udG9Mb3dlckNhc2UoKX19O3RoaXMuX3plcm9QYWRkaW5nT2ZTaWduYXR1cmU9ZnVuY3Rpb24oeCx3KXt2YXIgdj1cIlwiO3ZhciB0PXcvNC14Lmxlbmd0aDtmb3IodmFyIHU9MDt1PHQ7dSsrKXt2PXYrXCIwXCJ9cmV0dXJuIHYreH07dGhpcy5zZXRBbGdBbmRQcm92aWRlcj1mdW5jdGlvbih1LHQpe3RoaXMuX3NldEFsZ05hbWVzKCk7aWYodCE9XCJjcnlwdG9qcy9qc3JzYVwiKXt0aHJvd1wicHJvdmlkZXIgbm90IHN1cHBvcnRlZDogXCIrdH1pZihcIjptZDU6c2hhMTpzaGEyMjQ6c2hhMjU2OnNoYTM4NDpzaGE1MTI6cmlwZW1kMTYwOlwiLmluZGV4T2YodGhpcy5tZEFsZ05hbWUpIT0tMSl7dHJ5e3RoaXMubWQ9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzp0aGlzLm1kQWxnTmFtZX0pfWNhdGNoKHMpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBhbGc9XCIrdGhpcy5tZEFsZ05hbWUrXCIvXCIrc310aGlzLmluaXQ9ZnVuY3Rpb24odyx4KXt2YXIgeT1udWxsO3RyeXtpZih4PT09dW5kZWZpbmVkKXt5PUtFWVVUSUwuZ2V0S2V5KHcpfWVsc2V7eT1LRVlVVElMLmdldEtleSh3LHgpfX1jYXRjaCh2KXt0aHJvd1wiaW5pdCBmYWlsZWQ6XCIrdn1pZih5LmlzUHJpdmF0ZT09PXRydWUpe3RoaXMucHJ2S2V5PXk7dGhpcy5zdGF0ZT1cIlNJR05cIn1lbHNle2lmKHkuaXNQdWJsaWM9PT10cnVlKXt0aGlzLnB1YktleT15O3RoaXMuc3RhdGU9XCJWRVJJRllcIn1lbHNle3Rocm93XCJpbml0IGZhaWxlZC46XCIreX19fTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbih2KXt0aGlzLm1kLnVwZGF0ZVN0cmluZyh2KX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24odil7dGhpcy5tZC51cGRhdGVIZXgodil9O3RoaXMuc2lnbj1mdW5jdGlvbigpe3RoaXMuc0hhc2hIZXg9dGhpcy5tZC5kaWdlc3QoKTtpZih0eXBlb2YgdGhpcy5lY3BydmhleCE9XCJ1bmRlZmluZWRcIiYmdHlwZW9mIHRoaXMuZWNjdXJ2ZW5hbWUhPVwidW5kZWZpbmVkXCIpe3ZhciB2PW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6dGhpcy5lY2N1cnZlbmFtZX0pO3RoaXMuaFNpZ249di5zaWduSGV4KHRoaXMuc0hhc2hIZXgsdGhpcy5lY3BydmhleCl9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FhbmRtZ2YxXCIpe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaFBTUyh0aGlzLnNIYXNoSGV4LHRoaXMubWRBbGdOYW1lLHRoaXMucHNzU2FsdExlbil9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FcIil7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdGhpcy5tZEFsZ05hbWUpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSl7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5EU0Epe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4KX1lbHNle3Rocm93XCJTaWduYXR1cmU6IHVuc3VwcG9ydGVkIHByaXZhdGUga2V5IGFsZzogXCIrdGhpcy5wdWJrZXlBbGdOYW1lfX19fX1yZXR1cm4gdGhpcy5oU2lnbn07dGhpcy5zaWduU3RyaW5nPWZ1bmN0aW9uKHYpe3RoaXMudXBkYXRlU3RyaW5nKHYpO3JldHVybiB0aGlzLnNpZ24oKX07dGhpcy5zaWduSGV4PWZ1bmN0aW9uKHYpe3RoaXMudXBkYXRlSGV4KHYpO3JldHVybiB0aGlzLnNpZ24oKX07dGhpcy52ZXJpZnk9ZnVuY3Rpb24odil7dGhpcy5zSGFzaEhleD10aGlzLm1kLmRpZ2VzdCgpO2lmKHR5cGVvZiB0aGlzLmVjcHViaGV4IT1cInVuZGVmaW5lZFwiJiZ0eXBlb2YgdGhpcy5lY2N1cnZlbmFtZSE9XCJ1bmRlZmluZWRcIil7dmFyIHc9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTp0aGlzLmVjY3VydmVuYW1lfSk7cmV0dXJuIHcudmVyaWZ5SGV4KHRoaXMuc0hhc2hIZXgsdix0aGlzLmVjcHViaGV4KX1lbHNle2lmKHRoaXMucHViS2V5IGluc3RhbmNlb2YgUlNBS2V5JiZ0aGlzLnB1YmtleUFsZ05hbWU9PT1cInJzYWFuZG1nZjFcIil7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaFBTUyh0aGlzLnNIYXNoSGV4LHYsdGhpcy5tZEFsZ05hbWUsdGhpcy5wc3NTYWx0TGVuKX1lbHNle2lmKHRoaXMucHViS2V5IGluc3RhbmNlb2YgUlNBS2V5JiZ0aGlzLnB1YmtleUFsZ05hbWU9PT1cInJzYVwiKXtyZXR1cm4gdGhpcy5wdWJLZXkudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdil9ZWxzZXtpZihLSlVSLmNyeXB0by5FQ0RTQSE9PXVuZGVmaW5lZCYmdGhpcy5wdWJLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSl7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4LHYpfWVsc2V7aWYoS0pVUi5jcnlwdG8uRFNBIT09dW5kZWZpbmVkJiZ0aGlzLnB1YktleSBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkRTQSl7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4LHYpfWVsc2V7dGhyb3dcIlNpZ25hdHVyZTogdW5zdXBwb3J0ZWQgcHVibGljIGtleSBhbGc6IFwiK3RoaXMucHVia2V5QWxnTmFtZX19fX19fX19O3RoaXMuaW5pdD1mdW5jdGlvbihzLHQpe3Rocm93XCJpbml0KGtleSwgcGFzcykgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihzKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihzKXt0aHJvd1widXBkYXRlSGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnNpZ249ZnVuY3Rpb24oKXt0aHJvd1wic2lnbigpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5zaWduU3RyaW5nPWZ1bmN0aW9uKHMpe3Rocm93XCJkaWdlc3RTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMuc2lnbkhleD1mdW5jdGlvbihzKXt0aHJvd1wiZGlnZXN0SGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnZlcmlmeT1mdW5jdGlvbihzKXt0aHJvd1widmVyaWZ5KGhTaWdWYWwpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5pbml0UGFyYW1zPW87aWYobyE9PXVuZGVmaW5lZCl7aWYoby5hbGchPT11bmRlZmluZWQpe3RoaXMuYWxnTmFtZT1vLmFsZztpZihvLnByb3Y9PT11bmRlZmluZWQpe3RoaXMucHJvdk5hbWU9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbdGhpcy5hbGdOYW1lXX1lbHNle3RoaXMucHJvdk5hbWU9by5wcm92fXRoaXMuYWxnUHJvdk5hbWU9dGhpcy5hbGdOYW1lK1wiOlwiK3RoaXMucHJvdk5hbWU7dGhpcy5zZXRBbGdBbmRQcm92aWRlcih0aGlzLmFsZ05hbWUsdGhpcy5wcm92TmFtZSk7dGhpcy5fc2V0QWxnTmFtZXMoKX1pZihvLnBzc3NhbHRsZW4hPT11bmRlZmluZWQpe3RoaXMucHNzU2FsdExlbj1vLnBzc3NhbHRsZW59aWYoby5wcnZrZXlwZW0hPT11bmRlZmluZWQpe2lmKG8ucHJ2a2V5cGFzIT09dW5kZWZpbmVkKXt0aHJvd1wiYm90aCBwcnZrZXlwZW0gYW5kIHBydmtleXBhcyBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWRcIn1lbHNle3RyeXt2YXIgcT1LRVlVVElMLmdldEtleShvLnBydmtleXBlbSk7dGhpcy5pbml0KHEpfWNhdGNoKG0pe3Rocm93XCJmYXRhbCBlcnJvciB0byBsb2FkIHBlbSBwcml2YXRlIGtleTogXCIrbX19fX19O0tKVVIuY3J5cHRvLkNpcGhlcj1mdW5jdGlvbihhKXt9O0tKVVIuY3J5cHRvLkNpcGhlci5lbmNyeXB0PWZ1bmN0aW9uKGUsZixkKXtpZihmIGluc3RhbmNlb2YgUlNBS2V5JiZmLmlzUHVibGljKXt2YXIgYz1LSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lKGYsZCk7aWYoYz09PVwiUlNBXCIpe3JldHVybiBmLmVuY3J5cHQoZSl9aWYoYz09PVwiUlNBT0FFUFwiKXtyZXR1cm4gZi5lbmNyeXB0T0FFUChlLFwic2hhMVwiKX12YXIgYj1jLm1hdGNoKC9eUlNBT0FFUChcXGQrKSQvKTtpZihiIT09bnVsbCl7cmV0dXJuIGYuZW5jcnlwdE9BRVAoZSxcInNoYVwiK2JbMV0pfXRocm93XCJDaXBoZXIuZW5jcnlwdDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIGZvciBSU0FLZXk6IFwiK2R9ZWxzZXt0aHJvd1wiQ2lwaGVyLmVuY3J5cHQ6IHVuc3VwcG9ydGVkIGtleSBvciBhbGdvcml0aG1cIn19O0tKVVIuY3J5cHRvLkNpcGhlci5kZWNyeXB0PWZ1bmN0aW9uKGUsZixkKXtpZihmIGluc3RhbmNlb2YgUlNBS2V5JiZmLmlzUHJpdmF0ZSl7dmFyIGM9S0pVUi5jcnlwdG8uQ2lwaGVyLmdldEFsZ0J5S2V5QW5kTmFtZShmLGQpO2lmKGM9PT1cIlJTQVwiKXtyZXR1cm4gZi5kZWNyeXB0KGUpfWlmKGM9PT1cIlJTQU9BRVBcIil7cmV0dXJuIGYuZGVjcnlwdE9BRVAoZSxcInNoYTFcIil9dmFyIGI9Yy5tYXRjaCgvXlJTQU9BRVAoXFxkKykkLyk7aWYoYiE9PW51bGwpe3JldHVybiBmLmRlY3J5cHRPQUVQKGUsXCJzaGFcIitiWzFdKX10aHJvd1wiQ2lwaGVyLmRlY3J5cHQ6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgUlNBS2V5OiBcIitkfWVsc2V7dGhyb3dcIkNpcGhlci5kZWNyeXB0OiB1bnN1cHBvcnRlZCBrZXkgb3IgYWxnb3JpdGhtXCJ9fTtLSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lPWZ1bmN0aW9uKGIsYSl7aWYoYiBpbnN0YW5jZW9mIFJTQUtleSl7aWYoXCI6UlNBOlJTQU9BRVA6UlNBT0FFUDIyNDpSU0FPQUVQMjU2OlJTQU9BRVAzODQ6UlNBT0FFUDUxMjpcIi5pbmRleE9mKGEpIT0tMSl7cmV0dXJuIGF9aWYoYT09PW51bGx8fGE9PT11bmRlZmluZWQpe3JldHVyblwiUlNBXCJ9dGhyb3dcImdldEFsZ0J5S2V5QW5kTmFtZTogbm90IHN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZSBmb3IgUlNBS2V5OiBcIithfXRocm93XCJnZXRBbGdCeUtleUFuZE5hbWU6IG5vdCBzdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWU6IFwiK2F9O0tKVVIuY3J5cHRvLk9JRD1uZXcgZnVuY3Rpb24oKXt0aGlzLm9pZGhleDJuYW1lPXtcIjJhODY0ODg2ZjcwZDAxMDEwMVwiOlwicnNhRW5jcnlwdGlvblwiLFwiMmE4NjQ4Y2UzZDAyMDFcIjpcImVjUHVibGljS2V5XCIsXCIyYTg2NDhjZTM4MDQwMVwiOlwiZHNhXCIsXCIyYTg2NDhjZTNkMDMwMTA3XCI6XCJzZWNwMjU2cjFcIixcIjJiODEwNDAwMWZcIjpcInNlY3AxOTJrMVwiLFwiMmI4MTA0MDAyMVwiOlwic2VjcDIyNHIxXCIsXCIyYjgxMDQwMDBhXCI6XCJzZWNwMjU2azFcIixcIjJiODEwNDAwMjNcIjpcInNlY3A1MjFyMVwiLFwiMmI4MTA0MDAyMlwiOlwic2VjcDM4NHIxXCIsXCIyYTg2NDhjZTM4MDQwM1wiOlwiU0hBMXdpdGhEU0FcIixcIjYwODY0ODAxNjUwMzA0MDMwMVwiOlwiU0hBMjI0d2l0aERTQVwiLFwiNjA4NjQ4MDE2NTAzMDQwMzAyXCI6XCJTSEEyNTZ3aXRoRFNBXCIsfX07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuY3J5cHRvPT1cInVuZGVmaW5lZFwifHwhS0pVUi5jcnlwdG8pe0tKVVIuY3J5cHRvPXt9fUtKVVIuY3J5cHRvLkVDRFNBPWZ1bmN0aW9uKGgpe3ZhciBlPVwic2VjcDI1NnIxXCI7dmFyIGc9bnVsbDt2YXIgYj1udWxsO3ZhciBmPW51bGw7dmFyIGE9bmV3IFNlY3VyZVJhbmRvbSgpO3ZhciBkPW51bGw7dGhpcy50eXBlPVwiRUNcIjt0aGlzLmlzUHJpdmF0ZT1mYWxzZTt0aGlzLmlzUHVibGljPWZhbHNlO2Z1bmN0aW9uIGMocyxvLHIsbil7dmFyIGo9TWF0aC5tYXgoby5iaXRMZW5ndGgoKSxuLmJpdExlbmd0aCgpKTt2YXIgdD1zLmFkZDJEKHIpO3ZhciBxPXMuY3VydmUuZ2V0SW5maW5pdHkoKTtmb3IodmFyIHA9ai0xO3A+PTA7LS1wKXtxPXEudHdpY2UyRCgpO3Euej1CaWdJbnRlZ2VyLk9ORTtpZihvLnRlc3RCaXQocCkpe2lmKG4udGVzdEJpdChwKSl7cT1xLmFkZDJEKHQpfWVsc2V7cT1xLmFkZDJEKHMpfX1lbHNle2lmKG4udGVzdEJpdChwKSl7cT1xLmFkZDJEKHIpfX19cmV0dXJuIHF9dGhpcy5nZXRCaWdSYW5kb209ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGkuYml0TGVuZ3RoKCksYSkubW9kKGkuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKS5hZGQoQmlnSW50ZWdlci5PTkUpfTt0aGlzLnNldE5hbWVkQ3VydmU9ZnVuY3Rpb24oaSl7dGhpcy5lY3BhcmFtcz1LSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLmdldEJ5TmFtZShpKTt0aGlzLnBydktleUhleD1udWxsO3RoaXMucHViS2V5SGV4PW51bGw7dGhpcy5jdXJ2ZU5hbWU9aX07dGhpcy5zZXRQcml2YXRlS2V5SGV4PWZ1bmN0aW9uKGkpe3RoaXMuaXNQcml2YXRlPXRydWU7dGhpcy5wcnZLZXlIZXg9aX07dGhpcy5zZXRQdWJsaWNLZXlIZXg9ZnVuY3Rpb24oaSl7dGhpcy5pc1B1YmxpYz10cnVlO3RoaXMucHViS2V5SGV4PWl9O3RoaXMuZ2V0UHVibGljS2V5WFlIZXg9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLnB1YktleUhleDtpZihrLnN1YnN0cigwLDIpIT09XCIwNFwiKXt0aHJvd1widGhpcyBtZXRob2Qgc3VwcG9ydHMgdW5jb21wcmVzc2VkIGZvcm1hdCgwNCkgb25seVwifXZhciBqPXRoaXMuZWNwYXJhbXMua2V5bGVuLzQ7aWYoay5sZW5ndGghPT0yK2oqMil7dGhyb3dcIm1hbGZvcm1lZCBwdWJsaWMga2V5IGhleCBsZW5ndGhcIn12YXIgaT17fTtpLng9ay5zdWJzdHIoMixqKTtpLnk9ay5zdWJzdHIoMitqKTtyZXR1cm4gaX07dGhpcy5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5jdXJ2ZU5hbWU7aWYoaT09PVwic2VjcDI1NnIxXCJ8fGk9PT1cIk5JU1QgUC0yNTZcInx8aT09PVwiUC0yNTZcInx8aT09PVwicHJpbWUyNTZ2MVwiKXtyZXR1cm5cIlAtMjU2XCJ9aWYoaT09PVwic2VjcDM4NHIxXCJ8fGk9PT1cIk5JU1QgUC0zODRcInx8aT09PVwiUC0zODRcIil7cmV0dXJuXCJQLTM4NFwifXJldHVybiBudWxsfTt0aGlzLmdlbmVyYXRlS2V5UGFpckhleD1mdW5jdGlvbigpe3ZhciBrPXRoaXMuZWNwYXJhbXMubjt2YXIgbj10aGlzLmdldEJpZ1JhbmRvbShrKTt2YXIgbD10aGlzLmVjcGFyYW1zLkcubXVsdGlwbHkobik7dmFyIHE9bC5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIG89bC5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGk9dGhpcy5lY3BhcmFtcy5rZXlsZW4vNDt2YXIgbT0oXCIwMDAwMDAwMDAwXCIrbi50b1N0cmluZygxNikpLnNsaWNlKC1pKTt2YXIgcj0oXCIwMDAwMDAwMDAwXCIrcS50b1N0cmluZygxNikpLnNsaWNlKC1pKTt2YXIgcD0oXCIwMDAwMDAwMDAwXCIrby50b1N0cmluZygxNikpLnNsaWNlKC1pKTt2YXIgaj1cIjA0XCIrcitwO3RoaXMuc2V0UHJpdmF0ZUtleUhleChtKTt0aGlzLnNldFB1YmxpY0tleUhleChqKTtyZXR1cm57ZWNwcnZoZXg6bSxlY3B1YmhleDpqfX07dGhpcy5zaWduV2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLnNpZ25IZXgoaSx0aGlzLnBydktleUhleCl9O3RoaXMuc2lnbkhleD1mdW5jdGlvbihvLGope3ZhciB0PW5ldyBCaWdJbnRlZ2VyKGosMTYpO3ZhciBsPXRoaXMuZWNwYXJhbXMubjt2YXIgcT1uZXcgQmlnSW50ZWdlcihvLDE2KTtkb3t2YXIgbT10aGlzLmdldEJpZ1JhbmRvbShsKTt2YXIgdT10aGlzLmVjcGFyYW1zLkc7dmFyIHA9dS5tdWx0aXBseShtKTt2YXIgaT1wLmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2QobCl9d2hpbGUoaS5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKTw9MCk7dmFyIHY9bS5tb2RJbnZlcnNlKGwpLm11bHRpcGx5KHEuYWRkKHQubXVsdGlwbHkoaSkpKS5tb2QobCk7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmJpUlNTaWdUb0FTTjFTaWcoaSx2KX07dGhpcy5zaWduPWZ1bmN0aW9uKG0sdSl7dmFyIHE9dTt2YXIgaj10aGlzLmVjcGFyYW1zLm47dmFyIHA9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobSk7ZG97dmFyIGw9dGhpcy5nZXRCaWdSYW5kb20oaik7dmFyIHQ9dGhpcy5lY3BhcmFtcy5HO3ZhciBvPXQubXVsdGlwbHkobCk7dmFyIGk9by5nZXRYKCkudG9CaWdJbnRlZ2VyKCkubW9kKGopfXdoaWxlKGkuY29tcGFyZVRvKEJpZ0ludGVnZXIuWkVSTyk8PTApO3ZhciB2PWwubW9kSW52ZXJzZShqKS5tdWx0aXBseShwLmFkZChxLm11bHRpcGx5KGkpKSkubW9kKGopO3JldHVybiB0aGlzLnNlcmlhbGl6ZVNpZyhpLHYpfTt0aGlzLnZlcmlmeVdpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihqLGkpe3JldHVybiB0aGlzLnZlcmlmeUhleChqLGksdGhpcy5wdWJLZXlIZXgpfTt0aGlzLnZlcmlmeUhleD1mdW5jdGlvbihtLGkscCl7dmFyIGwsajt2YXIgbz1LSlVSLmNyeXB0by5FQ0RTQS5wYXJzZVNpZ0hleChpKTtsPW8ucjtqPW8uczt2YXIgaztrPUVDUG9pbnRGcC5kZWNvZGVGcm9tSGV4KHRoaXMuZWNwYXJhbXMuY3VydmUscCk7dmFyIG49bmV3IEJpZ0ludGVnZXIobSwxNik7cmV0dXJuIHRoaXMudmVyaWZ5UmF3KG4sbCxqLGspfTt0aGlzLnZlcmlmeT1mdW5jdGlvbihvLHAsail7dmFyIGwsaTtpZihCaXRjb2luLlV0aWwuaXNBcnJheShwKSl7dmFyIG49dGhpcy5wYXJzZVNpZyhwKTtsPW4ucjtpPW4uc31lbHNle2lmKFwib2JqZWN0XCI9PT10eXBlb2YgcCYmcC5yJiZwLnMpe2w9cC5yO2k9cC5zfWVsc2V7dGhyb3dcIkludmFsaWQgdmFsdWUgZm9yIHNpZ25hdHVyZVwifX12YXIgaztpZihqIGluc3RhbmNlb2YgRUNQb2ludEZwKXtrPWp9ZWxzZXtpZihCaXRjb2luLlV0aWwuaXNBcnJheShqKSl7az1FQ1BvaW50RnAuZGVjb2RlRnJvbSh0aGlzLmVjcGFyYW1zLmN1cnZlLGopfWVsc2V7dGhyb3dcIkludmFsaWQgZm9ybWF0IGZvciBwdWJrZXkgdmFsdWUsIG11c3QgYmUgYnl0ZSBhcnJheSBvciBFQ1BvaW50RnBcIn19dmFyIG09QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobyk7cmV0dXJuIHRoaXMudmVyaWZ5UmF3KG0sbCxpLGspfTt0aGlzLnZlcmlmeVJhdz1mdW5jdGlvbihvLGksdyxtKXt2YXIgbD10aGlzLmVjcGFyYW1zLm47dmFyIHU9dGhpcy5lY3BhcmFtcy5HO2lmKGkuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHxpLmNvbXBhcmVUbyhsKT49MCl7cmV0dXJuIGZhbHNlfWlmKHcuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHx3LmNvbXBhcmVUbyhsKT49MCl7cmV0dXJuIGZhbHNlfXZhciBwPXcubW9kSW52ZXJzZShsKTt2YXIgaz1vLm11bHRpcGx5KHApLm1vZChsKTt2YXIgaj1pLm11bHRpcGx5KHApLm1vZChsKTt2YXIgcT11Lm11bHRpcGx5KGspLmFkZChtLm11bHRpcGx5KGopKTt2YXIgdD1xLmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2QobCk7cmV0dXJuIHQuZXF1YWxzKGkpfTt0aGlzLnNlcmlhbGl6ZVNpZz1mdW5jdGlvbihrLGope3ZhciBsPWsudG9CeXRlQXJyYXlTaWduZWQoKTt2YXIgaT1qLnRvQnl0ZUFycmF5U2lnbmVkKCk7dmFyIG09W107bS5wdXNoKDIpO20ucHVzaChsLmxlbmd0aCk7bT1tLmNvbmNhdChsKTttLnB1c2goMik7bS5wdXNoKGkubGVuZ3RoKTttPW0uY29uY2F0KGkpO20udW5zaGlmdChtLmxlbmd0aCk7bS51bnNoaWZ0KDQ4KTtyZXR1cm4gbX07dGhpcy5wYXJzZVNpZz1mdW5jdGlvbihuKXt2YXIgbTtpZihuWzBdIT00OCl7dGhyb3cgbmV3IEVycm9yKFwiU2lnbmF0dXJlIG5vdCBhIHZhbGlkIERFUlNlcXVlbmNlXCIpfW09MjtpZihuW21dIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJGaXJzdCBlbGVtZW50IGluIHNpZ25hdHVyZSBtdXN0IGJlIGEgREVSSW50ZWdlclwiKX12YXIgbD1uLnNsaWNlKG0rMixtKzIrblttKzFdKTttKz0yK25bbSsxXTtpZihuW21dIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJTZWNvbmQgZWxlbWVudCBpbiBzaWduYXR1cmUgbXVzdCBiZSBhIERFUkludGVnZXJcIil9dmFyIGk9bi5zbGljZShtKzIsbSsyK25bbSsxXSk7bSs9MituW20rMV07dmFyIGs9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobCk7dmFyIGo9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQoaSk7cmV0dXJue3I6ayxzOmp9fTt0aGlzLnBhcnNlU2lnQ29tcGFjdD1mdW5jdGlvbihtKXtpZihtLmxlbmd0aCE9PTY1KXt0aHJvd1wiU2lnbmF0dXJlIGhhcyB0aGUgd3JvbmcgbGVuZ3RoXCJ9dmFyIGo9bVswXS0yNztpZihqPDB8fGo+Nyl7dGhyb3dcIkludmFsaWQgc2lnbmF0dXJlIHR5cGVcIn12YXIgbz10aGlzLmVjcGFyYW1zLm47dmFyIGw9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobS5zbGljZSgxLDMzKSkubW9kKG8pO3ZhciBrPUJpZ0ludGVnZXIuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKG0uc2xpY2UoMzMsNjUpKS5tb2Qobyk7cmV0dXJue3I6bCxzOmssaTpqfX07dGhpcy5yZWFkUEtDUzVQcnZLZXlIZXg9ZnVuY3Rpb24obCl7dmFyIG49QVNOMUhFWDt2YXIgbT1LSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lO3ZhciBwPW4uZ2V0VmJ5TGlzdDtpZihuLmlzQVNOMUhFWChsKT09PWZhbHNlKXt0aHJvd1wibm90IEFTTi4xIGhleCBzdHJpbmdcIn12YXIgaSxrLG87dHJ5e2k9cChsLDAsWzIsMF0sXCIwNlwiKTtrPXAobCwwLFsxXSxcIjA0XCIpO3RyeXtvPXAobCwwLFszLDBdLFwiMDNcIikuc3Vic3RyKDIpfWNhdGNoKGope319Y2F0Y2goail7dGhyb3dcIm1hbGZvcm1lZCBQS0NTIzEvNSBwbGFpbiBFQ0MgcHJpdmF0ZSBrZXlcIn10aGlzLmN1cnZlTmFtZT1tKGkpO2lmKHRoaXMuY3VydmVOYW1lPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgobyk7dGhpcy5zZXRQcml2YXRlS2V5SGV4KGspO3RoaXMuaXNQdWJsaWM9ZmFsc2V9O3RoaXMucmVhZFBLQ1M4UHJ2S2V5SGV4PWZ1bmN0aW9uKGwpe3ZhciBxPUFTTjFIRVg7dmFyIGk9S0pVUi5jcnlwdG8uRUNEU0EuZ2V0TmFtZTt2YXIgbj1xLmdldFZieUxpc3Q7aWYocS5pc0FTTjFIRVgobCk9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dmFyIGoscCxtLGs7dHJ5e2o9bihsLDAsWzEsMF0sXCIwNlwiKTtwPW4obCwwLFsxLDFdLFwiMDZcIik7bT1uKGwsMCxbMiwwLDFdLFwiMDRcIik7dHJ5e2s9bihsLDAsWzIsMCwyLDBdLFwiMDNcIikuc3Vic3RyKDIpfWNhdGNoKG8pe319Y2F0Y2gobyl7dGhyb3dcIm1hbGZvcm1lZCBQS0NTIzggcGxhaW4gRUNDIHByaXZhdGUga2V5XCJ9dGhpcy5jdXJ2ZU5hbWU9aShwKTtpZih0aGlzLmN1cnZlTmFtZT09PXVuZGVmaW5lZCl7dGhyb3dcInVuc3VwcG9ydGVkIGN1cnZlIG5hbWVcIn10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO3RoaXMuc2V0UHVibGljS2V5SGV4KGspO3RoaXMuc2V0UHJpdmF0ZUtleUhleChtKTt0aGlzLmlzUHVibGljPWZhbHNlfTt0aGlzLnJlYWRQS0NTOFB1YktleUhleD1mdW5jdGlvbihsKXt2YXIgbj1BU04xSEVYO3ZhciBtPUtKVVIuY3J5cHRvLkVDRFNBLmdldE5hbWU7dmFyIHA9bi5nZXRWYnlMaXN0O2lmKG4uaXNBU04xSEVYKGwpPT09ZmFsc2Upe3Rocm93XCJub3QgQVNOLjEgaGV4IHN0cmluZ1wifXZhciBrLGksbzt0cnl7az1wKGwsMCxbMCwwXSxcIjA2XCIpO2k9cChsLDAsWzAsMV0sXCIwNlwiKTtvPXAobCwwLFsxXSxcIjAzXCIpLnN1YnN0cigyKX1jYXRjaChqKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1MjOCBFQ0MgcHVibGljIGtleVwifXRoaXMuY3VydmVOYW1lPW0oaSk7aWYodGhpcy5jdXJ2ZU5hbWU9PT1udWxsKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgobyl9O3RoaXMucmVhZENlcnRQdWJLZXlIZXg9ZnVuY3Rpb24oayxwKXtpZihwIT09NSl7cD02fXZhciBtPUFTTjFIRVg7dmFyIGw9S0pVUi5jcnlwdG8uRUNEU0EuZ2V0TmFtZTt2YXIgbz1tLmdldFZieUxpc3Q7aWYobS5pc0FTTjFIRVgoayk9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dmFyIGksbjt0cnl7aT1vKGssMCxbMCxwLDAsMV0sXCIwNlwiKTtuPW8oaywwLFswLHAsMV0sXCIwM1wiKS5zdWJzdHIoMil9Y2F0Y2goail7dGhyb3dcIm1hbGZvcm1lZCBYLjUwOSBjZXJ0aWZpY2F0ZSBFQ0MgcHVibGljIGtleVwifXRoaXMuY3VydmVOYW1lPWwoaSk7aWYodGhpcy5jdXJ2ZU5hbWU9PT1udWxsKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgobil9O2lmKGghPT11bmRlZmluZWQpe2lmKGguY3VydmUhPT11bmRlZmluZWQpe3RoaXMuY3VydmVOYW1lPWguY3VydmV9fWlmKHRoaXMuY3VydmVOYW1lPT09dW5kZWZpbmVkKXt0aGlzLmN1cnZlTmFtZT1lfXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7aWYoaCE9PXVuZGVmaW5lZCl7aWYoaC5wcnYhPT11bmRlZmluZWQpe3RoaXMuc2V0UHJpdmF0ZUtleUhleChoLnBydil9aWYoaC5wdWIhPT11bmRlZmluZWQpe3RoaXMuc2V0UHVibGljS2V5SGV4KGgucHViKX19fTtLSlVSLmNyeXB0by5FQ0RTQS5wYXJzZVNpZ0hleD1mdW5jdGlvbihhKXt2YXIgYj1LSlVSLmNyeXB0by5FQ0RTQS5wYXJzZVNpZ0hleEluSGV4UlMoYSk7dmFyIGQ9bmV3IEJpZ0ludGVnZXIoYi5yLDE2KTt2YXIgYz1uZXcgQmlnSW50ZWdlcihiLnMsMTYpO3JldHVybntyOmQsczpjfX07S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXhJbkhleFJTPWZ1bmN0aW9uKGYpe3ZhciBqPUFTTjFIRVg7dmFyIGk9ai5nZXRDaGlsZElkeDt2YXIgZz1qLmdldFY7aWYoZi5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvd1wic2lnbmF0dXJlIGlzIG5vdCBhIEFTTi4xIHNlcXVlbmNlXCJ9dmFyIGg9aShmLDApO2lmKGgubGVuZ3RoIT0yKXt0aHJvd1wibnVtYmVyIG9mIHNpZ25hdHVyZSBBU04uMSBzZXF1ZW5jZSBlbGVtZW50cyBzZWVtIHdyb25nXCJ9dmFyIGU9aFswXTt2YXIgZD1oWzFdO2lmKGYuc3Vic3RyKGUsMikhPVwiMDJcIil7dGhyb3dcIjFzdCBpdGVtIG9mIHNlcXVlbmUgb2Ygc2lnbmF0dXJlIGlzIG5vdCBBU04uMSBpbnRlZ2VyXCJ9aWYoZi5zdWJzdHIoZCwyKSE9XCIwMlwiKXt0aHJvd1wiMm5kIGl0ZW0gb2Ygc2VxdWVuZSBvZiBzaWduYXR1cmUgaXMgbm90IEFTTi4xIGludGVnZXJcIn12YXIgYz1nKGYsZSk7dmFyIGI9ZyhmLGQpO3JldHVybntyOmMsczpifX07S0pVUi5jcnlwdG8uRUNEU0EuYXNuMVNpZ1RvQ29uY2F0U2lnPWZ1bmN0aW9uKGMpe3ZhciBkPUtKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4SW5IZXhSUyhjKTt2YXIgYj1kLnI7dmFyIGE9ZC5zO2lmKGIuc3Vic3RyKDAsMik9PVwiMDBcIiYmKGIubGVuZ3RoJTMyKT09Mil7Yj1iLnN1YnN0cigyKX1pZihhLnN1YnN0cigwLDIpPT1cIjAwXCImJihhLmxlbmd0aCUzMik9PTIpe2E9YS5zdWJzdHIoMil9aWYoKGIubGVuZ3RoJTMyKT09MzApe2I9XCIwMFwiK2J9aWYoKGEubGVuZ3RoJTMyKT09MzApe2E9XCIwMFwiK2F9aWYoYi5sZW5ndGglMzIhPTApe3Rocm93XCJ1bmtub3duIEVDRFNBIHNpZyByIGxlbmd0aCBlcnJvclwifWlmKGEubGVuZ3RoJTMyIT0wKXt0aHJvd1widW5rbm93biBFQ0RTQSBzaWcgcyBsZW5ndGggZXJyb3JcIn1yZXR1cm4gYithfTtLSlVSLmNyeXB0by5FQ0RTQS5jb25jYXRTaWdUb0FTTjFTaWc9ZnVuY3Rpb24oYSl7aWYoKCgoYS5sZW5ndGgvMikqOCklKDE2KjgpKSE9MCl7dGhyb3dcInVua25vd24gRUNEU0EgY29uY2F0aW5hdGVkIHItcyBzaWcgIGxlbmd0aCBlcnJvclwifXZhciBjPWEuc3Vic3RyKDAsYS5sZW5ndGgvMik7dmFyIGI9YS5zdWJzdHIoYS5sZW5ndGgvMik7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmhleFJTU2lnVG9BU04xU2lnKGMsYil9O0tKVVIuY3J5cHRvLkVDRFNBLmhleFJTU2lnVG9BU04xU2lnPWZ1bmN0aW9uKGIsYSl7dmFyIGQ9bmV3IEJpZ0ludGVnZXIoYiwxNik7dmFyIGM9bmV3IEJpZ0ludGVnZXIoYSwxNik7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmJpUlNTaWdUb0FTTjFTaWcoZCxjKX07S0pVUi5jcnlwdG8uRUNEU0EuYmlSU1NpZ1RvQVNOMVNpZz1mdW5jdGlvbihmLGQpe3ZhciBjPUtKVVIuYXNuMTt2YXIgYj1uZXcgYy5ERVJJbnRlZ2VyKHtiaWdpbnQ6Zn0pO3ZhciBhPW5ldyBjLkRFUkludGVnZXIoe2JpZ2ludDpkfSk7dmFyIGU9bmV3IGMuREVSU2VxdWVuY2Uoe2FycmF5OltiLGFdfSk7cmV0dXJuIGUuZ2V0RW5jb2RlZEhleCgpfTtLSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lPWZ1bmN0aW9uKGEpe2lmKGE9PT1cIjJhODY0OGNlM2QwMzAxMDdcIil7cmV0dXJuXCJzZWNwMjU2cjFcIn1pZihhPT09XCIyYjgxMDQwMDBhXCIpe3JldHVyblwic2VjcDI1NmsxXCJ9aWYoYT09PVwiMmI4MTA0MDAyMlwiKXtyZXR1cm5cInNlY3AzODRyMVwifWlmKFwifHNlY3AyNTZyMXxOSVNUIFAtMjU2fFAtMjU2fHByaW1lMjU2djF8XCIuaW5kZXhPZihhKSE9PS0xKXtyZXR1cm5cInNlY3AyNTZyMVwifWlmKFwifHNlY3AyNTZrMXxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDI1NmsxXCJ9aWYoXCJ8c2VjcDM4NHIxfE5JU1QgUC0zODR8UC0zODR8XCIuaW5kZXhPZihhKSE9PS0xKXtyZXR1cm5cInNlY3AzODRyMVwifXJldHVybiBudWxsfTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5jcnlwdG89PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmNyeXB0byl7S0pVUi5jcnlwdG89e319S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQj1uZXcgZnVuY3Rpb24oKXt2YXIgYj17fTt2YXIgYz17fTtmdW5jdGlvbiBhKGQpe3JldHVybiBuZXcgQmlnSW50ZWdlcihkLDE2KX10aGlzLmdldEJ5TmFtZT1mdW5jdGlvbihlKXt2YXIgZD1lO2lmKHR5cGVvZiBjW2RdIT1cInVuZGVmaW5lZFwiKXtkPWNbZV19aWYodHlwZW9mIGJbZF0hPVwidW5kZWZpbmVkXCIpe3JldHVybiBiW2RdfXRocm93XCJ1bnJlZ2lzdGVyZWQgRUMgY3VydmUgbmFtZTogXCIrZH07dGhpcy5yZWdpc3Q9ZnVuY3Rpb24oQSxsLG8sZyxtLGUsaixmLGssdSxkLHgpe2JbQV09e307dmFyIHM9YShvKTt2YXIgej1hKGcpO3ZhciB5PWEobSk7dmFyIHQ9YShlKTt2YXIgdz1hKGopO3ZhciByPW5ldyBFQ0N1cnZlRnAocyx6LHkpO3ZhciBxPXIuZGVjb2RlUG9pbnRIZXgoXCIwNFwiK2Yrayk7YltBXVtcIm5hbWVcIl09QTtiW0FdW1wia2V5bGVuXCJdPWw7YltBXVtcImN1cnZlXCJdPXI7YltBXVtcIkdcIl09cTtiW0FdW1wiblwiXT10O2JbQV1bXCJoXCJdPXc7YltBXVtcIm9pZFwiXT1kO2JbQV1bXCJpbmZvXCJdPXg7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe2NbdVt2XV09QX19fTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxMjhyMVwiLDEyOCxcIkZGRkZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiRTg3NTc5QzExMDc5RjQzREQ4MjQ5OTNDMkNFRTVFRDNcIixcIkZGRkZGRkZFMDAwMDAwMDA3NUEzMEQxQjkwMzhBMTE1XCIsXCIxXCIsXCIxNjFGRjc1MjhCODk5QjJEMEMyODYwN0NBNTJDNUI4NlwiLFwiQ0Y1QUM4Mzk1QkFGRUIxM0MwMkRBMjkyRERFRDdBODNcIixbXSxcIlwiLFwic2VjcDEyOHIxIDogU0VDRyBjdXJ2ZSBvdmVyIGEgMTI4IGJpdCBwcmltZSBmaWVsZFwiKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxNjBrMVwiLDE2MCxcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkFDNzNcIixcIjBcIixcIjdcIixcIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDFCOEZBMTZERkFCOUFDQTE2QjZCM1wiLFwiMVwiLFwiM0I0QzM4MkNFMzdBQTE5MkE0MDE5RTc2MzAzNkY0RjVERDREN0VCQlwiLFwiOTM4Q0Y5MzUzMThGRENFRDZCQzI4Mjg2NTMxNzMzQzNGMDNDNEZFRVwiLFtdLFwiXCIsXCJzZWNwMTYwazEgOiBTRUNHIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkXCIpO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDE2MHIxXCIsMTYwLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGQ1wiLFwiMUM5N0JFRkM1NEJEN0E4QjY1QUNGODlGODFENEQ0QURDNTY1RkE0NVwiLFwiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMUY0QzhGOTI3QUVEM0NBNzUyMjU3XCIsXCIxXCIsXCI0QTk2QjU2ODhFRjU3MzI4NDY2NDY5ODk2OEMzOEJCOTEzQ0JGQzgyXCIsXCIyM0E2Mjg1NTMxNjg5NDdENTlEQ0M5MTIwNDIzNTEzNzdBQzVGQjMyXCIsW10sXCJcIixcInNlY3AxNjByMSA6IFNFQ0cgY3VydmUgb3ZlciBhIDE2MCBiaXQgcHJpbWUgZmllbGRcIik7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTkyazFcIiwxOTIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkVFMzdcIixcIjBcIixcIjNcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTI2RjJGQzE3MEY2OTQ2NkE3NERFRkQ4RFwiLFwiMVwiLFwiREI0RkYxMEVDMDU3RTlBRTI2QjA3RDAyODBCN0Y0MzQxREE1RDFCMUVBRTA2QzdEXCIsXCI5QjJGMkY2RDlDNTYyOEE3ODQ0MTYzRDAxNUJFODYzNDQwODJBQTg4RDk1RTJGOURcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTkycjFcIiwxOTIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGQ1wiLFwiNjQyMTA1MTlFNTlDODBFNzBGQTdFOUFCNzIyNDMwNDlGRUI4REVFQ0MxNDZCOUIxXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5OURFRjgzNjE0NkJDOUIxQjREMjI4MzFcIixcIjFcIixcIjE4OERBODBFQjAzMDkwRjY3Q0JGMjBFQjQzQTE4ODAwRjRGRjBBRkQ4MkZGMTAxMlwiLFwiMDcxOTJCOTVGRkM4REE3ODYzMTAxMUVENkIyNENERDU3M0Y5NzdBMTFFNzk0ODExXCIsW10pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDIyNHIxXCIsMjI0LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFXCIsXCJCNDA1MEE4NTBDMDRCM0FCRjU0MTMyNTY1MDQ0QjBCN0Q3QkZEOEJBMjcwQjM5NDMyMzU1RkZCNFwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE2QTJFMEI4RjAzRTEzREQyOTQ1NUM1QzJBM0RcIixcIjFcIixcIkI3MEUwQ0JENkJCNEJGN0YzMjEzOTBCOTRBMDNDMUQzNTZDMjExMjIzNDMyODBENjExNUMxRDIxXCIsXCJCRDM3NjM4OEI1RjcyM0ZCNEMyMkRGRTZDRDQzNzVBMDVBMDc0NzY0NDRENTgxOTk4NTAwN0UzNFwiLFtdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AyNTZrMVwiLDI1NixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZDMkZcIixcIjBcIixcIjdcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDFcIixcIjFcIixcIjc5QkU2NjdFRjlEQ0JCQUM1NUEwNjI5NUNFODcwQjA3MDI5QkZDREIyRENFMjhEOTU5RjI4MTVCMTZGODE3OThcIixcIjQ4M0FEQTc3MjZBM0M0NjU1REE0RkJGQzBFMTEwOEE4RkQxN0I0NDhBNjg1NTQxOTlDNDdEMDhGRkIxMEQ0QjhcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMjU2cjFcIiwyNTYsXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDXCIsXCI1QUM2MzVEOEFBM0E5M0U3QjNFQkJENTU3Njk4ODZCQzY1MUQwNkIwQ0M1M0IwRjYzQkNFM0MzRTI3RDI2MDRCXCIsXCJGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkJDRTZGQUFEQTcxNzlFODRGM0I5Q0FDMkZDNjMyNTUxXCIsXCIxXCIsXCI2QjE3RDFGMkUxMkM0MjQ3RjhCQ0U2RTU2M0E0NDBGMjc3MDM3RDgxMkRFQjMzQTBGNEExMzk0NUQ4OThDMjk2XCIsXCI0RkUzNDJFMkZFMUE3RjlCOEVFN0VCNEE3QzBGOUUxNjJCQ0UzMzU3NkIzMTVFQ0VDQkI2NDA2ODM3QkY1MUY1XCIsW1wiTklTVCBQLTI1NlwiLFwiUC0yNTZcIixcInByaW1lMjU2djFcIl0pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDM4NHIxXCIsMzg0LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkNcIixcIkIzMzEyRkE3RTIzRUU3RTQ5ODhFMDU2QkUzRjgyRDE5MTgxRDlDNkVGRTgxNDExMjAzMTQwODhGNTAxMzg3NUFDNjU2Mzk4RDhBMkVEMTlEMkE4NUM4RUREM0VDMkFFRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzc2MzREODFGNDM3MkRERjU4MUEwREIyNDhCMEE3N0FFQ0VDMTk2QUNDQzUyOTczXCIsXCIxXCIsXCJBQTg3Q0EyMkJFOEIwNTM3OEVCMUM3MUVGMzIwQUQ3NDZFMUQzQjYyOEJBNzlCOTg1OUY3NDFFMDgyNTQyQTM4NTUwMkYyNURCRjU1Mjk2QzNBNTQ1RTM4NzI3NjBBQjdcIixcIjM2MTdkZTRhOTYyNjJjNmY1ZDllOThiZjkyOTJkYzI5ZjhmNDFkYmQyODlhMTQ3Y2U5ZGEzMTEzYjVmMGI4YzAwYTYwYjFjZTFkN2U4MTlkN2E0MzFkN2M5MGVhMGU1ZlwiLFtcIk5JU1QgUC0zODRcIixcIlAtMzg0XCJdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3A1MjFyMVwiLDUyMSxcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiMDUxOTUzRUI5NjE4RTFDOUExRjkyOUEyMUEwQjY4NTQwRUVBMkRBNzI1Qjk5QjMxNUYzQjhCNDg5OTE4RUYxMDlFMTU2MTkzOTUxRUM3RTkzN0IxNjUyQzBCRDNCQjFCRjA3MzU3M0RGODgzRDJDMzRGMUVGNDUxRkQ0NkI1MDNGMDBcIixcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE1MTg2ODc4M0JGMkY5NjZCN0ZDQzAxNDhGNzA5QTVEMDNCQjVDOUI4ODk5QzQ3QUVCQjZGQjcxRTkxMzg2NDA5XCIsXCIxXCIsXCJDNjg1OEUwNkI3MDQwNEU5Q0Q5RTNFQ0I2NjIzOTVCNDQyOUM2NDgxMzkwNTNGQjUyMUY4MjhBRjYwNkI0RDNEQkFBMTRCNUU3N0VGRTc1OTI4RkUxREMxMjdBMkZGQThERTMzNDhCM0MxODU2QTQyOUJGOTdFN0UzMUMyRTVCRDY2XCIsXCIwMTE4MzkyOTZhNzg5YTNiYzAwNDVjOGE1ZmI0MmM3ZDFiZDk5OGY1NDQ0OTU3OWI0NDY4MTdhZmJkMTcyNzNlNjYyYzk3ZWU3Mjk5NWVmNDI2NDBjNTUwYjkwMTNmYWQwNzYxMzUzYzcwODZhMjcyYzI0MDg4YmU5NDc2OWZkMTY2NTBcIixbXCJOSVNUIFAtNTIxXCIsXCJQLTUyMVwiXSk7XG52YXIgS0VZVVRJTD1mdW5jdGlvbigpe3ZhciBkPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gayhDcnlwdG9KUy5BRVMscCxyLHEpfTt2YXIgZT1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGsoQ3J5cHRvSlMuVHJpcGxlREVTLHAscixxKX07dmFyIGE9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBrKENyeXB0b0pTLkRFUyxwLHIscSl9O3ZhciBrPWZ1bmN0aW9uKHMseCx1LHEpe3ZhciByPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoeCk7dmFyIHc9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1KTt2YXIgcD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHEpO3ZhciB0PXt9O3Qua2V5PXc7dC5pdj1wO3QuY2lwaGVydGV4dD1yO3ZhciB2PXMuZGVjcnlwdCh0LHcse2l2OnB9KTtyZXR1cm4gQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodil9O3ZhciBsPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gZyhDcnlwdG9KUy5BRVMscCxyLHEpfTt2YXIgbz1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGcoQ3J5cHRvSlMuVHJpcGxlREVTLHAscixxKX07dmFyIGY9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBnKENyeXB0b0pTLkRFUyxwLHIscSl9O3ZhciBnPWZ1bmN0aW9uKHQseSx2LHEpe3ZhciBzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoeSk7dmFyIHg9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh2KTt2YXIgcD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHEpO3ZhciB3PXQuZW5jcnlwdChzLHgse2l2OnB9KTt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHcudG9TdHJpbmcoKSk7dmFyIHU9Q3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkocik7cmV0dXJuIHV9O3ZhciBpPXtcIkFFUy0yNTYtQ0JDXCI6e3Byb2M6ZCxlcHJvYzpsLGtleWxlbjozMixpdmxlbjoxNn0sXCJBRVMtMTkyLUNCQ1wiOntwcm9jOmQsZXByb2M6bCxrZXlsZW46MjQsaXZsZW46MTZ9LFwiQUVTLTEyOC1DQkNcIjp7cHJvYzpkLGVwcm9jOmwsa2V5bGVuOjE2LGl2bGVuOjE2fSxcIkRFUy1FREUzLUNCQ1wiOntwcm9jOmUsZXByb2M6byxrZXlsZW46MjQsaXZsZW46OH0sXCJERVMtQ0JDXCI6e3Byb2M6YSxlcHJvYzpmLGtleWxlbjo4LGl2bGVuOjh9fTt2YXIgYz1mdW5jdGlvbihwKXtyZXR1cm4gaVtwXVtcInByb2NcIl19O3ZhciBtPWZ1bmN0aW9uKHApe3ZhciByPUNyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKHApO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHIpO3JldHVybiBxfTt2YXIgbj1mdW5jdGlvbih2KXt2YXIgdz17fTt2YXIgcT12Lm1hdGNoKG5ldyBSZWdFeHAoXCJERUstSW5mbzogKFteLF0rKSwoWzAtOUEtRmEtZl0rKVwiLFwibVwiKSk7aWYocSl7dy5jaXBoZXI9cVsxXTt3Lml2c2FsdD1xWzJdfXZhciBwPXYubWF0Y2gobmV3IFJlZ0V4cChcIi0tLS0tQkVHSU4gKFtBLVpdKykgUFJJVkFURSBLRVktLS0tLVwiKSk7aWYocCl7dy50eXBlPXBbMV19dmFyIHU9LTE7dmFyIHg9MDtpZih2LmluZGV4T2YoXCJcXHJcXG5cXHJcXG5cIikhPS0xKXt1PXYuaW5kZXhPZihcIlxcclxcblxcclxcblwiKTt4PTJ9aWYodi5pbmRleE9mKFwiXFxuXFxuXCIpIT0tMSl7dT12LmluZGV4T2YoXCJcXG5cXG5cIik7eD0xfXZhciB0PXYuaW5kZXhPZihcIi0tLS0tRU5EXCIpO2lmKHUhPS0xJiZ0IT0tMSl7dmFyIHI9di5zdWJzdHJpbmcodSt4KjIsdC14KTtyPXIucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3cuZGF0YT1yfXJldHVybiB3fTt2YXIgaj1mdW5jdGlvbihxLHkscCl7dmFyIHY9cC5zdWJzdHJpbmcoMCwxNik7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh2KTt2YXIgcj1DcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh5KTt2YXIgdT1pW3FdW1wia2V5bGVuXCJdK2lbcV1bXCJpdmxlblwiXTt2YXIgeD1cIlwiO3ZhciB3PW51bGw7Zm9yKDs7KXt2YXIgcz1DcnlwdG9KUy5hbGdvLk1ENS5jcmVhdGUoKTtpZih3IT1udWxsKXtzLnVwZGF0ZSh3KX1zLnVwZGF0ZShyKTtzLnVwZGF0ZSh0KTt3PXMuZmluYWxpemUoKTt4PXgrQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodyk7aWYoeC5sZW5ndGg+PXUqMil7YnJlYWt9fXZhciB6PXt9O3oua2V5aGV4PXguc3Vic3RyKDAsaVtxXVtcImtleWxlblwiXSoyKTt6Lml2aGV4PXguc3Vic3RyKGlbcV1bXCJrZXlsZW5cIl0qMixpW3FdW1wiaXZsZW5cIl0qMik7cmV0dXJuIHp9O3ZhciBiPWZ1bmN0aW9uKHAsdixyLHcpe3ZhciBzPUNyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UocCk7dmFyIHE9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkocyk7dmFyIHU9aVt2XVtcInByb2NcIl07dmFyIHQ9dShxLHIsdyk7cmV0dXJuIHR9O3ZhciBoPWZ1bmN0aW9uKHAscyxxLHUpe3ZhciByPWlbc11bXCJlcHJvY1wiXTt2YXIgdD1yKHAscSx1KTtyZXR1cm4gdH07cmV0dXJue3ZlcnNpb246XCIxLjAuMFwiLHBhcnNlUEtDUzVQRU06ZnVuY3Rpb24ocCl7cmV0dXJuIG4ocCl9LGdldEtleUFuZFVudXNlZEl2QnlQYXNzY29kZUFuZEl2c2FsdDpmdW5jdGlvbihxLHAscil7cmV0dXJuIGoocSxwLHIpfSxkZWNyeXB0S2V5QjY0OmZ1bmN0aW9uKHAscixxLHMpe3JldHVybiBiKHAscixxLHMpfSxnZXREZWNyeXB0ZWRLZXlIZXg6ZnVuY3Rpb24oeSx4KXt2YXIgcT1uKHkpO3ZhciB0PXEudHlwZTt2YXIgcj1xLmNpcGhlcjt2YXIgcD1xLml2c2FsdDt2YXIgcz1xLmRhdGE7dmFyIHc9aihyLHgscCk7dmFyIHY9dy5rZXloZXg7dmFyIHU9YihzLHIsdixwKTtyZXR1cm4gdX0sZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4OmZ1bmN0aW9uKHgscyxBLHQscil7dmFyIHA9XCJcIjtpZih0eXBlb2YgdD09XCJ1bmRlZmluZWRcInx8dD09bnVsbCl7dD1cIkFFUy0yNTYtQ0JDXCJ9aWYodHlwZW9mIGlbdF09PVwidW5kZWZpbmVkXCIpe3Rocm93XCJLRVlVVElMIHVuc3VwcG9ydGVkIGFsZ29yaXRobTogXCIrdH1pZih0eXBlb2Ygcj09XCJ1bmRlZmluZWRcInx8cj09bnVsbCl7dmFyIHY9aVt0XVtcIml2bGVuXCJdO3ZhciB1PW0odik7cj11LnRvVXBwZXJDYXNlKCl9dmFyIHo9aih0LEEscik7dmFyIHk9ei5rZXloZXg7dmFyIHc9aChzLHQseSxyKTt2YXIgcT13LnJlcGxhY2UoLyguezY0fSkvZyxcIiQxXFxyXFxuXCIpO3ZhciBwPVwiLS0tLS1CRUdJTiBcIit4K1wiIFBSSVZBVEUgS0VZLS0tLS1cXHJcXG5cIjtwKz1cIlByb2MtVHlwZTogNCxFTkNSWVBURURcXHJcXG5cIjtwKz1cIkRFSy1JbmZvOiBcIit0K1wiLFwiK3IrXCJcXHJcXG5cIjtwKz1cIlxcclxcblwiO3ArPXE7cCs9XCJcXHJcXG4tLS0tLUVORCBcIit4K1wiIFBSSVZBVEUgS0VZLS0tLS1cXHJcXG5cIjtyZXR1cm4gcH0scGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4OmZ1bmN0aW9uKHkpe3ZhciBCPUFTTjFIRVg7dmFyIHo9Qi5nZXRDaGlsZElkeDt2YXIgdz1CLmdldFY7dmFyIHQ9e307dmFyIHI9eih5LDApO2lmKHIubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMCkuaXRlbXMgIT0gMjogXCIrci5sZW5ndGh9dC5jaXBoZXJ0ZXh0PXcoeSxyWzFdKTt2YXIgQT16KHksclswXSk7aWYoQS5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjApLml0ZW1zICE9IDI6IFwiK0EubGVuZ3RofWlmKHcoeSxBWzBdKSE9XCIyYTg2NDg4NmY3MGQwMTA1MGRcIil7dGhyb3dcInRoaXMgb25seSBzdXBwb3J0cyBwa2NzNVBCRVMyXCJ9dmFyIHA9eih5LEFbMV0pO2lmKEEubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEpLml0ZW1zICE9IDI6IFwiK3AubGVuZ3RofXZhciBxPXooeSxwWzFdKTtpZihxLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMC4xLjEpLml0ZW1zICE9IDI6IFwiK3EubGVuZ3RofWlmKHcoeSxxWzBdKSE9XCIyYTg2NDg4NmY3MGQwMzA3XCIpe3Rocm93XCJ0aGlzIG9ubHkgc3VwcG9ydHMgVHJpcGxlREVTXCJ9dC5lbmNyeXB0aW9uU2NoZW1lQWxnPVwiVHJpcGxlREVTXCI7dC5lbmNyeXB0aW9uU2NoZW1lSVY9dyh5LHFbMV0pO3ZhciBzPXooeSxwWzBdKTtpZihzLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMC4xLjApLml0ZW1zICE9IDI6IFwiK3MubGVuZ3RofWlmKHcoeSxzWzBdKSE9XCIyYTg2NDg4NmY3MGQwMTA1MGNcIil7dGhyb3dcInRoaXMgb25seSBzdXBwb3J0cyBwa2NzNVBCS0RGMlwifXZhciB4PXooeSxzWzFdKTtpZih4Lmxlbmd0aDwyKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMC4xKS5pdGVtcyA8IDI6IFwiK3gubGVuZ3RofXQucGJrZGYyU2FsdD13KHkseFswXSk7dmFyIHU9dyh5LHhbMV0pO3RyeXt0LnBia2RmMkl0ZXI9cGFyc2VJbnQodSwxNil9Y2F0Y2godil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQgcGJrZGYySXRlcjogXCIrdX1yZXR1cm4gdH0sZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtOmZ1bmN0aW9uKHUscCl7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1LnBia2RmMlNhbHQpO3ZhciBxPXUucGJrZGYySXRlcjt2YXIgcz1DcnlwdG9KUy5QQktERjIocCx0LHtrZXlTaXplOjE5Mi8zMixpdGVyYXRpb25zOnF9KTt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShzKTtyZXR1cm4gcn0sX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU06ZnVuY3Rpb24oeCx5KXt2YXIgcj1wZW10b2hleCh4LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpO3ZhciBwPXRoaXMucGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4KHIpO3ZhciB1PUtFWVVUSUwuZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtKHAseSk7dmFyIHY9e307di5jaXBoZXJ0ZXh0PUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocC5jaXBoZXJ0ZXh0KTt2YXIgdD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHUpO3ZhciBzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocC5lbmNyeXB0aW9uU2NoZW1lSVYpO3ZhciB3PUNyeXB0b0pTLlRyaXBsZURFUy5kZWNyeXB0KHYsdCx7aXY6c30pO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHcpO3JldHVybiBxfSxnZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU06ZnVuY3Rpb24ocyxxKXt2YXIgcD10aGlzLl9nZXRQbGFpblBLQ1M4SGV4RnJvbUVuY3J5cHRlZFBLQ1M4UEVNKHMscSk7dmFyIHI9dGhpcy5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgocCk7cmV0dXJuIHJ9LHBhcnNlUGxhaW5Qcml2YXRlUEtDUzhIZXg6ZnVuY3Rpb24ocyl7dmFyIHY9QVNOMUhFWDt2YXIgdT12LmdldENoaWxkSWR4O3ZhciB0PXYuZ2V0Vjt2YXIgcT17fTtxLmFsZ3BhcmFtPW51bGw7aWYocy5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIHBsYWluIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDAxKVwifXZhciByPXUocywwKTtpZihyLmxlbmd0aCE9Myl7dGhyb3dcIm1hbGZvcm1lZCBwbGFpbiBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwMilcIn1pZihzLnN1YnN0cihyWzFdLDIpIT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDMpXCJ9dmFyIHA9dShzLHJbMV0pO2lmKHAubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDA0KVwifWlmKHMuc3Vic3RyKHBbMF0sMikhPVwiMDZcIil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwNSlcIn1xLmFsZ29pZD10KHMscFswXSk7aWYocy5zdWJzdHIocFsxXSwyKT09XCIwNlwiKXtxLmFsZ3BhcmFtPXQocyxwWzFdKX1pZihzLnN1YnN0cihyWzJdLDIpIT1cIjA0XCIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDYpXCJ9cS5rZXlpZHg9di5nZXRWaWR4KHMsclsyXSk7cmV0dXJuIHF9LGdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOFBFTTpmdW5jdGlvbihxKXt2YXIgcD1wZW10b2hleChxLFwiUFJJVkFURSBLRVlcIik7dmFyIHI9dGhpcy5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgocCk7cmV0dXJuIHJ9LGdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOEhleDpmdW5jdGlvbihwKXt2YXIgcT10aGlzLnBhcnNlUGxhaW5Qcml2YXRlUEtDUzhIZXgocCk7dmFyIHI7aWYocS5hbGdvaWQ9PVwiMmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3I9bmV3IFJTQUtleSgpfWVsc2V7aWYocS5hbGdvaWQ9PVwiMmE4NjQ4Y2UzODA0MDFcIil7cj1uZXcgS0pVUi5jcnlwdG8uRFNBKCl9ZWxzZXtpZihxLmFsZ29pZD09XCIyYTg2NDhjZTNkMDIwMVwiKXtyPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSgpfWVsc2V7dGhyb3dcInVuc3VwcG9ydGVkIHByaXZhdGUga2V5IGFsZ29yaXRobVwifX19ci5yZWFkUEtDUzhQcnZLZXlIZXgocCk7cmV0dXJuIHJ9LF9nZXRLZXlGcm9tUHVibGljUEtDUzhIZXg6ZnVuY3Rpb24ocSl7dmFyIHA7dmFyIHI9QVNOMUhFWC5nZXRWYnlMaXN0KHEsMCxbMCwwXSxcIjA2XCIpO2lmKHI9PT1cIjJhODY0ODg2ZjcwZDAxMDEwMVwiKXtwPW5ldyBSU0FLZXkoKX1lbHNle2lmKHI9PT1cIjJhODY0OGNlMzgwNDAxXCIpe3A9bmV3IEtKVVIuY3J5cHRvLkRTQSgpfWVsc2V7aWYocj09PVwiMmE4NjQ4Y2UzZDAyMDFcIil7cD1uZXcgS0pVUi5jcnlwdG8uRUNEU0EoKX1lbHNle3Rocm93XCJ1bnN1cHBvcnRlZCBQS0NTIzggcHVibGljIGtleSBoZXhcIn19fXAucmVhZFBLQ1M4UHViS2V5SGV4KHEpO3JldHVybiBwfSxwYXJzZVB1YmxpY1Jhd1JTQUtleUhleDpmdW5jdGlvbihyKXt2YXIgdT1BU04xSEVYO3ZhciB0PXUuZ2V0Q2hpbGRJZHg7dmFyIHM9dS5nZXRWO3ZhciBwPXt9O2lmKHIuc3Vic3RyKDAsMikhPVwiMzBcIil7dGhyb3dcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDAxKVwifXZhciBxPXQociwwKTtpZihxLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDAyKVwifWlmKHIuc3Vic3RyKHFbMF0sMikhPVwiMDJcIil7dGhyb3dcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDAzKVwifXAubj1zKHIscVswXSk7aWYoci5zdWJzdHIocVsxXSwyKSE9XCIwMlwiKXt0aHJvd1wibWFsZm9ybWVkIFJTQSBrZXkoY29kZTowMDQpXCJ9cC5lPXMocixxWzFdKTtyZXR1cm4gcH0scGFyc2VQdWJsaWNQS0NTOEhleDpmdW5jdGlvbih0KXt2YXIgdj1BU04xSEVYO3ZhciB1PXYuZ2V0Q2hpbGRJZHg7dmFyIHM9di5nZXRWO3ZhciBxPXt9O3EuYWxncGFyYW09bnVsbDt2YXIgcj11KHQsMCk7aWYoci5sZW5ndGghPTIpe3Rocm93XCJvdXRlciBERVJTZXF1ZW5jZSBzaGFsbCBoYXZlIDIgZWxlbWVudHM6IFwiK3IubGVuZ3RofXZhciB3PXJbMF07aWYodC5zdWJzdHIodywyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHB1YmxpYyBrZXkoY29kZTowMDEpXCJ9dmFyIHA9dSh0LHcpO2lmKHAubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHB1YmxpYyBrZXkoY29kZTowMDIpXCJ9aWYodC5zdWJzdHIocFswXSwyKSE9XCIwNlwiKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHB1YmxpYyBrZXkoY29kZTowMDMpXCJ9cS5hbGdvaWQ9cyh0LHBbMF0pO2lmKHQuc3Vic3RyKHBbMV0sMik9PVwiMDZcIil7cS5hbGdwYXJhbT1zKHQscFsxXSl9ZWxzZXtpZih0LnN1YnN0cihwWzFdLDIpPT1cIjMwXCIpe3EuYWxncGFyYW09e307cS5hbGdwYXJhbS5wPXYuZ2V0VmJ5TGlzdCh0LHBbMV0sWzBdLFwiMDJcIik7cS5hbGdwYXJhbS5xPXYuZ2V0VmJ5TGlzdCh0LHBbMV0sWzFdLFwiMDJcIik7cS5hbGdwYXJhbS5nPXYuZ2V0VmJ5TGlzdCh0LHBbMV0sWzJdLFwiMDJcIil9fWlmKHQuc3Vic3RyKHJbMV0sMikhPVwiMDNcIil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDA0KVwifXEua2V5PXModCxyWzFdKS5zdWJzdHIoMik7cmV0dXJuIHF9LH19KCk7S0VZVVRJTC5nZXRLZXk9ZnVuY3Rpb24obCxrLG4pe3ZhciBHPUFTTjFIRVgsTD1HLmdldENoaWxkSWR4LHY9Ry5nZXRWLGQ9Ry5nZXRWYnlMaXN0LGM9S0pVUi5jcnlwdG8saT1jLkVDRFNBLEM9Yy5EU0Esdz1SU0FLZXksTT1wZW10b2hleCxGPUtFWVVUSUw7aWYodHlwZW9mIHchPVwidW5kZWZpbmVkXCImJmwgaW5zdGFuY2VvZiB3KXtyZXR1cm4gbH1pZih0eXBlb2YgaSE9XCJ1bmRlZmluZWRcIiYmbCBpbnN0YW5jZW9mIGkpe3JldHVybiBsfWlmKHR5cGVvZiBDIT1cInVuZGVmaW5lZFwiJiZsIGluc3RhbmNlb2YgQyl7cmV0dXJuIGx9aWYobC5jdXJ2ZSE9PXVuZGVmaW5lZCYmbC54eSE9PXVuZGVmaW5lZCYmbC5kPT09dW5kZWZpbmVkKXtyZXR1cm4gbmV3IGkoe3B1YjpsLnh5LGN1cnZlOmwuY3VydmV9KX1pZihsLmN1cnZlIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQpe3JldHVybiBuZXcgaSh7cHJ2OmwuZCxjdXJ2ZTpsLmN1cnZlfSl9aWYobC5rdHk9PT11bmRlZmluZWQmJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQ9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQdWJsaWMobC5uLGwuZSk7cmV0dXJuIFB9aWYobC5rdHk9PT11bmRlZmluZWQmJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQmJmwucCE9PXVuZGVmaW5lZCYmbC5xIT09dW5kZWZpbmVkJiZsLmRwIT09dW5kZWZpbmVkJiZsLmRxIT09dW5kZWZpbmVkJiZsLmNvIT09dW5kZWZpbmVkJiZsLnFpPT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgdygpO1Auc2V0UHJpdmF0ZUV4KGwubixsLmUsbC5kLGwucCxsLnEsbC5kcCxsLmRxLGwuY28pO3JldHVybiBQfWlmKGwua3R5PT09dW5kZWZpbmVkJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkJiZsLnA9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQcml2YXRlKGwubixsLmUsbC5kKTtyZXR1cm4gUH1pZihsLnAhPT11bmRlZmluZWQmJmwucSE9PXVuZGVmaW5lZCYmbC5nIT09dW5kZWZpbmVkJiZsLnkhPT11bmRlZmluZWQmJmwueD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IEMoKTtQLnNldFB1YmxpYyhsLnAsbC5xLGwuZyxsLnkpO3JldHVybiBQfWlmKGwucCE9PXVuZGVmaW5lZCYmbC5xIT09dW5kZWZpbmVkJiZsLmchPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC54IT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgQygpO1Auc2V0UHJpdmF0ZShsLnAsbC5xLGwuZyxsLnksbC54KTtyZXR1cm4gUH1pZihsLmt0eT09PVwiUlNBXCImJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQ9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQdWJsaWMoYjY0dXRvaGV4KGwubiksYjY0dXRvaGV4KGwuZSkpO3JldHVybiBQfWlmKGwua3R5PT09XCJSU0FcIiYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCYmbC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZHAhPT11bmRlZmluZWQmJmwuZHEhPT11bmRlZmluZWQmJmwucWkhPT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQcml2YXRlRXgoYjY0dXRvaGV4KGwubiksYjY0dXRvaGV4KGwuZSksYjY0dXRvaGV4KGwuZCksYjY0dXRvaGV4KGwucCksYjY0dXRvaGV4KGwucSksYjY0dXRvaGV4KGwuZHApLGI2NHV0b2hleChsLmRxKSxiNjR1dG9oZXgobC5xaSkpO3JldHVybiBQfWlmKGwua3R5PT09XCJSU0FcIiYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGUoYjY0dXRvaGV4KGwubiksYjY0dXRvaGV4KGwuZSksYjY0dXRvaGV4KGwuZCkpO3JldHVybiBQfWlmKGwua3R5PT09XCJFQ1wiJiZsLmNydiE9PXVuZGVmaW5lZCYmbC54IT09dW5kZWZpbmVkJiZsLnkhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIGo9bmV3IGkoe2N1cnZlOmwuY3J2fSk7dmFyIHQ9ai5lY3BhcmFtcy5rZXlsZW4vNDt2YXIgQj0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwueCkpLnNsaWNlKC10KTt2YXIgej0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwueSkpLnNsaWNlKC10KTt2YXIgdT1cIjA0XCIrQit6O2ouc2V0UHVibGljS2V5SGV4KHUpO3JldHVybiBqfWlmKGwua3R5PT09XCJFQ1wiJiZsLmNydiE9PXVuZGVmaW5lZCYmbC54IT09dW5kZWZpbmVkJiZsLnkhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCl7dmFyIGo9bmV3IGkoe2N1cnZlOmwuY3J2fSk7dmFyIHQ9ai5lY3BhcmFtcy5rZXlsZW4vNDt2YXIgQj0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwueCkpLnNsaWNlKC10KTt2YXIgej0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwueSkpLnNsaWNlKC10KTt2YXIgdT1cIjA0XCIrQit6O3ZhciBiPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC5kKSkuc2xpY2UoLXQpO2ouc2V0UHVibGljS2V5SGV4KHUpO2ouc2V0UHJpdmF0ZUtleUhleChiKTtyZXR1cm4gan1pZihuPT09XCJwa2NzNXBydlwiKXt2YXIgSj1sLEc9QVNOMUhFWCxOLFA7Tj1MKEosMCk7aWYoTi5sZW5ndGg9PT05KXtQPW5ldyB3KCk7UC5yZWFkUEtDUzVQcnZLZXlIZXgoSil9ZWxzZXtpZihOLmxlbmd0aD09PTYpe1A9bmV3IEMoKTtQLnJlYWRQS0NTNVBydktleUhleChKKX1lbHNle2lmKE4ubGVuZ3RoPjImJkouc3Vic3RyKE5bMV0sMik9PT1cIjA0XCIpe1A9bmV3IGkoKTtQLnJlYWRQS0NTNVBydktleUhleChKKX1lbHNle3Rocm93XCJ1bnN1cHBvcnRlZCBQS0NTIzEvNSBoZXhhZGVjaW1hbCBrZXlcIn19fXJldHVybiBQfWlmKG49PT1cInBrY3M4cHJ2XCIpe3ZhciBQPUYuZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4KGwpO3JldHVybiBQfWlmKG49PT1cInBrY3M4cHViXCIpe3JldHVybiBGLl9nZXRLZXlGcm9tUHVibGljUEtDUzhIZXgobCl9aWYobj09PVwieDUwOXB1YlwiKXtyZXR1cm4gWDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydEhleChsKX1pZihsLmluZGV4T2YoXCItRU5EIENFUlRJRklDQVRFLVwiLDApIT0tMXx8bC5pbmRleE9mKFwiLUVORCBYNTA5IENFUlRJRklDQVRFLVwiLDApIT0tMXx8bC5pbmRleE9mKFwiLUVORCBUUlVTVEVEIENFUlRJRklDQVRFLVwiLDApIT0tMSl7cmV0dXJuIFg1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRQRU0obCl9aWYobC5pbmRleE9mKFwiLUVORCBQVUJMSUMgS0VZLVwiKSE9LTEpe3ZhciBPPXBlbXRvaGV4KGwsXCJQVUJMSUMgS0VZXCIpO3JldHVybiBGLl9nZXRLZXlGcm9tUHVibGljUEtDUzhIZXgoTyl9aWYobC5pbmRleE9mKFwiLUVORCBSU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIik9PS0xKXt2YXIgbT1NKGwsXCJSU0EgUFJJVkFURSBLRVlcIik7cmV0dXJuIEYuZ2V0S2V5KG0sbnVsbCxcInBrY3M1cHJ2XCIpfWlmKGwuaW5kZXhPZihcIi1FTkQgRFNBIFBSSVZBVEUgS0VZLVwiKSE9LTEmJmwuaW5kZXhPZihcIjQsRU5DUllQVEVEXCIpPT0tMSl7dmFyIEk9TShsLFwiRFNBIFBSSVZBVEUgS0VZXCIpO3ZhciBFPWQoSSwwLFsxXSxcIjAyXCIpO3ZhciBEPWQoSSwwLFsyXSxcIjAyXCIpO3ZhciBLPWQoSSwwLFszXSxcIjAyXCIpO3ZhciByPWQoSSwwLFs0XSxcIjAyXCIpO3ZhciBzPWQoSSwwLFs1XSxcIjAyXCIpO3ZhciBQPW5ldyBDKCk7UC5zZXRQcml2YXRlKG5ldyBCaWdJbnRlZ2VyKEUsMTYpLG5ldyBCaWdJbnRlZ2VyKEQsMTYpLG5ldyBCaWdJbnRlZ2VyKEssMTYpLG5ldyBCaWdJbnRlZ2VyKHIsMTYpLG5ldyBCaWdJbnRlZ2VyKHMsMTYpKTtyZXR1cm4gUH1pZihsLmluZGV4T2YoXCItRU5EIFBSSVZBVEUgS0VZLVwiKSE9LTEpe3JldHVybiBGLmdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOFBFTShsKX1pZihsLmluZGV4T2YoXCItRU5EIFJTQSBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKSE9LTEpe3ZhciBvPUYuZ2V0RGVjcnlwdGVkS2V5SGV4KGwsayk7dmFyIEg9bmV3IFJTQUtleSgpO0gucmVhZFBLQ1M1UHJ2S2V5SGV4KG8pO3JldHVybiBIfWlmKGwuaW5kZXhPZihcIi1FTkQgRUMgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIikhPS0xKXt2YXIgST1GLmdldERlY3J5cHRlZEtleUhleChsLGspO3ZhciBQPWQoSSwwLFsxXSxcIjA0XCIpO3ZhciBmPWQoSSwwLFsyLDBdLFwiMDZcIik7dmFyIEE9ZChJLDAsWzMsMF0sXCIwM1wiKS5zdWJzdHIoMik7dmFyIGU9XCJcIjtpZihLSlVSLmNyeXB0by5PSUQub2lkaGV4Mm5hbWVbZl0hPT11bmRlZmluZWQpe2U9S0pVUi5jcnlwdG8uT0lELm9pZGhleDJuYW1lW2ZdfWVsc2V7dGhyb3dcInVuZGVmaW5lZCBPSUQoaGV4KSBpbiBLSlVSLmNyeXB0by5PSUQ6IFwiK2Z9dmFyIGo9bmV3IGkoe2N1cnZlOmV9KTtqLnNldFB1YmxpY0tleUhleChBKTtqLnNldFByaXZhdGVLZXlIZXgoUCk7ai5pc1B1YmxpYz1mYWxzZTtyZXR1cm4gan1pZihsLmluZGV4T2YoXCItRU5EIERTQSBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKSE9LTEpe3ZhciBJPUYuZ2V0RGVjcnlwdGVkS2V5SGV4KGwsayk7dmFyIEU9ZChJLDAsWzFdLFwiMDJcIik7dmFyIEQ9ZChJLDAsWzJdLFwiMDJcIik7dmFyIEs9ZChJLDAsWzNdLFwiMDJcIik7dmFyIHI9ZChJLDAsWzRdLFwiMDJcIik7dmFyIHM9ZChJLDAsWzVdLFwiMDJcIik7dmFyIFA9bmV3IEMoKTtQLnNldFByaXZhdGUobmV3IEJpZ0ludGVnZXIoRSwxNiksbmV3IEJpZ0ludGVnZXIoRCwxNiksbmV3IEJpZ0ludGVnZXIoSywxNiksbmV3IEJpZ0ludGVnZXIociwxNiksbmV3IEJpZ0ludGVnZXIocywxNikpO3JldHVybiBQfWlmKGwuaW5kZXhPZihcIi1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLVwiKSE9LTEpe3JldHVybiBGLmdldEtleUZyb21FbmNyeXB0ZWRQS0NTOFBFTShsLGspfXRocm93XCJub3Qgc3VwcG9ydGVkIGFyZ3VtZW50XCJ9O0tFWVVUSUwuZ2VuZXJhdGVLZXlwYWlyPWZ1bmN0aW9uKGEsYyl7aWYoYT09XCJSU0FcIil7dmFyIGI9Yzt2YXIgaD1uZXcgUlNBS2V5KCk7aC5nZW5lcmF0ZShiLFwiMTAwMDFcIik7aC5pc1ByaXZhdGU9dHJ1ZTtoLmlzUHVibGljPXRydWU7dmFyIGY9bmV3IFJTQUtleSgpO3ZhciBlPWgubi50b1N0cmluZygxNik7dmFyIGk9aC5lLnRvU3RyaW5nKDE2KTtmLnNldFB1YmxpYyhlLGkpO2YuaXNQcml2YXRlPWZhbHNlO2YuaXNQdWJsaWM9dHJ1ZTt2YXIgaz17fTtrLnBydktleU9iaj1oO2sucHViS2V5T2JqPWY7cmV0dXJuIGt9ZWxzZXtpZihhPT1cIkVDXCIpe3ZhciBkPWM7dmFyIGc9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTpkfSk7dmFyIGo9Zy5nZW5lcmF0ZUtleVBhaXJIZXgoKTt2YXIgaD1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOmR9KTtoLnNldFB1YmxpY0tleUhleChqLmVjcHViaGV4KTtoLnNldFByaXZhdGVLZXlIZXgoai5lY3BydmhleCk7aC5pc1ByaXZhdGU9dHJ1ZTtoLmlzUHVibGljPWZhbHNlO3ZhciBmPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6ZH0pO2Yuc2V0UHVibGljS2V5SGV4KGouZWNwdWJoZXgpO2YuaXNQcml2YXRlPWZhbHNlO2YuaXNQdWJsaWM9dHJ1ZTt2YXIgaz17fTtrLnBydktleU9iaj1oO2sucHViS2V5T2JqPWY7cmV0dXJuIGt9ZWxzZXt0aHJvd1widW5rbm93biBhbGdvcml0aG06IFwiK2F9fX07S0VZVVRJTC5nZXRQRU09ZnVuY3Rpb24oYixELHksbSxxLGope3ZhciBGPUtKVVIsaz1GLmFzbjEsej1rLkRFUk9iamVjdElkZW50aWZpZXIsZj1rLkRFUkludGVnZXIsbD1rLkFTTjFVdGlsLm5ld09iamVjdCxhPWsueDUwOSxDPWEuU3ViamVjdFB1YmxpY0tleUluZm8sZT1GLmNyeXB0byx1PWUuRFNBLHI9ZS5FQ0RTQSxuPVJTQUtleTtmdW5jdGlvbiBBKHMpe3ZhciBHPWwoe3NlcTpbe1wiaW50XCI6MH0se1wiaW50XCI6e2JpZ2ludDpzLm59fSx7XCJpbnRcIjpzLmV9LHtcImludFwiOntiaWdpbnQ6cy5kfX0se1wiaW50XCI6e2JpZ2ludDpzLnB9fSx7XCJpbnRcIjp7YmlnaW50OnMucX19LHtcImludFwiOntiaWdpbnQ6cy5kbXAxfX0se1wiaW50XCI6e2JpZ2ludDpzLmRtcTF9fSx7XCJpbnRcIjp7YmlnaW50OnMuY29lZmZ9fV19KTtyZXR1cm4gR31mdW5jdGlvbiBCKEcpe3ZhciBzPWwoe3NlcTpbe1wiaW50XCI6MX0se29jdHN0cjp7aGV4OkcucHJ2S2V5SGV4fX0se3RhZzpbXCJhMFwiLHRydWUse29pZDp7bmFtZTpHLmN1cnZlTmFtZX19XX0se3RhZzpbXCJhMVwiLHRydWUse2JpdHN0cjp7aGV4OlwiMDBcIitHLnB1YktleUhleH19XX1dfSk7cmV0dXJuIHN9ZnVuY3Rpb24geChzKXt2YXIgRz1sKHtzZXE6W3tcImludFwiOjB9LHtcImludFwiOntiaWdpbnQ6cy5wfX0se1wiaW50XCI6e2JpZ2ludDpzLnF9fSx7XCJpbnRcIjp7YmlnaW50OnMuZ319LHtcImludFwiOntiaWdpbnQ6cy55fX0se1wiaW50XCI6e2JpZ2ludDpzLnh9fV19KTtyZXR1cm4gR31pZigoKG4hPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiBuKXx8KHUhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiB1KXx8KHIhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiByKSkmJmIuaXNQdWJsaWM9PXRydWUmJihEPT09dW5kZWZpbmVkfHxEPT1cIlBLQ1M4UFVCXCIpKXt2YXIgRT1uZXcgQyhiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gaGV4dG9wZW0odyxcIlBVQkxJQyBLRVlcIil9aWYoRD09XCJQS0NTMVBSVlwiJiZuIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgbiYmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9QShiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gaGV4dG9wZW0odyxcIlJTQSBQUklWQVRFIEtFWVwiKX1pZihEPT1cIlBLQ1MxUFJWXCImJnIhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiByJiYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgaT1uZXcgeih7bmFtZTpiLmN1cnZlTmFtZX0pO3ZhciB2PWkuZ2V0RW5jb2RlZEhleCgpO3ZhciBoPUIoYik7dmFyIHQ9aC5nZXRFbmNvZGVkSGV4KCk7dmFyIHA9XCJcIjtwKz1oZXh0b3BlbSh2LFwiRUMgUEFSQU1FVEVSU1wiKTtwKz1oZXh0b3BlbSh0LFwiRUMgUFJJVkFURSBLRVlcIik7cmV0dXJuIHB9aWYoRD09XCJQS0NTMVBSVlwiJiZ1IT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgdSYmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9eChiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gaGV4dG9wZW0odyxcIkRTQSBQUklWQVRFIEtFWVwiKX1pZihEPT1cIlBLQ1M1UFJWXCImJm4hPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiBuJiYoeSE9PXVuZGVmaW5lZCYmeSE9bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT1BKGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKG09PT11bmRlZmluZWQpe209XCJERVMtRURFMy1DQkNcIn1yZXR1cm4gdGhpcy5nZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgoXCJSU0FcIix3LHksbSxqKX1pZihEPT1cIlBLQ1M1UFJWXCImJnIhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiByJiYoeSE9PXVuZGVmaW5lZCYmeSE9bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT1CKGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKG09PT11bmRlZmluZWQpe209XCJERVMtRURFMy1DQkNcIn1yZXR1cm4gdGhpcy5nZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgoXCJFQ1wiLHcseSxtLGopfWlmKEQ9PVwiUEtDUzVQUlZcIiYmdSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUmJih5IT09dW5kZWZpbmVkJiZ5IT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPXgoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYobT09PXVuZGVmaW5lZCl7bT1cIkRFUy1FREUzLUNCQ1wifXJldHVybiB0aGlzLmdldEVuY3J5cHRlZFBLQ1M1UEVNRnJvbVBydktleUhleChcIkRTQVwiLHcseSxtLGopfXZhciBvPWZ1bmN0aW9uKEcscyl7dmFyIEk9YyhHLHMpO3ZhciBIPW5ldyBsKHtzZXE6W3tzZXE6W3tvaWQ6e25hbWU6XCJwa2NzNVBCRVMyXCJ9fSx7c2VxOlt7c2VxOlt7b2lkOntuYW1lOlwicGtjczVQQktERjJcIn19LHtzZXE6W3tvY3RzdHI6e2hleDpJLnBia2RmMlNhbHR9fSx7XCJpbnRcIjpJLnBia2RmMkl0ZXJ9XX1dfSx7c2VxOlt7b2lkOntuYW1lOlwiZGVzLUVERTMtQ0JDXCJ9fSx7b2N0c3RyOntoZXg6SS5lbmNyeXB0aW9uU2NoZW1lSVZ9fV19XX1dfSx7b2N0c3RyOntoZXg6SS5jaXBoZXJ0ZXh0fX1dfSk7cmV0dXJuIEguZ2V0RW5jb2RlZEhleCgpfTt2YXIgYz1mdW5jdGlvbihOLE8pe3ZhciBIPTEwMDt2YXIgTT1DcnlwdG9KUy5saWIuV29yZEFycmF5LnJhbmRvbSg4KTt2YXIgTD1cIkRFUy1FREUzLUNCQ1wiO3ZhciBzPUNyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKDgpO3ZhciBJPUNyeXB0b0pTLlBCS0RGMihPLE0se2tleVNpemU6MTkyLzMyLGl0ZXJhdGlvbnM6SH0pO3ZhciBKPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoTik7dmFyIEs9Q3J5cHRvSlMuVHJpcGxlREVTLmVuY3J5cHQoSixJLHtpdjpzfSkrXCJcIjt2YXIgRz17fTtHLmNpcGhlcnRleHQ9SztHLnBia2RmMlNhbHQ9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkoTSk7Ry5wYmtkZjJJdGVyPUg7Ry5lbmNyeXB0aW9uU2NoZW1lQWxnPUw7Ry5lbmNyeXB0aW9uU2NoZW1lSVY9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkocyk7cmV0dXJuIEd9O2lmKEQ9PVwiUEtDUzhQUlZcIiYmbiE9dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgbiYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBnPUEoYik7dmFyIGQ9Zy5nZXRFbmNvZGVkSGV4KCk7dmFyIEU9bCh7c2VxOlt7XCJpbnRcIjowfSx7c2VxOlt7b2lkOntuYW1lOlwicnNhRW5jcnlwdGlvblwifX0se1wibnVsbFwiOnRydWV9XX0se29jdHN0cjp7aGV4OmR9fV19KTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZih5PT09dW5kZWZpbmVkfHx5PT1udWxsKXtyZXR1cm4gaGV4dG9wZW0odyxcIlBSSVZBVEUgS0VZXCIpfWVsc2V7dmFyIHQ9byh3LHkpO3JldHVybiBoZXh0b3BlbSh0LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpfX1pZihEPT1cIlBLQ1M4UFJWXCImJnIhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiByJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIGc9bmV3IGwoe3NlcTpbe1wiaW50XCI6MX0se29jdHN0cjp7aGV4OmIucHJ2S2V5SGV4fX0se3RhZzpbXCJhMVwiLHRydWUse2JpdHN0cjp7aGV4OlwiMDBcIitiLnB1YktleUhleH19XX1dfSk7dmFyIGQ9Zy5nZXRFbmNvZGVkSGV4KCk7dmFyIEU9bCh7c2VxOlt7XCJpbnRcIjowfSx7c2VxOlt7b2lkOntuYW1lOlwiZWNQdWJsaWNLZXlcIn19LHtvaWQ6e25hbWU6Yi5jdXJ2ZU5hbWV9fV19LHtvY3RzdHI6e2hleDpkfX1dfSk7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCl7cmV0dXJuIGhleHRvcGVtKHcsXCJQUklWQVRFIEtFWVwiKX1lbHNle3ZhciB0PW8odyx5KTtyZXR1cm4gaGV4dG9wZW0odCxcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiKX19aWYoRD09XCJQS0NTOFBSVlwiJiZ1IT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgdSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBnPW5ldyBmKHtiaWdpbnQ6Yi54fSk7dmFyIGQ9Zy5nZXRFbmNvZGVkSGV4KCk7dmFyIEU9bCh7c2VxOlt7XCJpbnRcIjowfSx7c2VxOlt7b2lkOntuYW1lOlwiZHNhXCJ9fSx7c2VxOlt7XCJpbnRcIjp7YmlnaW50OmIucH19LHtcImludFwiOntiaWdpbnQ6Yi5xfX0se1wiaW50XCI6e2JpZ2ludDpiLmd9fV19XX0se29jdHN0cjp7aGV4OmR9fV19KTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZih5PT09dW5kZWZpbmVkfHx5PT1udWxsKXtyZXR1cm4gaGV4dG9wZW0odyxcIlBSSVZBVEUgS0VZXCIpfWVsc2V7dmFyIHQ9byh3LHkpO3JldHVybiBoZXh0b3BlbSh0LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpfX10aHJvd1widW5zdXBwb3J0ZWQgb2JqZWN0IG5vciBmb3JtYXRcIn07S0VZVVRJTC5nZXRLZXlGcm9tQ1NSUEVNPWZ1bmN0aW9uKGIpe3ZhciBhPXBlbXRvaGV4KGIsXCJDRVJUSUZJQ0FURSBSRVFVRVNUXCIpO3ZhciBjPUtFWVVUSUwuZ2V0S2V5RnJvbUNTUkhleChhKTtyZXR1cm4gY307S0VZVVRJTC5nZXRLZXlGcm9tQ1NSSGV4PWZ1bmN0aW9uKGEpe3ZhciBjPUtFWVVUSUwucGFyc2VDU1JIZXgoYSk7dmFyIGI9S0VZVVRJTC5nZXRLZXkoYy5wOHB1YmtleWhleCxudWxsLFwicGtjczhwdWJcIik7cmV0dXJuIGJ9O0tFWVVUSUwucGFyc2VDU1JIZXg9ZnVuY3Rpb24oZCl7dmFyIGk9QVNOMUhFWDt2YXIgZj1pLmdldENoaWxkSWR4O3ZhciBjPWkuZ2V0VExWO3ZhciBiPXt9O3ZhciBnPWQ7aWYoZy5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIENTUihjb2RlOjAwMSlcIn12YXIgZT1mKGcsMCk7aWYoZS5sZW5ndGg8MSl7dGhyb3dcIm1hbGZvcm1lZCBDU1IoY29kZTowMDIpXCJ9aWYoZy5zdWJzdHIoZVswXSwyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIENTUihjb2RlOjAwMylcIn12YXIgYT1mKGcsZVswXSk7aWYoYS5sZW5ndGg8Myl7dGhyb3dcIm1hbGZvcm1lZCBDU1IoY29kZTowMDQpXCJ9Yi5wOHB1YmtleWhleD1jKGcsYVsyXSk7cmV0dXJuIGJ9O0tFWVVUSUwuZ2V0SldLRnJvbUtleT1mdW5jdGlvbihkKXt2YXIgYj17fTtpZihkIGluc3RhbmNlb2YgUlNBS2V5JiZkLmlzUHJpdmF0ZSl7Yi5rdHk9XCJSU0FcIjtiLm49aGV4dG9iNjR1KGQubi50b1N0cmluZygxNikpO2IuZT1oZXh0b2I2NHUoZC5lLnRvU3RyaW5nKDE2KSk7Yi5kPWhleHRvYjY0dShkLmQudG9TdHJpbmcoMTYpKTtiLnA9aGV4dG9iNjR1KGQucC50b1N0cmluZygxNikpO2IucT1oZXh0b2I2NHUoZC5xLnRvU3RyaW5nKDE2KSk7Yi5kcD1oZXh0b2I2NHUoZC5kbXAxLnRvU3RyaW5nKDE2KSk7Yi5kcT1oZXh0b2I2NHUoZC5kbXExLnRvU3RyaW5nKDE2KSk7Yi5xaT1oZXh0b2I2NHUoZC5jb2VmZi50b1N0cmluZygxNikpO3JldHVybiBifWVsc2V7aWYoZCBpbnN0YW5jZW9mIFJTQUtleSYmZC5pc1B1YmxpYyl7Yi5rdHk9XCJSU0FcIjtiLm49aGV4dG9iNjR1KGQubi50b1N0cmluZygxNikpO2IuZT1oZXh0b2I2NHUoZC5lLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGJ9ZWxzZXtpZihkIGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0EmJmQuaXNQcml2YXRlKXt2YXIgYT1kLmdldFNob3J0TklTVFBDdXJ2ZU5hbWUoKTtpZihhIT09XCJQLTI1NlwiJiZhIT09XCJQLTM4NFwiKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZSBmb3IgSldUOiBcIithfXZhciBjPWQuZ2V0UHVibGljS2V5WFlIZXgoKTtiLmt0eT1cIkVDXCI7Yi5jcnY9YTtiLng9aGV4dG9iNjR1KGMueCk7Yi55PWhleHRvYjY0dShjLnkpO2IuZD1oZXh0b2I2NHUoZC5wcnZLZXlIZXgpO3JldHVybiBifWVsc2V7aWYoZCBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkVDRFNBJiZkLmlzUHVibGljKXt2YXIgYT1kLmdldFNob3J0TklTVFBDdXJ2ZU5hbWUoKTtpZihhIT09XCJQLTI1NlwiJiZhIT09XCJQLTM4NFwiKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZSBmb3IgSldUOiBcIithfXZhciBjPWQuZ2V0UHVibGljS2V5WFlIZXgoKTtiLmt0eT1cIkVDXCI7Yi5jcnY9YTtiLng9aGV4dG9iNjR1KGMueCk7Yi55PWhleHRvYjY0dShjLnkpO3JldHVybiBifX19fXRocm93XCJub3Qgc3VwcG9ydGVkIGtleSBvYmplY3RcIn07XG5SU0FLZXkuZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleD1mdW5jdGlvbihhKXtyZXR1cm4gQVNOMUhFWC5nZXRDaGlsZElkeChhLDApfTtSU0FLZXkuZ2V0SGV4VmFsdWVBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4PWZ1bmN0aW9uKGYpe3ZhciBuPUFTTjFIRVg7dmFyIGk9bi5nZXRWO3ZhciBrPVJTQUtleS5nZXRQb3NBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4KGYpO3ZhciBlPWkoZixrWzBdKTt2YXIgaj1pKGYsa1sxXSk7dmFyIGI9aShmLGtbMl0pO3ZhciBjPWkoZixrWzNdKTt2YXIgaD1pKGYsa1s0XSk7dmFyIGc9aShmLGtbNV0pO3ZhciBtPWkoZixrWzZdKTt2YXIgbD1pKGYsa1s3XSk7dmFyIGQ9aShmLGtbOF0pO3ZhciBrPW5ldyBBcnJheSgpO2sucHVzaChlLGosYixjLGgsZyxtLGwsZCk7cmV0dXJuIGt9O1JTQUtleS5wcm90b3R5cGUucmVhZFByaXZhdGVLZXlGcm9tUEVNU3RyaW5nPWZ1bmN0aW9uKGQpe3ZhciBjPXBlbXRvaGV4KGQpO3ZhciBiPVJTQUtleS5nZXRIZXhWYWx1ZUFycmF5T2ZDaGlsZHJlbkZyb21IZXgoYyk7dGhpcy5zZXRQcml2YXRlRXgoYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdLGJbNl0sYls3XSxiWzhdKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkUEtDUzVQcnZLZXlIZXg9ZnVuY3Rpb24oYyl7dmFyIGI9UlNBS2V5LmdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleChjKTt0aGlzLnNldFByaXZhdGVFeChiWzFdLGJbMl0sYlszXSxiWzRdLGJbNV0sYls2XSxiWzddLGJbOF0pfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQS0NTOFBydktleUhleD1mdW5jdGlvbihlKXt2YXIgYyxqLGwsYixhLGYsZCxrO3ZhciBtPUFTTjFIRVg7dmFyIGc9bS5nZXRWYnlMaXN0O2lmKG0uaXNBU04xSEVYKGUpPT09ZmFsc2Upe3Rocm93XCJub3QgQVNOLjEgaGV4IHN0cmluZ1wifXRyeXtjPWcoZSwwLFsyLDAsMV0sXCIwMlwiKTtqPWcoZSwwLFsyLDAsMl0sXCIwMlwiKTtsPWcoZSwwLFsyLDAsM10sXCIwMlwiKTtiPWcoZSwwLFsyLDAsNF0sXCIwMlwiKTthPWcoZSwwLFsyLDAsNV0sXCIwMlwiKTtmPWcoZSwwLFsyLDAsNl0sXCIwMlwiKTtkPWcoZSwwLFsyLDAsN10sXCIwMlwiKTtrPWcoZSwwLFsyLDAsOF0sXCIwMlwiKX1jYXRjaChpKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1MjOCBwbGFpbiBSU0EgcHJpdmF0ZSBrZXlcIn10aGlzLnNldFByaXZhdGVFeChjLGosbCxiLGEsZixkLGspfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQS0NTNVB1YktleUhleD1mdW5jdGlvbihjKXt2YXIgZT1BU04xSEVYO3ZhciBiPWUuZ2V0VjtpZihlLmlzQVNOMUhFWChjKT09PWZhbHNlKXt0aHJvd1wia2V5SGV4IGlzIG5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dmFyIGE9ZS5nZXRDaGlsZElkeChjLDApO2lmKGEubGVuZ3RoIT09Mnx8Yy5zdWJzdHIoYVswXSwyKSE9PVwiMDJcInx8Yy5zdWJzdHIoYVsxXSwyKSE9PVwiMDJcIil7dGhyb3dcIndyb25nIGhleCBmb3IgUEtDUyM1IHB1YmxpYyBrZXlcIn12YXIgZj1iKGMsYVswXSk7dmFyIGQ9YihjLGFbMV0pO3RoaXMuc2V0UHVibGljKGYsZCl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M4UHViS2V5SGV4PWZ1bmN0aW9uKGIpe3ZhciBjPUFTTjFIRVg7aWYoYy5pc0FTTjFIRVgoYik9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9aWYoYy5nZXRUTFZieUxpc3QoYiwwLFswLDBdKSE9PVwiMDYwOTJhODY0ODg2ZjcwZDAxMDEwMVwiKXt0aHJvd1wibm90IFBLQ1M4IFJTQSBwdWJsaWMga2V5XCJ9dmFyIGE9Yy5nZXRUTFZieUxpc3QoYiwwLFsxLDBdKTt0aGlzLnJlYWRQS0NTNVB1YktleUhleChhKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkQ2VydFB1YktleUhleD1mdW5jdGlvbihiLGQpe3ZhciBhLGM7YT1uZXcgWDUwOSgpO2EucmVhZENlcnRIZXgoYik7Yz1hLmdldFB1YmxpY0tleUhleCgpO3RoaXMucmVhZFBLQ1M4UHViS2V5SGV4KGMpfTtcbnZhciBfUkVfSEVYREVDT05MWT1uZXcgUmVnRXhwKFwiXCIpO19SRV9IRVhERUNPTkxZLmNvbXBpbGUoXCJbXjAtOWEtZl1cIixcImdpXCIpO2Z1bmN0aW9uIF9yc2FzaWduX2dldEhleFBhZGRlZERpZ2VzdEluZm9Gb3JTdHJpbmcoZCxlLGEpe3ZhciBiPWZ1bmN0aW9uKGYpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hTdHJpbmcoZixhKX07dmFyIGM9YihkKTtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5nZXRQYWRkZWREaWdlc3RJbmZvSGV4KGMsYSxlKX1mdW5jdGlvbiBfemVyb1BhZGRpbmdPZlNpZ25hdHVyZShlLGQpe3ZhciBjPVwiXCI7dmFyIGE9ZC80LWUubGVuZ3RoO2Zvcih2YXIgYj0wO2I8YTtiKyspe2M9YytcIjBcIn1yZXR1cm4gYytlfVJTQUtleS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihkLGEpe3ZhciBiPWZ1bmN0aW9uKGUpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hTdHJpbmcoZSxhKX07dmFyIGM9YihkKTtyZXR1cm4gdGhpcy5zaWduV2l0aE1lc3NhZ2VIYXNoKGMsYSl9O1JTQUtleS5wcm90b3R5cGUuc2lnbldpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihlLGMpe3ZhciBmPUtKVVIuY3J5cHRvLlV0aWwuZ2V0UGFkZGVkRGlnZXN0SW5mb0hleChlLGMsdGhpcy5uLmJpdExlbmd0aCgpKTt2YXIgYj1wYXJzZUJpZ0ludChmLDE2KTt2YXIgZD10aGlzLmRvUHJpdmF0ZShiKTt2YXIgYT1kLnRvU3RyaW5nKDE2KTtyZXR1cm4gX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUoYSx0aGlzLm4uYml0TGVuZ3RoKCkpfTtmdW5jdGlvbiBwc3NfbWdmMV9zdHIoYyxhLGUpe3ZhciBiPVwiXCIsZD0wO3doaWxlKGIubGVuZ3RoPGEpe2IrPWhleHRvcnN0cihlKHJzdHJ0b2hleChjK1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLFsoZCY0Mjc4MTkwMDgwKT4+MjQsKGQmMTY3MTE2ODApPj4xNiwoZCY2NTI4MCk+PjgsZCYyNTVdKSkpKTtkKz0xfXJldHVybiBifVJTQUtleS5wcm90b3R5cGUuc2lnblBTUz1mdW5jdGlvbihlLGEsZCl7dmFyIGM9ZnVuY3Rpb24oZil7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChmLGEpfTt2YXIgYj1jKHJzdHJ0b2hleChlKSk7aWYoZD09PXVuZGVmaW5lZCl7ZD0tMX1yZXR1cm4gdGhpcy5zaWduV2l0aE1lc3NhZ2VIYXNoUFNTKGIsYSxkKX07UlNBS2V5LnByb3RvdHlwZS5zaWduV2l0aE1lc3NhZ2VIYXNoUFNTPWZ1bmN0aW9uKGwsYSxrKXt2YXIgYj1oZXh0b3JzdHIobCk7dmFyIGc9Yi5sZW5ndGg7dmFyIG09dGhpcy5uLmJpdExlbmd0aCgpLTE7dmFyIGM9TWF0aC5jZWlsKG0vOCk7dmFyIGQ7dmFyIG89ZnVuY3Rpb24oaSl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChpLGEpfTtpZihrPT09LTF8fGs9PT11bmRlZmluZWQpe2s9Z31lbHNle2lmKGs9PT0tMil7az1jLWctMn1lbHNle2lmKGs8LTIpe3Rocm93XCJpbnZhbGlkIHNhbHQgbGVuZ3RoXCJ9fX1pZihjPChnK2srMikpe3Rocm93XCJkYXRhIHRvbyBsb25nXCJ9dmFyIGY9XCJcIjtpZihrPjApe2Y9bmV3IEFycmF5KGspO25ldyBTZWN1cmVSYW5kb20oKS5uZXh0Qnl0ZXMoZik7Zj1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxmKX12YXIgbj1oZXh0b3JzdHIobyhyc3RydG9oZXgoXCJcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXCIrYitmKSkpO3ZhciBqPVtdO2ZvcihkPTA7ZDxjLWstZy0yO2QrPTEpe2pbZF09MH12YXIgZT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxqKStcIlxceDAxXCIrZjt2YXIgaD1wc3NfbWdmMV9zdHIobixlLmxlbmd0aCxvKTt2YXIgcT1bXTtmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCs9MSl7cVtkXT1lLmNoYXJDb2RlQXQoZCleaC5jaGFyQ29kZUF0KGQpfXZhciBwPSg2NTI4MD4+KDgqYy1tKSkmMjU1O3FbMF0mPX5wO2ZvcihkPTA7ZDxnO2QrKyl7cS5wdXNoKG4uY2hhckNvZGVBdChkKSl9cS5wdXNoKDE4OCk7cmV0dXJuIF96ZXJvUGFkZGluZ09mU2lnbmF0dXJlKHRoaXMuZG9Qcml2YXRlKG5ldyBCaWdJbnRlZ2VyKHEpKS50b1N0cmluZygxNiksdGhpcy5uLmJpdExlbmd0aCgpKX07ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0RGVjcnlwdFNpZ25hdHVyZUJJKGEsZCxjKXt2YXIgYj1uZXcgUlNBS2V5KCk7Yi5zZXRQdWJsaWMoZCxjKTt2YXIgZT1iLmRvUHVibGljKGEpO3JldHVybiBlfWZ1bmN0aW9uIF9yc2FzaWduX2dldEhleERpZ2VzdEluZm9Gcm9tU2lnKGEsYyxiKXt2YXIgZT1fcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkoYSxjLGIpO3ZhciBkPWUudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14xZiswMC8sXCJcIik7cmV0dXJuIGR9ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0QWxnTmFtZUFuZEhhc2hGcm9tSGV4RGlzZ2VzdEluZm8oZil7Zm9yKHZhciBlIGluIEtKVVIuY3J5cHRvLlV0aWwuRElHRVNUSU5GT0hFQUQpe3ZhciBkPUtKVVIuY3J5cHRvLlV0aWwuRElHRVNUSU5GT0hFQURbZV07dmFyIGI9ZC5sZW5ndGg7aWYoZi5zdWJzdHJpbmcoMCxiKT09ZCl7dmFyIGM9W2UsZi5zdWJzdHJpbmcoYildO3JldHVybiBjfX1yZXR1cm5bXX1SU0FLZXkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihmLGope2o9ai5yZXBsYWNlKF9SRV9IRVhERUNPTkxZLFwiXCIpO2o9ai5yZXBsYWNlKC9bIFxcbl0rL2csXCJcIik7dmFyIGI9cGFyc2VCaWdJbnQoaiwxNik7aWYoYi5iaXRMZW5ndGgoKT50aGlzLm4uYml0TGVuZ3RoKCkpe3JldHVybiAwfXZhciBpPXRoaXMuZG9QdWJsaWMoYik7dmFyIGU9aS50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTt2YXIgZz1fcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhlKTtpZihnLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfXZhciBkPWdbMF07dmFyIGg9Z1sxXTt2YXIgYT1mdW5jdGlvbihrKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoU3RyaW5nKGssZCl9O3ZhciBjPWEoZik7cmV0dXJuKGg9PWMpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVdpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihlLGEpe2E9YS5yZXBsYWNlKF9SRV9IRVhERUNPTkxZLFwiXCIpO2E9YS5yZXBsYWNlKC9bIFxcbl0rL2csXCJcIik7dmFyIGI9cGFyc2VCaWdJbnQoYSwxNik7aWYoYi5iaXRMZW5ndGgoKT50aGlzLm4uYml0TGVuZ3RoKCkpe3JldHVybiAwfXZhciBoPXRoaXMuZG9QdWJsaWMoYik7dmFyIGc9aC50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTt2YXIgYz1fcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhnKTtpZihjLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfXZhciBkPWNbMF07dmFyIGY9Y1sxXTtyZXR1cm4oZj09ZSl9O1JTQUtleS5wcm90b3R5cGUudmVyaWZ5UFNTPWZ1bmN0aW9uKGMsYixhLGYpe3ZhciBlPWZ1bmN0aW9uKGcpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoZyxhKX07dmFyIGQ9ZShyc3RydG9oZXgoYykpO2lmKGY9PT11bmRlZmluZWQpe2Y9LTF9cmV0dXJuIHRoaXMudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTKGQsYixhLGYpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVdpdGhNZXNzYWdlSGFzaFBTUz1mdW5jdGlvbihmLHMsbCxjKXt2YXIgaz1uZXcgQmlnSW50ZWdlcihzLDE2KTtpZihrLmJpdExlbmd0aCgpPnRoaXMubi5iaXRMZW5ndGgoKSl7cmV0dXJuIGZhbHNlfXZhciByPWZ1bmN0aW9uKGkpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoaSxsKX07dmFyIGo9aGV4dG9yc3RyKGYpO3ZhciBoPWoubGVuZ3RoO3ZhciBnPXRoaXMubi5iaXRMZW5ndGgoKS0xO3ZhciBtPU1hdGguY2VpbChnLzgpO3ZhciBxO2lmKGM9PT0tMXx8Yz09PXVuZGVmaW5lZCl7Yz1ofWVsc2V7aWYoYz09PS0yKXtjPW0taC0yfWVsc2V7aWYoYzwtMil7dGhyb3dcImludmFsaWQgc2FsdCBsZW5ndGhcIn19fWlmKG08KGgrYysyKSl7dGhyb3dcImRhdGEgdG9vIGxvbmdcIn12YXIgYT10aGlzLmRvUHVibGljKGspLnRvQnl0ZUFycmF5KCk7Zm9yKHE9MDtxPGEubGVuZ3RoO3ErPTEpe2FbcV0mPTI1NX13aGlsZShhLmxlbmd0aDxtKXthLnVuc2hpZnQoMCl9aWYoYVttLTFdIT09MTg4KXt0aHJvd1wiZW5jb2RlZCBtZXNzYWdlIGRvZXMgbm90IGVuZCBpbiAweGJjXCJ9YT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhKTt2YXIgZD1hLnN1YnN0cigwLG0taC0xKTt2YXIgZT1hLnN1YnN0cihkLmxlbmd0aCxoKTt2YXIgcD0oNjUyODA+Pig4Km0tZykpJjI1NTtpZigoZC5jaGFyQ29kZUF0KDApJnApIT09MCl7dGhyb3dcImJpdHMgYmV5b25kIGtleXNpemUgbm90IHplcm9cIn12YXIgbj1wc3NfbWdmMV9zdHIoZSxkLmxlbmd0aCxyKTt2YXIgbz1bXTtmb3IocT0wO3E8ZC5sZW5ndGg7cSs9MSl7b1txXT1kLmNoYXJDb2RlQXQocSlebi5jaGFyQ29kZUF0KHEpfW9bMF0mPX5wO3ZhciBiPW0taC1jLTI7Zm9yKHE9MDtxPGI7cSs9MSl7aWYob1txXSE9PTApe3Rocm93XCJsZWZ0bW9zdCBvY3RldHMgbm90IHplcm9cIn19aWYob1tiXSE9PTEpe3Rocm93XCIweDAxIG1hcmtlciBub3QgZm91bmRcIn1yZXR1cm4gZT09PWhleHRvcnN0cihyKHJzdHJ0b2hleChcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIitqK1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLG8uc2xpY2UoLWMpKSkpKX07UlNBS2V5LlNBTFRfTEVOX0hMRU49LTE7UlNBS2V5LlNBTFRfTEVOX01BWD0tMjtSU0FLZXkuU0FMVF9MRU5fUkVDT1ZFUj0tMjtcbmZ1bmN0aW9uIFg1MDkoKXt2YXIgaz1BU04xSEVYLGo9ay5nZXRDaGlsZElkeCxoPWsuZ2V0VixiPWsuZ2V0VExWLGY9ay5nZXRWYnlMaXN0LGM9ay5nZXRUTFZieUxpc3QsZz1rLmdldElkeGJ5TGlzdCxkPWsuZ2V0VmlkeCxpPWsub2lkbmFtZSxhPVg1MDksZT1wZW10b2hleDt0aGlzLmhleD1udWxsO3RoaXMudmVyc2lvbj0wO3RoaXMuZm9mZnNldD0wO3RoaXMuYUV4dEluZm89bnVsbDt0aGlzLmdldFZlcnNpb249ZnVuY3Rpb24oKXtpZih0aGlzLmhleD09PW51bGx8fHRoaXMudmVyc2lvbiE9PTApe3JldHVybiB0aGlzLnZlcnNpb259aWYoYyh0aGlzLmhleCwwLFswLDBdKSE9PVwiYTAwMzAyMDEwMlwiKXt0aGlzLnZlcnNpb249MTt0aGlzLmZvZmZzZXQ9LTE7cmV0dXJuIDF9dGhpcy52ZXJzaW9uPTM7cmV0dXJuIDN9O3RoaXMuZ2V0U2VyaWFsTnVtYmVySGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcy5oZXgsMCxbMCwxK3RoaXMuZm9mZnNldF0sXCIwMlwiKX07dGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZD1mdW5jdGlvbigpe3JldHVybiBpKGYodGhpcy5oZXgsMCxbMCwyK3RoaXMuZm9mZnNldCwwXSxcIjA2XCIpKX07dGhpcy5nZXRJc3N1ZXJIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLmhleCwwLFswLDMrdGhpcy5mb2Zmc2V0XSxcIjMwXCIpfTt0aGlzLmdldElzc3VlclN0cmluZz1mdW5jdGlvbigpe3JldHVybiBhLmhleDJkbih0aGlzLmdldElzc3VlckhleCgpKX07dGhpcy5nZXRTdWJqZWN0SGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcy5oZXgsMCxbMCw1K3RoaXMuZm9mZnNldF0sXCIzMFwiKX07dGhpcy5nZXRTdWJqZWN0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGEuaGV4MmRuKHRoaXMuZ2V0U3ViamVjdEhleCgpKX07dGhpcy5nZXROb3RCZWZvcmU9ZnVuY3Rpb24oKXt2YXIgbD1mKHRoaXMuaGV4LDAsWzAsNCt0aGlzLmZvZmZzZXQsMF0pO2w9bC5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIik7bD1kZWNvZGVVUklDb21wb25lbnQobCk7cmV0dXJuIGx9O3RoaXMuZ2V0Tm90QWZ0ZXI9ZnVuY3Rpb24oKXt2YXIgbD1mKHRoaXMuaGV4LDAsWzAsNCt0aGlzLmZvZmZzZXQsMV0pO2w9bC5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIik7bD1kZWNvZGVVUklDb21wb25lbnQobCk7cmV0dXJuIGx9O3RoaXMuZ2V0UHVibGljS2V5SGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGsuZ2V0VExWYnlMaXN0KHRoaXMuaGV4LDAsWzAsNit0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5SWR4PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5oZXgsMCxbMCw2K3RoaXMuZm9mZnNldF0sXCIzMFwiKX07dGhpcy5nZXRQdWJsaWNLZXlDb250ZW50SWR4PWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5nZXRQdWJsaWNLZXlJZHgoKTtyZXR1cm4gZyh0aGlzLmhleCxsLFsxLDBdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIEtFWVVUSUwuZ2V0S2V5KHRoaXMuZ2V0UHVibGljS2V5SGV4KCksbnVsbCxcInBrY3M4cHViXCIpfTt0aGlzLmdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gaShmKHRoaXMuaGV4LDAsWzEsMF0sXCIwNlwiKSl9O3RoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzLmhleCwwLFsyXSxcIjAzXCIsdHJ1ZSl9O3RoaXMudmVyaWZ5U2lnbmF0dXJlPWZ1bmN0aW9uKG4pe3ZhciBvPXRoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtTmFtZSgpO3ZhciBsPXRoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXgoKTt2YXIgbT1jKHRoaXMuaGV4LDAsWzBdLFwiMzBcIik7dmFyIHA9bmV3IEtKVVIuY3J5cHRvLlNpZ25hdHVyZSh7YWxnOm99KTtwLmluaXQobik7cC51cGRhdGVIZXgobSk7cmV0dXJuIHAudmVyaWZ5KGwpfTt0aGlzLnBhcnNlRXh0PWZ1bmN0aW9uKCl7aWYodGhpcy52ZXJzaW9uIT09Myl7cmV0dXJuIC0xfXZhciBwPWcodGhpcy5oZXgsMCxbMCw3LDBdLFwiMzBcIik7dmFyIG09aih0aGlzLmhleCxwKTt0aGlzLmFFeHRJbmZvPW5ldyBBcnJheSgpO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXt2YXIgcT17fTtxLmNyaXRpY2FsPWZhbHNlO3ZhciBsPWoodGhpcy5oZXgsbVtuXSk7dmFyIHI9MDtpZihsLmxlbmd0aD09PTMpe3EuY3JpdGljYWw9dHJ1ZTtyPTF9cS5vaWQ9ay5oZXh0b29pZHN0cihmKHRoaXMuaGV4LG1bbl0sWzBdLFwiMDZcIikpO3ZhciBvPWcodGhpcy5oZXgsbVtuXSxbMStyXSk7cS52aWR4PWQodGhpcy5oZXgsbyk7dGhpcy5hRXh0SW5mby5wdXNoKHEpfX07dGhpcy5nZXRFeHRJbmZvPWZ1bmN0aW9uKG4pe3ZhciBsPXRoaXMuYUV4dEluZm87dmFyIG89bjtpZighbi5tYXRjaCgvXlswLTkuXSskLykpe289S0pVUi5hc24xLng1MDkuT0lELm5hbWUyb2lkKG4pfWlmKG89PT1cIlwiKXtyZXR1cm4gdW5kZWZpbmVkfWZvcih2YXIgbT0wO208bC5sZW5ndGg7bSsrKXtpZihsW21dLm9pZD09PW8pe3JldHVybiBsW21dfX1yZXR1cm4gdW5kZWZpbmVkfTt0aGlzLmdldEV4dEJhc2ljQ29uc3RyYWludHM9ZnVuY3Rpb24oKXt2YXIgbj10aGlzLmdldEV4dEluZm8oXCJiYXNpY0NvbnN0cmFpbnRzXCIpO2lmKG49PT11bmRlZmluZWQpe3JldHVybiBufXZhciBsPWgodGhpcy5oZXgsbi52aWR4KTtpZihsPT09XCJcIil7cmV0dXJue319aWYobD09PVwiMDEwMWZmXCIpe3JldHVybntjQTp0cnVlfX1pZihsLnN1YnN0cigwLDgpPT09XCIwMTAxZmYwMlwiKXt2YXIgbz1oKGwsNik7dmFyIG09cGFyc2VJbnQobywxNik7cmV0dXJue2NBOnRydWUscGF0aExlbjptfX10aHJvd1wiYmFzaWNDb25zdHJhaW50cyBwYXJzZSBlcnJvclwifTt0aGlzLmdldEV4dEtleVVzYWdlQmluPWZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRFeHRJbmZvKFwia2V5VXNhZ2VcIik7aWYobz09PXVuZGVmaW5lZCl7cmV0dXJuXCJcIn12YXIgbT1oKHRoaXMuaGV4LG8udmlkeCk7aWYobS5sZW5ndGglMiE9MHx8bS5sZW5ndGg8PTIpe3Rocm93XCJtYWxmb3JtZWQga2V5IHVzYWdlIHZhbHVlXCJ9dmFyIGw9cGFyc2VJbnQobS5zdWJzdHIoMCwyKSk7dmFyIG49cGFyc2VJbnQobS5zdWJzdHIoMiksMTYpLnRvU3RyaW5nKDIpO3JldHVybiBuLnN1YnN0cigwLG4ubGVuZ3RoLWwpfTt0aGlzLmdldEV4dEtleVVzYWdlU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5nZXRFeHRLZXlVc2FnZUJpbigpO3ZhciBsPW5ldyBBcnJheSgpO2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKXtpZihuLnN1YnN0cihtLDEpPT1cIjFcIil7bC5wdXNoKFg1MDkuS0VZVVNBR0VfTkFNRVttXSl9fXJldHVybiBsLmpvaW4oXCIsXCIpfTt0aGlzLmdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyPWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5nZXRFeHRJbmZvKFwic3ViamVjdEtleUlkZW50aWZpZXJcIik7aWYobD09PXVuZGVmaW5lZCl7cmV0dXJuIGx9cmV0dXJuIGgodGhpcy5oZXgsbC52aWR4KX07dGhpcy5nZXRFeHRBdXRob3JpdHlLZXlJZGVudGlmaWVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5nZXRFeHRJbmZvKFwiYXV0aG9yaXR5S2V5SWRlbnRpZmllclwiKTtpZihwPT09dW5kZWZpbmVkKXtyZXR1cm4gcH12YXIgbD17fTt2YXIgbz1iKHRoaXMuaGV4LHAudmlkeCk7dmFyIG09aihvLDApO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXtpZihvLnN1YnN0cihtW25dLDIpPT09XCI4MFwiKXtsLmtpZD1oKG8sbVtuXSl9fXJldHVybiBsfTt0aGlzLmdldEV4dEV4dEtleVVzYWdlTmFtZT1mdW5jdGlvbigpe3ZhciBwPXRoaXMuZ2V0RXh0SW5mbyhcImV4dEtleVVzYWdlXCIpO2lmKHA9PT11bmRlZmluZWQpe3JldHVybiBwfXZhciBsPW5ldyBBcnJheSgpO3ZhciBvPWIodGhpcy5oZXgscC52aWR4KTtpZihvPT09XCJcIil7cmV0dXJuIGx9dmFyIG09aihvLDApO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXtsLnB1c2goaShoKG8sbVtuXSkpKX1yZXR1cm4gbH07dGhpcy5nZXRFeHRTdWJqZWN0QWx0TmFtZT1mdW5jdGlvbigpe3ZhciBtPXRoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUyKCk7dmFyIGw9bmV3IEFycmF5KCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe2lmKG1bbl1bMF09PT1cIkROU1wiKXtsLnB1c2gobVtuXVsxXSl9fXJldHVybiBsfTt0aGlzLmdldEV4dFN1YmplY3RBbHROYW1lMj1mdW5jdGlvbigpe3ZhciBwLHMscjt2YXIgcT10aGlzLmdldEV4dEluZm8oXCJzdWJqZWN0QWx0TmFtZVwiKTtpZihxPT09dW5kZWZpbmVkKXtyZXR1cm4gcX12YXIgbD1uZXcgQXJyYXkoKTt2YXIgbz1iKHRoaXMuaGV4LHEudmlkeCk7dmFyIG09aihvLDApO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXtyPW8uc3Vic3RyKG1bbl0sMik7cD1oKG8sbVtuXSk7aWYocj09PVwiODFcIil7cz1oZXh0b3V0ZjgocCk7bC5wdXNoKFtcIk1BSUxcIixzXSl9aWYocj09PVwiODJcIil7cz1oZXh0b3V0ZjgocCk7bC5wdXNoKFtcIkROU1wiLHNdKX1pZihyPT09XCI4NFwiKXtzPVg1MDkuaGV4MmRuKHAsMCk7bC5wdXNoKFtcIkROXCIsc10pfWlmKHI9PT1cIjg2XCIpe3M9aGV4dG91dGY4KHApO2wucHVzaChbXCJVUklcIixzXSl9aWYocj09PVwiODdcIil7cz1oZXh0b2lwKHApO2wucHVzaChbXCJJUFwiLHNdKX19cmV0dXJuIGx9O3RoaXMuZ2V0RXh0Q1JMRGlzdHJpYnV0aW9uUG9pbnRzVVJJPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5nZXRFeHRJbmZvKFwiY1JMRGlzdHJpYnV0aW9uUG9pbnRzXCIpO2lmKHE9PT11bmRlZmluZWQpe3JldHVybiBxfXZhciBsPW5ldyBBcnJheSgpO3ZhciBtPWoodGhpcy5oZXgscS52aWR4KTtmb3IodmFyIG89MDtvPG0ubGVuZ3RoO28rKyl7dHJ5e3ZhciByPWYodGhpcy5oZXgsbVtvXSxbMCwwLDBdLFwiODZcIik7dmFyIHA9aGV4dG91dGY4KHIpO2wucHVzaChwKX1jYXRjaChuKXt9fXJldHVybiBsfTt0aGlzLmdldEV4dEFJQUluZm89ZnVuY3Rpb24oKXt2YXIgcD10aGlzLmdldEV4dEluZm8oXCJhdXRob3JpdHlJbmZvQWNjZXNzXCIpO2lmKHA9PT11bmRlZmluZWQpe3JldHVybiBwfXZhciBsPXtvY3NwOltdLGNhaXNzdWVyOltdfTt2YXIgbT1qKHRoaXMuaGV4LHAudmlkeCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe3ZhciBxPWYodGhpcy5oZXgsbVtuXSxbMF0sXCIwNlwiKTt2YXIgbz1mKHRoaXMuaGV4LG1bbl0sWzFdLFwiODZcIik7aWYocT09PVwiMmIwNjAxMDUwNTA3MzAwMVwiKXtsLm9jc3AucHVzaChoZXh0b3V0ZjgobykpfWlmKHE9PT1cIjJiMDYwMTA1MDUwNzMwMDJcIil7bC5jYWlzc3Vlci5wdXNoKGhleHRvdXRmOChvKSl9fXJldHVybiBsfTt0aGlzLmdldEV4dENlcnRpZmljYXRlUG9saWNpZXM9ZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEV4dEluZm8oXCJjZXJ0aWZpY2F0ZVBvbGljaWVzXCIpO2lmKG89PT11bmRlZmluZWQpe3JldHVybiBvfXZhciBsPWIodGhpcy5oZXgsby52aWR4KTt2YXIgdT1bXTt2YXIgcz1qKGwsMCk7Zm9yKHZhciByPTA7cjxzLmxlbmd0aDtyKyspe3ZhciB0PXt9O3ZhciBuPWoobCxzW3JdKTt0LmlkPWkoaChsLG5bMF0pKTtpZihuLmxlbmd0aD09PTIpe3ZhciBtPWoobCxuWzFdKTtmb3IodmFyIHE9MDtxPG0ubGVuZ3RoO3ErKyl7dmFyIHA9ZihsLG1bcV0sWzBdLFwiMDZcIik7aWYocD09PVwiMmIwNjAxMDUwNTA3MDIwMVwiKXt0LmNwcz1oZXh0b3V0ZjgoZihsLG1bcV0sWzFdKSl9ZWxzZXtpZihwPT09XCIyYjA2MDEwNTA1MDcwMjAyXCIpe3QudW5vdGljZT1oZXh0b3V0ZjgoZihsLG1bcV0sWzEsMF0pKX19fX11LnB1c2godCl9cmV0dXJuIHV9O3RoaXMucmVhZENlcnRQRU09ZnVuY3Rpb24obCl7dGhpcy5yZWFkQ2VydEhleChlKGwpKX07dGhpcy5yZWFkQ2VydEhleD1mdW5jdGlvbihsKXt0aGlzLmhleD1sO3RoaXMuZ2V0VmVyc2lvbigpO3RyeXtnKHRoaXMuaGV4LDAsWzAsN10sXCJhM1wiKTt0aGlzLnBhcnNlRXh0KCl9Y2F0Y2gobSl7fX07dGhpcy5nZXRJbmZvPWZ1bmN0aW9uKCl7dmFyIG09WDUwOTt2YXIgQix1LHo7Qj1cIkJhc2ljIEZpZWxkc1xcblwiO0IrPVwiICBzZXJpYWwgbnVtYmVyOiBcIit0aGlzLmdldFNlcmlhbE51bWJlckhleCgpK1wiXFxuXCI7Qis9XCIgIHNpZ25hdHVyZSBhbGdvcml0aG06IFwiK3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQoKStcIlxcblwiO0IrPVwiICBpc3N1ZXI6IFwiK3RoaXMuZ2V0SXNzdWVyU3RyaW5nKCkrXCJcXG5cIjtCKz1cIiAgbm90QmVmb3JlOiBcIit0aGlzLmdldE5vdEJlZm9yZSgpK1wiXFxuXCI7Qis9XCIgIG5vdEFmdGVyOiBcIit0aGlzLmdldE5vdEFmdGVyKCkrXCJcXG5cIjtCKz1cIiAgc3ViamVjdDogXCIrdGhpcy5nZXRTdWJqZWN0U3RyaW5nKCkrXCJcXG5cIjtCKz1cIiAgc3ViamVjdCBwdWJsaWMga2V5IGluZm86IFxcblwiO3U9dGhpcy5nZXRQdWJsaWNLZXkoKTtCKz1cIiAgICBrZXkgYWxnb3JpdGhtOiBcIit1LnR5cGUrXCJcXG5cIjtpZih1LnR5cGU9PT1cIlJTQVwiKXtCKz1cIiAgICBuPVwiK2hleHRvcG9zaGV4KHUubi50b1N0cmluZygxNikpLnN1YnN0cigwLDE2KStcIi4uLlxcblwiO0IrPVwiICAgIGU9XCIraGV4dG9wb3NoZXgodS5lLnRvU3RyaW5nKDE2KSkrXCJcXG5cIn16PXRoaXMuYUV4dEluZm87aWYoeiE9PXVuZGVmaW5lZCYmeiE9PW51bGwpe0IrPVwiWDUwOXYzIEV4dGVuc2lvbnM6XFxuXCI7Zm9yKHZhciByPTA7cjx6Lmxlbmd0aDtyKyspe3ZhciBuPXpbcl07dmFyIEE9S0pVUi5hc24xLng1MDkuT0lELm9pZDJuYW1lKG4ub2lkKTtpZihBPT09XCJcIil7QT1uLm9pZH12YXIgeD1cIlwiO2lmKG4uY3JpdGljYWw9PT10cnVlKXt4PVwiQ1JJVElDQUxcIn1CKz1cIiAgXCIrQStcIiBcIit4K1wiOlxcblwiO2lmKEE9PT1cImJhc2ljQ29uc3RyYWludHNcIil7dmFyIHY9dGhpcy5nZXRFeHRCYXNpY0NvbnN0cmFpbnRzKCk7aWYodi5jQT09PXVuZGVmaW5lZCl7Qis9XCIgICAge31cXG5cIn1lbHNle0IrPVwiICAgIGNBPXRydWVcIjtpZih2LnBhdGhMZW4hPT11bmRlZmluZWQpe0IrPVwiLCBwYXRoTGVuPVwiK3YucGF0aExlbn1CKz1cIlxcblwifX1lbHNle2lmKEE9PT1cImtleVVzYWdlXCIpe0IrPVwiICAgIFwiK3RoaXMuZ2V0RXh0S2V5VXNhZ2VTdHJpbmcoKStcIlxcblwifWVsc2V7aWYoQT09PVwic3ViamVjdEtleUlkZW50aWZpZXJcIil7Qis9XCIgICAgXCIrdGhpcy5nZXRFeHRTdWJqZWN0S2V5SWRlbnRpZmllcigpK1wiXFxuXCJ9ZWxzZXtpZihBPT09XCJhdXRob3JpdHlLZXlJZGVudGlmaWVyXCIpe3ZhciBsPXRoaXMuZ2V0RXh0QXV0aG9yaXR5S2V5SWRlbnRpZmllcigpO2lmKGwua2lkIT09dW5kZWZpbmVkKXtCKz1cIiAgICBraWQ9XCIrbC5raWQrXCJcXG5cIn19ZWxzZXtpZihBPT09XCJleHRLZXlVc2FnZVwiKXt2YXIgdz10aGlzLmdldEV4dEV4dEtleVVzYWdlTmFtZSgpO0IrPVwiICAgIFwiK3cuam9pbihcIiwgXCIpK1wiXFxuXCJ9ZWxzZXtpZihBPT09XCJzdWJqZWN0QWx0TmFtZVwiKXt2YXIgdD10aGlzLmdldEV4dFN1YmplY3RBbHROYW1lMigpO0IrPVwiICAgIFwiK3QrXCJcXG5cIn1lbHNle2lmKEE9PT1cImNSTERpc3RyaWJ1dGlvblBvaW50c1wiKXt2YXIgeT10aGlzLmdldEV4dENSTERpc3RyaWJ1dGlvblBvaW50c1VSSSgpO0IrPVwiICAgIFwiK3krXCJcXG5cIn1lbHNle2lmKEE9PT1cImF1dGhvcml0eUluZm9BY2Nlc3NcIil7dmFyIHA9dGhpcy5nZXRFeHRBSUFJbmZvKCk7aWYocC5vY3NwIT09dW5kZWZpbmVkKXtCKz1cIiAgICBvY3NwOiBcIitwLm9jc3Auam9pbihcIixcIikrXCJcXG5cIn1pZihwLmNhaXNzdWVyIT09dW5kZWZpbmVkKXtCKz1cIiAgICBjYWlzc3VlcjogXCIrcC5jYWlzc3Vlci5qb2luKFwiLFwiKStcIlxcblwifX1lbHNle2lmKEE9PT1cImNlcnRpZmljYXRlUG9saWNpZXNcIil7dmFyIG89dGhpcy5nZXRFeHRDZXJ0aWZpY2F0ZVBvbGljaWVzKCk7Zm9yKHZhciBxPTA7cTxvLmxlbmd0aDtxKyspe2lmKG9bcV0uaWQhPT11bmRlZmluZWQpe0IrPVwiICAgIHBvbGljeSBvaWQ6IFwiK29bcV0uaWQrXCJcXG5cIn1pZihvW3FdLmNwcyE9PXVuZGVmaW5lZCl7Qis9XCIgICAgY3BzOiBcIitvW3FdLmNwcytcIlxcblwifX19fX19fX19fX19fUIrPVwic2lnbmF0dXJlIGFsZ29yaXRobTogXCIrdGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1OYW1lKCkrXCJcXG5cIjtCKz1cInNpZ25hdHVyZTogXCIrdGhpcy5nZXRTaWduYXR1cmVWYWx1ZUhleCgpLnN1YnN0cigwLDE2KStcIi4uLlxcblwiO3JldHVybiBCfX1YNTA5LmhleDJkbj1mdW5jdGlvbihmLGIpe2lmKGI9PT11bmRlZmluZWQpe2I9MH1pZihmLnN1YnN0cihiLDIpIT09XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIEROXCJ9dmFyIGM9bmV3IEFycmF5KCk7dmFyIGQ9QVNOMUhFWC5nZXRDaGlsZElkeChmLGIpO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtjLnB1c2goWDUwOS5oZXgycmRuKGYsZFtlXSkpfWM9Yy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShcIi9cIixcIlxcXFwvXCIpfSk7cmV0dXJuXCIvXCIrYy5qb2luKFwiL1wiKX07WDUwOS5oZXgycmRuPWZ1bmN0aW9uKGYsYil7aWYoYj09PXVuZGVmaW5lZCl7Yj0wfWlmKGYuc3Vic3RyKGIsMikhPT1cIjMxXCIpe3Rocm93XCJtYWxmb3JtZWQgUkROXCJ9dmFyIGM9bmV3IEFycmF5KCk7dmFyIGQ9QVNOMUhFWC5nZXRDaGlsZElkeChmLGIpO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtjLnB1c2goWDUwOS5oZXgyYXR0clR5cGVWYWx1ZShmLGRbZV0pKX1jPWMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoXCIrXCIsXCJcXFxcK1wiKX0pO3JldHVybiBjLmpvaW4oXCIrXCIpfTtYNTA5LmhleDJhdHRyVHlwZVZhbHVlPWZ1bmN0aW9uKGQsaSl7dmFyIGo9QVNOMUhFWDt2YXIgaD1qLmdldFY7aWYoaT09PXVuZGVmaW5lZCl7aT0wfWlmKGQuc3Vic3RyKGksMikhPT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgYXR0cmlidXRlIHR5cGUgYW5kIHZhbHVlXCJ9dmFyIGc9ai5nZXRDaGlsZElkeChkLGkpO2lmKGcubGVuZ3RoIT09Mnx8ZC5zdWJzdHIoZ1swXSwyKSE9PVwiMDZcIil7XCJtYWxmb3JtZWQgYXR0cmlidXRlIHR5cGUgYW5kIHZhbHVlXCJ9dmFyIGI9aChkLGdbMF0pO3ZhciBmPUtKVVIuYXNuMS5BU04xVXRpbC5vaWRIZXhUb0ludChiKTt2YXIgZT1LSlVSLmFzbjEueDUwOS5PSUQub2lkMmF0eXBlKGYpO3ZhciBhPWgoZCxnWzFdKTt2YXIgYz1oZXh0b3JzdHIoYSk7cmV0dXJuIGUrXCI9XCIrY307WDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydEhleD1mdW5jdGlvbihiKXt2YXIgYT1uZXcgWDUwOSgpO2EucmVhZENlcnRIZXgoYik7cmV0dXJuIGEuZ2V0UHVibGljS2V5KCl9O1g1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRQRU09ZnVuY3Rpb24oYil7dmFyIGE9bmV3IFg1MDkoKTthLnJlYWRDZXJ0UEVNKGIpO3JldHVybiBhLmdldFB1YmxpY0tleSgpfTtYNTA5LmdldFB1YmxpY0tleUluZm9Qcm9wT2ZDZXJ0UEVNPWZ1bmN0aW9uKGMpe3ZhciBlPUFTTjFIRVg7dmFyIGc9ZS5nZXRWYnlMaXN0O3ZhciBiPXt9O3ZhciBhLGYsZDtiLmFsZ3BhcmFtPW51bGw7YT1uZXcgWDUwOSgpO2EucmVhZENlcnRQRU0oYyk7Zj1hLmdldFB1YmxpY0tleUhleCgpO2Iua2V5aGV4PWcoZiwwLFsxXSxcIjAzXCIpLnN1YnN0cigyKTtiLmFsZ29pZD1nKGYsMCxbMCwwXSxcIjA2XCIpO2lmKGIuYWxnb2lkPT09XCIyYTg2NDhjZTNkMDIwMVwiKXtiLmFsZ3BhcmFtPWcoZiwwLFswLDFdLFwiMDZcIil9cmV0dXJuIGJ9O1g1MDkuS0VZVVNBR0VfTkFNRT1bXCJkaWdpdGFsU2lnbmF0dXJlXCIsXCJub25SZXB1ZGlhdGlvblwiLFwia2V5RW5jaXBoZXJtZW50XCIsXCJkYXRhRW5jaXBoZXJtZW50XCIsXCJrZXlBZ3JlZW1lbnRcIixcImtleUNlcnRTaWduXCIsXCJjUkxTaWduXCIsXCJlbmNpcGhlck9ubHlcIixcImRlY2lwaGVyT25seVwiXTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5qd3M9PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmp3cyl7S0pVUi5qd3M9e319S0pVUi5qd3MuSldTPWZ1bmN0aW9uKCl7dmFyIGI9S0pVUixhPWIuandzLkpXUyxjPWEuaXNTYWZlSlNPTlN0cmluZzt0aGlzLnBhcnNlSldTPWZ1bmN0aW9uKGcsail7aWYoKHRoaXMucGFyc2VkSldTIT09dW5kZWZpbmVkKSYmKGp8fCh0aGlzLnBhcnNlZEpXUy5zaWd2YWxIIT09dW5kZWZpbmVkKSkpe3JldHVybn12YXIgaT1nLm1hdGNoKC9eKFteLl0rKVxcLihbXi5dKylcXC4oW14uXSspJC8pO2lmKGk9PW51bGwpe3Rocm93XCJKV1Mgc2lnbmF0dXJlIGlzIG5vdCBhIGZvcm0gb2YgJ0hlYWQuUGF5bG9hZC5TaWdWYWx1ZScuXCJ9dmFyIGs9aVsxXTt2YXIgZT1pWzJdO3ZhciBsPWlbM107dmFyIG49aytcIi5cIitlO3RoaXMucGFyc2VkSldTPXt9O3RoaXMucGFyc2VkSldTLmhlYWRCNjRVPWs7dGhpcy5wYXJzZWRKV1MucGF5bG9hZEI2NFU9ZTt0aGlzLnBhcnNlZEpXUy5zaWd2YWxCNjRVPWw7dGhpcy5wYXJzZWRKV1Muc2k9bjtpZighail7dmFyIGg9YjY0dXRvaGV4KGwpO3ZhciBmPXBhcnNlQmlnSW50KGgsMTYpO3RoaXMucGFyc2VkSldTLnNpZ3ZhbEg9aDt0aGlzLnBhcnNlZEpXUy5zaWd2YWxCST1mfXZhciBkPWI2NHV0b3V0Zjgoayk7dmFyIG09YjY0dXRvdXRmOChlKTt0aGlzLnBhcnNlZEpXUy5oZWFkUz1kO3RoaXMucGFyc2VkSldTLnBheWxvYWRTPW07aWYoIWMoZCx0aGlzLnBhcnNlZEpXUyxcImhlYWRQXCIpKXt0aHJvd1wibWFsZm9ybWVkIEpTT04gc3RyaW5nIGZvciBKV1MgSGVhZDogXCIrZH19fTtLSlVSLmp3cy5KV1Muc2lnbj1mdW5jdGlvbihpLHYseSx6LGEpe3ZhciB3PUtKVVIsbT13Lmp3cyxxPW0uSldTLGc9cS5yZWFkU2FmZUpTT05TdHJpbmcscD1xLmlzU2FmZUpTT05TdHJpbmcsZD13LmNyeXB0byxrPWQuRUNEU0Esbz1kLk1hYyxjPWQuU2lnbmF0dXJlLHQ9SlNPTjt2YXIgcyxqLG47aWYodHlwZW9mIHYhPVwic3RyaW5nXCImJnR5cGVvZiB2IT1cIm9iamVjdFwiKXt0aHJvd1wic3BIZWFkZXIgbXVzdCBiZSBKU09OIHN0cmluZyBvciBvYmplY3Q6IFwiK3Z9aWYodHlwZW9mIHY9PVwib2JqZWN0XCIpe2o9djtzPXQuc3RyaW5naWZ5KGopfWlmKHR5cGVvZiB2PT1cInN0cmluZ1wiKXtzPXY7aWYoIXAocykpe3Rocm93XCJKV1MgSGVhZCBpcyBub3Qgc2FmZSBKU09OIHN0cmluZzogXCIrc31qPWcocyl9bj15O2lmKHR5cGVvZiB5PT1cIm9iamVjdFwiKXtuPXQuc3RyaW5naWZ5KHkpfWlmKChpPT1cIlwifHxpPT1udWxsKSYmai5hbGchPT11bmRlZmluZWQpe2k9ai5hbGd9aWYoKGkhPVwiXCImJmkhPW51bGwpJiZqLmFsZz09PXVuZGVmaW5lZCl7ai5hbGc9aTtzPXQuc3RyaW5naWZ5KGopfWlmKGkhPT1qLmFsZyl7dGhyb3dcImFsZyBhbmQgc0hlYWRlci5hbGcgZG9lc24ndCBtYXRjaDogXCIraStcIiE9XCIrai5hbGd9dmFyIHI9bnVsbDtpZihxLmp3c2FsZzJzaWdhbGdbaV09PT11bmRlZmluZWQpe3Rocm93XCJ1bnN1cHBvcnRlZCBhbGcgbmFtZTogXCIraX1lbHNle3I9cS5qd3NhbGcyc2lnYWxnW2ldfXZhciBlPXV0Zjh0b2I2NHUocyk7dmFyIGw9dXRmOHRvYjY0dShuKTt2YXIgYj1lK1wiLlwiK2w7dmFyIHg9XCJcIjtpZihyLnN1YnN0cigwLDQpPT1cIkhtYWNcIil7aWYoej09PXVuZGVmaW5lZCl7dGhyb3dcIm1hYyBrZXkgc2hhbGwgYmUgc3BlY2lmaWVkIGZvciBIUyogYWxnXCJ9dmFyIGg9bmV3IG8oe2FsZzpyLHByb3Y6XCJjcnlwdG9qc1wiLHBhc3M6en0pO2gudXBkYXRlU3RyaW5nKGIpO3g9aC5kb0ZpbmFsKCl9ZWxzZXtpZihyLmluZGV4T2YoXCJ3aXRoRUNEU0FcIikhPS0xKXt2YXIgZj1uZXcgYyh7YWxnOnJ9KTtmLmluaXQoeixhKTtmLnVwZGF0ZVN0cmluZyhiKTtoQVNOMVNpZz1mLnNpZ24oKTt4PUtKVVIuY3J5cHRvLkVDRFNBLmFzbjFTaWdUb0NvbmNhdFNpZyhoQVNOMVNpZyl9ZWxzZXtpZihyIT1cIm5vbmVcIil7dmFyIGY9bmV3IGMoe2FsZzpyfSk7Zi5pbml0KHosYSk7Zi51cGRhdGVTdHJpbmcoYik7eD1mLnNpZ24oKX19fXZhciB1PWhleHRvYjY0dSh4KTtyZXR1cm4gYitcIi5cIit1fTtLSlVSLmp3cy5KV1MudmVyaWZ5PWZ1bmN0aW9uKHcsQixuKXt2YXIgeD1LSlVSLHE9eC5qd3MsdD1xLkpXUyxpPXQucmVhZFNhZmVKU09OU3RyaW5nLGU9eC5jcnlwdG8scD1lLkVDRFNBLHM9ZS5NYWMsZD1lLlNpZ25hdHVyZSxtO2lmKHR5cGVvZiBSU0FLZXkhPT11bmRlZmluZWQpe209UlNBS2V5fXZhciB5PXcuc3BsaXQoXCIuXCIpO2lmKHkubGVuZ3RoIT09Myl7cmV0dXJuIGZhbHNlfXZhciBmPXlbMF07dmFyIHI9eVsxXTt2YXIgYz1mK1wiLlwiK3I7dmFyIEE9YjY0dXRvaGV4KHlbMl0pO3ZhciBsPWkoYjY0dXRvdXRmOCh5WzBdKSk7dmFyIGs9bnVsbDt2YXIgej1udWxsO2lmKGwuYWxnPT09dW5kZWZpbmVkKXt0aHJvd1wiYWxnb3JpdGhtIG5vdCBzcGVjaWZpZWQgaW4gaGVhZGVyXCJ9ZWxzZXtrPWwuYWxnO3o9ay5zdWJzdHIoMCwyKX1pZihuIT1udWxsJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobik9PT1cIltvYmplY3QgQXJyYXldXCImJm4ubGVuZ3RoPjApe3ZhciBiPVwiOlwiK24uam9pbihcIjpcIikrXCI6XCI7aWYoYi5pbmRleE9mKFwiOlwiK2srXCI6XCIpPT0tMSl7dGhyb3dcImFsZ29yaXRobSAnXCIraytcIicgbm90IGFjY2VwdGVkIGluIHRoZSBsaXN0XCJ9fWlmKGshPVwibm9uZVwiJiZCPT09bnVsbCl7dGhyb3dcImtleSBzaGFsbCBiZSBzcGVjaWZpZWQgdG8gdmVyaWZ5LlwifWlmKHR5cGVvZiBCPT1cInN0cmluZ1wiJiZCLmluZGV4T2YoXCItLS0tLUJFR0lOIFwiKSE9LTEpe0I9S0VZVVRJTC5nZXRLZXkoQil9aWYoej09XCJSU1wifHx6PT1cIlBTXCIpe2lmKCEoQiBpbnN0YW5jZW9mIG0pKXt0aHJvd1wia2V5IHNoYWxsIGJlIGEgUlNBS2V5IG9iaiBmb3IgUlMqIGFuZCBQUyogYWxnc1wifX1pZih6PT1cIkVTXCIpe2lmKCEoQiBpbnN0YW5jZW9mIHApKXt0aHJvd1wia2V5IHNoYWxsIGJlIGEgRUNEU0Egb2JqIGZvciBFUyogYWxnc1wifX1pZihrPT1cIm5vbmVcIil7fXZhciB1PW51bGw7aWYodC5qd3NhbGcyc2lnYWxnW2wuYWxnXT09PXVuZGVmaW5lZCl7dGhyb3dcInVuc3VwcG9ydGVkIGFsZyBuYW1lOiBcIitrfWVsc2V7dT10Lmp3c2FsZzJzaWdhbGdba119aWYodT09XCJub25lXCIpe3Rocm93XCJub3Qgc3VwcG9ydGVkXCJ9ZWxzZXtpZih1LnN1YnN0cigwLDQpPT1cIkhtYWNcIil7dmFyIG89bnVsbDtpZihCPT09dW5kZWZpbmVkKXt0aHJvd1wiaGV4YWRlY2ltYWwga2V5IHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgSE1BQ1wifXZhciBqPW5ldyBzKHthbGc6dSxwYXNzOkJ9KTtqLnVwZGF0ZVN0cmluZyhjKTtvPWouZG9GaW5hbCgpO3JldHVybiBBPT1vfWVsc2V7aWYodS5pbmRleE9mKFwid2l0aEVDRFNBXCIpIT0tMSl7dmFyIGg9bnVsbDt0cnl7aD1wLmNvbmNhdFNpZ1RvQVNOMVNpZyhBKX1jYXRjaCh2KXtyZXR1cm4gZmFsc2V9dmFyIGc9bmV3IGQoe2FsZzp1fSk7Zy5pbml0KEIpO2cudXBkYXRlU3RyaW5nKGMpO3JldHVybiBnLnZlcmlmeShoKX1lbHNle3ZhciBnPW5ldyBkKHthbGc6dX0pO2cuaW5pdChCKTtnLnVwZGF0ZVN0cmluZyhjKTtyZXR1cm4gZy52ZXJpZnkoQSl9fX19O0tKVVIuandzLkpXUy5wYXJzZT1mdW5jdGlvbihnKXt2YXIgYz1nLnNwbGl0KFwiLlwiKTt2YXIgYj17fTt2YXIgZixlLGQ7aWYoYy5sZW5ndGghPTImJmMubGVuZ3RoIT0zKXt0aHJvd1wibWFsZm9ybWVkIHNKV1M6IHdyb25nIG51bWJlciBvZiAnLicgc3BsaXR0ZWQgZWxlbWVudHNcIn1mPWNbMF07ZT1jWzFdO2lmKGMubGVuZ3RoPT0zKXtkPWNbMl19Yi5oZWFkZXJPYmo9S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZyhiNjR1dG91dGY4KGYpKTtiLnBheWxvYWRPYmo9S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZyhiNjR1dG91dGY4KGUpKTtiLmhlYWRlclBQPUpTT04uc3RyaW5naWZ5KGIuaGVhZGVyT2JqLG51bGwsXCIgIFwiKTtpZihiLnBheWxvYWRPYmo9PW51bGwpe2IucGF5bG9hZFBQPWI2NHV0b3V0ZjgoZSl9ZWxzZXtiLnBheWxvYWRQUD1KU09OLnN0cmluZ2lmeShiLnBheWxvYWRPYmosbnVsbCxcIiAgXCIpfWlmKGQhPT11bmRlZmluZWQpe2Iuc2lnSGV4PWI2NHV0b2hleChkKX1yZXR1cm4gYn07S0pVUi5qd3MuSldTLnZlcmlmeUpXVD1mdW5jdGlvbihlLGwscil7dmFyIGQ9S0pVUixqPWQuandzLG89ai5KV1Msbj1vLnJlYWRTYWZlSlNPTlN0cmluZyxwPW8uaW5BcnJheSxmPW8uaW5jbHVkZWRBcnJheTt2YXIgaz1lLnNwbGl0KFwiLlwiKTt2YXIgYz1rWzBdO3ZhciBpPWtbMV07dmFyIHE9YytcIi5cIitpO3ZhciBtPWI2NHV0b2hleChrWzJdKTt2YXIgaD1uKGI2NHV0b3V0ZjgoYykpO3ZhciBnPW4oYjY0dXRvdXRmOChpKSk7aWYoaC5hbGc9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZX1pZihyLmFsZz09PXVuZGVmaW5lZCl7dGhyb3dcImFjY2VwdEZpZWxkLmFsZyBzaGFsbCBiZSBzcGVjaWZpZWRcIn1pZighcChoLmFsZyxyLmFsZykpe3JldHVybiBmYWxzZX1pZihnLmlzcyE9PXVuZGVmaW5lZCYmdHlwZW9mIHIuaXNzPT09XCJvYmplY3RcIil7aWYoIXAoZy5pc3Msci5pc3MpKXtyZXR1cm4gZmFsc2V9fWlmKGcuc3ViIT09dW5kZWZpbmVkJiZ0eXBlb2Ygci5zdWI9PT1cIm9iamVjdFwiKXtpZighcChnLnN1YixyLnN1Yikpe3JldHVybiBmYWxzZX19aWYoZy5hdWQhPT11bmRlZmluZWQmJnR5cGVvZiByLmF1ZD09PVwib2JqZWN0XCIpe2lmKHR5cGVvZiBnLmF1ZD09XCJzdHJpbmdcIil7aWYoIXAoZy5hdWQsci5hdWQpKXtyZXR1cm4gZmFsc2V9fWVsc2V7aWYodHlwZW9mIGcuYXVkPT1cIm9iamVjdFwiKXtpZighZihnLmF1ZCxyLmF1ZCkpe3JldHVybiBmYWxzZX19fX12YXIgYj1qLkludERhdGUuZ2V0Tm93KCk7aWYoci52ZXJpZnlBdCE9PXVuZGVmaW5lZCYmdHlwZW9mIHIudmVyaWZ5QXQ9PT1cIm51bWJlclwiKXtiPXIudmVyaWZ5QXR9aWYoci5ncmFjZVBlcmlvZD09PXVuZGVmaW5lZHx8dHlwZW9mIHIuZ3JhY2VQZXJpb2QhPT1cIm51bWJlclwiKXtyLmdyYWNlUGVyaW9kPTB9aWYoZy5leHAhPT11bmRlZmluZWQmJnR5cGVvZiBnLmV4cD09XCJudW1iZXJcIil7aWYoZy5leHArci5ncmFjZVBlcmlvZDxiKXtyZXR1cm4gZmFsc2V9fWlmKGcubmJmIT09dW5kZWZpbmVkJiZ0eXBlb2YgZy5uYmY9PVwibnVtYmVyXCIpe2lmKGI8Zy5uYmYtci5ncmFjZVBlcmlvZCl7cmV0dXJuIGZhbHNlfX1pZihnLmlhdCE9PXVuZGVmaW5lZCYmdHlwZW9mIGcuaWF0PT1cIm51bWJlclwiKXtpZihiPGcuaWF0LXIuZ3JhY2VQZXJpb2Qpe3JldHVybiBmYWxzZX19aWYoZy5qdGkhPT11bmRlZmluZWQmJnIuanRpIT09dW5kZWZpbmVkKXtpZihnLmp0aSE9PXIuanRpKXtyZXR1cm4gZmFsc2V9fWlmKCFvLnZlcmlmeShlLGwsci5hbGcpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9O0tKVVIuandzLkpXUy5pbmNsdWRlZEFycmF5PWZ1bmN0aW9uKGIsYSl7dmFyIGM9S0pVUi5qd3MuSldTLmluQXJyYXk7aWYoYj09PW51bGwpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYiE9PVwib2JqZWN0XCIpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYi5sZW5ndGghPT1cIm51bWJlclwiKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspe2lmKCFjKGJbZF0sYSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9O0tKVVIuandzLkpXUy5pbkFycmF5PWZ1bmN0aW9uKGQsYil7aWYoYj09PW51bGwpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYiE9PVwib2JqZWN0XCIpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYi5sZW5ndGghPT1cIm51bWJlclwiKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe2lmKGJbY109PWQpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9O0tKVVIuandzLkpXUy5qd3NhbGcyc2lnYWxnPXtIUzI1NjpcIkhtYWNTSEEyNTZcIixIUzM4NDpcIkhtYWNTSEEzODRcIixIUzUxMjpcIkhtYWNTSEE1MTJcIixSUzI1NjpcIlNIQTI1NndpdGhSU0FcIixSUzM4NDpcIlNIQTM4NHdpdGhSU0FcIixSUzUxMjpcIlNIQTUxMndpdGhSU0FcIixFUzI1NjpcIlNIQTI1NndpdGhFQ0RTQVwiLEVTMzg0OlwiU0hBMzg0d2l0aEVDRFNBXCIsUFMyNTY6XCJTSEEyNTZ3aXRoUlNBYW5kTUdGMVwiLFBTMzg0OlwiU0hBMzg0d2l0aFJTQWFuZE1HRjFcIixQUzUxMjpcIlNIQTUxMndpdGhSU0FhbmRNR0YxXCIsbm9uZTpcIm5vbmVcIix9O0tKVVIuandzLkpXUy5pc1NhZmVKU09OU3RyaW5nPWZ1bmN0aW9uKGMsYixkKXt2YXIgZT1udWxsO3RyeXtlPWpzb25QYXJzZShjKTtpZih0eXBlb2YgZSE9XCJvYmplY3RcIil7cmV0dXJuIDB9aWYoZS5jb25zdHJ1Y3Rvcj09PUFycmF5KXtyZXR1cm4gMH1pZihiKXtiW2RdPWV9cmV0dXJuIDF9Y2F0Y2goYSl7cmV0dXJuIDB9fTtLSlVSLmp3cy5KV1MucmVhZFNhZmVKU09OU3RyaW5nPWZ1bmN0aW9uKGIpe3ZhciBjPW51bGw7dHJ5e2M9anNvblBhcnNlKGIpO2lmKHR5cGVvZiBjIT1cIm9iamVjdFwiKXtyZXR1cm4gbnVsbH1pZihjLmNvbnN0cnVjdG9yPT09QXJyYXkpe3JldHVybiBudWxsfXJldHVybiBjfWNhdGNoKGEpe3JldHVybiBudWxsfX07S0pVUi5qd3MuSldTLmdldEVuY29kZWRTaWduYXR1cmVWYWx1ZUZyb21KV1M9ZnVuY3Rpb24oYil7dmFyIGE9Yi5tYXRjaCgvXlteLl0rXFwuW14uXStcXC4oW14uXSspJC8pO2lmKGE9PW51bGwpe3Rocm93XCJKV1Mgc2lnbmF0dXJlIGlzIG5vdCBhIGZvcm0gb2YgJ0hlYWQuUGF5bG9hZC5TaWdWYWx1ZScuXCJ9cmV0dXJuIGFbMV19O0tKVVIuandzLkpXUy5nZXRKV0t0aHVtYnByaW50PWZ1bmN0aW9uKGQpe2lmKGQua3R5IT09XCJSU0FcIiYmZC5rdHkhPT1cIkVDXCImJmQua3R5IT09XCJvY3RcIil7dGhyb3dcInVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgSldLIFRodW1wcmludFwifXZhciBhPVwie1wiO2lmKGQua3R5PT09XCJSU0FcIil7aWYodHlwZW9mIGQubiE9XCJzdHJpbmdcInx8dHlwZW9mIGQuZSE9XCJzdHJpbmdcIil7dGhyb3dcIndyb25nIG4gYW5kIGUgdmFsdWUgZm9yIFJTQSBrZXlcIn1hKz0nXCJlXCI6XCInK2QuZSsnXCIsJzthKz0nXCJrdHlcIjpcIicrZC5rdHkrJ1wiLCc7YSs9J1wiblwiOlwiJytkLm4rJ1wifSd9ZWxzZXtpZihkLmt0eT09PVwiRUNcIil7aWYodHlwZW9mIGQuY3J2IT1cInN0cmluZ1wifHx0eXBlb2YgZC54IT1cInN0cmluZ1wifHx0eXBlb2YgZC55IT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgY3J2LCB4IGFuZCB5IHZhbHVlIGZvciBFQyBrZXlcIn1hKz0nXCJjcnZcIjpcIicrZC5jcnYrJ1wiLCc7YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcInhcIjpcIicrZC54KydcIiwnO2ErPSdcInlcIjpcIicrZC55KydcIn0nfWVsc2V7aWYoZC5rdHk9PT1cIm9jdFwiKXtpZih0eXBlb2YgZC5rIT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgayB2YWx1ZSBmb3Igb2N0KHN5bW1ldHJpYykga2V5XCJ9YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcImtcIjpcIicrZC5rKydcIn0nfX19dmFyIGI9cnN0cnRvaGV4KGEpO3ZhciBjPUtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChiLFwic2hhMjU2XCIpO3ZhciBlPWhleHRvYjY0dShjKTtyZXR1cm4gZX07S0pVUi5qd3MuSW50RGF0ZT17fTtLSlVSLmp3cy5JbnREYXRlLmdldD1mdW5jdGlvbihjKXt2YXIgYj1LSlVSLmp3cy5JbnREYXRlLGQ9Yi5nZXROb3csYT1iLmdldFp1bHU7aWYoYz09XCJub3dcIil7cmV0dXJuIGQoKX1lbHNle2lmKGM9PVwibm93ICsgMWhvdXJcIil7cmV0dXJuIGQoKSs2MCo2MH1lbHNle2lmKGM9PVwibm93ICsgMWRheVwiKXtyZXR1cm4gZCgpKzYwKjYwKjI0fWVsc2V7aWYoYz09XCJub3cgKyAxbW9udGhcIil7cmV0dXJuIGQoKSs2MCo2MCoyNCozMH1lbHNle2lmKGM9PVwibm93ICsgMXllYXJcIil7cmV0dXJuIGQoKSs2MCo2MCoyNCozNjV9ZWxzZXtpZihjLm1hdGNoKC9aJC8pKXtyZXR1cm4gYShjKX1lbHNle2lmKGMubWF0Y2goL15bMC05XSskLykpe3JldHVybiBwYXJzZUludChjKX19fX19fX10aHJvd1widW5zdXBwb3J0ZWQgZm9ybWF0OiBcIitjfTtLSlVSLmp3cy5JbnREYXRlLmdldFp1bHU9ZnVuY3Rpb24oYSl7cmV0dXJuIHp1bHV0b3NlYyhhKX07S0pVUi5qd3MuSW50RGF0ZS5nZXROb3c9ZnVuY3Rpb24oKXt2YXIgYT1+fihuZXcgRGF0ZSgpLzEwMDApO3JldHVybiBhfTtLSlVSLmp3cy5JbnREYXRlLmludERhdGUyVVRDU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBEYXRlKGEqMTAwMCk7cmV0dXJuIGIudG9VVENTdHJpbmcoKX07S0pVUi5qd3MuSW50RGF0ZS5pbnREYXRlMlp1bHU9ZnVuY3Rpb24oZSl7dmFyIGk9bmV3IERhdGUoZSoxMDAwKSxoPShcIjAwMDBcIitpLmdldFVUQ0Z1bGxZZWFyKCkpLnNsaWNlKC00KSxnPShcIjAwXCIrKGkuZ2V0VVRDTW9udGgoKSsxKSkuc2xpY2UoLTIpLGI9KFwiMDBcIitpLmdldFVUQ0RhdGUoKSkuc2xpY2UoLTIpLGE9KFwiMDBcIitpLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKSxjPShcIjAwXCIraS5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSxmPShcIjAwXCIraS5nZXRVVENTZWNvbmRzKCkpLnNsaWNlKC0yKTtyZXR1cm4gaCtnK2IrYStjK2YrXCJaXCJ9O1xuZXhwb3J0IHsgU2VjdXJlUmFuZG9tIH07XHJcbmV4cG9ydCB7IHJuZ19zZWVkX3RpbWUgfTtcclxuXHJcbmV4cG9ydCB7IEJpZ0ludGVnZXIgfTtcclxuZXhwb3J0IHsgUlNBS2V5IH07XHJcbmV4cG9ydCBjb25zdCB7IEVEU0EgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBEU0EgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBTaWduYXR1cmUgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBNZXNzYWdlRGlnZXN0IH0gPSAgS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IE1hYyB9ID0gS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IENpcGhlciB9ID0gIEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgeyBLRVlVVElMIH07XHJcbmV4cG9ydCB7IEFTTjFIRVggfTtcclxuZXhwb3J0IHsgWDUwOSB9O1xyXG5leHBvcnQgeyBDcnlwdG9KUyB9O1xyXG5cclxuLy8gZXh0L2Jhc2U2NC5qc1xyXG5leHBvcnQgeyBiNjR0b2hleCB9O1xyXG5leHBvcnQgeyBiNjR0b0JBIH07XHJcblxyXG4vLyBiYXNlNjR4LmpzXHJcbmV4cG9ydCB7IHN0b0JBIH07XHJcbmV4cG9ydCB7IEJBdG9zIH07XHJcbmV4cG9ydCB7IEJBdG9oZXggfTtcclxuZXhwb3J0IHsgc3RvaGV4IH07XHJcbmV4cG9ydCB7IHN0b2I2NCB9O1xyXG5leHBvcnQgeyBzdG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b3MgfTtcclxuZXhwb3J0IHsgYjY0dG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b2I2NCB9O1xyXG5leHBvcnQgeyBoZXgyYjY0IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG9oZXggfTtcclxuZXhwb3J0IHsgdXRmOHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG91dGY4IH07XHJcbmV4cG9ydCB7IHV0Zjh0b2I2NCB9O1xyXG5leHBvcnQgeyBiNjR0b3V0ZjggfTtcclxuZXhwb3J0IHsgdXRmOHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvdXRmOCB9O1xyXG5leHBvcnQgeyBoZXh0b3JzdHIgfTtcclxuZXhwb3J0IHsgcnN0cnRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0bmwgfTtcclxuZXhwb3J0IHsgYjY0bmx0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b3BlbSB9O1xyXG5leHBvcnQgeyBwZW10b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b0FycmF5QnVmZmVyIH07XHJcbmV4cG9ydCB7IEFycmF5QnVmZmVydG9oZXggfTtcclxuZXhwb3J0IHsgenVsdXRvbXNlYyB9O1xyXG5leHBvcnQgeyB6dWx1dG9zZWMgfTtcclxuZXhwb3J0IHsgenVsdXRvZGF0ZSB9O1xyXG5leHBvcnQgeyBkYXRldG96dWx1IH07XHJcbmV4cG9ydCB7IHVyaWNtcHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvdXJpY21wIH07XHJcbmV4cG9ydCB7IGlwdjZ0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b2lwdjYgfTtcclxuZXhwb3J0IHsgaGV4dG9pcCB9O1xyXG5leHBvcnQgeyBpcHRvaGV4IH07XHJcbmV4cG9ydCB7IGVuY29kZVVSSUNvbXBvbmVudEFsbCB9O1xyXG5leHBvcnQgeyBuZXdsaW5lX3RvVW5peCB9O1xyXG5leHBvcnQgeyBuZXdsaW5lX3RvRG9zIH07XHJcbmV4cG9ydCB7IGhleHRvcG9zaGV4IH07XHJcbmV4cG9ydCB7IGludGFyeXN0cnRvaGV4IH07XHJcbmV4cG9ydCB7IHN0cmRpZmZpZHggfTtcclxuXHJcbi8vIG5hbWUgc3BhY2VzXHJcbmV4cG9ydCB7IEtKVVIgfTtcclxuY29uc3QgX2NyeXB0byA9ICBLSlVSLmNyeXB0bztcclxuZXhwb3J0IHsgX2NyeXB0byBhcyBjcnlwdG8gfTtcclxuZXhwb3J0IGNvbnN0IHsgYXNuMSB9ID0gS0pVUjtcclxuZXhwb3J0IGNvbnN0IHsgandzIH0gPSBLSlVSO1xyXG5leHBvcnQgY29uc3QgeyBsYW5nIH0gPSBLSlVSO1xyXG5cclxuXHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9zaGltXCIpO1xuXG5yZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lXCIpO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlXCIpO1xuXG5pZiAoZ2xvYmFsLl9iYWJlbFBvbHlmaWxsKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7XG59XG5nbG9iYWwuX2JhYmVsUG9seWZpbGwgPSB0cnVlO1xuXG52YXIgREVGSU5FX1BST1BFUlRZID0gXCJkZWZpbmVQcm9wZXJ0eVwiO1xuZnVuY3Rpb24gZGVmaW5lKE8sIGtleSwgdmFsdWUpIHtcbiAgT1trZXldIHx8IE9iamVjdFtERUZJTkVfUFJPUEVSVFldKE8sIGtleSwge1xuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSk7XG59XG5cbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZExlZnRcIiwgXCJcIi5wYWRTdGFydCk7XG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRSaWdodFwiLCBcIlwiLnBhZEVuZCk7XG5cblwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBbXVtrZXldICYmIGRlZmluZShBcnJheSwga2V5LCBGdW5jdGlvbi5jYWxsLmJpbmQoW11ba2V5XSkpO1xufSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKFxuICAgICAgdWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKVxuICAgICkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gW10uY29weVdpdGhpbiB8fCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCAvKiA9IDAgKi8sIHN0YXJ0IC8qID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgdG8gPSB0b0Fic29sdXRlSW5kZXgodGFyZ2V0LCBsZW4pO1xuICB2YXIgZnJvbSA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgY291bnQgPSBNYXRoLm1pbigoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pKSAtIGZyb20sIGxlbiAtIHRvKTtcbiAgdmFyIGluYyA9IDE7XG4gIGlmIChmcm9tIDwgdG8gJiYgdG8gPCBmcm9tICsgY291bnQpIHtcbiAgICBpbmMgPSAtMTtcbiAgICBmcm9tICs9IGNvdW50IC0gMTtcbiAgICB0byArPSBjb3VudCAtIDE7XG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgIGVsc2UgZGVsZXRlIE9bdG9dO1xuICAgIHRvICs9IGluYztcbiAgICBmcm9tICs9IGluYztcbiAgfSByZXR1cm4gTztcbn07XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYUxlbiwgbWVtbywgaXNSaWdodCkge1xuICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gaXNSaWdodCA/IGxlbmd0aCAtIDEgOiAwO1xuICB2YXIgaSA9IGlzUmlnaHQgPyAtMSA6IDE7XG4gIGlmIChhTGVuIDwgMikgZm9yICg7Oykge1xuICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ICs9IGk7XG4gICAgaWYgKGlzUmlnaHQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIH1cbiAgfVxuICBmb3IgKDtpc1JpZ2h0ID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gIH1cbiAgcmV0dXJuIG1lbW87XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbCkpIHtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi40JyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBOVU1CRVIgPSAnbnVtYmVyJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBpZiAoaGludCAhPT0gJ3N0cmluZycgJiYgaGludCAhPT0gTlVNQkVSICYmIGhpbnQgIT09ICdkZWZhdWx0JykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuZnVuY3Rpb24gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGN0eChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBzcHJlYWRhYmxlO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBzcHJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoaXNPYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgc3ByZWFkYWJsZSA9IGVsZW1lbnRbSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICAgICAgICBzcHJlYWRhYmxlID0gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwcmVhZGFibGUgJiYgZGVwdGggPiAwKSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCB0b0xlbmd0aChlbGVtZW50Lmxlbmd0aCksIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+PSAweDFmZmZmZmZmZmZmZmZmKSB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwidmFyIE1hcCA9IHJlcXVpcmUoJy4vZXM2Lm1hcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IHNoYXJlZC5zdG9yZSB8fCAoc2hhcmVkLnN0b3JlID0gbmV3IChyZXF1aXJlKCcuL2VzNi53ZWFrLW1hcCcpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIGlmIChpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKSBUW2tleV0gPSBTW2tleV07XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoTywga2V5ID0ga2V5c1tpKytdKSkge1xuICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIFJlZmxlY3QgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZWZsZWN0ICYmIFJlZmxlY3Qub3duS2V5cyB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ09QTi5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICByZXR1cm4gZ2V0U3ltYm9scyA/IGtleXMuY29uY2F0KGdldFN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VGbG9hdDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQocmVxdWlyZSgnLi9fc3RyaW5nLXdzJykgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgZnJvbTogZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICBBID0gW107XG4gICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgIG4gPSAwO1xuICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBmdW5jdGlvbiAobmV4dEl0ZW0pIHtcbiAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXghJztcbnZhciAkQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBNYXRoID0gZ2xvYmFsLk1hdGg7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG52YXIgSW5maW5pdHkgPSBnbG9iYWwuSW5maW5pdHk7XG52YXIgQmFzZUJ1ZmZlciA9ICRBcnJheUJ1ZmZlcjtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG52YXIgQlVGRkVSID0gJ2J1ZmZlcic7XG52YXIgQllURV9MRU5HVEggPSAnYnl0ZUxlbmd0aCc7XG52YXIgQllURV9PRkZTRVQgPSAnYnl0ZU9mZnNldCc7XG52YXIgJEJVRkZFUiA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUjtcbnZhciAkTEVOR1RIID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEg7XG52YXIgJE9GRlNFVCA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxuZnVuY3Rpb24gcGFja0lFRUU3NTQodmFsdWUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KG5CeXRlcyk7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDtcbiAgdmFyIGUsIG0sIGM7XG4gIHZhbHVlID0gYWJzKHZhbHVlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIG0gPSB2YWx1ZSAhPSB2YWx1ZSA/IDEgOiAwO1xuICAgIGUgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGUgPSBmbG9vcihsb2codmFsdWUpIC8gTE4yKTtcbiAgICBpZiAodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDA7XG4gICAgICBlID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW2krK10gPSBtICYgMjU1LCBtIC89IDI1NiwgbUxlbiAtPSA4KTtcbiAgZSA9IGUgPDwgbUxlbiB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbaSsrXSA9IGUgJiAyNTUsIGUgLz0gMjU2LCBlTGVuIC09IDgpO1xuICBidWZmZXJbLS1pXSB8PSBzICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufVxuZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChidWZmZXIsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZUxlbiAtIDc7XG4gIHZhciBpID0gbkJ5dGVzIC0gMTtcbiAgdmFyIHMgPSBidWZmZXJbaS0tXTtcbiAgdmFyIGUgPSBzICYgMTI3O1xuICB2YXIgbTtcbiAgcyA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIG0gPSBlICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGUgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbUxlbjtcbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiBzID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBwb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfSByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIHBvdygyLCBlIC0gbUxlbik7XG59XG5cbmZ1bmN0aW9uIHVucGFja0kzMihieXRlcykge1xuICByZXR1cm4gYnl0ZXNbM10gPDwgMjQgfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbn1cbmZ1bmN0aW9uIHBhY2tJOChpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTE2KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTMyKGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZiwgaXQgPj4gMTYgJiAweGZmLCBpdCA+PiAyNCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0Y2NChpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDUyLCA4KTtcbn1cbmZ1bmN0aW9uIHBhY2tGMzIoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCAyMywgNCk7XG59XG5cbmZ1bmN0aW9uIGFkZEdldHRlcihDLCBrZXksIGludGVybmFsKSB7XG4gIGRQKENbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tpbnRlcm5hbF07IH0gfSk7XG59XG5cbmZ1bmN0aW9uIGdldCh2aWV3LCBieXRlcywgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn1cbmZ1bmN0aW9uIHNldCh2aWV3LCBieXRlcywgaW5kZXgsIGNvbnZlcnNpb24sIHZhbHVlLCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufVxuXG5pZiAoISR0eXBlZC5BQlYpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgdGhpcy5fYiA9IGFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShieXRlTGVuZ3RoKSwgMCk7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYnVmZmVyWyRMRU5HVEhdO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgdGhpc1skQlVGRkVSXSA9IGJ1ZmZlcjtcbiAgICB0aGlzWyRPRkZTRVRdID0gb2Zmc2V0O1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCA1MiwgOCk7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRjMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRjY0LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgJEFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKE5hTik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuICRBcnJheUJ1ZmZlci5uYW1lICE9IEFSUkFZX0JVRkZFUjtcbiAgfSkpIHtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybiBuZXcgQmFzZUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG8gPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEJhc2VCdWZmZXJbUFJPVE9UWVBFXTtcbiAgICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlQnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkgaGlkZSgkQXJyYXlCdWZmZXIsIGtleSwgQmFzZUJ1ZmZlcltrZXldKTtcbiAgICB9XG4gICAgaWYgKCFMSUJSQVJZKSBBcnJheUJ1ZmZlclByb3RvLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9XG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodmlldy5nZXRJbnQ4KDApIHx8ICF2aWV3LmdldEludDgoMSkpIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5zZXRUb1N0cmluZ1RhZygkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG5zZXRUb1N0cmluZ1RhZygkRGF0YVZpZXcsIERBVEFfVklFVyk7XG5oaWRlKCREYXRhVmlld1tQUk9UT1RZUEVdLCAkdHlwZWQuVklFVywgdHJ1ZSk7XG5leHBvcnRzW0FSUkFZX0JVRkZFUl0gPSAkQXJyYXlCdWZmZXI7XG5leHBvcnRzW0RBVEFfVklFV10gPSAkRGF0YVZpZXc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZXhFeHAuZXNjYXBlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZSA9IHJlcXVpcmUoJy4vX3JlcGxhY2VyJykoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVnRXhwJywgeyBlc2NhcGU6IGZ1bmN0aW9uIGVzY2FwZShpdCkgeyByZXR1cm4gJHJlKGl0KTsgfSB9KTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgY29weVdpdGhpbjogcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2NvcHlXaXRoaW4nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIFNUUklDVCA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlUmlnaHQsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOSAvIDE1LjQuNC4yMiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2UsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOCAvIDE1LjQuNC4yMSBBcnJheS5wcm90b3R5cGUucmVkdWNlKGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBpZiAoaHRtbCkgYXJyYXlTbGljZS5jYWxsKGh0bWwpO1xufSksICdBcnJheScsIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhpcy5sZW5ndGgpO1xuICAgIHZhciBrbGFzcyA9IGNvZih0aGlzKTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZDtcbiAgICBpZiAoa2xhc3MgPT0gJ0FycmF5JykgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCh0aGlzLCBiZWdpbiwgZW5kKTtcbiAgICB2YXIgc3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbik7XG4gICAgdmFyIHVwVG8gPSB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pO1xuICAgIHZhciBzaXplID0gdG9MZW5ndGgodXBUbyAtIHN0YXJ0KTtcbiAgICB2YXIgY2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykgY2xvbmVkW2ldID0ga2xhc3MgPT0gJ1N0cmluZydcbiAgICAgID8gdGhpcy5jaGFyQXQoc3RhcnQgKyBpKVxuICAgICAgOiB0aGlzW3N0YXJ0ICsgaV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkc29ydCkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yNSBBcnJheS5wcm90b3R5cGUuc29ydChjb21wYXJlZm4pXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcykpXG4gICAgICA6ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcyksIGFGdW5jdGlvbihjb21wYXJlZm4pKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdBcnJheScpO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIiwidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4zIC8gMTUuMi4zLjcgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuNSBPYmplY3QuZnJlZXplKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2ZyZWV6ZScsIGZ1bmN0aW9uICgkZnJlZXplKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmcmVlemUoaXQpIHtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS43IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjE0IFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG8gPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgRU5EU19XSVRIID0gJ2VuZHNXaXRoJztcbnZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKEVORFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aCk7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOSBTdHJpbmcucHJvdG90eXBlLml0YWxpY3MoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnaXRhbGljcycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpdGFsaWNzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdpJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEyIFN0cmluZy5wcm90b3R5cGUuc3RyaWtlKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEzIFN0cmluZy5wcm90b3R5cGUuc3ViKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjE0IFN0cmluZy5wcm90b3R5cGUuc3VwKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbic7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRQKHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChpdCwga2V5LCBEKSB7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZiAocHJvdG9EZXNjKSBkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmIChwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKSBkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFELmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7IGVudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICB2YXIgaSA9IDA7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsID4gaSkgJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkge1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgdmFyIElTX09QID0gaXQgPT09IE9iamVjdFByb3RvO1xuICB2YXIgbmFtZXMgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKSB0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXQgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJykuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7IGE6IFMgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7XG4gICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgIHZhciBpID0gMTtcbiAgICB2YXIgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgJHJlcGxhY2VyID0gcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3R5cGVkJykuQUJWLCB7XG4gIERhdGFWaWV3OiByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKS5EYXRhVmlld1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59LCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBlYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKTtcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIFdFQUtfTUFQID0gJ1dlYWtNYXAnO1xudmFyIGdldFdlYWsgPSBtZXRhLmdldFdlYWs7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gd2Vhay51ZnN0b3JlO1xudmFyIEludGVybmFsTWFwO1xuXG52YXIgd3JhcHBlciA9IGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtNYXAoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gIH07XG59O1xuXG52YXIgbWV0aG9kcyA9IHtcbiAgLy8gMjMuMy4zLjMgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSkuZ2V0KGtleSk7XG4gICAgICByZXR1cm4gZGF0YSA/IGRhdGFbdGhpcy5faV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9LFxuICAvLyAyMy4zLjMuNSBXZWFrTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCksIGtleSwgdmFsdWUpO1xuICB9XG59O1xuXG4vLyAyMy4zIFdlYWtNYXAgT2JqZWN0c1xudmFyICRXZWFrTWFwID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19NQVAsIHdyYXBwZXIsIG1ldGhvZHMsIHdlYWssIHRydWUsIHRydWUpO1xuXG4vLyBJRTExIFdlYWtNYXAgZnJvemVuIGtleXMgZml4XG5pZiAoTkFUSVZFX1dFQUtfTUFQICYmIElTX0lFMTEpIHtcbiAgSW50ZXJuYWxNYXAgPSB3ZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIFdFQUtfTUFQKTtcbiAgYXNzaWduKEludGVybmFsTWFwLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gIG1ldGEuTkVFRCA9IHRydWU7XG4gIGVhY2goWydkZWxldGUnLCAnaGFzJywgJ2dldCcsICdzZXQnXSwgZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBwcm90byA9ICRXZWFrTWFwLnByb3RvdHlwZTtcbiAgICB2YXIgbWV0aG9kID0gcHJvdG9ba2V5XTtcbiAgICByZWRlZmluZShwcm90bywga2V5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgLy8gc3RvcmUgZnJvemVuIG9iamVjdHMgb24gaW50ZXJuYWwgd2Vha21hcCBzaGltXG4gICAgICBpZiAoaXNPYmplY3QoYSkgJiYgIWlzRXh0ZW5zaWJsZShhKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2YpIHRoaXMuX2YgPSBuZXcgSW50ZXJuYWxNYXAoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zba2V5XShhLCBiKTtcbiAgICAgICAgcmV0dXJuIGtleSA9PSAnc2V0JyA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAvLyBzdG9yZSBhbGwgdGhlIHJlc3Qgb24gbmF0aXZlIHdlYWttYXBcbiAgICAgIH0gcmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIGEsIGIpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdE1hcFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuLCBBO1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0TWFwJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdHRlblxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0dGVuOiBmdW5jdGlvbiBmbGF0dGVuKC8qIGRlcHRoQXJnID0gMSAqLykge1xuICAgIHZhciBkZXB0aEFyZyA9IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIGRlcHRoQXJnID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoQXJnKSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdHRlbicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnaW5jbHVkZXMnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yd2FsZHJvbi90YzM5LW5vdGVzL2Jsb2IvbWFzdGVyL2VzNi8yMDE0LTA5L3NlcHQtMjUubWQjNTEwLWdsb2JhbGFzYXAtZm9yLWVucXVldWluZy1hLW1pY3JvdGFza1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIHByb2Nlc3MgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wcm9jZXNzO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHtcbiAgYXNhcDogZnVuY3Rpb24gYXNhcChmbikge1xuICAgIHZhciBkb21haW4gPSBpc05vZGUgJiYgcHJvY2Vzcy5kb21haW47XG4gICAgbWljcm90YXNrKGRvbWFpbiA/IGRvbWFpbi5iaW5kKGZuKSA6IGZuKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL3Byb3Bvc2FsLWlzLWVycm9yXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0Vycm9yJywge1xuICBpc0Vycm9yOiBmdW5jdGlvbiBpc0Vycm9yKGl0KSB7XG4gICAgcmV0dXJuIGNvZihpdCkgPT09ICdFcnJvcic7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbGFtcDogZnVuY3Rpb24gY2xhbXAoeCwgbG93ZXIsIHVwcGVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKHVwcGVyLCBNYXRoLm1heChsb3dlciwgeCkpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgREVHX1BFUl9SQUQ6IE1hdGguUEkgLyAxODAgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIFJBRF9QRVJfREVHID0gMTgwIC8gTWF0aC5QSTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBkZWdyZWVzOiBmdW5jdGlvbiBkZWdyZWVzKHJhZGlhbnMpIHtcbiAgICByZXR1cm4gcmFkaWFucyAqIFJBRF9QRVJfREVHO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlhZGRoOiBmdW5jdGlvbiBpYWRkaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgKyAoeTEgPj4+IDApICsgKCgkeDAgJiAkeTAgfCAoJHgwIHwgJHkwKSAmIH4oJHgwICsgJHkwID4+PiAwKSkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlzdWJoOiBmdW5jdGlvbiBpc3ViaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgLSAoeTEgPj4+IDApIC0gKCh+JHgwICYgJHkwIHwgfigkeDAgXiAkeTApICYgJHgwIC0gJHkwID4+PiAwKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IFJBRF9QRVJfREVHOiAxODAgLyBNYXRoLlBJIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNjYWxlOiByZXF1aXJlKCcuL19tYXRoLXNjYWxlJykgfSk7XG4iLCIvLyBodHRwOi8vamZiYXN0aWVuLmdpdGh1Yi5pby9wYXBlcnMvTWF0aC5zaWduYml0Lmh0bWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbmJpdDogZnVuY3Rpb24gc2lnbmJpdCh4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpICE9IHggPyB4IDogeCA9PSAwID8gMSAvIHggPT0gSW5maW5pdHkgOiB4ID4gMDtcbn0gfSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB1bXVsaDogZnVuY3Rpb24gdW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+Pj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+Pj4gMTYpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjIgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKFAsIGdldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZUdldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZUdldHRlcl9fKFAsIGdldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IGdldDogYUZ1bmN0aW9uKGdldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4zIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVTZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBzZXQ6IGFGdW5jdGlvbihzZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KSB7XG4gICAgcmV0dXJuICRlbnRyaWVzKGl0KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG4vLyBCLjIuMi40IE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBHZXR0ZXJfXyhQKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fbG9va3VwR2V0dGVyX186IGZ1bmN0aW9uIF9fbG9va3VwR2V0dGVyX18oUCkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEsgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICB2YXIgRDtcbiAgICBkbyB7XG4gICAgICBpZiAoRCA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBLKSkgcmV0dXJuIEQuZ2V0O1xuICAgIH0gd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG4vLyBCLjIuMi41IE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBTZXR0ZXJfXyhQKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fbG9va3VwU2V0dGVyX186IGZ1bmN0aW9uIF9fbG9va3VwU2V0dGVyX18oUCkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEsgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICB2YXIgRDtcbiAgICBkbyB7XG4gICAgICBpZiAoRCA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBLKSkgcmV0dXJuIEQuc2V0O1xuICAgIH0gd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vemVucGFyc2luZy9lcy1vYnNlcnZhYmxlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBPQlNFUlZBQkxFID0gcmVxdWlyZSgnLi9fd2tzJykoJ29ic2VydmFibGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBSRVRVUk4gPSBmb3JPZi5SRVRVUk47XG5cbnZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZuID09IG51bGwgPyB1bmRlZmluZWQgOiBhRnVuY3Rpb24oZm4pO1xufTtcblxudmFyIGNsZWFudXBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHZhciBjbGVhbnVwID0gc3Vic2NyaXB0aW9uLl9jO1xuICBpZiAoY2xlYW51cCkge1xuICAgIHN1YnNjcmlwdGlvbi5fYyA9IHVuZGVmaW5lZDtcbiAgICBjbGVhbnVwKCk7XG4gIH1cbn07XG5cbnZhciBzdWJzY3JpcHRpb25DbG9zZWQgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHJldHVybiBzdWJzY3JpcHRpb24uX28gPT09IHVuZGVmaW5lZDtcbn07XG5cbnZhciBjbG9zZVN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gIH1cbn07XG5cbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgYW5PYmplY3Qob2JzZXJ2ZXIpO1xuICB0aGlzLl9jID0gdW5kZWZpbmVkO1xuICB0aGlzLl9vID0gb2JzZXJ2ZXI7XG4gIG9ic2VydmVyID0gbmV3IFN1YnNjcmlwdGlvbk9ic2VydmVyKHRoaXMpO1xuICB0cnkge1xuICAgIHZhciBjbGVhbnVwID0gc3Vic2NyaWJlcihvYnNlcnZlcik7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IGNsZWFudXA7XG4gICAgaWYgKGNsZWFudXAgIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwLnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSBjbGVhbnVwID0gZnVuY3Rpb24gKCkgeyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgIGVsc2UgYUZ1bmN0aW9uKGNsZWFudXApO1xuICAgICAgdGhpcy5fYyA9IGNsZWFudXA7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgcmV0dXJuO1xuICB9IGlmIChzdWJzY3JpcHRpb25DbG9zZWQodGhpcykpIGNsZWFudXBTdWJzY3JpcHRpb24odGhpcyk7XG59O1xuXG5TdWJzY3JpcHRpb24ucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgdW5zdWJzY3JpYmU6IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkgeyBjbG9zZVN1YnNjcmlwdGlvbih0aGlzKTsgfVxufSk7XG5cbnZhciBTdWJzY3JpcHRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdGhpcy5fcyA9IHN1YnNjcmlwdGlvbjtcbn07XG5cblN1YnNjcmlwdGlvbk9ic2VydmVyLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIG5leHQ6IGZ1bmN0aW9uIG5leHQodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5uZXh0KTtcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGVycm9yOiBmdW5jdGlvbiBlcnJvcih2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmIChzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkgdGhyb3cgdmFsdWU7XG4gICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuZXJyb3IpO1xuICAgICAgaWYgKCFtKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHZhbHVlID0gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmNvbXBsZXRlKTtcbiAgICAgICAgdmFsdWUgPSBtID8gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnZhciAkT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlcikge1xuICBhbkluc3RhbmNlKHRoaXMsICRPYnNlcnZhYmxlLCAnT2JzZXJ2YWJsZScsICdfZicpLl9mID0gYUZ1bmN0aW9uKHN1YnNjcmliZXIpO1xufTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUucHJvdG90eXBlLCB7XG4gIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24ob2JzZXJ2ZXIsIHRoaXMuX2YpO1xuICB9LFxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiBuZXcgKGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgYUZ1bmN0aW9uKGZuKTtcbiAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGF0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZm4odmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgY29tcGxldGU6IHJlc29sdmVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59KTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUsIHtcbiAgZnJvbTogZnVuY3Rpb24gZnJvbSh4KSB7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZTtcbiAgICB2YXIgbWV0aG9kID0gZ2V0TWV0aG9kKGFuT2JqZWN0KHgpW09CU0VSVkFCTEVdKTtcbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICB2YXIgb2JzZXJ2YWJsZSA9IGFuT2JqZWN0KG1ldGhvZC5jYWxsKHgpKTtcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlLmNvbnN0cnVjdG9yID09PSBDID8gb2JzZXJ2YWJsZSA6IG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGZvck9mKHgsIGZhbHNlLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdCk7XG4gICAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm4gUkVUVVJOO1xuICAgICAgICAgICAgfSkgPT09IFJFVFVSTikgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBlO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGRvbmUgPSB0cnVlOyB9O1xuICAgIH0pO1xuICB9LFxuICBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoLCBpdGVtcyA9IG5ldyBBcnJheShsKTsgaSA8IGw7KSBpdGVtc1tpXSA9IGFyZ3VtZW50c1tpKytdO1xuICAgIHJldHVybiBuZXcgKHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlKShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGl0ZW1zLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0ZW1zW2pdKTtcbiAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgICAgICAgfSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGRvbmUgPSB0cnVlOyB9O1xuICAgIH0pO1xuICB9XG59KTtcblxuaGlkZSgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIE9CU0VSVkFCTEUsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBPYnNlcnZhYmxlOiAkT2JzZXJ2YWJsZSB9KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnT2JzZXJ2YWJsZScpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS1maW5hbGx5XG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJvbWlzZScsIHsgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIG9uRmluYWxseSA9PSAnZnVuY3Rpb24nO1xuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHksXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICB9IDogb25GaW5hbGx5XG4gICk7XG59IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdQcm9taXNlJywgeyAndHJ5JzogZnVuY3Rpb24gKGNhbGxiYWNrZm4pIHtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZih0aGlzKTtcbiAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gIChyZXN1bHQuZSA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gbWV0YWRhdGEuc2V0O1xuXG5tZXRhZGF0YS5leHAoeyBkZWZpbmVNZXRhZGF0YTogZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIGFuT2JqZWN0KHRhcmdldCksIHRvTWV0YUtleSh0YXJnZXRLZXkpKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBtZXRhZGF0YS5tYXA7XG52YXIgc3RvcmUgPSBtZXRhZGF0YS5zdG9yZTtcblxubWV0YWRhdGEuZXhwKHsgZGVsZXRlTWV0YWRhdGE6IGZ1bmN0aW9uIGRlbGV0ZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoYW5PYmplY3QodGFyZ2V0KSwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIGlmIChtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkIHx8ICFtZXRhZGF0YU1hcFsnZGVsZXRlJ10obWV0YWRhdGFLZXkpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChtZXRhZGF0YU1hcC5zaXplKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIHRhcmdldE1ldGFkYXRhWydkZWxldGUnXSh0YXJnZXRLZXkpO1xuICByZXR1cm4gISF0YXJnZXRNZXRhZGF0YS5zaXplIHx8IHN0b3JlWydkZWxldGUnXSh0YXJnZXQpO1xufSB9KTtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5R2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiB1bmRlZmluZWQ7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YTogZnVuY3Rpb24gZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YTogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlIYXNNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiB0cnVlO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUhhc01ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogZmFsc2U7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNNZXRhZGF0YTogZnVuY3Rpb24gaGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNPd25NZXRhZGF0YTogZnVuY3Rpb24gaGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyICRtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9NZXRhS2V5ID0gJG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gJG1ldGFkYXRhLnNldDtcblxuJG1ldGFkYXRhLmV4cCh7IG1ldGFkYXRhOiBmdW5jdGlvbiBtZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShcbiAgICAgIG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLFxuICAgICAgKHRhcmdldEtleSAhPT0gdW5kZWZpbmVkID8gYW5PYmplY3QgOiBhRnVuY3Rpb24pKHRhcmdldCksXG4gICAgICB0b01ldGFLZXkodGFyZ2V0S2V5KVxuICAgICk7XG4gIH07XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIGF0OiBmdW5jdGlvbiBhdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9TdHJpbmcucHJvdG90eXBlLm1hdGNoQWxsL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBnZXRGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgUmVnRXhwUHJvdG8gPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yID0gZnVuY3Rpb24gKHJlZ2V4cCwgc3RyaW5nKSB7XG4gIHRoaXMuX3IgPSByZWdleHA7XG4gIHRoaXMuX3MgPSBzdHJpbmc7XG59O1xuXG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKCRSZWdFeHBTdHJpbmdJdGVyYXRvciwgJ1JlZ0V4cCBTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgbWF0Y2ggPSB0aGlzLl9yLmV4ZWModGhpcy5fcyk7XG4gIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogbWF0Y2ggPT09IG51bGwgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIGRlZmluZWQodGhpcyk7XG4gICAgaWYgKCFpc1JlZ0V4cChyZWdleHApKSB0aHJvdyBUeXBlRXJyb3IocmVnZXhwICsgJyBpcyBub3QgYSByZWdleHAhJyk7XG4gICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgdmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSZWdFeHBQcm90byA/IFN0cmluZyhyZWdleHAuZmxhZ3MpIDogZ2V0RmxhZ3MuY2FsbChyZWdleHApO1xuICAgIHZhciByeCA9IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgfmZsYWdzLmluZGV4T2YoJ2cnKSA/IGZsYWdzIDogJ2cnICsgZmxhZ3MpO1xuICAgIHJ4Lmxhc3RJbmRleCA9IHRvTGVuZ3RoKHJlZ2V4cC5sYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJ4LCBTKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCksICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1MZWZ0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltTGVmdCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMSk7XG4gIH07XG59LCAndHJpbVN0YXJ0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltUmlnaHQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1SaWdodCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMik7XG4gIH07XG59LCAndHJpbUVuZCcpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtTZXQnKTtcbiIsInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CLCB7XG4gIHNldEltbWVkaWF0ZTogJHRhc2suc2V0LFxuICBjbGVhckltbWVkaWF0ZTogJHRhc2suY2xlYXJcbn0pO1xuIiwiLy8gaWU5LSBzZXRUaW1lb3V0ICYgc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChmbiwgdGltZSAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBmYWxzZTtcbiAgICByZXR1cm4gc2V0KGJvdW5kQXJncyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbikpLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gOiBmbiwgdGltZSk7XG4gIH07XG59O1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIgKyAkZXhwb3J0LkYgKiBNU0lFLCB7XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYWNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2JydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNsejMyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5pbXVsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50cnVuYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yYXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJpZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5saW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdWInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1cCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLm5vdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuam9pbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zbGljZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb3J0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29tZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLXNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmhhcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcuYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5jbGFtcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaXN1YmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pbXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgudW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zaWduYml0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hc2FwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmltbWVkaWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9tb2R1bGVzL19jb3JlJyk7XG4iLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCIvKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbnZhciBieXRlVG9IZXggPSBbXTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4W2ldID0gKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1V1aWQoYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBvZmZzZXQgfHwgMDtcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcbiAgLy8gam9pbiB1c2VkIHRvIGZpeCBtZW1vcnkgaXNzdWUgY2F1c2VkIGJ5IGNvbmNhdGVuYXRpb246IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMxNzUjYzRcbiAgcmV0dXJuIChbYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXV0pLmpvaW4oJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xuIiwiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gIEluIHRoZVxuLy8gYnJvd3NlciB0aGlzIGlzIGEgbGl0dGxlIGNvbXBsaWNhdGVkIGR1ZSB0byB1bmtub3duIHF1YWxpdHkgb2YgTWF0aC5yYW5kb20oKVxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxuLy8gZmVhdHVyZS1kZXRlY3Rpb25cblxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvXG4vLyBpbXBsZW1lbnRhdGlvbi4gQWxzbywgZmluZCB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgY3J5cHRvIG9uIElFMTEuXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0bykpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZihtc0NyeXB0bykgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT0gJ2Z1bmN0aW9uJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xuXG5pZiAoZ2V0UmFuZG9tVmFsdWVzKSB7XG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xuICB2YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcbiAgICBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xuICAgIHJldHVybiBybmRzODtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIE1hdGgucmFuZG9tKCktYmFzZWQgKFJORylcbiAgLy9cbiAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHVzZSBNYXRoLnJhbmRvbSgpLiAgSXQncyBmYXN0LCBidXQgaXMgb2YgdW5zcGVjaWZpZWRcbiAgLy8gcXVhbGl0eS5cbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWF0aFJORygpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGlmICgoaSAmIDB4MDMpID09PSAwKSByID0gTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMDAwO1xuICAgICAgcm5kc1tpXSA9IHIgPj4+ICgoaSAmIDB4MDMpIDw8IDMpICYgMHhmZjtcbiAgICB9XG5cbiAgICByZXR1cm4gcm5kcztcbiAgfTtcbn1cbiIsInZhciBybmcgPSByZXF1aXJlKCcuL2xpYi9ybmcnKTtcbnZhciBieXRlc1RvVXVpZCA9IHJlcXVpcmUoJy4vbGliL2J5dGVzVG9VdWlkJyk7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcbiAgICBidWYgPSBvcHRpb25zID09PSAnYmluYXJ5JyA/IG5ldyBBcnJheSgxNikgOiBudWxsO1xuICAgIG9wdGlvbnMgPSBudWxsO1xuICB9XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcblxuICAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcbiAgcm5kc1s4XSA9IChybmRzWzhdICYgMHgzZikgfCAweDgwO1xuXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuICBpZiAoYnVmKSB7XG4gICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDE2OyArK2lpKSB7XG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWYgfHwgYnl0ZXNUb1V1aWQocm5kcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdjQ7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFRpbWVyIH0gZnJvbSAnLi9UaW1lci5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSA2MDsgLy8gc2Vjb25kc1xyXG5cclxuZXhwb3J0IGNsYXNzIEFjY2Vzc1Rva2VuRXZlbnRzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUsXHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyaW5nXCIpLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyZWRcIilcclxuICAgIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcgPSBhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXI7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkID0gYWNjZXNzVG9rZW5FeHBpcmVkVGltZXI7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZChjb250YWluZXIpIHtcclxuICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGV2ZW50cyBpZiB0aGVyZSdzIGFuIGFjY2VzcyB0b2tlbiBhbmQgaXQgaGFzIGFuIGV4cGlyYXRpb25cclxuICAgICAgICBpZiAoY29udGFpbmVyLmFjY2Vzc190b2tlbiAmJiBjb250YWluZXIuZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IGNvbnRhaW5lci5leHBpcmVzX2luO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiBhY2Nlc3MgdG9rZW4gcHJlc2VudCwgcmVtYWluaW5nIGR1cmF0aW9uOlwiLCBkdXJhdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHVyYXRpb24gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGV4cGlyaW5nIGlmIHdlIHN0aWxsIGhhdmUgdGltZVxyXG4gICAgICAgICAgICAgICAgbGV0IGV4cGlyaW5nID0gZHVyYXRpb24gLSB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuICAgICAgICAgICAgICAgIGlmIChleHBpcmluZyA8PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBleHBpcmluZyA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IHJlZ2lzdGVyaW5nIGV4cGlyaW5nIHRpbWVyIGluOlwiLCBleHBpcmluZyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmluaXQoZXhwaXJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogY2FuY2VsaW5nIGV4aXN0aW5nIGV4cGlyaW5nIHRpbWVyIGJlY2FzZSB3ZSdyZSBwYXN0IGV4cGlyYXRpb24uXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaWYgaXQncyBuZWdhdGl2ZSwgaXQgd2lsbCBzdGlsbCBmaXJlXHJcbiAgICAgICAgICAgIGxldCBleHBpcmVkID0gZHVyYXRpb24gKyAxO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiByZWdpc3RlcmluZyBleHBpcmVkIHRpbWVyIGluOlwiLCBleHBpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmluaXQoZXhwaXJlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQuY2FuY2VsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVubG9hZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy51bmxvYWQ6IGNhbmNlbGluZyBleGlzdGluZyBhY2Nlc3MgdG9rZW4gdGltZXJzXCIpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuY2FuY2VsKCk7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcoY2IpIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyhjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRJbnRlcnZhbCA9IDIwMDA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hlY2tTZXNzaW9uSUZyYW1lIHtcclxuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCBjbGllbnRfaWQsIHVybCwgaW50ZXJ2YWwsIHN0b3BPbkVycm9yID0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX3VybCA9IHVybDtcclxuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IGludGVydmFsIHx8IERlZmF1bHRJbnRlcnZhbDtcclxuICAgICAgICB0aGlzLl9zdG9wT25FcnJvciA9IHN0b3BPbkVycm9yO1xyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdXJsLmluZGV4T2YoXCIvXCIsIHVybC5pbmRleE9mKFwiLy9cIikgKyAyKTtcclxuICAgICAgICB0aGlzLl9mcmFtZV9vcmlnaW4gPSB1cmwuc3Vic3RyKDAsIGlkeCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUud2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnNyYyA9IHVybDtcclxuICAgIH1cclxuICAgIGxvYWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCA9IHRoaXMuX21lc3NhZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfbWVzc2FnZShlKSB7XHJcbiAgICAgICAgaWYgKGUub3JpZ2luID09PSB0aGlzLl9mcmFtZV9vcmlnaW4gJiZcclxuICAgICAgICAgICAgZS5zb3VyY2UgPT09IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3dcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKGUuZGF0YSA9PT0gXCJlcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJDaGVja1Nlc3Npb25JRnJhbWU6IGVycm9yIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdG9wT25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGUuZGF0YSA9PT0gXCJjaGFuZ2VkXCIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZTogY2hhbmdlZCBtZXNzYWdlIGZyb20gY2hlY2sgc2Vzc2lvbiBvcCBpZnJhbWVcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWU6IFwiICsgZS5kYXRhICsgXCIgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhcnQoc2Vzc2lvbl9zdGF0ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uX3N0YXRlICE9PSBzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdGFydFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbl9zdGF0ZSA9IHNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgICAgICBsZXQgc2VuZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UodGhpcy5fY2xpZW50X2lkICsgXCIgXCIgKyB0aGlzLl9zZXNzaW9uX3N0YXRlLCB0aGlzLl9mcmFtZV9vcmlnaW4pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gdHJpZ2dlciBub3dcclxuICAgICAgICAgICAgc2VuZCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gYW5kIHNldHVwIHRpbWVyXHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gd2luZG93LnNldEludGVydmFsKHNlbmQsIHRoaXMuX2ludGVydmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zZXNzaW9uX3N0YXRlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdG9wXCIpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IENvcmRvdmFQb3B1cFdpbmRvdyB9IGZyb20gJy4vQ29yZG92YVBvcHVwV2luZG93LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKHBhcmFtcykge1xyXG4gICAgICAgIHBhcmFtcy5wb3B1cFdpbmRvd0ZlYXR1cmVzID0gJ2hpZGRlbj15ZXMnO1xyXG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBDb3Jkb3ZhUG9wdXBXaW5kb3cocGFyYW1zKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBXaW5kb3cgfSBmcm9tICcuL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZG92YVBvcHVwTmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKHBhcmFtcykge1xyXG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBDb3Jkb3ZhUG9wdXBXaW5kb3cocGFyYW1zKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHpvb209bm8nO1xyXG5jb25zdCBEZWZhdWx0UG9wdXBUYXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvcmRvdmFQb3B1cFdpbmRvdyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5mZWF0dXJlcyA9IHBhcmFtcy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IERlZmF1bHRQb3B1cEZlYXR1cmVzO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gcGFyYW1zLnBvcHVwV2luZG93VGFyZ2V0IHx8IERlZmF1bHRQb3B1cFRhcmdldDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnJlZGlyZWN0X3VyaSA9IHBhcmFtcy5zdGFydFVybDtcclxuICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3cuY3RvcjogcmVkaXJlY3RfdXJpOiBcIiArIHRoaXMucmVkaXJlY3RfdXJpKTtcclxuICAgIH1cclxuXHJcbiAgICBfaXNJbkFwcEJyb3dzZXJJbnN0YWxsZWQoY29yZG92YU1ldGFkYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcImNvcmRvdmEtcGx1Z2luLWluYXBwYnJvd3NlclwiLCBcImNvcmRvdmEtcGx1Z2luLWluYXBwYnJvd3Nlci5pbmFwcGJyb3dzZXJcIiwgXCJvcmcuYXBhY2hlLmNvcmRvdmEuaW5hcHBicm93c2VyXCJdLnNvbWUoZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvcmRvdmFNZXRhZGF0YS5oYXNPd25Qcm9wZXJ0eShuYW1lKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghd2luZG93LmNvcmRvdmEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvcihcImNvcmRvdmEgaXMgdW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBjb3Jkb3ZhTWV0YWRhdGEgPSB3aW5kb3cuY29yZG92YS5yZXF1aXJlKFwiY29yZG92YS9wbHVnaW5fbGlzdFwiKS5tZXRhZGF0YTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW5BcHBCcm93c2VySW5zdGFsbGVkKGNvcmRvdmFNZXRhZGF0YSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3IoXCJJbkFwcEJyb3dzZXIgcGx1Z2luIG5vdCBmb3VuZFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwID0gY29yZG92YS5JbkFwcEJyb3dzZXIub3BlbihwYXJhbXMudXJsLCB0aGlzLnRhcmdldCwgdGhpcy5mZWF0dXJlcyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wb3B1cCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93Lm5hdmlnYXRlOiBwb3B1cCBzdWNjZXNzZnVsbHkgY3JlYXRlZFwiKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQgPSB0aGlzLl9leGl0Q2FsbGJhY2suYmluZCh0aGlzKTsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50ID0gdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wdXAuYWRkRXZlbnRMaXN0ZW5lcihcImV4aXRcIiwgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVwLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2Fkc3RhcnRcIiwgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJFcnJvciBvcGVuaW5nIHBvcHVwIHdpbmRvd1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9taXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkU3RhcnRDYWxsYmFjayhldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC51cmwuaW5kZXhPZih0aGlzLnJlZGlyZWN0X3VyaSkgPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogZXZlbnQudXJsIH0pO1xyXG4gICAgICAgIH0gICAgXHJcbiAgICB9XHJcbiAgICBfZXhpdENhbGxiYWNrKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9lcnJvcihtZXNzYWdlKTsgICAgXHJcbiAgICB9XHJcbiAgICBcclxuICAgIF9zdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdzogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGNvcmRvdmEgcG9wdXAgd2luZG93XCIpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBfZXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuXHJcbiAgICAgICAgTG9nLmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBfY2xlYW51cCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcG9wdXApe1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3c6IGNsZWFuaW5nIHVwIHBvcHVwXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXhpdFwiLCB0aGlzLl9leGl0Q2FsbGJhY2tFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZHN0YXJ0XCIsIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcG9wdXAgPSBudWxsO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFcnJvclJlc3BvbnNlIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3Ioe2Vycm9yLCBlcnJvcl9kZXNjcmlwdGlvbiwgZXJyb3JfdXJpLCBzdGF0ZX09e31cclxuICAgICkge1xyXG4gICAgICAgICBpZiAoIWVycm9yKXtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiTm8gZXJyb3IgcGFzc2VkIHRvIEVycm9yUmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVycm9yXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3VwZXIoZXJyb3JfZGVzY3JpcHRpb24gfHwgZXJyb3IpO1xyXG5cclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkVycm9yUmVzcG9uc2VcIjtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBlcnJvcl9kZXNjcmlwdGlvbjtcclxuICAgICAgICB0aGlzLmVycm9yX3VyaSA9IGVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFdmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IobmFtZSkge1xyXG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEhhbmRsZXIoY2IpIHtcclxuICAgICAgICB0aGlzLl9jYWxsYmFja3MucHVzaChjYik7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSGFuZGxlcihjYikge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jYWxsYmFja3MuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gY2IpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3Muc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJhaXNlKC4uLnBhcmFtcykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkV2ZW50OiBSYWlzaW5nIGV2ZW50OiBcIiArIHRoaXMuX25hbWUpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1tpXSguLi5wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5jb25zdCB0aW1lciA9IHtcclxuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoY2IsIGR1cmF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsKGNiLCBkdXJhdGlvbik7XHJcbiAgICB9LFxyXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xyXG4gICAgICAgIHJldHVybiBjbGVhckludGVydmFsKGhhbmRsZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5sZXQgdGVzdGluZyA9IGZhbHNlO1xyXG5sZXQgcmVxdWVzdCA9IG51bGw7XHJcblxyXG5leHBvcnQgY2xhc3MgR2xvYmFsIHtcclxuXHJcbiAgICBzdGF0aWMgX3Rlc3RpbmcoKSB7XHJcbiAgICAgICAgdGVzdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsb2NhdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGxvY2FsU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBzZXNzaW9uU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2V0WE1MSHR0cFJlcXVlc3QobmV3UmVxdWVzdCkge1xyXG4gICAgICAgIHJlcXVlc3QgPSBuZXdSZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgWE1MSHR0cFJlcXVlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0IHx8IFhNTEh0dHBSZXF1ZXN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHRpbWVyKCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGltZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSUZyYW1lV2luZG93IH0gZnJvbSAnLi9JRnJhbWVXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgZnJhbWUgPSBuZXcgSUZyYW1lV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmcmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lTmF2aWdhdG9yLmNhbGxiYWNrXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50KHVybCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0VGltZW91dCA9IDEwMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZVdpbmRvdyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUud2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2ZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gcGFyYW1zLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IERlZmF1bHRUaW1lb3V0O1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubmF2aWdhdGU6IFVzaW5nIHRpbWVvdXQgb2Y6XCIsIHRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuX3RpbWVvdXQuYmluZCh0aGlzKSwgdGltZW91dCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLnNyYyA9IHBhcmFtcy51cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9taXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdzogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGZyYW1lIHdpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdzogY2xlYW51cFwiKTtcclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcclxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3RpbWVvdXQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93LnRpbWVvdXRcIik7XHJcbiAgICAgICAgdGhpcy5fZXJyb3IoXCJGcmFtZSB3aW5kb3cgdGltZWQgb3V0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIF9tZXNzYWdlKGUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubWVzc2FnZVwiKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyICYmXHJcbiAgICAgICAgICAgIGUub3JpZ2luID09PSB0aGlzLl9vcmlnaW4gJiZcclxuICAgICAgICAgICAgZS5zb3VyY2UgPT09IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3dcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IHVybCA9IGUuZGF0YTtcclxuICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogdXJsIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIGZyb20gZnJhbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9vcmlnaW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbm90aWZ5UGFyZW50KHVybCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5ub3RpZnlQYXJlbnRcIik7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50OiBwb3N0aW5nIHVybCBtZXNzYWdlIHRvIHBhcmVudFwiKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UodXJsLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJbk1lbW9yeVdlYlN0b3JhZ2V7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtKGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5nZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJdGVtKGtleSwgdmFsdWUpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5zZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgdGhpcy5fZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSXRlbShrZXkpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5yZW1vdmVJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9kYXRhKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAga2V5KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX2RhdGEpW2luZGV4XTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0gZnJvbSAnLi9jcnlwdG8vanNyc2FzaWduJztcclxuaW1wb3J0IGdldEpvc2VVdGlsIGZyb20gJy4vSm9zZVV0aWxJbXBsJztcclxuXHJcbmV4cG9ydCBjb25zdCBKb3NlVXRpbCA9IGdldEpvc2VVdGlsKHsgandzLCBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXgsIEFsbG93ZWRTaWduaW5nQWxncyB9KTtcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pIHtcclxuICAgIHJldHVybiBjbGFzcyBKb3NlVXRpbCB7XHJcblxyXG4gICAgICAgIHN0YXRpYyBwYXJzZUp3dChqd3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwucGFyc2VKd3RcIik7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBqd3MuSldTLnBhcnNlKGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogdG9rZW4uaGVhZGVyT2JqLFxyXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRva2VuLnBheWxvYWRPYmpcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3Qoand0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwudmFsaWRhdGVKd3RcIik7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleS5rdHkgPT09IFwiUlNBXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmUgJiYga2V5Lm4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS54NWMgJiYga2V5Lng1Yy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IGI2NHRvaGV4KGtleS54NWNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGhleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lmt0eSA9PT0gXCJFQ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5jcnYgJiYga2V5LnggJiYga2V5LnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogRUMga2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJFQyBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFVuc3VwcG9ydGVkIGtleSB0eXBlXCIsIGtleSAmJiBrZXkua3R5KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2V5IHR5cGU6IFwiICsga2V5ICYmIGtleS5rdHkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwuX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUgJiYgZS5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiSldUIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWNsb2NrU2tldykge1xyXG4gICAgICAgICAgICAgICAgY2xvY2tTa2V3ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFub3cpIHtcclxuICAgICAgICAgICAgICAgIG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBKb3NlVXRpbC5wYXJzZUp3dChqd3QpLnBheWxvYWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQuaXNzKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGF5bG9hZC5pc3MgIT09IGlzc3Vlcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBJbnZhbGlkIGlzc3VlciBpbiB0b2tlblwiLCBwYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBpc3N1ZXIgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5pc3MpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF1ZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBhdWQgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdWQgd2FzIG5vdCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHZhbGlkQXVkaWVuY2UgPSBwYXlsb2FkLmF1ZCA9PT0gYXVkaWVuY2UgfHwgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdWQpICYmIHBheWxvYWQuYXVkLmluZGV4T2YoYXVkaWVuY2UpID49IDApO1xyXG4gICAgICAgICAgICBpZiAoIXZhbGlkQXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlblwiLCBwYXlsb2FkLmF1ZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlbjogXCIgKyBwYXlsb2FkLmF1ZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gYXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhenAgaW4gdG9rZW5cIiwgcGF5bG9hZC5henApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgYXpwIGluIHRva2VuOiBcIiArIHBheWxvYWQuYXpwKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGltZUluc2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG93ZXJOb3cgPSBub3cgKyBjbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXBwZXJOb3cgPSBub3cgLSBjbG9ja1NrZXc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlhdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogaWF0IHdhcyBub3QgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsb3dlck5vdyA8IHBheWxvYWQuaWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpYXQgaXMgaW4gdGhlIGZ1dHVyZVwiLCBwYXlsb2FkLmlhdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCBpcyBpbiB0aGUgZnV0dXJlOiBcIiArIHBheWxvYWQuaWF0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubmJmICYmIGxvd2VyTm93IDwgcGF5bG9hZC5uYmYpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IG5iZiBpcyBpbiB0aGUgZnV0dXJlXCIsIHBheWxvYWQubmJmKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibmJmIGlzIGluIHRoZSBmdXR1cmU6IFwiICsgcGF5bG9hZC5uYmYpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZXhwIHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZXhwIDwgdXBwZXJOb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGV4cCBpcyBpbiB0aGUgcGFzdFwiLCBwYXlsb2FkLmV4cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImV4cCBpcyBpbiB0aGUgcGFzdDpcIiArIHBheWxvYWQuZXhwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd3MuSldTLnZlcmlmeShqd3QsIGtleSwgQWxsb3dlZFNpZ25pbmdBbGdzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IHNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhhc2hTdHJpbmcodmFsdWUsIGFsZykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5VdGlsLmhhc2hTdHJpbmcodmFsdWUsIGFsZyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhleFRvQmFzZTY0VXJsKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaGV4dG9iNjR1KHZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZW50VHlwZXMgPSBudWxsLCBcclxuICAgICAgICBYTUxIdHRwUmVxdWVzdEN0b3IgPSBHbG9iYWwuWE1MSHR0cFJlcXVlc3QsIFxyXG4gICAgICAgIGp3dEhhbmRsZXIgPSBudWxsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbENvbnRlbnRUeXBlcyAmJiBBcnJheS5pc0FycmF5KGFkZGl0aW9uYWxDb250ZW50VHlwZXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzID0gYWRkaXRpb25hbENvbnRlbnRUeXBlcy5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGVudFR5cGVzLnB1c2goJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgICAgICBpZiAoand0SGFuZGxlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMucHVzaCgnYXBwbGljYXRpb24vand0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9YTUxIdHRwUmVxdWVzdCA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9qd3RIYW5kbGVyID0gand0SGFuZGxlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRKc29uKHVybCwgdG9rZW4pIHtcclxuICAgICAgICBpZiAoIXVybCl7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb24sIHVybDogXCIsIHVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFsbG93ZWRDb250ZW50VHlwZXMgPSB0aGlzLl9jb250ZW50VHlwZXM7XHJcbiAgICAgICAgICAgIHZhciBqd3RIYW5kbGVyID0gdGhpcy5fand0SGFuZGxlcjtcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb246IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCByZXEuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBcImFwcGxpY2F0aW9uL2p3dFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqd3RIYW5kbGVyKHJlcSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogbmV0d29yayBlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uOiB0b2tlbiBwYXNzZWQsIHNldHRpbmcgQXV0aG9yaXphdGlvbiBoZWFkZXJcIik7XHJcbiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIgKyB0b2tlbik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEZvcm0odXJsLCBwYXlsb2FkKSB7XHJcbiAgICAgICAgaWYgKCF1cmwpe1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UucG9zdEZvcm0sIHVybDogXCIsIHVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHJlcS5vcGVuKCdQT1NUJywgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhbGxvd2VkQ29udGVudFR5cGVzID0gdGhpcy5fY29udGVudFR5cGVzO1xyXG5cclxuICAgICAgICAgICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCByZXEuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UocmVxLnJlc3BvbnNlVGV4dCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gNDAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF5bG9hZCA9IEpTT04ucGFyc2UocmVxLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgZnJvbSBzZXJ2ZXI6IFwiLCBwYXlsb2FkLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihwYXlsb2FkLmVycm9yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihyZXEuc3RhdHVzVGV4dCArIFwiIChcIiArIHJlcS5zdGF0dXMgKyBcIilcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBuZXR3b3JrIGVycm9yXCIpO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiTmV0d29yayBFcnJvclwiKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBsZXQgYm9keSA9IFwiXCI7XHJcbiAgICAgICAgICAgIGZvcihsZXQga2V5IGluIHBheWxvYWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBwYXlsb2FkW2tleV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSArPSBcIiZcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSArPSBcIj1cIjtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xyXG4gICAgICAgICAgICByZXEuc2VuZChib2R5KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5sZXQgbm9wTG9nZ2VyID0ge1xyXG4gICAgZGVidWcoKXt9LFxyXG4gICAgaW5mbygpe30sXHJcbiAgICB3YXJuKCl7fSxcclxuICAgIGVycm9yKCl7fVxyXG59O1xyXG5cclxuY29uc3QgTk9ORSA9IDA7XHJcbmNvbnN0IEVSUk9SID0gMTtcclxuY29uc3QgV0FSTiA9IDI7XHJcbmNvbnN0IElORk8gPSAzO1xyXG5jb25zdCBERUJVRyA9IDQ7XHJcblxyXG5sZXQgbG9nZ2VyO1xyXG5sZXQgbGV2ZWw7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9nIHtcclxuICAgIHN0YXRpYyBnZXQgTk9ORSgpIHtyZXR1cm4gTk9ORX07XHJcbiAgICBzdGF0aWMgZ2V0IEVSUk9SKCkge3JldHVybiBFUlJPUn07XHJcbiAgICBzdGF0aWMgZ2V0IFdBUk4oKSB7cmV0dXJuIFdBUk59O1xyXG4gICAgc3RhdGljIGdldCBJTkZPKCkge3JldHVybiBJTkZPfTtcclxuICAgIHN0YXRpYyBnZXQgREVCVUcoKSB7cmV0dXJuIERFQlVHfTtcclxuICAgIFxyXG4gICAgc3RhdGljIHJlc2V0KCl7XHJcbiAgICAgICAgbGV2ZWwgPSBJTkZPO1xyXG4gICAgICAgIGxvZ2dlciA9IG5vcExvZ2dlcjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGdldCBsZXZlbCgpe1xyXG4gICAgICAgIHJldHVybiBsZXZlbDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzZXQgbGV2ZWwodmFsdWUpe1xyXG4gICAgICAgIGlmIChOT05FIDw9IHZhbHVlICYmIHZhbHVlIDw9IERFQlVHKXtcclxuICAgICAgICAgICAgbGV2ZWwgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nIGxldmVsXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGdldCBsb2dnZXIoKXtcclxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHNldCBsb2dnZXIodmFsdWUpe1xyXG4gICAgICAgIGlmICghdmFsdWUuZGVidWcgJiYgdmFsdWUuaW5mbykge1xyXG4gICAgICAgICAgICAvLyBqdXN0IHRvIHN0YXkgYmFja3dhcmRzIGNvbXBhdC4gY2FuIHJlbW92ZSBpbiAyLjBcclxuICAgICAgICAgICAgdmFsdWUuZGVidWcgPSB2YWx1ZS5pbmZvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlLmRlYnVnICYmIHZhbHVlLmluZm8gJiYgdmFsdWUud2FybiAmJiB2YWx1ZS5lcnJvcil7XHJcbiAgICAgICAgICAgIGxvZ2dlciA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsb2dnZXJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdGF0aWMgZGVidWcoLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IERFQlVHKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGluZm8oLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IElORk8pe1xyXG4gICAgICAgICAgICBsb2dnZXIuaW5mby5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyB3YXJuKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBXQVJOKXtcclxuICAgICAgICAgICAgbG9nZ2VyLndhcm4uYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZXJyb3IoLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IEVSUk9SKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5Mb2cucmVzZXQoKTtcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5cclxuY29uc3QgT2lkY01ldGFkYXRhVXJsUGF0aCA9ICcud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbic7XHJcblxyXG5leHBvcnQgY2xhc3MgTWV0YWRhdGFTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlOiBObyBzZXR0aW5ncyBwYXNzZWQgdG8gTWV0YWRhdGFTZXJ2aWNlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKFsnYXBwbGljYXRpb24vandrLXNldCtqc29uJ10pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtZXRhZGF0YVVybCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX21ldGFkYXRhVXJsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YVVybDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybCAmJiB0aGlzLl9tZXRhZGF0YVVybC5pbmRleE9mKE9pZGNNZXRhZGF0YVVybFBhdGgpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybFt0aGlzLl9tZXRhZGF0YVVybC5sZW5ndGggLSAxXSAhPT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9ICcvJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgKz0gT2lkY01ldGFkYXRhVXJsUGF0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1ldGFkYXRhKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IFJldHVybmluZyBtZXRhZGF0YSBmcm9tIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IE5vIGF1dGhvcml0eSBvciBtZXRhZGF0YVVybCBjb25maWd1cmVkIG9uIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXV0aG9yaXR5IG9yIG1ldGFkYXRhVXJsIGNvbmZpZ3VyZWQgb24gc2V0dGluZ3NcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBnZXR0aW5nIG1ldGFkYXRhIGZyb21cIiwgdGhpcy5tZXRhZGF0YVVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKHRoaXMubWV0YWRhdGFVcmwpXHJcbiAgICAgICAgICAgIC50aGVuKG1ldGFkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YToganNvbiByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhID0gbWV0YWRhdGE7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldElzc3VlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImlzc3VlclwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJhdXRob3JpemF0aW9uX2VuZHBvaW50XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJJbmZvRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJ1c2VyaW5mb19lbmRwb2ludFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUb2tlbkVuZHBvaW50KG9wdGlvbmFsPXRydWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInRva2VuX2VuZHBvaW50XCIsIG9wdGlvbmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGVja1Nlc3Npb25JZnJhbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJjaGVja19zZXNzaW9uX2lmcmFtZVwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbmRTZXNzaW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJlbmRfc2Vzc2lvbl9lbmRwb2ludFwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXZvY2F0aW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJyZXZvY2F0aW9uX2VuZHBvaW50XCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEtleXNFbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImp3a3NfdXJpXCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF9nZXRNZXRhZGF0YVByb3BlcnR5KG5hbWUsIG9wdGlvbmFsPWZhbHNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHkgZm9yOiBcIiArIG5hbWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogbWV0YWRhdGEgcmVjaWV2ZWRcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAobWV0YWRhdGFbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25hbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IE1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gb3B0aW9uYWwgcHJvcGVydHkgXCIgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IE1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gcHJvcGVydHkgXCIgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIHByb3BlcnR5IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YVtuYW1lXTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaWduaW5nS2V5cygpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBSZXR1cm5pbmcgc2lnbmluZ0tleXMgZnJvbSBzZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImp3a3NfdXJpXCIpLnRoZW4oandrc191cmkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IGp3a3NfdXJpIHJlY2VpdmVkXCIsIGp3a3NfdXJpKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKGp3a3NfdXJpKS50aGVuKGtleVNldCA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IGtleSBzZXQgcmVjZWl2ZWRcIiwga2V5U2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWtleVNldC5rZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBNaXNzaW5nIGtleXMgb24ga2V5c2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcga2V5cyBvbiBrZXlzZXRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMgPSBrZXlTZXQua2V5cztcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuL0Vycm9yUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5SZXF1ZXN0IH0gZnJvbSAnLi9TaWduaW5SZXF1ZXN0LmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVzcG9uc2UgfSBmcm9tICcuL1NpZ25pblJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgU2lnbm91dFJlcXVlc3QgfSBmcm9tICcuL1NpZ25vdXRSZXF1ZXN0LmpzJztcclxuaW1wb3J0IHsgU2lnbm91dFJlc3BvbnNlIH0gZnJvbSAnLi9TaWdub3V0UmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE9pZGNDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MgPSB7fSkge1xyXG4gICAgICAgIGlmIChzZXR0aW5ncyBpbnN0YW5jZW9mIE9pZGNDbGllbnRTZXR0aW5ncykge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBuZXcgT2lkY0NsaWVudFNldHRpbmdzKHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9zdGF0ZVN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnN0YXRlU3RvcmU7XHJcbiAgICB9XHJcbiAgICBnZXQgX3ZhbGlkYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy52YWxpZGF0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX21ldGFkYXRhU2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcclxuICAgIH1cclxuICAgIGdldCBtZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTaWduaW5SZXF1ZXN0KHtcclxuICAgICAgICByZXNwb25zZV90eXBlLCBzY29wZSwgcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIC8vIGRhdGEgd2FzIG1lYW50IHRvIGJlIHRoZSBwbGFjZSBhIGNhbGxlciBjb3VsZCBpbmRpY2F0ZSB0aGUgZGF0YSB0b1xyXG4gICAgICAgIC8vIGhhdmUgcm91bmQgdHJpcHBlZCwgYnV0IHBlb3BsZSB3ZXJlIGdldHRpbmcgY29uZnVzZWQsIHNvIGkgYWRkZWQgc3RhdGUgKHNpbmNlIHRoYXQgbWF0Y2hlcyB0aGUgc3BlYylcclxuICAgICAgICAvLyBhbmQgc28gbm93IGlmIGRhdGEgaXMgbm90IHBhc3NlZCwgYnV0IHN0YXRlIGlzIHRoZW4gc3RhdGUgd2lsbCBiZSB1c2VkXHJcbiAgICAgICAgZGF0YSwgc3RhdGUsIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcyxcclxuICAgICAgICByZXNvdXJjZSwgcmVxdWVzdCwgcmVxdWVzdF91cmksIHJlc3BvbnNlX21vZGUsIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSB9ID0ge30sXHJcbiAgICAgICAgc3RhdGVTdG9yZVxyXG4gICAgKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWduaW5SZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICBsZXQgY2xpZW50X2lkID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgIHJlc3BvbnNlX3R5cGUgPSByZXNwb25zZV90eXBlIHx8IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX3R5cGU7XHJcbiAgICAgICAgc2NvcGUgPSBzY29wZSB8fCB0aGlzLl9zZXR0aW5ncy5zY29wZTtcclxuICAgICAgICByZWRpcmVjdF91cmkgPSByZWRpcmVjdF91cmkgfHwgdGhpcy5fc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG5cclxuICAgICAgICAvLyBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50IGFyZW4ndCBhbGxvd2VkIG9uIF9zZXR0aW5nc1xyXG4gICAgICAgIHByb21wdCA9IHByb21wdCB8fCB0aGlzLl9zZXR0aW5ncy5wcm9tcHQ7XHJcbiAgICAgICAgZGlzcGxheSA9IGRpc3BsYXkgfHwgdGhpcy5fc2V0dGluZ3MuZGlzcGxheTtcclxuICAgICAgICBtYXhfYWdlID0gbWF4X2FnZSB8fCB0aGlzLl9zZXR0aW5ncy5tYXhfYWdlO1xyXG4gICAgICAgIHVpX2xvY2FsZXMgPSB1aV9sb2NhbGVzIHx8IHRoaXMuX3NldHRpbmdzLnVpX2xvY2FsZXM7XHJcbiAgICAgICAgYWNyX3ZhbHVlcyA9IGFjcl92YWx1ZXMgfHwgdGhpcy5fc2V0dGluZ3MuYWNyX3ZhbHVlcztcclxuICAgICAgICByZXNvdXJjZSA9IHJlc291cmNlIHx8IHRoaXMuX3NldHRpbmdzLnJlc291cmNlO1xyXG4gICAgICAgIHJlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlIHx8IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGU7XHJcbiAgICAgICAgZXh0cmFRdWVyeVBhcmFtcyA9IGV4dHJhUXVlcnlQYXJhbXMgfHwgdGhpcy5fc2V0dGluZ3MuZXh0cmFRdWVyeVBhcmFtcztcclxuXHJcbiAgICAgICAgbGV0IGF1dGhvcml0eSA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgaWYgKFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpICYmIHJlc3BvbnNlX3R5cGUgIT09IFwiY29kZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJPcGVuSUQgQ29ubmVjdCBoeWJyaWQgZmxvdyBpcyBub3Qgc3VwcG9ydGVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25pblJlcXVlc3Q6IFJlY2VpdmVkIGF1dGhvcml6YXRpb24gZW5kcG9pbnRcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBzaWduaW5SZXF1ZXN0ID0gbmV3IFNpZ25pblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50X2lkLFxyXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZSxcclxuICAgICAgICAgICAgICAgIHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGF1dGhvcml0eSxcclxuICAgICAgICAgICAgICAgIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcyxcclxuICAgICAgICAgICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlLCByZXNwb25zZV9tb2RlXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZ25pblN0YXRlID0gc2lnbmluUmVxdWVzdC5zdGF0ZTtcclxuICAgICAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZVN0b3JlLnNldChzaWduaW5TdGF0ZS5pZCwgc2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pblJlcXVlc3Q7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgcmVtb3ZlU3RhdGUgPSBmYWxzZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIGxldCB1c2VRdWVyeSA9IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGUgPT09IFwicXVlcnlcIiB8fCBcclxuICAgICAgICAgICAgKCF0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlICYmIFNpZ25pblJlcXVlc3QuaXNDb2RlKHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX3R5cGUpKTtcclxuICAgICAgICBsZXQgZGVsaW1pdGVyID0gdXNlUXVlcnkgPyBcIj9cIiA6IFwiI1wiO1xyXG5cclxuICAgICAgICB2YXIgcmVzcG9uc2UgPSBuZXcgU2lnbmluUmVzcG9uc2UodXJsLCBkZWxpbWl0ZXIpO1xyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIHN0YXRlIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3RhdGUgaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgdmFyIHN0YXRlQXBpID0gcmVtb3ZlU3RhdGUgPyBzdGF0ZVN0b3JlLnJlbW92ZS5iaW5kKHN0YXRlU3RvcmUpIDogc3RhdGVTdG9yZS5nZXQuYmluZChzdGF0ZVN0b3JlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0YXRlQXBpKHJlc3BvbnNlLnN0YXRlKS50aGVuKHN0b3JlZFN0YXRlU3RyaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzdG9yZWRTdGF0ZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5yZWFkU2lnbmluUmVzcG9uc2VTdGF0ZTogTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IFNpZ25pblN0YXRlLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JlZFN0YXRlU3RyaW5nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtzdGF0ZSwgcmVzcG9uc2V9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NTaWduaW5SZXNwb25zZSh1cmwsIHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWduaW5SZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25pblJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCB0cnVlKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWduaW5SZXNwb25zZTogUmVjZWl2ZWQgc3RhdGUgZnJvbSBzdG9yYWdlOyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTaWdub3V0UmVxdWVzdCh7aWRfdG9rZW5faGludCwgZGF0YSwgc3RhdGUsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlIH0gPSB7fSxcclxuICAgICAgICBzdGF0ZVN0b3JlXHJcbiAgICApIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5fc2V0dGluZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSBleHRyYVF1ZXJ5UGFyYW1zIHx8IHRoaXMuX3NldHRpbmdzLmV4dHJhUXVlcnlQYXJhbXM7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0RW5kU2Vzc2lvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdDogTm8gZW5kIHNlc3Npb24gZW5kcG9pbnQgdXJsIHJldHVybmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZW5kIHNlc3Npb24gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFJlY2VpdmVkIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IG5ldyBTaWdub3V0UmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgICAgICBpZF90b2tlbl9oaW50LFxyXG4gICAgICAgICAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGV4dHJhUXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0X3R5cGVcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2lnbm91dFN0YXRlID0gcmVxdWVzdC5zdGF0ZTtcclxuICAgICAgICAgICAgaWYgKHNpZ25vdXRTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdDogU2lnbm91dCByZXF1ZXN0IGhhcyBzdGF0ZSB0byBwZXJzaXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZVN0b3JlLnNldChzaWdub3V0U3RhdGUuaWQsIHNpZ25vdXRTdGF0ZS50b1N0b3JhZ2VTdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHJlbW92ZVN0YXRlID0gZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZVwiKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25vdXRSZXNwb25zZSh1cmwpO1xyXG4gICAgICAgIGlmICghcmVzcG9uc2Uuc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGU6IE5vIHN0YXRlIGluIHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cud2FybihcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBSZXNwb25zZSB3YXMgZXJyb3I6IFwiLCByZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7dW5kZWZpbmVkLCByZXNwb25zZX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXRlS2V5ID0gcmVzcG9uc2Uuc3RhdGU7XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XHJcbiAgICAgICAgcmV0dXJuIHN0YXRlQXBpKHN0YXRlS2V5KS50aGVuKHN0b3JlZFN0YXRlU3RyaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzdG9yZWRTdGF0ZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBTdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhzdG9yZWRTdGF0ZVN0cmluZyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge3N0YXRlLCByZXNwb25zZX07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2Vzc1NpZ25vdXRSZXNwb25zZSh1cmwsIHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWdub3V0UmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHRydWUpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZTogUmVjZWl2ZWQgc3RhdGUgZnJvbSBzdG9yYWdlOyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJTdGFsZVN0YXRlKHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNsZWFyU3RhbGVTdGF0ZVwiKTtcclxuXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFN0YXRlLmNsZWFyU3RhbGVTdGF0ZShzdGF0ZVN0b3JlLCB0aGlzLnNldHRpbmdzLnN0YWxlU3RhdGVBZ2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgV2ViU3RvcmFnZVN0YXRlU3RvcmUgfSBmcm9tICcuL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzJztcclxuaW1wb3J0IHsgUmVzcG9uc2VWYWxpZGF0b3IgfSBmcm9tICcuL1Jlc3BvbnNlVmFsaWRhdG9yLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5cclxuY29uc3QgT2lkY01ldGFkYXRhVXJsUGF0aCA9ICcud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbic7XHJcblxyXG5jb25zdCBEZWZhdWx0UmVzcG9uc2VUeXBlID0gXCJpZF90b2tlblwiO1xyXG5jb25zdCBEZWZhdWx0U2NvcGUgPSBcIm9wZW5pZFwiO1xyXG5jb25zdCBEZWZhdWx0U3RhbGVTdGF0ZUFnZSA9IDYwICogMTU7IC8vIHNlY29uZHNcclxuY29uc3QgRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyA9IDYwICogNTtcclxuXHJcbmV4cG9ydCBjbGFzcyBPaWRjQ2xpZW50U2V0dGluZ3Mge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIC8vIG1ldGFkYXRhIHJlbGF0ZWRcclxuICAgICAgICBhdXRob3JpdHksIG1ldGFkYXRhVXJsLCBtZXRhZGF0YSwgc2lnbmluZ0tleXMsXHJcbiAgICAgICAgLy8gY2xpZW50IHJlbGF0ZWRcclxuICAgICAgICBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHJlc3BvbnNlX3R5cGUgPSBEZWZhdWx0UmVzcG9uc2VUeXBlLCBzY29wZSA9IERlZmF1bHRTY29wZSxcclxuICAgICAgICByZWRpcmVjdF91cmksIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICAvLyBvcHRpb25hbCBwcm90b2NvbFxyXG4gICAgICAgIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgYWNyX3ZhbHVlcywgcmVzb3VyY2UsIHJlc3BvbnNlX21vZGUsXHJcbiAgICAgICAgLy8gYmVoYXZpb3IgZmxhZ3NcclxuICAgICAgICBmaWx0ZXJQcm90b2NvbENsYWltcyA9IHRydWUsIGxvYWRVc2VySW5mbyA9IHRydWUsXHJcbiAgICAgICAgc3RhbGVTdGF0ZUFnZSA9IERlZmF1bHRTdGFsZVN0YXRlQWdlLCBjbG9ja1NrZXcgPSBEZWZhdWx0Q2xvY2tTa2V3SW5TZWNvbmRzLFxyXG4gICAgICAgIHVzZXJJbmZvSnd0SXNzdWVyID0gJ09QJyxcclxuICAgICAgICAvLyBvdGhlciBiZWhhdmlvclxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBuZXcgV2ViU3RvcmFnZVN0YXRlU3RvcmUoKSxcclxuICAgICAgICBSZXNwb25zZVZhbGlkYXRvckN0b3IgPSBSZXNwb25zZVZhbGlkYXRvcixcclxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgICAgIC8vIGV4dHJhIHF1ZXJ5IHBhcmFtc1xyXG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSB7fVxyXG4gICAgfSA9IHt9KSB7XHJcblxyXG4gICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IGF1dGhvcml0eTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IG1ldGFkYXRhVXJsO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhID0gbWV0YWRhdGE7XHJcbiAgICAgICAgdGhpcy5fc2lnbmluZ0tleXMgPSBzaWduaW5nS2V5cztcclxuXHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX3R5cGUgPSByZXNwb25zZV90eXBlO1xyXG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJvbXB0ID0gcHJvbXB0O1xyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXkgPSBkaXNwbGF5O1xyXG4gICAgICAgIHRoaXMuX21heF9hZ2UgPSBtYXhfYWdlO1xyXG4gICAgICAgIHRoaXMuX3VpX2xvY2FsZXMgPSB1aV9sb2NhbGVzO1xyXG4gICAgICAgIHRoaXMuX2Fjcl92YWx1ZXMgPSBhY3JfdmFsdWVzO1xyXG4gICAgICAgIHRoaXMuX3Jlc291cmNlID0gcmVzb3VyY2U7XHJcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VfbW9kZSA9IHJlc3BvbnNlX21vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zID0gISFmaWx0ZXJQcm90b2NvbENsYWltcztcclxuICAgICAgICB0aGlzLl9sb2FkVXNlckluZm8gPSAhIWxvYWRVc2VySW5mbztcclxuICAgICAgICB0aGlzLl9zdGFsZVN0YXRlQWdlID0gc3RhbGVTdGF0ZUFnZTtcclxuICAgICAgICB0aGlzLl9jbG9ja1NrZXcgPSBjbG9ja1NrZXc7XHJcbiAgICAgICAgdGhpcy5fdXNlckluZm9Kd3RJc3N1ZXIgPSB1c2VySW5mb0p3dElzc3VlcjtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmU7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdG9yID0gbmV3IFJlc3BvbnNlVmFsaWRhdG9yQ3Rvcih0aGlzKTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHR5cGVvZiBleHRyYVF1ZXJ5UGFyYW1zID09PSAnb2JqZWN0JyA/IGV4dHJhUXVlcnlQYXJhbXMgOiB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjbGllbnQgY29uZmlnXHJcbiAgICBnZXQgY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgY2xpZW50X2lkKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgLy8gb25lLXRpbWUgc2V0IG9ubHlcclxuICAgICAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50U2V0dGluZ3Muc2V0X2NsaWVudF9pZDogY2xpZW50X2lkIGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNsaWVudF9pZCBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBjbGllbnRfc2VjcmV0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfc2VjcmV0O1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlc3BvbnNlX3R5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlX3R5cGU7XHJcbiAgICB9XHJcbiAgICBnZXQgc2NvcGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njb3BlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3RfdXJpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBvcHRpb25hbCBwcm90b2NvbCBwYXJhbXNcclxuICAgIGdldCBwcm9tcHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21wdDtcclxuICAgIH1cclxuICAgIGdldCBkaXNwbGF5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5O1xyXG4gICAgfVxyXG4gICAgZ2V0IG1heF9hZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heF9hZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgdWlfbG9jYWxlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdWlfbG9jYWxlcztcclxuICAgIH1cclxuICAgIGdldCBhY3JfdmFsdWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3JfdmFsdWVzO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlc291cmNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZTtcclxuICAgIH1cclxuICAgIGdldCByZXNwb25zZV9tb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV9tb2RlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBtZXRhZGF0YVxyXG4gICAgZ2V0IGF1dGhvcml0eSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0aG9yaXR5O1xyXG4gICAgfVxyXG4gICAgc2V0IGF1dGhvcml0eSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIC8vIG9uZS10aW1lIHNldCBvbmx5XHJcbiAgICAgICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudFNldHRpbmdzLnNldF9hdXRob3JpdHk6IGF1dGhvcml0eSBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHkgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuYXV0aG9yaXR5O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsICYmIHRoaXMuX21ldGFkYXRhVXJsLmluZGV4T2YoT2lkY01ldGFkYXRhVXJsUGF0aCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmxbdGhpcy5fbWV0YWRhdGFVcmwubGVuZ3RoIC0gMV0gIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9ICcvJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9IE9pZGNNZXRhZGF0YVVybFBhdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXR0YWJsZS9jYWNoYWJsZSBtZXRhZGF0YSB2YWx1ZXNcclxuICAgIGdldCBtZXRhZGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGE7XHJcbiAgICB9XHJcbiAgICBzZXQgbWV0YWRhdGEodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaWduaW5nS2V5cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluZ0tleXM7XHJcbiAgICB9XHJcbiAgICBzZXQgc2lnbmluZ0tleXModmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9zaWduaW5nS2V5cyA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGJlaGF2aW9yIGZsYWdzXHJcbiAgICBnZXQgZmlsdGVyUHJvdG9jb2xDbGFpbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zO1xyXG4gICAgfVxyXG4gICAgZ2V0IGxvYWRVc2VySW5mbygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXJJbmZvO1xyXG4gICAgfVxyXG4gICAgZ2V0IHN0YWxlU3RhdGVBZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWxlU3RhdGVBZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xvY2tTa2V3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9ja1NrZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgdXNlckluZm9Kd3RJc3N1ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJJbmZvSnd0SXNzdWVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzdGF0ZVN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZVN0b3JlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbGlkYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhU2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGV4dHJhIHF1ZXJ5IHBhcmFtc1xyXG4gICAgZ2V0IGV4dHJhUXVlcnlQYXJhbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXM7XHJcbiAgICB9XHJcbiAgICBzZXQgZXh0cmFRdWVyeVBhcmFtcyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKXtcclxuICAgICAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBQb3B1cFdpbmRvdyB9IGZyb20gJy4vUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvcHVwTmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKHBhcmFtcykge1xyXG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBQb3B1cFdpbmRvdyhwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9wdXApO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxiYWNrKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwTmF2aWdhdG9yLmNhbGxiYWNrXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXIodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcblxyXG5jb25zdCBDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwgPSA1MDA7XHJcbmNvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sd2lkdGg9NTAwLGhlaWdodD01MDAsbGVmdD0xMDAsdG9wPTEwMDsnO1xyXG4vL2NvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sd2lkdGg9NTAwLGhlaWdodD01MDAsbGVmdD0xMDAsdG9wPTEwMDtyZXNpemFibGU9eWVzJztcclxuXHJcbmNvbnN0IERlZmF1bHRQb3B1cFRhcmdldCA9IFwiX2JsYW5rXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9wdXBXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXQgPSBwYXJhbXMucG9wdXBXaW5kb3dUYXJnZXQgfHwgRGVmYXVsdFBvcHVwVGFyZ2V0O1xyXG4gICAgICAgIGxldCBmZWF0dXJlcyA9IHBhcmFtcy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IERlZmF1bHRQb3B1cEZlYXR1cmVzO1xyXG5cclxuICAgICAgICB0aGlzLl9wb3B1cCA9IHdpbmRvdy5vcGVuKCcnLCB0YXJnZXQsIGZlYXR1cmVzKTtcclxuICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY3RvcjogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkLmJpbmQodGhpcyksIENoZWNrRm9yUG9wdXBDbG9zZWRJbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9taXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogbm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93Lm5hdmlnYXRlOiBTZXR0aW5nIFVSTCBpbiBwb3B1cFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2lkID0gcGFyYW1zLmlkO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faWQpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvd1tcInBvcHVwQ2FsbGJhY2tfXCIgKyBwYXJhbXMuaWRdID0gdGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAuZm9jdXMoKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAud2luZG93LmxvY2F0aW9uID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX3N1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrOiBTdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gcG9wdXAgd2luZG93XCIpO1xyXG5cclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZShkYXRhKTtcclxuICAgIH1cclxuICAgIF9lcnJvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgTG9nLmVycm9yKFwiUG9wdXBXaW5kb3cuZXJyb3I6IFwiLCBtZXNzYWdlKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICAgICAgdGhpcy5fcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoa2VlcE9wZW4pIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jbGVhbnVwXCIpO1xyXG5cclxuICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIpO1xyXG4gICAgICAgIHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciA9IG51bGw7XHJcblxyXG4gICAgICAgIGRlbGV0ZSB3aW5kb3dbXCJwb3B1cENhbGxiYWNrX1wiICsgdGhpcy5faWRdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcG9wdXAgJiYgIWtlZXBPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfY2hlY2tGb3JQb3B1cENsb3NlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcHVwIHx8IHRoaXMuX3BvcHVwLmNsb3NlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIlBvcHVwIHdpbmRvdyBjbG9zZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cChrZWVwT3Blbik7XHJcblxyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2sgc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogdXJsIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2s6IEludmFsaWQgcmVzcG9uc2UgZnJvbSBwb3B1cFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIGZyb20gcG9wdXBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBub3RpZnlPcGVuZXIodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5vcGVuZXIpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIGRlbGltaXRlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IFwicG9wdXBDYWxsYmFja19cIiArIGRhdGEuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gd2luZG93Lm9wZW5lcltuYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBwYXNzaW5nIHVybCBtZXNzYWdlIHRvIG9wZW5lclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodXJsLCBrZWVwT3Blbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gbWF0Y2hpbmcgY2FsbGJhY2sgZm91bmQgb24gb3BlbmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyBzdGF0ZSBmb3VuZCBpbiByZXNwb25zZSB1cmxcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyB3aW5kb3cub3BlbmVyLiBDYW4ndCBjb21wbGV0ZSBub3RpZmljYXRpb24uXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVkaXJlY3ROYXZpZ2F0b3Ige1xyXG5cclxuICAgIHByZXBhcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZWRpcmVjdE5hdmlnYXRvci5uYXZpZ2F0ZTogTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYXJhbXMudXNlUmVwbGFjZVRvTmF2aWdhdGUpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UocGFyYW1zLnVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBwYXJhbXMudXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1cmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBVc2VySW5mb1NlcnZpY2UgfSBmcm9tICcuL1VzZXJJbmZvU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IFRva2VuQ2xpZW50IH0gZnJvbSAnLi9Ub2tlbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuL0Vycm9yUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuY29uc3QgUHJvdG9jb2xDbGFpbXMgPSBbXCJub25jZVwiLCBcImF0X2hhc2hcIiwgXCJpYXRcIiwgXCJuYmZcIiwgXCJleHBcIiwgXCJhdWRcIiwgXCJpc3NcIiwgXCJjX2hhc2hcIl07XHJcblxyXG5leHBvcnQgY2xhc3MgUmVzcG9uc2VWYWxpZGF0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBcclxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgICAgIFVzZXJJbmZvU2VydmljZUN0b3IgPSBVc2VySW5mb1NlcnZpY2UsIFxyXG4gICAgICAgIGpvc2VVdGlsID0gSm9zZVV0aWwsXHJcbiAgICAgICAgVG9rZW5DbGllbnRDdG9yID0gVG9rZW5DbGllbnQpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZCB0byBSZXNwb25zZVZhbGlkYXRvclwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl91c2VySW5mb1NlcnZpY2UgPSBuZXcgVXNlckluZm9TZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcclxuICAgICAgICB0aGlzLl90b2tlbkNsaWVudCA9IG5ldyBUb2tlbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlU2lnbmluUmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NTaWduaW5QYXJhbXMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZTogc3RhdGUgcHJvY2Vzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVUb2tlbnMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IHRva2VucyB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0NsYWltcyhyZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZTogY2xhaW1zIHByb2Nlc3NlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGVTaWdub3V0UmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHN0YXRlLmlkICE9PSByZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogU3RhdGUgZG9lcyBub3QgbWF0Y2hcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IHRoZSBzdGF0ZSBtYXRjaGVzLCB0YWtlIHRoZSBzdG9yZWQgZGF0YVxyXG4gICAgICAgIC8vIGFuZCBzZXQgaXQgaW50byB0aGUgcmVzcG9uc2Ugc28gY2FsbGVycyBjYW4gZ2V0IHRoZWlyIHN0YXRlXHJcbiAgICAgICAgLy8gdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGJvdGggc3VjY2VzcyAmIGVycm9yIG91dGNvbWVzXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IHN0YXRlIHZhbGlkYXRlZFwiKTtcclxuICAgICAgICByZXNwb25zZS5zdGF0ZSA9IHN0YXRlLmRhdGE7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBSZXNwb25zZSB3YXMgZXJyb3JcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzU2lnbmluUGFyYW1zKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChzdGF0ZS5pZCAhPT0gcmVzcG9uc2Uuc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IFN0YXRlIGRvZXMgbm90IG1hdGNoXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiU3RhdGUgZG9lcyBub3QgbWF0Y2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vIGNsaWVudF9pZCBvbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGNsaWVudF9pZCBvbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXN0YXRlLmF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm8gYXV0aG9yaXR5IG9uIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXV0aG9yaXR5IG9uIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoaXMgYWxsb3dzIHRoZSBhdXRob3JpdHkgdG8gYmUgbG9hZGVkIGZyb20gdGhlIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGlmICghdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSA9IHN0YXRlLmF1dGhvcml0eTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZW5zdXJlIHdlJ3JlIHVzaW5nIHRoZSBjb3JyZWN0IGF1dGhvcml0eSBpZiB0aGUgYXV0aG9yaXR5IGlzIG5vdCBsb2FkZWQgZnJvbSBzaWduaW4gc3RhdGVcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgJiYgdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ICE9PSBzdGF0ZS5hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IGF1dGhvcml0eSBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXV0aG9yaXR5IG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzIGFsbG93cyB0aGUgY2xpZW50X2lkIHRvIGJlIGxvYWRlZCBmcm9tIHRoZSBzaWduaW4gc3RhdGVcclxuICAgICAgICBpZiAoIXRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgPSBzdGF0ZS5jbGllbnRfaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVuc3VyZSB3ZSdyZSB1c2luZyB0aGUgY29ycmVjdCBjbGllbnRfaWQgaWYgdGhlIGNsaWVudF9pZCBpcyBub3QgbG9hZGVkIGZyb20gc2lnbmluIHN0YXRlXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkICYmIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCAhPT0gc3RhdGUuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBjbGllbnRfaWQgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImNsaWVudF9pZCBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgdGhlIHN0YXRlIG1hdGNoZXMsIHRha2UgdGhlIHN0b3JlZCBkYXRhXHJcbiAgICAgICAgLy8gYW5kIHNldCBpdCBpbnRvIHRoZSByZXNwb25zZSBzbyBjYWxsZXJzIGNhbiBnZXQgdGhlaXIgc3RhdGVcclxuICAgICAgICAvLyB0aGlzIGlzIGltcG9ydGFudCBmb3IgYm90aCBzdWNjZXNzICYgZXJyb3Igb3V0Y29tZXNcclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogc3RhdGUgdmFsaWRhdGVkXCIpO1xyXG4gICAgICAgIHJlc3BvbnNlLnN0YXRlID0gc3RhdGUuZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XHJcbiAgICAgICAgICAgIExvZy53YXJuKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IFJlc3BvbnNlIHdhcyBlcnJvclwiLCByZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3JSZXNwb25zZShyZXNwb25zZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLm5vbmNlICYmICFyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogRXhwZWN0aW5nIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gaWRfdG9rZW4gaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5ub25jZSAmJiByZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm90IGV4cGVjdGluZyBpZF90b2tlbiBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgaWRfdG9rZW4gaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLmNvZGVfdmVyaWZpZXIgJiYgIXJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IEV4cGVjdGluZyBjb2RlIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gY29kZSBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXN0YXRlLmNvZGVfdmVyaWZpZXIgJiYgcmVzcG9uc2UuY29kZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm90IGV4cGVjdGluZyBjb2RlIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5leHBlY3RlZCBjb2RlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzQ2xhaW1zKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmlzT3BlbklkQ29ubmVjdCkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogcmVzcG9uc2UgaXMgT0lEQywgcHJvY2Vzc2luZyBjbGFpbXNcIik7XHJcblxyXG4gICAgICAgICAgICByZXNwb25zZS5wcm9maWxlID0gdGhpcy5fZmlsdGVyUHJvdG9jb2xDbGFpbXMocmVzcG9uc2UucHJvZmlsZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubG9hZFVzZXJJbmZvICYmIHJlc3BvbnNlLmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IGxvYWRpbmcgdXNlciBpbmZvXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zKHJlc3BvbnNlLmFjY2Vzc190b2tlbikudGhlbihjbGFpbXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiB1c2VyIGluZm8gY2xhaW1zIHJlY2VpdmVkIGZyb20gdXNlciBpbmZvIGVuZHBvaW50XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xhaW1zLnN1YiAhPT0gcmVzcG9uc2UucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gYWNjZXNzX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic3ViIGZyb20gdXNlciBpbmZvIGVuZHBvaW50IGRvZXMgbm90IG1hdGNoIHN1YiBpbiBhY2Nlc3NfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX21lcmdlQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHVzZXIgaW5mbyBjbGFpbXMgcmVjZWl2ZWQsIHVwZGF0ZWQgcHJvZmlsZTpcIiwgcmVzcG9uc2UucHJvZmlsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IG5vdCBsb2FkaW5nIHVzZXIgaW5mb1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIG5vdCBPSURDLCBub3QgcHJvY2Vzc2luZyBjbGFpbXNcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfbWVyZ2VDbGFpbXMoY2xhaW1zMSwgY2xhaW1zMikge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjbGFpbXMxKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBjbGFpbXMyKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBjbGFpbXMyW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gW3ZhbHVlc107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFtuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRbbmFtZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtuYW1lXS5pbmRleE9mKHZhbHVlKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdFtuYW1lXSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSB0aGlzLl9tZXJnZUNsYWltcyhyZXN1bHRbbmFtZV0sIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBbcmVzdWx0W25hbWVdLCB2YWx1ZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIF9maWx0ZXJQcm90b2NvbENsYWltcyhjbGFpbXMpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXMsIGluY29taW5nIGNsYWltczpcIiwgY2xhaW1zKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGNsYWltcyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5fZmlsdGVyUHJvdG9jb2xDbGFpbXMpIHtcclxuICAgICAgICAgICAgUHJvdG9jb2xDbGFpbXMuZm9yRWFjaCh0eXBlID0+IHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSByZXN1bHRbdHlwZV07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zOiBwcm90b2NvbCBjbGFpbXMgZmlsdGVyZWRcIiwgcmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltczogcHJvdG9jb2wgY2xhaW1zIG5vdCBmaWx0ZXJlZFwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVUb2tlbnMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGNvZGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzQ29kZShzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBpZF90b2tlbiBhbmQgYWNjZXNzX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkFuZEFjY2Vzc1Rva2VuKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBObyBjb2RlIHRvIHByb2Nlc3Mgb3IgaWRfdG9rZW4gdG8gdmFsaWRhdGVcIik7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Byb2Nlc3NDb2RlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHZhciByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBjbGllbnRfaWQ6IHN0YXRlLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldCxcclxuICAgICAgICAgICAgY29kZSA6IHJlc3BvbnNlLmNvZGUsXHJcbiAgICAgICAgICAgIHJlZGlyZWN0X3VyaTogc3RhdGUucmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiBzdGF0ZS5jb2RlX3ZlcmlmaWVyLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZShyZXF1ZXN0KS50aGVuKHRva2VuUmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yKHZhciBrZXkgaW4gdG9rZW5SZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Vba2V5XSA9IHRva2VuUmVzcG9uc2Vba2V5XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NvZGU6IHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NmdWwsIHByb2Nlc3NpbmcgaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlcyhzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDb2RlOiB0b2tlbiByZXNwb25zZSBzdWNjZXNzZnVsLCByZXR1cm5pbmcgcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlcyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcclxuXHJcbiAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHN0YXRlLmNsaWVudF9pZDtcclxuICAgICAgICAgICAgbGV0IGNsb2NrU2tld0luU2Vjb25kcyA9IHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldztcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IFZhbGlkYWluZyBKV1QgYXR0cmlidXRlczsgdXNpbmcgY2xvY2sgc2tldyAoaW4gc2Vjb25kcykgb2Y6IFwiLCBjbG9ja1NrZXdJblNlY29uZHMpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0QXR0cmlidXRlcyhyZXNwb25zZS5pZF90b2tlbiwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3SW5TZWNvbmRzKS50aGVuKHBheWxvYWQgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ub25jZSAmJiBzdGF0ZS5ub25jZSAhPT0gcGF5bG9hZC5ub25jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzOiBJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IE5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHBheWxvYWQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUlkVG9rZW5BbmRBY2Nlc3NUb2tlbihzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUFjY2Vzc1Rva2VuKHJlc3BvbnNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmICghc3RhdGUubm9uY2UpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8gbm9uY2Ugb24gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBub25jZSBvbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVzcG9uc2UuaWRfdG9rZW4pO1xyXG4gICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyIHx8ICFqd3QucGF5bG9hZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIiwgand0KTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RhdGUubm9uY2UgIT09IGp3dC5wYXlsb2FkLm5vbmNlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IEludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBraWQgPSBqd3QuaGVhZGVyLmtpZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IFJlY2VpdmVkIGlzc3VlclwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXMoKS50aGVuKGtleXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFrZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBSZWNlaXZlZCBzaWduaW5nIGtleXNcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICAgICAgaWYgKCFraWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlzID0gdGhpcy5fZmlsdGVyQnlBbGcoa2V5cywgand0LmhlYWRlci5hbGcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpZCBpcyBtYW5kYXRvcnkgb25seSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBrZXlzIGluIHRoZSByZWZlcmVuY2VkIEpXSyBTZXQgZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjU2lnbmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkua2lkID09PSBraWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gc3RhdGUuY2xpZW50X2lkO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBWYWxpZGFpbmcgSldUOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0KHJlc3BvbnNlLmlkX3Rva2VuLCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcykudGhlbigoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IEpXVCB2YWxpZGF0aW9uIHN1Y2Nlc3NmdWxcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghand0LnBheWxvYWQuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IGp3dC5wYXlsb2FkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2ZpbHRlckJ5QWxnKGtleXMsIGFsZyl7XHJcbiAgICAgICAgdmFyIGt0eSA9IG51bGw7XHJcbiAgICAgICAgaWYgKGFsZy5zdGFydHNXaXRoKFwiUlNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJSU0FcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJQU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIlBTXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiRVNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJFQ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBhbGcgbm90IHN1cHBvcnRlZDogXCIsIGFsZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogTG9va2luZyBmb3Iga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSk7XHJcblxyXG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5Lmt0eSA9PT0ga3R5O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyQnlBbGc6IE51bWJlciBvZiBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5LCBrZXlzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIHJldHVybiBrZXlzO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUFjY2Vzc1Rva2VuKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5wcm9maWxlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBObyBwcm9maWxlIGxvYWRlZCBmcm9tIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gcHJvZmlsZSBsb2FkZWQgZnJvbSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogTm8gYXRfaGFzaCBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF0X2hhc2ggaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogTm8gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVzcG9uc2UuaWRfdG9rZW4pO1xyXG4gICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIiwgand0KTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaGFzaEFsZyA9IGp3dC5oZWFkZXIuYWxnO1xyXG4gICAgICAgIGlmICghaGFzaEFsZyB8fCBoYXNoQWxnLmxlbmd0aCAhPT0gNSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGFsZzogXCIgKyBoYXNoQWxnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaGFzaEJpdHMgPSBoYXNoQWxnLnN1YnN0cigyLCAzKTtcclxuICAgICAgICBpZiAoIWhhc2hCaXRzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcsIGhhc2hCaXRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGFsZzogXCIgKyBoYXNoQWxnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBoYXNoQml0cyA9IHBhcnNlSW50KGhhc2hCaXRzKTtcclxuICAgICAgICBpZiAoaGFzaEJpdHMgIT09IDI1NiAmJiBoYXNoQml0cyAhPT0gMzg0ICYmIGhhc2hCaXRzICE9PSA1MTIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZywgaGFzaEJpdHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnOiBcIiArIGhhc2hBbGcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzaGEgPSBcInNoYVwiICsgaGFzaEJpdHM7XHJcbiAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9qb3NlVXRpbC5oYXNoU3RyaW5nKHJlc3BvbnNlLmFjY2Vzc190b2tlbiwgc2hhKTtcclxuICAgICAgICBpZiAoIWhhc2gpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbiBoYXNoIGZhaWxlZDpcIiwgc2hhKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBhdF9oYXNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBsZWZ0ID0gaGFzaC5zdWJzdHIoMCwgaGFzaC5sZW5ndGggLyAyKTtcclxuICAgICAgICB2YXIgbGVmdF9iNjR1ID0gdGhpcy5fam9zZVV0aWwuaGV4VG9CYXNlNjRVcmwobGVmdCk7XHJcbiAgICAgICAgaWYgKGxlZnRfYjY0dSAhPT0gcmVzcG9uc2UucHJvZmlsZS5hdF9oYXNoKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiLCBsZWZ0X2I2NHUsIHJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogc3VjY2Vzc1wiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBDaGVja1Nlc3Npb25JRnJhbWUgfSBmcm9tICcuL0NoZWNrU2Vzc2lvbklGcmFtZS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk1vbml0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHVzZXJNYW5hZ2VyLCBDaGVja1Nlc3Npb25JRnJhbWVDdG9yID0gQ2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgaWYgKCF1c2VyTWFuYWdlcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvci5jdG9yOiBObyB1c2VyIG1hbmFnZXIgcGFzc2VkIHRvIFNlc3Npb25Nb25pdG9yXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VyTWFuYWdlclwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyID0gdXNlck1hbmFnZXI7XHJcbiAgICAgICAgdGhpcy5fQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciA9IENoZWNrU2Vzc2lvbklGcmFtZUN0b3I7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5hZGRVc2VyTG9hZGVkKHRoaXMuX3N0YXJ0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5hZGRVc2VyVW5sb2FkZWQodGhpcy5fc3RvcC5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZ2V0VXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIC8vIGRvaW5nIHRoaXMgbWFudWFsbHkgaGVyZSBzaW5jZSBjYWxsaW5nIGdldFVzZXIgXHJcbiAgICAgICAgICAgIC8vIGRvZXNuJ3QgdHJpZ2dlciBsb2FkIGV2ZW50LlxyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodXNlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gYSBjdG9yXHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yIGN0b3I6IGVycm9yIGZyb20gZ2V0VXNlcjpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfc2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLnNldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9tZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLm1ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuICAgIGdldCBfY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgX2NoZWNrU2Vzc2lvbkludGVydmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgIH1cclxuICAgIGdldCBfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdGFydCh1c2VyKSB7XHJcbiAgICAgICAgbGV0IHNlc3Npb25fc3RhdGUgPSB1c2VyLnNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgIGlmIChzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1YiA9IHVzZXIucHJvZmlsZS5zdWI7XHJcbiAgICAgICAgICAgIHRoaXMuX3NpZCA9IHVzZXIucHJvZmlsZS5zaWQ7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdGFydDogc2Vzc2lvbl9zdGF0ZTpcIiwgc2Vzc2lvbl9zdGF0ZSwgXCIsIHN1YjpcIiwgdGhpcy5fc3ViKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lKCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBJbml0aWFsaXppbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWVcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGllbnRfaWQgPSB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnRlcnZhbCA9IHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RvcE9uRXJyb3IgPSB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZSA9IG5ldyB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yKHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyksIGNsaWVudF9pZCwgdXJsLCBpbnRlcnZhbCwgc3RvcE9uRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBObyBjaGVjayBzZXNzaW9uIGlmcmFtZSBmb3VuZCBpbiB0aGUgbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gbm9uLXByb21pc2UgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IEVycm9yIGZyb20gZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdGFydChzZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zdWIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3NpZCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0b3BcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICB2YXIgcmFpc2VVc2VyU2lnbmVkT3V0RXZlbnQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnN1YiA9PT0gdGhpcy5fc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmFpc2VVc2VyU2lnbmVkT3V0RXZlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RhcnQoc2Vzc2lvbi5zZXNzaW9uX3N0YXRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc2lkID09PSB0aGlzLl9zaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTYW1lIHN1YiBzdGlsbCBsb2dnZWQgaW4gYXQgT1AsIHJlc3RhcnRpbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWU7IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFNhbWUgc3ViIHN0aWxsIGxvZ2dlZCBpbiBhdCBPUCwgc2Vzc2lvbiBzdGF0ZSBoYXMgY2hhbmdlZCwgcmVzdGFydGluZyBjaGVjayBzZXNzaW9uIGlmcmFtZTsgc2Vzc2lvbl9zdGF0ZTpcIiwgc2Vzc2lvbi5zZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogRGlmZmVyZW50IHN1YmplY3Qgc2lnbmVkIGludG8gT1A6XCIsIHNlc3Npb24uc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU3ViamVjdCBubyBsb25nZXIgc2lnbmVkIGludG8gT1BcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyYWlzZVVzZXJTaWduZWRPdXRFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s7IHJhaXNpbmcgc2lnbmVkIG91dCBldmVudFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IEVycm9yIGNhbGxpbmcgcXVlcnlDdXJyZW50U2lnbmluU2Vzc2lvbjsgcmFpc2luZyBzaWduZWQgb3V0IGV2ZW50XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblJlcXVlc3Qge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIC8vIG1hbmRhdG9yeVxyXG4gICAgICAgIHVybCwgY2xpZW50X2lkLCByZWRpcmVjdF91cmksIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCBhdXRob3JpdHksXHJcbiAgICAgICAgLy8gb3B0aW9uYWxcclxuICAgICAgICBkYXRhLCBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGVcclxuICAgIH0pIHtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyBjbGllbnRfaWQgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGllbnRfaWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVkaXJlY3RfdXJpKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gcmVkaXJlY3RfdXJpIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVkaXJlY3RfdXJpXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXJlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyByZXNwb25zZV90eXBlIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVzcG9uc2VfdHlwZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzY29wZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHNjb3BlIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NvcGVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gYXV0aG9yaXR5IHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXV0aG9yaXR5XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG9pZGMgPSBTaWduaW5SZXF1ZXN0LmlzT2lkYyhyZXNwb25zZV90eXBlKTtcclxuICAgICAgICBsZXQgY29kZSA9IFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpO1xyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlX21vZGUpIHtcclxuICAgICAgICAgICAgcmVzcG9uc2VfbW9kZSA9IFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpID8gXCJxdWVyeVwiIDogbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgU2lnbmluU3RhdGUoeyBub25jZTogb2lkYywgXHJcbiAgICAgICAgICAgIGRhdGEsIGNsaWVudF9pZCwgYXV0aG9yaXR5LCByZWRpcmVjdF91cmksIFxyXG4gICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiBjb2RlLCBcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlLCByZXNwb25zZV9tb2RlIH0pO1xyXG5cclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcImNsaWVudF9pZFwiLCBjbGllbnRfaWQpO1xyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwicmVkaXJlY3RfdXJpXCIsIHJlZGlyZWN0X3VyaSk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJyZXNwb25zZV90eXBlXCIsIHJlc3BvbnNlX3R5cGUpO1xyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic2NvcGVcIiwgc2NvcGUpO1xyXG5cclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInN0YXRlXCIsIHRoaXMuc3RhdGUuaWQpO1xyXG4gICAgICAgIGlmIChvaWRjKSB7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwibm9uY2VcIiwgdGhpcy5zdGF0ZS5ub25jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2RlKSB7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiY29kZV9jaGFsbGVuZ2VcIiwgdGhpcy5zdGF0ZS5jb2RlX2NoYWxsZW5nZSk7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kXCIsIFwiUzI1NlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvcHRpb25hbCA9IHsgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50LCBhY3JfdmFsdWVzLCByZXNvdXJjZSwgcmVxdWVzdCwgcmVxdWVzdF91cmksIHJlc3BvbnNlX21vZGUgfTtcclxuICAgICAgICBmb3IobGV0IGtleSBpbiBvcHRpb25hbCl7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25hbFtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIG9wdGlvbmFsW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IobGV0IGtleSBpbiBleHRyYVF1ZXJ5UGFyYW1zKXtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwga2V5LCBleHRyYVF1ZXJ5UGFyYW1zW2tleV0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVybCA9IHVybDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNPaWRjKHJlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gcmVzcG9uc2VfdHlwZS5zcGxpdCgvXFxzKy9nKS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbSA9PT0gXCJpZF90b2tlblwiO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAhIShyZXN1bHRbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc09BdXRoKHJlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gcmVzcG9uc2VfdHlwZS5zcGxpdCgvXFxzKy9nKS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbSA9PT0gXCJ0b2tlblwiO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAhIShyZXN1bHRbMF0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdGF0aWMgaXNDb2RlKHJlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gcmVzcG9uc2VfdHlwZS5zcGxpdCgvXFxzKy9nKS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbSA9PT0gXCJjb2RlXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcblxyXG5jb25zdCBPaWRjU2NvcGUgPSBcIm9wZW5pZFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblJlc3BvbnNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHVybCwgZGVsaW1pdGVyID0gXCIjXCIpIHtcclxuXHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIGRlbGltaXRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuZXJyb3IgPSB2YWx1ZXMuZXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJvcl9kZXNjcmlwdGlvbiA9IHZhbHVlcy5lcnJvcl9kZXNjcmlwdGlvbjtcclxuICAgICAgICB0aGlzLmVycm9yX3VyaSA9IHZhbHVlcy5lcnJvcl91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuY29kZSA9IHZhbHVlcy5jb2RlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB2YWx1ZXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5pZF90b2tlbiA9IHZhbHVlcy5pZF90b2tlbjtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSB2YWx1ZXMuc2Vzc2lvbl9zdGF0ZTtcclxuICAgICAgICB0aGlzLmFjY2Vzc190b2tlbiA9IHZhbHVlcy5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgdGhpcy50b2tlbl90eXBlID0gdmFsdWVzLnRva2VuX3R5cGU7XHJcbiAgICAgICAgdGhpcy5zY29wZSA9IHZhbHVlcy5zY29wZTtcclxuICAgICAgICB0aGlzLnByb2ZpbGUgPSB1bmRlZmluZWQ7IC8vIHdpbGwgYmUgc2V0IGZyb20gUmVzcG9uc2VWYWxpZGF0b3JcclxuXHJcbiAgICAgICAgdGhpcy5leHBpcmVzX2luID0gdmFsdWVzLmV4cGlyZXNfaW47XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cGlyZXNfaW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJlc19hdCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHBpcmVzX2F0IC0gbm93O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4cGlyZXNfaW4odmFsdWUpe1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXhwaXJlc19pbiA9PT0gJ251bWJlcicgJiYgZXhwaXJlc19pbiA+IDApIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gbm93ICsgZXhwaXJlc19pbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cGlyZWQoKSB7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSB0aGlzLmV4cGlyZXNfaW47XHJcbiAgICAgICAgaWYgKGV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhwaXJlc19pbiA8PSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY29wZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNjb3BlIHx8IFwiXCIpLnNwbGl0KFwiIFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNPcGVuSWRDb25uZWN0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNjb3Blcy5pbmRleE9mKE9pZGNTY29wZSkgPj0gMCB8fCAhIXRoaXMuaWRfdG9rZW47XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5pbXBvcnQgcmFuZG9tIGZyb20gJy4vcmFuZG9tLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTaWduaW5TdGF0ZSBleHRlbmRzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtub25jZSwgYXV0aG9yaXR5LCBjbGllbnRfaWQsIHJlZGlyZWN0X3VyaSwgY29kZV92ZXJpZmllciwgcmVzcG9uc2VfbW9kZX0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKGFyZ3VtZW50c1swXSk7XHJcblxyXG4gICAgICAgIGlmIChub25jZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub25jZSA9IHJhbmRvbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub25jZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub25jZSA9IG5vbmNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvZGVfdmVyaWZpZXIgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgLy8gcmFuZG9tKCkgcHJvZHVjZXMgMzIgbGVuZ3RoXHJcbiAgICAgICAgICAgIHRoaXMuX2NvZGVfdmVyaWZpZXIgPSByYW5kb20oKSArIHJhbmRvbSgpICsgcmFuZG9tKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvZGVfdmVyaWZpZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29kZV92ZXJpZmllciA9IGNvZGVfdmVyaWZpZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLmNvZGVfdmVyaWZpZXIpIHtcclxuICAgICAgICAgICAgbGV0IGhhc2ggPSBKb3NlVXRpbC5oYXNoU3RyaW5nKHRoaXMuY29kZV92ZXJpZmllciwgXCJTSEEyNTZcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvZGVfY2hhbGxlbmdlID0gSm9zZVV0aWwuaGV4VG9CYXNlNjRVcmwoaGFzaCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yZWRpcmVjdF91cmkgPSByZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fYXV0aG9yaXR5ID0gYXV0aG9yaXR5O1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IGNsaWVudF9pZDtcclxuICAgICAgICB0aGlzLl9yZXNwb25zZV9tb2RlID0gcmVzcG9uc2VfbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm9uY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vbmNlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGF1dGhvcml0eSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0aG9yaXR5O1xyXG4gICAgfVxyXG4gICAgZ2V0IGNsaWVudF9pZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X2lkO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3RfdXJpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNvZGVfdmVyaWZpZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVfdmVyaWZpZXI7XHJcbiAgICB9XHJcbiAgICBnZXQgY29kZV9jaGFsbGVuZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVfY2hhbGxlbmdlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlc3BvbnNlX21vZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlX21vZGU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRvU3RvcmFnZVN0cmluZygpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJTaWduaW5TdGF0ZS50b1N0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcclxuICAgICAgICAgICAgY3JlYXRlZDogdGhpcy5jcmVhdGVkLFxyXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGU6IHRoaXMucmVxdWVzdF90eXBlLFxyXG4gICAgICAgICAgICBub25jZTogdGhpcy5ub25jZSxcclxuICAgICAgICAgICAgY29kZV92ZXJpZmllcjogdGhpcy5jb2RlX3ZlcmlmaWVyLFxyXG4gICAgICAgICAgICByZWRpcmVjdF91cmk6IHRoaXMucmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICBhdXRob3JpdHk6IHRoaXMuYXV0aG9yaXR5LFxyXG4gICAgICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50X2lkLFxyXG4gICAgICAgICAgICByZXNwb25zZV9tb2RlOiB0aGlzLnJlc3BvbnNlX21vZGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlNpZ25pblN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKTtcclxuICAgICAgICByZXR1cm4gbmV3IFNpZ25pblN0YXRlKGRhdGEpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbm91dFJlcXVlc3Qge1xyXG4gICAgY29uc3RydWN0b3Ioe3VybCwgaWRfdG9rZW5faGludCwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLCBkYXRhLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGV9KSB7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbm91dFJlcXVlc3QuY3RvcjogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkX3Rva2VuX2hpbnQpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJpZF90b2tlbl9oaW50XCIsIGlkX3Rva2VuX2hpbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSkge1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaVwiLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgU3RhdGUoeyBkYXRhLCByZXF1ZXN0X3R5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzdGF0ZVwiLCB0aGlzLnN0YXRlLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gZXh0cmFRdWVyeVBhcmFtcyl7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgZXh0cmFRdWVyeVBhcmFtc1trZXldKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbm91dFJlc3BvbnNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHVybCkge1xyXG5cclxuICAgICAgICB2YXIgdmFsdWVzID0gVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50KHVybCwgXCI/XCIpO1xyXG5cclxuICAgICAgICB0aGlzLmVycm9yID0gdmFsdWVzLmVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSB2YWx1ZXMuZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSB2YWx1ZXMuZXJyb3JfdXJpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0gdmFsdWVzLnN0YXRlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTaWxlbnRSZW5ld1NlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHVzZXJNYW5hZ2VyKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIgPSB1c2VyTWFuYWdlcjtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gdGhpcy5fdG9rZW5FeHBpcmluZy5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuYWRkQWNjZXNzVG9rZW5FeHBpcmluZyh0aGlzLl9jYWxsYmFjayk7XHJcblxyXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgdHJpZ2dlciBsb2FkaW5nIG9mIHRoZSB1c2VyIHNvIHRoZSBleHBpcmluZyBldmVudHMgY2FuIGJlIGluaXRpYWxpemVkXHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmdldFVzZXIoKS50aGVuKHVzZXI9PntcclxuICAgICAgICAgICAgICAgIC8vIGRlbGliZXJhdGUgbm9wXHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGVycj0+e1xyXG4gICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY3RvclxyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lsZW50UmVuZXdTZXJ2aWNlLnN0YXJ0OiBFcnJvciBmcm9tIGdldFVzZXI6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5yZW1vdmVBY2Nlc3NUb2tlbkV4cGlyaW5nKHRoaXMuX2NhbGxiYWNrKTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfdG9rZW5FeHBpcmluZygpIHtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5zaWduaW5TaWxlbnQoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJTaWxlbnRSZW5ld1NlcnZpY2UuX3Rva2VuRXhwaXJpbmc6IFNpbGVudCB0b2tlbiByZW5ld2FsIHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBFcnJvciBmcm9tIHNpZ25pblNpbGVudDpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlU2lsZW50UmVuZXdFcnJvcihlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHJhbmRvbSBmcm9tICcuL3JhbmRvbS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU3RhdGUge1xyXG4gICAgY29uc3RydWN0b3Ioe2lkLCBkYXRhLCBjcmVhdGVkLCByZXF1ZXN0X3R5cGV9ID0ge30pIHtcclxuICAgICAgICB0aGlzLl9pZCA9IGlkIHx8IHJhbmRvbSgpO1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNyZWF0ZWQgPT09ICdudW1iZXInICYmIGNyZWF0ZWQgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWQgPSBjcmVhdGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fY3JlYXRlZCA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcmVxdWVzdF90eXBlID0gIHJlcXVlc3RfdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gICAgfVxyXG4gICAgZ2V0IGRhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgICB9XHJcbiAgICBnZXQgY3JlYXRlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlZDtcclxuICAgIH1cclxuICAgIGdldCByZXF1ZXN0X3R5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RfdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiB0aGlzLnJlcXVlc3RfdHlwZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTdGF0ZShKU09OLnBhcnNlKHN0b3JhZ2VTdHJpbmcpKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgY2xlYXJTdGFsZVN0YXRlKHN0b3JhZ2UsIGFnZSkge1xyXG5cclxuICAgICAgICB2YXIgY3V0b2ZmID0gRGF0ZS5ub3coKSAvIDEwMDAgLSBhZ2U7XHJcblxyXG4gICAgICAgIHJldHVybiBzdG9yYWdlLmdldEFsbEtleXMoKS50aGVuKGtleXMgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IGdvdCBrZXlzXCIsIGtleXMpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHByb21pc2VzID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGtleXNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHN0b3JhZ2UuZ2V0KGtleSkudGhlbihpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVtb3ZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBTdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhpdGVtKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogZ290IGl0ZW0gZnJvbSBrZXk6IFwiLCBrZXksIHN0YXRlLmNyZWF0ZWQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5jcmVhdGVkIDw9IGN1dG9mZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogRXJyb3IgcGFyc2luZyBzdGF0ZSBmb3Iga2V5XCIsIGtleSwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogbm8gaXRlbSBpbiBzdG9yYWdlIGZvciBrZXk6IFwiLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IHJlbW92ZWQgaXRlbSBmb3Iga2V5OiBcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2UucmVtb3ZlKGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiB3YWl0aW5nIG9uIHByb21pc2UgY291bnQ6XCIsIHByb21pc2VzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSAnLi9FdmVudC5qcyc7XHJcblxyXG5jb25zdCBUaW1lckR1cmF0aW9uID0gNTsgLy8gc2Vjb25kc1xyXG5cclxuZXhwb3J0IGNsYXNzIFRpbWVyIGV4dGVuZHMgRXZlbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHRpbWVyID0gR2xvYmFsLnRpbWVyLCBub3dGdW5jID0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5fdGltZXIgPSB0aW1lcjtcclxuXHJcbiAgICAgICAgaWYgKG5vd0Z1bmMpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm93RnVuYyA9IG5vd0Z1bmM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3dGdW5jID0gKCkgPT4gRGF0ZS5ub3coKSAvIDEwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBub3coKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuX25vd0Z1bmMoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdChkdXJhdGlvbikge1xyXG4gICAgICAgIGlmIChkdXJhdGlvbiA8PSAwKSB7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZHVyYXRpb24gPSBwYXJzZUludChkdXJhdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBleHBpcmF0aW9uID0gdGhpcy5ub3cgKyBkdXJhdGlvbjtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmF0aW9uID09PSBleHBpcmF0aW9uICYmIHRoaXMuX3RpbWVySGFuZGxlKSB7XHJcbiAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gcmVpbml0aWFsaXplIHRvIHNhbWUgZXhwaXJhdGlvbiwgc28gYmFpbCBvdXRcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuaW5pdCB0aW1lciBcIiArIHRoaXMuX25hbWUgKyBcIiBza2lwcGluZyBpbml0aWFsaXphdGlvbiBzaW5jZSBhbHJlYWR5IGluaXRpYWxpemVkIGZvciBleHBpcmF0aW9uOlwiLCB0aGlzLmV4cGlyYXRpb24pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhbmNlbCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJUaW1lci5pbml0IHRpbWVyIFwiICsgdGhpcy5fbmFtZSArIFwiIGZvciBkdXJhdGlvbjpcIiwgZHVyYXRpb24pO1xyXG4gICAgICAgIHRoaXMuX2V4cGlyYXRpb24gPSBleHBpcmF0aW9uO1xyXG5cclxuICAgICAgICAvLyB3ZSdyZSB1c2luZyBhIGZhaXJseSBzaG9ydCB0aW1lciBhbmQgdGhlbiBjaGVja2luZyB0aGUgZXhwaXJhdGlvbiBpbiB0aGVcclxuICAgICAgICAvLyBjYWxsYmFjayB0byBoYW5kbGUgc2NlbmFyaW9zIHdoZXJlIHRoZSBicm93c2VyIGRldmljZSBzbGVlcHMsIGFuZCB0aGVuXHJcbiAgICAgICAgLy8gdGhlIHRpbWVycyBlbmQgdXAgZ2V0dGluZyBkZWxheWVkLlxyXG4gICAgICAgIHZhciB0aW1lckR1cmF0aW9uID0gVGltZXJEdXJhdGlvbjtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPCB0aW1lckR1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRpbWVyRHVyYXRpb24gPSBkdXJhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSB0aGlzLl90aW1lci5zZXRJbnRlcnZhbCh0aGlzLl9jYWxsYmFjay5iaW5kKHRoaXMpLCB0aW1lckR1cmF0aW9uICogMTAwMCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBleHBpcmF0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBpcmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbmNlbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fdGltZXJIYW5kbGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FuY2VsOiBcIiwgdGhpcy5fbmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyLmNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXJIYW5kbGUpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lckhhbmRsZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjaygpIHtcclxuICAgICAgICB2YXIgZGlmZiA9IHRoaXMuX2V4cGlyYXRpb24gLSB0aGlzLm5vdztcclxuICAgICAgICBMb2cuZGVidWcoXCJUaW1lci5jYWxsYmFjazsgXCIgKyB0aGlzLl9uYW1lICsgXCIgdGltZXIgZXhwaXJlcyBpbjpcIiwgZGlmZik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9leHBpcmF0aW9uIDw9IHRoaXMubm93KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIHN1cGVyLnJhaXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IEpzb25TZXJ2aWNlIH0gZnJvbSAnLi9Kc29uU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRva2VuQ2xpZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSwgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuY3RvcjogTm8gc2V0dGluZ3MgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKCk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4Y2hhbmdlQ29kZShhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzLmdyYW50X3R5cGUgPSBhcmdzLmdyYW50X3R5cGUgfHwgXCJhdXRob3JpemF0aW9uX2NvZGVcIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjb2RlIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY29kZSBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWRpcmVjdF91cmkgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNvZGVfdmVyaWZpZXIgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjb2RlX3ZlcmlmaWVyIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFRva2VuRW5kcG9pbnQoZmFsc2UpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBSZWNlaXZlZCB0b2tlbiBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiByZXNwb25zZSByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhjaGFuZ2VSZWZyZXNoVG9rZW4oYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncy5ncmFudF90eXBlID0gYXJncy5ncmFudF90eXBlIHx8IFwicmVmcmVzaF90b2tlblwiO1xyXG4gICAgICAgIGFyZ3MuY2xpZW50X2lkID0gYXJncy5jbGllbnRfaWQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgIGFyZ3MuY2xpZW50X3NlY3JldCA9IGFyZ3MuY2xpZW50X3NlY3JldCB8fCB0aGlzLl9zZXR0aW5ncy5jbGllbnRfc2VjcmV0O1xyXG5cclxuICAgICAgICBpZiAoIWFyZ3MucmVmcmVzaF90b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogTm8gcmVmcmVzaF90b2tlbiBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIHJlZnJlc2hfdG9rZW4gaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBObyBjbGllbnRfaWQgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjbGllbnRfaWQgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRUb2tlbkVuZHBvaW50KGZhbHNlKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBSZWNlaXZlZCB0b2tlbiBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IHJlc3BvbnNlIHJlY2VpdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuY29uc3QgQWNjZXNzVG9rZW5UeXBlSGludCA9IFwiYWNjZXNzX3Rva2VuXCI7XHJcbmNvbnN0IFJlZnJlc2hUb2tlblR5cGVIaW50ID0gXCJyZWZyZXNoX3Rva2VuXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBYTUxIdHRwUmVxdWVzdEN0b3IgPSBHbG9iYWwuWE1MSHR0cFJlcXVlc3QsIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5jdG9yOiBObyBzZXR0aW5ncyBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2V0dGluZ3MgcHJvdmlkZWQuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLl9YTUxIdHRwUmVxdWVzdEN0b3IgPSBYTUxIdHRwUmVxdWVzdEN0b3I7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldm9rZSh0b2tlbiwgcmVxdWlyZWQsIHR5cGUgPSBcImFjY2Vzc190b2tlblwiKSB7XHJcbiAgICAgICAgaWYgKCF0b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBObyB0b2tlbiBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdG9rZW4gcHJvdmlkZWQuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGUgIT09IEFjY2Vzc1Rva2VuVHlwZUhpbnQgJiYgdHlwZSAhPSBSZWZyZXNoVG9rZW5UeXBlSGludCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBJbnZhbGlkIHRva2VuIHR5cGVcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdG9rZW4gdHlwZS5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFJldm9jYXRpb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IFJldm9jYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXZvY2F0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbm90IHJlcXVpcmVkLCBzbyBkb24ndCBlcnJvciBhbmQganVzdCByZXR1cm5cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogUmV2b2tpbmcgXCIgKyB0eXBlKTtcclxuICAgICAgICAgICAgdmFyIGNsaWVudF9pZCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICAgICAgdmFyIGNsaWVudF9zZWNyZXQgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfc2VjcmV0O1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlKHVybCwgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCB0b2tlbiwgdHlwZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZSh1cmwsIGNsaWVudF9pZCwgY2xpZW50X3NlY3JldCwgdG9rZW4sIHR5cGUpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgdGhpcy5fWE1MSHR0cFJlcXVlc3RDdG9yKCk7XHJcbiAgICAgICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCB4aHIuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHhoci5zdGF0dXNUZXh0ICsgXCIgKFwiICsgeGhyLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4geyBcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IE5ldHdvcmsgRXJyb3IuXCIpXHJcbiAgICAgICAgICAgICAgICByZWplY3QoXCJOZXR3b3JrIEVycm9yXCIpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdmFyIGJvZHkgPSBcImNsaWVudF9pZD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChjbGllbnRfaWQpO1xyXG4gICAgICAgICAgICBpZiAoY2xpZW50X3NlY3JldCkge1xyXG4gICAgICAgICAgICAgICAgYm9keSArPSBcIiZjbGllbnRfc2VjcmV0PVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGNsaWVudF9zZWNyZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJvZHkgKz0gXCImdG9rZW5fdHlwZV9oaW50PVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHR5cGUpO1xyXG4gICAgICAgICAgICBib2R5ICs9IFwiJnRva2VuPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xyXG4gICAgICAgICAgICB4aHIuc2VuZChib2R5KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVcmxVdGlsaXR5IHtcclxuICAgIHN0YXRpYyBhZGRRdWVyeVBhcmFtKHVybCwgbmFtZSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA8IDApIHtcclxuICAgICAgICAgICAgdXJsICs9IFwiP1wiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVybFt1cmwubGVuZ3RoIC0gMV0gIT09IFwiP1wiKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBcIiZcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHVybCArPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSk7XHJcbiAgICAgICAgdXJsICs9IFwiPVwiO1xyXG4gICAgICAgIHVybCArPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBwYXJzZVVybEZyYWdtZW50KHZhbHVlLCBkZWxpbWl0ZXIgPSBcIiNcIiwgZ2xvYmFsID0gR2xvYmFsKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpe1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGdsb2JhbC5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGlkeCA9IHZhbHVlLmxhc3RJbmRleE9mKGRlbGltaXRlcik7XHJcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyKGlkeCArIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRlbGltaXRlciA9PT0gXCI/XCIpIHtcclxuICAgICAgICAgICAgLy8gaWYgd2UncmUgZG9pbmcgcXVlcnksIHRoZW4gc3RyaXAgb2ZmIGhhc2ggZnJhZ21lbnQgYmVmb3JlIHdlIHBhcnNlXHJcbiAgICAgICAgICAgIGlkeCA9IHZhbHVlLmluZGV4T2YoJyMnKTtcclxuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cigwLCBpZHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcGFyYW1zID0ge30sXHJcbiAgICAgICAgICAgIHJlZ2V4ID0gLyhbXiY9XSspPShbXiZdKikvZyxcclxuICAgICAgICAgICAgbTtcclxuXHJcbiAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xyXG4gICAgICAgIHdoaWxlIChtID0gcmVnZXguZXhlYyh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudChtWzFdKV0gPSBkZWNvZGVVUklDb21wb25lbnQobVsyXSk7XHJcbiAgICAgICAgICAgIGlmIChjb3VudGVyKysgPiA1MCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50OiByZXNwb25zZSBleGNlZWRlZCBleHBlY3RlZCBudW1iZXIgb2YgcGFyYW1ldGVyc1wiLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIlJlc3BvbnNlIGV4Y2VlZGVkIGV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzXCJcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIHByb3AgaW4gcGFyYW1zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXIge1xyXG4gICAgY29uc3RydWN0b3Ioe2lkX3Rva2VuLCBzZXNzaW9uX3N0YXRlLCBhY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIHRva2VuX3R5cGUsIHNjb3BlLCBwcm9maWxlLCBleHBpcmVzX2F0LCBzdGF0ZX0pIHtcclxuICAgICAgICB0aGlzLmlkX3Rva2VuID0gaWRfdG9rZW47XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uX3N0YXRlID0gc2Vzc2lvbl9zdGF0ZTtcclxuICAgICAgICB0aGlzLmFjY2Vzc190b2tlbiA9IGFjY2Vzc190b2tlbjtcclxuICAgICAgICB0aGlzLnJlZnJlc2hfdG9rZW4gPSByZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgIHRoaXMudG9rZW5fdHlwZSA9IHRva2VuX3R5cGU7XHJcbiAgICAgICAgdGhpcy5zY29wZSA9IHNjb3BlO1xyXG4gICAgICAgIHRoaXMucHJvZmlsZSA9IHByb2ZpbGU7XHJcbiAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gZXhwaXJlc19hdDtcclxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cGlyZXNfaW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJlc19hdCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHBpcmVzX2F0IC0gbm93O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4cGlyZXNfaW4odmFsdWUpIHtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICBpZiAodHlwZW9mIGV4cGlyZXNfaW4gPT09ICdudW1iZXInICYmIGV4cGlyZXNfaW4gPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc19hdCA9IG5vdyArIGV4cGlyZXNfaW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBleHBpcmVkKCkge1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gdGhpcy5leHBpcmVzX2luO1xyXG4gICAgICAgIGlmIChleHBpcmVzX2luICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGV4cGlyZXNfaW4gPD0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2NvcGVzKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zY29wZSB8fCBcIlwiKS5zcGxpdChcIiBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdG9yYWdlU3RyaW5nKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXIudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkX3Rva2VuOiB0aGlzLmlkX3Rva2VuLFxyXG4gICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiB0aGlzLnNlc3Npb25fc3RhdGUsXHJcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogdGhpcy5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHRoaXMucmVmcmVzaF90b2tlbixcclxuICAgICAgICAgICAgdG9rZW5fdHlwZTogdGhpcy50b2tlbl90eXBlLFxyXG4gICAgICAgICAgICBzY29wZTogdGhpcy5zY29wZSxcclxuICAgICAgICAgICAgcHJvZmlsZTogdGhpcy5wcm9maWxlLFxyXG4gICAgICAgICAgICBleHBpcmVzX2F0OiB0aGlzLmV4cGlyZXNfYXRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXIuZnJvbVN0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBVc2VyKEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZykpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IEpzb25TZXJ2aWNlIH0gZnJvbSAnLi9Kc29uU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJJbmZvU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBzZXR0aW5ncywgXHJcbiAgICAgICAgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UsIFxyXG4gICAgICAgIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UsIFxyXG4gICAgICAgIGpvc2VVdGlsID0gSm9zZVV0aWxcclxuICAgICkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3Rvcih1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy5fZ2V0Q2xhaW1zRnJvbUp3dC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDbGFpbXModG9rZW4pIHtcclxuICAgICAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5nZXRDbGFpbXM6IE5vIHRva2VuIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgdG9rZW4gaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRVc2VySW5mb0VuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zOiByZWNlaXZlZCB1c2VyaW5mbyB1cmxcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKHVybCwgdG9rZW4pLnRoZW4oY2xhaW1zID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5nZXRDbGFpbXM6IGNsYWltcyByZWNlaXZlZFwiLCBjbGFpbXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldENsYWltc0Zyb21Kd3QocmVxKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlcS5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlciB8fCAhand0LnBheWxvYWQpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogRmFpbGVkIHRvIHBhcnNlIEpXVFwiLCBqd3QpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBraWQgPSBqd3QuaGVhZGVyLmtpZDtcclxuXHJcbiAgICAgICAgICAgIGxldCBpc3N1ZXJQcm9taXNlO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3NldHRpbmdzLnVzZXJJbmZvSnd0SXNzdWVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdPUCc6XHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVyUHJvbWlzZSA9IHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0FOWSc6XHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVyUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShqd3QucGF5bG9hZC5pc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLnVzZXJJbmZvSnd0SXNzdWVyKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGlzc3VlclByb21pc2UudGhlbihpc3N1ZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBSZWNlaXZlZCBpc3N1ZXI6XCIgKyBpc3N1ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXMoKS50aGVuKGtleXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgha2V5cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBSZWNlaXZlZCBzaWduaW5nIGtleXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWtpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzID0gdGhpcy5fZmlsdGVyQnlBbGcoa2V5cywgand0LmhlYWRlci5hbGcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2lkIGlzIG1hbmRhdG9yeSBvbmx5IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGtleXMgaW4gdGhlIHJlZmVyZW5jZWQgSldLIFNldCBkb2N1bWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjU2lnbmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5c1swXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkua2lkID09PSBraWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2xvY2tTa2V3SW5TZWNvbmRzID0gdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3O1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogVmFsaWRhaW5nIEpXVDsgdXNpbmcgY2xvY2sgc2tldyAoaW4gc2Vjb25kcykgb2Y6IFwiLCBjbG9ja1NrZXdJblNlY29uZHMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3QocmVxLnJlc3BvbnNlVGV4dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMsIHVuZGVmaW5lZCwgdHJ1ZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogSldUIHZhbGlkYXRpb24gc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp3dC5wYXlsb2FkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogRXJyb3IgcGFyc2luZyBKV1QgcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9maWx0ZXJCeUFsZyhrZXlzLCBhbGcpIHtcclxuICAgICAgICB2YXIga3R5ID0gbnVsbDtcclxuICAgICAgICBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJSU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIlJTQVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIlBTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUFNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJFU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIkVDXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2ZpbHRlckJ5QWxnOiBhbGcgbm90IHN1cHBvcnRlZDogXCIsIGFsZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IExvb2tpbmcgZm9yIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHkpO1xyXG5cclxuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGtleS5rdHkgPT09IGt0eTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogTnVtYmVyIG9mIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHksIGtleXMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGtleXM7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50IH0gZnJvbSAnLi9PaWRjQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgVXNlck1hbmFnZXJTZXR0aW5ncyB9IGZyb20gJy4vVXNlck1hbmFnZXJTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL1VzZXIuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlckV2ZW50cyB9IGZyb20gJy4vVXNlck1hbmFnZXJFdmVudHMuanMnO1xyXG5pbXBvcnQgeyBTaWxlbnRSZW5ld1NlcnZpY2UgfSBmcm9tICcuL1NpbGVudFJlbmV3U2VydmljZS5qcyc7XHJcbmltcG9ydCB7IFNlc3Npb25Nb25pdG9yIH0gZnJvbSAnLi9TZXNzaW9uTW9uaXRvci5qcyc7XHJcbmltcG9ydCB7IFRva2VuUmV2b2NhdGlvbkNsaWVudCB9IGZyb20gJy4vVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgVG9rZW5DbGllbnQgfSBmcm9tICcuL1Rva2VuQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZXIgZXh0ZW5kcyBPaWRjQ2xpZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzID0ge30sXHJcbiAgICAgICAgU2lsZW50UmVuZXdTZXJ2aWNlQ3RvciA9IFNpbGVudFJlbmV3U2VydmljZSxcclxuICAgICAgICBTZXNzaW9uTW9uaXRvckN0b3IgPSBTZXNzaW9uTW9uaXRvcixcclxuICAgICAgICBUb2tlblJldm9jYXRpb25DbGllbnRDdG9yID0gVG9rZW5SZXZvY2F0aW9uQ2xpZW50LFxyXG4gICAgICAgIFRva2VuQ2xpZW50Q3RvciA9IFRva2VuQ2xpZW50LFxyXG4gICAgICAgIGpvc2VVdGlsID0gSm9zZVV0aWxcclxuICAgICkge1xyXG5cclxuICAgICAgICBpZiAoIShzZXR0aW5ncyBpbnN0YW5jZW9mIFVzZXJNYW5hZ2VyU2V0dGluZ3MpKSB7XHJcbiAgICAgICAgICAgIHNldHRpbmdzID0gbmV3IFVzZXJNYW5hZ2VyU2V0dGluZ3Moc2V0dGluZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlcihzZXR0aW5ncyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBVc2VyTWFuYWdlckV2ZW50cyhzZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdTZXJ2aWNlID0gbmV3IFNpbGVudFJlbmV3U2VydmljZUN0b3IodGhpcyk7XHJcblxyXG4gICAgICAgIC8vIG9yZGVyIGlzIGltcG9ydGFudCBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOyB0aGVzZSBzZXJ2aWNlcyBkZXBlbmQgdXBvbiB0aGUgZXZlbnRzLlxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmF1dG9tYXRpY1NpbGVudFJlbmV3KSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLmN0b3I6IGF1dG9tYXRpY1NpbGVudFJlbmV3IGlzIGNvbmZpZ3VyZWQsIHNldHRpbmcgdXAgc2lsZW50IHJlbmV3XCIpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0U2lsZW50UmVuZXcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLm1vbml0b3JTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLmN0b3I6IG1vbml0b3JTZXNzaW9uIGlzIGNvbmZpZ3VyZWQsIHNldHRpbmcgdXAgc2Vzc2lvbiBtb25pdG9yXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uTW9uaXRvciA9IG5ldyBTZXNzaW9uTW9uaXRvckN0b3IodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQgPSBuZXcgVG9rZW5SZXZvY2F0aW9uQ2xpZW50Q3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fdG9rZW5DbGllbnQgPSBuZXcgVG9rZW5DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9qb3NlVXRpbCA9IGpvc2VVdGlsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfcmVkaXJlY3ROYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucmVkaXJlY3ROYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX3BvcHVwTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnBvcHVwTmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9pZnJhbWVOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuaWZyYW1lTmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IF91c2VyU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MudXNlclN0b3JlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBldmVudHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cztcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLmdldFVzZXI6IHVzZXIgbG9hZGVkXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuZ2V0VXNlcjogdXNlciBub3QgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlVXNlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIobnVsbCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucmVtb3ZlVXNlcjogdXNlciByZW1vdmVkIGZyb20gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzLnVubG9hZCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblJlZGlyZWN0KGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzaTpyXCI7XHJcbiAgICAgICAgbGV0IG5hdlBhcmFtcyA9IHtcclxuICAgICAgICAgICAgdXNlUmVwbGFjZVRvTmF2aWdhdGUgOiBhcmdzLnVzZVJlcGxhY2VUb05hdmlnYXRlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU3RhcnQoYXJncywgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IsIG5hdlBhcmFtcykudGhlbigoKT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblJlZGlyZWN0OiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbmluUmVkaXJlY3RDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluRW5kKHVybCB8fCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvci51cmwpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrOiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblJlZGlyZWN0Q2FsbGJhY2s6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluUG9wdXAoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnBcIjtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IE5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBzaWduaW5Qb3B1cCBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbmluUG9wdXBDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluQ2FsbGJhY2sodXJsLCB0aGlzLl9wb3B1cE5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXBDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pLmNhdGNoKGVycj0+e1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrIGVycm9yOiBcIiArIGVyciAmJiBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluU2lsZW50KGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzaTpzXCI7XHJcbiAgICAgICAgLy8gZmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYSByZWZyZXNoIHRva2VuLCBvciBuZWVkIHRvIHVzZSBpZnJhbWVcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLnJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGFyZ3MucmVmcmVzaF90b2tlbiA9IHVzZXIucmVmcmVzaF90b2tlbjtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VSZWZyZXNoVG9rZW4oYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhcmdzLmlkX3Rva2VuX2hpbnQgPSBhcmdzLmlkX3Rva2VuX2hpbnQgfHwgKHRoaXMuc2V0dGluZ3MuaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3ICYmIHVzZXIgJiYgdXNlci5pZF90b2tlbik7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlciAmJiB0aGlzLl9zZXR0aW5ncy52YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQsIHN1YmplY3QgcHJpb3IgdG8gc2lsZW50IHJlbmV3OiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJncy5jdXJyZW50X3N1YiA9IHVzZXIucHJvZmlsZS5zdWI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU2lsZW50SWZyYW1lKGFyZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3VzZVJlZnJlc2hUb2tlbihhcmdzID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW4oYXJncykudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3VzZVJlZnJlc2hUb2tlbjogTm8gcmVzcG9uc2UgcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIk5vIHJlc3BvbnNlIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiBObyBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIk5vIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRUb2tlblZhbGlkYXRpb24gPSBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkVG9rZW5WYWxpZGF0aW9uID0gdGhpcy5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuKHVzZXIucHJvZmlsZSwgcmVzdWx0LmlkX3Rva2VuKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZFRva2VuVmFsaWRhdGlvbi50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3VzZVJlZnJlc2hUb2tlbjogcmVmcmVzaCB0b2tlbiByZXNwb25zZSBzdWNjZXNzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmlkX3Rva2VuID0gcmVzdWx0LmlkX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmFjY2Vzc190b2tlbiA9IHJlc3VsdC5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIucmVmcmVzaF90b2tlbiA9IHJlc3VsdC5yZWZyZXNoX3Rva2VuIHx8IHVzZXIucmVmcmVzaF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5leHBpcmVzX2luID0gcmVzdWx0LmV4cGlyZXNfaW47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbihwcm9maWxlLCBpZF90b2tlbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCkudGhlbihpc3N1ZXIgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGlkX3Rva2VuLCBpc3N1ZXIsIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCwgdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3KS50aGVuKHBheWxvYWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogRmFpbGVkIHRvIHZhbGlkYXRlIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdmFsaWRhdGUgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuc3ViICE9PSBwcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IHN1YiBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBjdXJyZW50IHN1YlwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF1dGhfdGltZSAmJiBwYXlsb2FkLmF1dGhfdGltZSAhPT0gcHJvZmlsZS5hdXRoX3RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBhdXRoX3RpbWUgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXV0aF90aW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdXRoX3RpbWUgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXV0aF90aW1lXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gcHJvZmlsZS5henApIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBhenAgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXpwXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhenAgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXpwXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5henAgJiYgcHJvZmlsZS5henApIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBhenAgbm90IGluIGlkX3Rva2VuLCBidXQgcHJlc2VudCBpbiBvcmlnaW5hbCBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXpwIG5vdCBpbiBpZF90b2tlbiwgYnV0IHByZXNlbnQgaW4gb3JpZ2luYWwgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgX3NpZ25pblNpbGVudElmcmFtZShhcmdzID0ge30pIHtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MucHJvbXB0ID0gYXJncy5wcm9tcHQgfHwgXCJub25lXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5faWZyYW1lTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0OiBhcmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXRcclxuICAgICAgICB9KS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50OiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblNpbGVudENhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5DYWxsYmFjayh1cmwsIHRoaXMuX2lmcmFtZU5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50Q2FsbGJhY2s6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50Q2FsbGJhY2s6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluQ2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25pblJlc3BvbnNlU3RhdGUodXJsKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnJcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluUmVkaXJlY3RDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6cFwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5Qb3B1cENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpzXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblNpbGVudENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImludmFsaWQgcmVzcG9uc2VfdHlwZSBpbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbm91dENhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic286clwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic286cFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbm91dFBvcHVwQ2FsbGJhY2sodXJsLCBrZWVwT3Blbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZV90eXBlIGluIHN0YXRlXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVlcnlTZXNzaW9uU3RhdHVzKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzaTpzXCI7IC8vIHRoaXMgYWN0cyBsaWtlIGEgc2lnbmluIHNpbGVudFxyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnNpbGVudF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSB1cmw7XHJcbiAgICAgICAgYXJncy5wcm9tcHQgPSBcIm5vbmVcIjtcclxuICAgICAgICBhcmdzLnJlc3BvbnNlX3R5cGUgPSBhcmdzLnJlc3BvbnNlX3R5cGUgfHwgdGhpcy5zZXR0aW5ncy5xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcclxuICAgICAgICBhcmdzLnNjb3BlID0gXCJvcGVuaWRcIjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIHRoaXMuX2lmcmFtZU5hdmlnYXRvciwge1xyXG4gICAgICAgICAgICBzdGFydFVybDogdXJsLFxyXG4gICAgICAgICAgICBzaWxlbnRSZXF1ZXN0VGltZW91dDogYXJncy5zaWxlbnRSZXF1ZXN0VGltZW91dCB8fCB0aGlzLnNldHRpbmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0XHJcbiAgICAgICAgfSkudGhlbihuYXZSZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTaWduaW5SZXNwb25zZShuYXZSZXNwb25zZS51cmwpLnRoZW4oc2lnbmluUmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBnb3Qgc2lnbmluIHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzaWduaW5SZXNwb25zZS5zZXNzaW9uX3N0YXRlICYmIHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IHF1ZXJ5U2Vzc2lvblN0YXR1cyBzdWNjZXNzIGZvciBzdWI6IFwiLCAgc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IHNpZ25pblJlc3BvbnNlLnNlc3Npb25fc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yjogc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zaWRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJxdWVyeVNlc3Npb25TdGF0dXMgc3VjY2Vzc2Z1bCwgdXNlciBub3QgYXV0aGVudGljYXRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3NpZ25pbihhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zKS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZChuYXZSZXNwb25zZS51cmwsIGFyZ3MpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25pblN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5wcmVwYXJlKG5hdmlnYXRvclBhcmFtcykudGhlbihoYW5kbGUgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IGdvdCBuYXZpZ2F0b3Igd2luZG93IGhhbmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNpZ25pblJlcXVlc3QoYXJncykudGhlbihzaWduaW5SZXF1ZXN0ID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogZ290IHNpZ25pbiByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy51cmwgPSBzaWduaW5SZXF1ZXN0LnVybDtcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy5pZCA9IHNpZ25pblJlcXVlc3Quc3RhdGUuaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYXZpZ2F0ZShuYXZpZ2F0b3JQYXJhbXMpO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5jbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogRXJyb3IgYWZ0ZXIgcHJlcGFyaW5nIG5hdmlnYXRvciwgY2xvc2luZyBuYXZpZ2F0b3Igd2luZG93XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWduaW5FbmQodXJsLCBhcmdzID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsKS50aGVuKHNpZ25pblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogZ290IHNpZ25pbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGxldCB1c2VyID0gbmV3IFVzZXIoc2lnbmluUmVzcG9uc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFyZ3MuY3VycmVudF9zdWIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmN1cnJlbnRfc3ViICE9PSB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogY3VycmVudCB1c2VyIGRvZXMgbm90IG1hdGNoIHVzZXIgcmV0dXJuZWQgZnJvbSBzaWduaW4uIHN1YiBmcm9tIHNpZ25pbjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJsb2dpbl9yZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiBjdXJyZW50IHVzZXIgbWF0Y2hlcyB1c2VyIHJldHVybmVkIGZyb20gc2lnbmluXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiB1c2VyIHN0b3JlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbmluQ2FsbGJhY2sodXJsLCBuYXZpZ2F0b3IpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluQ2FsbGJhY2tcIik7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5jYWxsYmFjayh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25vdXRSZWRpcmVjdChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic286clwiO1xyXG4gICAgICAgIGxldCBwb3N0TG9nb3V0UmVkaXJlY3RVcmkgPSBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAocG9zdExvZ291dFJlZGlyZWN0VXJpKXtcclxuICAgICAgICAgICAgYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0TG9nb3V0UmVkaXJlY3RVcmk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBuYXZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRTdGFydChhcmdzLCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvciwgbmF2UGFyYW1zKS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0OiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRFbmQodXJsIHx8IHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLnVybCkudGhlbihyZXNwb25zZT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRSZWRpcmVjdENhbGxiYWNrOiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbm91dFBvcHVwKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzbzpwXCI7XHJcbiAgICAgICAgbGV0IHVybCA9IGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MuZGlzcGxheSA9IFwicG9wdXBcIjtcclxuICAgICAgICBpZiAoYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpe1xyXG4gICAgICAgICAgICAvLyB3ZSdyZSBwdXR0aW5nIGEgZHVtbXkgZW50cnkgaW4gaGVyZSBiZWNhdXNlIHdlXHJcbiAgICAgICAgICAgIC8vIG5lZWQgYSB1bmlxdWUgaWQgZnJvbSB0aGUgc3RhdGUgZm9yIG5vdGlmaWNhdGlvblxyXG4gICAgICAgICAgICAvLyB0byB0aGUgcGFyZW50IHdpbmRvdywgd2hpY2ggaXMgbmVjZXNzYXJ5IGlmIHdlXHJcbiAgICAgICAgICAgIC8vIHBsYW4gdG8gcmV0dXJuIGJhY2sgdG8gdGhlIGNsaWVudCBhZnRlciBzaWdub3V0XHJcbiAgICAgICAgICAgIC8vIGFuZCBzbyB3ZSBjYW4gY2xvc2UgdGhlIHBvcHVwIGFmdGVyIHNpZ25vdXRcclxuICAgICAgICAgICAgYXJncy5zdGF0ZSA9IGFyZ3Muc3RhdGUgfHwge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dChhcmdzLCB0aGlzLl9wb3B1cE5hdmlnYXRvciwge1xyXG4gICAgICAgICAgICBzdGFydFVybDogdXJsLFxyXG4gICAgICAgICAgICBwb3B1cFdpbmRvd0ZlYXR1cmVzOiBhcmdzLnBvcHVwV2luZG93RmVhdHVyZXMgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd0ZlYXR1cmVzLFxyXG4gICAgICAgICAgICBwb3B1cFdpbmRvd1RhcmdldDogYXJncy5wb3B1cFdpbmRvd1RhcmdldCB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93VGFyZ2V0XHJcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFBvcHVwOiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbm91dFBvcHVwQ2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xyXG4gICAgICAgIGlmICh0eXBlb2Yoa2VlcE9wZW4pID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YodXJsKSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgIGtlZXBPcGVuID0gdXJsO1xyXG4gICAgICAgICAgICB1cmwgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGRlbGltaXRlciA9ICc/JztcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBOYXZpZ2F0b3IuY2FsbGJhY2sodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UG9wdXBDYWxsYmFjazogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfc2lnbm91dChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRTdGFydChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcykudGhlbihuYXZSZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0RW5kKG5hdlJlc3BvbnNlLnVybCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbm91dFN0YXJ0KGFyZ3MgPSB7fSwgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IucHJlcGFyZShuYXZpZ2F0b3JQYXJhbXMpLnRoZW4oaGFuZGxlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogZ290IG5hdmlnYXRvciB3aW5kb3cgaGFuZGxlXCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGxvYWRlZCBjdXJyZW50IHVzZXIgZnJvbSBzdG9yYWdlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciByZXZva2VQcm9taXNlID0gdGhpcy5fc2V0dGluZ3MucmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPyB0aGlzLl9yZXZva2VJbnRlcm5hbCh1c2VyKSA6IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldm9rZVByb21pc2UudGhlbigoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZF90b2tlbiA9IGFyZ3MuaWRfdG9rZW5faGludCB8fCB1c2VyICYmIHVzZXIuaWRfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IFNldHRpbmcgaWRfdG9rZW4gaW50byBzaWdub3V0IHJlcXVlc3RcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuaWRfdG9rZW5faGludCA9IGlkX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlVXNlcigpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiB1c2VyIHJlbW92ZWQsIGNyZWF0aW5nIHNpZ25vdXQgcmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNpZ25vdXRSZXF1ZXN0KGFyZ3MpLnRoZW4oc2lnbm91dFJlcXVlc3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogZ290IHNpZ25vdXQgcmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMudXJsID0gc2lnbm91dFJlcXVlc3QudXJsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25vdXRSZXF1ZXN0LnN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yUGFyYW1zLmlkID0gc2lnbm91dFJlcXVlc3Quc3RhdGUuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlLm5hdmlnYXRlKG5hdmlnYXRvclBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLmNsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogRXJyb3IgYWZ0ZXIgcHJlcGFyaW5nIG5hdmlnYXRvciwgY2xvc2luZyBuYXZpZ2F0b3Igd2luZG93XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWdub3V0RW5kKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTaWdub3V0UmVzcG9uc2UodXJsKS50aGVuKHNpZ25vdXRSZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0RW5kOiBnb3Qgc2lnbm91dCByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzaWdub3V0UmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2b2tlQWNjZXNzVG9rZW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZUludGVybmFsKHVzZXIsIHRydWUpLnRoZW4oc3VjY2VzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiByZW1vdmluZyB0b2tlbiBwcm9wZXJ0aWVzIGZyb20gdXNlciBhbmQgcmUtc3RvcmluZ1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci5hY2Nlc3NfdG9rZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIucmVmcmVzaF90b2tlbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci5leHBpcmVzX2F0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLnRva2VuX3R5cGUgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiB1c2VyIHN0b3JlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogYWNjZXNzIHRva2VuIHJldm9rZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2VJbnRlcm5hbCh1c2VyLCByZXF1aXJlZCkge1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIHZhciBhY2Nlc3NfdG9rZW4gPSB1c2VyLmFjY2Vzc190b2tlbjtcclxuICAgICAgICAgICAgdmFyIHJlZnJlc2hfdG9rZW4gPSB1c2VyLnJlZnJlc2hfdG9rZW47XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlQWNjZXNzVG9rZW5JbnRlcm5hbChhY2Nlc3NfdG9rZW4sIHJlcXVpcmVkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oYXRTdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlUmVmcmVzaFRva2VuSW50ZXJuYWwocmVmcmVzaF90b2tlbiwgcmVxdWlyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJ0U3VjY2VzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0U3VjY2VzcyAmJiAhcnRTdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IG5vIG5lZWQgdG8gcmV2b2tlIGR1ZSB0byBubyB0b2tlbihzKSwgb3IgSldUIGZvcm1hdFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0U3VjY2VzcyB8fCBydFN1Y2Nlc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlQWNjZXNzVG9rZW5JbnRlcm5hbChhY2Nlc3NfdG9rZW4sIHJlcXVpcmVkKSB7XHJcbiAgICAgICAgLy8gY2hlY2sgZm9yIEpXVCB2cy4gcmVmZXJlbmNlIHRva2VuXHJcbiAgICAgICAgaWYgKCFhY2Nlc3NfdG9rZW4gfHwgYWNjZXNzX3Rva2VuLmluZGV4T2YoJy4nKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2UoYWNjZXNzX3Rva2VuLCByZXF1aXJlZCkudGhlbigoKSA9PiB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlUmVmcmVzaFRva2VuSW50ZXJuYWwocmVmcmVzaF90b2tlbiwgcmVxdWlyZWQpIHtcclxuICAgICAgICBpZiAoIXJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZShyZWZyZXNoX3Rva2VuLCByZXF1aXJlZCwgXCJyZWZyZXNoX3Rva2VuXCIpLnRoZW4oKCkgPT4gdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRTaWxlbnRSZW5ldygpIHtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wU2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdTZXJ2aWNlLnN0b3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3VzZXJTdG9yZUtleSgpIHtcclxuICAgICAgICByZXR1cm4gYHVzZXI6JHt0aGlzLnNldHRpbmdzLmF1dGhvcml0eX06JHt0aGlzLnNldHRpbmdzLmNsaWVudF9pZH1gO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkVXNlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlLmdldCh0aGlzLl91c2VyU3RvcmVLZXkpLnRoZW4oc3RvcmFnZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fbG9hZFVzZXI6IHVzZXIgc3RvcmFnZVN0cmluZyBsb2FkZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gVXNlci5mcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX2xvYWRVc2VyOiBubyB1c2VyIHN0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlVXNlcih1c2VyKSB7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuc3RvcmVVc2VyOiBzdG9yaW5nIHVzZXJcIik7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3RvcmFnZVN0cmluZyA9IHVzZXIudG9TdG9yYWdlU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmUuc2V0KHRoaXMuX3VzZXJTdG9yZUtleSwgc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJzdG9yZVVzZXIuc3RvcmVVc2VyOiByZW1vdmluZyB1c2VyXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlLnJlbW92ZSh0aGlzLl91c2VyU3RvcmVLZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEFjY2Vzc1Rva2VuRXZlbnRzIH0gZnJvbSAnLi9BY2Nlc3NUb2tlbkV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSAnLi9FdmVudC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZXJFdmVudHMgZXh0ZW5kcyBBY2Nlc3NUb2tlbkV2ZW50cyB7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MpIHtcclxuICAgICAgICBzdXBlcihzZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fdXNlckxvYWRlZCA9IG5ldyBFdmVudChcIlVzZXIgbG9hZGVkXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJVbmxvYWRlZCA9IG5ldyBFdmVudChcIlVzZXIgdW5sb2FkZWRcIik7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvciA9IG5ldyBFdmVudChcIlNpbGVudCByZW5ldyBlcnJvclwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0ID0gbmV3IEV2ZW50KFwiVXNlciBzaWduZWQgb3V0XCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZCA9IG5ldyBFdmVudChcIlVzZXIgc2Vzc2lvbiBjaGFuZ2VkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWQodXNlciwgcmFpc2VFdmVudD10cnVlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMubG9hZFwiKTtcclxuICAgICAgICBzdXBlci5sb2FkKHVzZXIpO1xyXG4gICAgICAgIGlmIChyYWlzZUV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJMb2FkZWQucmFpc2UodXNlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdW5sb2FkKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLnVubG9hZFwiKTtcclxuICAgICAgICBzdXBlci51bmxvYWQoKTtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQucmFpc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyTG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlckxvYWRlZC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJMb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyTG9hZGVkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJVbmxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJVbmxvYWRlZC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJVbmxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJVbmxvYWRlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRTaWxlbnRSZW5ld0Vycm9yKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVNpbGVudFJlbmV3RXJyb3IoY2IpIHtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgX3JhaXNlU2lsZW50UmVuZXdFcnJvcihlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlU2lsZW50UmVuZXdFcnJvclwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IucmFpc2UoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclNpZ25lZE91dChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyU2lnbmVkT3V0KGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVVzZXJTaWduZWRPdXQoZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dC5yYWlzZShlKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyU2Vzc2lvbkNoYW5nZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyU2Vzc2lvbkNoYW5nZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQoZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQucmFpc2UoZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IFJlZGlyZWN0TmF2aWdhdG9yIH0gZnJvbSAnLi9SZWRpcmVjdE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IFBvcHVwTmF2aWdhdG9yIH0gZnJvbSAnLi9Qb3B1cE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IElGcmFtZU5hdmlnYXRvciB9IGZyb20gJy4vSUZyYW1lTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgV2ViU3RvcmFnZVN0YXRlU3RvcmUgfSBmcm9tICcuL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5SZXF1ZXN0IH0gZnJvbSAnLi9TaWduaW5SZXF1ZXN0LmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IDYwO1xyXG5jb25zdCBEZWZhdWx0Q2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSAyMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyU2V0dGluZ3MgZXh0ZW5kcyBPaWRjQ2xpZW50U2V0dGluZ3Mge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIHBvcHVwX3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICBwb3B1cFdpbmRvd1RhcmdldCxcclxuICAgICAgICBzaWxlbnRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0LFxyXG4gICAgICAgIGF1dG9tYXRpY1NpbGVudFJlbmV3ID0gZmFsc2UsXHJcbiAgICAgICAgdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3ID0gZmFsc2UsXHJcbiAgICAgICAgaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3ID0gdHJ1ZSxcclxuICAgICAgICBtb25pdG9yU2Vzc2lvbiA9IHRydWUsXHJcbiAgICAgICAgY2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSBEZWZhdWx0Q2hlY2tTZXNzaW9uSW50ZXJ2YWwsXHJcbiAgICAgICAgc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IgPSB0cnVlLFxyXG4gICAgICAgIHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlLFxyXG4gICAgICAgIHJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID0gZmFsc2UsXHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUsXHJcbiAgICAgICAgcmVkaXJlY3ROYXZpZ2F0b3IgPSBuZXcgUmVkaXJlY3ROYXZpZ2F0b3IoKSxcclxuICAgICAgICBwb3B1cE5hdmlnYXRvciA9IG5ldyBQb3B1cE5hdmlnYXRvcigpLFxyXG4gICAgICAgIGlmcmFtZU5hdmlnYXRvciA9IG5ldyBJRnJhbWVOYXZpZ2F0b3IoKSxcclxuICAgICAgICB1c2VyU3RvcmUgPSBuZXcgV2ViU3RvcmFnZVN0YXRlU3RvcmUoeyBzdG9yZTogR2xvYmFsLnNlc3Npb25TdG9yYWdlIH0pXHJcbiAgICB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihhcmd1bWVudHNbMF0pO1xyXG5cclxuICAgICAgICB0aGlzLl9wb3B1cF9yZWRpcmVjdF91cmkgPSBwb3B1cF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwV2luZG93RmVhdHVyZXMgPSBwb3B1cFdpbmRvd0ZlYXR1cmVzO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwV2luZG93VGFyZ2V0ID0gcG9wdXBXaW5kb3dUYXJnZXQ7XHJcblxyXG4gICAgICAgIHRoaXMuX3NpbGVudF9yZWRpcmVjdF91cmkgPSBzaWxlbnRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlcXVlc3RUaW1lb3V0ID0gc2lsZW50UmVxdWVzdFRpbWVvdXQ7XHJcbiAgICAgICAgdGhpcy5fYXV0b21hdGljU2lsZW50UmVuZXcgPSBhdXRvbWF0aWNTaWxlbnRSZW5ldztcclxuICAgICAgICB0aGlzLl92YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcgPSB2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXc7XHJcbiAgICAgICAgdGhpcy5faW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3ID0gaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3O1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuX21vbml0b3JTZXNzaW9uID0gbW9uaXRvclNlc3Npb247XHJcbiAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSBjaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgICAgICB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvciA9IHN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgICAgIGlmIChxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzWzBdICYmIGFyZ3VtZW50c1swXS5yZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlID0gU2lnbmluUmVxdWVzdC5pc09pZGMoYXJndW1lbnRzWzBdLnJlc3BvbnNlX3R5cGUpID8gXCJpZF90b2tlblwiIDogXCJjb2RlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IFwiaWRfdG9rZW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPSByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dDtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IgPSByZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgICAgICB0aGlzLl9wb3B1cE5hdmlnYXRvciA9IHBvcHVwTmF2aWdhdG9yO1xyXG4gICAgICAgIHRoaXMuX2lmcmFtZU5hdmlnYXRvciA9IGlmcmFtZU5hdmlnYXRvcjtcclxuXHJcbiAgICAgICAgdGhpcy5fdXNlclN0b3JlID0gdXNlclN0b3JlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwb3B1cF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwX3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBwb3B1cFdpbmRvd0ZlYXR1cmVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFdpbmRvd0ZlYXR1cmVzO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwV2luZG93VGFyZ2V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFdpbmRvd1RhcmdldDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lsZW50X3JlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lsZW50X3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgICBnZXQgc2lsZW50UmVxdWVzdFRpbWVvdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpbGVudFJlcXVlc3RUaW1lb3V0O1xyXG4gICAgfVxyXG4gICAgZ2V0IGF1dG9tYXRpY1NpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvbWF0aWNTaWxlbnRSZW5ldztcclxuICAgIH1cclxuICAgIGdldCB2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldztcclxuICAgIH1cclxuICAgIGdldCBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldztcclxuICAgIH1cclxuICAgIGdldCBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vbml0b3JTZXNzaW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tb25pdG9yU2Vzc2lvbjtcclxuICAgIH1cclxuICAgIGdldCBjaGVja1Nlc3Npb25JbnRlcnZhbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XHJcbiAgICB9XHJcbiAgICBnZXQgc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3I7XHJcbiAgICB9XHJcbiAgICBnZXQgcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGU7XHJcbiAgICB9XHJcbiAgICBnZXQgcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByZWRpcmVjdE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwTmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IGlmcmFtZU5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faWZyYW1lTmF2aWdhdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1c2VyU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7cHJlZml4ID0gXCJvaWRjLlwiLCBzdG9yZSA9IEdsb2JhbC5sb2NhbFN0b3JhZ2V9ID0ge30pIHtcclxuICAgICAgICB0aGlzLl9zdG9yZSA9IHN0b3JlO1xyXG4gICAgICAgIHRoaXMuX3ByZWZpeCA9IHByZWZpeDtcclxuICAgIH1cclxuXHJcbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLnNldFwiLCBrZXkpO1xyXG5cclxuICAgICAgICBrZXkgPSB0aGlzLl9wcmVmaXggKyBrZXk7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0b3JlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoa2V5KSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUuZ2V0XCIsIGtleSk7XHJcblxyXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl9zdG9yZS5nZXRJdGVtKGtleSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlKGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLnJlbW92ZVwiLCBrZXkpO1xyXG5cclxuICAgICAgICBrZXkgPSB0aGlzLl9wcmVmaXggKyBrZXk7XHJcblxyXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5fc3RvcmUuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgIHRoaXMuX3N0b3JlLnJlbW92ZUl0ZW0oa2V5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGxLZXlzKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLmdldEFsbEtleXNcIik7XHJcblxyXG4gICAgICAgIHZhciBrZXlzID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9zdG9yZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgbGV0IGtleSA9IHRoaXMuX3N0b3JlLmtleShpbmRleCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YodGhpcy5fcHJlZml4KSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleS5zdWJzdHIodGhpcy5fcHJlZml4Lmxlbmd0aCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGtleXMpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IGp3cywgS0VZVVRJTCBhcyBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXggfSBmcm9tICcuLi8uLi9qc3JzYXNpZ24vZGlzdC9qc3JzYXNpZ24uanMnO1xyXG5cclxuY29uc3QgQWxsb3dlZFNpZ25pbmdBbGdzID0gWydSUzI1NicsICdSUzM4NCcsICdSUzUxMicsICdQUzI1NicsICdQUzM4NCcsICdQUzUxMicsICdFUzI1NicsICdFUzM4NCcsICdFUzUxMiddO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIGp3cyxcclxuICAgIEtleVV0aWwsXHJcbiAgICBYNTA5LFxyXG4gICAgY3J5cHRvLFxyXG4gICAgaGV4dG9iNjR1LFxyXG4gICAgYjY0dG9oZXgsXHJcbiAgICBBbGxvd2VkU2lnbmluZ0FsZ3NcclxufTtcclxuIiwiaW1wb3J0IHV1aWQ0IGZyb20gJ3V1aWQvdjQnO1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBSRkM0MTIyIHZlcnNpb24gNCBndWlkICgpXHJcbiAqL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZG9tKCkge1xyXG4gIHJldHVybiB1dWlkNCgpLnJlcGxhY2UoLy0vZywgJycpO1xyXG59XHJcbiIsImNvbnN0IFZlcnNpb24gPSBcIjEuOS4wLWJldGEuNFwiOyBleHBvcnQge1ZlcnNpb259OyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/dist/oidc-client.min.js b/dist/oidc-client.min.js index 097fe514..89435f17 100644 --- a/dist/oidc-client.min.js +++ b/dist/oidc-client.min.js @@ -1,4 +1,4 @@ -var Oidc=function(t){var e={};function __webpack_require__(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,__webpack_require__),n.l=!0,n.exports}return __webpack_require__.m=t,__webpack_require__.c=e,__webpack_require__.d=function(t,e,r){__webpack_require__.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},__webpack_require__.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},__webpack_require__.t=function(t,e){if(1&e&&(t=__webpack_require__(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(__webpack_require__.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)__webpack_require__.d(r,n,function(e){return t[e]}.bind(null,n));return r},__webpack_require__.n=function(t){var e=t&&t.__esModule?function getDefault(){return t.default}:function getModuleExports(){return t};return __webpack_require__.d(e,"a",e),e},__webpack_require__.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=152)}([function(t,e,r){var n=r(2),i=r(19),o=r(12),s=r(13),a=r(20),u=function(t,e,r){var c,f,h,l,p=t&u.F,g=t&u.G,d=t&u.S,v=t&u.P,y=t&u.B,m=g?n:d?n[e]||(n[e]={}):(n[e]||{}).prototype,S=g?i:i[e]||(i[e]={}),_=S.prototype||(S.prototype={});for(c in g&&(r=e),r)h=((f=!p&&m&&void 0!==m[c])?m:r)[c],l=y&&f?a(h,n):v&&"function"==typeof h?a(Function.call,h):h,m&&s(m,c,h,t&u.U),S[c]!=h&&o(S,c,l),v&&_[c]!=h&&(_[c]=h)};n.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e,r){var n=r(5);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function defineProperties(t,e){for(var r=0;r=4){for(var t=arguments.length,e=Array(t),r=0;r=3){for(var t=arguments.length,e=Array(t),r=0;r=2){for(var t=arguments.length,e=Array(t),r=0;r=1){for(var t=arguments.length,e=Array(t),r=0;r0?i(n(t),9007199254740991):0}},function(t,e,r){t.exports=!r(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(1),i=r(103),o=r(24),s=Object.defineProperty;e.f=r(8)?Object.defineProperty:function defineProperty(t,e,r){if(n(t),e=o(e,!0),n(r),i)try{return s(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[e]=r.value),t}},function(t,e,r){var n=r(25);t.exports=function(t){return Object(n(t))}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,r){var n=r(9),i=r(33);t.exports=r(8)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},function(t,e,r){var n=r(2),i=r(12),o=r(15),s=r(34)("src"),a=r(156),u=(""+a).split("toString");r(19).inspectSource=function(t){return a.call(t)},(t.exports=function(t,e,r,a){var c="function"==typeof r;c&&(o(r,"name")||i(r,"name",e)),t[e]!==r&&(c&&(o(r,s)||i(r,s,t[e]?""+t[e]:u.join(String(e)))),t===n?t[e]=r:a?t[e]?t[e]=r:i(t,e,r):(delete t[e],i(t,e,r)))})(Function.prototype,"toString",function toString(){return"function"==typeof this&&this[s]||a.call(this)})},function(t,e,r){var n=r(0),i=r(4),o=r(25),s=/"/g,a=function(t,e,r,n){var i=String(o(t)),a="<"+e;return""!==r&&(a+=" "+r+'="'+String(n).replace(s,""")+'"'),a+">"+i+""};t.exports=function(t,e){var r={};r[t]=e(a),n(n.P+n.F*i(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",r)}},function(t,e){var r={}.hasOwnProperty;t.exports=function(t,e){return r.call(t,e)}},function(t,e,r){var n=r(51),i=r(25);t.exports=function(t){return n(i(t))}},function(t,e,r){var n=r(52),i=r(33),o=r(16),s=r(24),a=r(15),u=r(103),c=Object.getOwnPropertyDescriptor;e.f=r(8)?c:function getOwnPropertyDescriptor(t,e){if(t=o(t),e=s(e,!0),u)try{return c(t,e)}catch(t){}if(a(t,e))return i(!n.f.call(t,e),t[e])}},function(t,e,r){var n=r(15),i=r(10),o=r(74)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),n(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e){var r=t.exports={version:"2.6.4"};"number"==typeof __e&&(__e=r)},function(t,e,r){var n=r(11);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},function(t,e){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,e){var r=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:r)(t)}},function(t,e,r){"use strict";var n=r(4);t.exports=function(t,e){return!!t&&n(function(){e?t.call(null,function(){},1):t.call(null)})}},function(t,e,r){var n=r(5);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,r){var n=r(0),i=r(19),o=r(4);t.exports=function(t,e){var r=(i.Object||{})[t]||Object[t],s={};s[t]=e(r),n(n.S+n.F*o(function(){r(1)}),"Object",s)}},function(t,e,r){var n=r(20),i=r(51),o=r(10),s=r(7),a=r(90);t.exports=function(t,e){var r=1==t,u=2==t,c=3==t,f=4==t,h=6==t,l=5==t||h,p=e||a;return function(e,a,g){for(var d,v,y=o(e),m=i(y),S=n(a,g,3),_=s(m.length),b=0,w=r?p(e,_):u?p(e,0):void 0;_>b;b++)if((l||b in m)&&(v=S(d=m[b],b,y),t))if(r)w[b]=v;else if(v)switch(t){case 3:return!0;case 5:return d;case 6:return b;case 2:w.push(d)}else if(f)return!1;return h?-1:c||f?f:w}}},function(t,e,r){"use strict";if(r(8)){var n=r(30),i=r(2),o=r(4),s=r(0),a=r(66),u=r(98),c=r(20),f=r(40),h=r(33),l=r(12),p=r(42),g=r(22),d=r(7),v=r(131),y=r(36),m=r(24),S=r(15),_=r(46),b=r(5),w=r(10),F=r(87),E=r(37),x=r(18),k=r(38).f,A=r(89),P=r(34),I=r(6),C=r(27),R=r(56),B=r(54),T=r(92),M=r(48),O=r(61),U=r(39),N=r(91),L=r(120),D=r(9),j=r(17),H=D.f,K=j.f,V=i.RangeError,q=i.TypeError,W=i.Uint8Array,J=Array.prototype,z=u.ArrayBuffer,G=u.DataView,Y=C(0),X=C(2),$=C(3),Q=C(4),Z=C(5),tt=C(6),et=R(!0),rt=R(!1),nt=T.values,it=T.keys,ot=T.entries,st=J.lastIndexOf,at=J.reduce,ut=J.reduceRight,ct=J.join,ft=J.sort,ht=J.slice,lt=J.toString,pt=J.toLocaleString,gt=I("iterator"),dt=I("toStringTag"),vt=P("typed_constructor"),yt=P("def_constructor"),mt=a.CONSTR,St=a.TYPED,_t=a.VIEW,bt=C(1,function(t,e){return kt(B(t,t[yt]),e)}),wt=o(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),Ft=!!W&&!!W.prototype.set&&o(function(){new W(1).set({})}),Et=function(t,e){var r=g(t);if(r<0||r%e)throw V("Wrong offset!");return r},xt=function(t){if(b(t)&&St in t)return t;throw q(t+" is not a typed array!")},kt=function(t,e){if(!(b(t)&&vt in t))throw q("It is not a typed array constructor!");return new t(e)},At=function(t,e){return Pt(B(t,t[yt]),e)},Pt=function(t,e){for(var r=0,n=e.length,i=kt(t,n);n>r;)i[r]=e[r++];return i},It=function(t,e,r){H(t,e,{get:function(){return this._d[r]}})},Ct=function from(t){var e,r,n,i,o,s,a=w(t),u=arguments.length,f=u>1?arguments[1]:void 0,h=void 0!==f,l=A(a);if(void 0!=l&&!F(l)){for(s=l.call(a),n=[],e=0;!(o=s.next()).done;e++)n.push(o.value);a=n}for(h&&u>2&&(f=c(f,arguments[2],2)),e=0,r=d(a.length),i=kt(this,r);r>e;e++)i[e]=h?f(a[e],e):a[e];return i},Rt=function of(){for(var t=0,e=arguments.length,r=kt(this,e);e>t;)r[t]=arguments[t++];return r},Bt=!!W&&o(function(){pt.call(new W(1))}),Tt=function toLocaleString(){return pt.apply(Bt?ht.call(xt(this)):xt(this),arguments)},Mt={copyWithin:function copyWithin(t,e){return L.call(xt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function every(t){return Q(xt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function fill(t){return N.apply(xt(this),arguments)},filter:function filter(t){return At(this,X(xt(this),t,arguments.length>1?arguments[1]:void 0))},find:function find(t){return Z(xt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function findIndex(t){return tt(xt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function forEach(t){Y(xt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function indexOf(t){return rt(xt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function includes(t){return et(xt(this),t,arguments.length>1?arguments[1]:void 0)},join:function join(t){return ct.apply(xt(this),arguments)},lastIndexOf:function lastIndexOf(t){return st.apply(xt(this),arguments)},map:function map(t){return bt(xt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function reduce(t){return at.apply(xt(this),arguments)},reduceRight:function reduceRight(t){return ut.apply(xt(this),arguments)},reverse:function reverse(){for(var t,e=xt(this).length,r=Math.floor(e/2),n=0;n1?arguments[1]:void 0)},sort:function sort(t){return ft.call(xt(this),t)},subarray:function subarray(t,e){var r=xt(this),n=r.length,i=y(t,n);return new(B(r,r[yt]))(r.buffer,r.byteOffset+i*r.BYTES_PER_ELEMENT,d((void 0===e?n:y(e,n))-i))}},Ot=function slice(t,e){return At(this,ht.call(xt(this),t,e))},Ut=function set(t){xt(this);var e=Et(arguments[1],1),r=this.length,n=w(t),i=d(n.length),o=0;if(i+e>r)throw V("Wrong length!");for(;o255?255:255&n),i.v[p](r*e+i.o,n,wt)}(this,r,t)},enumerable:!0})};S?(g=r(function(t,r,n,i){f(t,g,c,"_d");var o,s,a,u,h=0,p=0;if(b(r)){if(!(r instanceof z||"ArrayBuffer"==(u=_(r))||"SharedArrayBuffer"==u))return St in r?Pt(g,r):Ct.call(g,r);o=r,p=Et(n,e);var y=r.byteLength;if(void 0===i){if(y%e)throw V("Wrong length!");if((s=y-p)<0)throw V("Wrong length!")}else if((s=d(i)*e)+p>y)throw V("Wrong length!");a=s/e}else a=v(r),o=new z(s=a*e);for(l(t,"_d",{b:o,o:p,l:s,e:a,v:new G(o)});hdocument.F=Object<\/script>"),t.close(),u=t.F;n--;)delete u.prototype[o[n]];return u()};t.exports=Object.create||function create(t,e){var r;return null!==t?(a.prototype=n(t),r=new a,a.prototype=null,r[s]=t):r=u(),void 0===e?r:i(r,e)}},function(t,e,r){var n=r(105),i=r(75).concat("length","prototype");e.f=Object.getOwnPropertyNames||function getOwnPropertyNames(t){return n(t,i)}},function(t,e,r){"use strict";var n=r(2),i=r(9),o=r(8),s=r(6)("species");t.exports=function(t){var e=n[t];o&&e&&!e[s]&&i.f(e,s,{configurable:!0,get:function(){return this}})}},function(t,e){t.exports=function(t,e,r,n){if(!(t instanceof e)||void 0!==n&&n in t)throw TypeError(r+": incorrect invocation!");return t}},function(t,e,r){var n=r(20),i=r(118),o=r(87),s=r(1),a=r(7),u=r(89),c={},f={};(e=t.exports=function(t,e,r,h,l){var p,g,d,v,y=l?function(){return t}:u(t),m=n(r,h,e?2:1),S=0;if("function"!=typeof y)throw TypeError(t+" is not iterable!");if(o(y)){for(p=a(t.length);p>S;S++)if((v=e?m(s(g=t[S])[0],g[1]):m(t[S]))===c||v===f)return v}else for(d=y.call(t);!(g=d.next()).done;)if((v=i(d,m,g.value,e))===c||v===f)return v}).BREAK=c,e.RETURN=f},function(t,e,r){var n=r(13);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},function(t,e,r){var n=r(5);t.exports=function(t,e){if(!n(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function defineProperties(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.JsonService;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,MetadataService),!t)throw i.Log.error("MetadataService: No settings passed to MetadataService"),new Error("settings");this._settings=t,this._jsonService=new e(["application/jwk-set+json"])}return MetadataService.prototype.getMetadata=function getMetadata(){var t=this;return this._settings.metadata?(i.Log.debug("MetadataService.getMetadata: Returning metadata from settings"),Promise.resolve(this._settings.metadata)):this.metadataUrl?(i.Log.debug("MetadataService.getMetadata: getting metadata from",this.metadataUrl),this._jsonService.getJson(this.metadataUrl).then(function(e){return i.Log.debug("MetadataService.getMetadata: json received"),t._settings.metadata=e,e})):(i.Log.error("MetadataService.getMetadata: No authority or metadataUrl configured on settings"),Promise.reject(new Error("No authority or metadataUrl configured on settings")))},MetadataService.prototype.getIssuer=function getIssuer(){return this._getMetadataProperty("issuer")},MetadataService.prototype.getAuthorizationEndpoint=function getAuthorizationEndpoint(){return this._getMetadataProperty("authorization_endpoint")},MetadataService.prototype.getUserInfoEndpoint=function getUserInfoEndpoint(){return this._getMetadataProperty("userinfo_endpoint")},MetadataService.prototype.getTokenEndpoint=function getTokenEndpoint(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._getMetadataProperty("token_endpoint",t)},MetadataService.prototype.getCheckSessionIframe=function getCheckSessionIframe(){return this._getMetadataProperty("check_session_iframe",!0)},MetadataService.prototype.getEndSessionEndpoint=function getEndSessionEndpoint(){return this._getMetadataProperty("end_session_endpoint",!0)},MetadataService.prototype.getRevocationEndpoint=function getRevocationEndpoint(){return this._getMetadataProperty("revocation_endpoint",!0)},MetadataService.prototype.getKeysEndpoint=function getKeysEndpoint(){return this._getMetadataProperty("jwks_uri",!0)},MetadataService.prototype._getMetadataProperty=function _getMetadataProperty(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return i.Log.debug("MetadataService.getMetadataProperty for: "+t),this.getMetadata().then(function(r){if(i.Log.debug("MetadataService.getMetadataProperty: metadata recieved"),void 0===r[t]){if(!0===e)return void i.Log.warn("MetadataService.getMetadataProperty: Metadata does not contain optional property "+t);throw i.Log.error("MetadataService.getMetadataProperty: Metadata does not contain property "+t),new Error("Metadata does not contain property "+t)}return r[t]})},MetadataService.prototype.getSigningKeys=function getSigningKeys(){var t=this;return this._settings.signingKeys?(i.Log.debug("MetadataService.getSigningKeys: Returning signingKeys from settings"),Promise.resolve(this._settings.signingKeys)):this._getMetadataProperty("jwks_uri").then(function(e){return i.Log.debug("MetadataService.getSigningKeys: jwks_uri received",e),t._jsonService.getJson(e).then(function(e){if(i.Log.debug("MetadataService.getSigningKeys: key set received",e),!e.keys)throw i.Log.error("MetadataService.getSigningKeys: Missing keys on keyset"),new Error("Missing keys on keyset");return t._settings.signingKeys=e.keys,t._settings.signingKeys})})},n(MetadataService,[{key:"metadataUrl",get:function get(){return this._metadataUrl||(this._settings.metadataUrl?this._metadataUrl=this._settings.metadataUrl:(this._metadataUrl=this._settings.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration"))),this._metadataUrl}}]),MetadataService}()},function(t,e,r){var n=r(19),i=r(2),o=i["__core-js_shared__"]||(i["__core-js_shared__"]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:n.version,mode:r(30)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(t,e,r){var n=r(21);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,r){"use strict";var n=r(1);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,r){var n=r(1),i=r(11),o=r(6)("species");t.exports=function(t,e){var r,s=n(t).constructor;return void 0===s||void 0==(r=n(s)[o])?e:i(r)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UrlUtility=void 0;var n=r(3),i=r(44);e.UrlUtility=function(){function UrlUtility(){!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,UrlUtility)}return UrlUtility.addQueryParam=function addQueryParam(t,e,r){return t.indexOf("?")<0&&(t+="?"),"?"!==t[t.length-1]&&(t+="&"),t+=encodeURIComponent(e),t+="=",t+=encodeURIComponent(r)},UrlUtility.parseUrlFragment=function parseUrlFragment(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.Global;"string"!=typeof t&&(t=r.location.href);var o=t.lastIndexOf(e);o>=0&&(t=t.substr(o+1)),"?"===e&&(o=t.indexOf("#"))>=0&&(t=t.substr(0,o));for(var s,a={},u=/([^&=]+)=([^&]*)/g,c=0;s=u.exec(t);)if(a[decodeURIComponent(s[1])]=decodeURIComponent(s[2]),c++>50)return n.Log.error("UrlUtility.parseUrlFragment: response exceeded expected number of parameters",t),{error:"Response exceeded expected number of parameters"};for(var f in a)return a;return{}},UrlUtility}()},function(t,e,r){var n=r(16),i=r(7),o=r(36);t.exports=function(t){return function(e,r,s){var a,u=n(e),c=i(u.length),f=o(s,c);if(t&&r!=r){for(;c>f;)if((a=u[f++])!=a)return!0}else for(;c>f;f++)if((t||f in u)&&u[f]===r)return t||f||0;return!t&&-1}}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,r){var n=r(21);t.exports=Array.isArray||function isArray(t){return"Array"==n(t)}},function(t,e,r){var n=r(22),i=r(25);t.exports=function(t){return function(e,r){var o,s,a=String(i(e)),u=n(r),c=a.length;return u<0||u>=c?t?"":void 0:(o=a.charCodeAt(u))<55296||o>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?t?a.charAt(u):o:t?a.slice(u,u+2):s-56320+(o-55296<<10)+65536}}},function(t,e,r){var n=r(5),i=r(21),o=r(6)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},function(t,e,r){var n=r(6)("iterator"),i=!1;try{var o=[7][n]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var o=[7],s=o[n]();s.next=function(){return{done:r=!0}},o[n]=function(){return s},t(o)}catch(t){}return r}},function(t,e,r){"use strict";var n=r(46),i=RegExp.prototype.exec;t.exports=function(t,e){var r=t.exec;if("function"==typeof r){var o=r.call(t,e);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==n(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},function(t,e,r){"use strict";r(122);var n=r(13),i=r(12),o=r(4),s=r(25),a=r(6),u=r(93),c=a("species"),f=!o(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),h=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var r="ab".split(t);return 2===r.length&&"a"===r[0]&&"b"===r[1]}();t.exports=function(t,e,r){var l=a(t),p=!o(function(){var e={};return e[l]=function(){return 7},7!=""[t](e)}),g=p?!o(function(){var e=!1,r=/a/;return r.exec=function(){return e=!0,null},"split"===t&&(r.constructor={},r.constructor[c]=function(){return r}),r[l](""),!e}):void 0;if(!p||!g||"replace"===t&&!f||"split"===t&&!h){var d=/./[l],v=r(s,l,""[t],function maybeCallNative(t,e,r,n,i){return e.exec===u?p&&!i?{done:!0,value:d.call(e,r,n)}:{done:!0,value:t.call(r,e,n)}:{done:!1}}),y=v[0],m=v[1];n(String.prototype,t,y),i(RegExp.prototype,l,2==e?function(t,e){return m.call(t,this,e)}:function(t){return m.call(t,this)})}}},function(t,e,r){var n=r(2).navigator;t.exports=n&&n.userAgent||""},function(t,e,r){"use strict";var n=r(2),i=r(0),o=r(13),s=r(42),a=r(31),u=r(41),c=r(40),f=r(5),h=r(4),l=r(61),p=r(45),g=r(79);t.exports=function(t,e,r,d,v,y){var m=n[t],S=m,_=v?"set":"add",b=S&&S.prototype,w={},F=function(t){var e=b[t];o(b,t,"delete"==t?function(t){return!(y&&!f(t))&&e.call(this,0===t?0:t)}:"has"==t?function has(t){return!(y&&!f(t))&&e.call(this,0===t?0:t)}:"get"==t?function get(t){return y&&!f(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function add(t){return e.call(this,0===t?0:t),this}:function set(t,r){return e.call(this,0===t?0:t,r),this})};if("function"==typeof S&&(y||b.forEach&&!h(function(){(new S).entries().next()}))){var E=new S,x=E[_](y?{}:-0,1)!=E,k=h(function(){E.has(1)}),A=l(function(t){new S(t)}),P=!y&&h(function(){for(var t=new S,e=5;e--;)t[_](e,e);return!t.has(-0)});A||((S=e(function(e,r){c(e,S,t);var n=g(new m,e,S);return void 0!=r&&u(r,v,n[_],n),n})).prototype=b,b.constructor=S),(k||P)&&(F("delete"),F("has"),v&&F("get")),(P||x)&&F(_),y&&b.clear&&delete b.clear}else S=d.getConstructor(e,t,v,_),s(S.prototype,r),a.NEED=!0;return p(S,t),w[t]=S,i(i.G+i.W+i.F*(S!=m),w),y||d.setStrong(S,t,v),S}},function(t,e,r){for(var n,i=r(2),o=r(12),s=r(34),a=s("typed_array"),u=s("view"),c=!(!i.ArrayBuffer||!i.DataView),f=c,h=0,l="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");h<9;)(n=i[l[h++]])?(o(n.prototype,a,!0),o(n.prototype,u,!0)):f=!1;t.exports={ABV:c,CONSTR:f,TYPED:a,VIEW:u}},function(t,e,r){"use strict";t.exports=r(30)||!r(4)(function(){var t=Math.random();__defineSetter__.call(null,t,function(){}),delete r(2)[t]})},function(t,e,r){"use strict";var n=r(0);t.exports=function(t){n(n.S,t,{of:function of(){for(var t=arguments.length,e=new Array(t);t--;)e[t]=arguments[t];return new this(e)}})}},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(20),s=r(41);t.exports=function(t){n(n.S,t,{from:function from(t){var e,r,n,a,u=arguments[1];return i(this),(e=void 0!==u)&&i(u),void 0==t?new this:(r=[],e?(n=0,a=o(u,arguments[2],2),s(t,!1,function(t){r.push(a(t,n++))})):s(t,!1,r.push,r),new this(r))}})}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.JoseUtil=void 0;var n=r(358),i=function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}(r(364));e.JoseUtil=(0,i.default)({jws:n.jws,KeyUtil:n.KeyUtil,X509:n.X509,crypto:n.crypto,hextob64u:n.hextob64u,b64tohex:n.b64tohex,AllowedSigningAlgs:n.AllowedSigningAlgs})},function(t,e){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e,r){var n=r(5),i=r(2).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,r){var n=r(2),i=r(19),o=r(30),s=r(104),a=r(9).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:n.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},function(t,e,r){var n=r(50)("keys"),i=r(34);t.exports=function(t){return n[t]||(n[t]=i(t))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,r){var n=r(2).document;t.exports=n&&n.documentElement},function(t,e,r){var n=r(5),i=r(1),o=function(t,e){if(i(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{(n=r(20)(Function.call,r(17).f(Object.prototype,"__proto__").set,2))(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function setPrototypeOf(t,r){return o(t,r),e?t.__proto__=r:n(t,r),t}}({},!1):void 0),check:o}},function(t,e){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(t,e,r){var n=r(5),i=r(77).set;t.exports=function(t,e,r){var o,s=e.constructor;return s!==r&&"function"==typeof s&&(o=s.prototype)!==r.prototype&&n(o)&&i&&i(t,o),t}},function(t,e,r){"use strict";var n=r(22),i=r(25);t.exports=function repeat(t){var e=String(i(this)),r="",o=n(t);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(e+=e))1&o&&(r+=e);return r}},function(t,e){t.exports=Math.sign||function sign(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e){var r=Math.expm1;t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function expm1(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:r},function(t,e,r){"use strict";var n=r(30),i=r(0),o=r(13),s=r(12),a=r(48),u=r(84),c=r(45),f=r(18),h=r(6)("iterator"),l=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,e,r,g,d,v,y){u(r,e,g);var m,S,_,b=function(t){if(!l&&t in x)return x[t];switch(t){case"keys":return function keys(){return new r(this,t)};case"values":return function values(){return new r(this,t)}}return function entries(){return new r(this,t)}},w=e+" Iterator",F="values"==d,E=!1,x=t.prototype,k=x[h]||x["@@iterator"]||d&&x[d],A=k||b(d),P=d?F?b("entries"):A:void 0,I="Array"==e&&x.entries||k;if(I&&(_=f(I.call(new t)))!==Object.prototype&&_.next&&(c(_,w,!0),n||"function"==typeof _[h]||s(_,h,p)),F&&k&&"values"!==k.name&&(E=!0,A=function values(){return k.call(this)}),n&&!y||!l&&!E&&x[h]||s(x,h,A),a[e]=A,a[w]=p,d)if(m={values:F?A:b("values"),keys:v?A:b("keys"),entries:P},y)for(S in m)S in x||o(x,S,m[S]);else i(i.P+i.F*(l||E),e,m);return m}},function(t,e,r){"use strict";var n=r(37),i=r(33),o=r(45),s={};r(12)(s,r(6)("iterator"),function(){return this}),t.exports=function(t,e,r){t.prototype=n(s,{next:i(1,r)}),o(t,e+" Iterator")}},function(t,e,r){var n=r(60),i=r(25);t.exports=function(t,e,r){if(n(e))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},function(t,e,r){var n=r(6)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[n]=!1,!"/./"[t](e)}catch(t){}}return!0}},function(t,e,r){var n=r(48),i=r(6)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(n.Array===t||o[i]===t)}},function(t,e,r){"use strict";var n=r(9),i=r(33);t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},function(t,e,r){var n=r(46),i=r(6)("iterator"),o=r(48);t.exports=r(19).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[n(t)]}},function(t,e,r){var n=r(245);t.exports=function(t,e){return new(n(t))(e)}},function(t,e,r){"use strict";var n=r(10),i=r(36),o=r(7);t.exports=function fill(t){for(var e=n(this),r=o(e.length),s=arguments.length,a=i(s>1?arguments[1]:void 0,r),u=s>2?arguments[2]:void 0,c=void 0===u?r:i(u,r);c>a;)e[a++]=t;return e}},function(t,e,r){"use strict";var n=r(32),i=r(121),o=r(48),s=r(16);t.exports=r(83)(Array,"Array",function(t,e){this._t=s(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?r:"values"==e?t[r]:[r,t[r]])},"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},function(t,e,r){"use strict";var n=r(53),i=RegExp.prototype.exec,o=String.prototype.replace,s=i,a=function(){var t=/a/,e=/b*/g;return i.call(t,"a"),i.call(e,"a"),0!==t.lastIndex||0!==e.lastIndex}(),u=void 0!==/()??/.exec("")[1];(a||u)&&(s=function exec(t){var e,r,s,c,f=this;return u&&(r=new RegExp("^"+f.source+"$(?!\\s)",n.call(f))),a&&(e=f.lastIndex),s=i.call(f,t),a&&s&&(f.lastIndex=f.global?s.index+s[0].length:e),u&&s&&s.length>1&&o.call(s[0],r,function(){for(c=1;cr;)e.push(arguments[r++]);return y[++v]=function(){a("function"==typeof t?t:Function(t),e)},n(v),v},p=function clearImmediate(t){delete y[t]},"process"==r(21)(h)?n=function(t){h.nextTick(s(m,t,1))}:d&&d.now?n=function(t){d.now(s(m,t,1))}:g?(o=(i=new g).port2,i.port1.onmessage=S,n=s(o.postMessage,o,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(n=function(t){f.postMessage(t+"","*")},f.addEventListener("message",S,!1)):n="onreadystatechange"in c("script")?function(t){u.appendChild(c("script")).onreadystatechange=function(){u.removeChild(this),m.call(t)}}:function(t){setTimeout(s(m,t,1),0)}),t.exports={set:l,clear:p}},function(t,e,r){var n=r(2),i=r(95).set,o=n.MutationObserver||n.WebKitMutationObserver,s=n.process,a=n.Promise,u="process"==r(21)(s);t.exports=function(){var t,e,r,c=function(){var n,i;for(u&&(n=s.domain)&&n.exit();t;){i=t.fn,t=t.next;try{i()}catch(n){throw t?r():e=void 0,n}}e=void 0,n&&n.enter()};if(u)r=function(){s.nextTick(c)};else if(!o||n.navigator&&n.navigator.standalone)if(a&&a.resolve){var f=a.resolve(void 0);r=function(){f.then(c)}}else r=function(){i.call(n,c)};else{var h=!0,l=document.createTextNode("");new o(c).observe(l,{characterData:!0}),r=function(){l.data=h=!h}}return function(n){var i={fn:n,next:void 0};e&&(e.next=i),t||(t=i,r()),e=i}}},function(t,e,r){"use strict";var n=r(11);t.exports.f=function(t){return new function PromiseCapability(t){var e,r;this.promise=new t(function(t,n){if(void 0!==e||void 0!==r)throw TypeError("Bad Promise constructor");e=t,r=n}),this.resolve=n(e),this.reject=n(r)}(t)}},function(t,e,r){"use strict";var n=r(2),i=r(8),o=r(30),s=r(66),a=r(12),u=r(42),c=r(4),f=r(40),h=r(22),l=r(7),p=r(131),g=r(38).f,d=r(9).f,v=r(91),y=r(45),m="prototype",S="Wrong index!",_=n.ArrayBuffer,b=n.DataView,w=n.Math,F=n.RangeError,E=n.Infinity,x=_,k=w.abs,A=w.pow,P=w.floor,I=w.log,C=w.LN2,R=i?"_b":"buffer",B=i?"_l":"byteLength",T=i?"_o":"byteOffset";function packIEEE754(t,e,r){var n,i,o,s=new Array(r),a=8*r-e-1,u=(1<>1,f=23===e?A(2,-24)-A(2,-77):0,h=0,l=t<0||0===t&&1/t<0?1:0;for((t=k(t))!=t||t===E?(i=t!=t?1:0,n=u):(n=P(I(t)/C),t*(o=A(2,-n))<1&&(n--,o*=2),(t+=n+c>=1?f/o:f*A(2,1-c))*o>=2&&(n++,o/=2),n+c>=u?(i=0,n=u):n+c>=1?(i=(t*o-1)*A(2,e),n+=c):(i=t*A(2,c-1)*A(2,e),n=0));e>=8;s[h++]=255&i,i/=256,e-=8);for(n=n<0;s[h++]=255&n,n/=256,a-=8);return s[--h]|=128*l,s}function unpackIEEE754(t,e,r){var n,i=8*r-e-1,o=(1<>1,a=i-7,u=r-1,c=t[u--],f=127&c;for(c>>=7;a>0;f=256*f+t[u],u--,a-=8);for(n=f&(1<<-a)-1,f>>=-a,a+=e;a>0;n=256*n+t[u],u--,a-=8);if(0===f)f=1-s;else{if(f===o)return n?NaN:c?-E:E;n+=A(2,e),f-=s}return(c?-1:1)*n*A(2,f-e)}function unpackI32(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function packI8(t){return[255&t]}function packI16(t){return[255&t,t>>8&255]}function packI32(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function packF64(t){return packIEEE754(t,52,8)}function packF32(t){return packIEEE754(t,23,4)}function addGetter(t,e,r){d(t[m],e,{get:function(){return this[r]}})}function get(t,e,r,n){var i=p(+r);if(i+e>t[B])throw F(S);var o=t[R]._b,s=i+t[T],a=o.slice(s,s+e);return n?a:a.reverse()}function set(t,e,r,n,i,o){var s=p(+r);if(s+e>t[B])throw F(S);for(var a=t[R]._b,u=s+t[T],c=n(+i),f=0;fN;)(M=U[N++])in _||a(_,M,x[M]);o||(O.constructor=_)}var L=new b(new _(2)),D=b[m].setInt8;L.setInt8(0,2147483648),L.setInt8(1,2147483649),!L.getInt8(0)&&L.getInt8(1)||u(b[m],{setInt8:function setInt8(t,e){D.call(this,t,e<<24>>24)},setUint8:function setUint8(t,e){D.call(this,t,e<<24>>24)}},!0)}else _=function ArrayBuffer(t){f(this,_,"ArrayBuffer");var e=p(t);this._b=v.call(new Array(e),0),this[B]=e},b=function DataView(t,e,r){f(this,b,"DataView"),f(t,_,"DataView");var n=t[B],i=h(e);if(i<0||i>n)throw F("Wrong offset!");if(i+(r=void 0===r?n-i:l(r))>n)throw F("Wrong length!");this[R]=t,this[T]=i,this[B]=r},i&&(addGetter(_,"byteLength","_l"),addGetter(b,"buffer","_b"),addGetter(b,"byteLength","_l"),addGetter(b,"byteOffset","_o")),u(b[m],{getInt8:function getInt8(t){return get(this,1,t)[0]<<24>>24},getUint8:function getUint8(t){return get(this,1,t)[0]},getInt16:function getInt16(t){var e=get(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function getUint16(t){var e=get(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function getInt32(t){return unpackI32(get(this,4,t,arguments[1]))},getUint32:function getUint32(t){return unpackI32(get(this,4,t,arguments[1]))>>>0},getFloat32:function getFloat32(t){return unpackIEEE754(get(this,4,t,arguments[1]),23,4)},getFloat64:function getFloat64(t){return unpackIEEE754(get(this,8,t,arguments[1]),52,8)},setInt8:function setInt8(t,e){set(this,1,t,packI8,e)},setUint8:function setUint8(t,e){set(this,1,t,packI8,e)},setInt16:function setInt16(t,e){set(this,2,t,packI16,e,arguments[2])},setUint16:function setUint16(t,e){set(this,2,t,packI16,e,arguments[2])},setInt32:function setInt32(t,e){set(this,4,t,packI32,e,arguments[2])},setUint32:function setUint32(t,e){set(this,4,t,packI32,e,arguments[2])},setFloat32:function setFloat32(t,e){set(this,4,t,packF32,e,arguments[2])},setFloat64:function setFloat64(t,e){set(this,8,t,packF64,e,arguments[2])}});y(_,"ArrayBuffer"),y(b,"DataView"),a(b[m],s.VIEW,!0),e.ArrayBuffer=_,e.DataView=b},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OidcClientSettings=void 0;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function defineProperties(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=t.authority,r=t.metadataUrl,i=t.metadata,o=t.signingKeys,p=t.client_id,g=t.client_secret,d=t.response_type,v=void 0===d?c:d,y=t.scope,m=void 0===y?f:y,S=t.redirect_uri,_=t.post_logout_redirect_uri,b=t.prompt,w=t.display,F=t.max_age,E=t.ui_locales,x=t.acr_values,k=t.resource,A=t.response_mode,P=t.filterProtocolClaims,I=void 0===P||P,C=t.loadUserInfo,R=void 0===C||C,B=t.staleStateAge,T=void 0===B?h:B,M=t.clockSkew,O=void 0===M?l:M,U=t.userInfoJwtIssuer,N=void 0===U?"OP":U,L=t.stateStore,D=void 0===L?new s.WebStorageStateStore:L,j=t.ResponseValidatorCtor,H=void 0===j?a.ResponseValidator:j,K=t.MetadataServiceCtor,V=void 0===K?u.MetadataService:K,q=t.extraQueryParams,W=void 0===q?{}:q;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,OidcClientSettings),this._authority=e,this._metadataUrl=r,this._metadata=i,this._signingKeys=o,this._client_id=p,this._client_secret=g,this._response_type=v,this._scope=m,this._redirect_uri=S,this._post_logout_redirect_uri=_,this._prompt=b,this._display=w,this._max_age=F,this._ui_locales=E,this._acr_values=x,this._resource=k,this._response_mode=A,this._filterProtocolClaims=!!I,this._loadUserInfo=!!R,this._staleStateAge=T,this._clockSkew=O,this._userInfoJwtIssuer=N,this._stateStore=D,this._validator=new H(this),this._metadataService=new V(this),this._extraQueryParams="object"===(void 0===W?"undefined":n(W))?W:{}}return i(OidcClientSettings,[{key:"client_id",get:function get(){return this._client_id},set:function set(t){if(this._client_id)throw o.Log.error("OidcClientSettings.set_client_id: client_id has already been assigned."),new Error("client_id has already been assigned.");this._client_id=t}},{key:"client_secret",get:function get(){return this._client_secret}},{key:"response_type",get:function get(){return this._response_type}},{key:"scope",get:function get(){return this._scope}},{key:"redirect_uri",get:function get(){return this._redirect_uri}},{key:"post_logout_redirect_uri",get:function get(){return this._post_logout_redirect_uri}},{key:"prompt",get:function get(){return this._prompt}},{key:"display",get:function get(){return this._display}},{key:"max_age",get:function get(){return this._max_age}},{key:"ui_locales",get:function get(){return this._ui_locales}},{key:"acr_values",get:function get(){return this._acr_values}},{key:"resource",get:function get(){return this._resource}},{key:"response_mode",get:function get(){return this._response_mode}},{key:"authority",get:function get(){return this._authority},set:function set(t){if(this._authority)throw o.Log.error("OidcClientSettings.set_authority: authority has already been assigned."),new Error("authority has already been assigned.");this._authority=t}},{key:"metadataUrl",get:function get(){return this._metadataUrl||(this._metadataUrl=this.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration")),this._metadataUrl}},{key:"metadata",get:function get(){return this._metadata},set:function set(t){this._metadata=t}},{key:"signingKeys",get:function get(){return this._signingKeys},set:function set(t){this._signingKeys=t}},{key:"filterProtocolClaims",get:function get(){return this._filterProtocolClaims}},{key:"loadUserInfo",get:function get(){return this._loadUserInfo}},{key:"staleStateAge",get:function get(){return this._staleStateAge}},{key:"clockSkew",get:function get(){return this._clockSkew}},{key:"userInfoJwtIssuer",get:function get(){return this._userInfoJwtIssuer}},{key:"stateStore",get:function get(){return this._stateStore}},{key:"validator",get:function get(){return this._validator}},{key:"metadataService",get:function get(){return this._metadataService}},{key:"extraQueryParams",get:function get(){return this._extraQueryParams},set:function set(t){"object"===(void 0===t?"undefined":n(t))?this._extraQueryParams=t:this._extraQueryParams={}}}]),OidcClientSettings}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WebStorageStateStore=void 0;var n=r(3),i=r(44);e.WebStorageStateStore=function(){function WebStorageStateStore(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.prefix,r=void 0===e?"oidc.":e,n=t.store,o=void 0===n?i.Global.localStorage:n;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,WebStorageStateStore),this._store=o,this._prefix=r}return WebStorageStateStore.prototype.set=function set(t,e){return n.Log.debug("WebStorageStateStore.set",t),t=this._prefix+t,this._store.setItem(t,e),Promise.resolve()},WebStorageStateStore.prototype.get=function get(t){n.Log.debug("WebStorageStateStore.get",t),t=this._prefix+t;var e=this._store.getItem(t);return Promise.resolve(e)},WebStorageStateStore.prototype.remove=function remove(t){n.Log.debug("WebStorageStateStore.remove",t),t=this._prefix+t;var e=this._store.getItem(t);return this._store.removeItem(t),Promise.resolve(e)},WebStorageStateStore.prototype.getAllKeys=function getAllKeys(){n.Log.debug("WebStorageStateStore.getAllKeys");for(var t=[],e=0;e0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,JsonService),t&&Array.isArray(t)?this._contentTypes=t.slice():this._contentTypes=[],this._contentTypes.push("application/json"),r&&this._contentTypes.push("application/jwt"),this._XMLHttpRequest=e,this._jwtHandler=r}return JsonService.prototype.getJson=function getJson(t,e){var r=this;if(!t)throw n.Log.error("JsonService.getJson: No url passed"),new Error("url");return n.Log.debug("JsonService.getJson, url: ",t),new Promise(function(i,o){var s=new r._XMLHttpRequest;s.open("GET",t);var a=r._contentTypes,u=r._jwtHandler;s.onload=function(){if(n.Log.debug("JsonService.getJson: HTTP response received, status",s.status),200===s.status){var e=s.getResponseHeader("Content-Type");if(e){var r=a.find(function(t){if(e.startsWith(t))return!0});if("application/jwt"==r)return void u(s).then(i,o);if(r)try{return void i(JSON.parse(s.responseText))}catch(t){return n.Log.error("JsonService.getJson: Error parsing JSON response",t.message),void o(t)}}o(Error("Invalid response Content-Type: "+e+", from URL: "+t))}else o(Error(s.statusText+" ("+s.status+")"))},s.onerror=function(){n.Log.error("JsonService.getJson: network error"),o(Error("Network Error"))},e&&(n.Log.debug("JsonService.getJson: token passed, setting Authorization header"),s.setRequestHeader("Authorization","Bearer "+e)),s.send()})},JsonService.prototype.postForm=function postForm(t,e){var r=this;if(!t)throw n.Log.error("JsonService.postForm: No url passed"),new Error("url");return n.Log.debug("JsonService.postForm, url: ",t),new Promise(function(i,o){var s=new r._XMLHttpRequest;s.open("POST",t);var a=r._contentTypes;s.onload=function(){if(n.Log.debug("JsonService.postForm: HTTP response received, status",s.status),200!==s.status){if(400===s.status)if(r=s.getResponseHeader("Content-Type"))if(a.find(function(t){if(r.startsWith(t))return!0}))try{var e=JSON.parse(s.responseText);if(e&&e.error)return n.Log.error("JsonService.postForm: Error from server: ",e.error),void o(new Error(e.error))}catch(t){return n.Log.error("JsonService.postForm: Error parsing JSON response",t.message),void o(t)}o(Error(s.statusText+" ("+s.status+")"))}else{var r;if((r=s.getResponseHeader("Content-Type"))&&a.find(function(t){if(r.startsWith(t))return!0}))try{return void i(JSON.parse(s.responseText))}catch(t){return n.Log.error("JsonService.postForm: Error parsing JSON response",t.message),void o(t)}o(Error("Invalid response Content-Type: "+r+", from URL: "+t))}},s.onerror=function(){n.Log.error("JsonService.postForm: network error"),o(Error("Network Error"))};var u="";for(var c in e){var f=e[c];f&&(u.length>0&&(u+="&"),u+=encodeURIComponent(c),u+="=",u+=encodeURIComponent(f))}s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(u)})},JsonService}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.State=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=t.id,r=t.data,n=t.created,i=t.request_type;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,State),this._id=e||(0,o.default)(),this._data=r,this._created="number"==typeof n&&n>0?n:parseInt(Date.now()/1e3),this._request_type=i}return State.prototype.toStorageString=function toStorageString(){return i.Log.debug("State.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type})},State.fromStorageString=function fromStorageString(t){return i.Log.debug("State.fromStorageString"),new State(JSON.parse(t))},State.clearStaleState=function clearStaleState(t,e){var r=Date.now()/1e3-e;return t.getAllKeys().then(function(e){i.Log.debug("State.clearStaleState: got keys",e);for(var n=[],o=function _loop(o){var s=e[o];a=t.get(s).then(function(e){var n=!1;if(e)try{var o=State.fromStorageString(e);i.Log.debug("State.clearStaleState: got item from key: ",s,o.created),o.created<=r&&(n=!0)}catch(t){i.Log.error("State.clearStaleState: Error parsing state for key",s,t.message),n=!0}else i.Log.debug("State.clearStaleState: no item in storage for key: ",s),n=!0;if(n)return i.Log.debug("State.clearStaleState: removed item for key: ",s),t.remove(s)}),n.push(a)},s=0;su;)n(a,r=e[u++])&&(~o(c,r)||c.push(r));return c}},function(t,e,r){var n=r(9),i=r(1),o=r(35);t.exports=r(8)?Object.defineProperties:function defineProperties(t,e){i(t);for(var r,s=o(e),a=s.length,u=0;a>u;)n.f(t,r=s[u++],e[r]);return t}},function(t,e,r){var n=r(16),i=r(38).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function getOwnPropertyNames(t){return s&&"[object Window]"==o.call(t)?function(t){try{return i(t)}catch(t){return s.slice()}}(t):i(n(t))}},function(t,e,r){"use strict";var n=r(35),i=r(57),o=r(52),s=r(10),a=r(51),u=Object.assign;t.exports=!u||r(4)(function(){var t={},e={},r=Symbol(),n="abcdefghijklmnopqrst";return t[r]=7,n.split("").forEach(function(t){e[t]=t}),7!=u({},t)[r]||Object.keys(u({},e)).join("")!=n})?function assign(t,e){for(var r=s(t),u=arguments.length,c=1,f=i.f,h=o.f;u>c;)for(var l,p=a(arguments[c++]),g=f?n(p).concat(f(p)):n(p),d=g.length,v=0;d>v;)h.call(p,l=g[v++])&&(r[l]=p[l]);return r}:u},function(t,e){t.exports=Object.is||function is(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},function(t,e,r){"use strict";var n=r(11),i=r(5),o=r(111),s=[].slice,a={};t.exports=Function.bind||function bind(t){var e=n(this),r=s.call(arguments,1),u=function(){var n=r.concat(s.call(arguments));return this instanceof u?function(t,e,r){if(!(e in a)){for(var n=[],i=0;i>>0||(s.test(r)?16:10))}:n},function(t,e,r){var n=r(2).parseFloat,i=r(47).trim;t.exports=1/n(r(78)+"-0")!=-1/0?function parseFloat(t){var e=i(String(t),3),r=n(e);return 0===r&&"-"==e.charAt(0)?-0:r}:n},function(t,e,r){var n=r(21);t.exports=function(t,e){if("number"!=typeof t&&"Number"!=n(t))throw TypeError(e);return+t}},function(t,e,r){var n=r(5),i=Math.floor;t.exports=function isInteger(t){return!n(t)&&isFinite(t)&&i(t)===t}},function(t,e){t.exports=Math.log1p||function log1p(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},function(t,e,r){var n=r(81),i=Math.pow,o=i(2,-52),s=i(2,-23),a=i(2,127)*(2-s),u=i(2,-126);t.exports=Math.fround||function fround(t){var e,r,i=Math.abs(t),c=n(t);return ia||r!=r?c*(1/0):c*r}},function(t,e,r){var n=r(1);t.exports=function(t,e,r,i){try{return i?e(n(r)[0],r[1]):e(r)}catch(e){var o=t.return;throw void 0!==o&&n(o.call(t)),e}}},function(t,e,r){var n=r(11),i=r(10),o=r(51),s=r(7);t.exports=function(t,e,r,a,u){n(e);var c=i(t),f=o(c),h=s(c.length),l=u?h-1:0,p=u?-1:1;if(r<2)for(;;){if(l in f){a=f[l],l+=p;break}if(l+=p,u?l<0:h<=l)throw TypeError("Reduce of empty array with no initial value")}for(;u?l>=0:h>l;l+=p)l in f&&(a=e(a,f[l],l,c));return a}},function(t,e,r){"use strict";var n=r(10),i=r(36),o=r(7);t.exports=[].copyWithin||function copyWithin(t,e){var r=n(this),s=o(r.length),a=i(t,s),u=i(e,s),c=arguments.length>2?arguments[2]:void 0,f=Math.min((void 0===c?s:i(c,s))-u,s-a),h=1;for(u0;)u in r?r[a]=r[u]:delete r[a],a+=h,u+=h;return r}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,r){"use strict";var n=r(93);r(0)({target:"RegExp",proto:!0,forced:n!==/./.exec},{exec:n})},function(t,e,r){r(8)&&"g"!=/./g.flags&&r(9).f(RegExp.prototype,"flags",{configurable:!0,get:r(53)})},function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,e,r){var n=r(1),i=r(5),o=r(97);t.exports=function(t,e){if(n(t),i(e)&&e.constructor===t)return e;var r=o.f(t);return(0,r.resolve)(e),r.promise}},function(t,e,r){"use strict";var n=r(127),i=r(43);t.exports=r(65)("Map",function(t){return function Map(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function get(t){var e=n.getEntry(i(this,"Map"),t);return e&&e.v},set:function set(t,e){return n.def(i(this,"Map"),0===t?0:t,e)}},n,!0)},function(t,e,r){"use strict";var n=r(9).f,i=r(37),o=r(42),s=r(20),a=r(40),u=r(41),c=r(83),f=r(121),h=r(39),l=r(8),p=r(31).fastKey,g=r(43),d=l?"_s":"size",v=function(t,e){var r,n=p(e);if("F"!==n)return t._i[n];for(r=t._f;r;r=r.n)if(r.k==e)return r};t.exports={getConstructor:function(t,e,r,c){var f=t(function(t,n){a(t,f,e,"_i"),t._t=e,t._i=i(null),t._f=void 0,t._l=void 0,t[d]=0,void 0!=n&&u(n,r,t[c],t)});return o(f.prototype,{clear:function clear(){for(var t=g(this,e),r=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete r[n.i];t._f=t._l=void 0,t[d]=0},delete:function(t){var r=g(this,e),n=v(r,t);if(n){var i=n.n,o=n.p;delete r._i[n.i],n.r=!0,o&&(o.n=i),i&&(i.p=o),r._f==n&&(r._f=i),r._l==n&&(r._l=o),r[d]--}return!!n},forEach:function forEach(t){g(this,e);for(var r,n=s(t,arguments.length>1?arguments[1]:void 0,3);r=r?r.n:this._f;)for(n(r.v,r.k,this);r&&r.r;)r=r.p},has:function has(t){return!!v(g(this,e),t)}}),l&&n(f.prototype,"size",{get:function(){return g(this,e)[d]}}),f},def:function(t,e,r){var n,i,o=v(t,e);return o?o.v=r:(t._l=o={i:i=p(e,!0),k:e,v:r,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[d]++,"F"!==i&&(t._i[i]=o)),t},getEntry:v,setStrong:function(t,e,r){c(t,e,function(t,r){this._t=g(t,e),this._k=r,this._l=void 0},function(){for(var t=this._k,e=this._l;e&&e.r;)e=e.p;return this._t&&(this._l=e=e?e.n:this._t._f)?f(0,"keys"==t?e.k:"values"==t?e.v:[e.k,e.v]):(this._t=void 0,f(1))},r?"entries":"values",!r,!0),h(e)}}},function(t,e,r){"use strict";var n=r(127),i=r(43);t.exports=r(65)("Set",function(t){return function Set(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function add(t){return n.def(i(this,"Set"),t=0===t?0:t,t)}},n)},function(t,e,r){"use strict";var n,i=r(2),o=r(27)(0),s=r(13),a=r(31),u=r(108),c=r(130),f=r(5),h=r(43),l=r(43),p=!i.ActiveXObject&&"ActiveXObject"in i,g=a.getWeak,d=Object.isExtensible,v=c.ufstore,y=function(t){return function WeakMap(){return t(this,arguments.length>0?arguments[0]:void 0)}},m={get:function get(t){if(f(t)){var e=g(t);return!0===e?v(h(this,"WeakMap")).get(t):e?e[this._i]:void 0}},set:function set(t,e){return c.def(h(this,"WeakMap"),t,e)}},S=t.exports=r(65)("WeakMap",y,m,c,!0,!0);l&&p&&(u((n=c.getConstructor(y,"WeakMap")).prototype,m),a.NEED=!0,o(["delete","has","get","set"],function(t){var e=S.prototype,r=e[t];s(e,t,function(e,i){if(f(e)&&!d(e)){this._f||(this._f=new n);var o=this._f[t](e,i);return"set"==t?this:o}return r.call(this,e,i)})}))},function(t,e,r){"use strict";var n=r(42),i=r(31).getWeak,o=r(1),s=r(5),a=r(40),u=r(41),c=r(27),f=r(15),h=r(43),l=c(5),p=c(6),g=0,d=function(t){return t._l||(t._l=new v)},v=function(){this.a=[]},y=function(t,e){return l(t.a,function(t){return t[0]===e})};v.prototype={get:function(t){var e=y(this,t);if(e)return e[1]},has:function(t){return!!y(this,t)},set:function(t,e){var r=y(this,t);r?r[1]=e:this.a.push([t,e])},delete:function(t){var e=p(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,r,o){var c=t(function(t,n){a(t,c,e,"_i"),t._t=e,t._i=g++,t._l=void 0,void 0!=n&&u(n,r,t[o],t)});return n(c.prototype,{delete:function(t){if(!s(t))return!1;var r=i(t);return!0===r?d(h(this,e)).delete(t):r&&f(r,this._i)&&delete r[this._i]},has:function has(t){if(!s(t))return!1;var r=i(t);return!0===r?d(h(this,e)).has(t):r&&f(r,this._i)}}),c},def:function(t,e,r){var n=i(o(e),!0);return!0===n?d(t).set(e,r):n[t._i]=r,t},ufstore:d}},function(t,e,r){var n=r(22),i=r(7);t.exports=function(t){if(void 0===t)return 0;var e=n(t),r=i(e);if(e!==r)throw RangeError("Wrong length!");return r}},function(t,e,r){var n=r(38),i=r(57),o=r(1),s=r(2).Reflect;t.exports=s&&s.ownKeys||function ownKeys(t){var e=n.f(o(t)),r=i.f;return r?e.concat(r(t)):e}},function(t,e,r){"use strict";var n=r(58),i=r(5),o=r(7),s=r(20),a=r(6)("isConcatSpreadable");t.exports=function flattenIntoArray(t,e,r,u,c,f,h,l){for(var p,g,d=c,v=0,y=!!h&&s(h,l,3);v0)d=flattenIntoArray(t,e,p,o(p.length),d,f-1)-1;else{if(d>=9007199254740991)throw TypeError();t[d]=p}d++}v++}return d}},function(t,e,r){var n=r(7),i=r(80),o=r(25);t.exports=function(t,e,r,s){var a=String(o(t)),u=a.length,c=void 0===r?" ":String(r),f=n(e);if(f<=u||""==c)return a;var h=f-u,l=i.call(c,Math.ceil(h/c.length));return l.length>h&&(l=l.slice(0,h)),s?l+a:a+l}},function(t,e,r){var n=r(35),i=r(16),o=r(52).f;t.exports=function(t){return function(e){for(var r,s=i(e),a=n(s),u=a.length,c=0,f=[];u>c;)o.call(s,r=a[c++])&&f.push(t?[r,s[r]]:s[r]);return f}}},function(t,e,r){var n=r(46),i=r(137);t.exports=function(t){return function toJSON(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},function(t,e,r){var n=r(41);t.exports=function(t,e){var r=[];return n(t,!1,r.push,r,e),r}},function(t,e){t.exports=Math.scale||function scale(t,e,r,n,i){return 0===arguments.length||t!=t||e!=e||r!=r||n!=n||i!=i?NaN:t===1/0||t===-1/0?t:(t-e)*(i-n)/(r-e)+n}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OidcClient=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,OidcClient),t instanceof o.OidcClientSettings?this._settings=t:this._settings=new o.OidcClientSettings(t)}return OidcClient.prototype.createSigninRequest=function createSigninRequest(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.response_type,n=e.scope,o=e.redirect_uri,s=e.data,u=e.state,c=e.prompt,f=e.display,h=e.max_age,l=e.ui_locales,p=e.id_token_hint,g=e.login_hint,d=e.acr_values,v=e.resource,y=e.request,m=e.request_uri,S=e.response_mode,_=e.extraQueryParams,b=e.request_type,w=arguments[1];i.Log.debug("OidcClient.createSigninRequest");var F=this._settings.client_id;r=r||this._settings.response_type,n=n||this._settings.scope,o=o||this._settings.redirect_uri,c=c||this._settings.prompt,f=f||this._settings.display,h=h||this._settings.max_age,l=l||this._settings.ui_locales,d=d||this._settings.acr_values,v=v||this._settings.resource,S=S||this._settings.response_mode,_=_||this._settings.extraQueryParams;var E=this._settings.authority;return a.SigninRequest.isCode(r)&&"code"!==r?Promise.reject(new Error("OpenID Connect hybrid flow is not supported")):this._metadataService.getAuthorizationEndpoint().then(function(e){i.Log.debug("OidcClient.createSigninRequest: Received authorization endpoint",e);var x=new a.SigninRequest({url:e,client_id:F,redirect_uri:o,response_type:r,scope:n,data:s||u,authority:E,prompt:c,display:f,max_age:h,ui_locales:l,id_token_hint:p,login_hint:g,acr_values:d,resource:v,request:y,request_uri:m,extraQueryParams:_,request_type:b,response_mode:S}),k=x.state;return(w=w||t._stateStore).set(k.id,k.toStorageString()).then(function(){return x})})},OidcClient.prototype.readSigninResponseState=function readSigninResponseState(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSigninResponseState");var n="query"===this._settings.response_mode||!this._settings.response_mode&&a.SigninRequest.isCode(this._settings.response_type)?"?":"#",o=new u.SigninResponse(t,n);return o.state?(e=e||this._stateStore,(r?e.remove.bind(e):e.get.bind(e))(o.state).then(function(t){if(!t)throw i.Log.error("OidcClient.readSigninResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:h.SigninState.fromStorageString(t),response:o}})):(i.Log.error("OidcClient.readSigninResponseState: No state in response"),Promise.reject(new Error("No state in response")))},OidcClient.prototype.processSigninResponse=function processSigninResponse(t,e){var r=this;return i.Log.debug("OidcClient.processSigninResponse"),this.readSigninResponseState(t,e,!0).then(function(t){var e=t.state,n=t.response;return i.Log.debug("OidcClient.processSigninResponse: Received state from storage; validating response"),r._validator.validateSigninResponse(e,n)})},OidcClient.prototype.createSignoutRequest=function createSignoutRequest(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.id_token_hint,n=e.data,o=e.state,s=e.post_logout_redirect_uri,a=e.extraQueryParams,u=e.request_type,f=arguments[1];return i.Log.debug("OidcClient.createSignoutRequest"),s=s||this._settings.post_logout_redirect_uri,a=a||this._settings.extraQueryParams,this._metadataService.getEndSessionEndpoint().then(function(e){if(!e)throw i.Log.error("OidcClient.createSignoutRequest: No end session endpoint url returned"),new Error("no end session endpoint");i.Log.debug("OidcClient.createSignoutRequest: Received end session endpoint",e);var h=new c.SignoutRequest({url:e,id_token_hint:r,post_logout_redirect_uri:s,data:n||o,extraQueryParams:a,request_type:u}),l=h.state;return l&&(i.Log.debug("OidcClient.createSignoutRequest: Signout request has state to persist"),(f=f||t._stateStore).set(l.id,l.toStorageString())),h})},OidcClient.prototype.readSignoutResponseState=function readSignoutResponseState(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSignoutResponseState");var n=new f.SignoutResponse(t);if(!n.state)return i.Log.debug("OidcClient.readSignoutResponseState: No state in response"),n.error?(i.Log.warn("OidcClient.readSignoutResponseState: Response was error: ",n.error),Promise.reject(new s.ErrorResponse(n))):Promise.resolve({undefined:void 0,response:n});var o=n.state;return e=e||this._stateStore,(r?e.remove.bind(e):e.get.bind(e))(o).then(function(t){if(!t)throw i.Log.error("OidcClient.readSignoutResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:l.State.fromStorageString(t),response:n}})},OidcClient.prototype.processSignoutResponse=function processSignoutResponse(t,e){var r=this;return i.Log.debug("OidcClient.processSignoutResponse"),this.readSignoutResponseState(t,e,!0).then(function(t){var e=t.state,n=t.response;return i.Log.debug("OidcClient.processSignoutResponse: Received state from storage; validating response"),r._validator.validateSignoutResponse(e,n)})},OidcClient.prototype.clearStaleState=function clearStaleState(t){return i.Log.debug("OidcClient.clearStaleState"),t=t||this._stateStore,l.State.clearStaleState(t,this.settings.staleStateAge)},n(OidcClient,[{key:"_stateStore",get:function get(){return this.settings.stateStore}},{key:"_validator",get:function get(){return this.settings.validator}},{key:"_metadataService",get:function get(){return this.settings.metadataService}},{key:"settings",get:function get(){return this._settings}},{key:"metadataService",get:function get(){return this._metadataService}}]),OidcClient}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenClient=void 0;var n=r(101),i=r(49),o=r(3);e.TokenClient=function(){function TokenClient(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,TokenClient),!t)throw o.Log.error("TokenClient.ctor: No settings passed"),new Error("settings");this._settings=t,this._jsonService=new e,this._metadataService=new r(this._settings)}return TokenClient.prototype.exchangeCode=function exchangeCode(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.grant_type=e.grant_type||"authorization_code",e.client_id=e.client_id||this._settings.client_id,e.redirect_uri=e.redirect_uri||this._settings.redirect_uri,e.code?e.redirect_uri?e.code_verifier?e.client_id?this._metadataService.getTokenEndpoint(!1).then(function(r){return o.Log.debug("TokenClient.exchangeCode: Received token endpoint"),t._jsonService.postForm(r,e).then(function(t){return o.Log.debug("TokenClient.exchangeCode: response received"),t})}):(o.Log.error("TokenClient.exchangeCode: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeCode: No code_verifier passed"),Promise.reject(new Error("A code_verifier is required"))):(o.Log.error("TokenClient.exchangeCode: No redirect_uri passed"),Promise.reject(new Error("A redirect_uri is required"))):(o.Log.error("TokenClient.exchangeCode: No code passed"),Promise.reject(new Error("A code is required")))},TokenClient.prototype.exchangeRefreshToken=function exchangeRefreshToken(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.grant_type=e.grant_type||"refresh_token",e.client_id=e.client_id||this._settings.client_id,e.client_secret=e.client_secret||this._settings.client_secret,e.refresh_token?e.client_id?this._metadataService.getTokenEndpoint(!1).then(function(r){return o.Log.debug("TokenClient.exchangeRefreshToken: Received token endpoint"),t._jsonService.postForm(r,e).then(function(t){return o.Log.debug("TokenClient.exchangeRefreshToken: response received"),t})}):(o.Log.error("TokenClient.exchangeRefreshToken: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeRefreshToken: No refresh_token passed"),Promise.reject(new Error("A refresh_token is required")))},TokenClient}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ErrorResponse=void 0;var n=r(3);e.ErrorResponse=function(t){function ErrorResponse(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.error,i=e.error_description,o=e.error_uri,s=e.state;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,ErrorResponse),!r)throw n.Log.error("No error passed to ErrorResponse"),new Error("error");var a=function _possibleConstructorReturn(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,i||r));return a.name="ErrorResponse",a.error=r,a.error_description=i,a.error_uri=o,a.state=s,a}return function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(ErrorResponse,t),ErrorResponse}(Error)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninRequest=void 0;var n=r(3),i=r(55),o=r(143);e.SigninRequest=function(){function SigninRequest(t){var e=t.url,r=t.client_id,s=t.redirect_uri,a=t.response_type,u=t.scope,c=t.authority,f=t.data,h=t.prompt,l=t.display,p=t.max_age,g=t.ui_locales,d=t.id_token_hint,v=t.login_hint,y=t.acr_values,m=t.resource,S=t.response_mode,_=t.request,b=t.request_uri,w=t.extraQueryParams,F=t.request_type;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,SigninRequest),!e)throw n.Log.error("SigninRequest.ctor: No url passed"),new Error("url");if(!r)throw n.Log.error("SigninRequest.ctor: No client_id passed"),new Error("client_id");if(!s)throw n.Log.error("SigninRequest.ctor: No redirect_uri passed"),new Error("redirect_uri");if(!a)throw n.Log.error("SigninRequest.ctor: No response_type passed"),new Error("response_type");if(!u)throw n.Log.error("SigninRequest.ctor: No scope passed"),new Error("scope");if(!c)throw n.Log.error("SigninRequest.ctor: No authority passed"),new Error("authority");var E=SigninRequest.isOidc(a),x=SigninRequest.isCode(a);S||(S=SigninRequest.isCode(a)?"query":null),this.state=new o.SigninState({nonce:E,data:f,client_id:r,authority:c,redirect_uri:s,code_verifier:x,request_type:F,response_mode:S}),e=i.UrlUtility.addQueryParam(e,"client_id",r),e=i.UrlUtility.addQueryParam(e,"redirect_uri",s),e=i.UrlUtility.addQueryParam(e,"response_type",a),e=i.UrlUtility.addQueryParam(e,"scope",u),e=i.UrlUtility.addQueryParam(e,"state",this.state.id),E&&(e=i.UrlUtility.addQueryParam(e,"nonce",this.state.nonce)),x&&(e=i.UrlUtility.addQueryParam(e,"code_challenge",this.state.code_challenge),e=i.UrlUtility.addQueryParam(e,"code_challenge_method","S256"));var k={prompt:h,display:l,max_age:p,ui_locales:g,id_token_hint:d,login_hint:v,acr_values:y,resource:m,request:_,request_uri:b,response_mode:S};for(var A in k)k[A]&&(e=i.UrlUtility.addQueryParam(e,A,k[A]));for(var P in w)e=i.UrlUtility.addQueryParam(e,P,w[P]);this.url=e}return SigninRequest.isOidc=function isOidc(t){return!!t.split(/\s+/g).filter(function(t){return"id_token"===t})[0]},SigninRequest.isOAuth=function isOAuth(t){return!!t.split(/\s+/g).filter(function(t){return"token"===t})[0]},SigninRequest.isCode=function isCode(t){return!!t.split(/\s+/g).filter(function(t){return"code"===t})[0]},SigninRequest}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninState=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.nonce,n=e.authority,i=e.client_id,o=e.redirect_uri,u=e.code_verifier,c=e.response_mode;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,SigninState);var f=function _possibleConstructorReturn(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,arguments[0]));if(!0===r?f._nonce=(0,a.default)():r&&(f._nonce=r),!0===u?f._code_verifier=(0,a.default)()+(0,a.default)()+(0,a.default)():u&&(f._code_verifier=u),f.code_verifier){var h=s.JoseUtil.hashString(f.code_verifier,"SHA256");f._code_challenge=s.JoseUtil.hexToBase64Url(h)}return f._redirect_uri=o,f._authority=n,f._client_id=i,f._response_mode=c,f}return function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(SigninState,t),SigninState.prototype.toStorageString=function toStorageString(){return i.Log.debug("SigninState.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type,nonce:this.nonce,code_verifier:this.code_verifier,redirect_uri:this.redirect_uri,authority:this.authority,client_id:this.client_id,response_mode:this.response_mode})},SigninState.fromStorageString=function fromStorageString(t){return i.Log.debug("SigninState.fromStorageString"),new SigninState(JSON.parse(t))},n(SigninState,[{key:"nonce",get:function get(){return this._nonce}},{key:"authority",get:function get(){return this._authority}},{key:"client_id",get:function get(){return this._client_id}},{key:"redirect_uri",get:function get(){return this._redirect_uri}},{key:"code_verifier",get:function get(){return this._code_verifier}},{key:"code_challenge",get:function get(){return this._code_challenge}},{key:"response_mode",get:function get(){return this._response_mode}}]),SigninState}(o.State)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function random(){return(0,n.default)().replace(/-/g,"")};var n=function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}(r(365));t.exports=e.default},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.User=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r0){var r=parseInt(Date.now()/1e3);this.expires_at=r+e}}},{key:"expired",get:function get(){var t=this.expires_in;if(void 0!==t)return t<=0}},{key:"scopes",get:function get(){return(this.scope||"").split(" ")}}]),User}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AccessTokenEvents=void 0;var n=r(3),i=r(380);var o=60;e.AccessTokenEvents=function(){function AccessTokenEvents(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.accessTokenExpiringNotificationTime,r=void 0===e?o:e,n=t.accessTokenExpiringTimer,s=void 0===n?new i.Timer("Access token expiring"):n,a=t.accessTokenExpiredTimer,u=void 0===a?new i.Timer("Access token expired"):a;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,AccessTokenEvents),this._accessTokenExpiringNotificationTime=r,this._accessTokenExpiring=s,this._accessTokenExpired=u}return AccessTokenEvents.prototype.load=function load(t){if(t.access_token&&void 0!==t.expires_in){var e=t.expires_in;if(n.Log.debug("AccessTokenEvents.load: access token present, remaining duration:",e),e>0){var r=e-this._accessTokenExpiringNotificationTime;r<=0&&(r=1),n.Log.debug("AccessTokenEvents.load: registering expiring timer in:",r),this._accessTokenExpiring.init(r)}else n.Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration."),this._accessTokenExpiring.cancel();var i=e+1;n.Log.debug("AccessTokenEvents.load: registering expired timer in:",i),this._accessTokenExpired.init(i)}else this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},AccessTokenEvents.prototype.unload=function unload(){n.Log.debug("AccessTokenEvents.unload: canceling existing access token timers"),this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},AccessTokenEvents.prototype.addAccessTokenExpiring=function addAccessTokenExpiring(t){this._accessTokenExpiring.addHandler(t)},AccessTokenEvents.prototype.removeAccessTokenExpiring=function removeAccessTokenExpiring(t){this._accessTokenExpiring.removeHandler(t)},AccessTokenEvents.prototype.addAccessTokenExpired=function addAccessTokenExpired(t){this._accessTokenExpired.addHandler(t)},AccessTokenEvents.prototype.removeAccessTokenExpired=function removeAccessTokenExpired(t){this._accessTokenExpired.removeHandler(t)},AccessTokenEvents}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Event=void 0;var n=r(3);e.Event=function(){function Event(t){!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,Event),this._name=t,this._callbacks=[]}return Event.prototype.addHandler=function addHandler(t){this._callbacks.push(t)},Event.prototype.removeHandler=function removeHandler(t){var e=this._callbacks.findIndex(function(e){return e===t});e>=0&&this._callbacks.splice(e,1)},Event.prototype.raise=function raise(){n.Log.debug("Event: Raising event: "+this._name);for(var t=0;t1&&void 0!==arguments[1]?arguments[1]:o.CheckSessionIFrame;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,SessionMonitor),!t)throw i.Log.error("SessionMonitor.ctor: No user manager passed to SessionMonitor"),new Error("userManager");this._userManager=t,this._CheckSessionIFrameCtor=r,this._userManager.events.addUserLoaded(this._start.bind(this)),this._userManager.events.addUserUnloaded(this._stop.bind(this)),this._userManager.getUser().then(function(t){t&&e._start(t)}).catch(function(t){i.Log.error("SessionMonitor ctor: error from getUser:",t.message)})}return SessionMonitor.prototype._start=function _start(t){var e=this,r=t.session_state;r&&(this._sub=t.profile.sub,this._sid=t.profile.sid,i.Log.debug("SessionMonitor._start: session_state:",r,", sub:",this._sub),this._checkSessionIFrame?this._checkSessionIFrame.start(r):this._metadataService.getCheckSessionIframe().then(function(t){if(t){i.Log.debug("SessionMonitor._start: Initializing check session iframe");var n=e._client_id,o=e._checkSessionInterval,s=e._stopCheckSessionOnError;e._checkSessionIFrame=new e._CheckSessionIFrameCtor(e._callback.bind(e),n,t,o,s),e._checkSessionIFrame.load().then(function(){e._checkSessionIFrame.start(r)})}else i.Log.warn("SessionMonitor._start: No check session iframe found in the metadata")}).catch(function(t){i.Log.error("SessionMonitor._start: Error from getCheckSessionIframe:",t.message)}))},SessionMonitor.prototype._stop=function _stop(){this._sub=null,this._sid=null,this._checkSessionIFrame&&(i.Log.debug("SessionMonitor._stop"),this._checkSessionIFrame.stop())},SessionMonitor.prototype._callback=function _callback(){var t=this;this._userManager.querySessionStatus().then(function(e){var r=!0;e?e.sub===t._sub?(r=!1,t._checkSessionIFrame.start(e.session_state),e.sid===t._sid?i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:",e.session_state):(i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:",e.session_state),t._userManager.events._raiseUserSessionChanged())):i.Log.debug("SessionMonitor._callback: Different subject signed into OP:",e.sub):i.Log.debug("SessionMonitor._callback: Subject no longer signed into OP"),r&&(i.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed out event"),t._userManager.events._raiseUserSignedOut())}).catch(function(e){i.Log.debug("SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event",e.message),t._userManager.events._raiseUserSignedOut()})},n(SessionMonitor,[{key:"_settings",get:function get(){return this._userManager.settings}},{key:"_metadataService",get:function get(){return this._userManager.metadataService}},{key:"_client_id",get:function get(){return this._settings.client_id}},{key:"_checkSessionInterval",get:function get(){return this._settings.checkSessionInterval}},{key:"_stopCheckSessionOnError",get:function get(){return this._settings.stopCheckSessionOnError}}]),SessionMonitor}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CheckSessionIFrame=void 0;var n=r(3);var i=2e3;e.CheckSessionIFrame=function(){function CheckSessionIFrame(t,e,r,n){var o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,CheckSessionIFrame),this._callback=t,this._client_id=e,this._url=r,this._interval=n||i,this._stopOnError=o;var s=r.indexOf("/",r.indexOf("//")+2);this._frame_origin=r.substr(0,s),this._frame=window.document.createElement("iframe"),this._frame.style.visibility="hidden",this._frame.style.position="absolute",this._frame.style.display="none",this._frame.style.width=0,this._frame.style.height=0,this._frame.src=r}return CheckSessionIFrame.prototype.load=function load(){var t=this;return new Promise(function(e){t._frame.onload=function(){e()},window.document.body.appendChild(t._frame),t._boundMessageEvent=t._message.bind(t),window.addEventListener("message",t._boundMessageEvent,!1)})},CheckSessionIFrame.prototype._message=function _message(t){t.origin===this._frame_origin&&t.source===this._frame.contentWindow&&("error"===t.data?(n.Log.error("CheckSessionIFrame: error message from check session op iframe"),this._stopOnError&&this.stop()):"changed"===t.data?(n.Log.debug("CheckSessionIFrame: changed message from check session op iframe"),this.stop(),this._callback()):n.Log.debug("CheckSessionIFrame: "+t.data+" message from check session op iframe"))},CheckSessionIFrame.prototype.start=function start(t){var e=this;if(this._session_state!==t){n.Log.debug("CheckSessionIFrame.start"),this.stop(),this._session_state=t;var r=function send(){e._frame.contentWindow.postMessage(e._client_id+" "+e._session_state,e._frame_origin)};r(),this._timer=window.setInterval(r,this._interval)}},CheckSessionIFrame.prototype.stop=function stop(){this._session_state=null,this._timer&&(n.Log.debug("CheckSessionIFrame.stop"),window.clearInterval(this._timer),this._timer=null)},CheckSessionIFrame}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenRevocationClient=void 0;var n=r(3),i=r(49),o=r(44);e.TokenRevocationClient=function(){function TokenRevocationClient(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.Global.XMLHttpRequest,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,TokenRevocationClient),!t)throw n.Log.error("TokenRevocationClient.ctor: No settings provided"),new Error("No settings provided.");this._settings=t,this._XMLHttpRequestCtor=e,this._metadataService=new r(this._settings)}return TokenRevocationClient.prototype.revoke=function revoke(t,e){var r=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"access_token";if(!t)throw n.Log.error("TokenRevocationClient.revoke: No token provided"),new Error("No token provided.");if("access_token"!==i&&"refresh_token"!=i)throw n.Log.error("TokenRevocationClient.revoke: Invalid token type"),new Error("Invalid token type.");return this._metadataService.getRevocationEndpoint().then(function(o){if(o){n.Log.debug("TokenRevocationClient.revoke: Revoking "+i);var s=r._settings.client_id,a=r._settings.client_secret;return r._revoke(o,s,a,t,i)}if(e)throw n.Log.error("TokenRevocationClient.revoke: Revocation not supported"),new Error("Revocation not supported")})},TokenRevocationClient.prototype._revoke=function _revoke(t,e,r,i,o){var s=this;return new Promise(function(a,u){var c=new s._XMLHttpRequestCtor;c.open("POST",t),c.onload=function(){n.Log.debug("TokenRevocationClient.revoke: HTTP response received, status",c.status),200===c.status?a():u(Error(c.statusText+" ("+c.status+")"))},c.onerror=function(){n.Log.debug("TokenRevocationClient.revoke: Network Error."),u("Network Error")};var f="client_id="+encodeURIComponent(e);r&&(f+="&client_secret="+encodeURIComponent(r)),f+="&token_type_hint="+encodeURIComponent(o),f+="&token="+encodeURIComponent(i),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.send(f)})},TokenRevocationClient}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CordovaPopupWindow=void 0;var n=function(){function defineProperties(t,e){for(var r=0;ri;)z(t,r=n[i++],e[r]);return t},Y=function propertyIsEnumerable(t){var e=U.call(this,t=b(t,!0));return!(this===j&&i(L,t)&&!i(D,t))&&(!(e||!i(this,t)||!i(L,t)||i(this,M)&&this[M][t])||e)},X=function getOwnPropertyDescriptor(t,e){if(t=_(t),e=b(e,!0),t!==j||!i(L,e)||i(D,e)){var r=P(t,e);return!r||!i(L,e)||i(t,M)&&t[M][e]||(r.enumerable=!0),r}},$=function getOwnPropertyNames(t){for(var e,r=C(_(t)),n=[],o=0;r.length>o;)i(L,e=r[o++])||e==M||e==u||n.push(e);return n},Q=function getOwnPropertySymbols(t){for(var e,r=t===j,n=C(r?D:_(t)),o=[],s=0;n.length>s;)!i(L,e=n[s++])||r&&!i(j,e)||o.push(L[e]);return o};H||(a((R=function Symbol(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var t=l(arguments.length>0?arguments[0]:void 0),e=function(r){this===j&&e.call(D,r),i(this,M)&&i(this[M],t)&&(this[M][t]=!1),q(this,t,w(1,r))};return o&&V&&q(j,t,{configurable:!0,set:e}),W(t)}).prototype,"toString",function toString(){return this._k}),x.f=X,k.f=z,r(38).f=E.f=$,r(52).f=Y,r(57).f=Q,o&&!r(30)&&a(j,"propertyIsEnumerable",Y,!0),g.f=function(t){return W(p(t))}),s(s.G+s.W+s.F*!H,{Symbol:R});for(var Z="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;Z.length>tt;)p(Z[tt++]);for(var et=A(p.store),rt=0;et.length>rt;)d(et[rt++]);s(s.S+s.F*!H,"Symbol",{for:function(t){return i(N,t+="")?N[t]:N[t]=R(t)},keyFor:function keyFor(t){if(!J(t))throw TypeError(t+" is not a symbol!");for(var e in N)if(N[e]===t)return e},useSetter:function(){V=!0},useSimple:function(){V=!1}}),s(s.S+s.F*!H,"Object",{create:function create(t,e){return void 0===e?F(t):G(F(t),e)},defineProperty:z,defineProperties:G,getOwnPropertyDescriptor:X,getOwnPropertyNames:$,getOwnPropertySymbols:Q}),B&&s(s.S+s.F*(!H||c(function(){var t=R();return"[null]"!=T([t])||"{}"!=T({a:t})||"{}"!=T(Object(t))})),"JSON",{stringify:function stringify(t){for(var e,r,n=[t],i=1;arguments.length>i;)n.push(arguments[i++]);if(r=e=n[1],(S(e)||void 0!==t)&&!J(t))return y(e)||(e=function(t,e){if("function"==typeof r&&(e=r.call(this,t,e)),!J(e))return e}),n[1]=e,T.apply(B,n)}}),R.prototype[O]||r(12)(R.prototype,O,R.prototype.valueOf),h(R,"Symbol"),h(Math,"Math",!0),h(n.JSON,"JSON",!0)},function(t,e,r){t.exports=r(50)("native-function-to-string",Function.toString)},function(t,e,r){var n=r(35),i=r(57),o=r(52);t.exports=function(t){var e=n(t),r=i.f;if(r)for(var s,a=r(t),u=o.f,c=0;a.length>c;)u.call(t,s=a[c++])&&e.push(s);return e}},function(t,e,r){var n=r(0);n(n.S,"Object",{create:r(37)})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperty:r(9).f})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperties:r(106)})},function(t,e,r){var n=r(16),i=r(17).f;r(26)("getOwnPropertyDescriptor",function(){return function getOwnPropertyDescriptor(t,e){return i(n(t),e)}})},function(t,e,r){var n=r(10),i=r(18);r(26)("getPrototypeOf",function(){return function getPrototypeOf(t){return i(n(t))}})},function(t,e,r){var n=r(10),i=r(35);r(26)("keys",function(){return function keys(t){return i(n(t))}})},function(t,e,r){r(26)("getOwnPropertyNames",function(){return r(107).f})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("freeze",function(t){return function freeze(e){return t&&n(e)?t(i(e)):e}})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("seal",function(t){return function seal(e){return t&&n(e)?t(i(e)):e}})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("preventExtensions",function(t){return function preventExtensions(e){return t&&n(e)?t(i(e)):e}})},function(t,e,r){var n=r(5);r(26)("isFrozen",function(t){return function isFrozen(e){return!n(e)||!!t&&t(e)}})},function(t,e,r){var n=r(5);r(26)("isSealed",function(t){return function isSealed(e){return!n(e)||!!t&&t(e)}})},function(t,e,r){var n=r(5);r(26)("isExtensible",function(t){return function isExtensible(e){return!!n(e)&&(!t||t(e))}})},function(t,e,r){var n=r(0);n(n.S+n.F,"Object",{assign:r(108)})},function(t,e,r){var n=r(0);n(n.S,"Object",{is:r(109)})},function(t,e,r){var n=r(0);n(n.S,"Object",{setPrototypeOf:r(77).set})},function(t,e,r){"use strict";var n=r(46),i={};i[r(6)("toStringTag")]="z",i+""!="[object z]"&&r(13)(Object.prototype,"toString",function toString(){return"[object "+n(this)+"]"},!0)},function(t,e,r){var n=r(0);n(n.P,"Function",{bind:r(110)})},function(t,e,r){var n=r(9).f,i=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in i||r(8)&&n(i,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},function(t,e,r){"use strict";var n=r(5),i=r(18),o=r(6)("hasInstance"),s=Function.prototype;o in s||r(9).f(s,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},function(t,e,r){var n=r(0),i=r(112);n(n.G+n.F*(parseInt!=i),{parseInt:i})},function(t,e,r){var n=r(0),i=r(113);n(n.G+n.F*(parseFloat!=i),{parseFloat:i})},function(t,e,r){"use strict";var n=r(2),i=r(15),o=r(21),s=r(79),a=r(24),u=r(4),c=r(38).f,f=r(17).f,h=r(9).f,l=r(47).trim,p=n.Number,g=p,d=p.prototype,v="Number"==o(r(37)(d)),y="trim"in String.prototype,m=function(t){var e=a(t,!1);if("string"==typeof e&&e.length>2){var r,n,i,o=(e=y?e.trim():l(e,3)).charCodeAt(0);if(43===o||45===o){if(88===(r=e.charCodeAt(2))||120===r)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+e}for(var s,u=e.slice(2),c=0,f=u.length;ci)return NaN;return parseInt(u,n)}}return+e};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function Number(t){var e=arguments.length<1?0:t,r=this;return r instanceof p&&(v?u(function(){d.valueOf.call(r)}):"Number"!=o(r))?s(new g(m(e)),r,p):m(e)};for(var S,_=r(8)?c(g):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),b=0;_.length>b;b++)i(g,S=_[b])&&!i(p,S)&&h(p,S,f(g,S));p.prototype=d,d.constructor=p,r(13)(n,"Number",p)}},function(t,e,r){"use strict";var n=r(0),i=r(22),o=r(114),s=r(80),a=1..toFixed,u=Math.floor,c=[0,0,0,0,0,0],f="Number.toFixed: incorrect invocation!",h=function(t,e){for(var r=-1,n=e;++r<6;)n+=t*c[r],c[r]=n%1e7,n=u(n/1e7)},l=function(t){for(var e=6,r=0;--e>=0;)r+=c[e],c[e]=u(r/t),r=r%t*1e7},p=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==c[t]){var r=String(c[t]);e=""===e?r:e+s.call("0",7-r.length)+r}return e},g=function(t,e,r){return 0===e?r:e%2==1?g(t,e-1,r*t):g(t*t,e/2,r)};n(n.P+n.F*(!!a&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(4)(function(){a.call({})})),"Number",{toFixed:function toFixed(t){var e,r,n,a,u=o(this,f),c=i(t),d="",v="0";if(c<0||c>20)throw RangeError(f);if(u!=u)return"NaN";if(u<=-1e21||u>=1e21)return String(u);if(u<0&&(d="-",u=-u),u>1e-21)if(r=(e=function(t){for(var e=0,r=t;r>=4096;)e+=12,r/=4096;for(;r>=2;)e+=1,r/=2;return e}(u*g(2,69,1))-69)<0?u*g(2,-e,1):u/g(2,e,1),r*=4503599627370496,(e=52-e)>0){for(h(0,r),n=c;n>=7;)h(1e7,0),n-=7;for(h(g(10,n,1),0),n=e-1;n>=23;)l(1<<23),n-=23;l(1<0?d+((a=v.length)<=c?"0."+s.call("0",c-a)+v:v.slice(0,a-c)+"."+v.slice(a-c)):d+v}})},function(t,e,r){"use strict";var n=r(0),i=r(4),o=r(114),s=1..toPrecision;n(n.P+n.F*(i(function(){return"1"!==s.call(1,void 0)})||!i(function(){s.call({})})),"Number",{toPrecision:function toPrecision(t){var e=o(this,"Number#toPrecision: incorrect invocation!");return void 0===t?s.call(e):s.call(e,t)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{EPSILON:Math.pow(2,-52)})},function(t,e,r){var n=r(0),i=r(2).isFinite;n(n.S,"Number",{isFinite:function isFinite(t){return"number"==typeof t&&i(t)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{isInteger:r(115)})},function(t,e,r){var n=r(0);n(n.S,"Number",{isNaN:function isNaN(t){return t!=t}})},function(t,e,r){var n=r(0),i=r(115),o=Math.abs;n(n.S,"Number",{isSafeInteger:function isSafeInteger(t){return i(t)&&o(t)<=9007199254740991}})},function(t,e,r){var n=r(0);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,r){var n=r(0);n(n.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,r){var n=r(0),i=r(113);n(n.S+n.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},function(t,e,r){var n=r(0),i=r(112);n(n.S+n.F*(Number.parseInt!=i),"Number",{parseInt:i})},function(t,e,r){var n=r(0),i=r(116),o=Math.sqrt,s=Math.acosh;n(n.S+n.F*!(s&&710==Math.floor(s(Number.MAX_VALUE))&&s(1/0)==1/0),"Math",{acosh:function acosh(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},function(t,e,r){var n=r(0),i=Math.asinh;n(n.S+n.F*!(i&&1/i(0)>0),"Math",{asinh:function asinh(t){return isFinite(t=+t)&&0!=t?t<0?-asinh(-t):Math.log(t+Math.sqrt(t*t+1)):t}})},function(t,e,r){var n=r(0),i=Math.atanh;n(n.S+n.F*!(i&&1/i(-0)<0),"Math",{atanh:function atanh(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},function(t,e,r){var n=r(0),i=r(81);n(n.S,"Math",{cbrt:function cbrt(t){return i(t=+t)*Math.pow(Math.abs(t),1/3)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clz32:function clz32(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},function(t,e,r){var n=r(0),i=Math.exp;n(n.S,"Math",{cosh:function cosh(t){return(i(t=+t)+i(-t))/2}})},function(t,e,r){var n=r(0),i=r(82);n(n.S+n.F*(i!=Math.expm1),"Math",{expm1:i})},function(t,e,r){var n=r(0);n(n.S,"Math",{fround:r(117)})},function(t,e,r){var n=r(0),i=Math.abs;n(n.S,"Math",{hypot:function hypot(t,e){for(var r,n,o=0,s=0,a=arguments.length,u=0;s0?(n=r/u)*n:r;return u===1/0?1/0:u*Math.sqrt(o)}})},function(t,e,r){var n=r(0),i=Math.imul;n(n.S+n.F*r(4)(function(){return-5!=i(4294967295,5)||2!=i.length}),"Math",{imul:function imul(t,e){var r=+t,n=+e,i=65535&r,o=65535&n;return 0|i*o+((65535&r>>>16)*o+i*(65535&n>>>16)<<16>>>0)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log10:function log10(t){return Math.log(t)*Math.LOG10E}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log1p:r(116)})},function(t,e,r){var n=r(0);n(n.S,"Math",{log2:function log2(t){return Math.log(t)/Math.LN2}})},function(t,e,r){var n=r(0);n(n.S,"Math",{sign:r(81)})},function(t,e,r){var n=r(0),i=r(82),o=Math.exp;n(n.S+n.F*r(4)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function sinh(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},function(t,e,r){var n=r(0),i=r(82),o=Math.exp;n(n.S,"Math",{tanh:function tanh(t){var e=i(t=+t),r=i(-t);return e==1/0?1:r==1/0?-1:(e-r)/(o(t)+o(-t))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{trunc:function trunc(t){return(t>0?Math.floor:Math.ceil)(t)}})},function(t,e,r){var n=r(0),i=r(36),o=String.fromCharCode,s=String.fromCodePoint;n(n.S+n.F*(!!s&&1!=s.length),"String",{fromCodePoint:function fromCodePoint(t){for(var e,r=[],n=arguments.length,s=0;n>s;){if(e=+arguments[s++],i(e,1114111)!==e)throw RangeError(e+" is not a valid code point");r.push(e<65536?o(e):o(55296+((e-=65536)>>10),e%1024+56320))}return r.join("")}})},function(t,e,r){var n=r(0),i=r(16),o=r(7);n(n.S,"String",{raw:function raw(t){for(var e=i(t.raw),r=o(e.length),n=arguments.length,s=[],a=0;r>a;)s.push(String(e[a++])),a=e.length?{value:void 0,done:!0}:(t=n(e,r),this._i+=t.length,{value:t,done:!1})})},function(t,e,r){"use strict";var n=r(0),i=r(59)(!1);n(n.P,"String",{codePointAt:function codePointAt(t){return i(this,t)}})},function(t,e,r){"use strict";var n=r(0),i=r(7),o=r(85),s="".endsWith;n(n.P+n.F*r(86)("endsWith"),"String",{endsWith:function endsWith(t){var e=o(this,t,"endsWith"),r=arguments.length>1?arguments[1]:void 0,n=i(e.length),a=void 0===r?n:Math.min(i(r),n),u=String(t);return s?s.call(e,u,a):e.slice(a-u.length,a)===u}})},function(t,e,r){"use strict";var n=r(0),i=r(85);n(n.P+n.F*r(86)("includes"),"String",{includes:function includes(t){return!!~i(this,t,"includes").indexOf(t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,r){var n=r(0);n(n.P,"String",{repeat:r(80)})},function(t,e,r){"use strict";var n=r(0),i=r(7),o=r(85),s="".startsWith;n(n.P+n.F*r(86)("startsWith"),"String",{startsWith:function startsWith(t){var e=o(this,t,"startsWith"),r=i(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),n=String(t);return s?s.call(e,n,r):e.slice(r,r+n.length)===n}})},function(t,e,r){"use strict";r(14)("anchor",function(t){return function anchor(e){return t(this,"a","name",e)}})},function(t,e,r){"use strict";r(14)("big",function(t){return function big(){return t(this,"big","","")}})},function(t,e,r){"use strict";r(14)("blink",function(t){return function blink(){return t(this,"blink","","")}})},function(t,e,r){"use strict";r(14)("bold",function(t){return function bold(){return t(this,"b","","")}})},function(t,e,r){"use strict";r(14)("fixed",function(t){return function fixed(){return t(this,"tt","","")}})},function(t,e,r){"use strict";r(14)("fontcolor",function(t){return function fontcolor(e){return t(this,"font","color",e)}})},function(t,e,r){"use strict";r(14)("fontsize",function(t){return function fontsize(e){return t(this,"font","size",e)}})},function(t,e,r){"use strict";r(14)("italics",function(t){return function italics(){return t(this,"i","","")}})},function(t,e,r){"use strict";r(14)("link",function(t){return function link(e){return t(this,"a","href",e)}})},function(t,e,r){"use strict";r(14)("small",function(t){return function small(){return t(this,"small","","")}})},function(t,e,r){"use strict";r(14)("strike",function(t){return function strike(){return t(this,"strike","","")}})},function(t,e,r){"use strict";r(14)("sub",function(t){return function sub(){return t(this,"sub","","")}})},function(t,e,r){"use strict";r(14)("sup",function(t){return function sup(){return t(this,"sup","","")}})},function(t,e,r){var n=r(0);n(n.S,"Date",{now:function(){return(new Date).getTime()}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24);n(n.P+n.F*r(4)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function toJSON(t){var e=i(this),r=o(e);return"number"!=typeof r||isFinite(r)?e.toISOString():null}})},function(t,e,r){var n=r(0),i=r(234);n(n.P+n.F*(Date.prototype.toISOString!==i),"Date",{toISOString:i})},function(t,e,r){"use strict";var n=r(4),i=Date.prototype.getTime,o=Date.prototype.toISOString,s=function(t){return t>9?t:"0"+t};t.exports=n(function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-5e13-1))})||!n(function(){o.call(new Date(NaN))})?function toISOString(){if(!isFinite(i.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),r=t.getUTCMilliseconds(),n=e<0?"-":e>9999?"+":"";return n+("00000"+Math.abs(e)).slice(n?-6:-4)+"-"+s(t.getUTCMonth()+1)+"-"+s(t.getUTCDate())+"T"+s(t.getUTCHours())+":"+s(t.getUTCMinutes())+":"+s(t.getUTCSeconds())+"."+(r>99?r:"0"+s(r))+"Z"}:o},function(t,e,r){var n=Date.prototype,i=n.toString,o=n.getTime;new Date(NaN)+""!="Invalid Date"&&r(13)(n,"toString",function toString(){var t=o.call(this);return t==t?i.call(this):"Invalid Date"})},function(t,e,r){var n=r(6)("toPrimitive"),i=Date.prototype;n in i||r(12)(i,n,r(237))},function(t,e,r){"use strict";var n=r(1),i=r(24);t.exports=function(t){if("string"!==t&&"number"!==t&&"default"!==t)throw TypeError("Incorrect hint");return i(n(this),"number"!=t)}},function(t,e,r){var n=r(0);n(n.S,"Array",{isArray:r(58)})},function(t,e,r){"use strict";var n=r(20),i=r(0),o=r(10),s=r(118),a=r(87),u=r(7),c=r(88),f=r(89);i(i.S+i.F*!r(61)(function(t){Array.from(t)}),"Array",{from:function from(t){var e,r,i,h,l=o(t),p="function"==typeof this?this:Array,g=arguments.length,d=g>1?arguments[1]:void 0,v=void 0!==d,y=0,m=f(l);if(v&&(d=n(d,g>2?arguments[2]:void 0,2)),void 0==m||p==Array&&a(m))for(r=new p(e=u(l.length));e>y;y++)c(r,y,v?d(l[y],y):l[y]);else for(h=m.call(l),r=new p;!(i=h.next()).done;y++)c(r,y,v?s(h,d,[i.value,y],!0):i.value);return r.length=y,r}})},function(t,e,r){"use strict";var n=r(0),i=r(88);n(n.S+n.F*r(4)(function(){function F(){}return!(Array.of.call(F)instanceof F)}),"Array",{of:function of(){for(var t=0,e=arguments.length,r=new("function"==typeof this?this:Array)(e);e>t;)i(r,t,arguments[t++]);return r.length=e,r}})},function(t,e,r){"use strict";var n=r(0),i=r(16),o=[].join;n(n.P+n.F*(r(51)!=Object||!r(23)(o)),"Array",{join:function join(t){return o.call(i(this),void 0===t?",":t)}})},function(t,e,r){"use strict";var n=r(0),i=r(76),o=r(21),s=r(36),a=r(7),u=[].slice;n(n.P+n.F*r(4)(function(){i&&u.call(i)}),"Array",{slice:function slice(t,e){var r=a(this.length),n=o(this);if(e=void 0===e?r:e,"Array"==n)return u.call(this,t,e);for(var i=s(t,r),c=s(e,r),f=a(c-i),h=new Array(f),l=0;l1&&(n=Math.min(n,o(arguments[1]))),n<0&&(n=r+n);n>=0;n--)if(n in e&&e[n]===t)return n||0;return-1}})},function(t,e,r){var n=r(0);n(n.P,"Array",{copyWithin:r(120)}),r(32)("copyWithin")},function(t,e,r){var n=r(0);n(n.P,"Array",{fill:r(91)}),r(32)("fill")},function(t,e,r){"use strict";var n=r(0),i=r(27)(5),o=!0;"find"in[]&&Array(1).find(function(){o=!1}),n(n.P+n.F*o,"Array",{find:function find(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(32)("find")},function(t,e,r){"use strict";var n=r(0),i=r(27)(6),o="findIndex",s=!0;o in[]&&Array(1)[o](function(){s=!1}),n(n.P+n.F*s,"Array",{findIndex:function findIndex(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(32)(o)},function(t,e,r){r(39)("Array")},function(t,e,r){var n=r(2),i=r(79),o=r(9).f,s=r(38).f,a=r(60),u=r(53),c=n.RegExp,f=c,h=c.prototype,l=/a/g,p=/a/g,g=new c(l)!==l;if(r(8)&&(!g||r(4)(function(){return p[r(6)("match")]=!1,c(l)!=l||c(p)==p||"/a/i"!=c(l,"i")}))){c=function RegExp(t,e){var r=this instanceof c,n=a(t),o=void 0===e;return!r&&n&&t.constructor===c&&o?t:i(g?new f(n&&!o?t.source:t,e):f((n=t instanceof c)?t.source:t,n&&o?u.call(t):e),r?this:h,c)};for(var d=function(t){t in c||o(c,t,{configurable:!0,get:function(){return f[t]},set:function(e){f[t]=e}})},v=s(f),y=0;v.length>y;)d(v[y++]);h.constructor=c,c.prototype=h,r(13)(n,"RegExp",c)}r(39)("RegExp")},function(t,e,r){"use strict";r(123);var n=r(1),i=r(53),o=r(8),s=/./.toString,a=function(t){r(13)(RegExp.prototype,"toString",t,!0)};r(4)(function(){return"/a/b"!=s.call({source:"a",flags:"b"})})?a(function toString(){var t=n(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)}):"toString"!=s.name&&a(function toString(){return s.call(this)})},function(t,e,r){"use strict";var n=r(1),i=r(7),o=r(94),s=r(62);r(63)("match",1,function(t,e,r,a){return[function match(r){var n=t(this),i=void 0==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},function(t){var e=a(r,t,this);if(e.done)return e.value;var u=n(t),c=String(this);if(!u.global)return s(u,c);var f=u.unicode;u.lastIndex=0;for(var h,l=[],p=0;null!==(h=s(u,c));){var g=String(h[0]);l[p]=g,""===g&&(u.lastIndex=o(c,i(u.lastIndex),f)),p++}return 0===p?null:l}]})},function(t,e,r){"use strict";var n=r(1),i=r(10),o=r(7),s=r(22),a=r(94),u=r(62),c=Math.max,f=Math.min,h=Math.floor,l=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g,g=function(t){return void 0===t?t:String(t)};r(63)("replace",2,function(t,e,r,d){return[function replace(n,i){var o=t(this),s=void 0==n?void 0:n[e];return void 0!==s?s.call(n,o,i):r.call(String(o),n,i)},function(t,e){var i=d(r,t,this,e);if(i.done)return i.value;var h=n(t),l=String(this),p="function"==typeof e;p||(e=String(e));var v=h.global;if(v){var y=h.unicode;h.lastIndex=0}for(var m=[];;){var S=u(h,l);if(null===S)break;if(m.push(S),!v)break;""===String(S[0])&&(h.lastIndex=a(l,o(h.lastIndex),y))}for(var _="",b=0,w=0;w=b&&(_+=l.slice(b,E)+I,b=E+F.length)}return _+l.slice(b)}];function getSubstitution(t,e,n,o,s,a){var u=n+t.length,c=o.length,f=p;return void 0!==s&&(s=i(s),f=l),r.call(a,f,function(r,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(u);case"<":a=s[i.slice(1,-1)];break;default:var f=+i;if(0===f)return r;if(f>c){var l=h(f/10);return 0===l?r:l<=c?void 0===o[l-1]?i.charAt(1):o[l-1]+i.charAt(1):r}a=o[f-1]}return void 0===a?"":a})}})},function(t,e,r){"use strict";var n=r(1),i=r(109),o=r(62);r(63)("search",1,function(t,e,r,s){return[function search(r){var n=t(this),i=void 0==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},function(t){var e=s(r,t,this);if(e.done)return e.value;var a=n(t),u=String(this),c=a.lastIndex;i(c,0)||(a.lastIndex=0);var f=o(a,u);return i(a.lastIndex,c)||(a.lastIndex=c),null===f?-1:f.index}]})},function(t,e,r){"use strict";var n=r(60),i=r(1),o=r(54),s=r(94),a=r(7),u=r(62),c=r(93),f=r(4),h=Math.min,l=[].push,p=!f(function(){RegExp(4294967295,"y")});r(63)("split",2,function(t,e,r,f){var g;return g="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,e){var i=String(this);if(void 0===t&&0===e)return[];if(!n(t))return r.call(i,t,e);for(var o,s,a,u=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),h=0,p=void 0===e?4294967295:e>>>0,g=new RegExp(t.source,f+"g");(o=c.call(g,i))&&!((s=g.lastIndex)>h&&(u.push(i.slice(h,o.index)),o.length>1&&o.index=p));)g.lastIndex===o.index&&g.lastIndex++;return h===i.length?!a&&g.test("")||u.push(""):u.push(i.slice(h)),u.length>p?u.slice(0,p):u}:"0".split(void 0,0).length?function(t,e){return void 0===t&&0===e?[]:r.call(this,t,e)}:r,[function split(r,n){var i=t(this),o=void 0==r?void 0:r[e];return void 0!==o?o.call(r,i,n):g.call(String(i),r,n)},function(t,e){var n=f(g,t,this,e,g!==r);if(n.done)return n.value;var c=i(t),l=String(this),d=o(c,RegExp),v=c.unicode,y=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(p?"y":"g"),m=new d(p?c:"^(?:"+c.source+")",y),S=void 0===e?4294967295:e>>>0;if(0===S)return[];if(0===l.length)return null===u(m,l)?[l]:[];for(var _=0,b=0,w=[];bo;)s(r[o++]);t._c=[],t._n=!1,e&&!t._h&&M(t)})}},M=function(t){y.call(u,function(){var e,r,n,i=t._v,o=O(t);if(o&&(e=_(function(){P?E.emit("unhandledRejection",i,t):(r=u.onunhandledrejection)?r({promise:t,reason:i}):(n=u.console)&&n.error&&n.error("Unhandled promise rejection",i)}),t._h=P||O(t)?2:1),t._a=void 0,o&&e.e)throw e.v})},O=function(t){return 1!==t._h&&0===(t._a||t._c).length},U=function(t){y.call(u,function(){var e;P?E.emit("rejectionHandled",t):(e=u.onrejectionhandled)&&e({promise:t,reason:t._v})})},N=function(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),T(e,!0))},L=function(t){var e,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw F("Promise can't be resolved itself");(e=B(t))?m(function(){var n={_w:r,_d:!1};try{e.call(t,c(L,n,1),c(N,n,1))}catch(t){N.call(n,t)}}):(r._v=t,r._s=1,T(r,!1))}catch(t){N.call({_w:r,_d:!1},t)}}};R||(A=function Promise(t){g(this,A,"Promise","_h"),p(t),n.call(this);try{t(c(L,this,1),c(N,this,1))}catch(t){N.call(this,t)}},(n=function Promise(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=r(42)(A.prototype,{then:function then(t,e){var r=C(v(this,A));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=P?E.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&T(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new n;this.promise=t,this.resolve=c(L,t,1),this.reject=c(N,t,1)},S.f=C=function(t){return t===A||t===s?new o(t):i(t)}),h(h.G+h.W+h.F*!R,{Promise:A}),r(45)(A,"Promise"),r(39)("Promise"),s=r(19).Promise,h(h.S+h.F*!R,"Promise",{reject:function reject(t){var e=C(this);return(0,e.reject)(t),e.promise}}),h(h.S+h.F*(a||!R),"Promise",{resolve:function resolve(t){return w(a&&this===s?A:this,t)}}),h(h.S+h.F*!(R&&r(61)(function(t){A.all(t).catch(I)})),"Promise",{all:function all(t){var e=this,r=C(e),n=r.resolve,i=r.reject,o=_(function(){var r=[],o=0,s=1;d(t,!1,function(t){var a=o++,u=!1;r.push(void 0),s++,e.resolve(t).then(function(t){u||(u=!0,r[a]=t,--s||n(r))},i)}),--s||n(r)});return o.e&&i(o.v),r.promise},race:function race(t){var e=this,r=C(e),n=r.reject,i=_(function(){d(t,!1,function(t){e.resolve(t).then(r.resolve,n)})});return i.e&&n(i.v),r.promise}})},function(t,e,r){"use strict";var n=r(130),i=r(43);r(65)("WeakSet",function(t){return function WeakSet(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function add(t){return n.def(i(this,"WeakSet"),t,!0)}},n,!1,!0)},function(t,e,r){"use strict";var n=r(0),i=r(66),o=r(98),s=r(1),a=r(36),u=r(7),c=r(5),f=r(2).ArrayBuffer,h=r(54),l=o.ArrayBuffer,p=o.DataView,g=i.ABV&&f.isView,d=l.prototype.slice,v=i.VIEW;n(n.G+n.W+n.F*(f!==l),{ArrayBuffer:l}),n(n.S+n.F*!i.CONSTR,"ArrayBuffer",{isView:function isView(t){return g&&g(t)||c(t)&&v in t}}),n(n.P+n.U+n.F*r(4)(function(){return!new l(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function slice(t,e){if(void 0!==d&&void 0===e)return d.call(s(this),t);for(var r=s(this).byteLength,n=a(t,r),i=a(void 0===e?r:e,r),o=new(h(this,l))(u(i-n)),c=new p(this),f=new p(o),g=0;n=e.length)return{value:void 0,done:!0}}while(!((t=e[this._i++])in this._t));return{value:t,done:!1}}),n(n.S,"Reflect",{enumerate:function enumerate(t){return new o(t)}})},function(t,e,r){var n=r(17),i=r(18),o=r(15),s=r(0),a=r(5),u=r(1);s(s.S,"Reflect",{get:function get(t,e){var r,s,c=arguments.length<3?t:arguments[2];return u(t)===c?t[e]:(r=n.f(t,e))?o(r,"value")?r.value:void 0!==r.get?r.get.call(c):void 0:a(s=i(t))?get(s,e,c):void 0}})},function(t,e,r){var n=r(17),i=r(0),o=r(1);i(i.S,"Reflect",{getOwnPropertyDescriptor:function getOwnPropertyDescriptor(t,e){return n.f(o(t),e)}})},function(t,e,r){var n=r(0),i=r(18),o=r(1);n(n.S,"Reflect",{getPrototypeOf:function getPrototypeOf(t){return i(o(t))}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{has:function has(t,e){return e in t}})},function(t,e,r){var n=r(0),i=r(1),o=Object.isExtensible;n(n.S,"Reflect",{isExtensible:function isExtensible(t){return i(t),!o||o(t)}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{ownKeys:r(132)})},function(t,e,r){var n=r(0),i=r(1),o=Object.preventExtensions;n(n.S,"Reflect",{preventExtensions:function preventExtensions(t){i(t);try{return o&&o(t),!0}catch(t){return!1}}})},function(t,e,r){var n=r(9),i=r(17),o=r(18),s=r(15),a=r(0),u=r(33),c=r(1),f=r(5);a(a.S,"Reflect",{set:function set(t,e,r){var a,h,l=arguments.length<4?t:arguments[3],p=i.f(c(t),e);if(!p){if(f(h=o(t)))return set(h,e,r,l);p=u(0)}if(s(p,"value")){if(!1===p.writable||!f(l))return!1;if(a=i.f(l,e)){if(a.get||a.set||!1===a.writable)return!1;a.value=r,n.f(l,e,a)}else n.f(l,e,u(0,r));return!0}return void 0!==p.set&&(p.set.call(l,r),!0)}})},function(t,e,r){var n=r(0),i=r(77);i&&n(n.S,"Reflect",{setPrototypeOf:function setPrototypeOf(t,e){i.check(t,e);try{return i.set(t,e),!0}catch(t){return!1}}})},function(t,e,r){"use strict";var n=r(0),i=r(56)(!0);n(n.P,"Array",{includes:function includes(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(32)("includes")},function(t,e,r){"use strict";var n=r(0),i=r(133),o=r(10),s=r(7),a=r(11),u=r(90);n(n.P,"Array",{flatMap:function flatMap(t){var e,r,n=o(this);return a(t),e=s(n.length),r=u(n,0),i(r,n,n,e,0,1,t,arguments[1]),r}}),r(32)("flatMap")},function(t,e,r){"use strict";var n=r(0),i=r(133),o=r(10),s=r(7),a=r(22),u=r(90);n(n.P,"Array",{flatten:function flatten(){var t=arguments[0],e=o(this),r=s(e.length),n=u(e,0);return i(n,e,e,r,0,void 0===t?1:a(t)),n}}),r(32)("flatten")},function(t,e,r){"use strict";var n=r(0),i=r(59)(!0);n(n.P,"String",{at:function at(t){return i(this,t)}})},function(t,e,r){"use strict";var n=r(0),i=r(134),o=r(64);n(n.P+n.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(o),"String",{padStart:function padStart(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},function(t,e,r){"use strict";var n=r(0),i=r(134),o=r(64);n(n.P+n.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(o),"String",{padEnd:function padEnd(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},function(t,e,r){"use strict";r(47)("trimLeft",function(t){return function trimLeft(){return t(this,1)}},"trimStart")},function(t,e,r){"use strict";r(47)("trimRight",function(t){return function trimRight(){return t(this,2)}},"trimEnd")},function(t,e,r){"use strict";var n=r(0),i=r(25),o=r(7),s=r(60),a=r(53),u=RegExp.prototype,c=function(t,e){this._r=t,this._s=e};r(84)(c,"RegExp String",function next(){var t=this._r.exec(this._s);return{value:t,done:null===t}}),n(n.P,"String",{matchAll:function matchAll(t){if(i(this),!s(t))throw TypeError(t+" is not a regexp!");var e=String(this),r="flags"in u?String(t.flags):a.call(t),n=new RegExp(t.source,~r.indexOf("g")?r:"g"+r);return n.lastIndex=o(t.lastIndex),new c(n,e)}})},function(t,e,r){r(73)("asyncIterator")},function(t,e,r){r(73)("observable")},function(t,e,r){var n=r(0),i=r(132),o=r(16),s=r(17),a=r(88);n(n.S,"Object",{getOwnPropertyDescriptors:function getOwnPropertyDescriptors(t){for(var e,r,n=o(t),u=s.f,c=i(n),f={},h=0;c.length>h;)void 0!==(r=u(n,e=c[h++]))&&a(f,e,r);return f}})},function(t,e,r){var n=r(0),i=r(135)(!1);n(n.S,"Object",{values:function values(t){return i(t)}})},function(t,e,r){var n=r(0),i=r(135)(!0);n(n.S,"Object",{entries:function entries(t){return i(t)}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(11),s=r(9);r(8)&&n(n.P+r(67),"Object",{__defineGetter__:function __defineGetter__(t,e){s.f(i(this),t,{get:o(e),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(11),s=r(9);r(8)&&n(n.P+r(67),"Object",{__defineSetter__:function __defineSetter__(t,e){s.f(i(this),t,{set:o(e),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24),s=r(18),a=r(17).f;r(8)&&n(n.P+r(67),"Object",{__lookupGetter__:function __lookupGetter__(t){var e,r=i(this),n=o(t,!0);do{if(e=a(r,n))return e.get}while(r=s(r))}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24),s=r(18),a=r(17).f;r(8)&&n(n.P+r(67),"Object",{__lookupSetter__:function __lookupSetter__(t){var e,r=i(this),n=o(t,!0);do{if(e=a(r,n))return e.set}while(r=s(r))}})},function(t,e,r){var n=r(0);n(n.P+n.R,"Map",{toJSON:r(136)("Map")})},function(t,e,r){var n=r(0);n(n.P+n.R,"Set",{toJSON:r(136)("Set")})},function(t,e,r){r(68)("Map")},function(t,e,r){r(68)("Set")},function(t,e,r){r(68)("WeakMap")},function(t,e,r){r(68)("WeakSet")},function(t,e,r){r(69)("Map")},function(t,e,r){r(69)("Set")},function(t,e,r){r(69)("WeakMap")},function(t,e,r){r(69)("WeakSet")},function(t,e,r){var n=r(0);n(n.G,{global:r(2)})},function(t,e,r){var n=r(0);n(n.S,"System",{global:r(2)})},function(t,e,r){var n=r(0),i=r(21);n(n.S,"Error",{isError:function isError(t){return"Error"===i(t)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clamp:function clamp(t,e,r){return Math.min(r,Math.max(e,t))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{DEG_PER_RAD:Math.PI/180})},function(t,e,r){var n=r(0),i=180/Math.PI;n(n.S,"Math",{degrees:function degrees(t){return t*i}})},function(t,e,r){var n=r(0),i=r(138),o=r(117);n(n.S,"Math",{fscale:function fscale(t,e,r,n,s){return o(i(t,e,r,n,s))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{iaddh:function iaddh(t,e,r,n){var i=t>>>0,o=r>>>0;return(e>>>0)+(n>>>0)+((i&o|(i|o)&~(i+o>>>0))>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{isubh:function isubh(t,e,r,n){var i=t>>>0,o=r>>>0;return(e>>>0)-(n>>>0)-((~i&o|~(i^o)&i-o>>>0)>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{imulh:function imulh(t,e){var r=+t,n=+e,i=65535&r,o=65535&n,s=r>>16,a=n>>16,u=(s*o>>>0)+(i*o>>>16);return s*a+(u>>16)+((i*a>>>0)+(65535&u)>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{RAD_PER_DEG:180/Math.PI})},function(t,e,r){var n=r(0),i=Math.PI/180;n(n.S,"Math",{radians:function radians(t){return t*i}})},function(t,e,r){var n=r(0);n(n.S,"Math",{scale:r(138)})},function(t,e,r){var n=r(0);n(n.S,"Math",{umulh:function umulh(t,e){var r=+t,n=+e,i=65535&r,o=65535&n,s=r>>>16,a=n>>>16,u=(s*o>>>0)+(i*o>>>16);return s*a+(u>>>16)+((i*a>>>0)+(65535&u)>>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{signbit:function signbit(t){return(t=+t)!=t?t:0==t?1/t==1/0:t>0}})},function(t,e,r){"use strict";var n=r(0),i=r(19),o=r(2),s=r(54),a=r(125);n(n.P+n.R,"Promise",{finally:function(t){var e=s(this,i.Promise||o.Promise),r="function"==typeof t;return this.then(r?function(r){return a(e,t()).then(function(){return r})}:t,r?function(r){return a(e,t()).then(function(){throw r})}:t)}})},function(t,e,r){"use strict";var n=r(0),i=r(97),o=r(124);n(n.S,"Promise",{try:function(t){var e=i.f(this),r=o(t);return(r.e?e.reject:e.resolve)(r.v),e.promise}})},function(t,e,r){var n=r(29),i=r(1),o=n.key,s=n.set;n.exp({defineMetadata:function defineMetadata(t,e,r,n){s(t,e,i(r),o(n))}})},function(t,e,r){var n=r(29),i=r(1),o=n.key,s=n.map,a=n.store;n.exp({deleteMetadata:function deleteMetadata(t,e){var r=arguments.length<3?void 0:o(arguments[2]),n=s(i(e),r,!1);if(void 0===n||!n.delete(t))return!1;if(n.size)return!0;var u=a.get(e);return u.delete(r),!!u.size||a.delete(e)}})},function(t,e,r){var n=r(29),i=r(1),o=r(18),s=n.has,a=n.get,u=n.key,c=function(t,e,r){if(s(t,e,r))return a(t,e,r);var n=o(e);return null!==n?c(t,n,r):void 0};n.exp({getMetadata:function getMetadata(t,e){return c(t,i(e),arguments.length<3?void 0:u(arguments[2]))}})},function(t,e,r){var n=r(128),i=r(137),o=r(29),s=r(1),a=r(18),u=o.keys,c=o.key,f=function(t,e){var r=u(t,e),o=a(t);if(null===o)return r;var s=f(o,e);return s.length?r.length?i(new n(r.concat(s))):s:r};o.exp({getMetadataKeys:function getMetadataKeys(t){return f(s(t),arguments.length<2?void 0:c(arguments[1]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.get,s=n.key;n.exp({getOwnMetadata:function getOwnMetadata(t,e){return o(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.keys,s=n.key;n.exp({getOwnMetadataKeys:function getOwnMetadataKeys(t){return o(i(t),arguments.length<2?void 0:s(arguments[1]))}})},function(t,e,r){var n=r(29),i=r(1),o=r(18),s=n.has,a=n.key,u=function(t,e,r){if(s(t,e,r))return!0;var n=o(e);return null!==n&&u(t,n,r)};n.exp({hasMetadata:function hasMetadata(t,e){return u(t,i(e),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.has,s=n.key;n.exp({hasOwnMetadata:function hasOwnMetadata(t,e){return o(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=r(11),s=n.key,a=n.set;n.exp({metadata:function metadata(t,e){return function decorator(r,n){a(t,e,(void 0!==n?i:o)(r),s(n))}}})},function(t,e,r){var n=r(0),i=r(96)(),o=r(2).process,s="process"==r(21)(o);n(n.G,{asap:function asap(t){var e=s&&o.domain;i(e?e.bind(t):t)}})},function(t,e,r){"use strict";var n=r(0),i=r(2),o=r(19),s=r(96)(),a=r(6)("observable"),u=r(11),c=r(1),f=r(40),h=r(42),l=r(12),p=r(41),g=p.RETURN,d=function(t){return null==t?void 0:u(t)},v=function(t){var e=t._c;e&&(t._c=void 0,e())},y=function(t){return void 0===t._o},m=function(t){y(t)||(t._o=void 0,v(t))},S=function(t,e){c(t),this._c=void 0,this._o=t,t=new _(this);try{var r=e(t),n=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){n.unsubscribe()}:u(r),this._c=r)}catch(e){return void t.error(e)}y(this)&&v(this)};S.prototype=h({},{unsubscribe:function unsubscribe(){m(this)}});var _=function(t){this._s=t};_.prototype=h({},{next:function next(t){var e=this._s;if(!y(e)){var r=e._o;try{var n=d(r.next);if(n)return n.call(r,t)}catch(t){try{m(e)}finally{throw t}}}},error:function error(t){var e=this._s;if(y(e))throw t;var r=e._o;e._o=void 0;try{var n=d(r.error);if(!n)throw t;t=n.call(r,t)}catch(t){try{v(e)}finally{throw t}}return v(e),t},complete:function complete(t){var e=this._s;if(!y(e)){var r=e._o;e._o=void 0;try{var n=d(r.complete);t=n?n.call(r,t):void 0}catch(t){try{v(e)}finally{throw t}}return v(e),t}}});var b=function Observable(t){f(this,b,"Observable","_f")._f=u(t)};h(b.prototype,{subscribe:function subscribe(t){return new S(t,this._f)},forEach:function forEach(t){var e=this;return new(o.Promise||i.Promise)(function(r,n){u(t);var i=e.subscribe({next:function(e){try{return t(e)}catch(t){n(t),i.unsubscribe()}},error:n,complete:r})})}}),h(b,{from:function from(t){var e="function"==typeof this?this:b,r=d(c(t)[a]);if(r){var n=c(r.call(t));return n.constructor===e?n:new e(function(t){return n.subscribe(t)})}return new e(function(e){var r=!1;return s(function(){if(!r){try{if(p(t,!1,function(t){if(e.next(t),r)return g})===g)return}catch(t){if(r)throw t;return void e.error(t)}e.complete()}}),function(){r=!0}})},of:function of(){for(var t=0,e=arguments.length,r=new Array(e);t2,i=!!n&&s.call(arguments,2);return t(n?function(){("function"==typeof e?e:Function(e)).apply(this,i)}:e,r)}};i(i.G+i.B+i.F*a,{setTimeout:u(n.setTimeout),setInterval:u(n.setInterval)})},function(t,e,r){var n=r(0),i=r(95);n(n.G+n.B,{setImmediate:i.set,clearImmediate:i.clear})},function(t,e,r){for(var n=r(92),i=r(35),o=r(13),s=r(2),a=r(12),u=r(48),c=r(6),f=c("iterator"),h=c("toStringTag"),l=u.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},g=i(p),d=0;d=0;--n){var o=this.tryEntries[n],s=o.completion;if("root"===o.tryLoc)return handle("end");if(o.tryLoc<=this.prev){var a=i.call(o,"catchLoc"),u=i.call(o,"finallyLoc");if(a&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),d}},catch:function(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 i=n.arg;resetTryEntry(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:values(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),d}}}function wrap(t,e,r,n){var i=e&&e.prototype instanceof Generator?e:Generator,o=Object.create(i.prototype),s=new Context(n||[]);return o._invoke=function makeInvokeMethod(t,e,r){var n=h;return function invoke(i,o){if(n===p)throw new Error("Generator is already running");if(n===g){if("throw"===i)throw o;return doneResult()}for(r.method=i,r.arg=o;;){var s=r.delegate;if(s){var a=maybeInvokeDelegate(s,r);if(a){if(a===d)continue;return a}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===h)throw n=g,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=p;var u=tryCatch(t,e,r);if("normal"===u.type){if(n=r.done?g:l,u.arg===d)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n=g,r.method="throw",r.arg=u.arg)}}}(t,r,s),o}function tryCatch(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}function defineIteratorMethods(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function AsyncIterator(t){function invoke(e,r,n,o){var s=tryCatch(t[e],t,r);if("throw"!==s.type){var a=s.arg,u=a.value;return u&&"object"==typeof u&&i.call(u,"__await")?Promise.resolve(u.__await).then(function(t){invoke("next",t,n,o)},function(t){invoke("throw",t,n,o)}):Promise.resolve(u).then(function(t){a.value=t,n(a)},o)}o(s.arg)}var r;"object"==typeof e.process&&e.process.domain&&(invoke=e.process.domain.bind(invoke)),this._invoke=function enqueue(t,e){function callInvokeWithMethodAndArg(){return new Promise(function(r,n){invoke(t,e,r,n)})}return r=r?r.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}}function maybeInvokeDelegate(t,e){var n=t.iterator[e.method];if(n===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=r,maybeInvokeDelegate(t,e),"throw"===e.method))return d;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var i=tryCatch(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=r),e.delegate=null,d):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}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(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function next(){for(;++n1&&void 0!==arguments[1]?arguments[1]:o.MetadataService,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.UserInfoService,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:c.JoseUtil,u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:a.TokenClient;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,ResponseValidator),!t)throw i.Log.error("ResponseValidator.ctor: No settings passed to ResponseValidator"),new Error("settings");this._settings=t,this._metadataService=new e(this._settings),this._userInfoService=new r(this._settings),this._joseUtil=n,this._tokenClient=new u(this._settings)}return ResponseValidator.prototype.validateSigninResponse=function validateSigninResponse(t,e){var r=this;return i.Log.debug("ResponseValidator.validateSigninResponse"),this._processSigninParams(t,e).then(function(e){return i.Log.debug("ResponseValidator.validateSigninResponse: state processed"),r._validateTokens(t,e).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: tokens validated"),r._processClaims(t).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: claims processed"),t})})})},ResponseValidator.prototype.validateSignoutResponse=function validateSignoutResponse(t,e){return t.id!==e.state?(i.Log.error("ResponseValidator.validateSignoutResponse: State does not match"),Promise.reject(new Error("State does not match"))):(i.Log.debug("ResponseValidator.validateSignoutResponse: state validated"),e.state=t.data,e.error?(i.Log.warn("ResponseValidator.validateSignoutResponse: Response was error",e.error),Promise.reject(new u.ErrorResponse(e))):Promise.resolve(e))},ResponseValidator.prototype._processSigninParams=function _processSigninParams(t,e){if(t.id!==e.state)return i.Log.error("ResponseValidator._processSigninParams: State does not match"),Promise.reject(new Error("State does not match"));if(!t.client_id)return i.Log.error("ResponseValidator._processSigninParams: No client_id on state"),Promise.reject(new Error("No client_id on state"));if(!t.authority)return i.Log.error("ResponseValidator._processSigninParams: No authority on state"),Promise.reject(new Error("No authority on state"));if(this._settings.authority){if(this._settings.authority&&this._settings.authority!==t.authority)return i.Log.error("ResponseValidator._processSigninParams: authority mismatch on settings vs. signin state"),Promise.reject(new Error("authority mismatch on settings vs. signin state"))}else this._settings.authority=t.authority;if(this._settings.client_id){if(this._settings.client_id&&this._settings.client_id!==t.client_id)return i.Log.error("ResponseValidator._processSigninParams: client_id mismatch on settings vs. signin state"),Promise.reject(new Error("client_id mismatch on settings vs. signin state"))}else this._settings.client_id=t.client_id;return i.Log.debug("ResponseValidator._processSigninParams: state validated"),e.state=t.data,e.error?(i.Log.warn("ResponseValidator._processSigninParams: Response was error",e.error),Promise.reject(new u.ErrorResponse(e))):t.nonce&&!e.id_token?(i.Log.error("ResponseValidator._processSigninParams: Expecting id_token in response"),Promise.reject(new Error("No id_token in response"))):!t.nonce&&e.id_token?(i.Log.error("ResponseValidator._processSigninParams: Not expecting id_token in response"),Promise.reject(new Error("Unexpected id_token in response"))):t.code_verifier&&!e.code?(i.Log.error("ResponseValidator._processSigninParams: Expecting code in response"),Promise.reject(new Error("No code in response"))):!t.code_verifier&&e.code?(i.Log.error("ResponseValidator._processSigninParams: Not expecting code in response"),Promise.reject(new Error("Unexpected code in response"))):Promise.resolve(e)},ResponseValidator.prototype._processClaims=function _processClaims(t){var e=this;if(t.isOpenIdConnect){if(i.Log.debug("ResponseValidator._processClaims: response is OIDC, processing claims"),t.profile=this._filterProtocolClaims(t.profile),this._settings.loadUserInfo&&t.access_token)return i.Log.debug("ResponseValidator._processClaims: loading user info"),this._userInfoService.getClaims(t.access_token).then(function(r){return i.Log.debug("ResponseValidator._processClaims: user info claims received from user info endpoint"),r.sub!==t.profile.sub?(i.Log.error("ResponseValidator._processClaims: sub from user info endpoint does not match sub in access_token"),Promise.reject(new Error("sub from user info endpoint does not match sub in access_token"))):(t.profile=e._mergeClaims(t.profile,r),i.Log.debug("ResponseValidator._processClaims: user info claims received, updated profile:",t.profile),t)});i.Log.debug("ResponseValidator._processClaims: not loading user info")}else i.Log.debug("ResponseValidator._processClaims: response is not OIDC, not processing claims");return Promise.resolve(t)},ResponseValidator.prototype._mergeClaims=function _mergeClaims(t,e){var r=Object.assign({},t);for(var i in e){var o=e[i];Array.isArray(o)||(o=[o]);for(var s=0;s1)return i.Log.error("ResponseValidator._validateIdToken: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));u=a[0]}if(!u)return i.Log.error("ResponseValidator._validateIdToken: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var c=t.client_id,f=r._settings.clockSkew;return i.Log.debug("ResponseValidator._validateIdToken: Validaing JWT; using clock skew (in seconds) of: ",f),r._joseUtil.validateJwt(e.id_token,u,s,c,f).then(function(){return i.Log.debug("ResponseValidator._validateIdToken: JWT validation successful"),n.payload.sub?(e.profile=n.payload,e):(i.Log.error("ResponseValidator._validateIdToken: No sub present in id_token"),Promise.reject(new Error("No sub present in id_token")))})})})},ResponseValidator.prototype._filterByAlg=function _filterByAlg(t,e){var r=null;if(e.startsWith("RS"))r="RSA";else if(e.startsWith("PS"))r="PS";else{if(!e.startsWith("ES"))return i.Log.debug("ResponseValidator._filterByAlg: alg not supported: ",e),[];r="EC"}return i.Log.debug("ResponseValidator._filterByAlg: Looking for keys that match kty: ",r),t=t.filter(function(t){return t.kty===r}),i.Log.debug("ResponseValidator._filterByAlg: Number of keys that match kty: ",r,t.length),t},ResponseValidator.prototype._validateAccessToken=function _validateAccessToken(t){if(!t.profile)return i.Log.error("ResponseValidator._validateAccessToken: No profile loaded from id_token"),Promise.reject(new Error("No profile loaded from id_token"));if(!t.profile.at_hash)return i.Log.error("ResponseValidator._validateAccessToken: No at_hash in id_token"),Promise.reject(new Error("No at_hash in id_token"));if(!t.id_token)return i.Log.error("ResponseValidator._validateAccessToken: No id_token"),Promise.reject(new Error("No id_token"));var e=this._joseUtil.parseJwt(t.id_token);if(!e||!e.header)return i.Log.error("ResponseValidator._validateAccessToken: Failed to parse id_token",e),Promise.reject(new Error("Failed to parse id_token"));var r=e.header.alg;if(!r||5!==r.length)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",r),Promise.reject(new Error("Unsupported alg: "+r));var n=r.substr(2,3);if(!n)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",r,n),Promise.reject(new Error("Unsupported alg: "+r));if(256!==(n=parseInt(n))&&384!==n&&512!==n)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",r,n),Promise.reject(new Error("Unsupported alg: "+r));var o="sha"+n,s=this._joseUtil.hashString(t.access_token,o);if(!s)return i.Log.error("ResponseValidator._validateAccessToken: access_token hash failed:",o),Promise.reject(new Error("Failed to validate at_hash"));var a=s.substr(0,s.length/2),u=this._joseUtil.hexToBase64Url(a);return u!==t.profile.at_hash?(i.Log.error("ResponseValidator._validateAccessToken: Failed to validate at_hash",u,t.profile.at_hash),Promise.reject(new Error("Failed to validate at_hash"))):(i.Log.debug("ResponseValidator._validateAccessToken: success"),Promise.resolve(t))},ResponseValidator}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserInfoService=void 0;var n=r(101),i=r(49),o=r(3),s=r(70);e.UserInfoService=function(){function UserInfoService(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:s.JoseUtil;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,UserInfoService),!t)throw o.Log.error("UserInfoService.ctor: No settings passed"),new Error("settings");this._settings=t,this._jsonService=new e(void 0,void 0,this._getClaimsFromJwt.bind(this)),this._metadataService=new r(this._settings),this._joseUtil=a}return UserInfoService.prototype.getClaims=function getClaims(t){var e=this;return t?this._metadataService.getUserInfoEndpoint().then(function(r){return o.Log.debug("UserInfoService.getClaims: received userinfo url",r),e._jsonService.getJson(r,t).then(function(t){return o.Log.debug("UserInfoService.getClaims: claims received",t),t})}):(o.Log.error("UserInfoService.getClaims: No token passed"),Promise.reject(new Error("A token is required")))},UserInfoService.prototype._getClaimsFromJwt=function _getClaimsFromJwt(t){var e=this;try{var r=this._joseUtil.parseJwt(t.responseText);if(!r||!r.header||!r.payload)return o.Log.error("UserInfoService._getClaimsFromJwt: Failed to parse JWT",r),Promise.reject(new Error("Failed to parse id_token"));var n=r.header.kid,i=void 0;switch(this._settings.userInfoJwtIssuer){case"OP":i=this._metadataService.getIssuer();break;case"ANY":i=Promise.resolve(r.payload.iss);break;default:i=Promise.resolve(this._settings.userInfoJwtIssuer)}return i.then(function(i){return o.Log.debug("UserInfoService._getClaimsFromJwt: Received issuer:"+i),e._metadataService.getSigningKeys().then(function(s){if(!s)return o.Log.error("UserInfoService._getClaimsFromJwt: No signing keys from metadata"),Promise.reject(new Error("No signing keys from metadata"));o.Log.debug("UserInfoService._getClaimsFromJwt: Received signing keys");var a=void 0;if(n)a=s.filter(function(t){return t.kid===n})[0];else{if((s=e._filterByAlg(s,r.header.alg)).length>1)return o.Log.error("UserInfoService._getClaimsFromJwt: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));a=s[0]}if(!a)return o.Log.error("UserInfoService._getClaimsFromJwt: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var u=e._settings.client_id,c=e._settings.clockSkew;return o.Log.debug("UserInfoService._getClaimsFromJwt: Validaing JWT; using clock skew (in seconds) of: ",c),e._joseUtil.validateJwt(t.responseText,a,i,u,c,void 0,!0).then(function(){return o.Log.debug("UserInfoService._getClaimsFromJwt: JWT validation successful"),r.payload})})})}catch(t){return o.Log.error("UserInfoService._getClaimsFromJwt: Error parsing JWT response",t.message),void reject(t)}},UserInfoService.prototype._filterByAlg=function _filterByAlg(t,e){var r=null;if(e.startsWith("RS"))r="RSA";else if(e.startsWith("PS"))r="PS";else{if(!e.startsWith("ES"))return o.Log.debug("UserInfoService._filterByAlg: alg not supported: ",e),[];r="EC"}return o.Log.debug("UserInfoService._filterByAlg: Looking for keys that match kty: ",r),t=t.filter(function(t){return t.kty===r}),o.Log.debug("UserInfoService._filterByAlg: Number of keys that match kty: ",r,t.length),t},UserInfoService}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AllowedSigningAlgs=e.b64tohex=e.hextob64u=e.crypto=e.X509=e.KeyUtil=e.jws=void 0;var n=r(359);e.jws=n.jws,e.KeyUtil=n.KEYUTIL,e.X509=n.X509,e.crypto=n.crypto,e.hextob64u=n.hextob64u,e.b64tohex=n.b64tohex,e.AllowedSigningAlgs=["RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"]},function(t,e,r){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i={userAgent:!1},u={}; +var Oidc=function(t){var e={};function __webpack_require__(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,__webpack_require__),n.l=!0,n.exports}return __webpack_require__.m=t,__webpack_require__.c=e,__webpack_require__.d=function(t,e,r){__webpack_require__.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},__webpack_require__.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},__webpack_require__.t=function(t,e){if(1&e&&(t=__webpack_require__(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(__webpack_require__.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)__webpack_require__.d(r,n,function(e){return t[e]}.bind(null,n));return r},__webpack_require__.n=function(t){var e=t&&t.__esModule?function getDefault(){return t.default}:function getModuleExports(){return t};return __webpack_require__.d(e,"a",e),e},__webpack_require__.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=152)}([function(t,e,r){var n=r(2),i=r(19),o=r(12),s=r(13),a=r(20),u=function(t,e,r){var c,f,h,l,p=t&u.F,g=t&u.G,d=t&u.S,v=t&u.P,y=t&u.B,m=g?n:d?n[e]||(n[e]={}):(n[e]||{}).prototype,_=g?i:i[e]||(i[e]={}),S=_.prototype||(_.prototype={});for(c in g&&(r=e),r)h=((f=!p&&m&&void 0!==m[c])?m:r)[c],l=y&&f?a(h,n):v&&"function"==typeof h?a(Function.call,h):h,m&&s(m,c,h,t&u.U),_[c]!=h&&o(_,c,l),v&&S[c]!=h&&(S[c]=h)};n.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e,r){var n=r(5);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function defineProperties(t,e){for(var r=0;r=4){for(var t=arguments.length,e=Array(t),r=0;r=3){for(var t=arguments.length,e=Array(t),r=0;r=2){for(var t=arguments.length,e=Array(t),r=0;r=1){for(var t=arguments.length,e=Array(t),r=0;r0?i(n(t),9007199254740991):0}},function(t,e,r){t.exports=!r(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(1),i=r(103),o=r(24),s=Object.defineProperty;e.f=r(8)?Object.defineProperty:function defineProperty(t,e,r){if(n(t),e=o(e,!0),n(r),i)try{return s(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[e]=r.value),t}},function(t,e,r){var n=r(25);t.exports=function(t){return Object(n(t))}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,r){var n=r(9),i=r(33);t.exports=r(8)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},function(t,e,r){var n=r(2),i=r(12),o=r(15),s=r(34)("src"),a=r(156),u=(""+a).split("toString");r(19).inspectSource=function(t){return a.call(t)},(t.exports=function(t,e,r,a){var c="function"==typeof r;c&&(o(r,"name")||i(r,"name",e)),t[e]!==r&&(c&&(o(r,s)||i(r,s,t[e]?""+t[e]:u.join(String(e)))),t===n?t[e]=r:a?t[e]?t[e]=r:i(t,e,r):(delete t[e],i(t,e,r)))})(Function.prototype,"toString",function toString(){return"function"==typeof this&&this[s]||a.call(this)})},function(t,e,r){var n=r(0),i=r(4),o=r(25),s=/"/g,a=function(t,e,r,n){var i=String(o(t)),a="<"+e;return""!==r&&(a+=" "+r+'="'+String(n).replace(s,""")+'"'),a+">"+i+""};t.exports=function(t,e){var r={};r[t]=e(a),n(n.P+n.F*i(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",r)}},function(t,e){var r={}.hasOwnProperty;t.exports=function(t,e){return r.call(t,e)}},function(t,e,r){var n=r(51),i=r(25);t.exports=function(t){return n(i(t))}},function(t,e,r){var n=r(52),i=r(33),o=r(16),s=r(24),a=r(15),u=r(103),c=Object.getOwnPropertyDescriptor;e.f=r(8)?c:function getOwnPropertyDescriptor(t,e){if(t=o(t),e=s(e,!0),u)try{return c(t,e)}catch(t){}if(a(t,e))return i(!n.f.call(t,e),t[e])}},function(t,e,r){var n=r(15),i=r(10),o=r(74)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),n(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e){var r=t.exports={version:"2.6.4"};"number"==typeof __e&&(__e=r)},function(t,e,r){var n=r(11);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},function(t,e){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,e){var r=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:r)(t)}},function(t,e,r){"use strict";var n=r(4);t.exports=function(t,e){return!!t&&n(function(){e?t.call(null,function(){},1):t.call(null)})}},function(t,e,r){var n=r(5);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,r){var n=r(0),i=r(19),o=r(4);t.exports=function(t,e){var r=(i.Object||{})[t]||Object[t],s={};s[t]=e(r),n(n.S+n.F*o(function(){r(1)}),"Object",s)}},function(t,e,r){var n=r(20),i=r(51),o=r(10),s=r(7),a=r(90);t.exports=function(t,e){var r=1==t,u=2==t,c=3==t,f=4==t,h=6==t,l=5==t||h,p=e||a;return function(e,a,g){for(var d,v,y=o(e),m=i(y),_=n(a,g,3),S=s(m.length),b=0,w=r?p(e,S):u?p(e,0):void 0;S>b;b++)if((l||b in m)&&(v=_(d=m[b],b,y),t))if(r)w[b]=v;else if(v)switch(t){case 3:return!0;case 5:return d;case 6:return b;case 2:w.push(d)}else if(f)return!1;return h?-1:c||f?f:w}}},function(t,e,r){"use strict";if(r(8)){var n=r(30),i=r(2),o=r(4),s=r(0),a=r(66),u=r(98),c=r(20),f=r(40),h=r(33),l=r(12),p=r(42),g=r(22),d=r(7),v=r(131),y=r(36),m=r(24),_=r(15),S=r(46),b=r(5),w=r(10),F=r(87),E=r(37),x=r(18),k=r(38).f,A=r(89),P=r(34),I=r(6),C=r(27),R=r(56),B=r(54),T=r(92),M=r(48),O=r(61),U=r(39),N=r(91),L=r(120),D=r(9),j=r(17),H=D.f,K=j.f,V=i.RangeError,q=i.TypeError,W=i.Uint8Array,J=Array.prototype,z=u.ArrayBuffer,G=u.DataView,Y=C(0),X=C(2),$=C(3),Q=C(4),Z=C(5),tt=C(6),et=R(!0),rt=R(!1),nt=T.values,it=T.keys,ot=T.entries,st=J.lastIndexOf,at=J.reduce,ut=J.reduceRight,ct=J.join,ft=J.sort,ht=J.slice,lt=J.toString,pt=J.toLocaleString,gt=I("iterator"),dt=I("toStringTag"),vt=P("typed_constructor"),yt=P("def_constructor"),mt=a.CONSTR,_t=a.TYPED,St=a.VIEW,bt=C(1,function(t,e){return kt(B(t,t[yt]),e)}),wt=o(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),Ft=!!W&&!!W.prototype.set&&o(function(){new W(1).set({})}),Et=function(t,e){var r=g(t);if(r<0||r%e)throw V("Wrong offset!");return r},xt=function(t){if(b(t)&&_t in t)return t;throw q(t+" is not a typed array!")},kt=function(t,e){if(!(b(t)&&vt in t))throw q("It is not a typed array constructor!");return new t(e)},At=function(t,e){return Pt(B(t,t[yt]),e)},Pt=function(t,e){for(var r=0,n=e.length,i=kt(t,n);n>r;)i[r]=e[r++];return i},It=function(t,e,r){H(t,e,{get:function(){return this._d[r]}})},Ct=function from(t){var e,r,n,i,o,s,a=w(t),u=arguments.length,f=u>1?arguments[1]:void 0,h=void 0!==f,l=A(a);if(void 0!=l&&!F(l)){for(s=l.call(a),n=[],e=0;!(o=s.next()).done;e++)n.push(o.value);a=n}for(h&&u>2&&(f=c(f,arguments[2],2)),e=0,r=d(a.length),i=kt(this,r);r>e;e++)i[e]=h?f(a[e],e):a[e];return i},Rt=function of(){for(var t=0,e=arguments.length,r=kt(this,e);e>t;)r[t]=arguments[t++];return r},Bt=!!W&&o(function(){pt.call(new W(1))}),Tt=function toLocaleString(){return pt.apply(Bt?ht.call(xt(this)):xt(this),arguments)},Mt={copyWithin:function copyWithin(t,e){return L.call(xt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function every(t){return Q(xt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function fill(t){return N.apply(xt(this),arguments)},filter:function filter(t){return At(this,X(xt(this),t,arguments.length>1?arguments[1]:void 0))},find:function find(t){return Z(xt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function findIndex(t){return tt(xt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function forEach(t){Y(xt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function indexOf(t){return rt(xt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function includes(t){return et(xt(this),t,arguments.length>1?arguments[1]:void 0)},join:function join(t){return ct.apply(xt(this),arguments)},lastIndexOf:function lastIndexOf(t){return st.apply(xt(this),arguments)},map:function map(t){return bt(xt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function reduce(t){return at.apply(xt(this),arguments)},reduceRight:function reduceRight(t){return ut.apply(xt(this),arguments)},reverse:function reverse(){for(var t,e=xt(this).length,r=Math.floor(e/2),n=0;n1?arguments[1]:void 0)},sort:function sort(t){return ft.call(xt(this),t)},subarray:function subarray(t,e){var r=xt(this),n=r.length,i=y(t,n);return new(B(r,r[yt]))(r.buffer,r.byteOffset+i*r.BYTES_PER_ELEMENT,d((void 0===e?n:y(e,n))-i))}},Ot=function slice(t,e){return At(this,ht.call(xt(this),t,e))},Ut=function set(t){xt(this);var e=Et(arguments[1],1),r=this.length,n=w(t),i=d(n.length),o=0;if(i+e>r)throw V("Wrong length!");for(;o255?255:255&n),i.v[p](r*e+i.o,n,wt)}(this,r,t)},enumerable:!0})};_?(g=r(function(t,r,n,i){f(t,g,c,"_d");var o,s,a,u,h=0,p=0;if(b(r)){if(!(r instanceof z||"ArrayBuffer"==(u=S(r))||"SharedArrayBuffer"==u))return _t in r?Pt(g,r):Ct.call(g,r);o=r,p=Et(n,e);var y=r.byteLength;if(void 0===i){if(y%e)throw V("Wrong length!");if((s=y-p)<0)throw V("Wrong length!")}else if((s=d(i)*e)+p>y)throw V("Wrong length!");a=s/e}else a=v(r),o=new z(s=a*e);for(l(t,"_d",{b:o,o:p,l:s,e:a,v:new G(o)});hdocument.F=Object<\/script>"),t.close(),u=t.F;n--;)delete u.prototype[o[n]];return u()};t.exports=Object.create||function create(t,e){var r;return null!==t?(a.prototype=n(t),r=new a,a.prototype=null,r[s]=t):r=u(),void 0===e?r:i(r,e)}},function(t,e,r){var n=r(105),i=r(75).concat("length","prototype");e.f=Object.getOwnPropertyNames||function getOwnPropertyNames(t){return n(t,i)}},function(t,e,r){"use strict";var n=r(2),i=r(9),o=r(8),s=r(6)("species");t.exports=function(t){var e=n[t];o&&e&&!e[s]&&i.f(e,s,{configurable:!0,get:function(){return this}})}},function(t,e){t.exports=function(t,e,r,n){if(!(t instanceof e)||void 0!==n&&n in t)throw TypeError(r+": incorrect invocation!");return t}},function(t,e,r){var n=r(20),i=r(118),o=r(87),s=r(1),a=r(7),u=r(89),c={},f={};(e=t.exports=function(t,e,r,h,l){var p,g,d,v,y=l?function(){return t}:u(t),m=n(r,h,e?2:1),_=0;if("function"!=typeof y)throw TypeError(t+" is not iterable!");if(o(y)){for(p=a(t.length);p>_;_++)if((v=e?m(s(g=t[_])[0],g[1]):m(t[_]))===c||v===f)return v}else for(d=y.call(t);!(g=d.next()).done;)if((v=i(d,m,g.value,e))===c||v===f)return v}).BREAK=c,e.RETURN=f},function(t,e,r){var n=r(13);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},function(t,e,r){var n=r(5);t.exports=function(t,e){if(!n(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function defineProperties(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.JsonService;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,MetadataService),!t)throw i.Log.error("MetadataService: No settings passed to MetadataService"),new Error("settings");this._settings=t,this._jsonService=new e(["application/jwk-set+json"])}return MetadataService.prototype.getMetadata=function getMetadata(){var t=this;return this._settings.metadata?(i.Log.debug("MetadataService.getMetadata: Returning metadata from settings"),Promise.resolve(this._settings.metadata)):this.metadataUrl?(i.Log.debug("MetadataService.getMetadata: getting metadata from",this.metadataUrl),this._jsonService.getJson(this.metadataUrl).then(function(e){return i.Log.debug("MetadataService.getMetadata: json received"),t._settings.metadata=e,e})):(i.Log.error("MetadataService.getMetadata: No authority or metadataUrl configured on settings"),Promise.reject(new Error("No authority or metadataUrl configured on settings")))},MetadataService.prototype.getIssuer=function getIssuer(){return this._getMetadataProperty("issuer")},MetadataService.prototype.getAuthorizationEndpoint=function getAuthorizationEndpoint(){return this._getMetadataProperty("authorization_endpoint")},MetadataService.prototype.getUserInfoEndpoint=function getUserInfoEndpoint(){return this._getMetadataProperty("userinfo_endpoint")},MetadataService.prototype.getTokenEndpoint=function getTokenEndpoint(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._getMetadataProperty("token_endpoint",t)},MetadataService.prototype.getCheckSessionIframe=function getCheckSessionIframe(){return this._getMetadataProperty("check_session_iframe",!0)},MetadataService.prototype.getEndSessionEndpoint=function getEndSessionEndpoint(){return this._getMetadataProperty("end_session_endpoint",!0)},MetadataService.prototype.getRevocationEndpoint=function getRevocationEndpoint(){return this._getMetadataProperty("revocation_endpoint",!0)},MetadataService.prototype.getKeysEndpoint=function getKeysEndpoint(){return this._getMetadataProperty("jwks_uri",!0)},MetadataService.prototype._getMetadataProperty=function _getMetadataProperty(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return i.Log.debug("MetadataService.getMetadataProperty for: "+t),this.getMetadata().then(function(r){if(i.Log.debug("MetadataService.getMetadataProperty: metadata recieved"),void 0===r[t]){if(!0===e)return void i.Log.warn("MetadataService.getMetadataProperty: Metadata does not contain optional property "+t);throw i.Log.error("MetadataService.getMetadataProperty: Metadata does not contain property "+t),new Error("Metadata does not contain property "+t)}return r[t]})},MetadataService.prototype.getSigningKeys=function getSigningKeys(){var t=this;return this._settings.signingKeys?(i.Log.debug("MetadataService.getSigningKeys: Returning signingKeys from settings"),Promise.resolve(this._settings.signingKeys)):this._getMetadataProperty("jwks_uri").then(function(e){return i.Log.debug("MetadataService.getSigningKeys: jwks_uri received",e),t._jsonService.getJson(e).then(function(e){if(i.Log.debug("MetadataService.getSigningKeys: key set received",e),!e.keys)throw i.Log.error("MetadataService.getSigningKeys: Missing keys on keyset"),new Error("Missing keys on keyset");return t._settings.signingKeys=e.keys,t._settings.signingKeys})})},n(MetadataService,[{key:"metadataUrl",get:function get(){return this._metadataUrl||(this._settings.metadataUrl?this._metadataUrl=this._settings.metadataUrl:(this._metadataUrl=this._settings.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration"))),this._metadataUrl}}]),MetadataService}()},function(t,e,r){var n=r(19),i=r(2),o=i["__core-js_shared__"]||(i["__core-js_shared__"]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:n.version,mode:r(30)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(t,e,r){var n=r(21);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,r){"use strict";var n=r(1);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,r){var n=r(1),i=r(11),o=r(6)("species");t.exports=function(t,e){var r,s=n(t).constructor;return void 0===s||void 0==(r=n(s)[o])?e:i(r)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UrlUtility=void 0;var n=r(3),i=r(44);e.UrlUtility=function(){function UrlUtility(){!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,UrlUtility)}return UrlUtility.addQueryParam=function addQueryParam(t,e,r){return t.indexOf("?")<0&&(t+="?"),"?"!==t[t.length-1]&&(t+="&"),t+=encodeURIComponent(e),t+="=",t+=encodeURIComponent(r)},UrlUtility.parseUrlFragment=function parseUrlFragment(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.Global;"string"!=typeof t&&(t=r.location.href);var o=t.lastIndexOf(e);o>=0&&(t=t.substr(o+1)),"?"===e&&(o=t.indexOf("#"))>=0&&(t=t.substr(0,o));for(var s,a={},u=/([^&=]+)=([^&]*)/g,c=0;s=u.exec(t);)if(a[decodeURIComponent(s[1])]=decodeURIComponent(s[2]),c++>50)return n.Log.error("UrlUtility.parseUrlFragment: response exceeded expected number of parameters",t),{error:"Response exceeded expected number of parameters"};for(var f in a)return a;return{}},UrlUtility}()},function(t,e,r){var n=r(16),i=r(7),o=r(36);t.exports=function(t){return function(e,r,s){var a,u=n(e),c=i(u.length),f=o(s,c);if(t&&r!=r){for(;c>f;)if((a=u[f++])!=a)return!0}else for(;c>f;f++)if((t||f in u)&&u[f]===r)return t||f||0;return!t&&-1}}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,r){var n=r(21);t.exports=Array.isArray||function isArray(t){return"Array"==n(t)}},function(t,e,r){var n=r(22),i=r(25);t.exports=function(t){return function(e,r){var o,s,a=String(i(e)),u=n(r),c=a.length;return u<0||u>=c?t?"":void 0:(o=a.charCodeAt(u))<55296||o>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?t?a.charAt(u):o:t?a.slice(u,u+2):s-56320+(o-55296<<10)+65536}}},function(t,e,r){var n=r(5),i=r(21),o=r(6)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},function(t,e,r){var n=r(6)("iterator"),i=!1;try{var o=[7][n]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var o=[7],s=o[n]();s.next=function(){return{done:r=!0}},o[n]=function(){return s},t(o)}catch(t){}return r}},function(t,e,r){"use strict";var n=r(46),i=RegExp.prototype.exec;t.exports=function(t,e){var r=t.exec;if("function"==typeof r){var o=r.call(t,e);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==n(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},function(t,e,r){"use strict";r(122);var n=r(13),i=r(12),o=r(4),s=r(25),a=r(6),u=r(93),c=a("species"),f=!o(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),h=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var r="ab".split(t);return 2===r.length&&"a"===r[0]&&"b"===r[1]}();t.exports=function(t,e,r){var l=a(t),p=!o(function(){var e={};return e[l]=function(){return 7},7!=""[t](e)}),g=p?!o(function(){var e=!1,r=/a/;return r.exec=function(){return e=!0,null},"split"===t&&(r.constructor={},r.constructor[c]=function(){return r}),r[l](""),!e}):void 0;if(!p||!g||"replace"===t&&!f||"split"===t&&!h){var d=/./[l],v=r(s,l,""[t],function maybeCallNative(t,e,r,n,i){return e.exec===u?p&&!i?{done:!0,value:d.call(e,r,n)}:{done:!0,value:t.call(r,e,n)}:{done:!1}}),y=v[0],m=v[1];n(String.prototype,t,y),i(RegExp.prototype,l,2==e?function(t,e){return m.call(t,this,e)}:function(t){return m.call(t,this)})}}},function(t,e,r){var n=r(2).navigator;t.exports=n&&n.userAgent||""},function(t,e,r){"use strict";var n=r(2),i=r(0),o=r(13),s=r(42),a=r(31),u=r(41),c=r(40),f=r(5),h=r(4),l=r(61),p=r(45),g=r(79);t.exports=function(t,e,r,d,v,y){var m=n[t],_=m,S=v?"set":"add",b=_&&_.prototype,w={},F=function(t){var e=b[t];o(b,t,"delete"==t?function(t){return!(y&&!f(t))&&e.call(this,0===t?0:t)}:"has"==t?function has(t){return!(y&&!f(t))&&e.call(this,0===t?0:t)}:"get"==t?function get(t){return y&&!f(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function add(t){return e.call(this,0===t?0:t),this}:function set(t,r){return e.call(this,0===t?0:t,r),this})};if("function"==typeof _&&(y||b.forEach&&!h(function(){(new _).entries().next()}))){var E=new _,x=E[S](y?{}:-0,1)!=E,k=h(function(){E.has(1)}),A=l(function(t){new _(t)}),P=!y&&h(function(){for(var t=new _,e=5;e--;)t[S](e,e);return!t.has(-0)});A||((_=e(function(e,r){c(e,_,t);var n=g(new m,e,_);return void 0!=r&&u(r,v,n[S],n),n})).prototype=b,b.constructor=_),(k||P)&&(F("delete"),F("has"),v&&F("get")),(P||x)&&F(S),y&&b.clear&&delete b.clear}else _=d.getConstructor(e,t,v,S),s(_.prototype,r),a.NEED=!0;return p(_,t),w[t]=_,i(i.G+i.W+i.F*(_!=m),w),y||d.setStrong(_,t,v),_}},function(t,e,r){for(var n,i=r(2),o=r(12),s=r(34),a=s("typed_array"),u=s("view"),c=!(!i.ArrayBuffer||!i.DataView),f=c,h=0,l="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");h<9;)(n=i[l[h++]])?(o(n.prototype,a,!0),o(n.prototype,u,!0)):f=!1;t.exports={ABV:c,CONSTR:f,TYPED:a,VIEW:u}},function(t,e,r){"use strict";t.exports=r(30)||!r(4)(function(){var t=Math.random();__defineSetter__.call(null,t,function(){}),delete r(2)[t]})},function(t,e,r){"use strict";var n=r(0);t.exports=function(t){n(n.S,t,{of:function of(){for(var t=arguments.length,e=new Array(t);t--;)e[t]=arguments[t];return new this(e)}})}},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(20),s=r(41);t.exports=function(t){n(n.S,t,{from:function from(t){var e,r,n,a,u=arguments[1];return i(this),(e=void 0!==u)&&i(u),void 0==t?new this:(r=[],e?(n=0,a=o(u,arguments[2],2),s(t,!1,function(t){r.push(a(t,n++))})):s(t,!1,r.push,r),new this(r))}})}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.JoseUtil=void 0;var n=r(358),i=function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}(r(364));e.JoseUtil=(0,i.default)({jws:n.jws,KeyUtil:n.KeyUtil,X509:n.X509,crypto:n.crypto,hextob64u:n.hextob64u,b64tohex:n.b64tohex,AllowedSigningAlgs:n.AllowedSigningAlgs})},function(t,e){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e,r){var n=r(5),i=r(2).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,r){var n=r(2),i=r(19),o=r(30),s=r(104),a=r(9).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:n.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},function(t,e,r){var n=r(50)("keys"),i=r(34);t.exports=function(t){return n[t]||(n[t]=i(t))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,r){var n=r(2).document;t.exports=n&&n.documentElement},function(t,e,r){var n=r(5),i=r(1),o=function(t,e){if(i(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{(n=r(20)(Function.call,r(17).f(Object.prototype,"__proto__").set,2))(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function setPrototypeOf(t,r){return o(t,r),e?t.__proto__=r:n(t,r),t}}({},!1):void 0),check:o}},function(t,e){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(t,e,r){var n=r(5),i=r(77).set;t.exports=function(t,e,r){var o,s=e.constructor;return s!==r&&"function"==typeof s&&(o=s.prototype)!==r.prototype&&n(o)&&i&&i(t,o),t}},function(t,e,r){"use strict";var n=r(22),i=r(25);t.exports=function repeat(t){var e=String(i(this)),r="",o=n(t);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(e+=e))1&o&&(r+=e);return r}},function(t,e){t.exports=Math.sign||function sign(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e){var r=Math.expm1;t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function expm1(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:r},function(t,e,r){"use strict";var n=r(30),i=r(0),o=r(13),s=r(12),a=r(48),u=r(84),c=r(45),f=r(18),h=r(6)("iterator"),l=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,e,r,g,d,v,y){u(r,e,g);var m,_,S,b=function(t){if(!l&&t in x)return x[t];switch(t){case"keys":return function keys(){return new r(this,t)};case"values":return function values(){return new r(this,t)}}return function entries(){return new r(this,t)}},w=e+" Iterator",F="values"==d,E=!1,x=t.prototype,k=x[h]||x["@@iterator"]||d&&x[d],A=k||b(d),P=d?F?b("entries"):A:void 0,I="Array"==e&&x.entries||k;if(I&&(S=f(I.call(new t)))!==Object.prototype&&S.next&&(c(S,w,!0),n||"function"==typeof S[h]||s(S,h,p)),F&&k&&"values"!==k.name&&(E=!0,A=function values(){return k.call(this)}),n&&!y||!l&&!E&&x[h]||s(x,h,A),a[e]=A,a[w]=p,d)if(m={values:F?A:b("values"),keys:v?A:b("keys"),entries:P},y)for(_ in m)_ in x||o(x,_,m[_]);else i(i.P+i.F*(l||E),e,m);return m}},function(t,e,r){"use strict";var n=r(37),i=r(33),o=r(45),s={};r(12)(s,r(6)("iterator"),function(){return this}),t.exports=function(t,e,r){t.prototype=n(s,{next:i(1,r)}),o(t,e+" Iterator")}},function(t,e,r){var n=r(60),i=r(25);t.exports=function(t,e,r){if(n(e))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},function(t,e,r){var n=r(6)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[n]=!1,!"/./"[t](e)}catch(t){}}return!0}},function(t,e,r){var n=r(48),i=r(6)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(n.Array===t||o[i]===t)}},function(t,e,r){"use strict";var n=r(9),i=r(33);t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},function(t,e,r){var n=r(46),i=r(6)("iterator"),o=r(48);t.exports=r(19).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[n(t)]}},function(t,e,r){var n=r(245);t.exports=function(t,e){return new(n(t))(e)}},function(t,e,r){"use strict";var n=r(10),i=r(36),o=r(7);t.exports=function fill(t){for(var e=n(this),r=o(e.length),s=arguments.length,a=i(s>1?arguments[1]:void 0,r),u=s>2?arguments[2]:void 0,c=void 0===u?r:i(u,r);c>a;)e[a++]=t;return e}},function(t,e,r){"use strict";var n=r(32),i=r(121),o=r(48),s=r(16);t.exports=r(83)(Array,"Array",function(t,e){this._t=s(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?r:"values"==e?t[r]:[r,t[r]])},"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},function(t,e,r){"use strict";var n=r(53),i=RegExp.prototype.exec,o=String.prototype.replace,s=i,a=function(){var t=/a/,e=/b*/g;return i.call(t,"a"),i.call(e,"a"),0!==t.lastIndex||0!==e.lastIndex}(),u=void 0!==/()??/.exec("")[1];(a||u)&&(s=function exec(t){var e,r,s,c,f=this;return u&&(r=new RegExp("^"+f.source+"$(?!\\s)",n.call(f))),a&&(e=f.lastIndex),s=i.call(f,t),a&&s&&(f.lastIndex=f.global?s.index+s[0].length:e),u&&s&&s.length>1&&o.call(s[0],r,function(){for(c=1;cr;)e.push(arguments[r++]);return y[++v]=function(){a("function"==typeof t?t:Function(t),e)},n(v),v},p=function clearImmediate(t){delete y[t]},"process"==r(21)(h)?n=function(t){h.nextTick(s(m,t,1))}:d&&d.now?n=function(t){d.now(s(m,t,1))}:g?(o=(i=new g).port2,i.port1.onmessage=_,n=s(o.postMessage,o,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(n=function(t){f.postMessage(t+"","*")},f.addEventListener("message",_,!1)):n="onreadystatechange"in c("script")?function(t){u.appendChild(c("script")).onreadystatechange=function(){u.removeChild(this),m.call(t)}}:function(t){setTimeout(s(m,t,1),0)}),t.exports={set:l,clear:p}},function(t,e,r){var n=r(2),i=r(95).set,o=n.MutationObserver||n.WebKitMutationObserver,s=n.process,a=n.Promise,u="process"==r(21)(s);t.exports=function(){var t,e,r,c=function(){var n,i;for(u&&(n=s.domain)&&n.exit();t;){i=t.fn,t=t.next;try{i()}catch(n){throw t?r():e=void 0,n}}e=void 0,n&&n.enter()};if(u)r=function(){s.nextTick(c)};else if(!o||n.navigator&&n.navigator.standalone)if(a&&a.resolve){var f=a.resolve(void 0);r=function(){f.then(c)}}else r=function(){i.call(n,c)};else{var h=!0,l=document.createTextNode("");new o(c).observe(l,{characterData:!0}),r=function(){l.data=h=!h}}return function(n){var i={fn:n,next:void 0};e&&(e.next=i),t||(t=i,r()),e=i}}},function(t,e,r){"use strict";var n=r(11);t.exports.f=function(t){return new function PromiseCapability(t){var e,r;this.promise=new t(function(t,n){if(void 0!==e||void 0!==r)throw TypeError("Bad Promise constructor");e=t,r=n}),this.resolve=n(e),this.reject=n(r)}(t)}},function(t,e,r){"use strict";var n=r(2),i=r(8),o=r(30),s=r(66),a=r(12),u=r(42),c=r(4),f=r(40),h=r(22),l=r(7),p=r(131),g=r(38).f,d=r(9).f,v=r(91),y=r(45),m="prototype",_="Wrong index!",S=n.ArrayBuffer,b=n.DataView,w=n.Math,F=n.RangeError,E=n.Infinity,x=S,k=w.abs,A=w.pow,P=w.floor,I=w.log,C=w.LN2,R=i?"_b":"buffer",B=i?"_l":"byteLength",T=i?"_o":"byteOffset";function packIEEE754(t,e,r){var n,i,o,s=new Array(r),a=8*r-e-1,u=(1<>1,f=23===e?A(2,-24)-A(2,-77):0,h=0,l=t<0||0===t&&1/t<0?1:0;for((t=k(t))!=t||t===E?(i=t!=t?1:0,n=u):(n=P(I(t)/C),t*(o=A(2,-n))<1&&(n--,o*=2),(t+=n+c>=1?f/o:f*A(2,1-c))*o>=2&&(n++,o/=2),n+c>=u?(i=0,n=u):n+c>=1?(i=(t*o-1)*A(2,e),n+=c):(i=t*A(2,c-1)*A(2,e),n=0));e>=8;s[h++]=255&i,i/=256,e-=8);for(n=n<0;s[h++]=255&n,n/=256,a-=8);return s[--h]|=128*l,s}function unpackIEEE754(t,e,r){var n,i=8*r-e-1,o=(1<>1,a=i-7,u=r-1,c=t[u--],f=127&c;for(c>>=7;a>0;f=256*f+t[u],u--,a-=8);for(n=f&(1<<-a)-1,f>>=-a,a+=e;a>0;n=256*n+t[u],u--,a-=8);if(0===f)f=1-s;else{if(f===o)return n?NaN:c?-E:E;n+=A(2,e),f-=s}return(c?-1:1)*n*A(2,f-e)}function unpackI32(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function packI8(t){return[255&t]}function packI16(t){return[255&t,t>>8&255]}function packI32(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function packF64(t){return packIEEE754(t,52,8)}function packF32(t){return packIEEE754(t,23,4)}function addGetter(t,e,r){d(t[m],e,{get:function(){return this[r]}})}function get(t,e,r,n){var i=p(+r);if(i+e>t[B])throw F(_);var o=t[R]._b,s=i+t[T],a=o.slice(s,s+e);return n?a:a.reverse()}function set(t,e,r,n,i,o){var s=p(+r);if(s+e>t[B])throw F(_);for(var a=t[R]._b,u=s+t[T],c=n(+i),f=0;fN;)(M=U[N++])in S||a(S,M,x[M]);o||(O.constructor=S)}var L=new b(new S(2)),D=b[m].setInt8;L.setInt8(0,2147483648),L.setInt8(1,2147483649),!L.getInt8(0)&&L.getInt8(1)||u(b[m],{setInt8:function setInt8(t,e){D.call(this,t,e<<24>>24)},setUint8:function setUint8(t,e){D.call(this,t,e<<24>>24)}},!0)}else S=function ArrayBuffer(t){f(this,S,"ArrayBuffer");var e=p(t);this._b=v.call(new Array(e),0),this[B]=e},b=function DataView(t,e,r){f(this,b,"DataView"),f(t,S,"DataView");var n=t[B],i=h(e);if(i<0||i>n)throw F("Wrong offset!");if(i+(r=void 0===r?n-i:l(r))>n)throw F("Wrong length!");this[R]=t,this[T]=i,this[B]=r},i&&(addGetter(S,"byteLength","_l"),addGetter(b,"buffer","_b"),addGetter(b,"byteLength","_l"),addGetter(b,"byteOffset","_o")),u(b[m],{getInt8:function getInt8(t){return get(this,1,t)[0]<<24>>24},getUint8:function getUint8(t){return get(this,1,t)[0]},getInt16:function getInt16(t){var e=get(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function getUint16(t){var e=get(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function getInt32(t){return unpackI32(get(this,4,t,arguments[1]))},getUint32:function getUint32(t){return unpackI32(get(this,4,t,arguments[1]))>>>0},getFloat32:function getFloat32(t){return unpackIEEE754(get(this,4,t,arguments[1]),23,4)},getFloat64:function getFloat64(t){return unpackIEEE754(get(this,8,t,arguments[1]),52,8)},setInt8:function setInt8(t,e){set(this,1,t,packI8,e)},setUint8:function setUint8(t,e){set(this,1,t,packI8,e)},setInt16:function setInt16(t,e){set(this,2,t,packI16,e,arguments[2])},setUint16:function setUint16(t,e){set(this,2,t,packI16,e,arguments[2])},setInt32:function setInt32(t,e){set(this,4,t,packI32,e,arguments[2])},setUint32:function setUint32(t,e){set(this,4,t,packI32,e,arguments[2])},setFloat32:function setFloat32(t,e){set(this,4,t,packF32,e,arguments[2])},setFloat64:function setFloat64(t,e){set(this,8,t,packF64,e,arguments[2])}});y(S,"ArrayBuffer"),y(b,"DataView"),a(b[m],s.VIEW,!0),e.ArrayBuffer=S,e.DataView=b},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OidcClientSettings=void 0;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function defineProperties(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=t.authority,r=t.metadataUrl,i=t.metadata,o=t.signingKeys,p=t.client_id,g=t.client_secret,d=t.response_type,v=void 0===d?c:d,y=t.scope,m=void 0===y?f:y,_=t.redirect_uri,S=t.post_logout_redirect_uri,b=t.prompt,w=t.display,F=t.max_age,E=t.ui_locales,x=t.acr_values,k=t.resource,A=t.response_mode,P=t.filterProtocolClaims,I=void 0===P||P,C=t.loadUserInfo,R=void 0===C||C,B=t.staleStateAge,T=void 0===B?h:B,M=t.clockSkew,O=void 0===M?l:M,U=t.userInfoJwtIssuer,N=void 0===U?"OP":U,L=t.stateStore,D=void 0===L?new s.WebStorageStateStore:L,j=t.ResponseValidatorCtor,H=void 0===j?a.ResponseValidator:j,K=t.MetadataServiceCtor,V=void 0===K?u.MetadataService:K,q=t.extraQueryParams,W=void 0===q?{}:q;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,OidcClientSettings),this._authority=e,this._metadataUrl=r,this._metadata=i,this._signingKeys=o,this._client_id=p,this._client_secret=g,this._response_type=v,this._scope=m,this._redirect_uri=_,this._post_logout_redirect_uri=S,this._prompt=b,this._display=w,this._max_age=F,this._ui_locales=E,this._acr_values=x,this._resource=k,this._response_mode=A,this._filterProtocolClaims=!!I,this._loadUserInfo=!!R,this._staleStateAge=T,this._clockSkew=O,this._userInfoJwtIssuer=N,this._stateStore=D,this._validator=new H(this),this._metadataService=new V(this),this._extraQueryParams="object"===(void 0===W?"undefined":n(W))?W:{}}return i(OidcClientSettings,[{key:"client_id",get:function get(){return this._client_id},set:function set(t){if(this._client_id)throw o.Log.error("OidcClientSettings.set_client_id: client_id has already been assigned."),new Error("client_id has already been assigned.");this._client_id=t}},{key:"client_secret",get:function get(){return this._client_secret}},{key:"response_type",get:function get(){return this._response_type}},{key:"scope",get:function get(){return this._scope}},{key:"redirect_uri",get:function get(){return this._redirect_uri}},{key:"post_logout_redirect_uri",get:function get(){return this._post_logout_redirect_uri}},{key:"prompt",get:function get(){return this._prompt}},{key:"display",get:function get(){return this._display}},{key:"max_age",get:function get(){return this._max_age}},{key:"ui_locales",get:function get(){return this._ui_locales}},{key:"acr_values",get:function get(){return this._acr_values}},{key:"resource",get:function get(){return this._resource}},{key:"response_mode",get:function get(){return this._response_mode}},{key:"authority",get:function get(){return this._authority},set:function set(t){if(this._authority)throw o.Log.error("OidcClientSettings.set_authority: authority has already been assigned."),new Error("authority has already been assigned.");this._authority=t}},{key:"metadataUrl",get:function get(){return this._metadataUrl||(this._metadataUrl=this.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration")),this._metadataUrl}},{key:"metadata",get:function get(){return this._metadata},set:function set(t){this._metadata=t}},{key:"signingKeys",get:function get(){return this._signingKeys},set:function set(t){this._signingKeys=t}},{key:"filterProtocolClaims",get:function get(){return this._filterProtocolClaims}},{key:"loadUserInfo",get:function get(){return this._loadUserInfo}},{key:"staleStateAge",get:function get(){return this._staleStateAge}},{key:"clockSkew",get:function get(){return this._clockSkew}},{key:"userInfoJwtIssuer",get:function get(){return this._userInfoJwtIssuer}},{key:"stateStore",get:function get(){return this._stateStore}},{key:"validator",get:function get(){return this._validator}},{key:"metadataService",get:function get(){return this._metadataService}},{key:"extraQueryParams",get:function get(){return this._extraQueryParams},set:function set(t){"object"===(void 0===t?"undefined":n(t))?this._extraQueryParams=t:this._extraQueryParams={}}}]),OidcClientSettings}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WebStorageStateStore=void 0;var n=r(3),i=r(44);e.WebStorageStateStore=function(){function WebStorageStateStore(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.prefix,r=void 0===e?"oidc.":e,n=t.store,o=void 0===n?i.Global.localStorage:n;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,WebStorageStateStore),this._store=o,this._prefix=r}return WebStorageStateStore.prototype.set=function set(t,e){return n.Log.debug("WebStorageStateStore.set",t),t=this._prefix+t,this._store.setItem(t,e),Promise.resolve()},WebStorageStateStore.prototype.get=function get(t){n.Log.debug("WebStorageStateStore.get",t),t=this._prefix+t;var e=this._store.getItem(t);return Promise.resolve(e)},WebStorageStateStore.prototype.remove=function remove(t){n.Log.debug("WebStorageStateStore.remove",t),t=this._prefix+t;var e=this._store.getItem(t);return this._store.removeItem(t),Promise.resolve(e)},WebStorageStateStore.prototype.getAllKeys=function getAllKeys(){n.Log.debug("WebStorageStateStore.getAllKeys");for(var t=[],e=0;e0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,JsonService),t&&Array.isArray(t)?this._contentTypes=t.slice():this._contentTypes=[],this._contentTypes.push("application/json"),r&&this._contentTypes.push("application/jwt"),this._XMLHttpRequest=e,this._jwtHandler=r}return JsonService.prototype.getJson=function getJson(t,e){var r=this;if(!t)throw n.Log.error("JsonService.getJson: No url passed"),new Error("url");return n.Log.debug("JsonService.getJson, url: ",t),new Promise(function(i,o){var s=new r._XMLHttpRequest;s.open("GET",t);var a=r._contentTypes,u=r._jwtHandler;s.onload=function(){if(n.Log.debug("JsonService.getJson: HTTP response received, status",s.status),200===s.status){var e=s.getResponseHeader("Content-Type");if(e){var r=a.find(function(t){if(e.startsWith(t))return!0});if("application/jwt"==r)return void u(s).then(i,o);if(r)try{return void i(JSON.parse(s.responseText))}catch(t){return n.Log.error("JsonService.getJson: Error parsing JSON response",t.message),void o(t)}}o(Error("Invalid response Content-Type: "+e+", from URL: "+t))}else o(Error(s.statusText+" ("+s.status+")"))},s.onerror=function(){n.Log.error("JsonService.getJson: network error"),o(Error("Network Error"))},e&&(n.Log.debug("JsonService.getJson: token passed, setting Authorization header"),s.setRequestHeader("Authorization","Bearer "+e)),s.send()})},JsonService.prototype.postForm=function postForm(t,e){var r=this;if(!t)throw n.Log.error("JsonService.postForm: No url passed"),new Error("url");return n.Log.debug("JsonService.postForm, url: ",t),new Promise(function(i,o){var s=new r._XMLHttpRequest;s.open("POST",t);var a=r._contentTypes;s.onload=function(){if(n.Log.debug("JsonService.postForm: HTTP response received, status",s.status),200!==s.status){if(400===s.status)if(r=s.getResponseHeader("Content-Type"))if(a.find(function(t){if(r.startsWith(t))return!0}))try{var e=JSON.parse(s.responseText);if(e&&e.error)return n.Log.error("JsonService.postForm: Error from server: ",e.error),void o(new Error(e.error))}catch(t){return n.Log.error("JsonService.postForm: Error parsing JSON response",t.message),void o(t)}o(Error(s.statusText+" ("+s.status+")"))}else{var r;if((r=s.getResponseHeader("Content-Type"))&&a.find(function(t){if(r.startsWith(t))return!0}))try{return void i(JSON.parse(s.responseText))}catch(t){return n.Log.error("JsonService.postForm: Error parsing JSON response",t.message),void o(t)}o(Error("Invalid response Content-Type: "+r+", from URL: "+t))}},s.onerror=function(){n.Log.error("JsonService.postForm: network error"),o(Error("Network Error"))};var u="";for(var c in e){var f=e[c];f&&(u.length>0&&(u+="&"),u+=encodeURIComponent(c),u+="=",u+=encodeURIComponent(f))}s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(u)})},JsonService}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.State=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=t.id,r=t.data,n=t.created,i=t.request_type;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,State),this._id=e||(0,o.default)(),this._data=r,this._created="number"==typeof n&&n>0?n:parseInt(Date.now()/1e3),this._request_type=i}return State.prototype.toStorageString=function toStorageString(){return i.Log.debug("State.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type})},State.fromStorageString=function fromStorageString(t){return i.Log.debug("State.fromStorageString"),new State(JSON.parse(t))},State.clearStaleState=function clearStaleState(t,e){var r=Date.now()/1e3-e;return t.getAllKeys().then(function(e){i.Log.debug("State.clearStaleState: got keys",e);for(var n=[],o=function _loop(o){var s=e[o];a=t.get(s).then(function(e){var n=!1;if(e)try{var o=State.fromStorageString(e);i.Log.debug("State.clearStaleState: got item from key: ",s,o.created),o.created<=r&&(n=!0)}catch(t){i.Log.error("State.clearStaleState: Error parsing state for key",s,t.message),n=!0}else i.Log.debug("State.clearStaleState: no item in storage for key: ",s),n=!0;if(n)return i.Log.debug("State.clearStaleState: removed item for key: ",s),t.remove(s)}),n.push(a)},s=0;su;)n(a,r=e[u++])&&(~o(c,r)||c.push(r));return c}},function(t,e,r){var n=r(9),i=r(1),o=r(35);t.exports=r(8)?Object.defineProperties:function defineProperties(t,e){i(t);for(var r,s=o(e),a=s.length,u=0;a>u;)n.f(t,r=s[u++],e[r]);return t}},function(t,e,r){var n=r(16),i=r(38).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function getOwnPropertyNames(t){return s&&"[object Window]"==o.call(t)?function(t){try{return i(t)}catch(t){return s.slice()}}(t):i(n(t))}},function(t,e,r){"use strict";var n=r(35),i=r(57),o=r(52),s=r(10),a=r(51),u=Object.assign;t.exports=!u||r(4)(function(){var t={},e={},r=Symbol(),n="abcdefghijklmnopqrst";return t[r]=7,n.split("").forEach(function(t){e[t]=t}),7!=u({},t)[r]||Object.keys(u({},e)).join("")!=n})?function assign(t,e){for(var r=s(t),u=arguments.length,c=1,f=i.f,h=o.f;u>c;)for(var l,p=a(arguments[c++]),g=f?n(p).concat(f(p)):n(p),d=g.length,v=0;d>v;)h.call(p,l=g[v++])&&(r[l]=p[l]);return r}:u},function(t,e){t.exports=Object.is||function is(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},function(t,e,r){"use strict";var n=r(11),i=r(5),o=r(111),s=[].slice,a={};t.exports=Function.bind||function bind(t){var e=n(this),r=s.call(arguments,1),u=function(){var n=r.concat(s.call(arguments));return this instanceof u?function(t,e,r){if(!(e in a)){for(var n=[],i=0;i>>0||(s.test(r)?16:10))}:n},function(t,e,r){var n=r(2).parseFloat,i=r(47).trim;t.exports=1/n(r(78)+"-0")!=-1/0?function parseFloat(t){var e=i(String(t),3),r=n(e);return 0===r&&"-"==e.charAt(0)?-0:r}:n},function(t,e,r){var n=r(21);t.exports=function(t,e){if("number"!=typeof t&&"Number"!=n(t))throw TypeError(e);return+t}},function(t,e,r){var n=r(5),i=Math.floor;t.exports=function isInteger(t){return!n(t)&&isFinite(t)&&i(t)===t}},function(t,e){t.exports=Math.log1p||function log1p(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},function(t,e,r){var n=r(81),i=Math.pow,o=i(2,-52),s=i(2,-23),a=i(2,127)*(2-s),u=i(2,-126);t.exports=Math.fround||function fround(t){var e,r,i=Math.abs(t),c=n(t);return ia||r!=r?c*(1/0):c*r}},function(t,e,r){var n=r(1);t.exports=function(t,e,r,i){try{return i?e(n(r)[0],r[1]):e(r)}catch(e){var o=t.return;throw void 0!==o&&n(o.call(t)),e}}},function(t,e,r){var n=r(11),i=r(10),o=r(51),s=r(7);t.exports=function(t,e,r,a,u){n(e);var c=i(t),f=o(c),h=s(c.length),l=u?h-1:0,p=u?-1:1;if(r<2)for(;;){if(l in f){a=f[l],l+=p;break}if(l+=p,u?l<0:h<=l)throw TypeError("Reduce of empty array with no initial value")}for(;u?l>=0:h>l;l+=p)l in f&&(a=e(a,f[l],l,c));return a}},function(t,e,r){"use strict";var n=r(10),i=r(36),o=r(7);t.exports=[].copyWithin||function copyWithin(t,e){var r=n(this),s=o(r.length),a=i(t,s),u=i(e,s),c=arguments.length>2?arguments[2]:void 0,f=Math.min((void 0===c?s:i(c,s))-u,s-a),h=1;for(u0;)u in r?r[a]=r[u]:delete r[a],a+=h,u+=h;return r}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,r){"use strict";var n=r(93);r(0)({target:"RegExp",proto:!0,forced:n!==/./.exec},{exec:n})},function(t,e,r){r(8)&&"g"!=/./g.flags&&r(9).f(RegExp.prototype,"flags",{configurable:!0,get:r(53)})},function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,e,r){var n=r(1),i=r(5),o=r(97);t.exports=function(t,e){if(n(t),i(e)&&e.constructor===t)return e;var r=o.f(t);return(0,r.resolve)(e),r.promise}},function(t,e,r){"use strict";var n=r(127),i=r(43);t.exports=r(65)("Map",function(t){return function Map(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function get(t){var e=n.getEntry(i(this,"Map"),t);return e&&e.v},set:function set(t,e){return n.def(i(this,"Map"),0===t?0:t,e)}},n,!0)},function(t,e,r){"use strict";var n=r(9).f,i=r(37),o=r(42),s=r(20),a=r(40),u=r(41),c=r(83),f=r(121),h=r(39),l=r(8),p=r(31).fastKey,g=r(43),d=l?"_s":"size",v=function(t,e){var r,n=p(e);if("F"!==n)return t._i[n];for(r=t._f;r;r=r.n)if(r.k==e)return r};t.exports={getConstructor:function(t,e,r,c){var f=t(function(t,n){a(t,f,e,"_i"),t._t=e,t._i=i(null),t._f=void 0,t._l=void 0,t[d]=0,void 0!=n&&u(n,r,t[c],t)});return o(f.prototype,{clear:function clear(){for(var t=g(this,e),r=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete r[n.i];t._f=t._l=void 0,t[d]=0},delete:function(t){var r=g(this,e),n=v(r,t);if(n){var i=n.n,o=n.p;delete r._i[n.i],n.r=!0,o&&(o.n=i),i&&(i.p=o),r._f==n&&(r._f=i),r._l==n&&(r._l=o),r[d]--}return!!n},forEach:function forEach(t){g(this,e);for(var r,n=s(t,arguments.length>1?arguments[1]:void 0,3);r=r?r.n:this._f;)for(n(r.v,r.k,this);r&&r.r;)r=r.p},has:function has(t){return!!v(g(this,e),t)}}),l&&n(f.prototype,"size",{get:function(){return g(this,e)[d]}}),f},def:function(t,e,r){var n,i,o=v(t,e);return o?o.v=r:(t._l=o={i:i=p(e,!0),k:e,v:r,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[d]++,"F"!==i&&(t._i[i]=o)),t},getEntry:v,setStrong:function(t,e,r){c(t,e,function(t,r){this._t=g(t,e),this._k=r,this._l=void 0},function(){for(var t=this._k,e=this._l;e&&e.r;)e=e.p;return this._t&&(this._l=e=e?e.n:this._t._f)?f(0,"keys"==t?e.k:"values"==t?e.v:[e.k,e.v]):(this._t=void 0,f(1))},r?"entries":"values",!r,!0),h(e)}}},function(t,e,r){"use strict";var n=r(127),i=r(43);t.exports=r(65)("Set",function(t){return function Set(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function add(t){return n.def(i(this,"Set"),t=0===t?0:t,t)}},n)},function(t,e,r){"use strict";var n,i=r(2),o=r(27)(0),s=r(13),a=r(31),u=r(108),c=r(130),f=r(5),h=r(43),l=r(43),p=!i.ActiveXObject&&"ActiveXObject"in i,g=a.getWeak,d=Object.isExtensible,v=c.ufstore,y=function(t){return function WeakMap(){return t(this,arguments.length>0?arguments[0]:void 0)}},m={get:function get(t){if(f(t)){var e=g(t);return!0===e?v(h(this,"WeakMap")).get(t):e?e[this._i]:void 0}},set:function set(t,e){return c.def(h(this,"WeakMap"),t,e)}},_=t.exports=r(65)("WeakMap",y,m,c,!0,!0);l&&p&&(u((n=c.getConstructor(y,"WeakMap")).prototype,m),a.NEED=!0,o(["delete","has","get","set"],function(t){var e=_.prototype,r=e[t];s(e,t,function(e,i){if(f(e)&&!d(e)){this._f||(this._f=new n);var o=this._f[t](e,i);return"set"==t?this:o}return r.call(this,e,i)})}))},function(t,e,r){"use strict";var n=r(42),i=r(31).getWeak,o=r(1),s=r(5),a=r(40),u=r(41),c=r(27),f=r(15),h=r(43),l=c(5),p=c(6),g=0,d=function(t){return t._l||(t._l=new v)},v=function(){this.a=[]},y=function(t,e){return l(t.a,function(t){return t[0]===e})};v.prototype={get:function(t){var e=y(this,t);if(e)return e[1]},has:function(t){return!!y(this,t)},set:function(t,e){var r=y(this,t);r?r[1]=e:this.a.push([t,e])},delete:function(t){var e=p(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,r,o){var c=t(function(t,n){a(t,c,e,"_i"),t._t=e,t._i=g++,t._l=void 0,void 0!=n&&u(n,r,t[o],t)});return n(c.prototype,{delete:function(t){if(!s(t))return!1;var r=i(t);return!0===r?d(h(this,e)).delete(t):r&&f(r,this._i)&&delete r[this._i]},has:function has(t){if(!s(t))return!1;var r=i(t);return!0===r?d(h(this,e)).has(t):r&&f(r,this._i)}}),c},def:function(t,e,r){var n=i(o(e),!0);return!0===n?d(t).set(e,r):n[t._i]=r,t},ufstore:d}},function(t,e,r){var n=r(22),i=r(7);t.exports=function(t){if(void 0===t)return 0;var e=n(t),r=i(e);if(e!==r)throw RangeError("Wrong length!");return r}},function(t,e,r){var n=r(38),i=r(57),o=r(1),s=r(2).Reflect;t.exports=s&&s.ownKeys||function ownKeys(t){var e=n.f(o(t)),r=i.f;return r?e.concat(r(t)):e}},function(t,e,r){"use strict";var n=r(58),i=r(5),o=r(7),s=r(20),a=r(6)("isConcatSpreadable");t.exports=function flattenIntoArray(t,e,r,u,c,f,h,l){for(var p,g,d=c,v=0,y=!!h&&s(h,l,3);v0)d=flattenIntoArray(t,e,p,o(p.length),d,f-1)-1;else{if(d>=9007199254740991)throw TypeError();t[d]=p}d++}v++}return d}},function(t,e,r){var n=r(7),i=r(80),o=r(25);t.exports=function(t,e,r,s){var a=String(o(t)),u=a.length,c=void 0===r?" ":String(r),f=n(e);if(f<=u||""==c)return a;var h=f-u,l=i.call(c,Math.ceil(h/c.length));return l.length>h&&(l=l.slice(0,h)),s?l+a:a+l}},function(t,e,r){var n=r(35),i=r(16),o=r(52).f;t.exports=function(t){return function(e){for(var r,s=i(e),a=n(s),u=a.length,c=0,f=[];u>c;)o.call(s,r=a[c++])&&f.push(t?[r,s[r]]:s[r]);return f}}},function(t,e,r){var n=r(46),i=r(137);t.exports=function(t){return function toJSON(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},function(t,e,r){var n=r(41);t.exports=function(t,e){var r=[];return n(t,!1,r.push,r,e),r}},function(t,e){t.exports=Math.scale||function scale(t,e,r,n,i){return 0===arguments.length||t!=t||e!=e||r!=r||n!=n||i!=i?NaN:t===1/0||t===-1/0?t:(t-e)*(i-n)/(r-e)+n}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OidcClient=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,OidcClient),t instanceof o.OidcClientSettings?this._settings=t:this._settings=new o.OidcClientSettings(t)}return OidcClient.prototype.createSigninRequest=function createSigninRequest(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.response_type,n=e.scope,o=e.redirect_uri,s=e.data,u=e.state,c=e.prompt,f=e.display,h=e.max_age,l=e.ui_locales,p=e.id_token_hint,g=e.login_hint,d=e.acr_values,v=e.resource,y=e.request,m=e.request_uri,_=e.response_mode,S=e.extraQueryParams,b=e.request_type,w=arguments[1];i.Log.debug("OidcClient.createSigninRequest");var F=this._settings.client_id;r=r||this._settings.response_type,n=n||this._settings.scope,o=o||this._settings.redirect_uri,c=c||this._settings.prompt,f=f||this._settings.display,h=h||this._settings.max_age,l=l||this._settings.ui_locales,d=d||this._settings.acr_values,v=v||this._settings.resource,_=_||this._settings.response_mode,S=S||this._settings.extraQueryParams;var E=this._settings.authority;return a.SigninRequest.isCode(r)&&"code"!==r?Promise.reject(new Error("OpenID Connect hybrid flow is not supported")):this._metadataService.getAuthorizationEndpoint().then(function(e){i.Log.debug("OidcClient.createSigninRequest: Received authorization endpoint",e);var x=new a.SigninRequest({url:e,client_id:F,redirect_uri:o,response_type:r,scope:n,data:s||u,authority:E,prompt:c,display:f,max_age:h,ui_locales:l,id_token_hint:p,login_hint:g,acr_values:d,resource:v,request:y,request_uri:m,extraQueryParams:S,request_type:b,response_mode:_}),k=x.state;return(w=w||t._stateStore).set(k.id,k.toStorageString()).then(function(){return x})})},OidcClient.prototype.readSigninResponseState=function readSigninResponseState(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSigninResponseState");var n="query"===this._settings.response_mode||!this._settings.response_mode&&a.SigninRequest.isCode(this._settings.response_type)?"?":"#",o=new u.SigninResponse(t,n);return o.state?(e=e||this._stateStore,(r?e.remove.bind(e):e.get.bind(e))(o.state).then(function(t){if(!t)throw i.Log.error("OidcClient.readSigninResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:h.SigninState.fromStorageString(t),response:o}})):(i.Log.error("OidcClient.readSigninResponseState: No state in response"),Promise.reject(new Error("No state in response")))},OidcClient.prototype.processSigninResponse=function processSigninResponse(t,e){var r=this;return i.Log.debug("OidcClient.processSigninResponse"),this.readSigninResponseState(t,e,!0).then(function(t){var e=t.state,n=t.response;return i.Log.debug("OidcClient.processSigninResponse: Received state from storage; validating response"),r._validator.validateSigninResponse(e,n)})},OidcClient.prototype.createSignoutRequest=function createSignoutRequest(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.id_token_hint,n=e.data,o=e.state,s=e.post_logout_redirect_uri,a=e.extraQueryParams,u=e.request_type,f=arguments[1];return i.Log.debug("OidcClient.createSignoutRequest"),s=s||this._settings.post_logout_redirect_uri,a=a||this._settings.extraQueryParams,this._metadataService.getEndSessionEndpoint().then(function(e){if(!e)throw i.Log.error("OidcClient.createSignoutRequest: No end session endpoint url returned"),new Error("no end session endpoint");i.Log.debug("OidcClient.createSignoutRequest: Received end session endpoint",e);var h=new c.SignoutRequest({url:e,id_token_hint:r,post_logout_redirect_uri:s,data:n||o,extraQueryParams:a,request_type:u}),l=h.state;return l&&(i.Log.debug("OidcClient.createSignoutRequest: Signout request has state to persist"),(f=f||t._stateStore).set(l.id,l.toStorageString())),h})},OidcClient.prototype.readSignoutResponseState=function readSignoutResponseState(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSignoutResponseState");var n=new f.SignoutResponse(t);if(!n.state)return i.Log.debug("OidcClient.readSignoutResponseState: No state in response"),n.error?(i.Log.warn("OidcClient.readSignoutResponseState: Response was error: ",n.error),Promise.reject(new s.ErrorResponse(n))):Promise.resolve({undefined:void 0,response:n});var o=n.state;return e=e||this._stateStore,(r?e.remove.bind(e):e.get.bind(e))(o).then(function(t){if(!t)throw i.Log.error("OidcClient.readSignoutResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:l.State.fromStorageString(t),response:n}})},OidcClient.prototype.processSignoutResponse=function processSignoutResponse(t,e){var r=this;return i.Log.debug("OidcClient.processSignoutResponse"),this.readSignoutResponseState(t,e,!0).then(function(t){var e=t.state,n=t.response;return i.Log.debug("OidcClient.processSignoutResponse: Received state from storage; validating response"),r._validator.validateSignoutResponse(e,n)})},OidcClient.prototype.clearStaleState=function clearStaleState(t){return i.Log.debug("OidcClient.clearStaleState"),t=t||this._stateStore,l.State.clearStaleState(t,this.settings.staleStateAge)},n(OidcClient,[{key:"_stateStore",get:function get(){return this.settings.stateStore}},{key:"_validator",get:function get(){return this.settings.validator}},{key:"_metadataService",get:function get(){return this.settings.metadataService}},{key:"settings",get:function get(){return this._settings}},{key:"metadataService",get:function get(){return this._metadataService}}]),OidcClient}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenClient=void 0;var n=r(101),i=r(49),o=r(3);e.TokenClient=function(){function TokenClient(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,TokenClient),!t)throw o.Log.error("TokenClient.ctor: No settings passed"),new Error("settings");this._settings=t,this._jsonService=new e,this._metadataService=new r(this._settings)}return TokenClient.prototype.exchangeCode=function exchangeCode(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.grant_type=e.grant_type||"authorization_code",e.client_id=e.client_id||this._settings.client_id,e.redirect_uri=e.redirect_uri||this._settings.redirect_uri,e.code?e.redirect_uri?e.code_verifier?e.client_id?this._metadataService.getTokenEndpoint(!1).then(function(r){return o.Log.debug("TokenClient.exchangeCode: Received token endpoint"),t._jsonService.postForm(r,e).then(function(t){return o.Log.debug("TokenClient.exchangeCode: response received"),t})}):(o.Log.error("TokenClient.exchangeCode: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeCode: No code_verifier passed"),Promise.reject(new Error("A code_verifier is required"))):(o.Log.error("TokenClient.exchangeCode: No redirect_uri passed"),Promise.reject(new Error("A redirect_uri is required"))):(o.Log.error("TokenClient.exchangeCode: No code passed"),Promise.reject(new Error("A code is required")))},TokenClient.prototype.exchangeRefreshToken=function exchangeRefreshToken(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.grant_type=e.grant_type||"refresh_token",e.client_id=e.client_id||this._settings.client_id,e.client_secret=e.client_secret||this._settings.client_secret,e.refresh_token?e.client_id?this._metadataService.getTokenEndpoint(!1).then(function(r){return o.Log.debug("TokenClient.exchangeRefreshToken: Received token endpoint"),t._jsonService.postForm(r,e).then(function(t){return o.Log.debug("TokenClient.exchangeRefreshToken: response received"),t})}):(o.Log.error("TokenClient.exchangeRefreshToken: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeRefreshToken: No refresh_token passed"),Promise.reject(new Error("A refresh_token is required")))},TokenClient}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ErrorResponse=void 0;var n=r(3);e.ErrorResponse=function(t){function ErrorResponse(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.error,i=e.error_description,o=e.error_uri,s=e.state;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,ErrorResponse),!r)throw n.Log.error("No error passed to ErrorResponse"),new Error("error");var a=function _possibleConstructorReturn(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,i||r));return a.name="ErrorResponse",a.error=r,a.error_description=i,a.error_uri=o,a.state=s,a}return function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(ErrorResponse,t),ErrorResponse}(Error)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninRequest=void 0;var n=r(3),i=r(55),o=r(143);e.SigninRequest=function(){function SigninRequest(t){var e=t.url,r=t.client_id,s=t.redirect_uri,a=t.response_type,u=t.scope,c=t.authority,f=t.data,h=t.prompt,l=t.display,p=t.max_age,g=t.ui_locales,d=t.id_token_hint,v=t.login_hint,y=t.acr_values,m=t.resource,_=t.response_mode,S=t.request,b=t.request_uri,w=t.extraQueryParams,F=t.request_type;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,SigninRequest),!e)throw n.Log.error("SigninRequest.ctor: No url passed"),new Error("url");if(!r)throw n.Log.error("SigninRequest.ctor: No client_id passed"),new Error("client_id");if(!s)throw n.Log.error("SigninRequest.ctor: No redirect_uri passed"),new Error("redirect_uri");if(!a)throw n.Log.error("SigninRequest.ctor: No response_type passed"),new Error("response_type");if(!u)throw n.Log.error("SigninRequest.ctor: No scope passed"),new Error("scope");if(!c)throw n.Log.error("SigninRequest.ctor: No authority passed"),new Error("authority");var E=SigninRequest.isOidc(a),x=SigninRequest.isCode(a);_||(_=SigninRequest.isCode(a)?"query":null),this.state=new o.SigninState({nonce:E,data:f,client_id:r,authority:c,redirect_uri:s,code_verifier:x,request_type:F,response_mode:_}),e=i.UrlUtility.addQueryParam(e,"client_id",r),e=i.UrlUtility.addQueryParam(e,"redirect_uri",s),e=i.UrlUtility.addQueryParam(e,"response_type",a),e=i.UrlUtility.addQueryParam(e,"scope",u),e=i.UrlUtility.addQueryParam(e,"state",this.state.id),E&&(e=i.UrlUtility.addQueryParam(e,"nonce",this.state.nonce)),x&&(e=i.UrlUtility.addQueryParam(e,"code_challenge",this.state.code_challenge),e=i.UrlUtility.addQueryParam(e,"code_challenge_method","S256"));var k={prompt:h,display:l,max_age:p,ui_locales:g,id_token_hint:d,login_hint:v,acr_values:y,resource:m,request:S,request_uri:b,response_mode:_};for(var A in k)k[A]&&(e=i.UrlUtility.addQueryParam(e,A,k[A]));for(var P in w)e=i.UrlUtility.addQueryParam(e,P,w[P]);this.url=e}return SigninRequest.isOidc=function isOidc(t){return!!t.split(/\s+/g).filter(function(t){return"id_token"===t})[0]},SigninRequest.isOAuth=function isOAuth(t){return!!t.split(/\s+/g).filter(function(t){return"token"===t})[0]},SigninRequest.isCode=function isCode(t){return!!t.split(/\s+/g).filter(function(t){return"code"===t})[0]},SigninRequest}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninState=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.nonce,n=e.authority,i=e.client_id,o=e.redirect_uri,u=e.code_verifier,c=e.response_mode;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,SigninState);var f=function _possibleConstructorReturn(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,arguments[0]));if(!0===r?f._nonce=(0,a.default)():r&&(f._nonce=r),!0===u?f._code_verifier=(0,a.default)()+(0,a.default)()+(0,a.default)():u&&(f._code_verifier=u),f.code_verifier){var h=s.JoseUtil.hashString(f.code_verifier,"SHA256");f._code_challenge=s.JoseUtil.hexToBase64Url(h)}return f._redirect_uri=o,f._authority=n,f._client_id=i,f._response_mode=c,f}return function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(SigninState,t),SigninState.prototype.toStorageString=function toStorageString(){return i.Log.debug("SigninState.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type,nonce:this.nonce,code_verifier:this.code_verifier,redirect_uri:this.redirect_uri,authority:this.authority,client_id:this.client_id,response_mode:this.response_mode})},SigninState.fromStorageString=function fromStorageString(t){return i.Log.debug("SigninState.fromStorageString"),new SigninState(JSON.parse(t))},n(SigninState,[{key:"nonce",get:function get(){return this._nonce}},{key:"authority",get:function get(){return this._authority}},{key:"client_id",get:function get(){return this._client_id}},{key:"redirect_uri",get:function get(){return this._redirect_uri}},{key:"code_verifier",get:function get(){return this._code_verifier}},{key:"code_challenge",get:function get(){return this._code_challenge}},{key:"response_mode",get:function get(){return this._response_mode}}]),SigninState}(o.State)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function random(){return(0,n.default)().replace(/-/g,"")};var n=function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}(r(365));t.exports=e.default},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.User=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r0){var r=parseInt(Date.now()/1e3);this.expires_at=r+e}}},{key:"expired",get:function get(){var t=this.expires_in;if(void 0!==t)return t<=0}},{key:"scopes",get:function get(){return(this.scope||"").split(" ")}}]),User}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AccessTokenEvents=void 0;var n=r(3),i=r(380);var o=60;e.AccessTokenEvents=function(){function AccessTokenEvents(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.accessTokenExpiringNotificationTime,r=void 0===e?o:e,n=t.accessTokenExpiringTimer,s=void 0===n?new i.Timer("Access token expiring"):n,a=t.accessTokenExpiredTimer,u=void 0===a?new i.Timer("Access token expired"):a;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,AccessTokenEvents),this._accessTokenExpiringNotificationTime=r,this._accessTokenExpiring=s,this._accessTokenExpired=u}return AccessTokenEvents.prototype.load=function load(t){if(t.access_token&&void 0!==t.expires_in){var e=t.expires_in;if(n.Log.debug("AccessTokenEvents.load: access token present, remaining duration:",e),e>0){var r=e-this._accessTokenExpiringNotificationTime;r<=0&&(r=1),n.Log.debug("AccessTokenEvents.load: registering expiring timer in:",r),this._accessTokenExpiring.init(r)}else n.Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration."),this._accessTokenExpiring.cancel();var i=e+1;n.Log.debug("AccessTokenEvents.load: registering expired timer in:",i),this._accessTokenExpired.init(i)}else this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},AccessTokenEvents.prototype.unload=function unload(){n.Log.debug("AccessTokenEvents.unload: canceling existing access token timers"),this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},AccessTokenEvents.prototype.addAccessTokenExpiring=function addAccessTokenExpiring(t){this._accessTokenExpiring.addHandler(t)},AccessTokenEvents.prototype.removeAccessTokenExpiring=function removeAccessTokenExpiring(t){this._accessTokenExpiring.removeHandler(t)},AccessTokenEvents.prototype.addAccessTokenExpired=function addAccessTokenExpired(t){this._accessTokenExpired.addHandler(t)},AccessTokenEvents.prototype.removeAccessTokenExpired=function removeAccessTokenExpired(t){this._accessTokenExpired.removeHandler(t)},AccessTokenEvents}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Event=void 0;var n=r(3);e.Event=function(){function Event(t){!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,Event),this._name=t,this._callbacks=[]}return Event.prototype.addHandler=function addHandler(t){this._callbacks.push(t)},Event.prototype.removeHandler=function removeHandler(t){var e=this._callbacks.findIndex(function(e){return e===t});e>=0&&this._callbacks.splice(e,1)},Event.prototype.raise=function raise(){n.Log.debug("Event: Raising event: "+this._name);for(var t=0;t1&&void 0!==arguments[1]?arguments[1]:o.CheckSessionIFrame;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,SessionMonitor),!t)throw i.Log.error("SessionMonitor.ctor: No user manager passed to SessionMonitor"),new Error("userManager");this._userManager=t,this._CheckSessionIFrameCtor=r,this._userManager.events.addUserLoaded(this._start.bind(this)),this._userManager.events.addUserUnloaded(this._stop.bind(this)),this._userManager.getUser().then(function(t){t&&e._start(t)}).catch(function(t){i.Log.error("SessionMonitor ctor: error from getUser:",t.message)})}return SessionMonitor.prototype._start=function _start(t){var e=this,r=t.session_state;r&&(this._sub=t.profile.sub,this._sid=t.profile.sid,i.Log.debug("SessionMonitor._start: session_state:",r,", sub:",this._sub),this._checkSessionIFrame?this._checkSessionIFrame.start(r):this._metadataService.getCheckSessionIframe().then(function(t){if(t){i.Log.debug("SessionMonitor._start: Initializing check session iframe");var n=e._client_id,o=e._checkSessionInterval,s=e._stopCheckSessionOnError;e._checkSessionIFrame=new e._CheckSessionIFrameCtor(e._callback.bind(e),n,t,o,s),e._checkSessionIFrame.load().then(function(){e._checkSessionIFrame.start(r)})}else i.Log.warn("SessionMonitor._start: No check session iframe found in the metadata")}).catch(function(t){i.Log.error("SessionMonitor._start: Error from getCheckSessionIframe:",t.message)}))},SessionMonitor.prototype._stop=function _stop(){this._sub=null,this._sid=null,this._checkSessionIFrame&&(i.Log.debug("SessionMonitor._stop"),this._checkSessionIFrame.stop())},SessionMonitor.prototype._callback=function _callback(){var t=this;this._userManager.querySessionStatus().then(function(e){var r=!0;e?e.sub===t._sub?(r=!1,t._checkSessionIFrame.start(e.session_state),e.sid===t._sid?i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:",e.session_state):(i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:",e.session_state),t._userManager.events._raiseUserSessionChanged())):i.Log.debug("SessionMonitor._callback: Different subject signed into OP:",e.sub):i.Log.debug("SessionMonitor._callback: Subject no longer signed into OP"),r&&(i.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed out event"),t._userManager.events._raiseUserSignedOut())}).catch(function(e){i.Log.debug("SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event",e.message),t._userManager.events._raiseUserSignedOut()})},n(SessionMonitor,[{key:"_settings",get:function get(){return this._userManager.settings}},{key:"_metadataService",get:function get(){return this._userManager.metadataService}},{key:"_client_id",get:function get(){return this._settings.client_id}},{key:"_checkSessionInterval",get:function get(){return this._settings.checkSessionInterval}},{key:"_stopCheckSessionOnError",get:function get(){return this._settings.stopCheckSessionOnError}}]),SessionMonitor}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CheckSessionIFrame=void 0;var n=r(3);var i=2e3;e.CheckSessionIFrame=function(){function CheckSessionIFrame(t,e,r,n){var o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,CheckSessionIFrame),this._callback=t,this._client_id=e,this._url=r,this._interval=n||i,this._stopOnError=o;var s=r.indexOf("/",r.indexOf("//")+2);this._frame_origin=r.substr(0,s),this._frame=window.document.createElement("iframe"),this._frame.style.visibility="hidden",this._frame.style.position="absolute",this._frame.style.display="none",this._frame.style.width=0,this._frame.style.height=0,this._frame.src=r}return CheckSessionIFrame.prototype.load=function load(){var t=this;return new Promise(function(e){t._frame.onload=function(){e()},window.document.body.appendChild(t._frame),t._boundMessageEvent=t._message.bind(t),window.addEventListener("message",t._boundMessageEvent,!1)})},CheckSessionIFrame.prototype._message=function _message(t){t.origin===this._frame_origin&&t.source===this._frame.contentWindow&&("error"===t.data?(n.Log.error("CheckSessionIFrame: error message from check session op iframe"),this._stopOnError&&this.stop()):"changed"===t.data?(n.Log.debug("CheckSessionIFrame: changed message from check session op iframe"),this.stop(),this._callback()):n.Log.debug("CheckSessionIFrame: "+t.data+" message from check session op iframe"))},CheckSessionIFrame.prototype.start=function start(t){var e=this;if(this._session_state!==t){n.Log.debug("CheckSessionIFrame.start"),this.stop(),this._session_state=t;var r=function send(){e._frame.contentWindow.postMessage(e._client_id+" "+e._session_state,e._frame_origin)};r(),this._timer=window.setInterval(r,this._interval)}},CheckSessionIFrame.prototype.stop=function stop(){this._session_state=null,this._timer&&(n.Log.debug("CheckSessionIFrame.stop"),window.clearInterval(this._timer),this._timer=null)},CheckSessionIFrame}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenRevocationClient=void 0;var n=r(3),i=r(49),o=r(44);e.TokenRevocationClient=function(){function TokenRevocationClient(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.Global.XMLHttpRequest,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,TokenRevocationClient),!t)throw n.Log.error("TokenRevocationClient.ctor: No settings provided"),new Error("No settings provided.");this._settings=t,this._XMLHttpRequestCtor=e,this._metadataService=new r(this._settings)}return TokenRevocationClient.prototype.revoke=function revoke(t,e){var r=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"access_token";if(!t)throw n.Log.error("TokenRevocationClient.revoke: No token provided"),new Error("No token provided.");if("access_token"!==i&&"refresh_token"!=i)throw n.Log.error("TokenRevocationClient.revoke: Invalid token type"),new Error("Invalid token type.");return this._metadataService.getRevocationEndpoint().then(function(o){if(o){n.Log.debug("TokenRevocationClient.revoke: Revoking "+i);var s=r._settings.client_id,a=r._settings.client_secret;return r._revoke(o,s,a,t,i)}if(e)throw n.Log.error("TokenRevocationClient.revoke: Revocation not supported"),new Error("Revocation not supported")})},TokenRevocationClient.prototype._revoke=function _revoke(t,e,r,i,o){var s=this;return new Promise(function(a,u){var c=new s._XMLHttpRequestCtor;c.open("POST",t),c.onload=function(){n.Log.debug("TokenRevocationClient.revoke: HTTP response received, status",c.status),200===c.status?a():u(Error(c.statusText+" ("+c.status+")"))},c.onerror=function(){n.Log.debug("TokenRevocationClient.revoke: Network Error."),u("Network Error")};var f="client_id="+encodeURIComponent(e);r&&(f+="&client_secret="+encodeURIComponent(r)),f+="&token_type_hint="+encodeURIComponent(o),f+="&token="+encodeURIComponent(i),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.send(f)})},TokenRevocationClient}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CordovaPopupWindow=void 0;var n=function(){function defineProperties(t,e){for(var r=0;ri;)z(t,r=n[i++],e[r]);return t},Y=function propertyIsEnumerable(t){var e=U.call(this,t=b(t,!0));return!(this===j&&i(L,t)&&!i(D,t))&&(!(e||!i(this,t)||!i(L,t)||i(this,M)&&this[M][t])||e)},X=function getOwnPropertyDescriptor(t,e){if(t=S(t),e=b(e,!0),t!==j||!i(L,e)||i(D,e)){var r=P(t,e);return!r||!i(L,e)||i(t,M)&&t[M][e]||(r.enumerable=!0),r}},$=function getOwnPropertyNames(t){for(var e,r=C(S(t)),n=[],o=0;r.length>o;)i(L,e=r[o++])||e==M||e==u||n.push(e);return n},Q=function getOwnPropertySymbols(t){for(var e,r=t===j,n=C(r?D:S(t)),o=[],s=0;n.length>s;)!i(L,e=n[s++])||r&&!i(j,e)||o.push(L[e]);return o};H||(a((R=function Symbol(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var t=l(arguments.length>0?arguments[0]:void 0),e=function(r){this===j&&e.call(D,r),i(this,M)&&i(this[M],t)&&(this[M][t]=!1),q(this,t,w(1,r))};return o&&V&&q(j,t,{configurable:!0,set:e}),W(t)}).prototype,"toString",function toString(){return this._k}),x.f=X,k.f=z,r(38).f=E.f=$,r(52).f=Y,r(57).f=Q,o&&!r(30)&&a(j,"propertyIsEnumerable",Y,!0),g.f=function(t){return W(p(t))}),s(s.G+s.W+s.F*!H,{Symbol:R});for(var Z="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;Z.length>tt;)p(Z[tt++]);for(var et=A(p.store),rt=0;et.length>rt;)d(et[rt++]);s(s.S+s.F*!H,"Symbol",{for:function(t){return i(N,t+="")?N[t]:N[t]=R(t)},keyFor:function keyFor(t){if(!J(t))throw TypeError(t+" is not a symbol!");for(var e in N)if(N[e]===t)return e},useSetter:function(){V=!0},useSimple:function(){V=!1}}),s(s.S+s.F*!H,"Object",{create:function create(t,e){return void 0===e?F(t):G(F(t),e)},defineProperty:z,defineProperties:G,getOwnPropertyDescriptor:X,getOwnPropertyNames:$,getOwnPropertySymbols:Q}),B&&s(s.S+s.F*(!H||c(function(){var t=R();return"[null]"!=T([t])||"{}"!=T({a:t})||"{}"!=T(Object(t))})),"JSON",{stringify:function stringify(t){for(var e,r,n=[t],i=1;arguments.length>i;)n.push(arguments[i++]);if(r=e=n[1],(_(e)||void 0!==t)&&!J(t))return y(e)||(e=function(t,e){if("function"==typeof r&&(e=r.call(this,t,e)),!J(e))return e}),n[1]=e,T.apply(B,n)}}),R.prototype[O]||r(12)(R.prototype,O,R.prototype.valueOf),h(R,"Symbol"),h(Math,"Math",!0),h(n.JSON,"JSON",!0)},function(t,e,r){t.exports=r(50)("native-function-to-string",Function.toString)},function(t,e,r){var n=r(35),i=r(57),o=r(52);t.exports=function(t){var e=n(t),r=i.f;if(r)for(var s,a=r(t),u=o.f,c=0;a.length>c;)u.call(t,s=a[c++])&&e.push(s);return e}},function(t,e,r){var n=r(0);n(n.S,"Object",{create:r(37)})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperty:r(9).f})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperties:r(106)})},function(t,e,r){var n=r(16),i=r(17).f;r(26)("getOwnPropertyDescriptor",function(){return function getOwnPropertyDescriptor(t,e){return i(n(t),e)}})},function(t,e,r){var n=r(10),i=r(18);r(26)("getPrototypeOf",function(){return function getPrototypeOf(t){return i(n(t))}})},function(t,e,r){var n=r(10),i=r(35);r(26)("keys",function(){return function keys(t){return i(n(t))}})},function(t,e,r){r(26)("getOwnPropertyNames",function(){return r(107).f})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("freeze",function(t){return function freeze(e){return t&&n(e)?t(i(e)):e}})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("seal",function(t){return function seal(e){return t&&n(e)?t(i(e)):e}})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("preventExtensions",function(t){return function preventExtensions(e){return t&&n(e)?t(i(e)):e}})},function(t,e,r){var n=r(5);r(26)("isFrozen",function(t){return function isFrozen(e){return!n(e)||!!t&&t(e)}})},function(t,e,r){var n=r(5);r(26)("isSealed",function(t){return function isSealed(e){return!n(e)||!!t&&t(e)}})},function(t,e,r){var n=r(5);r(26)("isExtensible",function(t){return function isExtensible(e){return!!n(e)&&(!t||t(e))}})},function(t,e,r){var n=r(0);n(n.S+n.F,"Object",{assign:r(108)})},function(t,e,r){var n=r(0);n(n.S,"Object",{is:r(109)})},function(t,e,r){var n=r(0);n(n.S,"Object",{setPrototypeOf:r(77).set})},function(t,e,r){"use strict";var n=r(46),i={};i[r(6)("toStringTag")]="z",i+""!="[object z]"&&r(13)(Object.prototype,"toString",function toString(){return"[object "+n(this)+"]"},!0)},function(t,e,r){var n=r(0);n(n.P,"Function",{bind:r(110)})},function(t,e,r){var n=r(9).f,i=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in i||r(8)&&n(i,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},function(t,e,r){"use strict";var n=r(5),i=r(18),o=r(6)("hasInstance"),s=Function.prototype;o in s||r(9).f(s,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},function(t,e,r){var n=r(0),i=r(112);n(n.G+n.F*(parseInt!=i),{parseInt:i})},function(t,e,r){var n=r(0),i=r(113);n(n.G+n.F*(parseFloat!=i),{parseFloat:i})},function(t,e,r){"use strict";var n=r(2),i=r(15),o=r(21),s=r(79),a=r(24),u=r(4),c=r(38).f,f=r(17).f,h=r(9).f,l=r(47).trim,p=n.Number,g=p,d=p.prototype,v="Number"==o(r(37)(d)),y="trim"in String.prototype,m=function(t){var e=a(t,!1);if("string"==typeof e&&e.length>2){var r,n,i,o=(e=y?e.trim():l(e,3)).charCodeAt(0);if(43===o||45===o){if(88===(r=e.charCodeAt(2))||120===r)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+e}for(var s,u=e.slice(2),c=0,f=u.length;ci)return NaN;return parseInt(u,n)}}return+e};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function Number(t){var e=arguments.length<1?0:t,r=this;return r instanceof p&&(v?u(function(){d.valueOf.call(r)}):"Number"!=o(r))?s(new g(m(e)),r,p):m(e)};for(var _,S=r(8)?c(g):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),b=0;S.length>b;b++)i(g,_=S[b])&&!i(p,_)&&h(p,_,f(g,_));p.prototype=d,d.constructor=p,r(13)(n,"Number",p)}},function(t,e,r){"use strict";var n=r(0),i=r(22),o=r(114),s=r(80),a=1..toFixed,u=Math.floor,c=[0,0,0,0,0,0],f="Number.toFixed: incorrect invocation!",h=function(t,e){for(var r=-1,n=e;++r<6;)n+=t*c[r],c[r]=n%1e7,n=u(n/1e7)},l=function(t){for(var e=6,r=0;--e>=0;)r+=c[e],c[e]=u(r/t),r=r%t*1e7},p=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==c[t]){var r=String(c[t]);e=""===e?r:e+s.call("0",7-r.length)+r}return e},g=function(t,e,r){return 0===e?r:e%2==1?g(t,e-1,r*t):g(t*t,e/2,r)};n(n.P+n.F*(!!a&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(4)(function(){a.call({})})),"Number",{toFixed:function toFixed(t){var e,r,n,a,u=o(this,f),c=i(t),d="",v="0";if(c<0||c>20)throw RangeError(f);if(u!=u)return"NaN";if(u<=-1e21||u>=1e21)return String(u);if(u<0&&(d="-",u=-u),u>1e-21)if(r=(e=function(t){for(var e=0,r=t;r>=4096;)e+=12,r/=4096;for(;r>=2;)e+=1,r/=2;return e}(u*g(2,69,1))-69)<0?u*g(2,-e,1):u/g(2,e,1),r*=4503599627370496,(e=52-e)>0){for(h(0,r),n=c;n>=7;)h(1e7,0),n-=7;for(h(g(10,n,1),0),n=e-1;n>=23;)l(1<<23),n-=23;l(1<0?d+((a=v.length)<=c?"0."+s.call("0",c-a)+v:v.slice(0,a-c)+"."+v.slice(a-c)):d+v}})},function(t,e,r){"use strict";var n=r(0),i=r(4),o=r(114),s=1..toPrecision;n(n.P+n.F*(i(function(){return"1"!==s.call(1,void 0)})||!i(function(){s.call({})})),"Number",{toPrecision:function toPrecision(t){var e=o(this,"Number#toPrecision: incorrect invocation!");return void 0===t?s.call(e):s.call(e,t)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{EPSILON:Math.pow(2,-52)})},function(t,e,r){var n=r(0),i=r(2).isFinite;n(n.S,"Number",{isFinite:function isFinite(t){return"number"==typeof t&&i(t)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{isInteger:r(115)})},function(t,e,r){var n=r(0);n(n.S,"Number",{isNaN:function isNaN(t){return t!=t}})},function(t,e,r){var n=r(0),i=r(115),o=Math.abs;n(n.S,"Number",{isSafeInteger:function isSafeInteger(t){return i(t)&&o(t)<=9007199254740991}})},function(t,e,r){var n=r(0);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,r){var n=r(0);n(n.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,r){var n=r(0),i=r(113);n(n.S+n.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},function(t,e,r){var n=r(0),i=r(112);n(n.S+n.F*(Number.parseInt!=i),"Number",{parseInt:i})},function(t,e,r){var n=r(0),i=r(116),o=Math.sqrt,s=Math.acosh;n(n.S+n.F*!(s&&710==Math.floor(s(Number.MAX_VALUE))&&s(1/0)==1/0),"Math",{acosh:function acosh(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},function(t,e,r){var n=r(0),i=Math.asinh;n(n.S+n.F*!(i&&1/i(0)>0),"Math",{asinh:function asinh(t){return isFinite(t=+t)&&0!=t?t<0?-asinh(-t):Math.log(t+Math.sqrt(t*t+1)):t}})},function(t,e,r){var n=r(0),i=Math.atanh;n(n.S+n.F*!(i&&1/i(-0)<0),"Math",{atanh:function atanh(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},function(t,e,r){var n=r(0),i=r(81);n(n.S,"Math",{cbrt:function cbrt(t){return i(t=+t)*Math.pow(Math.abs(t),1/3)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clz32:function clz32(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},function(t,e,r){var n=r(0),i=Math.exp;n(n.S,"Math",{cosh:function cosh(t){return(i(t=+t)+i(-t))/2}})},function(t,e,r){var n=r(0),i=r(82);n(n.S+n.F*(i!=Math.expm1),"Math",{expm1:i})},function(t,e,r){var n=r(0);n(n.S,"Math",{fround:r(117)})},function(t,e,r){var n=r(0),i=Math.abs;n(n.S,"Math",{hypot:function hypot(t,e){for(var r,n,o=0,s=0,a=arguments.length,u=0;s0?(n=r/u)*n:r;return u===1/0?1/0:u*Math.sqrt(o)}})},function(t,e,r){var n=r(0),i=Math.imul;n(n.S+n.F*r(4)(function(){return-5!=i(4294967295,5)||2!=i.length}),"Math",{imul:function imul(t,e){var r=+t,n=+e,i=65535&r,o=65535&n;return 0|i*o+((65535&r>>>16)*o+i*(65535&n>>>16)<<16>>>0)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log10:function log10(t){return Math.log(t)*Math.LOG10E}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log1p:r(116)})},function(t,e,r){var n=r(0);n(n.S,"Math",{log2:function log2(t){return Math.log(t)/Math.LN2}})},function(t,e,r){var n=r(0);n(n.S,"Math",{sign:r(81)})},function(t,e,r){var n=r(0),i=r(82),o=Math.exp;n(n.S+n.F*r(4)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function sinh(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},function(t,e,r){var n=r(0),i=r(82),o=Math.exp;n(n.S,"Math",{tanh:function tanh(t){var e=i(t=+t),r=i(-t);return e==1/0?1:r==1/0?-1:(e-r)/(o(t)+o(-t))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{trunc:function trunc(t){return(t>0?Math.floor:Math.ceil)(t)}})},function(t,e,r){var n=r(0),i=r(36),o=String.fromCharCode,s=String.fromCodePoint;n(n.S+n.F*(!!s&&1!=s.length),"String",{fromCodePoint:function fromCodePoint(t){for(var e,r=[],n=arguments.length,s=0;n>s;){if(e=+arguments[s++],i(e,1114111)!==e)throw RangeError(e+" is not a valid code point");r.push(e<65536?o(e):o(55296+((e-=65536)>>10),e%1024+56320))}return r.join("")}})},function(t,e,r){var n=r(0),i=r(16),o=r(7);n(n.S,"String",{raw:function raw(t){for(var e=i(t.raw),r=o(e.length),n=arguments.length,s=[],a=0;r>a;)s.push(String(e[a++])),a=e.length?{value:void 0,done:!0}:(t=n(e,r),this._i+=t.length,{value:t,done:!1})})},function(t,e,r){"use strict";var n=r(0),i=r(59)(!1);n(n.P,"String",{codePointAt:function codePointAt(t){return i(this,t)}})},function(t,e,r){"use strict";var n=r(0),i=r(7),o=r(85),s="".endsWith;n(n.P+n.F*r(86)("endsWith"),"String",{endsWith:function endsWith(t){var e=o(this,t,"endsWith"),r=arguments.length>1?arguments[1]:void 0,n=i(e.length),a=void 0===r?n:Math.min(i(r),n),u=String(t);return s?s.call(e,u,a):e.slice(a-u.length,a)===u}})},function(t,e,r){"use strict";var n=r(0),i=r(85);n(n.P+n.F*r(86)("includes"),"String",{includes:function includes(t){return!!~i(this,t,"includes").indexOf(t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,r){var n=r(0);n(n.P,"String",{repeat:r(80)})},function(t,e,r){"use strict";var n=r(0),i=r(7),o=r(85),s="".startsWith;n(n.P+n.F*r(86)("startsWith"),"String",{startsWith:function startsWith(t){var e=o(this,t,"startsWith"),r=i(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),n=String(t);return s?s.call(e,n,r):e.slice(r,r+n.length)===n}})},function(t,e,r){"use strict";r(14)("anchor",function(t){return function anchor(e){return t(this,"a","name",e)}})},function(t,e,r){"use strict";r(14)("big",function(t){return function big(){return t(this,"big","","")}})},function(t,e,r){"use strict";r(14)("blink",function(t){return function blink(){return t(this,"blink","","")}})},function(t,e,r){"use strict";r(14)("bold",function(t){return function bold(){return t(this,"b","","")}})},function(t,e,r){"use strict";r(14)("fixed",function(t){return function fixed(){return t(this,"tt","","")}})},function(t,e,r){"use strict";r(14)("fontcolor",function(t){return function fontcolor(e){return t(this,"font","color",e)}})},function(t,e,r){"use strict";r(14)("fontsize",function(t){return function fontsize(e){return t(this,"font","size",e)}})},function(t,e,r){"use strict";r(14)("italics",function(t){return function italics(){return t(this,"i","","")}})},function(t,e,r){"use strict";r(14)("link",function(t){return function link(e){return t(this,"a","href",e)}})},function(t,e,r){"use strict";r(14)("small",function(t){return function small(){return t(this,"small","","")}})},function(t,e,r){"use strict";r(14)("strike",function(t){return function strike(){return t(this,"strike","","")}})},function(t,e,r){"use strict";r(14)("sub",function(t){return function sub(){return t(this,"sub","","")}})},function(t,e,r){"use strict";r(14)("sup",function(t){return function sup(){return t(this,"sup","","")}})},function(t,e,r){var n=r(0);n(n.S,"Date",{now:function(){return(new Date).getTime()}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24);n(n.P+n.F*r(4)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function toJSON(t){var e=i(this),r=o(e);return"number"!=typeof r||isFinite(r)?e.toISOString():null}})},function(t,e,r){var n=r(0),i=r(234);n(n.P+n.F*(Date.prototype.toISOString!==i),"Date",{toISOString:i})},function(t,e,r){"use strict";var n=r(4),i=Date.prototype.getTime,o=Date.prototype.toISOString,s=function(t){return t>9?t:"0"+t};t.exports=n(function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-5e13-1))})||!n(function(){o.call(new Date(NaN))})?function toISOString(){if(!isFinite(i.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),r=t.getUTCMilliseconds(),n=e<0?"-":e>9999?"+":"";return n+("00000"+Math.abs(e)).slice(n?-6:-4)+"-"+s(t.getUTCMonth()+1)+"-"+s(t.getUTCDate())+"T"+s(t.getUTCHours())+":"+s(t.getUTCMinutes())+":"+s(t.getUTCSeconds())+"."+(r>99?r:"0"+s(r))+"Z"}:o},function(t,e,r){var n=Date.prototype,i=n.toString,o=n.getTime;new Date(NaN)+""!="Invalid Date"&&r(13)(n,"toString",function toString(){var t=o.call(this);return t==t?i.call(this):"Invalid Date"})},function(t,e,r){var n=r(6)("toPrimitive"),i=Date.prototype;n in i||r(12)(i,n,r(237))},function(t,e,r){"use strict";var n=r(1),i=r(24);t.exports=function(t){if("string"!==t&&"number"!==t&&"default"!==t)throw TypeError("Incorrect hint");return i(n(this),"number"!=t)}},function(t,e,r){var n=r(0);n(n.S,"Array",{isArray:r(58)})},function(t,e,r){"use strict";var n=r(20),i=r(0),o=r(10),s=r(118),a=r(87),u=r(7),c=r(88),f=r(89);i(i.S+i.F*!r(61)(function(t){Array.from(t)}),"Array",{from:function from(t){var e,r,i,h,l=o(t),p="function"==typeof this?this:Array,g=arguments.length,d=g>1?arguments[1]:void 0,v=void 0!==d,y=0,m=f(l);if(v&&(d=n(d,g>2?arguments[2]:void 0,2)),void 0==m||p==Array&&a(m))for(r=new p(e=u(l.length));e>y;y++)c(r,y,v?d(l[y],y):l[y]);else for(h=m.call(l),r=new p;!(i=h.next()).done;y++)c(r,y,v?s(h,d,[i.value,y],!0):i.value);return r.length=y,r}})},function(t,e,r){"use strict";var n=r(0),i=r(88);n(n.S+n.F*r(4)(function(){function F(){}return!(Array.of.call(F)instanceof F)}),"Array",{of:function of(){for(var t=0,e=arguments.length,r=new("function"==typeof this?this:Array)(e);e>t;)i(r,t,arguments[t++]);return r.length=e,r}})},function(t,e,r){"use strict";var n=r(0),i=r(16),o=[].join;n(n.P+n.F*(r(51)!=Object||!r(23)(o)),"Array",{join:function join(t){return o.call(i(this),void 0===t?",":t)}})},function(t,e,r){"use strict";var n=r(0),i=r(76),o=r(21),s=r(36),a=r(7),u=[].slice;n(n.P+n.F*r(4)(function(){i&&u.call(i)}),"Array",{slice:function slice(t,e){var r=a(this.length),n=o(this);if(e=void 0===e?r:e,"Array"==n)return u.call(this,t,e);for(var i=s(t,r),c=s(e,r),f=a(c-i),h=new Array(f),l=0;l1&&(n=Math.min(n,o(arguments[1]))),n<0&&(n=r+n);n>=0;n--)if(n in e&&e[n]===t)return n||0;return-1}})},function(t,e,r){var n=r(0);n(n.P,"Array",{copyWithin:r(120)}),r(32)("copyWithin")},function(t,e,r){var n=r(0);n(n.P,"Array",{fill:r(91)}),r(32)("fill")},function(t,e,r){"use strict";var n=r(0),i=r(27)(5),o=!0;"find"in[]&&Array(1).find(function(){o=!1}),n(n.P+n.F*o,"Array",{find:function find(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(32)("find")},function(t,e,r){"use strict";var n=r(0),i=r(27)(6),o="findIndex",s=!0;o in[]&&Array(1)[o](function(){s=!1}),n(n.P+n.F*s,"Array",{findIndex:function findIndex(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(32)(o)},function(t,e,r){r(39)("Array")},function(t,e,r){var n=r(2),i=r(79),o=r(9).f,s=r(38).f,a=r(60),u=r(53),c=n.RegExp,f=c,h=c.prototype,l=/a/g,p=/a/g,g=new c(l)!==l;if(r(8)&&(!g||r(4)(function(){return p[r(6)("match")]=!1,c(l)!=l||c(p)==p||"/a/i"!=c(l,"i")}))){c=function RegExp(t,e){var r=this instanceof c,n=a(t),o=void 0===e;return!r&&n&&t.constructor===c&&o?t:i(g?new f(n&&!o?t.source:t,e):f((n=t instanceof c)?t.source:t,n&&o?u.call(t):e),r?this:h,c)};for(var d=function(t){t in c||o(c,t,{configurable:!0,get:function(){return f[t]},set:function(e){f[t]=e}})},v=s(f),y=0;v.length>y;)d(v[y++]);h.constructor=c,c.prototype=h,r(13)(n,"RegExp",c)}r(39)("RegExp")},function(t,e,r){"use strict";r(123);var n=r(1),i=r(53),o=r(8),s=/./.toString,a=function(t){r(13)(RegExp.prototype,"toString",t,!0)};r(4)(function(){return"/a/b"!=s.call({source:"a",flags:"b"})})?a(function toString(){var t=n(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)}):"toString"!=s.name&&a(function toString(){return s.call(this)})},function(t,e,r){"use strict";var n=r(1),i=r(7),o=r(94),s=r(62);r(63)("match",1,function(t,e,r,a){return[function match(r){var n=t(this),i=void 0==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},function(t){var e=a(r,t,this);if(e.done)return e.value;var u=n(t),c=String(this);if(!u.global)return s(u,c);var f=u.unicode;u.lastIndex=0;for(var h,l=[],p=0;null!==(h=s(u,c));){var g=String(h[0]);l[p]=g,""===g&&(u.lastIndex=o(c,i(u.lastIndex),f)),p++}return 0===p?null:l}]})},function(t,e,r){"use strict";var n=r(1),i=r(10),o=r(7),s=r(22),a=r(94),u=r(62),c=Math.max,f=Math.min,h=Math.floor,l=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g,g=function(t){return void 0===t?t:String(t)};r(63)("replace",2,function(t,e,r,d){return[function replace(n,i){var o=t(this),s=void 0==n?void 0:n[e];return void 0!==s?s.call(n,o,i):r.call(String(o),n,i)},function(t,e){var i=d(r,t,this,e);if(i.done)return i.value;var h=n(t),l=String(this),p="function"==typeof e;p||(e=String(e));var v=h.global;if(v){var y=h.unicode;h.lastIndex=0}for(var m=[];;){var _=u(h,l);if(null===_)break;if(m.push(_),!v)break;""===String(_[0])&&(h.lastIndex=a(l,o(h.lastIndex),y))}for(var S="",b=0,w=0;w=b&&(S+=l.slice(b,E)+I,b=E+F.length)}return S+l.slice(b)}];function getSubstitution(t,e,n,o,s,a){var u=n+t.length,c=o.length,f=p;return void 0!==s&&(s=i(s),f=l),r.call(a,f,function(r,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(u);case"<":a=s[i.slice(1,-1)];break;default:var f=+i;if(0===f)return r;if(f>c){var l=h(f/10);return 0===l?r:l<=c?void 0===o[l-1]?i.charAt(1):o[l-1]+i.charAt(1):r}a=o[f-1]}return void 0===a?"":a})}})},function(t,e,r){"use strict";var n=r(1),i=r(109),o=r(62);r(63)("search",1,function(t,e,r,s){return[function search(r){var n=t(this),i=void 0==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},function(t){var e=s(r,t,this);if(e.done)return e.value;var a=n(t),u=String(this),c=a.lastIndex;i(c,0)||(a.lastIndex=0);var f=o(a,u);return i(a.lastIndex,c)||(a.lastIndex=c),null===f?-1:f.index}]})},function(t,e,r){"use strict";var n=r(60),i=r(1),o=r(54),s=r(94),a=r(7),u=r(62),c=r(93),f=r(4),h=Math.min,l=[].push,p=!f(function(){RegExp(4294967295,"y")});r(63)("split",2,function(t,e,r,f){var g;return g="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,e){var i=String(this);if(void 0===t&&0===e)return[];if(!n(t))return r.call(i,t,e);for(var o,s,a,u=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),h=0,p=void 0===e?4294967295:e>>>0,g=new RegExp(t.source,f+"g");(o=c.call(g,i))&&!((s=g.lastIndex)>h&&(u.push(i.slice(h,o.index)),o.length>1&&o.index=p));)g.lastIndex===o.index&&g.lastIndex++;return h===i.length?!a&&g.test("")||u.push(""):u.push(i.slice(h)),u.length>p?u.slice(0,p):u}:"0".split(void 0,0).length?function(t,e){return void 0===t&&0===e?[]:r.call(this,t,e)}:r,[function split(r,n){var i=t(this),o=void 0==r?void 0:r[e];return void 0!==o?o.call(r,i,n):g.call(String(i),r,n)},function(t,e){var n=f(g,t,this,e,g!==r);if(n.done)return n.value;var c=i(t),l=String(this),d=o(c,RegExp),v=c.unicode,y=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(p?"y":"g"),m=new d(p?c:"^(?:"+c.source+")",y),_=void 0===e?4294967295:e>>>0;if(0===_)return[];if(0===l.length)return null===u(m,l)?[l]:[];for(var S=0,b=0,w=[];bo;)s(r[o++]);t._c=[],t._n=!1,e&&!t._h&&M(t)})}},M=function(t){y.call(u,function(){var e,r,n,i=t._v,o=O(t);if(o&&(e=S(function(){P?E.emit("unhandledRejection",i,t):(r=u.onunhandledrejection)?r({promise:t,reason:i}):(n=u.console)&&n.error&&n.error("Unhandled promise rejection",i)}),t._h=P||O(t)?2:1),t._a=void 0,o&&e.e)throw e.v})},O=function(t){return 1!==t._h&&0===(t._a||t._c).length},U=function(t){y.call(u,function(){var e;P?E.emit("rejectionHandled",t):(e=u.onrejectionhandled)&&e({promise:t,reason:t._v})})},N=function(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),T(e,!0))},L=function(t){var e,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw F("Promise can't be resolved itself");(e=B(t))?m(function(){var n={_w:r,_d:!1};try{e.call(t,c(L,n,1),c(N,n,1))}catch(t){N.call(n,t)}}):(r._v=t,r._s=1,T(r,!1))}catch(t){N.call({_w:r,_d:!1},t)}}};R||(A=function Promise(t){g(this,A,"Promise","_h"),p(t),n.call(this);try{t(c(L,this,1),c(N,this,1))}catch(t){N.call(this,t)}},(n=function Promise(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=r(42)(A.prototype,{then:function then(t,e){var r=C(v(this,A));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=P?E.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&T(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new n;this.promise=t,this.resolve=c(L,t,1),this.reject=c(N,t,1)},_.f=C=function(t){return t===A||t===s?new o(t):i(t)}),h(h.G+h.W+h.F*!R,{Promise:A}),r(45)(A,"Promise"),r(39)("Promise"),s=r(19).Promise,h(h.S+h.F*!R,"Promise",{reject:function reject(t){var e=C(this);return(0,e.reject)(t),e.promise}}),h(h.S+h.F*(a||!R),"Promise",{resolve:function resolve(t){return w(a&&this===s?A:this,t)}}),h(h.S+h.F*!(R&&r(61)(function(t){A.all(t).catch(I)})),"Promise",{all:function all(t){var e=this,r=C(e),n=r.resolve,i=r.reject,o=S(function(){var r=[],o=0,s=1;d(t,!1,function(t){var a=o++,u=!1;r.push(void 0),s++,e.resolve(t).then(function(t){u||(u=!0,r[a]=t,--s||n(r))},i)}),--s||n(r)});return o.e&&i(o.v),r.promise},race:function race(t){var e=this,r=C(e),n=r.reject,i=S(function(){d(t,!1,function(t){e.resolve(t).then(r.resolve,n)})});return i.e&&n(i.v),r.promise}})},function(t,e,r){"use strict";var n=r(130),i=r(43);r(65)("WeakSet",function(t){return function WeakSet(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function add(t){return n.def(i(this,"WeakSet"),t,!0)}},n,!1,!0)},function(t,e,r){"use strict";var n=r(0),i=r(66),o=r(98),s=r(1),a=r(36),u=r(7),c=r(5),f=r(2).ArrayBuffer,h=r(54),l=o.ArrayBuffer,p=o.DataView,g=i.ABV&&f.isView,d=l.prototype.slice,v=i.VIEW;n(n.G+n.W+n.F*(f!==l),{ArrayBuffer:l}),n(n.S+n.F*!i.CONSTR,"ArrayBuffer",{isView:function isView(t){return g&&g(t)||c(t)&&v in t}}),n(n.P+n.U+n.F*r(4)(function(){return!new l(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function slice(t,e){if(void 0!==d&&void 0===e)return d.call(s(this),t);for(var r=s(this).byteLength,n=a(t,r),i=a(void 0===e?r:e,r),o=new(h(this,l))(u(i-n)),c=new p(this),f=new p(o),g=0;n=e.length)return{value:void 0,done:!0}}while(!((t=e[this._i++])in this._t));return{value:t,done:!1}}),n(n.S,"Reflect",{enumerate:function enumerate(t){return new o(t)}})},function(t,e,r){var n=r(17),i=r(18),o=r(15),s=r(0),a=r(5),u=r(1);s(s.S,"Reflect",{get:function get(t,e){var r,s,c=arguments.length<3?t:arguments[2];return u(t)===c?t[e]:(r=n.f(t,e))?o(r,"value")?r.value:void 0!==r.get?r.get.call(c):void 0:a(s=i(t))?get(s,e,c):void 0}})},function(t,e,r){var n=r(17),i=r(0),o=r(1);i(i.S,"Reflect",{getOwnPropertyDescriptor:function getOwnPropertyDescriptor(t,e){return n.f(o(t),e)}})},function(t,e,r){var n=r(0),i=r(18),o=r(1);n(n.S,"Reflect",{getPrototypeOf:function getPrototypeOf(t){return i(o(t))}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{has:function has(t,e){return e in t}})},function(t,e,r){var n=r(0),i=r(1),o=Object.isExtensible;n(n.S,"Reflect",{isExtensible:function isExtensible(t){return i(t),!o||o(t)}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{ownKeys:r(132)})},function(t,e,r){var n=r(0),i=r(1),o=Object.preventExtensions;n(n.S,"Reflect",{preventExtensions:function preventExtensions(t){i(t);try{return o&&o(t),!0}catch(t){return!1}}})},function(t,e,r){var n=r(9),i=r(17),o=r(18),s=r(15),a=r(0),u=r(33),c=r(1),f=r(5);a(a.S,"Reflect",{set:function set(t,e,r){var a,h,l=arguments.length<4?t:arguments[3],p=i.f(c(t),e);if(!p){if(f(h=o(t)))return set(h,e,r,l);p=u(0)}if(s(p,"value")){if(!1===p.writable||!f(l))return!1;if(a=i.f(l,e)){if(a.get||a.set||!1===a.writable)return!1;a.value=r,n.f(l,e,a)}else n.f(l,e,u(0,r));return!0}return void 0!==p.set&&(p.set.call(l,r),!0)}})},function(t,e,r){var n=r(0),i=r(77);i&&n(n.S,"Reflect",{setPrototypeOf:function setPrototypeOf(t,e){i.check(t,e);try{return i.set(t,e),!0}catch(t){return!1}}})},function(t,e,r){"use strict";var n=r(0),i=r(56)(!0);n(n.P,"Array",{includes:function includes(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(32)("includes")},function(t,e,r){"use strict";var n=r(0),i=r(133),o=r(10),s=r(7),a=r(11),u=r(90);n(n.P,"Array",{flatMap:function flatMap(t){var e,r,n=o(this);return a(t),e=s(n.length),r=u(n,0),i(r,n,n,e,0,1,t,arguments[1]),r}}),r(32)("flatMap")},function(t,e,r){"use strict";var n=r(0),i=r(133),o=r(10),s=r(7),a=r(22),u=r(90);n(n.P,"Array",{flatten:function flatten(){var t=arguments[0],e=o(this),r=s(e.length),n=u(e,0);return i(n,e,e,r,0,void 0===t?1:a(t)),n}}),r(32)("flatten")},function(t,e,r){"use strict";var n=r(0),i=r(59)(!0);n(n.P,"String",{at:function at(t){return i(this,t)}})},function(t,e,r){"use strict";var n=r(0),i=r(134),o=r(64);n(n.P+n.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(o),"String",{padStart:function padStart(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},function(t,e,r){"use strict";var n=r(0),i=r(134),o=r(64);n(n.P+n.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(o),"String",{padEnd:function padEnd(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},function(t,e,r){"use strict";r(47)("trimLeft",function(t){return function trimLeft(){return t(this,1)}},"trimStart")},function(t,e,r){"use strict";r(47)("trimRight",function(t){return function trimRight(){return t(this,2)}},"trimEnd")},function(t,e,r){"use strict";var n=r(0),i=r(25),o=r(7),s=r(60),a=r(53),u=RegExp.prototype,c=function(t,e){this._r=t,this._s=e};r(84)(c,"RegExp String",function next(){var t=this._r.exec(this._s);return{value:t,done:null===t}}),n(n.P,"String",{matchAll:function matchAll(t){if(i(this),!s(t))throw TypeError(t+" is not a regexp!");var e=String(this),r="flags"in u?String(t.flags):a.call(t),n=new RegExp(t.source,~r.indexOf("g")?r:"g"+r);return n.lastIndex=o(t.lastIndex),new c(n,e)}})},function(t,e,r){r(73)("asyncIterator")},function(t,e,r){r(73)("observable")},function(t,e,r){var n=r(0),i=r(132),o=r(16),s=r(17),a=r(88);n(n.S,"Object",{getOwnPropertyDescriptors:function getOwnPropertyDescriptors(t){for(var e,r,n=o(t),u=s.f,c=i(n),f={},h=0;c.length>h;)void 0!==(r=u(n,e=c[h++]))&&a(f,e,r);return f}})},function(t,e,r){var n=r(0),i=r(135)(!1);n(n.S,"Object",{values:function values(t){return i(t)}})},function(t,e,r){var n=r(0),i=r(135)(!0);n(n.S,"Object",{entries:function entries(t){return i(t)}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(11),s=r(9);r(8)&&n(n.P+r(67),"Object",{__defineGetter__:function __defineGetter__(t,e){s.f(i(this),t,{get:o(e),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(11),s=r(9);r(8)&&n(n.P+r(67),"Object",{__defineSetter__:function __defineSetter__(t,e){s.f(i(this),t,{set:o(e),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24),s=r(18),a=r(17).f;r(8)&&n(n.P+r(67),"Object",{__lookupGetter__:function __lookupGetter__(t){var e,r=i(this),n=o(t,!0);do{if(e=a(r,n))return e.get}while(r=s(r))}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24),s=r(18),a=r(17).f;r(8)&&n(n.P+r(67),"Object",{__lookupSetter__:function __lookupSetter__(t){var e,r=i(this),n=o(t,!0);do{if(e=a(r,n))return e.set}while(r=s(r))}})},function(t,e,r){var n=r(0);n(n.P+n.R,"Map",{toJSON:r(136)("Map")})},function(t,e,r){var n=r(0);n(n.P+n.R,"Set",{toJSON:r(136)("Set")})},function(t,e,r){r(68)("Map")},function(t,e,r){r(68)("Set")},function(t,e,r){r(68)("WeakMap")},function(t,e,r){r(68)("WeakSet")},function(t,e,r){r(69)("Map")},function(t,e,r){r(69)("Set")},function(t,e,r){r(69)("WeakMap")},function(t,e,r){r(69)("WeakSet")},function(t,e,r){var n=r(0);n(n.G,{global:r(2)})},function(t,e,r){var n=r(0);n(n.S,"System",{global:r(2)})},function(t,e,r){var n=r(0),i=r(21);n(n.S,"Error",{isError:function isError(t){return"Error"===i(t)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clamp:function clamp(t,e,r){return Math.min(r,Math.max(e,t))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{DEG_PER_RAD:Math.PI/180})},function(t,e,r){var n=r(0),i=180/Math.PI;n(n.S,"Math",{degrees:function degrees(t){return t*i}})},function(t,e,r){var n=r(0),i=r(138),o=r(117);n(n.S,"Math",{fscale:function fscale(t,e,r,n,s){return o(i(t,e,r,n,s))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{iaddh:function iaddh(t,e,r,n){var i=t>>>0,o=r>>>0;return(e>>>0)+(n>>>0)+((i&o|(i|o)&~(i+o>>>0))>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{isubh:function isubh(t,e,r,n){var i=t>>>0,o=r>>>0;return(e>>>0)-(n>>>0)-((~i&o|~(i^o)&i-o>>>0)>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{imulh:function imulh(t,e){var r=+t,n=+e,i=65535&r,o=65535&n,s=r>>16,a=n>>16,u=(s*o>>>0)+(i*o>>>16);return s*a+(u>>16)+((i*a>>>0)+(65535&u)>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{RAD_PER_DEG:180/Math.PI})},function(t,e,r){var n=r(0),i=Math.PI/180;n(n.S,"Math",{radians:function radians(t){return t*i}})},function(t,e,r){var n=r(0);n(n.S,"Math",{scale:r(138)})},function(t,e,r){var n=r(0);n(n.S,"Math",{umulh:function umulh(t,e){var r=+t,n=+e,i=65535&r,o=65535&n,s=r>>>16,a=n>>>16,u=(s*o>>>0)+(i*o>>>16);return s*a+(u>>>16)+((i*a>>>0)+(65535&u)>>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{signbit:function signbit(t){return(t=+t)!=t?t:0==t?1/t==1/0:t>0}})},function(t,e,r){"use strict";var n=r(0),i=r(19),o=r(2),s=r(54),a=r(125);n(n.P+n.R,"Promise",{finally:function(t){var e=s(this,i.Promise||o.Promise),r="function"==typeof t;return this.then(r?function(r){return a(e,t()).then(function(){return r})}:t,r?function(r){return a(e,t()).then(function(){throw r})}:t)}})},function(t,e,r){"use strict";var n=r(0),i=r(97),o=r(124);n(n.S,"Promise",{try:function(t){var e=i.f(this),r=o(t);return(r.e?e.reject:e.resolve)(r.v),e.promise}})},function(t,e,r){var n=r(29),i=r(1),o=n.key,s=n.set;n.exp({defineMetadata:function defineMetadata(t,e,r,n){s(t,e,i(r),o(n))}})},function(t,e,r){var n=r(29),i=r(1),o=n.key,s=n.map,a=n.store;n.exp({deleteMetadata:function deleteMetadata(t,e){var r=arguments.length<3?void 0:o(arguments[2]),n=s(i(e),r,!1);if(void 0===n||!n.delete(t))return!1;if(n.size)return!0;var u=a.get(e);return u.delete(r),!!u.size||a.delete(e)}})},function(t,e,r){var n=r(29),i=r(1),o=r(18),s=n.has,a=n.get,u=n.key,c=function(t,e,r){if(s(t,e,r))return a(t,e,r);var n=o(e);return null!==n?c(t,n,r):void 0};n.exp({getMetadata:function getMetadata(t,e){return c(t,i(e),arguments.length<3?void 0:u(arguments[2]))}})},function(t,e,r){var n=r(128),i=r(137),o=r(29),s=r(1),a=r(18),u=o.keys,c=o.key,f=function(t,e){var r=u(t,e),o=a(t);if(null===o)return r;var s=f(o,e);return s.length?r.length?i(new n(r.concat(s))):s:r};o.exp({getMetadataKeys:function getMetadataKeys(t){return f(s(t),arguments.length<2?void 0:c(arguments[1]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.get,s=n.key;n.exp({getOwnMetadata:function getOwnMetadata(t,e){return o(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.keys,s=n.key;n.exp({getOwnMetadataKeys:function getOwnMetadataKeys(t){return o(i(t),arguments.length<2?void 0:s(arguments[1]))}})},function(t,e,r){var n=r(29),i=r(1),o=r(18),s=n.has,a=n.key,u=function(t,e,r){if(s(t,e,r))return!0;var n=o(e);return null!==n&&u(t,n,r)};n.exp({hasMetadata:function hasMetadata(t,e){return u(t,i(e),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.has,s=n.key;n.exp({hasOwnMetadata:function hasOwnMetadata(t,e){return o(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=r(11),s=n.key,a=n.set;n.exp({metadata:function metadata(t,e){return function decorator(r,n){a(t,e,(void 0!==n?i:o)(r),s(n))}}})},function(t,e,r){var n=r(0),i=r(96)(),o=r(2).process,s="process"==r(21)(o);n(n.G,{asap:function asap(t){var e=s&&o.domain;i(e?e.bind(t):t)}})},function(t,e,r){"use strict";var n=r(0),i=r(2),o=r(19),s=r(96)(),a=r(6)("observable"),u=r(11),c=r(1),f=r(40),h=r(42),l=r(12),p=r(41),g=p.RETURN,d=function(t){return null==t?void 0:u(t)},v=function(t){var e=t._c;e&&(t._c=void 0,e())},y=function(t){return void 0===t._o},m=function(t){y(t)||(t._o=void 0,v(t))},_=function(t,e){c(t),this._c=void 0,this._o=t,t=new S(this);try{var r=e(t),n=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){n.unsubscribe()}:u(r),this._c=r)}catch(e){return void t.error(e)}y(this)&&v(this)};_.prototype=h({},{unsubscribe:function unsubscribe(){m(this)}});var S=function(t){this._s=t};S.prototype=h({},{next:function next(t){var e=this._s;if(!y(e)){var r=e._o;try{var n=d(r.next);if(n)return n.call(r,t)}catch(t){try{m(e)}finally{throw t}}}},error:function error(t){var e=this._s;if(y(e))throw t;var r=e._o;e._o=void 0;try{var n=d(r.error);if(!n)throw t;t=n.call(r,t)}catch(t){try{v(e)}finally{throw t}}return v(e),t},complete:function complete(t){var e=this._s;if(!y(e)){var r=e._o;e._o=void 0;try{var n=d(r.complete);t=n?n.call(r,t):void 0}catch(t){try{v(e)}finally{throw t}}return v(e),t}}});var b=function Observable(t){f(this,b,"Observable","_f")._f=u(t)};h(b.prototype,{subscribe:function subscribe(t){return new _(t,this._f)},forEach:function forEach(t){var e=this;return new(o.Promise||i.Promise)(function(r,n){u(t);var i=e.subscribe({next:function(e){try{return t(e)}catch(t){n(t),i.unsubscribe()}},error:n,complete:r})})}}),h(b,{from:function from(t){var e="function"==typeof this?this:b,r=d(c(t)[a]);if(r){var n=c(r.call(t));return n.constructor===e?n:new e(function(t){return n.subscribe(t)})}return new e(function(e){var r=!1;return s(function(){if(!r){try{if(p(t,!1,function(t){if(e.next(t),r)return g})===g)return}catch(t){if(r)throw t;return void e.error(t)}e.complete()}}),function(){r=!0}})},of:function of(){for(var t=0,e=arguments.length,r=new Array(e);t2,i=!!n&&s.call(arguments,2);return t(n?function(){("function"==typeof e?e:Function(e)).apply(this,i)}:e,r)}};i(i.G+i.B+i.F*a,{setTimeout:u(n.setTimeout),setInterval:u(n.setInterval)})},function(t,e,r){var n=r(0),i=r(95);n(n.G+n.B,{setImmediate:i.set,clearImmediate:i.clear})},function(t,e,r){for(var n=r(92),i=r(35),o=r(13),s=r(2),a=r(12),u=r(48),c=r(6),f=c("iterator"),h=c("toStringTag"),l=u.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},g=i(p),d=0;d=0;--n){var o=this.tryEntries[n],s=o.completion;if("root"===o.tryLoc)return handle("end");if(o.tryLoc<=this.prev){var a=i.call(o,"catchLoc"),u=i.call(o,"finallyLoc");if(a&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),d}},catch:function(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 i=n.arg;resetTryEntry(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:values(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),d}}}function wrap(t,e,r,n){var i=e&&e.prototype instanceof Generator?e:Generator,o=Object.create(i.prototype),s=new Context(n||[]);return o._invoke=function makeInvokeMethod(t,e,r){var n=h;return function invoke(i,o){if(n===p)throw new Error("Generator is already running");if(n===g){if("throw"===i)throw o;return doneResult()}for(r.method=i,r.arg=o;;){var s=r.delegate;if(s){var a=maybeInvokeDelegate(s,r);if(a){if(a===d)continue;return a}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===h)throw n=g,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=p;var u=tryCatch(t,e,r);if("normal"===u.type){if(n=r.done?g:l,u.arg===d)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n=g,r.method="throw",r.arg=u.arg)}}}(t,r,s),o}function tryCatch(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}function defineIteratorMethods(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function AsyncIterator(t){function invoke(e,r,n,o){var s=tryCatch(t[e],t,r);if("throw"!==s.type){var a=s.arg,u=a.value;return u&&"object"==typeof u&&i.call(u,"__await")?Promise.resolve(u.__await).then(function(t){invoke("next",t,n,o)},function(t){invoke("throw",t,n,o)}):Promise.resolve(u).then(function(t){a.value=t,n(a)},o)}o(s.arg)}var r;"object"==typeof e.process&&e.process.domain&&(invoke=e.process.domain.bind(invoke)),this._invoke=function enqueue(t,e){function callInvokeWithMethodAndArg(){return new Promise(function(r,n){invoke(t,e,r,n)})}return r=r?r.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}}function maybeInvokeDelegate(t,e){var n=t.iterator[e.method];if(n===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=r,maybeInvokeDelegate(t,e),"throw"===e.method))return d;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var i=tryCatch(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=r),e.delegate=null,d):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}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(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function next(){for(;++n1&&void 0!==arguments[1]?arguments[1]:o.MetadataService,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.UserInfoService,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:c.JoseUtil,u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:a.TokenClient;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,ResponseValidator),!t)throw i.Log.error("ResponseValidator.ctor: No settings passed to ResponseValidator"),new Error("settings");this._settings=t,this._metadataService=new e(this._settings),this._userInfoService=new r(this._settings),this._joseUtil=n,this._tokenClient=new u(this._settings)}return ResponseValidator.prototype.validateSigninResponse=function validateSigninResponse(t,e){var r=this;return i.Log.debug("ResponseValidator.validateSigninResponse"),this._processSigninParams(t,e).then(function(e){return i.Log.debug("ResponseValidator.validateSigninResponse: state processed"),r._validateTokens(t,e).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: tokens validated"),r._processClaims(t).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: claims processed"),t})})})},ResponseValidator.prototype.validateSignoutResponse=function validateSignoutResponse(t,e){return t.id!==e.state?(i.Log.error("ResponseValidator.validateSignoutResponse: State does not match"),Promise.reject(new Error("State does not match"))):(i.Log.debug("ResponseValidator.validateSignoutResponse: state validated"),e.state=t.data,e.error?(i.Log.warn("ResponseValidator.validateSignoutResponse: Response was error",e.error),Promise.reject(new u.ErrorResponse(e))):Promise.resolve(e))},ResponseValidator.prototype._processSigninParams=function _processSigninParams(t,e){if(t.id!==e.state)return i.Log.error("ResponseValidator._processSigninParams: State does not match"),Promise.reject(new Error("State does not match"));if(!t.client_id)return i.Log.error("ResponseValidator._processSigninParams: No client_id on state"),Promise.reject(new Error("No client_id on state"));if(!t.authority)return i.Log.error("ResponseValidator._processSigninParams: No authority on state"),Promise.reject(new Error("No authority on state"));if(this._settings.authority){if(this._settings.authority&&this._settings.authority!==t.authority)return i.Log.error("ResponseValidator._processSigninParams: authority mismatch on settings vs. signin state"),Promise.reject(new Error("authority mismatch on settings vs. signin state"))}else this._settings.authority=t.authority;if(this._settings.client_id){if(this._settings.client_id&&this._settings.client_id!==t.client_id)return i.Log.error("ResponseValidator._processSigninParams: client_id mismatch on settings vs. signin state"),Promise.reject(new Error("client_id mismatch on settings vs. signin state"))}else this._settings.client_id=t.client_id;return i.Log.debug("ResponseValidator._processSigninParams: state validated"),e.state=t.data,e.error?(i.Log.warn("ResponseValidator._processSigninParams: Response was error",e.error),Promise.reject(new u.ErrorResponse(e))):t.nonce&&!e.id_token?(i.Log.error("ResponseValidator._processSigninParams: Expecting id_token in response"),Promise.reject(new Error("No id_token in response"))):!t.nonce&&e.id_token?(i.Log.error("ResponseValidator._processSigninParams: Not expecting id_token in response"),Promise.reject(new Error("Unexpected id_token in response"))):t.code_verifier&&!e.code?(i.Log.error("ResponseValidator._processSigninParams: Expecting code in response"),Promise.reject(new Error("No code in response"))):!t.code_verifier&&e.code?(i.Log.error("ResponseValidator._processSigninParams: Not expecting code in response"),Promise.reject(new Error("Unexpected code in response"))):Promise.resolve(e)},ResponseValidator.prototype._processClaims=function _processClaims(t){var e=this;if(t.isOpenIdConnect){if(i.Log.debug("ResponseValidator._processClaims: response is OIDC, processing claims"),t.profile=this._filterProtocolClaims(t.profile),this._settings.loadUserInfo&&t.access_token)return i.Log.debug("ResponseValidator._processClaims: loading user info"),this._userInfoService.getClaims(t.access_token).then(function(r){return i.Log.debug("ResponseValidator._processClaims: user info claims received from user info endpoint"),r.sub!==t.profile.sub?(i.Log.error("ResponseValidator._processClaims: sub from user info endpoint does not match sub in access_token"),Promise.reject(new Error("sub from user info endpoint does not match sub in access_token"))):(t.profile=e._mergeClaims(t.profile,r),i.Log.debug("ResponseValidator._processClaims: user info claims received, updated profile:",t.profile),t)});i.Log.debug("ResponseValidator._processClaims: not loading user info")}else i.Log.debug("ResponseValidator._processClaims: response is not OIDC, not processing claims");return Promise.resolve(t)},ResponseValidator.prototype._mergeClaims=function _mergeClaims(t,e){var r=Object.assign({},t);for(var i in e){var o=e[i];Array.isArray(o)||(o=[o]);for(var s=0;s1)return i.Log.error("ResponseValidator._validateIdToken: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));u=a[0]}if(!u)return i.Log.error("ResponseValidator._validateIdToken: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var c=t.client_id,f=r._settings.clockSkew;return i.Log.debug("ResponseValidator._validateIdToken: Validaing JWT; using clock skew (in seconds) of: ",f),r._joseUtil.validateJwt(e.id_token,u,s,c,f).then(function(){return i.Log.debug("ResponseValidator._validateIdToken: JWT validation successful"),n.payload.sub?(e.profile=n.payload,e):(i.Log.error("ResponseValidator._validateIdToken: No sub present in id_token"),Promise.reject(new Error("No sub present in id_token")))})})})},ResponseValidator.prototype._filterByAlg=function _filterByAlg(t,e){var r=null;if(e.startsWith("RS"))r="RSA";else if(e.startsWith("PS"))r="PS";else{if(!e.startsWith("ES"))return i.Log.debug("ResponseValidator._filterByAlg: alg not supported: ",e),[];r="EC"}return i.Log.debug("ResponseValidator._filterByAlg: Looking for keys that match kty: ",r),t=t.filter(function(t){return t.kty===r}),i.Log.debug("ResponseValidator._filterByAlg: Number of keys that match kty: ",r,t.length),t},ResponseValidator.prototype._validateAccessToken=function _validateAccessToken(t){if(!t.profile)return i.Log.error("ResponseValidator._validateAccessToken: No profile loaded from id_token"),Promise.reject(new Error("No profile loaded from id_token"));if(!t.profile.at_hash)return i.Log.error("ResponseValidator._validateAccessToken: No at_hash in id_token"),Promise.reject(new Error("No at_hash in id_token"));if(!t.id_token)return i.Log.error("ResponseValidator._validateAccessToken: No id_token"),Promise.reject(new Error("No id_token"));var e=this._joseUtil.parseJwt(t.id_token);if(!e||!e.header)return i.Log.error("ResponseValidator._validateAccessToken: Failed to parse id_token",e),Promise.reject(new Error("Failed to parse id_token"));var r=e.header.alg;if(!r||5!==r.length)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",r),Promise.reject(new Error("Unsupported alg: "+r));var n=r.substr(2,3);if(!n)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",r,n),Promise.reject(new Error("Unsupported alg: "+r));if(256!==(n=parseInt(n))&&384!==n&&512!==n)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",r,n),Promise.reject(new Error("Unsupported alg: "+r));var o="sha"+n,s=this._joseUtil.hashString(t.access_token,o);if(!s)return i.Log.error("ResponseValidator._validateAccessToken: access_token hash failed:",o),Promise.reject(new Error("Failed to validate at_hash"));var a=s.substr(0,s.length/2),u=this._joseUtil.hexToBase64Url(a);return u!==t.profile.at_hash?(i.Log.error("ResponseValidator._validateAccessToken: Failed to validate at_hash",u,t.profile.at_hash),Promise.reject(new Error("Failed to validate at_hash"))):(i.Log.debug("ResponseValidator._validateAccessToken: success"),Promise.resolve(t))},ResponseValidator}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserInfoService=void 0;var n=r(101),i=r(49),o=r(3),s=r(70);e.UserInfoService=function(){function UserInfoService(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:s.JoseUtil;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,UserInfoService),!t)throw o.Log.error("UserInfoService.ctor: No settings passed"),new Error("settings");this._settings=t,this._jsonService=new e(void 0,void 0,this._getClaimsFromJwt.bind(this)),this._metadataService=new r(this._settings),this._joseUtil=a}return UserInfoService.prototype.getClaims=function getClaims(t){var e=this;return t?this._metadataService.getUserInfoEndpoint().then(function(r){return o.Log.debug("UserInfoService.getClaims: received userinfo url",r),e._jsonService.getJson(r,t).then(function(t){return o.Log.debug("UserInfoService.getClaims: claims received",t),t})}):(o.Log.error("UserInfoService.getClaims: No token passed"),Promise.reject(new Error("A token is required")))},UserInfoService.prototype._getClaimsFromJwt=function _getClaimsFromJwt(t){var e=this;try{var r=this._joseUtil.parseJwt(t.responseText);if(!r||!r.header||!r.payload)return o.Log.error("UserInfoService._getClaimsFromJwt: Failed to parse JWT",r),Promise.reject(new Error("Failed to parse id_token"));var n=r.header.kid,i=void 0;switch(this._settings.userInfoJwtIssuer){case"OP":i=this._metadataService.getIssuer();break;case"ANY":i=Promise.resolve(r.payload.iss);break;default:i=Promise.resolve(this._settings.userInfoJwtIssuer)}return i.then(function(i){return o.Log.debug("UserInfoService._getClaimsFromJwt: Received issuer:"+i),e._metadataService.getSigningKeys().then(function(s){if(!s)return o.Log.error("UserInfoService._getClaimsFromJwt: No signing keys from metadata"),Promise.reject(new Error("No signing keys from metadata"));o.Log.debug("UserInfoService._getClaimsFromJwt: Received signing keys");var a=void 0;if(n)a=s.filter(function(t){return t.kid===n})[0];else{if((s=e._filterByAlg(s,r.header.alg)).length>1)return o.Log.error("UserInfoService._getClaimsFromJwt: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));a=s[0]}if(!a)return o.Log.error("UserInfoService._getClaimsFromJwt: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var u=e._settings.client_id,c=e._settings.clockSkew;return o.Log.debug("UserInfoService._getClaimsFromJwt: Validaing JWT; using clock skew (in seconds) of: ",c),e._joseUtil.validateJwt(t.responseText,a,i,u,c,void 0,!0).then(function(){return o.Log.debug("UserInfoService._getClaimsFromJwt: JWT validation successful"),r.payload})})})}catch(t){return o.Log.error("UserInfoService._getClaimsFromJwt: Error parsing JWT response",t.message),void reject(t)}},UserInfoService.prototype._filterByAlg=function _filterByAlg(t,e){var r=null;if(e.startsWith("RS"))r="RSA";else if(e.startsWith("PS"))r="PS";else{if(!e.startsWith("ES"))return o.Log.debug("UserInfoService._filterByAlg: alg not supported: ",e),[];r="EC"}return o.Log.debug("UserInfoService._filterByAlg: Looking for keys that match kty: ",r),t=t.filter(function(t){return t.kty===r}),o.Log.debug("UserInfoService._filterByAlg: Number of keys that match kty: ",r,t.length),t},UserInfoService}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AllowedSigningAlgs=e.b64tohex=e.hextob64u=e.crypto=e.X509=e.KeyUtil=e.jws=void 0;var n=r(359);e.jws=n.jws,e.KeyUtil=n.KEYUTIL,e.X509=n.X509,e.crypto=n.crypto,e.hextob64u=n.hextob64u,e.b64tohex=n.b64tohex,e.AllowedSigningAlgs=["RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"]},function(t,e,r){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i={userAgent:!1},u={}; /*! Copyright (c) 2011, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: @@ -14,10 +14,10 @@ if(void 0===p)var p={};p.lang={extend:function extend(t,r,n){if(!r||!t)throw new * https://code.google.com/p/crypto-js/issues/detail?id=84 * https://crypto-js.googlecode.com/svn-history/r667/branches/3.x/src/core.js */ -var v=v||function(t,e){var r={},n=r.lib={},i=n.Base=function(){function n(){}return{extend:function extend(t){n.prototype=this;var e=new n;return t&&e.mixIn(t),e.hasOwnProperty("init")||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function create(){var t=this.extend();return t.init.apply(t,arguments),t},init:function init(){},mixIn:function mixIn(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function clone(){return this.init.prototype.extend(this)}}}(),o=n.WordArray=i.extend({init:function init(t,e){t=this.words=t||[],this.sigBytes=void 0!=e?e:4*t.length},toString:function toString(t){return(t||a).stringify(this)},concat:function concat(t){var e=this.words,r=t.words,n=this.sigBytes,i=t.sigBytes;if(this.clamp(),n%4)for(var o=0;o>>2]>>>24-o%4*8&255;e[n+o>>>2]|=s<<24-(n+o)%4*8}else for(o=0;o>>2]=r[o>>>2];return this.sigBytes+=i,this},clamp:function clamp(){var e=this.words,r=this.sigBytes;e[r>>>2]&=4294967295<<32-r%4*8,e.length=t.ceil(r/4)},clone:function clone(){var t=i.clone.call(this);return t.words=this.words.slice(0),t},random:function random(e){for(var r=[],n=0;n>>2]>>>24-i%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function parse(t){for(var e=t.length,r=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new o.init(r,e/2)}},u=s.Latin1={stringify:function stringify(t){for(var e=t.words,r=t.sigBytes,n=[],i=0;i>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function parse(t){for(var e=t.length,r=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new o.init(r,e)}},c=s.Utf8={stringify:function stringify(t){try{return decodeURIComponent(escape(u.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function parse(t){return u.parse(unescape(encodeURIComponent(t)))}},f=n.BufferedBlockAlgorithm=i.extend({reset:function reset(){this._data=new o.init,this._nDataBytes=0},_append:function _append(t){"string"==typeof t&&(t=c.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function _process(e){var r=this._data,n=r.words,i=r.sigBytes,s=this.blockSize,a=i/(4*s),u=(a=e?t.ceil(a):t.max((0|a)-this._minBufferSize,0))*s,c=t.min(4*u,i);if(u){for(var f=0;f>>2]>>>24-i%4*8&255)<<16|(e[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|e[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;4>s&&i+.75*s>>6*(3-s)&63));if(e=n.charAt(64))for(;t.length%4;)t.push(e);return t.join("")},parse:function parse(t){var r=t.length,n=this._map;(i=n.charAt(64))&&(-1!=(i=t.indexOf(i))&&(r=i));for(var i=[],o=0,s=0;s>>6-s%4*2;i[o>>>2]|=(a|u)<<24-o%4*8,o++}return e.create(i,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(t){for(var e=v,r=(i=e.lib).WordArray,n=i.Hasher,i=e.algo,o=[],s=[],a=function u(t){return 4294967296*(t-(0|t))|0},u=2,c=0;64>c;){var f;t:{f=u;for(var h=t.sqrt(f),l=2;l<=h;l++)if(!(f%l)){f=!1;break t}f=!0}f&&(8>c&&(o[c]=a(t.pow(u,.5))),s[c]=a(t.pow(u,1/3)),c++),u++}var p=[];i=i.SHA256=n.extend({_doReset:function _doReset(){this._hash=new r.init(o.slice(0))},_doProcessBlock:function _doProcessBlock(t,e){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],a=r[3],u=r[4],c=r[5],f=r[6],h=r[7],l=0;64>l;l++){if(16>l)p[l]=0|t[e+l];else{var g=p[l-15],d=p[l-2];p[l]=((g<<25|g>>>7)^(g<<14|g>>>18)^g>>>3)+p[l-7]+((d<<15|d>>>17)^(d<<13|d>>>19)^d>>>10)+p[l-16]}g=h+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&f)+s[l]+p[l],d=((n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22))+(n&i^n&o^i&o),h=f,f=c,c=u,u=a+g|0,a=o,o=i,i=n,n=g+d|0}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+a|0,r[4]=r[4]+u|0,r[5]=r[5]+c|0,r[6]=r[6]+f|0,r[7]=r[7]+h|0},_doFinalize:function _doFinalize(){var e=this._data,r=e.words,n=8*this._nDataBytes,i=8*e.sigBytes;return r[i>>>5]|=128<<24-i%32,r[14+(i+64>>>9<<4)]=t.floor(n/4294967296),r[15+(i+64>>>9<<4)]=n,e.sigBytes=4*r.length,this._process(),this._hash},clone:function clone(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA256=n._createHelper(i),e.HmacSHA256=n._createHmacHelper(i)}(Math),function(){function a(){return r.create.apply(r,arguments)}for(var t=v,e=t.lib.Hasher,r=(i=t.x64).Word,n=i.WordArray,i=t.algo,o=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317),a(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291,2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899),a(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470,3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],s=[],u=0;80>u;u++)s[u]=a();i=i.SHA512=e.extend({_doReset:function _doReset(){this._hash=new n.init([new r.init(1779033703,4089235720),new r.init(3144134277,2227873595),new r.init(1013904242,4271175723),new r.init(2773480762,1595750129),new r.init(1359893119,2917565137),new r.init(2600822924,725511199),new r.init(528734635,4215389547),new r.init(1541459225,327033209)])},_doProcessBlock:function _doProcessBlock(t,e){for(var r=(h=this._hash.words)[0],n=h[1],i=h[2],a=h[3],u=h[4],c=h[5],f=h[6],h=h[7],l=r.high,p=r.low,g=n.high,d=n.low,v=i.high,y=i.low,m=a.high,S=a.low,_=u.high,b=u.low,w=c.high,F=c.low,E=f.high,x=f.low,k=h.high,A=h.low,P=l,I=p,C=g,R=d,B=v,T=y,M=m,O=S,U=_,N=b,L=w,D=F,j=E,H=x,K=k,V=A,q=0;80>q;q++){var W=s[q];if(16>q)var J=W.high=0|t[e+2*q],z=W.low=0|t[e+2*q+1];else{J=((z=(J=s[q-15]).high)>>>1|(G=J.low)<<31)^(z>>>8|G<<24)^z>>>7;var G=(G>>>1|z<<31)^(G>>>8|z<<24)^(G>>>7|z<<25),Y=((z=(Y=s[q-2]).high)>>>19|(X=Y.low)<<13)^(z<<3|X>>>29)^z>>>6,X=(X>>>19|z<<13)^(X<<3|z>>>29)^(X>>>6|z<<26),$=(z=s[q-7]).high,Q=(Z=s[q-16]).high,Z=Z.low;J=(J=(J=J+$+((z=G+z.low)>>>0>>0?1:0))+Y+((z=z+X)>>>0>>0?1:0))+Q+((z=z+Z)>>>0>>0?1:0);W.high=J,W.low=z}$=U&L^~U&j,Z=N&D^~N&H,W=P&C^P&B^C&B;var tt=I&R^I&T^R&T,et=(G=(P>>>28|I<<4)^(P<<30|I>>>2)^(P<<25|I>>>7),Y=(I>>>28|P<<4)^(I<<30|P>>>2)^(I<<25|P>>>7),(X=o[q]).high),rt=X.low;Q=(Q=(Q=(Q=K+((U>>>14|N<<18)^(U>>>18|N<<14)^(U<<23|N>>>9))+((X=V+((N>>>14|U<<18)^(N>>>18|U<<14)^(N<<23|U>>>9)))>>>0>>0?1:0))+$+((X=X+Z)>>>0>>0?1:0))+et+((X=X+rt)>>>0>>0?1:0))+J+((X=X+z)>>>0>>0?1:0),W=G+W+((z=Y+tt)>>>0>>0?1:0),K=j,V=H,j=L,H=D,L=U,D=N,U=M+Q+((N=O+X|0)>>>0>>0?1:0)|0,M=B,O=T,B=C,T=R,C=P,R=I,P=Q+W+((I=X+z|0)>>>0>>0?1:0)|0}p=r.low=p+I,r.high=l+P+(p>>>0>>0?1:0),d=n.low=d+R,n.high=g+C+(d>>>0>>0?1:0),y=i.low=y+T,i.high=v+B+(y>>>0>>0?1:0),S=a.low=S+O,a.high=m+M+(S>>>0>>0?1:0),b=u.low=b+N,u.high=_+U+(b>>>0>>0?1:0),F=c.low=F+D,c.high=w+L+(F>>>0>>0?1:0),x=f.low=x+H,f.high=E+j+(x>>>0>>0?1:0),A=h.low=A+V,h.high=k+K+(A>>>0>>0?1:0)},_doFinalize:function _doFinalize(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(r/4294967296),e[31+(n+128>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function clone(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32}),t.SHA512=e._createHelper(i),t.HmacSHA512=e._createHmacHelper(i)}(),function(){var t=v,e=(i=t.x64).Word,r=i.WordArray,n=(i=t.algo).SHA512,i=i.SHA384=n.extend({_doReset:function _doReset(){this._hash=new r.init([new e.init(3418070365,3238371032),new e.init(1654270250,914150663),new e.init(2438529370,812702999),new e.init(355462360,4144912697),new e.init(1731405415,4290775857),new e.init(2394180231,1750603025),new e.init(3675008525,1694076839),new e.init(1203062813,3204075428)])},_doFinalize:function _doFinalize(){var t=n._doFinalize.call(this);return t.sigBytes-=16,t}});t.SHA384=n._createHelper(i),t.HmacSHA384=n._createHmacHelper(i)}(); +var v=v||function(t,e){var r={},n=r.lib={},i=n.Base=function(){function n(){}return{extend:function extend(t){n.prototype=this;var e=new n;return t&&e.mixIn(t),e.hasOwnProperty("init")||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function create(){var t=this.extend();return t.init.apply(t,arguments),t},init:function init(){},mixIn:function mixIn(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function clone(){return this.init.prototype.extend(this)}}}(),o=n.WordArray=i.extend({init:function init(t,e){t=this.words=t||[],this.sigBytes=void 0!=e?e:4*t.length},toString:function toString(t){return(t||a).stringify(this)},concat:function concat(t){var e=this.words,r=t.words,n=this.sigBytes,i=t.sigBytes;if(this.clamp(),n%4)for(var o=0;o>>2]>>>24-o%4*8&255;e[n+o>>>2]|=s<<24-(n+o)%4*8}else for(o=0;o>>2]=r[o>>>2];return this.sigBytes+=i,this},clamp:function clamp(){var e=this.words,r=this.sigBytes;e[r>>>2]&=4294967295<<32-r%4*8,e.length=t.ceil(r/4)},clone:function clone(){var t=i.clone.call(this);return t.words=this.words.slice(0),t},random:function random(e){for(var r=[],n=0;n>>2]>>>24-i%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function parse(t){for(var e=t.length,r=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new o.init(r,e/2)}},u=s.Latin1={stringify:function stringify(t){for(var e=t.words,r=t.sigBytes,n=[],i=0;i>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function parse(t){for(var e=t.length,r=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new o.init(r,e)}},c=s.Utf8={stringify:function stringify(t){try{return decodeURIComponent(escape(u.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function parse(t){return u.parse(unescape(encodeURIComponent(t)))}},f=n.BufferedBlockAlgorithm=i.extend({reset:function reset(){this._data=new o.init,this._nDataBytes=0},_append:function _append(t){"string"==typeof t&&(t=c.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function _process(e){var r=this._data,n=r.words,i=r.sigBytes,s=this.blockSize,a=i/(4*s),u=(a=e?t.ceil(a):t.max((0|a)-this._minBufferSize,0))*s,c=t.min(4*u,i);if(u){for(var f=0;f>>2]>>>24-i%4*8&255)<<16|(e[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|e[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;4>s&&i+.75*s>>6*(3-s)&63));if(e=n.charAt(64))for(;t.length%4;)t.push(e);return t.join("")},parse:function parse(t){var r=t.length,n=this._map;(i=n.charAt(64))&&(-1!=(i=t.indexOf(i))&&(r=i));for(var i=[],o=0,s=0;s>>6-s%4*2;i[o>>>2]|=(a|u)<<24-o%4*8,o++}return e.create(i,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(t){for(var e=v,r=(i=e.lib).WordArray,n=i.Hasher,i=e.algo,o=[],s=[],a=function u(t){return 4294967296*(t-(0|t))|0},u=2,c=0;64>c;){var f;t:{f=u;for(var h=t.sqrt(f),l=2;l<=h;l++)if(!(f%l)){f=!1;break t}f=!0}f&&(8>c&&(o[c]=a(t.pow(u,.5))),s[c]=a(t.pow(u,1/3)),c++),u++}var p=[];i=i.SHA256=n.extend({_doReset:function _doReset(){this._hash=new r.init(o.slice(0))},_doProcessBlock:function _doProcessBlock(t,e){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],a=r[3],u=r[4],c=r[5],f=r[6],h=r[7],l=0;64>l;l++){if(16>l)p[l]=0|t[e+l];else{var g=p[l-15],d=p[l-2];p[l]=((g<<25|g>>>7)^(g<<14|g>>>18)^g>>>3)+p[l-7]+((d<<15|d>>>17)^(d<<13|d>>>19)^d>>>10)+p[l-16]}g=h+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&f)+s[l]+p[l],d=((n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22))+(n&i^n&o^i&o),h=f,f=c,c=u,u=a+g|0,a=o,o=i,i=n,n=g+d|0}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+a|0,r[4]=r[4]+u|0,r[5]=r[5]+c|0,r[6]=r[6]+f|0,r[7]=r[7]+h|0},_doFinalize:function _doFinalize(){var e=this._data,r=e.words,n=8*this._nDataBytes,i=8*e.sigBytes;return r[i>>>5]|=128<<24-i%32,r[14+(i+64>>>9<<4)]=t.floor(n/4294967296),r[15+(i+64>>>9<<4)]=n,e.sigBytes=4*r.length,this._process(),this._hash},clone:function clone(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA256=n._createHelper(i),e.HmacSHA256=n._createHmacHelper(i)}(Math),function(){function a(){return r.create.apply(r,arguments)}for(var t=v,e=t.lib.Hasher,r=(i=t.x64).Word,n=i.WordArray,i=t.algo,o=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317),a(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291,2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899),a(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470,3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],s=[],u=0;80>u;u++)s[u]=a();i=i.SHA512=e.extend({_doReset:function _doReset(){this._hash=new n.init([new r.init(1779033703,4089235720),new r.init(3144134277,2227873595),new r.init(1013904242,4271175723),new r.init(2773480762,1595750129),new r.init(1359893119,2917565137),new r.init(2600822924,725511199),new r.init(528734635,4215389547),new r.init(1541459225,327033209)])},_doProcessBlock:function _doProcessBlock(t,e){for(var r=(h=this._hash.words)[0],n=h[1],i=h[2],a=h[3],u=h[4],c=h[5],f=h[6],h=h[7],l=r.high,p=r.low,g=n.high,d=n.low,v=i.high,y=i.low,m=a.high,_=a.low,S=u.high,b=u.low,w=c.high,F=c.low,E=f.high,x=f.low,k=h.high,A=h.low,P=l,I=p,C=g,R=d,B=v,T=y,M=m,O=_,U=S,N=b,L=w,D=F,j=E,H=x,K=k,V=A,q=0;80>q;q++){var W=s[q];if(16>q)var J=W.high=0|t[e+2*q],z=W.low=0|t[e+2*q+1];else{J=((z=(J=s[q-15]).high)>>>1|(G=J.low)<<31)^(z>>>8|G<<24)^z>>>7;var G=(G>>>1|z<<31)^(G>>>8|z<<24)^(G>>>7|z<<25),Y=((z=(Y=s[q-2]).high)>>>19|(X=Y.low)<<13)^(z<<3|X>>>29)^z>>>6,X=(X>>>19|z<<13)^(X<<3|z>>>29)^(X>>>6|z<<26),$=(z=s[q-7]).high,Q=(Z=s[q-16]).high,Z=Z.low;J=(J=(J=J+$+((z=G+z.low)>>>0>>0?1:0))+Y+((z=z+X)>>>0>>0?1:0))+Q+((z=z+Z)>>>0>>0?1:0);W.high=J,W.low=z}$=U&L^~U&j,Z=N&D^~N&H,W=P&C^P&B^C&B;var tt=I&R^I&T^R&T,et=(G=(P>>>28|I<<4)^(P<<30|I>>>2)^(P<<25|I>>>7),Y=(I>>>28|P<<4)^(I<<30|P>>>2)^(I<<25|P>>>7),(X=o[q]).high),rt=X.low;Q=(Q=(Q=(Q=K+((U>>>14|N<<18)^(U>>>18|N<<14)^(U<<23|N>>>9))+((X=V+((N>>>14|U<<18)^(N>>>18|U<<14)^(N<<23|U>>>9)))>>>0>>0?1:0))+$+((X=X+Z)>>>0>>0?1:0))+et+((X=X+rt)>>>0>>0?1:0))+J+((X=X+z)>>>0>>0?1:0),W=G+W+((z=Y+tt)>>>0>>0?1:0),K=j,V=H,j=L,H=D,L=U,D=N,U=M+Q+((N=O+X|0)>>>0>>0?1:0)|0,M=B,O=T,B=C,T=R,C=P,R=I,P=Q+W+((I=X+z|0)>>>0>>0?1:0)|0}p=r.low=p+I,r.high=l+P+(p>>>0>>0?1:0),d=n.low=d+R,n.high=g+C+(d>>>0>>0?1:0),y=i.low=y+T,i.high=v+B+(y>>>0>>0?1:0),_=a.low=_+O,a.high=m+M+(_>>>0>>0?1:0),b=u.low=b+N,u.high=S+U+(b>>>0>>0?1:0),F=c.low=F+D,c.high=w+L+(F>>>0>>0?1:0),x=f.low=x+H,f.high=E+j+(x>>>0>>0?1:0),A=h.low=A+V,h.high=k+K+(A>>>0>>0?1:0)},_doFinalize:function _doFinalize(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(r/4294967296),e[31+(n+128>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function clone(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32}),t.SHA512=e._createHelper(i),t.HmacSHA512=e._createHmacHelper(i)}(),function(){var t=v,e=(i=t.x64).Word,r=i.WordArray,n=(i=t.algo).SHA512,i=i.SHA384=n.extend({_doReset:function _doReset(){this._hash=new r.init([new e.init(3418070365,3238371032),new e.init(1654270250,914150663),new e.init(2438529370,812702999),new e.init(355462360,4144912697),new e.init(1731405415,4290775857),new e.init(2394180231,1750603025),new e.init(3675008525,1694076839),new e.init(1203062813,3204075428)])},_doFinalize:function _doFinalize(){var t=n._doFinalize.call(this);return t.sigBytes-=16,t}});t.SHA384=n._createHelper(i),t.HmacSHA384=n._createHmacHelper(i)}(); /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ */ -var y,S="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",_="=";function hex2b64(t){var e,r,n="";for(e=0;e+3<=t.length;e+=3)r=parseInt(t.substring(e,e+3),16),n+=S.charAt(r>>6)+S.charAt(63&r);if(e+1==t.length?(r=parseInt(t.substring(e,e+1),16),n+=S.charAt(r<<2)):e+2==t.length&&(r=parseInt(t.substring(e,e+2),16),n+=S.charAt(r>>2)+S.charAt((3&r)<<4)),_)for(;(3&n.length)>0;)n+=_;return n}function b64tohex(t){var e,r,n,i="",o=0;for(e=0;e>2),r=3&n,o=1):1==o?(i+=int2char(r<<2|n>>4),r=15&n,o=2):2==o?(i+=int2char(r),i+=int2char(n>>2),r=3&n,o=3):(i+=int2char(r<<2|n>>4),i+=int2char(15&n),o=0));return 1==o&&(i+=int2char(r<<2)),i}function b64toBA(t){var e,r=b64tohex(t),n=new Array;for(e=0;2*e>15;--o>=0;){var u=32767&this[t],c=this[t++]>>15,f=a*u+c*s;i=((u=s*u+((32767&f)<<15)+r[n]+(1073741823&i))>>>30)+(f>>>15)+a*c+(i>>>30),r[n++]=1073741823&u}return i},y=30):"Netscape"!=i.appName?(BigInteger.prototype.am=function am1(t,e,r,n,i,o){for(;--o>=0;){var s=e*this[t++]+r[n]+i;i=Math.floor(s/67108864),r[n++]=67108863&s}return i},y=26):(BigInteger.prototype.am=function am3(t,e,r,n,i,o){for(var s=16383&e,a=e>>14;--o>=0;){var u=16383&this[t],c=this[t++]>>14,f=a*u+c*s;i=((u=s*u+((16383&f)<<14)+r[n]+i)>>28)+(f>>14)+a*c,r[n++]=268435455&u}return i},y=28),BigInteger.prototype.DB=y,BigInteger.prototype.DM=(1<>>16)&&(t=e,r+=16),0!=(e=t>>8)&&(t=e,r+=8),0!=(e=t>>4)&&(t=e,r+=4),0!=(e=t>>2)&&(t=e,r+=2),0!=(e=t>>1)&&(t=e,r+=1),r}function Classic(t){this.m=t}function Montgomery(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,e+=16),0==(255&t)&&(t>>=8,e+=8),0==(15&t)&&(t>>=4,e+=4),0==(3&t)&&(t>>=2,e+=2),0==(1&t)&&++e,e}function cbit(t){for(var e=0;0!=t;)t&=t-1,++e;return e}function NullExp(){}function nNop(t){return t}function Barrett(t){this.r2=nbi(),this.q3=nbi(),BigInteger.ONE.dlShiftTo(2*t.t,this.r2),this.mu=this.r2.divide(t),this.m=t}Classic.prototype.convert=function cConvert(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t},Classic.prototype.revert=function cRevert(t){return t},Classic.prototype.reduce=function cReduce(t){t.divRemTo(this.m,null,t)},Classic.prototype.mulTo=function cMulTo(t,e,r){t.multiplyTo(e,r),this.reduce(r)},Classic.prototype.sqrTo=function cSqrTo(t,e){t.squareTo(e),this.reduce(e)},Montgomery.prototype.convert=function montConvert(t){var e=nbi();return t.abs().dlShiftTo(this.m.t,e),e.divRemTo(this.m,null,e),t.s<0&&e.compareTo(BigInteger.ZERO)>0&&this.m.subTo(e,e),e},Montgomery.prototype.revert=function montRevert(t){var e=nbi();return t.copyTo(e),this.reduce(e),e},Montgomery.prototype.reduce=function montReduce(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(t[r=e+this.m.t]+=this.m.am(0,n,t,e,0,this.m.t);t[r]>=t.DV;)t[r]-=t.DV,t[++r]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)},Montgomery.prototype.mulTo=function montMulTo(t,e,r){t.multiplyTo(e,r),this.reduce(r)},Montgomery.prototype.sqrTo=function montSqrTo(t,e){t.squareTo(e),this.reduce(e)},BigInteger.prototype.copyTo=function bnpCopyTo(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s},BigInteger.prototype.fromInt=function bnpFromInt(t){this.t=1,this.s=t<0?-1:0,t>0?this[0]=t:t<-1?this[0]=t+this.DV:this.t=0},BigInteger.prototype.fromString=function bnpFromString(t,e){var r;if(16==e)r=4;else if(8==e)r=3;else if(256==e)r=8;else if(2==e)r=1;else if(32==e)r=5;else{if(4!=e)return void this.fromRadix(t,e);r=2}this.t=0,this.s=0;for(var n=t.length,i=!1,o=0;--n>=0;){var s=8==r?255&t[n]:intAt(t,n);s<0?"-"==t.charAt(n)&&(i=!0):(i=!1,0==o?this[this.t++]=s:o+r>this.DB?(this[this.t-1]|=(s&(1<>this.DB-o):this[this.t-1]|=s<=this.DB&&(o-=this.DB))}8==r&&0!=(128&t[0])&&(this.s=-1,o>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t},BigInteger.prototype.dlShiftTo=function bnpDLShiftTo(t,e){var r;for(r=this.t-1;r>=0;--r)e[r+t]=this[r];for(r=t-1;r>=0;--r)e[r]=0;e.t=this.t+t,e.s=this.s},BigInteger.prototype.drShiftTo=function bnpDRShiftTo(t,e){for(var r=t;r=0;--r)e[r+s+1]=this[r]>>i|a,a=(this[r]&o)<=0;--r)e[r]=0;e[s]=a,e.t=this.t+s+1,e.s=this.s,e.clamp()},BigInteger.prototype.rShiftTo=function bnpRShiftTo(t,e){e.s=this.s;var r=Math.floor(t/this.DB);if(r>=this.t)e.t=0;else{var n=t%this.DB,i=this.DB-n,o=(1<>n;for(var s=r+1;s>n;n>0&&(e[this.t-r-1]|=(this.s&o)<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n-=t.s}e.s=n<0?-1:0,n<-1?e[r++]=this.DV+n:n>0&&(e[r++]=n),e.t=r,e.clamp()},BigInteger.prototype.multiplyTo=function bnpMultiplyTo(t,e){var r=this.abs(),n=t.abs(),i=r.t;for(e.t=i+n.t;--i>=0;)e[i]=0;for(i=0;i=0;)t[r]=0;for(r=0;r=e.DV&&(t[r+e.t]-=e.DV,t[r+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(r,e[r],t,2*r,0,1)),t.s=0,t.clamp()},BigInteger.prototype.divRemTo=function bnpDivRemTo(t,e,r){var n=t.abs();if(!(n.t<=0)){var i=this.abs();if(i.t0?(n.lShiftTo(u,o),i.lShiftTo(u,r)):(n.copyTo(o),i.copyTo(r));var c=o.t,f=o[c-1];if(0!=f){var h=f*(1<1?o[c-2]>>this.F2:0),l=this.FV/h,p=(1<=0&&(r[r.t++]=1,r.subTo(y,r)),BigInteger.ONE.dlShiftTo(c,y),y.subTo(o,o);o.t=0;){var m=r[--d]==f?this.DM:Math.floor(r[d]*l+(r[d-1]+g)*p);if((r[d]+=o.am(0,m,r,v,0,c))0&&r.rShiftTo(u,r),s<0&&BigInteger.ZERO.subTo(r,r)}}},BigInteger.prototype.invDigit=function bnpInvDigit(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var e=3&t;return(e=(e=(e=(e=e*(2-(15&t)*e)&15)*(2-(255&t)*e)&255)*(2-((65535&t)*e&65535))&65535)*(2-t*e%this.DV)%this.DV)>0?this.DV-e:-e},BigInteger.prototype.isEven=function bnpIsEven(){return 0==(this.t>0?1&this[0]:this.s)},BigInteger.prototype.exp=function bnpExp(t,e){if(t>4294967295||t<1)return BigInteger.ONE;var r=nbi(),n=nbi(),i=e.convert(this),o=nbits(t)-1;for(i.copyTo(r);--o>=0;)if(e.sqrTo(r,n),(t&1<0)e.mulTo(n,i,r);else{var s=r;r=n,n=s}return e.revert(r)},BigInteger.prototype.toString=function bnToString(t){if(this.s<0)return"-"+this.negate().toString(t);var e;if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return this.toRadix(t);e=2}var r,n=(1<0)for(a>a)>0&&(i=!0,o=int2char(r));s>=0;)a>(a+=this.DB-e)):(r=this[s]>>(a-=e)&n,a<=0&&(a+=this.DB,--s)),r>0&&(i=!0),i&&(o+=int2char(r));return i?o:"0"},BigInteger.prototype.negate=function bnNegate(){var t=nbi();return BigInteger.ZERO.subTo(this,t),t},BigInteger.prototype.abs=function bnAbs(){return this.s<0?this.negate():this},BigInteger.prototype.compareTo=function bnCompareTo(t){var e=this.s-t.s;if(0!=e)return e;var r=this.t;if(0!=(e=r-t.t))return this.s<0?-e:e;for(;--r>=0;)if(0!=(e=this[r]-t[r]))return e;return 0},BigInteger.prototype.bitLength=function bnBitLength(){return this.t<=0?0:this.DB*(this.t-1)+nbits(this[this.t-1]^this.s&this.DM)},BigInteger.prototype.mod=function bnMod(t){var e=nbi();return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(BigInteger.ZERO)>0&&t.subTo(e,e),e},BigInteger.prototype.modPowInt=function bnModPowInt(t,e){var r;return r=t<256||e.isEven()?new Classic(e):new Montgomery(e),this.exp(t,r)},BigInteger.ZERO=nbv(0),BigInteger.ONE=nbv(1),NullExp.prototype.convert=nNop,NullExp.prototype.revert=nNop,NullExp.prototype.mulTo=function nMulTo(t,e,r){t.multiplyTo(e,r)},NullExp.prototype.sqrTo=function nSqrTo(t,e){t.squareTo(e)},Barrett.prototype.convert=function barrettConvert(t){if(t.s<0||t.t>2*this.m.t)return t.mod(this.m);if(t.compareTo(this.m)<0)return t;var e=nbi();return t.copyTo(e),this.reduce(e),e},Barrett.prototype.revert=function barrettRevert(t){return t},Barrett.prototype.reduce=function barrettReduce(t){for(t.drShiftTo(this.m.t-1,this.r2),t.t>this.m.t+1&&(t.t=this.m.t+1,t.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);t.compareTo(this.r2)<0;)t.dAddOffset(1,this.m.t+1);for(t.subTo(this.r2,t);t.compareTo(this.m)>=0;)t.subTo(this.m,t)},Barrett.prototype.mulTo=function barrettMulTo(t,e,r){t.multiplyTo(e,r),this.reduce(r)},Barrett.prototype.sqrTo=function barrettSqrTo(t,e){t.squareTo(e),this.reduce(e)};var I=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],C=(1<<26)/I[I.length-1]; +var y,_="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",S="=";function hex2b64(t){var e,r,n="";for(e=0;e+3<=t.length;e+=3)r=parseInt(t.substring(e,e+3),16),n+=_.charAt(r>>6)+_.charAt(63&r);if(e+1==t.length?(r=parseInt(t.substring(e,e+1),16),n+=_.charAt(r<<2)):e+2==t.length&&(r=parseInt(t.substring(e,e+2),16),n+=_.charAt(r>>2)+_.charAt((3&r)<<4)),S)for(;(3&n.length)>0;)n+=S;return n}function b64tohex(t){var e,r,n,i="",o=0;for(e=0;e>2),r=3&n,o=1):1==o?(i+=int2char(r<<2|n>>4),r=15&n,o=2):2==o?(i+=int2char(r),i+=int2char(n>>2),r=3&n,o=3):(i+=int2char(r<<2|n>>4),i+=int2char(15&n),o=0));return 1==o&&(i+=int2char(r<<2)),i}function b64toBA(t){var e,r=b64tohex(t),n=new Array;for(e=0;2*e>15;--o>=0;){var u=32767&this[t],c=this[t++]>>15,f=a*u+c*s;i=((u=s*u+((32767&f)<<15)+r[n]+(1073741823&i))>>>30)+(f>>>15)+a*c+(i>>>30),r[n++]=1073741823&u}return i},y=30):"Netscape"!=i.appName?(BigInteger.prototype.am=function am1(t,e,r,n,i,o){for(;--o>=0;){var s=e*this[t++]+r[n]+i;i=Math.floor(s/67108864),r[n++]=67108863&s}return i},y=26):(BigInteger.prototype.am=function am3(t,e,r,n,i,o){for(var s=16383&e,a=e>>14;--o>=0;){var u=16383&this[t],c=this[t++]>>14,f=a*u+c*s;i=((u=s*u+((16383&f)<<14)+r[n]+i)>>28)+(f>>14)+a*c,r[n++]=268435455&u}return i},y=28),BigInteger.prototype.DB=y,BigInteger.prototype.DM=(1<>>16)&&(t=e,r+=16),0!=(e=t>>8)&&(t=e,r+=8),0!=(e=t>>4)&&(t=e,r+=4),0!=(e=t>>2)&&(t=e,r+=2),0!=(e=t>>1)&&(t=e,r+=1),r}function Classic(t){this.m=t}function Montgomery(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,e+=16),0==(255&t)&&(t>>=8,e+=8),0==(15&t)&&(t>>=4,e+=4),0==(3&t)&&(t>>=2,e+=2),0==(1&t)&&++e,e}function cbit(t){for(var e=0;0!=t;)t&=t-1,++e;return e}function NullExp(){}function nNop(t){return t}function Barrett(t){this.r2=nbi(),this.q3=nbi(),BigInteger.ONE.dlShiftTo(2*t.t,this.r2),this.mu=this.r2.divide(t),this.m=t}Classic.prototype.convert=function cConvert(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t},Classic.prototype.revert=function cRevert(t){return t},Classic.prototype.reduce=function cReduce(t){t.divRemTo(this.m,null,t)},Classic.prototype.mulTo=function cMulTo(t,e,r){t.multiplyTo(e,r),this.reduce(r)},Classic.prototype.sqrTo=function cSqrTo(t,e){t.squareTo(e),this.reduce(e)},Montgomery.prototype.convert=function montConvert(t){var e=nbi();return t.abs().dlShiftTo(this.m.t,e),e.divRemTo(this.m,null,e),t.s<0&&e.compareTo(BigInteger.ZERO)>0&&this.m.subTo(e,e),e},Montgomery.prototype.revert=function montRevert(t){var e=nbi();return t.copyTo(e),this.reduce(e),e},Montgomery.prototype.reduce=function montReduce(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(t[r=e+this.m.t]+=this.m.am(0,n,t,e,0,this.m.t);t[r]>=t.DV;)t[r]-=t.DV,t[++r]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)},Montgomery.prototype.mulTo=function montMulTo(t,e,r){t.multiplyTo(e,r),this.reduce(r)},Montgomery.prototype.sqrTo=function montSqrTo(t,e){t.squareTo(e),this.reduce(e)},BigInteger.prototype.copyTo=function bnpCopyTo(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s},BigInteger.prototype.fromInt=function bnpFromInt(t){this.t=1,this.s=t<0?-1:0,t>0?this[0]=t:t<-1?this[0]=t+this.DV:this.t=0},BigInteger.prototype.fromString=function bnpFromString(t,e){var r;if(16==e)r=4;else if(8==e)r=3;else if(256==e)r=8;else if(2==e)r=1;else if(32==e)r=5;else{if(4!=e)return void this.fromRadix(t,e);r=2}this.t=0,this.s=0;for(var n=t.length,i=!1,o=0;--n>=0;){var s=8==r?255&t[n]:intAt(t,n);s<0?"-"==t.charAt(n)&&(i=!0):(i=!1,0==o?this[this.t++]=s:o+r>this.DB?(this[this.t-1]|=(s&(1<>this.DB-o):this[this.t-1]|=s<=this.DB&&(o-=this.DB))}8==r&&0!=(128&t[0])&&(this.s=-1,o>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t},BigInteger.prototype.dlShiftTo=function bnpDLShiftTo(t,e){var r;for(r=this.t-1;r>=0;--r)e[r+t]=this[r];for(r=t-1;r>=0;--r)e[r]=0;e.t=this.t+t,e.s=this.s},BigInteger.prototype.drShiftTo=function bnpDRShiftTo(t,e){for(var r=t;r=0;--r)e[r+s+1]=this[r]>>i|a,a=(this[r]&o)<=0;--r)e[r]=0;e[s]=a,e.t=this.t+s+1,e.s=this.s,e.clamp()},BigInteger.prototype.rShiftTo=function bnpRShiftTo(t,e){e.s=this.s;var r=Math.floor(t/this.DB);if(r>=this.t)e.t=0;else{var n=t%this.DB,i=this.DB-n,o=(1<>n;for(var s=r+1;s>n;n>0&&(e[this.t-r-1]|=(this.s&o)<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n-=t.s}e.s=n<0?-1:0,n<-1?e[r++]=this.DV+n:n>0&&(e[r++]=n),e.t=r,e.clamp()},BigInteger.prototype.multiplyTo=function bnpMultiplyTo(t,e){var r=this.abs(),n=t.abs(),i=r.t;for(e.t=i+n.t;--i>=0;)e[i]=0;for(i=0;i=0;)t[r]=0;for(r=0;r=e.DV&&(t[r+e.t]-=e.DV,t[r+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(r,e[r],t,2*r,0,1)),t.s=0,t.clamp()},BigInteger.prototype.divRemTo=function bnpDivRemTo(t,e,r){var n=t.abs();if(!(n.t<=0)){var i=this.abs();if(i.t0?(n.lShiftTo(u,o),i.lShiftTo(u,r)):(n.copyTo(o),i.copyTo(r));var c=o.t,f=o[c-1];if(0!=f){var h=f*(1<1?o[c-2]>>this.F2:0),l=this.FV/h,p=(1<=0&&(r[r.t++]=1,r.subTo(y,r)),BigInteger.ONE.dlShiftTo(c,y),y.subTo(o,o);o.t=0;){var m=r[--d]==f?this.DM:Math.floor(r[d]*l+(r[d-1]+g)*p);if((r[d]+=o.am(0,m,r,v,0,c))0&&r.rShiftTo(u,r),s<0&&BigInteger.ZERO.subTo(r,r)}}},BigInteger.prototype.invDigit=function bnpInvDigit(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var e=3&t;return(e=(e=(e=(e=e*(2-(15&t)*e)&15)*(2-(255&t)*e)&255)*(2-((65535&t)*e&65535))&65535)*(2-t*e%this.DV)%this.DV)>0?this.DV-e:-e},BigInteger.prototype.isEven=function bnpIsEven(){return 0==(this.t>0?1&this[0]:this.s)},BigInteger.prototype.exp=function bnpExp(t,e){if(t>4294967295||t<1)return BigInteger.ONE;var r=nbi(),n=nbi(),i=e.convert(this),o=nbits(t)-1;for(i.copyTo(r);--o>=0;)if(e.sqrTo(r,n),(t&1<0)e.mulTo(n,i,r);else{var s=r;r=n,n=s}return e.revert(r)},BigInteger.prototype.toString=function bnToString(t){if(this.s<0)return"-"+this.negate().toString(t);var e;if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return this.toRadix(t);e=2}var r,n=(1<0)for(a>a)>0&&(i=!0,o=int2char(r));s>=0;)a>(a+=this.DB-e)):(r=this[s]>>(a-=e)&n,a<=0&&(a+=this.DB,--s)),r>0&&(i=!0),i&&(o+=int2char(r));return i?o:"0"},BigInteger.prototype.negate=function bnNegate(){var t=nbi();return BigInteger.ZERO.subTo(this,t),t},BigInteger.prototype.abs=function bnAbs(){return this.s<0?this.negate():this},BigInteger.prototype.compareTo=function bnCompareTo(t){var e=this.s-t.s;if(0!=e)return e;var r=this.t;if(0!=(e=r-t.t))return this.s<0?-e:e;for(;--r>=0;)if(0!=(e=this[r]-t[r]))return e;return 0},BigInteger.prototype.bitLength=function bnBitLength(){return this.t<=0?0:this.DB*(this.t-1)+nbits(this[this.t-1]^this.s&this.DM)},BigInteger.prototype.mod=function bnMod(t){var e=nbi();return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(BigInteger.ZERO)>0&&t.subTo(e,e),e},BigInteger.prototype.modPowInt=function bnModPowInt(t,e){var r;return r=t<256||e.isEven()?new Classic(e):new Montgomery(e),this.exp(t,r)},BigInteger.ZERO=nbv(0),BigInteger.ONE=nbv(1),NullExp.prototype.convert=nNop,NullExp.prototype.revert=nNop,NullExp.prototype.mulTo=function nMulTo(t,e,r){t.multiplyTo(e,r)},NullExp.prototype.sqrTo=function nSqrTo(t,e){t.squareTo(e)},Barrett.prototype.convert=function barrettConvert(t){if(t.s<0||t.t>2*this.m.t)return t.mod(this.m);if(t.compareTo(this.m)<0)return t;var e=nbi();return t.copyTo(e),this.reduce(e),e},Barrett.prototype.revert=function barrettRevert(t){return t},Barrett.prototype.reduce=function barrettReduce(t){for(t.drShiftTo(this.m.t-1,this.r2),t.t>this.m.t+1&&(t.t=this.m.t+1,t.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);t.compareTo(this.r2)<0;)t.dAddOffset(1,this.m.t+1);for(t.subTo(this.r2,t);t.compareTo(this.m)>=0;)t.subTo(this.m,t)},Barrett.prototype.mulTo=function barrettMulTo(t,e,r){t.multiplyTo(e,r),this.reduce(r)},Barrett.prototype.sqrTo=function barrettSqrTo(t,e){t.squareTo(e),this.reduce(e)};var I=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],C=(1<<26)/I[I.length-1]; /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ */ function Arcfour(){this.i=0,this.j=0,this.S=new Array}BigInteger.prototype.chunkSize=function bnpChunkSize(t){return Math.floor(Math.LN2*this.DB/Math.log(t))},BigInteger.prototype.toRadix=function bnpToRadix(t){if(null==t&&(t=10),0==this.signum()||t<2||t>36)return"0";var e=this.chunkSize(t),r=Math.pow(t,e),n=nbv(r),i=nbi(),o=nbi(),s="";for(this.divRemTo(n,i,o);i.signum()>0;)s=(r+o.intValue()).toString(t).substr(1)+s,i.divRemTo(n,i,o);return o.intValue().toString(t)+s},BigInteger.prototype.fromRadix=function bnpFromRadix(t,e){this.fromInt(0),null==e&&(e=10);for(var r=this.chunkSize(e),n=Math.pow(e,r),i=!1,o=0,s=0,a=0;a=r&&(this.dMultiply(n),this.dAddOffset(s,0),o=0,s=0))}o>0&&(this.dMultiply(Math.pow(e,o)),this.dAddOffset(s,0)),i&&BigInteger.ZERO.subTo(this,this)},BigInteger.prototype.fromNumber=function bnpFromNumber(t,e,r){if("number"==typeof e)if(t<2)this.fromInt(1);else for(this.fromNumber(t,r),this.testBit(t-1)||this.bitwiseTo(BigInteger.ONE.shiftLeft(t-1),op_or,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(e);)this.dAddOffset(2,0),this.bitLength()>t&&this.subTo(BigInteger.ONE.shiftLeft(t-1),this);else{var n=new Array,i=7&t;n.length=1+(t>>3),e.nextBytes(n),i>0?n[0]&=(1<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n+=t.s}e.s=n<0?-1:0,n>0?e[r++]=n:n<-1&&(e[r++]=this.DV+n),e.t=r,e.clamp()},BigInteger.prototype.dMultiply=function bnpDMultiply(t){this[this.t]=this.am(0,t-1,this,0,0,this.t),++this.t,this.clamp()},BigInteger.prototype.dAddOffset=function bnpDAddOffset(t,e){if(0!=t){for(;this.t<=e;)this[this.t++]=0;for(this[e]+=t;this[e]>=this.DV;)this[e]-=this.DV,++e>=this.t&&(this[this.t++]=0),++this[e]}},BigInteger.prototype.multiplyLowerTo=function bnpMultiplyLowerTo(t,e,r){var n,i=Math.min(this.t+t.t,e);for(r.s=0,r.t=i;i>0;)r[--i]=0;for(n=r.t-this.t;i=0;)r[n]=0;for(n=Math.max(e-this.t,0);n0)if(0==e)r=this[0]%t;else for(var n=this.t-1;n>=0;--n)r=(e*r+this[n])%t;return r},BigInteger.prototype.millerRabin=function bnpMillerRabin(t){var e=this.subtract(BigInteger.ONE),r=e.getLowestSetBit();if(r<=0)return!1;var n=e.shiftRight(r);(t=t+1>>1)>I.length&&(t=I.length);for(var i=nbi(),o=0;or.length;)r.unshift(0);return r},r=this.getX().toBigInteger(),n=this.getY().toBigInteger(),i=e(r,32);return t?n.isEven()?i.unshift(2):i.unshift(3):(i.unshift(4),i=i.concat(e(n,32))),i},ECPointFp.decodeFrom=function(t,e){e[0];var r=e.length-1,n=e.slice(1,1+r/2),i=e.slice(1+r/2,1+r);n.unshift(0),i.unshift(0);var o=new BigInteger(n),s=new BigInteger(i);return new ECPointFp(t,t.fromBigInteger(o),t.fromBigInteger(s))},ECPointFp.decodeFromHex=function(t,e){e.substr(0,2);var r=e.length-2,n=e.substr(2,r/2),i=e.substr(2+r/2,r/2),o=new BigInteger(n,16),s=new BigInteger(i,16);return new ECPointFp(t,t.fromBigInteger(o),t.fromBigInteger(s))},ECPointFp.prototype.add2D=function(t){if(this.isInfinity())return t;if(t.isInfinity())return this;if(this.x.equals(t.x))return this.y.equals(t.y)?this.twice():this.curve.getInfinity();var e=t.x.subtract(this.x),r=t.y.subtract(this.y).divide(e),n=r.square().subtract(this.x).subtract(t.x),i=r.multiply(this.x.subtract(n)).subtract(this.y);return new ECPointFp(this.curve,n,i)},ECPointFp.prototype.twice2D=function(){if(this.isInfinity())return this;if(0==this.y.toBigInteger().signum())return this.curve.getInfinity();var t=this.curve.fromBigInteger(BigInteger.valueOf(2)),e=this.curve.fromBigInteger(BigInteger.valueOf(3)),r=this.x.square().multiply(e).add(this.curve.a).divide(this.y.multiply(t)),n=r.square().subtract(this.x.multiply(t)),i=r.multiply(this.x.subtract(n)).subtract(this.y);return new ECPointFp(this.curve,n,i)},ECPointFp.prototype.multiply2D=function(t){if(this.isInfinity())return this;if(0==t.signum())return this.curve.getInfinity();var e,r=t,n=r.multiply(new BigInteger("3")),i=this.negate(),o=this;for(e=n.bitLength()-2;e>0;--e){o=o.twice();var s=n.testBit(e);s!=r.testBit(e)&&(o=o.add2D(s?this:i))}return o},ECPointFp.prototype.isOnCurve=function(){var t=this.getX().toBigInteger(),e=this.getY().toBigInteger(),r=this.curve.getA().toBigInteger(),n=this.curve.getB().toBigInteger(),i=this.curve.getQ(),o=e.multiply(e).mod(i),s=t.multiply(t).multiply(t).add(r.multiply(t)).add(n).mod(i);return o.equals(s)},ECPointFp.prototype.toString=function(){return"("+this.getX().toBigInteger().toString()+","+this.getY().toBigInteger().toString()+")"},ECPointFp.prototype.validate=function(){var t=this.curve.getQ();if(this.isInfinity())throw new Error("Point is at infinity.");var e=this.getX().toBigInteger(),r=this.getY().toBigInteger();if(e.compareTo(BigInteger.ONE)<0||e.compareTo(t.subtract(BigInteger.ONE))>0)throw new Error("x coordinate out of bounds");if(r.compareTo(BigInteger.ONE)<0||r.compareTo(t.subtract(BigInteger.ONE))>0)throw new Error("y coordinate out of bounds");if(!this.isOnCurve())throw new Error("Point is not on the curve.");if(this.multiply(t).isInfinity())throw new Error("Point is not a scalar multiple of G.");return!0}; /*! Mike Samuel (c) 2009 | code.google.com/p/json-sans-eval */ -var H=function(){var t=new RegExp('(?:false|true|null|[\\{\\}\\[\\]]|(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)|(?:"(?:[^\\0-\\x08\\x0a-\\x1f"\\\\]|\\\\(?:["/\\\\bfnrt]|u[0-9A-Fa-f]{4}))*"))',"g"),e=new RegExp("\\\\(?:([^u])|u(.{4}))","g"),r={'"':'"',"/":"/","\\":"\\",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"};function h(t,e,n){return e?r[e]:String.fromCharCode(parseInt(n,16))}var i=new String(""),o=(Object,Array,Object.hasOwnProperty);return function(r,a){var u,c,f=r.match(t),l=f[0],p=!1;"{"===l?u={}:"["===l?u=[]:(u=[],p=!0);for(var g=[u],d=1-p,v=f.length;d=0;)delete r[i[f]]}return a.call(t,e,r)}({"":u},"")}return u}}();void 0!==K&&K||(e.KJUR=K={}),void 0!==K.asn1&&K.asn1||(K.asn1={}),K.asn1.ASN1Util=new function(){this.integerToByteHex=function(t){var e=t.toString(16);return e.length%2==1&&(e="0"+e),e},this.bigIntToMinTwosComplementsHex=function(t){var e=t.toString(16);if("-"!=e.substr(0,1))e.length%2==1?e="0"+e:e.match(/^[0-7]/)||(e="00"+e);else{var r=e.substr(1).length;r%2==1?r+=1:e.match(/^[0-7]/)||(r+=2);for(var n="",i=0;i15)throw"ASN.1 length too long to represent by 8x: n = "+t.toString(16);return(128+r).toString(16)+e},this.getEncodedHex=function(){return(null==this.hTLV||this.isModified)&&(this.hV=this.getFreshValueHex(),this.hL=this.getLengthHexFromValue(),this.hTLV=this.hT+this.hL+this.hV,this.isModified=!1),this.hTLV},this.getValueHex=function(){return this.getEncodedHex(),this.hV},this.getFreshValueHex=function(){return""}},K.asn1.DERAbstractString=function(t){K.asn1.DERAbstractString.superclass.constructor.call(this);this.getString=function(){return this.s},this.setString=function(t){this.hTLV=null,this.isModified=!0,this.s=t,this.hV=utf8tohex(this.s).toLowerCase()},this.setStringHex=function(t){this.hTLV=null,this.isModified=!0,this.s=null,this.hV=t},this.getFreshValueHex=function(){return this.hV},void 0!==t&&("string"==typeof t?this.setString(t):void 0!==t.str?this.setString(t.str):void 0!==t.hex&&this.setStringHex(t.hex))},p.lang.extend(K.asn1.DERAbstractString,K.asn1.ASN1Object),K.asn1.DERAbstractTime=function(t){K.asn1.DERAbstractTime.superclass.constructor.call(this);this.localDateToUTC=function(t){return utc=t.getTime()+6e4*t.getTimezoneOffset(),new Date(utc)},this.formatDate=function(t,e,r){var n=this.zeroPadding,i=this.localDateToUTC(t),o=String(i.getFullYear());"utc"==e&&(o=o.substr(2,2));var s=o+n(String(i.getMonth()+1),2)+n(String(i.getDate()),2)+n(String(i.getHours()),2)+n(String(i.getMinutes()),2)+n(String(i.getSeconds()),2);if(!0===r){var a=i.getMilliseconds();if(0!=a){var u=n(String(a),3);s=s+"."+(u=u.replace(/[0]+$/,""))}}return s+"Z"},this.zeroPadding=function(t,e){return t.length>=e?t:new Array(e-t.length+1).join("0")+t},this.getString=function(){return this.s},this.setString=function(t){this.hTLV=null,this.isModified=!0,this.s=t,this.hV=stohex(t)},this.setByDateValue=function(t,e,r,n,i,o){var s=new Date(Date.UTC(t,e-1,r,n,i,o,0));this.setByDate(s)},this.getFreshValueHex=function(){return this.hV}},p.lang.extend(K.asn1.DERAbstractTime,K.asn1.ASN1Object),K.asn1.DERAbstractStructured=function(t){K.asn1.DERAbstractString.superclass.constructor.call(this);this.setByASN1ObjectArray=function(t){this.hTLV=null,this.isModified=!0,this.asn1Array=t},this.appendASN1Object=function(t){this.hTLV=null,this.isModified=!0,this.asn1Array.push(t)},this.asn1Array=new Array,void 0!==t&&void 0!==t.array&&(this.asn1Array=t.array)},p.lang.extend(K.asn1.DERAbstractStructured,K.asn1.ASN1Object),K.asn1.DERBoolean=function(){K.asn1.DERBoolean.superclass.constructor.call(this),this.hT="01",this.hTLV="0101ff"},p.lang.extend(K.asn1.DERBoolean,K.asn1.ASN1Object),K.asn1.DERInteger=function(t){K.asn1.DERInteger.superclass.constructor.call(this),this.hT="02",this.setByBigInteger=function(t){this.hTLV=null,this.isModified=!0,this.hV=K.asn1.ASN1Util.bigIntToMinTwosComplementsHex(t)},this.setByInteger=function(t){var e=new BigInteger(String(t),10);this.setByBigInteger(e)},this.setValueHex=function(t){this.hV=t},this.getFreshValueHex=function(){return this.hV},void 0!==t&&(void 0!==t.bigint?this.setByBigInteger(t.bigint):void 0!==t.int?this.setByInteger(t.int):"number"==typeof t?this.setByInteger(t):void 0!==t.hex&&this.setValueHex(t.hex))},p.lang.extend(K.asn1.DERInteger,K.asn1.ASN1Object),K.asn1.DERBitString=function(t){if(void 0!==t&&void 0!==t.obj){var e=K.asn1.ASN1Util.newObject(t.obj);t.hex="00"+e.getEncodedHex()}K.asn1.DERBitString.superclass.constructor.call(this),this.hT="03",this.setHexValueIncludingUnusedBits=function(t){this.hTLV=null,this.isModified=!0,this.hV=t},this.setUnusedBitsAndHexValue=function(t,e){if(t<0||7i.length&&(i=n[r]);return(t=t.replace(i,"::")).slice(1,-1)}function hextoip(t){var e="malformed hex value";if(!t.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/))throw e;if(8!=t.length)return 32==t.length?hextoipv6(t):t;try{return parseInt(t.substr(0,2),16)+"."+parseInt(t.substr(2,2),16)+"."+parseInt(t.substr(4,2),16)+"."+parseInt(t.substr(6,2),16)}catch(t){throw e}}function encodeURIComponentAll(t){for(var e=encodeURIComponent(t),r="",n=0;n"7"?"00"+t:t}W.getLblen=function(t,e){if("8"!=t.substr(e+2,1))return 1;var r=parseInt(t.substr(e+3,1));return 0==r?-1:0=2*o)break;if(a>=200)break;n.push(u),s=u,a++}return n},W.getNthChildIdx=function(t,e,r){return W.getChildIdx(t,e)[r]},W.getIdxbyList=function(t,e,r,n){var i,o,s=W;if(0==r.length){if(void 0!==n&&t.substr(e,2)!==n)throw"checking tag doesn't match: "+t.substr(e,2)+"!="+n;return e}return i=r.shift(),o=s.getChildIdx(t,e),s.getIdxbyList(t,o[i],r,n)},W.getTLVbyList=function(t,e,r,n){var i=W,o=i.getIdxbyList(t,e,r);if(void 0===o)throw"can't find nthList object";if(void 0!==n&&t.substr(o,2)!=n)throw"checking tag doesn't match: "+t.substr(o,2)+"!="+n;return i.getTLV(t,o)},W.getVbyList=function(t,e,r,n,i){var o,s,a=W;if(void 0===(o=a.getIdxbyList(t,e,r,n)))throw"can't find nthList object";return s=a.getV(t,o),!0===i&&(s=s.substr(2)),s},W.hextooidstr=function(t){var e=function h(t,e){return t.length>=e?t:new Array(e-t.length+1).join("0")+t},r=[],n=t.substr(0,2),i=parseInt(n,16);r[0]=new String(Math.floor(i/40)),r[1]=new String(i%40);for(var o=t.substr(2),s=[],a=0;a0&&(f=f+"."+u.join(".")),f},W.dump=function(t,e,r,n){var i=W,o=i.getV,s=i.dump,a=i.getChildIdx,u=t;t instanceof K.asn1.ASN1Object&&(u=t.getEncodedHex());var c=function q(t,e){return t.length<=2*e?t:t.substr(0,e)+"..(total "+t.length/2+"bytes).."+t.substr(t.length-e,e)};void 0===e&&(e={ommit_long_octet:32}),void 0===r&&(r=0),void 0===n&&(n="");var f=e.ommit_long_octet;if("01"==u.substr(r,2))return"00"==(h=o(u,r))?n+"BOOLEAN FALSE\n":n+"BOOLEAN TRUE\n";if("02"==u.substr(r,2))return n+"INTEGER "+c(h=o(u,r),f)+"\n";if("03"==u.substr(r,2))return n+"BITSTRING "+c(h=o(u,r),f)+"\n";if("04"==u.substr(r,2)){var h=o(u,r);if(i.isASN1HEX(h)){var l=n+"OCTETSTRING, encapsulates\n";return l+=s(h,e,0,n+" ")}return n+"OCTETSTRING "+c(h,f)+"\n"}if("05"==u.substr(r,2))return n+"NULL\n";if("06"==u.substr(r,2)){var p=o(u,r),g=K.asn1.ASN1Util.oidHexToInt(p),d=K.asn1.x509.OID.oid2name(g),v=g.replace(/\./g," ");return""!=d?n+"ObjectIdentifier "+d+" ("+v+")\n":n+"ObjectIdentifier ("+v+")\n"}if("0c"==u.substr(r,2))return n+"UTF8String '"+hextoutf8(o(u,r))+"'\n";if("13"==u.substr(r,2))return n+"PrintableString '"+hextoutf8(o(u,r))+"'\n";if("14"==u.substr(r,2))return n+"TeletexString '"+hextoutf8(o(u,r))+"'\n";if("16"==u.substr(r,2))return n+"IA5String '"+hextoutf8(o(u,r))+"'\n";if("17"==u.substr(r,2))return n+"UTCTime "+hextoutf8(o(u,r))+"\n";if("18"==u.substr(r,2))return n+"GeneralizedTime "+hextoutf8(o(u,r))+"\n";if("30"==u.substr(r,2)){if("3000"==u.substr(r,4))return n+"SEQUENCE {}\n";l=n+"SEQUENCE\n";var y=e;if((2==(_=a(u,r)).length||3==_.length)&&"06"==u.substr(_[0],2)&&"04"==u.substr(_[_.length-1],2)){d=i.oidname(o(u,_[0]));var m=JSON.parse(JSON.stringify(e));m.x509ExtName=d,y=m}for(var S=0;S<_.length;S++)l+=s(u,y,_[S],n+" ");return l}if("31"==u.substr(r,2)){l=n+"SET\n";var _=a(u,r);for(S=0;S<_.length;S++)l+=s(u,e,_[S],n+" ");return l}var b=parseInt(u.substr(r,2),16);if(0!=(128&b)){var w=31&b;if(0!=(32&b)){var l=n+"["+w+"]\n";for(_=a(u,r),S=0;S<_.length;S++)l+=s(u,e,_[S],n+" ");return l}return"68747470"==(h=o(u,r)).substr(0,8)&&(h=hextoutf8(h)),"subjectAltName"===e.x509ExtName&&2==w&&(h=hextoutf8(h)),l=n+"["+w+"] "+h+"\n"}return n+"UNKNOWN("+u.substr(r,2)+") "+o(u,r)+"\n"},W.isASN1HEX=function(t){var e=W;if(t.length%2==1)return!1;var r=e.getVblen(t,0),n=t.substr(0,2),i=e.getL(t,0);return t.length-n.length-i.length==2*r},W.oidname=function(t){var e=K.asn1;K.lang.String.isHex(t)&&(t=e.ASN1Util.oidHexToInt(t));var r=e.x509.OID.oid2name(t);return""===r&&(r=t),r},void 0!==K&&K||(e.KJUR=K={}),void 0!==K.lang&&K.lang||(K.lang={}),K.lang.String=function(){},"function"==typeof t?(e.utf8tob64u=V=function utf8tob64u(e){return b64tob64u(new t(e,"utf8").toString("base64"))},e.b64utoutf8=q=function b64utoutf8(e){return new t(b64utob64(e),"base64").toString("utf8")}):(e.utf8tob64u=V=function utf8tob64u(t){return hextob64u(uricmptohex(encodeURIComponentAll(t)))},e.b64utoutf8=q=function b64utoutf8(t){return decodeURIComponent(hextouricmp(b64utohex(t)))}),K.lang.String.isInteger=function(t){return!!t.match(/^[0-9]+$/)||!!t.match(/^-[0-9]+$/)},K.lang.String.isHex=function(t){return!(t.length%2!=0||!t.match(/^[0-9a-f]+$/)&&!t.match(/^[0-9A-F]+$/))},K.lang.String.isBase64=function(t){return!(!(t=t.replace(/\s+/g,"")).match(/^[0-9A-Za-z+\/]+={0,3}$/)||t.length%4!=0)},K.lang.String.isBase64URL=function(t){return!t.match(/[+/=]/)&&(t=b64utob64(t),K.lang.String.isBase64(t))},K.lang.String.isIntegerArray=function(t){return!!(t=t.replace(/\s+/g,"")).match(/^\[[0-9,]+\]$/)};void 0!==K&&K||(e.KJUR=K={}),void 0!==K.crypto&&K.crypto||(K.crypto={}),K.crypto.Util=new function(){this.DIGESTINFOHEAD={sha1:"3021300906052b0e03021a05000414",sha224:"302d300d06096086480165030402040500041c",sha256:"3031300d060960864801650304020105000420",sha384:"3041300d060960864801650304020205000430",sha512:"3051300d060960864801650304020305000440",md2:"3020300c06082a864886f70d020205000410",md5:"3020300c06082a864886f70d020505000410",ripemd160:"3021300906052b2403020105000414"},this.DEFAULTPROVIDER={md5:"cryptojs",sha1:"cryptojs",sha224:"cryptojs",sha256:"cryptojs",sha384:"cryptojs",sha512:"cryptojs",ripemd160:"cryptojs",hmacmd5:"cryptojs",hmacsha1:"cryptojs",hmacsha224:"cryptojs",hmacsha256:"cryptojs",hmacsha384:"cryptojs",hmacsha512:"cryptojs",hmacripemd160:"cryptojs",MD5withRSA:"cryptojs/jsrsa",SHA1withRSA:"cryptojs/jsrsa",SHA224withRSA:"cryptojs/jsrsa",SHA256withRSA:"cryptojs/jsrsa",SHA384withRSA:"cryptojs/jsrsa",SHA512withRSA:"cryptojs/jsrsa",RIPEMD160withRSA:"cryptojs/jsrsa",MD5withECDSA:"cryptojs/jsrsa",SHA1withECDSA:"cryptojs/jsrsa",SHA224withECDSA:"cryptojs/jsrsa",SHA256withECDSA:"cryptojs/jsrsa",SHA384withECDSA:"cryptojs/jsrsa",SHA512withECDSA:"cryptojs/jsrsa",RIPEMD160withECDSA:"cryptojs/jsrsa",SHA1withDSA:"cryptojs/jsrsa",SHA224withDSA:"cryptojs/jsrsa",SHA256withDSA:"cryptojs/jsrsa",MD5withRSAandMGF1:"cryptojs/jsrsa",SHA1withRSAandMGF1:"cryptojs/jsrsa",SHA224withRSAandMGF1:"cryptojs/jsrsa",SHA256withRSAandMGF1:"cryptojs/jsrsa",SHA384withRSAandMGF1:"cryptojs/jsrsa",SHA512withRSAandMGF1:"cryptojs/jsrsa",RIPEMD160withRSAandMGF1:"cryptojs/jsrsa"},this.CRYPTOJSMESSAGEDIGESTNAME={md5:v.algo.MD5,sha1:v.algo.SHA1,sha224:v.algo.SHA224,sha256:v.algo.SHA256,sha384:v.algo.SHA384,sha512:v.algo.SHA512,ripemd160:v.algo.RIPEMD160},this.getDigestInfoHex=function(t,e){if(void 0===this.DIGESTINFOHEAD[e])throw"alg not supported in Util.DIGESTINFOHEAD: "+e;return this.DIGESTINFOHEAD[e]+t},this.getPaddedDigestInfoHex=function(t,e,r){var n=this.getDigestInfoHex(t,e),i=r/4;if(n.length+22>i)throw"key is too short for SigAlg: keylen="+r+","+e;for(var o="0001",s="00"+n,a="",u=i-o.length-s.length,c=0;c=0)return!1;if(r.compareTo(BigInteger.ONE)<0||r.compareTo(i)>=0)return!1;var s=r.modInverse(i),a=t.multiply(s).mod(i),u=e.multiply(s).mod(i);return o.multiply(a).add(n.multiply(u)).getX().toBigInteger().mod(i).equals(e)},this.serializeSig=function(t,e){var r=t.toByteArraySigned(),n=e.toByteArraySigned(),i=[];return i.push(2),i.push(r.length),(i=i.concat(r)).push(2),i.push(n.length),(i=i.concat(n)).unshift(i.length),i.unshift(48),i},this.parseSig=function(t){var e;if(48!=t[0])throw new Error("Signature not a valid DERSequence");if(2!=t[e=2])throw new Error("First element in signature must be a DERInteger");var r=t.slice(e+2,e+2+t[e+1]);if(2!=t[e+=2+t[e+1]])throw new Error("Second element in signature must be a DERInteger");var n=t.slice(e+2,e+2+t[e+1]);return e+=2+t[e+1],{r:BigInteger.fromByteArrayUnsigned(r),s:BigInteger.fromByteArrayUnsigned(n)}},this.parseSigCompact=function(t){if(65!==t.length)throw"Signature has the wrong length";var e=t[0]-27;if(e<0||e>7)throw"Invalid signature type";var r=this.ecparams.n;return{r:BigInteger.fromByteArrayUnsigned(t.slice(1,33)).mod(r),s:BigInteger.fromByteArrayUnsigned(t.slice(33,65)).mod(r),i:e}},this.readPKCS5PrvKeyHex=function(t){var e,r,n,i=W,o=K.crypto.ECDSA.getName,s=i.getVbyList;if(!1===i.isASN1HEX(t))throw"not ASN.1 hex string";try{e=s(t,0,[2,0],"06"),r=s(t,0,[1],"04");try{n=s(t,0,[3,0],"03").substr(2)}catch(t){}}catch(t){throw"malformed PKCS#1/5 plain ECC private key"}if(this.curveName=o(e),void 0===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(n),this.setPrivateKeyHex(r),this.isPublic=!1},this.readPKCS8PrvKeyHex=function(t){var e,r,n,i=W,o=K.crypto.ECDSA.getName,s=i.getVbyList;if(!1===i.isASN1HEX(t))throw"not ASN.1 hex string";try{s(t,0,[1,0],"06"),e=s(t,0,[1,1],"06"),r=s(t,0,[2,0,1],"04");try{n=s(t,0,[2,0,2,0],"03").substr(2)}catch(t){}}catch(t){throw"malformed PKCS#8 plain ECC private key"}if(this.curveName=o(e),void 0===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(n),this.setPrivateKeyHex(r),this.isPublic=!1},this.readPKCS8PubKeyHex=function(t){var e,r,n=W,i=K.crypto.ECDSA.getName,o=n.getVbyList;if(!1===n.isASN1HEX(t))throw"not ASN.1 hex string";try{o(t,0,[0,0],"06"),e=o(t,0,[0,1],"06"),r=o(t,0,[1],"03").substr(2)}catch(t){throw"malformed PKCS#8 ECC public key"}if(this.curveName=i(e),null===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(r)},this.readCertPubKeyHex=function(t,e){5!==e&&(e=6);var r,n,i=W,o=K.crypto.ECDSA.getName,s=i.getVbyList;if(!1===i.isASN1HEX(t))throw"not ASN.1 hex string";try{r=s(t,0,[0,e,0,1],"06"),n=s(t,0,[0,e,1],"03").substr(2)}catch(t){throw"malformed X.509 certificate ECC public key"}if(this.curveName=o(r),null===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(n)},void 0!==t&&void 0!==t.curve&&(this.curveName=t.curve),void 0===this.curveName&&(this.curveName="secp256r1"),this.setNamedCurve(this.curveName),void 0!==t&&(void 0!==t.prv&&this.setPrivateKeyHex(t.prv),void 0!==t.pub&&this.setPublicKeyHex(t.pub))},K.crypto.ECDSA.parseSigHex=function(t){var e=K.crypto.ECDSA.parseSigHexInHexRS(t);return{r:new BigInteger(e.r,16),s:new BigInteger(e.s,16)}},K.crypto.ECDSA.parseSigHexInHexRS=function(t){var e=W,r=e.getChildIdx,n=e.getV;if("30"!=t.substr(0,2))throw"signature is not a ASN.1 sequence";var i=r(t,0);if(2!=i.length)throw"number of signature ASN.1 sequence elements seem wrong";var o=i[0],s=i[1];if("02"!=t.substr(o,2))throw"1st item of sequene of signature is not ASN.1 integer";if("02"!=t.substr(s,2))throw"2nd item of sequene of signature is not ASN.1 integer";return{r:n(t,o),s:n(t,s)}},K.crypto.ECDSA.asn1SigToConcatSig=function(t){var e=K.crypto.ECDSA.parseSigHexInHexRS(t),r=e.r,n=e.s;if("00"==r.substr(0,2)&&r.length%32==2&&(r=r.substr(2)),"00"==n.substr(0,2)&&n.length%32==2&&(n=n.substr(2)),r.length%32==30&&(r="00"+r),n.length%32==30&&(n="00"+n),r.length%32!=0)throw"unknown ECDSA sig r length error";if(n.length%32!=0)throw"unknown ECDSA sig s length error";return r+n},K.crypto.ECDSA.concatSigToASN1Sig=function(t){if(t.length/2*8%128!=0)throw"unknown ECDSA concatinated r-s sig length error";var e=t.substr(0,t.length/2),r=t.substr(t.length/2);return K.crypto.ECDSA.hexRSSigToASN1Sig(e,r)},K.crypto.ECDSA.hexRSSigToASN1Sig=function(t,e){var r=new BigInteger(t,16),n=new BigInteger(e,16);return K.crypto.ECDSA.biRSSigToASN1Sig(r,n)},K.crypto.ECDSA.biRSSigToASN1Sig=function(t,e){var r=K.asn1,n=new r.DERInteger({bigint:t}),i=new r.DERInteger({bigint:e});return new r.DERSequence({array:[n,i]}).getEncodedHex()},K.crypto.ECDSA.getName=function(t){return"2a8648ce3d030107"===t?"secp256r1":"2b8104000a"===t?"secp256k1":"2b81040022"===t?"secp384r1":-1!=="|secp256r1|NIST P-256|P-256|prime256v1|".indexOf(t)?"secp256r1":-1!=="|secp256k1|".indexOf(t)?"secp256k1":-1!=="|secp384r1|NIST P-384|P-384|".indexOf(t)?"secp384r1":null},void 0!==K&&K||(e.KJUR=K={}),void 0!==K.crypto&&K.crypto||(K.crypto={}),K.crypto.ECParameterDB=new function(){var t={},e={};function a(t){return new BigInteger(t,16)}this.getByName=function(r){var n=r;if(void 0!==e[n]&&(n=e[r]),void 0!==t[n])return t[n];throw"unregistered EC curve name: "+n},this.regist=function(r,n,i,o,s,u,c,f,h,l,p,g){t[r]={};var d=a(i),v=a(o),y=a(s),m=a(u),S=a(c),_=new ECCurveFp(d,v,y),b=_.decodePointHex("04"+f+h);t[r].name=r,t[r].keylen=n,t[r].curve=_,t[r].G=b,t[r].n=m,t[r].h=S,t[r].oid=p,t[r].info=g;for(var w=0;w=2*a)break}var h={};return h.keyhex=u.substr(0,2*s[t].keylen),h.ivhex=u.substr(2*s[t].keylen,2*s[t].ivlen),h},p=function b(t,e,r,n){var i=v.enc.Base64.parse(t),o=v.enc.Hex.stringify(i);return(0,s[e].proc)(o,r,n)};return{version:"1.0.0",parsePKCS5PEM:function parsePKCS5PEM(t){return u(t)},getKeyAndUnusedIvByPasscodeAndIvsalt:function getKeyAndUnusedIvByPasscodeAndIvsalt(t,e,r){return c(t,e,r)},decryptKeyB64:function decryptKeyB64(t,e,r,n){return p(t,e,r,n)},getDecryptedKeyHex:function getDecryptedKeyHex(t,e){var r=u(t),n=(r.type,r.cipher),i=r.ivsalt,o=r.data,s=c(n,e,i).keyhex;return p(o,n,s,i)},getEncryptedPKCS5PEMFromPrvKeyHex:function getEncryptedPKCS5PEMFromPrvKeyHex(t,e,r,n,i){var o="";if(void 0!==n&&null!=n||(n="AES-256-CBC"),void 0===s[n])throw"KEYUTIL unsupported algorithm: "+n;void 0!==i&&null!=i||(i=function m(t){var e=v.lib.WordArray.random(t);return v.enc.Hex.stringify(e)}(s[n].ivlen).toUpperCase());var a=function h(t,e,r,n){return(0,s[e].eproc)(t,r,n)}(e,n,c(n,r,i).keyhex,i);o="-----BEGIN "+t+" PRIVATE KEY-----\r\n";return o+="Proc-Type: 4,ENCRYPTED\r\n",o+="DEK-Info: "+n+","+i+"\r\n",o+="\r\n",o+=a.replace(/(.{64})/g,"$1\r\n"),o+="\r\n-----END "+t+" PRIVATE KEY-----\r\n"},parseHexOfEncryptedPKCS8:function parseHexOfEncryptedPKCS8(t){var e=W,r=e.getChildIdx,n=e.getV,i={},o=r(t,0);if(2!=o.length)throw"malformed format: SEQUENCE(0).items != 2: "+o.length;i.ciphertext=n(t,o[1]);var s=r(t,o[0]);if(2!=s.length)throw"malformed format: SEQUENCE(0.0).items != 2: "+s.length;if("2a864886f70d01050d"!=n(t,s[0]))throw"this only supports pkcs5PBES2";var a=r(t,s[1]);if(2!=s.length)throw"malformed format: SEQUENCE(0.0.1).items != 2: "+a.length;var u=r(t,a[1]);if(2!=u.length)throw"malformed format: SEQUENCE(0.0.1.1).items != 2: "+u.length;if("2a864886f70d0307"!=n(t,u[0]))throw"this only supports TripleDES";i.encryptionSchemeAlg="TripleDES",i.encryptionSchemeIV=n(t,u[1]);var c=r(t,a[0]);if(2!=c.length)throw"malformed format: SEQUENCE(0.0.1.0).items != 2: "+c.length;if("2a864886f70d01050c"!=n(t,c[0]))throw"this only supports pkcs5PBKDF2";var f=r(t,c[1]);if(f.length<2)throw"malformed format: SEQUENCE(0.0.1.0.1).items < 2: "+f.length;i.pbkdf2Salt=n(t,f[0]);var h=n(t,f[1]);try{i.pbkdf2Iter=parseInt(h,16)}catch(t){throw"malformed format pbkdf2Iter: "+h}return i},getPBKDF2KeyHexFromParam:function getPBKDF2KeyHexFromParam(t,e){var r=v.enc.Hex.parse(t.pbkdf2Salt),n=t.pbkdf2Iter,i=v.PBKDF2(e,r,{keySize:6,iterations:n});return v.enc.Hex.stringify(i)},_getPlainPKCS8HexFromEncryptedPKCS8PEM:function _getPlainPKCS8HexFromEncryptedPKCS8PEM(t,e){var r=pemtohex(t,"ENCRYPTED PRIVATE KEY"),n=this.parseHexOfEncryptedPKCS8(r),i=J.getPBKDF2KeyHexFromParam(n,e),o={};o.ciphertext=v.enc.Hex.parse(n.ciphertext);var s=v.enc.Hex.parse(i),a=v.enc.Hex.parse(n.encryptionSchemeIV),u=v.TripleDES.decrypt(o,s,{iv:a});return v.enc.Hex.stringify(u)},getKeyFromEncryptedPKCS8PEM:function getKeyFromEncryptedPKCS8PEM(t,e){var r=this._getPlainPKCS8HexFromEncryptedPKCS8PEM(t,e);return this.getKeyFromPlainPrivatePKCS8Hex(r)},parsePlainPrivatePKCS8Hex:function parsePlainPrivatePKCS8Hex(t){var e=W,r=e.getChildIdx,n=e.getV,i={algparam:null};if("30"!=t.substr(0,2))throw"malformed plain PKCS8 private key(code:001)";var o=r(t,0);if(3!=o.length)throw"malformed plain PKCS8 private key(code:002)";if("30"!=t.substr(o[1],2))throw"malformed PKCS8 private key(code:003)";var s=r(t,o[1]);if(2!=s.length)throw"malformed PKCS8 private key(code:004)";if("06"!=t.substr(s[0],2))throw"malformed PKCS8 private key(code:005)";if(i.algoid=n(t,s[0]),"06"==t.substr(s[1],2)&&(i.algparam=n(t,s[1])),"04"!=t.substr(o[2],2))throw"malformed PKCS8 private key(code:006)";return i.keyidx=e.getVidx(t,o[2]),i},getKeyFromPlainPrivatePKCS8PEM:function getKeyFromPlainPrivatePKCS8PEM(t){var e=pemtohex(t,"PRIVATE KEY");return this.getKeyFromPlainPrivatePKCS8Hex(e)},getKeyFromPlainPrivatePKCS8Hex:function getKeyFromPlainPrivatePKCS8Hex(t){var e,r=this.parsePlainPrivatePKCS8Hex(t);if("2a864886f70d010101"==r.algoid)e=new RSAKey;else if("2a8648ce380401"==r.algoid)e=new K.crypto.DSA;else{if("2a8648ce3d0201"!=r.algoid)throw"unsupported private key algorithm";e=new K.crypto.ECDSA}return e.readPKCS8PrvKeyHex(t),e},_getKeyFromPublicPKCS8Hex:function _getKeyFromPublicPKCS8Hex(t){var e,r=W.getVbyList(t,0,[0,0],"06");if("2a864886f70d010101"===r)e=new RSAKey;else if("2a8648ce380401"===r)e=new K.crypto.DSA;else{if("2a8648ce3d0201"!==r)throw"unsupported PKCS#8 public key hex";e=new K.crypto.ECDSA}return e.readPKCS8PubKeyHex(t),e},parsePublicRawRSAKeyHex:function parsePublicRawRSAKeyHex(t){var e=W,r=e.getChildIdx,n=e.getV,i={};if("30"!=t.substr(0,2))throw"malformed RSA key(code:001)";var o=r(t,0);if(2!=o.length)throw"malformed RSA key(code:002)";if("02"!=t.substr(o[0],2))throw"malformed RSA key(code:003)";if(i.n=n(t,o[0]),"02"!=t.substr(o[1],2))throw"malformed RSA key(code:004)";return i.e=n(t,o[1]),i},parsePublicPKCS8Hex:function parsePublicPKCS8Hex(t){var e=W,r=e.getChildIdx,n=e.getV,i={algparam:null},o=r(t,0);if(2!=o.length)throw"outer DERSequence shall have 2 elements: "+o.length;var s=o[0];if("30"!=t.substr(s,2))throw"malformed PKCS8 public key(code:001)";var a=r(t,s);if(2!=a.length)throw"malformed PKCS8 public key(code:002)";if("06"!=t.substr(a[0],2))throw"malformed PKCS8 public key(code:003)";if(i.algoid=n(t,a[0]),"06"==t.substr(a[1],2)?i.algparam=n(t,a[1]):"30"==t.substr(a[1],2)&&(i.algparam={},i.algparam.p=e.getVbyList(t,a[1],[0],"02"),i.algparam.q=e.getVbyList(t,a[1],[1],"02"),i.algparam.g=e.getVbyList(t,a[1],[2],"02")),"03"!=t.substr(o[1],2))throw"malformed PKCS8 public key(code:004)";return i.key=n(t,o[1]).substr(2),i}}}();J.getKey=function(t,e,r){var n=(v=W).getChildIdx,i=(v.getV,v.getVbyList),o=K.crypto,s=o.ECDSA,a=o.DSA,u=RSAKey,c=pemtohex,f=J;if(void 0!==u&&t instanceof u)return t;if(void 0!==s&&t instanceof s)return t;if(void 0!==a&&t instanceof a)return t;if(void 0!==t.curve&&void 0!==t.xy&&void 0===t.d)return new s({pub:t.xy,curve:t.curve});if(void 0!==t.curve&&void 0!==t.d)return new s({prv:t.d,curve:t.curve});if(void 0===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0===t.d)return(A=new u).setPublic(t.n,t.e),A;if(void 0===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0!==t.d&&void 0!==t.p&&void 0!==t.q&&void 0!==t.dp&&void 0!==t.dq&&void 0!==t.co&&void 0===t.qi)return(A=new u).setPrivateEx(t.n,t.e,t.d,t.p,t.q,t.dp,t.dq,t.co),A;if(void 0===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0!==t.d&&void 0===t.p)return(A=new u).setPrivate(t.n,t.e,t.d),A;if(void 0!==t.p&&void 0!==t.q&&void 0!==t.g&&void 0!==t.y&&void 0===t.x)return(A=new a).setPublic(t.p,t.q,t.g,t.y),A;if(void 0!==t.p&&void 0!==t.q&&void 0!==t.g&&void 0!==t.y&&void 0!==t.x)return(A=new a).setPrivate(t.p,t.q,t.g,t.y,t.x),A;if("RSA"===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0===t.d)return(A=new u).setPublic(b64utohex(t.n),b64utohex(t.e)),A;if("RSA"===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0!==t.d&&void 0!==t.p&&void 0!==t.q&&void 0!==t.dp&&void 0!==t.dq&&void 0!==t.qi)return(A=new u).setPrivateEx(b64utohex(t.n),b64utohex(t.e),b64utohex(t.d),b64utohex(t.p),b64utohex(t.q),b64utohex(t.dp),b64utohex(t.dq),b64utohex(t.qi)),A;if("RSA"===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0!==t.d)return(A=new u).setPrivate(b64utohex(t.n),b64utohex(t.e),b64utohex(t.d)),A;if("EC"===t.kty&&void 0!==t.crv&&void 0!==t.x&&void 0!==t.y&&void 0===t.d){var h=(k=new s({curve:t.crv})).ecparams.keylen/4,l="04"+("0000000000"+b64utohex(t.x)).slice(-h)+("0000000000"+b64utohex(t.y)).slice(-h);return k.setPublicKeyHex(l),k}if("EC"===t.kty&&void 0!==t.crv&&void 0!==t.x&&void 0!==t.y&&void 0!==t.d){h=(k=new s({curve:t.crv})).ecparams.keylen/4,l="04"+("0000000000"+b64utohex(t.x)).slice(-h)+("0000000000"+b64utohex(t.y)).slice(-h);var p=("0000000000"+b64utohex(t.d)).slice(-h);return k.setPublicKeyHex(l),k.setPrivateKeyHex(p),k}if("pkcs5prv"===r){var g,d=t,v=W;if(9===(g=n(d,0)).length)(A=new u).readPKCS5PrvKeyHex(d);else if(6===g.length)(A=new a).readPKCS5PrvKeyHex(d);else{if(!(g.length>2&&"04"===d.substr(g[1],2)))throw"unsupported PKCS#1/5 hexadecimal key";(A=new s).readPKCS5PrvKeyHex(d)}return A}if("pkcs8prv"===r)return A=f.getKeyFromPlainPrivatePKCS8Hex(t);if("pkcs8pub"===r)return f._getKeyFromPublicPKCS8Hex(t);if("x509pub"===r)return X509.getPublicKeyFromCertHex(t);if(-1!=t.indexOf("-END CERTIFICATE-",0)||-1!=t.indexOf("-END X509 CERTIFICATE-",0)||-1!=t.indexOf("-END TRUSTED CERTIFICATE-",0))return X509.getPublicKeyFromCertPEM(t);if(-1!=t.indexOf("-END PUBLIC KEY-")){var y=pemtohex(t,"PUBLIC KEY");return f._getKeyFromPublicPKCS8Hex(y)}if(-1!=t.indexOf("-END RSA PRIVATE KEY-")&&-1==t.indexOf("4,ENCRYPTED")){var m=c(t,"RSA PRIVATE KEY");return f.getKey(m,null,"pkcs5prv")}if(-1!=t.indexOf("-END DSA PRIVATE KEY-")&&-1==t.indexOf("4,ENCRYPTED")){var S=i(C=c(t,"DSA PRIVATE KEY"),0,[1],"02"),_=i(C,0,[2],"02"),b=i(C,0,[3],"02"),w=i(C,0,[4],"02"),F=i(C,0,[5],"02");return(A=new a).setPrivate(new BigInteger(S,16),new BigInteger(_,16),new BigInteger(b,16),new BigInteger(w,16),new BigInteger(F,16)),A}if(-1!=t.indexOf("-END PRIVATE KEY-"))return f.getKeyFromPlainPrivatePKCS8PEM(t);if(-1!=t.indexOf("-END RSA PRIVATE KEY-")&&-1!=t.indexOf("4,ENCRYPTED")){var E=f.getDecryptedKeyHex(t,e),x=new RSAKey;return x.readPKCS5PrvKeyHex(E),x}if(-1!=t.indexOf("-END EC PRIVATE KEY-")&&-1!=t.indexOf("4,ENCRYPTED")){var k,A=i(C=f.getDecryptedKeyHex(t,e),0,[1],"04"),P=i(C,0,[2,0],"06"),I=i(C,0,[3,0],"03").substr(2);if(void 0===K.crypto.OID.oidhex2name[P])throw"undefined OID(hex) in KJUR.crypto.OID: "+P;return(k=new s({curve:K.crypto.OID.oidhex2name[P]})).setPublicKeyHex(I),k.setPrivateKeyHex(A),k.isPublic=!1,k}if(-1!=t.indexOf("-END DSA PRIVATE KEY-")&&-1!=t.indexOf("4,ENCRYPTED")){var C;S=i(C=f.getDecryptedKeyHex(t,e),0,[1],"02"),_=i(C,0,[2],"02"),b=i(C,0,[3],"02"),w=i(C,0,[4],"02"),F=i(C,0,[5],"02");return(A=new a).setPrivate(new BigInteger(S,16),new BigInteger(_,16),new BigInteger(b,16),new BigInteger(w,16),new BigInteger(F,16)),A}if(-1!=t.indexOf("-END ENCRYPTED PRIVATE KEY-"))return f.getKeyFromEncryptedPKCS8PEM(t,e);throw"not supported argument"},J.generateKeypair=function(t,e){if("RSA"==t){var r=e;(s=new RSAKey).generate(r,"10001"),s.isPrivate=!0,s.isPublic=!0;var n=new RSAKey,i=s.n.toString(16),o=s.e.toString(16);return n.setPublic(i,o),n.isPrivate=!1,n.isPublic=!0,(a={}).prvKeyObj=s,a.pubKeyObj=n,a}if("EC"==t){var s,a,u=e,c=new K.crypto.ECDSA({curve:u}).generateKeyPairHex();return(s=new K.crypto.ECDSA({curve:u})).setPublicKeyHex(c.ecpubhex),s.setPrivateKeyHex(c.ecprvhex),s.isPrivate=!0,s.isPublic=!1,(n=new K.crypto.ECDSA({curve:u})).setPublicKeyHex(c.ecpubhex),n.isPrivate=!1,n.isPublic=!0,(a={}).prvKeyObj=s,a.pubKeyObj=n,a}throw"unknown algorithm: "+t},J.getPEM=function(t,e,r,n,i,s){var a=K,u=a.asn1,c=u.DERObjectIdentifier,f=u.DERInteger,h=u.ASN1Util.newObject,l=u.x509.SubjectPublicKeyInfo,p=a.crypto,g=p.DSA,d=p.ECDSA,y=RSAKey;function A(t){return h({seq:[{int:0},{int:{bigint:t.n}},{int:t.e},{int:{bigint:t.d}},{int:{bigint:t.p}},{int:{bigint:t.q}},{int:{bigint:t.dmp1}},{int:{bigint:t.dmq1}},{int:{bigint:t.coeff}}]})}function B(t){return h({seq:[{int:1},{octstr:{hex:t.prvKeyHex}},{tag:["a0",!0,{oid:{name:t.curveName}}]},{tag:["a1",!0,{bitstr:{hex:"00"+t.pubKeyHex}}]}]})}function x(t){return h({seq:[{int:0},{int:{bigint:t.p}},{int:{bigint:t.q}},{int:{bigint:t.g}},{int:{bigint:t.y}},{int:{bigint:t.x}}]})}if((void 0!==y&&t instanceof y||void 0!==g&&t instanceof g||void 0!==d&&t instanceof d)&&1==t.isPublic&&(void 0===e||"PKCS8PUB"==e))return hextopem(b=new l(t).getEncodedHex(),"PUBLIC KEY");if("PKCS1PRV"==e&&void 0!==y&&t instanceof y&&(void 0===r||null==r)&&1==t.isPrivate)return hextopem(b=A(t).getEncodedHex(),"RSA PRIVATE KEY");if("PKCS1PRV"==e&&void 0!==d&&t instanceof d&&(void 0===r||null==r)&&1==t.isPrivate){var m=new c({name:t.curveName}).getEncodedHex(),S=B(t).getEncodedHex(),_="";return _+=hextopem(m,"EC PARAMETERS"),_+=hextopem(S,"EC PRIVATE KEY")}if("PKCS1PRV"==e&&void 0!==g&&t instanceof g&&(void 0===r||null==r)&&1==t.isPrivate)return hextopem(b=x(t).getEncodedHex(),"DSA PRIVATE KEY");if("PKCS5PRV"==e&&void 0!==y&&t instanceof y&&void 0!==r&&null!=r&&1==t.isPrivate){var b=A(t).getEncodedHex();return void 0===n&&(n="DES-EDE3-CBC"),this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA",b,r,n,s)}if("PKCS5PRV"==e&&void 0!==d&&t instanceof d&&void 0!==r&&null!=r&&1==t.isPrivate){b=B(t).getEncodedHex();return void 0===n&&(n="DES-EDE3-CBC"),this.getEncryptedPKCS5PEMFromPrvKeyHex("EC",b,r,n,s)}if("PKCS5PRV"==e&&void 0!==g&&t instanceof g&&void 0!==r&&null!=r&&1==t.isPrivate){b=x(t).getEncodedHex();return void 0===n&&(n="DES-EDE3-CBC"),this.getEncryptedPKCS5PEMFromPrvKeyHex("DSA",b,r,n,s)}var w=function o(t,e){var r=F(t,e);return new h({seq:[{seq:[{oid:{name:"pkcs5PBES2"}},{seq:[{seq:[{oid:{name:"pkcs5PBKDF2"}},{seq:[{octstr:{hex:r.pbkdf2Salt}},{int:r.pbkdf2Iter}]}]},{seq:[{oid:{name:"des-EDE3-CBC"}},{octstr:{hex:r.encryptionSchemeIV}}]}]}]},{octstr:{hex:r.ciphertext}}]}).getEncodedHex()},F=function c(t,e){var r=v.lib.WordArray.random(8),n=v.lib.WordArray.random(8),i=v.PBKDF2(e,r,{keySize:6,iterations:100}),o=v.enc.Hex.parse(t),s=v.TripleDES.encrypt(o,i,{iv:n})+"",a={};return a.ciphertext=s,a.pbkdf2Salt=v.enc.Hex.stringify(r),a.pbkdf2Iter=100,a.encryptionSchemeAlg="DES-EDE3-CBC",a.encryptionSchemeIV=v.enc.Hex.stringify(n),a};if("PKCS8PRV"==e&&void 0!=y&&t instanceof y&&1==t.isPrivate){var E=A(t).getEncodedHex();b=h({seq:[{int:0},{seq:[{oid:{name:"rsaEncryption"}},{null:!0}]},{octstr:{hex:E}}]}).getEncodedHex();return void 0===r||null==r?hextopem(b,"PRIVATE KEY"):hextopem(S=w(b,r),"ENCRYPTED PRIVATE KEY")}if("PKCS8PRV"==e&&void 0!==d&&t instanceof d&&1==t.isPrivate){E=new h({seq:[{int:1},{octstr:{hex:t.prvKeyHex}},{tag:["a1",!0,{bitstr:{hex:"00"+t.pubKeyHex}}]}]}).getEncodedHex(),b=h({seq:[{int:0},{seq:[{oid:{name:"ecPublicKey"}},{oid:{name:t.curveName}}]},{octstr:{hex:E}}]}).getEncodedHex();return void 0===r||null==r?hextopem(b,"PRIVATE KEY"):hextopem(S=w(b,r),"ENCRYPTED PRIVATE KEY")}if("PKCS8PRV"==e&&void 0!==g&&t instanceof g&&1==t.isPrivate){E=new f({bigint:t.x}).getEncodedHex(),b=h({seq:[{int:0},{seq:[{oid:{name:"dsa"}},{seq:[{int:{bigint:t.p}},{int:{bigint:t.q}},{int:{bigint:t.g}}]}]},{octstr:{hex:E}}]}).getEncodedHex();return void 0===r||null==r?hextopem(b,"PRIVATE KEY"):hextopem(S=w(b,r),"ENCRYPTED PRIVATE KEY")}throw"unsupported object nor format"},J.getKeyFromCSRPEM=function(t){var e=pemtohex(t,"CERTIFICATE REQUEST");return J.getKeyFromCSRHex(e)},J.getKeyFromCSRHex=function(t){var e=J.parseCSRHex(t);return J.getKey(e.p8pubkeyhex,null,"pkcs8pub")},J.parseCSRHex=function(t){var e=W,r=e.getChildIdx,n=e.getTLV,i={},o=t;if("30"!=o.substr(0,2))throw"malformed CSR(code:001)";var s=r(o,0);if(s.length<1)throw"malformed CSR(code:002)";if("30"!=o.substr(s[0],2))throw"malformed CSR(code:003)";var a=r(o,s[0]);if(a.length<3)throw"malformed CSR(code:004)";return i.p8pubkeyhex=n(o,a[2]),i},J.getJWKFromKey=function(t){var e={};if(t instanceof RSAKey&&t.isPrivate)return e.kty="RSA",e.n=hextob64u(t.n.toString(16)),e.e=hextob64u(t.e.toString(16)),e.d=hextob64u(t.d.toString(16)),e.p=hextob64u(t.p.toString(16)),e.q=hextob64u(t.q.toString(16)),e.dp=hextob64u(t.dmp1.toString(16)),e.dq=hextob64u(t.dmq1.toString(16)),e.qi=hextob64u(t.coeff.toString(16)),e;if(t instanceof RSAKey&&t.isPublic)return e.kty="RSA",e.n=hextob64u(t.n.toString(16)),e.e=hextob64u(t.e.toString(16)),e;if(t instanceof K.crypto.ECDSA&&t.isPrivate){if("P-256"!==(n=t.getShortNISTPCurveName())&&"P-384"!==n)throw"unsupported curve name for JWT: "+n;var r=t.getPublicKeyXYHex();return e.kty="EC",e.crv=n,e.x=hextob64u(r.x),e.y=hextob64u(r.y),e.d=hextob64u(t.prvKeyHex),e}if(t instanceof K.crypto.ECDSA&&t.isPublic){var n;if("P-256"!==(n=t.getShortNISTPCurveName())&&"P-384"!==n)throw"unsupported curve name for JWT: "+n;r=t.getPublicKeyXYHex();return e.kty="EC",e.crv=n,e.x=hextob64u(r.x),e.y=hextob64u(r.y),e}throw"not supported key object"},RSAKey.getPosArrayOfChildrenFromHex=function(t){return W.getChildIdx(t,0)},RSAKey.getHexValueArrayOfChildrenFromHex=function(t){var e,r=W.getV,n=r(t,(e=RSAKey.getPosArrayOfChildrenFromHex(t))[0]),i=r(t,e[1]),o=r(t,e[2]),s=r(t,e[3]),a=r(t,e[4]),u=r(t,e[5]),c=r(t,e[6]),f=r(t,e[7]),h=r(t,e[8]);return(e=new Array).push(n,i,o,s,a,u,c,f,h),e},RSAKey.prototype.readPrivateKeyFromPEMString=function(t){var e=pemtohex(t),r=RSAKey.getHexValueArrayOfChildrenFromHex(e);this.setPrivateEx(r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8])},RSAKey.prototype.readPKCS5PrvKeyHex=function(t){var e=RSAKey.getHexValueArrayOfChildrenFromHex(t);this.setPrivateEx(e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8])},RSAKey.prototype.readPKCS8PrvKeyHex=function(t){var e,r,n,i,o,s,a,u,c=W,f=c.getVbyList;if(!1===c.isASN1HEX(t))throw"not ASN.1 hex string";try{e=f(t,0,[2,0,1],"02"),r=f(t,0,[2,0,2],"02"),n=f(t,0,[2,0,3],"02"),i=f(t,0,[2,0,4],"02"),o=f(t,0,[2,0,5],"02"),s=f(t,0,[2,0,6],"02"),a=f(t,0,[2,0,7],"02"),u=f(t,0,[2,0,8],"02")}catch(t){throw"malformed PKCS#8 plain RSA private key"}this.setPrivateEx(e,r,n,i,o,s,a,u)},RSAKey.prototype.readPKCS5PubKeyHex=function(t){var e=W,r=e.getV;if(!1===e.isASN1HEX(t))throw"keyHex is not ASN.1 hex string";var n=e.getChildIdx(t,0);if(2!==n.length||"02"!==t.substr(n[0],2)||"02"!==t.substr(n[1],2))throw"wrong hex for PKCS#5 public key";var i=r(t,n[0]),o=r(t,n[1]);this.setPublic(i,o)},RSAKey.prototype.readPKCS8PubKeyHex=function(t){var e=W;if(!1===e.isASN1HEX(t))throw"not ASN.1 hex string";if("06092a864886f70d010101"!==e.getTLVbyList(t,0,[0,0]))throw"not PKCS8 RSA public key";var r=e.getTLVbyList(t,0,[1,0]);this.readPKCS5PubKeyHex(r)},RSAKey.prototype.readCertPubKeyHex=function(t,e){var r,n;(r=new X509).readCertHex(t),n=r.getPublicKeyHex(),this.readPKCS8PubKeyHex(n)};var z=new RegExp("");function _zeroPaddingOfSignature(t,e){for(var r="",n=e/4-t.length,i=0;i>24,(16711680&i)>>16,(65280&i)>>8,255&i])))),i+=1;return n}function _rsasign_getAlgNameAndHashFromHexDisgestInfo(t){for(var e in K.crypto.Util.DIGESTINFOHEAD){var r=K.crypto.Util.DIGESTINFOHEAD[e],n=r.length;if(t.substring(0,n)==r)return[e,t.substring(n)]}return[]}function X509(){var t=W,e=t.getChildIdx,r=t.getV,n=t.getTLV,i=t.getVbyList,o=t.getTLVbyList,s=t.getIdxbyList,a=t.getVidx,u=t.oidname,c=X509,f=pemtohex;this.hex=null,this.version=0,this.foffset=0,this.aExtInfo=null,this.getVersion=function(){return null===this.hex||0!==this.version?this.version:"a003020102"!==o(this.hex,0,[0,0])?(this.version=1,this.foffset=-1,1):(this.version=3,3)},this.getSerialNumberHex=function(){return i(this.hex,0,[0,1+this.foffset],"02")},this.getSignatureAlgorithmField=function(){return u(i(this.hex,0,[0,2+this.foffset,0],"06"))},this.getIssuerHex=function(){return o(this.hex,0,[0,3+this.foffset],"30")},this.getIssuerString=function(){return c.hex2dn(this.getIssuerHex())},this.getSubjectHex=function(){return o(this.hex,0,[0,5+this.foffset],"30")},this.getSubjectString=function(){return c.hex2dn(this.getSubjectHex())},this.getNotBefore=function(){var t=i(this.hex,0,[0,4+this.foffset,0]);return t=t.replace(/(..)/g,"%$1"),t=decodeURIComponent(t)},this.getNotAfter=function(){var t=i(this.hex,0,[0,4+this.foffset,1]);return t=t.replace(/(..)/g,"%$1"),t=decodeURIComponent(t)},this.getPublicKeyHex=function(){return t.getTLVbyList(this.hex,0,[0,6+this.foffset],"30")},this.getPublicKeyIdx=function(){return s(this.hex,0,[0,6+this.foffset],"30")},this.getPublicKeyContentIdx=function(){var t=this.getPublicKeyIdx();return s(this.hex,t,[1,0],"30")},this.getPublicKey=function(){return J.getKey(this.getPublicKeyHex(),null,"pkcs8pub")},this.getSignatureAlgorithmName=function(){return u(i(this.hex,0,[1,0],"06"))},this.getSignatureValueHex=function(){return i(this.hex,0,[2],"03",!0)},this.verifySignature=function(t){var e=this.getSignatureAlgorithmName(),r=this.getSignatureValueHex(),n=o(this.hex,0,[0],"30"),i=new K.crypto.Signature({alg:e});return i.init(t),i.updateHex(n),i.verify(r)},this.parseExt=function(){if(3!==this.version)return-1;var r=s(this.hex,0,[0,7,0],"30"),n=e(this.hex,r);this.aExtInfo=new Array;for(var o=0;o0&&(f=new Array(r),(new SecureRandom).nextBytes(f),f=String.fromCharCode.apply(String,f));var h=hextorstr(c(rstrtohex("\0\0\0\0\0\0\0\0"+i+f))),l=[];for(n=0;n>8*u-a&255;for(d[0]&=~v,n=0;nthis.n.bitLength())return 0;var n=_rsasign_getAlgNameAndHashFromHexDisgestInfo(this.doPublic(r).toString(16).replace(/^1f+00/,""));if(0==n.length)return!1;var i=n[0];return n[1]==function a(t){return K.crypto.Util.hashString(t,i)}(t)},RSAKey.prototype.verifyWithMessageHash=function(t,e){var r=parseBigInt(e=(e=e.replace(z,"")).replace(/[ \n]+/g,""),16);if(r.bitLength()>this.n.bitLength())return 0;var n=_rsasign_getAlgNameAndHashFromHexDisgestInfo(this.doPublic(r).toString(16).replace(/^1f+00/,""));if(0==n.length)return!1;n[0];return n[1]==t},RSAKey.prototype.verifyPSS=function(t,r,n,i){var o=function e(t){return K.crypto.Util.hashHex(t,n)}(rstrtohex(t));return void 0===i&&(i=-1),this.verifyWithMessageHashPSS(o,r,n,i)},RSAKey.prototype.verifyWithMessageHashPSS=function(t,e,n,i){var o=new BigInteger(e,16);if(o.bitLength()>this.n.bitLength())return!1;var s,a=function r(t){return K.crypto.Util.hashHex(t,n)},u=hextorstr(t),c=u.length,f=this.n.bitLength()-1,h=Math.ceil(f/8);if(-1===i||void 0===i)i=c;else if(-2===i)i=h-c-2;else if(i<-2)throw"invalid salt length";if(h>8*h-f&255;if(0!=(p.charCodeAt(0)&d))throw"bits beyond keysize not zero";var v=pss_mgf1_str(g,p.length,a),y=[];for(s=0;s0)&&-1==(":"+r.join(":")+":").indexOf(":"+v+":"))throw"algorithm '"+v+"' not accepted in the list";if("none"!=v&&null===e)throw"key shall be specified to verify.";if("string"==typeof e&&-1!=e.indexOf("-----BEGIN ")&&(e=J.getKey(e)),!("RS"!=y&&"PS"!=y||e instanceof i))throw"key shall be a RSAKey obj for RS* and PS* algs";if("ES"==y&&!(e instanceof c))throw"key shall be a ECDSA obj for ES* algs";var m=null;if(void 0===s.jwsalg2sigalg[d.alg])throw"unsupported alg name: "+v;if("none"==(m=s.jwsalg2sigalg[v]))throw"not supported";if("Hmac"==m.substr(0,4)){if(void 0===e)throw"hexadecimal key shall be specified for HMAC";var S=new f({alg:m,pass:e});return S.updateString(p),g==S.doFinal()}if(-1!=m.indexOf("withECDSA")){var _,b=null;try{b=c.concatSigToASN1Sig(g)}catch(t){return!1}return(_=new h({alg:m})).init(e),_.updateString(p),_.verify(b)}return(_=new h({alg:m})).init(e),_.updateString(p),_.verify(g)},K.jws.JWS.parse=function(t){var e,r,n,i=t.split("."),o={};if(2!=i.length&&3!=i.length)throw"malformed sJWS: wrong number of '.' splitted elements";return e=i[0],r=i[1],3==i.length&&(n=i[2]),o.headerObj=K.jws.JWS.readSafeJSONString(q(e)),o.payloadObj=K.jws.JWS.readSafeJSONString(q(r)),o.headerPP=JSON.stringify(o.headerObj,null," "),null==o.payloadObj?o.payloadPP=q(r):o.payloadPP=JSON.stringify(o.payloadObj,null," "),void 0!==n&&(o.sigHex=b64utohex(n)),o},K.jws.JWS.verifyJWT=function(t,e,r){var i=K.jws,o=i.JWS,s=o.readSafeJSONString,a=o.inArray,u=o.includedArray,c=t.split("."),f=c[0],h=c[1],l=(b64utohex(c[2]),s(q(f))),p=s(q(h));if(void 0===l.alg)return!1;if(void 0===r.alg)throw"acceptField.alg shall be specified";if(!a(l.alg,r.alg))return!1;if(void 0!==p.iss&&"object"===n(r.iss)&&!a(p.iss,r.iss))return!1;if(void 0!==p.sub&&"object"===n(r.sub)&&!a(p.sub,r.sub))return!1;if(void 0!==p.aud&&"object"===n(r.aud))if("string"==typeof p.aud){if(!a(p.aud,r.aud))return!1}else if("object"==n(p.aud)&&!u(p.aud,r.aud))return!1;var g=i.IntDate.getNow();return void 0!==r.verifyAt&&"number"==typeof r.verifyAt&&(g=r.verifyAt),void 0!==r.gracePeriod&&"number"==typeof r.gracePeriod||(r.gracePeriod=0),!(void 0!==p.exp&&"number"==typeof p.exp&&p.exp+r.gracePeriode.length&&(r=e.length);for(var n=0;n=0;)delete r[i[f]]}return a.call(t,e,r)}({"":u},"")}return u}}();void 0!==K&&K||(e.KJUR=K={}),void 0!==K.asn1&&K.asn1||(K.asn1={}),K.asn1.ASN1Util=new function(){this.integerToByteHex=function(t){var e=t.toString(16);return e.length%2==1&&(e="0"+e),e},this.bigIntToMinTwosComplementsHex=function(t){var e=t.toString(16);if("-"!=e.substr(0,1))e.length%2==1?e="0"+e:e.match(/^[0-7]/)||(e="00"+e);else{var r=e.substr(1).length;r%2==1?r+=1:e.match(/^[0-7]/)||(r+=2);for(var n="",i=0;i15)throw"ASN.1 length too long to represent by 8x: n = "+t.toString(16);return(128+r).toString(16)+e},this.getEncodedHex=function(){return(null==this.hTLV||this.isModified)&&(this.hV=this.getFreshValueHex(),this.hL=this.getLengthHexFromValue(),this.hTLV=this.hT+this.hL+this.hV,this.isModified=!1),this.hTLV},this.getValueHex=function(){return this.getEncodedHex(),this.hV},this.getFreshValueHex=function(){return""}},K.asn1.DERAbstractString=function(t){K.asn1.DERAbstractString.superclass.constructor.call(this);this.getString=function(){return this.s},this.setString=function(t){this.hTLV=null,this.isModified=!0,this.s=t,this.hV=utf8tohex(this.s).toLowerCase()},this.setStringHex=function(t){this.hTLV=null,this.isModified=!0,this.s=null,this.hV=t},this.getFreshValueHex=function(){return this.hV},void 0!==t&&("string"==typeof t?this.setString(t):void 0!==t.str?this.setString(t.str):void 0!==t.hex&&this.setStringHex(t.hex))},p.lang.extend(K.asn1.DERAbstractString,K.asn1.ASN1Object),K.asn1.DERAbstractTime=function(t){K.asn1.DERAbstractTime.superclass.constructor.call(this);this.localDateToUTC=function(t){return utc=t.getTime()+6e4*t.getTimezoneOffset(),new Date(utc)},this.formatDate=function(t,e,r){var n=this.zeroPadding,i=this.localDateToUTC(t),o=String(i.getFullYear());"utc"==e&&(o=o.substr(2,2));var s=o+n(String(i.getMonth()+1),2)+n(String(i.getDate()),2)+n(String(i.getHours()),2)+n(String(i.getMinutes()),2)+n(String(i.getSeconds()),2);if(!0===r){var a=i.getMilliseconds();if(0!=a){var u=n(String(a),3);s=s+"."+(u=u.replace(/[0]+$/,""))}}return s+"Z"},this.zeroPadding=function(t,e){return t.length>=e?t:new Array(e-t.length+1).join("0")+t},this.getString=function(){return this.s},this.setString=function(t){this.hTLV=null,this.isModified=!0,this.s=t,this.hV=stohex(t)},this.setByDateValue=function(t,e,r,n,i,o){var s=new Date(Date.UTC(t,e-1,r,n,i,o,0));this.setByDate(s)},this.getFreshValueHex=function(){return this.hV}},p.lang.extend(K.asn1.DERAbstractTime,K.asn1.ASN1Object),K.asn1.DERAbstractStructured=function(t){K.asn1.DERAbstractString.superclass.constructor.call(this);this.setByASN1ObjectArray=function(t){this.hTLV=null,this.isModified=!0,this.asn1Array=t},this.appendASN1Object=function(t){this.hTLV=null,this.isModified=!0,this.asn1Array.push(t)},this.asn1Array=new Array,void 0!==t&&void 0!==t.array&&(this.asn1Array=t.array)},p.lang.extend(K.asn1.DERAbstractStructured,K.asn1.ASN1Object),K.asn1.DERBoolean=function(){K.asn1.DERBoolean.superclass.constructor.call(this),this.hT="01",this.hTLV="0101ff"},p.lang.extend(K.asn1.DERBoolean,K.asn1.ASN1Object),K.asn1.DERInteger=function(t){K.asn1.DERInteger.superclass.constructor.call(this),this.hT="02",this.setByBigInteger=function(t){this.hTLV=null,this.isModified=!0,this.hV=K.asn1.ASN1Util.bigIntToMinTwosComplementsHex(t)},this.setByInteger=function(t){var e=new BigInteger(String(t),10);this.setByBigInteger(e)},this.setValueHex=function(t){this.hV=t},this.getFreshValueHex=function(){return this.hV},void 0!==t&&(void 0!==t.bigint?this.setByBigInteger(t.bigint):void 0!==t.int?this.setByInteger(t.int):"number"==typeof t?this.setByInteger(t):void 0!==t.hex&&this.setValueHex(t.hex))},p.lang.extend(K.asn1.DERInteger,K.asn1.ASN1Object),K.asn1.DERBitString=function(t){if(void 0!==t&&void 0!==t.obj){var e=K.asn1.ASN1Util.newObject(t.obj);t.hex="00"+e.getEncodedHex()}K.asn1.DERBitString.superclass.constructor.call(this),this.hT="03",this.setHexValueIncludingUnusedBits=function(t){this.hTLV=null,this.isModified=!0,this.hV=t},this.setUnusedBitsAndHexValue=function(t,e){if(t<0||7i.length&&(i=n[r]);return(t=t.replace(i,"::")).slice(1,-1)}function hextoip(t){var e="malformed hex value";if(!t.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/))throw e;if(8!=t.length)return 32==t.length?hextoipv6(t):t;try{return parseInt(t.substr(0,2),16)+"."+parseInt(t.substr(2,2),16)+"."+parseInt(t.substr(4,2),16)+"."+parseInt(t.substr(6,2),16)}catch(t){throw e}}function encodeURIComponentAll(t){for(var e=encodeURIComponent(t),r="",n=0;n"7"?"00"+t:t}W.getLblen=function(t,e){if("8"!=t.substr(e+2,1))return 1;var r=parseInt(t.substr(e+3,1));return 0==r?-1:0=2*o)break;if(a>=200)break;n.push(u),s=u,a++}return n},W.getNthChildIdx=function(t,e,r){return W.getChildIdx(t,e)[r]},W.getIdxbyList=function(t,e,r,n){var i,o,s=W;if(0==r.length){if(void 0!==n&&t.substr(e,2)!==n)throw"checking tag doesn't match: "+t.substr(e,2)+"!="+n;return e}return i=r.shift(),o=s.getChildIdx(t,e),s.getIdxbyList(t,o[i],r,n)},W.getTLVbyList=function(t,e,r,n){var i=W,o=i.getIdxbyList(t,e,r);if(void 0===o)throw"can't find nthList object";if(void 0!==n&&t.substr(o,2)!=n)throw"checking tag doesn't match: "+t.substr(o,2)+"!="+n;return i.getTLV(t,o)},W.getVbyList=function(t,e,r,n,i){var o,s,a=W;if(void 0===(o=a.getIdxbyList(t,e,r,n)))throw"can't find nthList object";return s=a.getV(t,o),!0===i&&(s=s.substr(2)),s},W.hextooidstr=function(t){var e=function h(t,e){return t.length>=e?t:new Array(e-t.length+1).join("0")+t},r=[],n=t.substr(0,2),i=parseInt(n,16);r[0]=new String(Math.floor(i/40)),r[1]=new String(i%40);for(var o=t.substr(2),s=[],a=0;a0&&(f=f+"."+u.join(".")),f},W.dump=function(t,e,r,n){var i=W,o=i.getV,s=i.dump,a=i.getChildIdx,u=t;t instanceof K.asn1.ASN1Object&&(u=t.getEncodedHex());var c=function q(t,e){return t.length<=2*e?t:t.substr(0,e)+"..(total "+t.length/2+"bytes).."+t.substr(t.length-e,e)};void 0===e&&(e={ommit_long_octet:32}),void 0===r&&(r=0),void 0===n&&(n="");var f=e.ommit_long_octet;if("01"==u.substr(r,2))return"00"==(h=o(u,r))?n+"BOOLEAN FALSE\n":n+"BOOLEAN TRUE\n";if("02"==u.substr(r,2))return n+"INTEGER "+c(h=o(u,r),f)+"\n";if("03"==u.substr(r,2))return n+"BITSTRING "+c(h=o(u,r),f)+"\n";if("04"==u.substr(r,2)){var h=o(u,r);if(i.isASN1HEX(h)){var l=n+"OCTETSTRING, encapsulates\n";return l+=s(h,e,0,n+" ")}return n+"OCTETSTRING "+c(h,f)+"\n"}if("05"==u.substr(r,2))return n+"NULL\n";if("06"==u.substr(r,2)){var p=o(u,r),g=K.asn1.ASN1Util.oidHexToInt(p),d=K.asn1.x509.OID.oid2name(g),v=g.replace(/\./g," ");return""!=d?n+"ObjectIdentifier "+d+" ("+v+")\n":n+"ObjectIdentifier ("+v+")\n"}if("0c"==u.substr(r,2))return n+"UTF8String '"+hextoutf8(o(u,r))+"'\n";if("13"==u.substr(r,2))return n+"PrintableString '"+hextoutf8(o(u,r))+"'\n";if("14"==u.substr(r,2))return n+"TeletexString '"+hextoutf8(o(u,r))+"'\n";if("16"==u.substr(r,2))return n+"IA5String '"+hextoutf8(o(u,r))+"'\n";if("17"==u.substr(r,2))return n+"UTCTime "+hextoutf8(o(u,r))+"\n";if("18"==u.substr(r,2))return n+"GeneralizedTime "+hextoutf8(o(u,r))+"\n";if("30"==u.substr(r,2)){if("3000"==u.substr(r,4))return n+"SEQUENCE {}\n";l=n+"SEQUENCE\n";var y=e;if((2==(S=a(u,r)).length||3==S.length)&&"06"==u.substr(S[0],2)&&"04"==u.substr(S[S.length-1],2)){d=i.oidname(o(u,S[0]));var m=JSON.parse(JSON.stringify(e));m.x509ExtName=d,y=m}for(var _=0;_i)throw"key is too short for SigAlg: keylen="+r+","+e;for(var o="0001",s="00"+n,a="",u=i-o.length-s.length,c=0;c=0)return!1;if(r.compareTo(BigInteger.ONE)<0||r.compareTo(i)>=0)return!1;var s=r.modInverse(i),a=t.multiply(s).mod(i),u=e.multiply(s).mod(i);return o.multiply(a).add(n.multiply(u)).getX().toBigInteger().mod(i).equals(e)},this.serializeSig=function(t,e){var r=t.toByteArraySigned(),n=e.toByteArraySigned(),i=[];return i.push(2),i.push(r.length),(i=i.concat(r)).push(2),i.push(n.length),(i=i.concat(n)).unshift(i.length),i.unshift(48),i},this.parseSig=function(t){var e;if(48!=t[0])throw new Error("Signature not a valid DERSequence");if(2!=t[e=2])throw new Error("First element in signature must be a DERInteger");var r=t.slice(e+2,e+2+t[e+1]);if(2!=t[e+=2+t[e+1]])throw new Error("Second element in signature must be a DERInteger");var n=t.slice(e+2,e+2+t[e+1]);return e+=2+t[e+1],{r:BigInteger.fromByteArrayUnsigned(r),s:BigInteger.fromByteArrayUnsigned(n)}},this.parseSigCompact=function(t){if(65!==t.length)throw"Signature has the wrong length";var e=t[0]-27;if(e<0||e>7)throw"Invalid signature type";var r=this.ecparams.n;return{r:BigInteger.fromByteArrayUnsigned(t.slice(1,33)).mod(r),s:BigInteger.fromByteArrayUnsigned(t.slice(33,65)).mod(r),i:e}},this.readPKCS5PrvKeyHex=function(t){var e,r,n,i=W,o=K.crypto.ECDSA.getName,s=i.getVbyList;if(!1===i.isASN1HEX(t))throw"not ASN.1 hex string";try{e=s(t,0,[2,0],"06"),r=s(t,0,[1],"04");try{n=s(t,0,[3,0],"03").substr(2)}catch(t){}}catch(t){throw"malformed PKCS#1/5 plain ECC private key"}if(this.curveName=o(e),void 0===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(n),this.setPrivateKeyHex(r),this.isPublic=!1},this.readPKCS8PrvKeyHex=function(t){var e,r,n,i=W,o=K.crypto.ECDSA.getName,s=i.getVbyList;if(!1===i.isASN1HEX(t))throw"not ASN.1 hex string";try{s(t,0,[1,0],"06"),e=s(t,0,[1,1],"06"),r=s(t,0,[2,0,1],"04");try{n=s(t,0,[2,0,2,0],"03").substr(2)}catch(t){}}catch(t){throw"malformed PKCS#8 plain ECC private key"}if(this.curveName=o(e),void 0===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(n),this.setPrivateKeyHex(r),this.isPublic=!1},this.readPKCS8PubKeyHex=function(t){var e,r,n=W,i=K.crypto.ECDSA.getName,o=n.getVbyList;if(!1===n.isASN1HEX(t))throw"not ASN.1 hex string";try{o(t,0,[0,0],"06"),e=o(t,0,[0,1],"06"),r=o(t,0,[1],"03").substr(2)}catch(t){throw"malformed PKCS#8 ECC public key"}if(this.curveName=i(e),null===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(r)},this.readCertPubKeyHex=function(t,e){5!==e&&(e=6);var r,n,i=W,o=K.crypto.ECDSA.getName,s=i.getVbyList;if(!1===i.isASN1HEX(t))throw"not ASN.1 hex string";try{r=s(t,0,[0,e,0,1],"06"),n=s(t,0,[0,e,1],"03").substr(2)}catch(t){throw"malformed X.509 certificate ECC public key"}if(this.curveName=o(r),null===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(n)},void 0!==t&&void 0!==t.curve&&(this.curveName=t.curve),void 0===this.curveName&&(this.curveName="secp256r1"),this.setNamedCurve(this.curveName),void 0!==t&&(void 0!==t.prv&&this.setPrivateKeyHex(t.prv),void 0!==t.pub&&this.setPublicKeyHex(t.pub))},K.crypto.ECDSA.parseSigHex=function(t){var e=K.crypto.ECDSA.parseSigHexInHexRS(t);return{r:new BigInteger(e.r,16),s:new BigInteger(e.s,16)}},K.crypto.ECDSA.parseSigHexInHexRS=function(t){var e=W,r=e.getChildIdx,n=e.getV;if("30"!=t.substr(0,2))throw"signature is not a ASN.1 sequence";var i=r(t,0);if(2!=i.length)throw"number of signature ASN.1 sequence elements seem wrong";var o=i[0],s=i[1];if("02"!=t.substr(o,2))throw"1st item of sequene of signature is not ASN.1 integer";if("02"!=t.substr(s,2))throw"2nd item of sequene of signature is not ASN.1 integer";return{r:n(t,o),s:n(t,s)}},K.crypto.ECDSA.asn1SigToConcatSig=function(t){var e=K.crypto.ECDSA.parseSigHexInHexRS(t),r=e.r,n=e.s;if("00"==r.substr(0,2)&&r.length%32==2&&(r=r.substr(2)),"00"==n.substr(0,2)&&n.length%32==2&&(n=n.substr(2)),r.length%32==30&&(r="00"+r),n.length%32==30&&(n="00"+n),r.length%32!=0)throw"unknown ECDSA sig r length error";if(n.length%32!=0)throw"unknown ECDSA sig s length error";return r+n},K.crypto.ECDSA.concatSigToASN1Sig=function(t){if(t.length/2*8%128!=0)throw"unknown ECDSA concatinated r-s sig length error";var e=t.substr(0,t.length/2),r=t.substr(t.length/2);return K.crypto.ECDSA.hexRSSigToASN1Sig(e,r)},K.crypto.ECDSA.hexRSSigToASN1Sig=function(t,e){var r=new BigInteger(t,16),n=new BigInteger(e,16);return K.crypto.ECDSA.biRSSigToASN1Sig(r,n)},K.crypto.ECDSA.biRSSigToASN1Sig=function(t,e){var r=K.asn1,n=new r.DERInteger({bigint:t}),i=new r.DERInteger({bigint:e});return new r.DERSequence({array:[n,i]}).getEncodedHex()},K.crypto.ECDSA.getName=function(t){return"2a8648ce3d030107"===t?"secp256r1":"2b8104000a"===t?"secp256k1":"2b81040022"===t?"secp384r1":-1!=="|secp256r1|NIST P-256|P-256|prime256v1|".indexOf(t)?"secp256r1":-1!=="|secp256k1|".indexOf(t)?"secp256k1":-1!=="|secp384r1|NIST P-384|P-384|".indexOf(t)?"secp384r1":null},void 0!==K&&K||(e.KJUR=K={}),void 0!==K.crypto&&K.crypto||(K.crypto={}),K.crypto.ECParameterDB=new function(){var t={},e={};function a(t){return new BigInteger(t,16)}this.getByName=function(r){var n=r;if(void 0!==e[n]&&(n=e[r]),void 0!==t[n])return t[n];throw"unregistered EC curve name: "+n},this.regist=function(r,n,i,o,s,u,c,f,h,l,p,g){t[r]={};var d=a(i),v=a(o),y=a(s),m=a(u),_=a(c),S=new ECCurveFp(d,v,y),b=S.decodePointHex("04"+f+h);t[r].name=r,t[r].keylen=n,t[r].curve=S,t[r].G=b,t[r].n=m,t[r].h=_,t[r].oid=p,t[r].info=g;for(var w=0;w=2*a)break}var h={};return h.keyhex=u.substr(0,2*s[t].keylen),h.ivhex=u.substr(2*s[t].keylen,2*s[t].ivlen),h},p=function b(t,e,r,n){var i=v.enc.Base64.parse(t),o=v.enc.Hex.stringify(i);return(0,s[e].proc)(o,r,n)};return{version:"1.0.0",parsePKCS5PEM:function parsePKCS5PEM(t){return u(t)},getKeyAndUnusedIvByPasscodeAndIvsalt:function getKeyAndUnusedIvByPasscodeAndIvsalt(t,e,r){return c(t,e,r)},decryptKeyB64:function decryptKeyB64(t,e,r,n){return p(t,e,r,n)},getDecryptedKeyHex:function getDecryptedKeyHex(t,e){var r=u(t),n=(r.type,r.cipher),i=r.ivsalt,o=r.data,s=c(n,e,i).keyhex;return p(o,n,s,i)},getEncryptedPKCS5PEMFromPrvKeyHex:function getEncryptedPKCS5PEMFromPrvKeyHex(t,e,r,n,i){var o="";if(void 0!==n&&null!=n||(n="AES-256-CBC"),void 0===s[n])throw"KEYUTIL unsupported algorithm: "+n;void 0!==i&&null!=i||(i=function m(t){var e=v.lib.WordArray.random(t);return v.enc.Hex.stringify(e)}(s[n].ivlen).toUpperCase());var a=function h(t,e,r,n){return(0,s[e].eproc)(t,r,n)}(e,n,c(n,r,i).keyhex,i);o="-----BEGIN "+t+" PRIVATE KEY-----\r\n";return o+="Proc-Type: 4,ENCRYPTED\r\n",o+="DEK-Info: "+n+","+i+"\r\n",o+="\r\n",o+=a.replace(/(.{64})/g,"$1\r\n"),o+="\r\n-----END "+t+" PRIVATE KEY-----\r\n"},parseHexOfEncryptedPKCS8:function parseHexOfEncryptedPKCS8(t){var e=W,r=e.getChildIdx,n=e.getV,i={},o=r(t,0);if(2!=o.length)throw"malformed format: SEQUENCE(0).items != 2: "+o.length;i.ciphertext=n(t,o[1]);var s=r(t,o[0]);if(2!=s.length)throw"malformed format: SEQUENCE(0.0).items != 2: "+s.length;if("2a864886f70d01050d"!=n(t,s[0]))throw"this only supports pkcs5PBES2";var a=r(t,s[1]);if(2!=s.length)throw"malformed format: SEQUENCE(0.0.1).items != 2: "+a.length;var u=r(t,a[1]);if(2!=u.length)throw"malformed format: SEQUENCE(0.0.1.1).items != 2: "+u.length;if("2a864886f70d0307"!=n(t,u[0]))throw"this only supports TripleDES";i.encryptionSchemeAlg="TripleDES",i.encryptionSchemeIV=n(t,u[1]);var c=r(t,a[0]);if(2!=c.length)throw"malformed format: SEQUENCE(0.0.1.0).items != 2: "+c.length;if("2a864886f70d01050c"!=n(t,c[0]))throw"this only supports pkcs5PBKDF2";var f=r(t,c[1]);if(f.length<2)throw"malformed format: SEQUENCE(0.0.1.0.1).items < 2: "+f.length;i.pbkdf2Salt=n(t,f[0]);var h=n(t,f[1]);try{i.pbkdf2Iter=parseInt(h,16)}catch(t){throw"malformed format pbkdf2Iter: "+h}return i},getPBKDF2KeyHexFromParam:function getPBKDF2KeyHexFromParam(t,e){var r=v.enc.Hex.parse(t.pbkdf2Salt),n=t.pbkdf2Iter,i=v.PBKDF2(e,r,{keySize:6,iterations:n});return v.enc.Hex.stringify(i)},_getPlainPKCS8HexFromEncryptedPKCS8PEM:function _getPlainPKCS8HexFromEncryptedPKCS8PEM(t,e){var r=pemtohex(t,"ENCRYPTED PRIVATE KEY"),n=this.parseHexOfEncryptedPKCS8(r),i=J.getPBKDF2KeyHexFromParam(n,e),o={};o.ciphertext=v.enc.Hex.parse(n.ciphertext);var s=v.enc.Hex.parse(i),a=v.enc.Hex.parse(n.encryptionSchemeIV),u=v.TripleDES.decrypt(o,s,{iv:a});return v.enc.Hex.stringify(u)},getKeyFromEncryptedPKCS8PEM:function getKeyFromEncryptedPKCS8PEM(t,e){var r=this._getPlainPKCS8HexFromEncryptedPKCS8PEM(t,e);return this.getKeyFromPlainPrivatePKCS8Hex(r)},parsePlainPrivatePKCS8Hex:function parsePlainPrivatePKCS8Hex(t){var e=W,r=e.getChildIdx,n=e.getV,i={algparam:null};if("30"!=t.substr(0,2))throw"malformed plain PKCS8 private key(code:001)";var o=r(t,0);if(3!=o.length)throw"malformed plain PKCS8 private key(code:002)";if("30"!=t.substr(o[1],2))throw"malformed PKCS8 private key(code:003)";var s=r(t,o[1]);if(2!=s.length)throw"malformed PKCS8 private key(code:004)";if("06"!=t.substr(s[0],2))throw"malformed PKCS8 private key(code:005)";if(i.algoid=n(t,s[0]),"06"==t.substr(s[1],2)&&(i.algparam=n(t,s[1])),"04"!=t.substr(o[2],2))throw"malformed PKCS8 private key(code:006)";return i.keyidx=e.getVidx(t,o[2]),i},getKeyFromPlainPrivatePKCS8PEM:function getKeyFromPlainPrivatePKCS8PEM(t){var e=pemtohex(t,"PRIVATE KEY");return this.getKeyFromPlainPrivatePKCS8Hex(e)},getKeyFromPlainPrivatePKCS8Hex:function getKeyFromPlainPrivatePKCS8Hex(t){var e,r=this.parsePlainPrivatePKCS8Hex(t);if("2a864886f70d010101"==r.algoid)e=new RSAKey;else if("2a8648ce380401"==r.algoid)e=new K.crypto.DSA;else{if("2a8648ce3d0201"!=r.algoid)throw"unsupported private key algorithm";e=new K.crypto.ECDSA}return e.readPKCS8PrvKeyHex(t),e},_getKeyFromPublicPKCS8Hex:function _getKeyFromPublicPKCS8Hex(t){var e,r=W.getVbyList(t,0,[0,0],"06");if("2a864886f70d010101"===r)e=new RSAKey;else if("2a8648ce380401"===r)e=new K.crypto.DSA;else{if("2a8648ce3d0201"!==r)throw"unsupported PKCS#8 public key hex";e=new K.crypto.ECDSA}return e.readPKCS8PubKeyHex(t),e},parsePublicRawRSAKeyHex:function parsePublicRawRSAKeyHex(t){var e=W,r=e.getChildIdx,n=e.getV,i={};if("30"!=t.substr(0,2))throw"malformed RSA key(code:001)";var o=r(t,0);if(2!=o.length)throw"malformed RSA key(code:002)";if("02"!=t.substr(o[0],2))throw"malformed RSA key(code:003)";if(i.n=n(t,o[0]),"02"!=t.substr(o[1],2))throw"malformed RSA key(code:004)";return i.e=n(t,o[1]),i},parsePublicPKCS8Hex:function parsePublicPKCS8Hex(t){var e=W,r=e.getChildIdx,n=e.getV,i={algparam:null},o=r(t,0);if(2!=o.length)throw"outer DERSequence shall have 2 elements: "+o.length;var s=o[0];if("30"!=t.substr(s,2))throw"malformed PKCS8 public key(code:001)";var a=r(t,s);if(2!=a.length)throw"malformed PKCS8 public key(code:002)";if("06"!=t.substr(a[0],2))throw"malformed PKCS8 public key(code:003)";if(i.algoid=n(t,a[0]),"06"==t.substr(a[1],2)?i.algparam=n(t,a[1]):"30"==t.substr(a[1],2)&&(i.algparam={},i.algparam.p=e.getVbyList(t,a[1],[0],"02"),i.algparam.q=e.getVbyList(t,a[1],[1],"02"),i.algparam.g=e.getVbyList(t,a[1],[2],"02")),"03"!=t.substr(o[1],2))throw"malformed PKCS8 public key(code:004)";return i.key=n(t,o[1]).substr(2),i}}}();J.getKey=function(t,e,r){var n=(v=W).getChildIdx,i=(v.getV,v.getVbyList),o=K.crypto,s=o.ECDSA,a=o.DSA,u=RSAKey,c=pemtohex,f=J;if(void 0!==u&&t instanceof u)return t;if(void 0!==s&&t instanceof s)return t;if(void 0!==a&&t instanceof a)return t;if(void 0!==t.curve&&void 0!==t.xy&&void 0===t.d)return new s({pub:t.xy,curve:t.curve});if(void 0!==t.curve&&void 0!==t.d)return new s({prv:t.d,curve:t.curve});if(void 0===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0===t.d)return(A=new u).setPublic(t.n,t.e),A;if(void 0===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0!==t.d&&void 0!==t.p&&void 0!==t.q&&void 0!==t.dp&&void 0!==t.dq&&void 0!==t.co&&void 0===t.qi)return(A=new u).setPrivateEx(t.n,t.e,t.d,t.p,t.q,t.dp,t.dq,t.co),A;if(void 0===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0!==t.d&&void 0===t.p)return(A=new u).setPrivate(t.n,t.e,t.d),A;if(void 0!==t.p&&void 0!==t.q&&void 0!==t.g&&void 0!==t.y&&void 0===t.x)return(A=new a).setPublic(t.p,t.q,t.g,t.y),A;if(void 0!==t.p&&void 0!==t.q&&void 0!==t.g&&void 0!==t.y&&void 0!==t.x)return(A=new a).setPrivate(t.p,t.q,t.g,t.y,t.x),A;if("RSA"===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0===t.d)return(A=new u).setPublic(b64utohex(t.n),b64utohex(t.e)),A;if("RSA"===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0!==t.d&&void 0!==t.p&&void 0!==t.q&&void 0!==t.dp&&void 0!==t.dq&&void 0!==t.qi)return(A=new u).setPrivateEx(b64utohex(t.n),b64utohex(t.e),b64utohex(t.d),b64utohex(t.p),b64utohex(t.q),b64utohex(t.dp),b64utohex(t.dq),b64utohex(t.qi)),A;if("RSA"===t.kty&&void 0!==t.n&&void 0!==t.e&&void 0!==t.d)return(A=new u).setPrivate(b64utohex(t.n),b64utohex(t.e),b64utohex(t.d)),A;if("EC"===t.kty&&void 0!==t.crv&&void 0!==t.x&&void 0!==t.y&&void 0===t.d){var h=(k=new s({curve:t.crv})).ecparams.keylen/4,l="04"+("0000000000"+b64utohex(t.x)).slice(-h)+("0000000000"+b64utohex(t.y)).slice(-h);return k.setPublicKeyHex(l),k}if("EC"===t.kty&&void 0!==t.crv&&void 0!==t.x&&void 0!==t.y&&void 0!==t.d){h=(k=new s({curve:t.crv})).ecparams.keylen/4,l="04"+("0000000000"+b64utohex(t.x)).slice(-h)+("0000000000"+b64utohex(t.y)).slice(-h);var p=("0000000000"+b64utohex(t.d)).slice(-h);return k.setPublicKeyHex(l),k.setPrivateKeyHex(p),k}if("pkcs5prv"===r){var g,d=t,v=W;if(9===(g=n(d,0)).length)(A=new u).readPKCS5PrvKeyHex(d);else if(6===g.length)(A=new a).readPKCS5PrvKeyHex(d);else{if(!(g.length>2&&"04"===d.substr(g[1],2)))throw"unsupported PKCS#1/5 hexadecimal key";(A=new s).readPKCS5PrvKeyHex(d)}return A}if("pkcs8prv"===r)return A=f.getKeyFromPlainPrivatePKCS8Hex(t);if("pkcs8pub"===r)return f._getKeyFromPublicPKCS8Hex(t);if("x509pub"===r)return X509.getPublicKeyFromCertHex(t);if(-1!=t.indexOf("-END CERTIFICATE-",0)||-1!=t.indexOf("-END X509 CERTIFICATE-",0)||-1!=t.indexOf("-END TRUSTED CERTIFICATE-",0))return X509.getPublicKeyFromCertPEM(t);if(-1!=t.indexOf("-END PUBLIC KEY-")){var y=pemtohex(t,"PUBLIC KEY");return f._getKeyFromPublicPKCS8Hex(y)}if(-1!=t.indexOf("-END RSA PRIVATE KEY-")&&-1==t.indexOf("4,ENCRYPTED")){var m=c(t,"RSA PRIVATE KEY");return f.getKey(m,null,"pkcs5prv")}if(-1!=t.indexOf("-END DSA PRIVATE KEY-")&&-1==t.indexOf("4,ENCRYPTED")){var _=i(C=c(t,"DSA PRIVATE KEY"),0,[1],"02"),S=i(C,0,[2],"02"),b=i(C,0,[3],"02"),w=i(C,0,[4],"02"),F=i(C,0,[5],"02");return(A=new a).setPrivate(new BigInteger(_,16),new BigInteger(S,16),new BigInteger(b,16),new BigInteger(w,16),new BigInteger(F,16)),A}if(-1!=t.indexOf("-END PRIVATE KEY-"))return f.getKeyFromPlainPrivatePKCS8PEM(t);if(-1!=t.indexOf("-END RSA PRIVATE KEY-")&&-1!=t.indexOf("4,ENCRYPTED")){var E=f.getDecryptedKeyHex(t,e),x=new RSAKey;return x.readPKCS5PrvKeyHex(E),x}if(-1!=t.indexOf("-END EC PRIVATE KEY-")&&-1!=t.indexOf("4,ENCRYPTED")){var k,A=i(C=f.getDecryptedKeyHex(t,e),0,[1],"04"),P=i(C,0,[2,0],"06"),I=i(C,0,[3,0],"03").substr(2);if(void 0===K.crypto.OID.oidhex2name[P])throw"undefined OID(hex) in KJUR.crypto.OID: "+P;return(k=new s({curve:K.crypto.OID.oidhex2name[P]})).setPublicKeyHex(I),k.setPrivateKeyHex(A),k.isPublic=!1,k}if(-1!=t.indexOf("-END DSA PRIVATE KEY-")&&-1!=t.indexOf("4,ENCRYPTED")){var C;_=i(C=f.getDecryptedKeyHex(t,e),0,[1],"02"),S=i(C,0,[2],"02"),b=i(C,0,[3],"02"),w=i(C,0,[4],"02"),F=i(C,0,[5],"02");return(A=new a).setPrivate(new BigInteger(_,16),new BigInteger(S,16),new BigInteger(b,16),new BigInteger(w,16),new BigInteger(F,16)),A}if(-1!=t.indexOf("-END ENCRYPTED PRIVATE KEY-"))return f.getKeyFromEncryptedPKCS8PEM(t,e);throw"not supported argument"},J.generateKeypair=function(t,e){if("RSA"==t){var r=e;(s=new RSAKey).generate(r,"10001"),s.isPrivate=!0,s.isPublic=!0;var n=new RSAKey,i=s.n.toString(16),o=s.e.toString(16);return n.setPublic(i,o),n.isPrivate=!1,n.isPublic=!0,(a={}).prvKeyObj=s,a.pubKeyObj=n,a}if("EC"==t){var s,a,u=e,c=new K.crypto.ECDSA({curve:u}).generateKeyPairHex();return(s=new K.crypto.ECDSA({curve:u})).setPublicKeyHex(c.ecpubhex),s.setPrivateKeyHex(c.ecprvhex),s.isPrivate=!0,s.isPublic=!1,(n=new K.crypto.ECDSA({curve:u})).setPublicKeyHex(c.ecpubhex),n.isPrivate=!1,n.isPublic=!0,(a={}).prvKeyObj=s,a.pubKeyObj=n,a}throw"unknown algorithm: "+t},J.getPEM=function(t,e,r,n,i,s){var a=K,u=a.asn1,c=u.DERObjectIdentifier,f=u.DERInteger,h=u.ASN1Util.newObject,l=u.x509.SubjectPublicKeyInfo,p=a.crypto,g=p.DSA,d=p.ECDSA,y=RSAKey;function A(t){return h({seq:[{int:0},{int:{bigint:t.n}},{int:t.e},{int:{bigint:t.d}},{int:{bigint:t.p}},{int:{bigint:t.q}},{int:{bigint:t.dmp1}},{int:{bigint:t.dmq1}},{int:{bigint:t.coeff}}]})}function B(t){return h({seq:[{int:1},{octstr:{hex:t.prvKeyHex}},{tag:["a0",!0,{oid:{name:t.curveName}}]},{tag:["a1",!0,{bitstr:{hex:"00"+t.pubKeyHex}}]}]})}function x(t){return h({seq:[{int:0},{int:{bigint:t.p}},{int:{bigint:t.q}},{int:{bigint:t.g}},{int:{bigint:t.y}},{int:{bigint:t.x}}]})}if((void 0!==y&&t instanceof y||void 0!==g&&t instanceof g||void 0!==d&&t instanceof d)&&1==t.isPublic&&(void 0===e||"PKCS8PUB"==e))return hextopem(b=new l(t).getEncodedHex(),"PUBLIC KEY");if("PKCS1PRV"==e&&void 0!==y&&t instanceof y&&(void 0===r||null==r)&&1==t.isPrivate)return hextopem(b=A(t).getEncodedHex(),"RSA PRIVATE KEY");if("PKCS1PRV"==e&&void 0!==d&&t instanceof d&&(void 0===r||null==r)&&1==t.isPrivate){var m=new c({name:t.curveName}).getEncodedHex(),_=B(t).getEncodedHex(),S="";return S+=hextopem(m,"EC PARAMETERS"),S+=hextopem(_,"EC PRIVATE KEY")}if("PKCS1PRV"==e&&void 0!==g&&t instanceof g&&(void 0===r||null==r)&&1==t.isPrivate)return hextopem(b=x(t).getEncodedHex(),"DSA PRIVATE KEY");if("PKCS5PRV"==e&&void 0!==y&&t instanceof y&&void 0!==r&&null!=r&&1==t.isPrivate){var b=A(t).getEncodedHex();return void 0===n&&(n="DES-EDE3-CBC"),this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA",b,r,n,s)}if("PKCS5PRV"==e&&void 0!==d&&t instanceof d&&void 0!==r&&null!=r&&1==t.isPrivate){b=B(t).getEncodedHex();return void 0===n&&(n="DES-EDE3-CBC"),this.getEncryptedPKCS5PEMFromPrvKeyHex("EC",b,r,n,s)}if("PKCS5PRV"==e&&void 0!==g&&t instanceof g&&void 0!==r&&null!=r&&1==t.isPrivate){b=x(t).getEncodedHex();return void 0===n&&(n="DES-EDE3-CBC"),this.getEncryptedPKCS5PEMFromPrvKeyHex("DSA",b,r,n,s)}var w=function o(t,e){var r=F(t,e);return new h({seq:[{seq:[{oid:{name:"pkcs5PBES2"}},{seq:[{seq:[{oid:{name:"pkcs5PBKDF2"}},{seq:[{octstr:{hex:r.pbkdf2Salt}},{int:r.pbkdf2Iter}]}]},{seq:[{oid:{name:"des-EDE3-CBC"}},{octstr:{hex:r.encryptionSchemeIV}}]}]}]},{octstr:{hex:r.ciphertext}}]}).getEncodedHex()},F=function c(t,e){var r=v.lib.WordArray.random(8),n=v.lib.WordArray.random(8),i=v.PBKDF2(e,r,{keySize:6,iterations:100}),o=v.enc.Hex.parse(t),s=v.TripleDES.encrypt(o,i,{iv:n})+"",a={};return a.ciphertext=s,a.pbkdf2Salt=v.enc.Hex.stringify(r),a.pbkdf2Iter=100,a.encryptionSchemeAlg="DES-EDE3-CBC",a.encryptionSchemeIV=v.enc.Hex.stringify(n),a};if("PKCS8PRV"==e&&void 0!=y&&t instanceof y&&1==t.isPrivate){var E=A(t).getEncodedHex();b=h({seq:[{int:0},{seq:[{oid:{name:"rsaEncryption"}},{null:!0}]},{octstr:{hex:E}}]}).getEncodedHex();return void 0===r||null==r?hextopem(b,"PRIVATE KEY"):hextopem(_=w(b,r),"ENCRYPTED PRIVATE KEY")}if("PKCS8PRV"==e&&void 0!==d&&t instanceof d&&1==t.isPrivate){E=new h({seq:[{int:1},{octstr:{hex:t.prvKeyHex}},{tag:["a1",!0,{bitstr:{hex:"00"+t.pubKeyHex}}]}]}).getEncodedHex(),b=h({seq:[{int:0},{seq:[{oid:{name:"ecPublicKey"}},{oid:{name:t.curveName}}]},{octstr:{hex:E}}]}).getEncodedHex();return void 0===r||null==r?hextopem(b,"PRIVATE KEY"):hextopem(_=w(b,r),"ENCRYPTED PRIVATE KEY")}if("PKCS8PRV"==e&&void 0!==g&&t instanceof g&&1==t.isPrivate){E=new f({bigint:t.x}).getEncodedHex(),b=h({seq:[{int:0},{seq:[{oid:{name:"dsa"}},{seq:[{int:{bigint:t.p}},{int:{bigint:t.q}},{int:{bigint:t.g}}]}]},{octstr:{hex:E}}]}).getEncodedHex();return void 0===r||null==r?hextopem(b,"PRIVATE KEY"):hextopem(_=w(b,r),"ENCRYPTED PRIVATE KEY")}throw"unsupported object nor format"},J.getKeyFromCSRPEM=function(t){var e=pemtohex(t,"CERTIFICATE REQUEST");return J.getKeyFromCSRHex(e)},J.getKeyFromCSRHex=function(t){var e=J.parseCSRHex(t);return J.getKey(e.p8pubkeyhex,null,"pkcs8pub")},J.parseCSRHex=function(t){var e=W,r=e.getChildIdx,n=e.getTLV,i={},o=t;if("30"!=o.substr(0,2))throw"malformed CSR(code:001)";var s=r(o,0);if(s.length<1)throw"malformed CSR(code:002)";if("30"!=o.substr(s[0],2))throw"malformed CSR(code:003)";var a=r(o,s[0]);if(a.length<3)throw"malformed CSR(code:004)";return i.p8pubkeyhex=n(o,a[2]),i},J.getJWKFromKey=function(t){var e={};if(t instanceof RSAKey&&t.isPrivate)return e.kty="RSA",e.n=hextob64u(t.n.toString(16)),e.e=hextob64u(t.e.toString(16)),e.d=hextob64u(t.d.toString(16)),e.p=hextob64u(t.p.toString(16)),e.q=hextob64u(t.q.toString(16)),e.dp=hextob64u(t.dmp1.toString(16)),e.dq=hextob64u(t.dmq1.toString(16)),e.qi=hextob64u(t.coeff.toString(16)),e;if(t instanceof RSAKey&&t.isPublic)return e.kty="RSA",e.n=hextob64u(t.n.toString(16)),e.e=hextob64u(t.e.toString(16)),e;if(t instanceof K.crypto.ECDSA&&t.isPrivate){if("P-256"!==(n=t.getShortNISTPCurveName())&&"P-384"!==n)throw"unsupported curve name for JWT: "+n;var r=t.getPublicKeyXYHex();return e.kty="EC",e.crv=n,e.x=hextob64u(r.x),e.y=hextob64u(r.y),e.d=hextob64u(t.prvKeyHex),e}if(t instanceof K.crypto.ECDSA&&t.isPublic){var n;if("P-256"!==(n=t.getShortNISTPCurveName())&&"P-384"!==n)throw"unsupported curve name for JWT: "+n;r=t.getPublicKeyXYHex();return e.kty="EC",e.crv=n,e.x=hextob64u(r.x),e.y=hextob64u(r.y),e}throw"not supported key object"},RSAKey.getPosArrayOfChildrenFromHex=function(t){return W.getChildIdx(t,0)},RSAKey.getHexValueArrayOfChildrenFromHex=function(t){var e,r=W.getV,n=r(t,(e=RSAKey.getPosArrayOfChildrenFromHex(t))[0]),i=r(t,e[1]),o=r(t,e[2]),s=r(t,e[3]),a=r(t,e[4]),u=r(t,e[5]),c=r(t,e[6]),f=r(t,e[7]),h=r(t,e[8]);return(e=new Array).push(n,i,o,s,a,u,c,f,h),e},RSAKey.prototype.readPrivateKeyFromPEMString=function(t){var e=pemtohex(t),r=RSAKey.getHexValueArrayOfChildrenFromHex(e);this.setPrivateEx(r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8])},RSAKey.prototype.readPKCS5PrvKeyHex=function(t){var e=RSAKey.getHexValueArrayOfChildrenFromHex(t);this.setPrivateEx(e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8])},RSAKey.prototype.readPKCS8PrvKeyHex=function(t){var e,r,n,i,o,s,a,u,c=W,f=c.getVbyList;if(!1===c.isASN1HEX(t))throw"not ASN.1 hex string";try{e=f(t,0,[2,0,1],"02"),r=f(t,0,[2,0,2],"02"),n=f(t,0,[2,0,3],"02"),i=f(t,0,[2,0,4],"02"),o=f(t,0,[2,0,5],"02"),s=f(t,0,[2,0,6],"02"),a=f(t,0,[2,0,7],"02"),u=f(t,0,[2,0,8],"02")}catch(t){throw"malformed PKCS#8 plain RSA private key"}this.setPrivateEx(e,r,n,i,o,s,a,u)},RSAKey.prototype.readPKCS5PubKeyHex=function(t){var e=W,r=e.getV;if(!1===e.isASN1HEX(t))throw"keyHex is not ASN.1 hex string";var n=e.getChildIdx(t,0);if(2!==n.length||"02"!==t.substr(n[0],2)||"02"!==t.substr(n[1],2))throw"wrong hex for PKCS#5 public key";var i=r(t,n[0]),o=r(t,n[1]);this.setPublic(i,o)},RSAKey.prototype.readPKCS8PubKeyHex=function(t){var e=W;if(!1===e.isASN1HEX(t))throw"not ASN.1 hex string";if("06092a864886f70d010101"!==e.getTLVbyList(t,0,[0,0]))throw"not PKCS8 RSA public key";var r=e.getTLVbyList(t,0,[1,0]);this.readPKCS5PubKeyHex(r)},RSAKey.prototype.readCertPubKeyHex=function(t,e){var r,n;(r=new X509).readCertHex(t),n=r.getPublicKeyHex(),this.readPKCS8PubKeyHex(n)};var z=new RegExp("");function _zeroPaddingOfSignature(t,e){for(var r="",n=e/4-t.length,i=0;i>24,(16711680&i)>>16,(65280&i)>>8,255&i])))),i+=1;return n}function _rsasign_getAlgNameAndHashFromHexDisgestInfo(t){for(var e in K.crypto.Util.DIGESTINFOHEAD){var r=K.crypto.Util.DIGESTINFOHEAD[e],n=r.length;if(t.substring(0,n)==r)return[e,t.substring(n)]}return[]}function X509(){var t=W,e=t.getChildIdx,r=t.getV,n=t.getTLV,i=t.getVbyList,o=t.getTLVbyList,s=t.getIdxbyList,a=t.getVidx,u=t.oidname,c=X509,f=pemtohex;this.hex=null,this.version=0,this.foffset=0,this.aExtInfo=null,this.getVersion=function(){return null===this.hex||0!==this.version?this.version:"a003020102"!==o(this.hex,0,[0,0])?(this.version=1,this.foffset=-1,1):(this.version=3,3)},this.getSerialNumberHex=function(){return i(this.hex,0,[0,1+this.foffset],"02")},this.getSignatureAlgorithmField=function(){return u(i(this.hex,0,[0,2+this.foffset,0],"06"))},this.getIssuerHex=function(){return o(this.hex,0,[0,3+this.foffset],"30")},this.getIssuerString=function(){return c.hex2dn(this.getIssuerHex())},this.getSubjectHex=function(){return o(this.hex,0,[0,5+this.foffset],"30")},this.getSubjectString=function(){return c.hex2dn(this.getSubjectHex())},this.getNotBefore=function(){var t=i(this.hex,0,[0,4+this.foffset,0]);return t=t.replace(/(..)/g,"%$1"),t=decodeURIComponent(t)},this.getNotAfter=function(){var t=i(this.hex,0,[0,4+this.foffset,1]);return t=t.replace(/(..)/g,"%$1"),t=decodeURIComponent(t)},this.getPublicKeyHex=function(){return t.getTLVbyList(this.hex,0,[0,6+this.foffset],"30")},this.getPublicKeyIdx=function(){return s(this.hex,0,[0,6+this.foffset],"30")},this.getPublicKeyContentIdx=function(){var t=this.getPublicKeyIdx();return s(this.hex,t,[1,0],"30")},this.getPublicKey=function(){return J.getKey(this.getPublicKeyHex(),null,"pkcs8pub")},this.getSignatureAlgorithmName=function(){return u(i(this.hex,0,[1,0],"06"))},this.getSignatureValueHex=function(){return i(this.hex,0,[2],"03",!0)},this.verifySignature=function(t){var e=this.getSignatureAlgorithmName(),r=this.getSignatureValueHex(),n=o(this.hex,0,[0],"30"),i=new K.crypto.Signature({alg:e});return i.init(t),i.updateHex(n),i.verify(r)},this.parseExt=function(){if(3!==this.version)return-1;var r=s(this.hex,0,[0,7,0],"30"),n=e(this.hex,r);this.aExtInfo=new Array;for(var o=0;o0&&(f=new Array(r),(new SecureRandom).nextBytes(f),f=String.fromCharCode.apply(String,f));var h=hextorstr(c(rstrtohex("\0\0\0\0\0\0\0\0"+i+f))),l=[];for(n=0;n>8*u-a&255;for(d[0]&=~v,n=0;nthis.n.bitLength())return 0;var n=_rsasign_getAlgNameAndHashFromHexDisgestInfo(this.doPublic(r).toString(16).replace(/^1f+00/,""));if(0==n.length)return!1;var i=n[0];return n[1]==function a(t){return K.crypto.Util.hashString(t,i)}(t)},RSAKey.prototype.verifyWithMessageHash=function(t,e){var r=parseBigInt(e=(e=e.replace(z,"")).replace(/[ \n]+/g,""),16);if(r.bitLength()>this.n.bitLength())return 0;var n=_rsasign_getAlgNameAndHashFromHexDisgestInfo(this.doPublic(r).toString(16).replace(/^1f+00/,""));if(0==n.length)return!1;n[0];return n[1]==t},RSAKey.prototype.verifyPSS=function(t,r,n,i){var o=function e(t){return K.crypto.Util.hashHex(t,n)}(rstrtohex(t));return void 0===i&&(i=-1),this.verifyWithMessageHashPSS(o,r,n,i)},RSAKey.prototype.verifyWithMessageHashPSS=function(t,e,n,i){var o=new BigInteger(e,16);if(o.bitLength()>this.n.bitLength())return!1;var s,a=function r(t){return K.crypto.Util.hashHex(t,n)},u=hextorstr(t),c=u.length,f=this.n.bitLength()-1,h=Math.ceil(f/8);if(-1===i||void 0===i)i=c;else if(-2===i)i=h-c-2;else if(i<-2)throw"invalid salt length";if(h>8*h-f&255;if(0!=(p.charCodeAt(0)&d))throw"bits beyond keysize not zero";var v=pss_mgf1_str(g,p.length,a),y=[];for(s=0;s0)&&-1==(":"+r.join(":")+":").indexOf(":"+v+":"))throw"algorithm '"+v+"' not accepted in the list";if("none"!=v&&null===e)throw"key shall be specified to verify.";if("string"==typeof e&&-1!=e.indexOf("-----BEGIN ")&&(e=J.getKey(e)),!("RS"!=y&&"PS"!=y||e instanceof i))throw"key shall be a RSAKey obj for RS* and PS* algs";if("ES"==y&&!(e instanceof c))throw"key shall be a ECDSA obj for ES* algs";var m=null;if(void 0===s.jwsalg2sigalg[d.alg])throw"unsupported alg name: "+v;if("none"==(m=s.jwsalg2sigalg[v]))throw"not supported";if("Hmac"==m.substr(0,4)){if(void 0===e)throw"hexadecimal key shall be specified for HMAC";var _=new f({alg:m,pass:e});return _.updateString(p),g==_.doFinal()}if(-1!=m.indexOf("withECDSA")){var S,b=null;try{b=c.concatSigToASN1Sig(g)}catch(t){return!1}return(S=new h({alg:m})).init(e),S.updateString(p),S.verify(b)}return(S=new h({alg:m})).init(e),S.updateString(p),S.verify(g)},K.jws.JWS.parse=function(t){var e,r,n,i=t.split("."),o={};if(2!=i.length&&3!=i.length)throw"malformed sJWS: wrong number of '.' splitted elements";return e=i[0],r=i[1],3==i.length&&(n=i[2]),o.headerObj=K.jws.JWS.readSafeJSONString(q(e)),o.payloadObj=K.jws.JWS.readSafeJSONString(q(r)),o.headerPP=JSON.stringify(o.headerObj,null," "),null==o.payloadObj?o.payloadPP=q(r):o.payloadPP=JSON.stringify(o.payloadObj,null," "),void 0!==n&&(o.sigHex=b64utohex(n)),o},K.jws.JWS.verifyJWT=function(t,e,r){var i=K.jws,o=i.JWS,s=o.readSafeJSONString,a=o.inArray,u=o.includedArray,c=t.split("."),f=c[0],h=c[1],l=(b64utohex(c[2]),s(q(f))),p=s(q(h));if(void 0===l.alg)return!1;if(void 0===r.alg)throw"acceptField.alg shall be specified";if(!a(l.alg,r.alg))return!1;if(void 0!==p.iss&&"object"===n(r.iss)&&!a(p.iss,r.iss))return!1;if(void 0!==p.sub&&"object"===n(r.sub)&&!a(p.sub,r.sub))return!1;if(void 0!==p.aud&&"object"===n(r.aud))if("string"==typeof p.aud){if(!a(p.aud,r.aud))return!1}else if("object"==n(p.aud)&&!u(p.aud,r.aud))return!1;var g=i.IntDate.getNow();return void 0!==r.verifyAt&&"number"==typeof r.verifyAt&&(g=r.verifyAt),void 0!==r.gracePeriod&&"number"==typeof r.gracePeriod||(r.gracePeriod=0),!(void 0!==p.exp&&"number"==typeof p.exp&&p.exp+r.gracePeriode.length&&(r=e.length);for(var n=0;n * @license MIT */ -var n=r(361),i=r(362),o=r(363);function kMaxLength(){return Buffer.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function createBuffer(t,e){if(kMaxLength()=kMaxLength())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+kMaxLength().toString(16)+" bytes");return 0|t}function byteLength(t,e){if(Buffer.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return utf8ToBytes(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return base64ToBytes(t).length;default:if(n)return utf8ToBytes(t).length;e=(""+e).toLowerCase(),n=!0}}function swap(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function bidirectionalIndexOf(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=Buffer.from(e,n)),Buffer.isBuffer(e))return 0===e.length?-1:arrayIndexOf(t,e,r,n,i);if("number"==typeof e)return e&=255,Buffer.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):arrayIndexOf(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(t,e,r,n,i){var o,s=1,a=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,u/=2,r/=2}function read(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var c=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var f=!0,h=0;hi&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function base64Slice(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function utf8Slice(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:f>223?3:f>191?2:1;if(i+l<=r)switch(l){case 1:f<128&&(h=f);break;case 2:128==(192&(o=t[i+1]))&&(c=(31&f)<<6|63&o)>127&&(h=c);break;case 3:o=t[i+1],a=t[i+2],128==(192&o)&&128==(192&a)&&(c=(15&f)<<12|(63&o)<<6|63&a)>2047&&(c<55296||c>57343)&&(h=c);break;case 4:o=t[i+1],a=t[i+2],u=t[i+3],128==(192&o)&&128==(192&a)&&128==(192&u)&&(c=(15&f)<<18|(63&o)<<12|(63&a)<<6|63&u)>65535&&c<1114112&&(h=c)}null===h?(h=65533,l=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),i+=l}return function decodeCodePointsArray(t){var e=t.length;if(e<=s)return String.fromCharCode.apply(String,t);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return hexSlice(this,e,r);case"utf8":case"utf-8":return utf8Slice(this,e,r);case"ascii":return asciiSlice(this,e,r);case"latin1":case"binary":return latin1Slice(this,e,r);case"base64":return base64Slice(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}.apply(this,arguments)},Buffer.prototype.equals=function equals(t){if(!Buffer.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===Buffer.compare(this,t)},Buffer.prototype.inspect=function inspect(){var t="",r=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},Buffer.prototype.compare=function compare(t,e,r,n,i){if(!Buffer.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,i>>>=0,this===t)return 0;for(var o=i-n,s=r-e,a=Math.min(o,s),u=this.slice(n,i),c=t.slice(e,r),f=0;fi)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return hexWrite(this,t,e,r);case"utf8":case"utf-8":return utf8Write(this,t,e,r);case"ascii":return asciiWrite(this,t,e,r);case"latin1":case"binary":return latin1Write(this,t,e,r);case"base64":return base64Write(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var s=4096;function asciiSlice(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function checkInt(t,e,r,n,i,o){if(!Buffer.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function objectWriteUInt16(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function objectWriteUInt32(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function checkIEEE754(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function writeFloat(t,e,r,n,o){return o||checkIEEE754(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function writeDouble(t,e,r,n,o){return o||checkIEEE754(t,0,r,8),i.write(t,e,r,n,52,8),r+8}Buffer.prototype.slice=function slice(t,e){var r,n=this.length;if(t=~~t,e=void 0===e?n:~~e,t<0?(t+=n)<0&&(t=0):t>n&&(t=n),e<0?(e+=n)<0&&(e=0):e>n&&(e=n),e0&&(i*=256);)n+=this[t+--e]*i;return n},Buffer.prototype.readUInt8=function readUInt8(t,e){return e||checkOffset(t,1,this.length),this[t]},Buffer.prototype.readUInt16LE=function readUInt16LE(t,e){return e||checkOffset(t,2,this.length),this[t]|this[t+1]<<8},Buffer.prototype.readUInt16BE=function readUInt16BE(t,e){return e||checkOffset(t,2,this.length),this[t]<<8|this[t+1]},Buffer.prototype.readUInt32LE=function readUInt32LE(t,e){return e||checkOffset(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},Buffer.prototype.readUInt32BE=function readUInt32BE(t,e){return e||checkOffset(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},Buffer.prototype.readIntLE=function readIntLE(t,e,r){t|=0,e|=0,r||checkOffset(t,e,this.length);for(var n=this[t],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*e)),n},Buffer.prototype.readIntBE=function readIntBE(t,e,r){t|=0,e|=0,r||checkOffset(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},Buffer.prototype.readInt8=function readInt8(t,e){return e||checkOffset(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},Buffer.prototype.readInt16LE=function readInt16LE(t,e){e||checkOffset(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt16BE=function readInt16BE(t,e){e||checkOffset(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt32LE=function readInt32LE(t,e){return e||checkOffset(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},Buffer.prototype.readInt32BE=function readInt32BE(t,e){return e||checkOffset(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},Buffer.prototype.readFloatLE=function readFloatLE(t,e){return e||checkOffset(t,4,this.length),i.read(this,t,!0,23,4)},Buffer.prototype.readFloatBE=function readFloatBE(t,e){return e||checkOffset(t,4,this.length),i.read(this,t,!1,23,4)},Buffer.prototype.readDoubleLE=function readDoubleLE(t,e){return e||checkOffset(t,8,this.length),i.read(this,t,!0,52,8)},Buffer.prototype.readDoubleBE=function readDoubleBE(t,e){return e||checkOffset(t,8,this.length),i.read(this,t,!1,52,8)},Buffer.prototype.writeUIntLE=function writeUIntLE(t,e,r,n){(t=+t,e|=0,r|=0,n)||checkInt(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+r},Buffer.prototype.writeUInt8=function writeUInt8(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,1,255,0),Buffer.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},Buffer.prototype.writeUInt16LE=function writeUInt16LE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):objectWriteUInt16(this,t,e,!0),e+2},Buffer.prototype.writeUInt16BE=function writeUInt16BE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):objectWriteUInt16(this,t,e,!1),e+2},Buffer.prototype.writeUInt32LE=function writeUInt32LE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):objectWriteUInt32(this,t,e,!0),e+4},Buffer.prototype.writeUInt32BE=function writeUInt32BE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):objectWriteUInt32(this,t,e,!1),e+4},Buffer.prototype.writeIntLE=function writeIntLE(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);checkInt(this,t,e,r,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+r},Buffer.prototype.writeIntBE=function writeIntBE(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);checkInt(this,t,e,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},Buffer.prototype.writeInt8=function writeInt8(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,1,127,-128),Buffer.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},Buffer.prototype.writeInt16LE=function writeInt16LE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):objectWriteUInt16(this,t,e,!0),e+2},Buffer.prototype.writeInt16BE=function writeInt16BE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):objectWriteUInt16(this,t,e,!1),e+2},Buffer.prototype.writeInt32LE=function writeInt32LE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,4,2147483647,-2147483648),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):objectWriteUInt32(this,t,e,!0),e+4},Buffer.prototype.writeInt32BE=function writeInt32BE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):objectWriteUInt32(this,t,e,!1),e+4},Buffer.prototype.writeFloatLE=function writeFloatLE(t,e,r){return writeFloat(this,t,e,!0,r)},Buffer.prototype.writeFloatBE=function writeFloatBE(t,e,r){return writeFloat(this,t,e,!1,r)},Buffer.prototype.writeDoubleLE=function writeDoubleLE(t,e,r){return writeDouble(this,t,e,!0,r)},Buffer.prototype.writeDoubleBE=function writeDoubleBE(t,e,r){return writeDouble(this,t,e,!1,r)},Buffer.prototype.copy=function copy(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+r];else if(o<1e3||!Buffer.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function base64ToBytes(t){return n.toByteArray(function base64clean(t){if((t=function stringtrim(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(a,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function blitBuffer(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(this,r(71))},function(t,e,r){"use strict";e.byteLength=function byteLength(t){var e=getLens(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function toByteArray(t){for(var e,r=getLens(t),n=r[0],s=r[1],a=new o(function _byteLength(t,e,r){return 3*(e+r)/4-r}(0,n,s)),u=0,c=s>0?n-4:n,f=0;f>16&255,a[u++]=e>>8&255,a[u++]=255&e;2===s&&(e=i[t.charCodeAt(f)]<<2|i[t.charCodeAt(f+1)]>>4,a[u++]=255&e);1===s&&(e=i[t.charCodeAt(f)]<<10|i[t.charCodeAt(f+1)]<<4|i[t.charCodeAt(f+2)]>>2,a[u++]=e>>8&255,a[u++]=255&e);return a},e.fromByteArray=function fromByteArray(t){for(var e,r=t.length,i=r%3,o=[],s=0,a=r-i;sa?a:s+16383));1===i?(e=t[r-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return o.join("")};for(var n=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,u=s.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function tripletToBase64(t){return n[t>>18&63]+n[t>>12&63]+n[t>>6&63]+n[63&t]}function encodeChunk(t,e,r){for(var n,i=[],o=e;o>1,f=-7,h=r?i-1:0,l=r?-1:1,p=t[e+h];for(h+=l,o=p&(1<<-f)-1,p>>=-f,f+=a;f>0;o=256*o+t[e+h],h+=l,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=n;f>0;s=256*s+t[e+h],h+=l,f-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=c}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,u,c=8*o-i-1,f=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,g=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+h>=1?l/u:l*Math.pow(2,1-h))*u>=2&&(s++,u/=2),s+h>=f?(a=0,s=f):s+h>=1?(a=(e*u-1)*Math.pow(2,i),s+=h):(a=e*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=g,a/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=g,s/=256,c-=8);t[r+p-g]|=128*d}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function getJoseUtil(t){var e=t.jws,r=t.KeyUtil,i=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,u=t.AllowedSigningAlgs;return function(){function JoseUtil(){!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,JoseUtil)}return JoseUtil.parseJwt=function parseJwt(t){n.Log.debug("JoseUtil.parseJwt");try{var r=e.JWS.parse(t);return{header:r.headerObj,payload:r.payloadObj}}catch(t){n.Log.error(t)}},JoseUtil.validateJwt=function validateJwt(t,e,o,s,u,c,f){n.Log.debug("JoseUtil.validateJwt");try{if("RSA"===e.kty)if(e.e&&e.n)e=r.getKey(e);else{if(!e.x5c||!e.x5c.length)return n.Log.error("JoseUtil.validateJwt: RSA key missing key material",e),Promise.reject(new Error("RSA key missing key material"));var h=a(e.x5c[0]);e=i.getPublicKeyFromCertHex(h)}else{if("EC"!==e.kty)return n.Log.error("JoseUtil.validateJwt: Unsupported key type",e&&e.kty),Promise.reject(new Error(e.kty));if(!(e.crv&&e.x&&e.y))return n.Log.error("JoseUtil.validateJwt: EC key missing key material",e),Promise.reject(new Error("EC key missing key material"));e=r.getKey(e)}return JoseUtil._validateJwt(t,e,o,s,u,c,f)}catch(t){return n.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},JoseUtil.validateJwtAttributes=function validateJwtAttributes(t,e,r,i,o,s){i||(i=0),o||(o=parseInt(Date.now()/1e3));var a=JoseUtil.parseJwt(t).payload;if(!a.iss)return n.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(a.iss!==e)return n.Log.error("JoseUtil._validateJwt: Invalid issuer in token",a.iss),Promise.reject(new Error("Invalid issuer in token: "+a.iss));if(!a.aud)return n.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));var u=a.aud===r||Array.isArray(a.aud)&&a.aud.indexOf(r)>=0;if(!u)return n.Log.error("JoseUtil._validateJwt: Invalid audience in token",a.aud),Promise.reject(new Error("Invalid audience in token: "+a.aud));if(a.azp&&a.azp!==r)return n.Log.error("JoseUtil._validateJwt: Invalid azp in token",a.azp),Promise.reject(new Error("Invalid azp in token: "+a.azp));if(!s){var c=o+i,f=o-i;if(!a.iat)return n.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(c>>((3&e)<<3)&255;return i}}},function(t,e){for(var r=[],n=0;n<256;++n)r[n]=(n+256).toString(16).substr(1);t.exports=function bytesToUuid(t,e){var n=e||0,i=r;return[i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]]].join("")}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninResponse=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:"#";!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,SigninResponse);var r=i.UrlUtility.parseUrlFragment(t,e);this.error=r.error,this.error_description=r.error_description,this.error_uri=r.error_uri,this.code=r.code,this.state=r.state,this.id_token=r.id_token,this.session_state=r.session_state,this.access_token=r.access_token,this.token_type=r.token_type,this.scope=r.scope,this.profile=void 0,this.expires_in=r.expires_in}return n(SigninResponse,[{key:"expires_in",get:function get(){if(this.expires_at){var t=parseInt(Date.now()/1e3);return this.expires_at-t}},set:function set(t){var e=parseInt(t);if("number"==typeof e&&e>0){var r=parseInt(Date.now()/1e3);this.expires_at=r+e}}},{key:"expired",get:function get(){var t=this.expires_in;if(void 0!==t)return t<=0}},{key:"scopes",get:function get(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function get(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),SigninResponse}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var n=r(3),i=r(55),o=r(102);e.SignoutRequest=function SignoutRequest(t){var e=t.url,r=t.id_token_hint,s=t.post_logout_redirect_uri,a=t.data,u=t.extraQueryParams,c=t.request_type;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,SignoutRequest),!e)throw n.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var f in r&&(e=i.UrlUtility.addQueryParam(e,"id_token_hint",r)),s&&(e=i.UrlUtility.addQueryParam(e,"post_logout_redirect_uri",s),a&&(this.state=new o.State({data:a,request_type:c}),e=i.UrlUtility.addQueryParam(e,"state",this.state.id))),u)e=i.UrlUtility.addQueryParam(e,f,u[f]);this.url=e}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var n=r(55);e.SignoutResponse=function SignoutResponse(t){!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,SignoutResponse);var e=n.UrlUtility.parseUrlFragment(t,"?");this.error=e.error,this.error_description=e.error_description,this.error_uri=e.error_uri,this.state=e.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.SilentRenewService,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f.SessionMonitor,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:h.TokenRevocationClient,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:l.TokenClient,g=arguments.length>5&&void 0!==arguments[5]?arguments[5]:p.JoseUtil;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,UserManager),e instanceof s.UserManagerSettings||(e=new s.UserManagerSettings(e));var d=function _possibleConstructorReturn(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,e));return d._events=new u.UserManagerEvents(e),d._silentRenewService=new r(d),d.settings.automaticSilentRenew&&(i.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),d.startSilentRenew()),d.settings.monitorSession&&(i.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),d._sessionMonitor=new n(d)),d._tokenRevocationClient=new o(d._settings),d._tokenClient=new a(d._settings),d._joseUtil=g,d}return function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(UserManager,t),UserManager.prototype.getUser=function getUser(){var t=this;return this._loadUser().then(function(e){return e?(i.Log.info("UserManager.getUser: user loaded"),t._events.load(e,!1),e):(i.Log.info("UserManager.getUser: user not found in storage"),null)})},UserManager.prototype.removeUser=function removeUser(){var t=this;return this.storeUser(null).then(function(){i.Log.info("UserManager.removeUser: user removed from storage"),t._events.unload()})},UserManager.prototype.signinRedirect=function signinRedirect(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.request_type="si:r";var e={useReplaceToNavigate:t.useReplaceToNavigate};return this._signinStart(t,this._redirectNavigator,e).then(function(){i.Log.info("UserManager.signinRedirect: successful")})},UserManager.prototype.signinRedirectCallback=function signinRedirectCallback(t){return this._signinEnd(t||this._redirectNavigator.url).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinRedirectCallback: no sub")),t})},UserManager.prototype.signinPopup=function signinPopup(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.request_type="si:p";var e=t.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return e?(t.redirect_uri=e,t.display="popup",this._signin(t,this._popupNavigator,{startUrl:e,popupWindowFeatures:t.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:t.popupWindowTarget||this.settings.popupWindowTarget}).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopup: no sub")),t})):(i.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},UserManager.prototype.signinPopupCallback=function signinPopupCallback(t){return this._signinCallback(t,this._popupNavigator).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopupCallback: no sub")),t}).catch(function(t){i.Log.error(t.message)})},UserManager.prototype.signinSilent=function signinSilent(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.request_type="si:s",this._loadUser().then(function(r){return r&&r.refresh_token?(e.refresh_token=r.refresh_token,t._useRefreshToken(e)):(e.id_token_hint=e.id_token_hint||t.settings.includeIdTokenInSilentRenew&&r&&r.id_token,r&&t._settings.validateSubOnSilentRenew&&(i.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",r.profile.sub),e.current_sub=r.profile.sub),t._signinSilentIframe(e))})},UserManager.prototype._useRefreshToken=function _useRefreshToken(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(e).then(function(e){return e?e.access_token?t._loadUser().then(function(r){if(r){var n=Promise.resolve();return e.id_token&&(n=t._validateIdTokenFromTokenRefreshToken(r.profile,e.id_token)),n.then(function(){return i.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.access_token=e.access_token,r.refresh_token=e.refresh_token||r.refresh_token,r.expires_in=e.expires_in,t.storeUser(r).then(function(){return t._events.load(r),r})})}return null}):(i.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(i.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))})},UserManager.prototype._validateIdTokenFromTokenRefreshToken=function _validateIdTokenFromTokenRefreshToken(t,e){var r=this;return this._metadataService.getIssuer().then(function(n){return r._joseUtil.validateJwtAttributes(e,n,r._settings.client_id,r._settings.clockSkew).then(function(e){return e?e.sub!==t.sub?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):e.auth_time&&e.auth_time!==t.auth_time?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):e.azp&&e.azp!==t.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!e.azp&&t.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))})})},UserManager.prototype._signinSilentIframe=function _signinSilentIframe(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.redirect_uri||this.settings.silent_redirect_uri;return e?(t.redirect_uri=e,t.prompt=t.prompt||"none",this._signin(t,this._iframeNavigator,{startUrl:e,silentRequestTimeout:t.silentRequestTimeout||this.settings.silentRequestTimeout}).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilent: no sub")),t})):(i.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},UserManager.prototype.signinSilentCallback=function signinSilentCallback(t){return this._signinCallback(t,this._iframeNavigator).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilentCallback: no sub")),t})},UserManager.prototype.signinCallback=function signinCallback(t){var e=this;return this.readSigninResponseState(t).then(function(r){var n=r.state;r.response;return"si:r"===n.request_type?e.signinRedirectCallback(t):"si:p"===n.request_type?e.signinPopupCallback(t):"si:s"===n.request_type?e.signinSilentCallback(t):Promise.reject(new Error("invalid response_type in state"))})},UserManager.prototype.signoutCallback=function signoutCallback(t,e){var r=this;return this.readSignoutResponseState(t).then(function(n){var i=n.state,o=n.response;return i?"so:r"===i.request_type?r.signoutRedirectCallback(t):"so:p"===i.request_type?r.signoutPopupCallback(t,e):Promise.reject(new Error("invalid response_type in state")):o})},UserManager.prototype.querySessionStatus=function querySessionStatus(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.request_type="si:s";var r=e.redirect_uri||this.settings.silent_redirect_uri;return r?(e.redirect_uri=r,e.prompt="none",e.response_type=e.response_type||this.settings.query_status_response_type,e.scope="openid",this._signinStart(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then(function(e){return t.processSigninResponse(e.url).then(function(t){if(i.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};i.Log.info("querySessionStatus successful, user not authenticated")})})):(i.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},UserManager.prototype._signin=function _signin(t,e){var r=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(t,e,n).then(function(e){return r._signinEnd(e.url,t)})},UserManager.prototype._signinStart=function _signinStart(t,e){var r=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.prepare(n).then(function(e){return i.Log.debug("UserManager._signinStart: got navigator window handle"),r.createSigninRequest(t).then(function(t){return i.Log.debug("UserManager._signinStart: got signin request"),n.url=t.url,n.id=t.state.id,e.navigate(n)}).catch(function(t){throw e.close&&(i.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),e.close()),t})})},UserManager.prototype._signinEnd=function _signinEnd(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(t).then(function(t){i.Log.debug("UserManager._signinEnd: got signin response");var n=new a.User(t);if(r.current_sub){if(r.current_sub!==n.profile.sub)return i.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",n.profile.sub),Promise.reject(new Error("login_required"));i.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return e.storeUser(n).then(function(){return i.Log.debug("UserManager._signinEnd: user stored"),e._events.load(n),n})})},UserManager.prototype._signinCallback=function _signinCallback(t,e){return i.Log.debug("UserManager._signinCallback"),e.callback(t)},UserManager.prototype.signoutRedirect=function signoutRedirect(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.request_type="so:r";var e=t.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e&&(t.post_logout_redirect_uri=e),this._signoutStart(t,this._redirectNavigator).then(function(){i.Log.info("UserManager.signoutRedirect: successful")})},UserManager.prototype.signoutRedirectCallback=function signoutRedirectCallback(t){return this._signoutEnd(t||this._redirectNavigator.url).then(function(t){return i.Log.info("UserManager.signoutRedirectCallback: successful"),t})},UserManager.prototype.signoutPopup=function signoutPopup(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.request_type="so:p";var e=t.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return t.post_logout_redirect_uri=e,t.display="popup",t.post_logout_redirect_uri&&(t.state=t.state||{}),this._signout(t,this._popupNavigator,{startUrl:e,popupWindowFeatures:t.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:t.popupWindowTarget||this.settings.popupWindowTarget}).then(function(){i.Log.info("UserManager.signoutPopup: successful")})},UserManager.prototype.signoutPopupCallback=function signoutPopupCallback(t,e){void 0===e&&"boolean"==typeof t&&(e=t,t=null);return this._popupNavigator.callback(t,e,"?").then(function(){i.Log.info("UserManager.signoutPopupCallback: successful")})},UserManager.prototype._signout=function _signout(t,e){var r=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(t,e,n).then(function(t){return r._signoutEnd(t.url)})},UserManager.prototype._signoutStart=function _signoutStart(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this,r=arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(n).then(function(r){return i.Log.debug("UserManager._signoutStart: got navigator window handle"),e._loadUser().then(function(o){return i.Log.debug("UserManager._signoutStart: loaded current user from storage"),(e._settings.revokeAccessTokenOnSignout?e._revokeInternal(o):Promise.resolve()).then(function(){var s=t.id_token_hint||o&&o.id_token;return s&&(i.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),t.id_token_hint=s),e.removeUser().then(function(){return i.Log.debug("UserManager._signoutStart: user removed, creating signout request"),e.createSignoutRequest(t).then(function(t){return i.Log.debug("UserManager._signoutStart: got signout request"),n.url=t.url,t.state&&(n.id=t.state.id),r.navigate(n)})})})}).catch(function(t){throw r.close&&(i.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),r.close()),t})})},UserManager.prototype._signoutEnd=function _signoutEnd(t){return this.processSignoutResponse(t).then(function(t){return i.Log.debug("UserManager._signoutEnd: got signout response"),t})},UserManager.prototype.revokeAccessToken=function revokeAccessToken(){var t=this;return this._loadUser().then(function(e){return t._revokeInternal(e,!0).then(function(r){if(r)return i.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),e.access_token=null,e.refresh_token=null,e.expires_at=null,e.token_type=null,t.storeUser(e).then(function(){i.Log.debug("UserManager.revokeAccessToken: user stored"),t._events.load(e)})})}).then(function(){i.Log.info("UserManager.revokeAccessToken: access token revoked successfully")})},UserManager.prototype._revokeInternal=function _revokeInternal(t,e){var r=this;if(t){var n=t.access_token,o=t.refresh_token;return this._revokeAccessTokenInternal(n,e).then(function(t){return r._revokeRefreshTokenInternal(o,e).then(function(e){return t||e||i.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e})})}return Promise.resolve(!1)},UserManager.prototype._revokeAccessTokenInternal=function _revokeAccessTokenInternal(t,e){return!t||t.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(t,e).then(function(){return!0})},UserManager.prototype._revokeRefreshTokenInternal=function _revokeRefreshTokenInternal(t,e){return t?this._tokenRevocationClient.revoke(t,e,"refresh_token").then(function(){return!0}):Promise.resolve(!1)},UserManager.prototype.startSilentRenew=function startSilentRenew(){this._silentRenewService.start()},UserManager.prototype.stopSilentRenew=function stopSilentRenew(){this._silentRenewService.stop()},UserManager.prototype._loadUser=function _loadUser(){return this._userStore.get(this._userStoreKey).then(function(t){return t?(i.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(i.Log.debug("UserManager._loadUser: no user storageString"),null)})},UserManager.prototype.storeUser=function storeUser(t){if(t){i.Log.debug("UserManager.storeUser: storing user");var e=t.toStorageString();return this._userStore.set(this._userStoreKey,e)}return i.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},n(UserManager,[{key:"_redirectNavigator",get:function get(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function get(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function get(){return this.settings.iframeNavigator}},{key:"_userStore",get:function get(){return this.settings.userStore}},{key:"events",get:function get(){return this._events}},{key:"_userStoreKey",get:function get(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),UserManager}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.popup_redirect_uri,n=e.popup_post_logout_redirect_uri,i=e.popupWindowFeatures,p=e.popupWindowTarget,g=e.silent_redirect_uri,d=e.silentRequestTimeout,v=e.automaticSilentRenew,y=void 0!==v&&v,m=e.validateSubOnSilentRenew,S=void 0!==m&&m,_=e.includeIdTokenInSilentRenew,b=void 0===_||_,w=e.monitorSession,F=void 0===w||w,E=e.checkSessionInterval,x=void 0===E?l:E,k=e.stopCheckSessionOnError,A=void 0===k||k,P=e.query_status_response_type,I=e.revokeAccessTokenOnSignout,C=void 0!==I&&I,R=e.accessTokenExpiringNotificationTime,B=void 0===R?h:R,T=e.redirectNavigator,M=void 0===T?new o.RedirectNavigator:T,O=e.popupNavigator,U=void 0===O?new s.PopupNavigator:O,N=e.iframeNavigator,L=void 0===N?new a.IFrameNavigator:N,D=e.userStore,j=void 0===D?new u.WebStorageStateStore({store:c.Global.sessionStorage}):D;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,UserManagerSettings);var H=function _possibleConstructorReturn(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,arguments[0]));return H._popup_redirect_uri=r,H._popup_post_logout_redirect_uri=n,H._popupWindowFeatures=i,H._popupWindowTarget=p,H._silent_redirect_uri=g,H._silentRequestTimeout=d,H._automaticSilentRenew=y,H._validateSubOnSilentRenew=S,H._includeIdTokenInSilentRenew=b,H._accessTokenExpiringNotificationTime=B,H._monitorSession=F,H._checkSessionInterval=x,H._stopCheckSessionOnError=A,P?H._query_status_response_type=P:arguments[0]&&arguments[0].response_type?H._query_status_response_type=f.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":H._query_status_response_type="id_token",H._revokeAccessTokenOnSignout=C,H._redirectNavigator=M,H._popupNavigator=U,H._iframeNavigator=L,H._userStore=j,H}return function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(UserManagerSettings,t),n(UserManagerSettings,[{key:"popup_redirect_uri",get:function get(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function get(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function get(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function get(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function get(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function get(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function get(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function get(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function get(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function get(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function get(){return this._monitorSession}},{key:"checkSessionInterval",get:function get(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function get(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function get(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function get(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function get(){return this._redirectNavigator}},{key:"popupNavigator",get:function get(){return this._popupNavigator}},{key:"iframeNavigator",get:function get(){return this._iframeNavigator}},{key:"userStore",get:function get(){return this._userStore}}]),UserManagerSettings}(i.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];n.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,e),r&&this._userLoaded.raise(e)},UserManagerEvents.prototype.unload=function unload(){n.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},UserManagerEvents.prototype.addUserLoaded=function addUserLoaded(t){this._userLoaded.addHandler(t)},UserManagerEvents.prototype.removeUserLoaded=function removeUserLoaded(t){this._userLoaded.removeHandler(t)},UserManagerEvents.prototype.addUserUnloaded=function addUserUnloaded(t){this._userUnloaded.addHandler(t)},UserManagerEvents.prototype.removeUserUnloaded=function removeUserUnloaded(t){this._userUnloaded.removeHandler(t)},UserManagerEvents.prototype.addSilentRenewError=function addSilentRenewError(t){this._silentRenewError.addHandler(t)},UserManagerEvents.prototype.removeSilentRenewError=function removeSilentRenewError(t){this._silentRenewError.removeHandler(t)},UserManagerEvents.prototype._raiseSilentRenewError=function _raiseSilentRenewError(t){n.Log.debug("UserManagerEvents._raiseSilentRenewError",t.message),this._silentRenewError.raise(t)},UserManagerEvents.prototype.addUserSignedOut=function addUserSignedOut(t){this._userSignedOut.addHandler(t)},UserManagerEvents.prototype.removeUserSignedOut=function removeUserSignedOut(t){this._userSignedOut.removeHandler(t)},UserManagerEvents.prototype._raiseUserSignedOut=function _raiseUserSignedOut(t){n.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise(t)},UserManagerEvents.prototype.addUserSessionChanged=function addUserSessionChanged(t){this._userSessionChanged.addHandler(t)},UserManagerEvents.prototype.removeUserSessionChanged=function removeUserSessionChanged(t){this._userSessionChanged.removeHandler(t)},UserManagerEvents.prototype._raiseUserSessionChanged=function _raiseUserSessionChanged(t){n.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise(t)},UserManagerEvents}(i.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,Timer);var i=function _possibleConstructorReturn(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,e));return i._timer=r,i._nowFunc=n||function(){return Date.now()/1e3},i}return function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(Timer,t),Timer.prototype.init=function init(t){t<=0&&(t=1),t=parseInt(t);var e=this.now+t;if(this.expiration===e&&this._timerHandle)i.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),i.Log.debug("Timer.init timer "+this._name+" for duration:",t),this._expiration=e;var r=5;t=kMaxLength())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+kMaxLength().toString(16)+" bytes");return 0|t}function byteLength(t,e){if(Buffer.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return utf8ToBytes(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return base64ToBytes(t).length;default:if(n)return utf8ToBytes(t).length;e=(""+e).toLowerCase(),n=!0}}function swap(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function bidirectionalIndexOf(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=Buffer.from(e,n)),Buffer.isBuffer(e))return 0===e.length?-1:arrayIndexOf(t,e,r,n,i);if("number"==typeof e)return e&=255,Buffer.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):arrayIndexOf(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(t,e,r,n,i){var o,s=1,a=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,u/=2,r/=2}function read(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var c=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var f=!0,h=0;hi&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function base64Slice(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function utf8Slice(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:f>223?3:f>191?2:1;if(i+l<=r)switch(l){case 1:f<128&&(h=f);break;case 2:128==(192&(o=t[i+1]))&&(c=(31&f)<<6|63&o)>127&&(h=c);break;case 3:o=t[i+1],a=t[i+2],128==(192&o)&&128==(192&a)&&(c=(15&f)<<12|(63&o)<<6|63&a)>2047&&(c<55296||c>57343)&&(h=c);break;case 4:o=t[i+1],a=t[i+2],u=t[i+3],128==(192&o)&&128==(192&a)&&128==(192&u)&&(c=(15&f)<<18|(63&o)<<12|(63&a)<<6|63&u)>65535&&c<1114112&&(h=c)}null===h?(h=65533,l=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),i+=l}return function decodeCodePointsArray(t){var e=t.length;if(e<=s)return String.fromCharCode.apply(String,t);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return hexSlice(this,e,r);case"utf8":case"utf-8":return utf8Slice(this,e,r);case"ascii":return asciiSlice(this,e,r);case"latin1":case"binary":return latin1Slice(this,e,r);case"base64":return base64Slice(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}.apply(this,arguments)},Buffer.prototype.equals=function equals(t){if(!Buffer.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===Buffer.compare(this,t)},Buffer.prototype.inspect=function inspect(){var t="",r=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},Buffer.prototype.compare=function compare(t,e,r,n,i){if(!Buffer.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,i>>>=0,this===t)return 0;for(var o=i-n,s=r-e,a=Math.min(o,s),u=this.slice(n,i),c=t.slice(e,r),f=0;fi)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return hexWrite(this,t,e,r);case"utf8":case"utf-8":return utf8Write(this,t,e,r);case"ascii":return asciiWrite(this,t,e,r);case"latin1":case"binary":return latin1Write(this,t,e,r);case"base64":return base64Write(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var s=4096;function asciiSlice(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function checkInt(t,e,r,n,i,o){if(!Buffer.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function objectWriteUInt16(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function objectWriteUInt32(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function checkIEEE754(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function writeFloat(t,e,r,n,o){return o||checkIEEE754(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function writeDouble(t,e,r,n,o){return o||checkIEEE754(t,0,r,8),i.write(t,e,r,n,52,8),r+8}Buffer.prototype.slice=function slice(t,e){var r,n=this.length;if(t=~~t,e=void 0===e?n:~~e,t<0?(t+=n)<0&&(t=0):t>n&&(t=n),e<0?(e+=n)<0&&(e=0):e>n&&(e=n),e0&&(i*=256);)n+=this[t+--e]*i;return n},Buffer.prototype.readUInt8=function readUInt8(t,e){return e||checkOffset(t,1,this.length),this[t]},Buffer.prototype.readUInt16LE=function readUInt16LE(t,e){return e||checkOffset(t,2,this.length),this[t]|this[t+1]<<8},Buffer.prototype.readUInt16BE=function readUInt16BE(t,e){return e||checkOffset(t,2,this.length),this[t]<<8|this[t+1]},Buffer.prototype.readUInt32LE=function readUInt32LE(t,e){return e||checkOffset(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},Buffer.prototype.readUInt32BE=function readUInt32BE(t,e){return e||checkOffset(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},Buffer.prototype.readIntLE=function readIntLE(t,e,r){t|=0,e|=0,r||checkOffset(t,e,this.length);for(var n=this[t],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*e)),n},Buffer.prototype.readIntBE=function readIntBE(t,e,r){t|=0,e|=0,r||checkOffset(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},Buffer.prototype.readInt8=function readInt8(t,e){return e||checkOffset(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},Buffer.prototype.readInt16LE=function readInt16LE(t,e){e||checkOffset(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt16BE=function readInt16BE(t,e){e||checkOffset(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt32LE=function readInt32LE(t,e){return e||checkOffset(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},Buffer.prototype.readInt32BE=function readInt32BE(t,e){return e||checkOffset(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},Buffer.prototype.readFloatLE=function readFloatLE(t,e){return e||checkOffset(t,4,this.length),i.read(this,t,!0,23,4)},Buffer.prototype.readFloatBE=function readFloatBE(t,e){return e||checkOffset(t,4,this.length),i.read(this,t,!1,23,4)},Buffer.prototype.readDoubleLE=function readDoubleLE(t,e){return e||checkOffset(t,8,this.length),i.read(this,t,!0,52,8)},Buffer.prototype.readDoubleBE=function readDoubleBE(t,e){return e||checkOffset(t,8,this.length),i.read(this,t,!1,52,8)},Buffer.prototype.writeUIntLE=function writeUIntLE(t,e,r,n){(t=+t,e|=0,r|=0,n)||checkInt(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+r},Buffer.prototype.writeUInt8=function writeUInt8(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,1,255,0),Buffer.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},Buffer.prototype.writeUInt16LE=function writeUInt16LE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):objectWriteUInt16(this,t,e,!0),e+2},Buffer.prototype.writeUInt16BE=function writeUInt16BE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):objectWriteUInt16(this,t,e,!1),e+2},Buffer.prototype.writeUInt32LE=function writeUInt32LE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):objectWriteUInt32(this,t,e,!0),e+4},Buffer.prototype.writeUInt32BE=function writeUInt32BE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):objectWriteUInt32(this,t,e,!1),e+4},Buffer.prototype.writeIntLE=function writeIntLE(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);checkInt(this,t,e,r,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+r},Buffer.prototype.writeIntBE=function writeIntBE(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);checkInt(this,t,e,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},Buffer.prototype.writeInt8=function writeInt8(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,1,127,-128),Buffer.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},Buffer.prototype.writeInt16LE=function writeInt16LE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):objectWriteUInt16(this,t,e,!0),e+2},Buffer.prototype.writeInt16BE=function writeInt16BE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):objectWriteUInt16(this,t,e,!1),e+2},Buffer.prototype.writeInt32LE=function writeInt32LE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,4,2147483647,-2147483648),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):objectWriteUInt32(this,t,e,!0),e+4},Buffer.prototype.writeInt32BE=function writeInt32BE(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):objectWriteUInt32(this,t,e,!1),e+4},Buffer.prototype.writeFloatLE=function writeFloatLE(t,e,r){return writeFloat(this,t,e,!0,r)},Buffer.prototype.writeFloatBE=function writeFloatBE(t,e,r){return writeFloat(this,t,e,!1,r)},Buffer.prototype.writeDoubleLE=function writeDoubleLE(t,e,r){return writeDouble(this,t,e,!0,r)},Buffer.prototype.writeDoubleBE=function writeDoubleBE(t,e,r){return writeDouble(this,t,e,!1,r)},Buffer.prototype.copy=function copy(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+r];else if(o<1e3||!Buffer.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function base64ToBytes(t){return n.toByteArray(function base64clean(t){if((t=function stringtrim(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(a,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function blitBuffer(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(this,r(71))},function(t,e,r){"use strict";e.byteLength=function byteLength(t){var e=getLens(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function toByteArray(t){for(var e,r=getLens(t),n=r[0],s=r[1],a=new o(function _byteLength(t,e,r){return 3*(e+r)/4-r}(0,n,s)),u=0,c=s>0?n-4:n,f=0;f>16&255,a[u++]=e>>8&255,a[u++]=255&e;2===s&&(e=i[t.charCodeAt(f)]<<2|i[t.charCodeAt(f+1)]>>4,a[u++]=255&e);1===s&&(e=i[t.charCodeAt(f)]<<10|i[t.charCodeAt(f+1)]<<4|i[t.charCodeAt(f+2)]>>2,a[u++]=e>>8&255,a[u++]=255&e);return a},e.fromByteArray=function fromByteArray(t){for(var e,r=t.length,i=r%3,o=[],s=0,a=r-i;sa?a:s+16383));1===i?(e=t[r-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return o.join("")};for(var n=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,u=s.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function tripletToBase64(t){return n[t>>18&63]+n[t>>12&63]+n[t>>6&63]+n[63&t]}function encodeChunk(t,e,r){for(var n,i=[],o=e;o>1,f=-7,h=r?i-1:0,l=r?-1:1,p=t[e+h];for(h+=l,o=p&(1<<-f)-1,p>>=-f,f+=a;f>0;o=256*o+t[e+h],h+=l,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=n;f>0;s=256*s+t[e+h],h+=l,f-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=c}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,u,c=8*o-i-1,f=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,g=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+h>=1?l/u:l*Math.pow(2,1-h))*u>=2&&(s++,u/=2),s+h>=f?(a=0,s=f):s+h>=1?(a=(e*u-1)*Math.pow(2,i),s+=h):(a=e*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=g,a/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=g,s/=256,c-=8);t[r+p-g]|=128*d}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function getJoseUtil(t){var e=t.jws,r=t.KeyUtil,i=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,u=t.AllowedSigningAlgs;return function(){function JoseUtil(){!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,JoseUtil)}return JoseUtil.parseJwt=function parseJwt(t){n.Log.debug("JoseUtil.parseJwt");try{var r=e.JWS.parse(t);return{header:r.headerObj,payload:r.payloadObj}}catch(t){n.Log.error(t)}},JoseUtil.validateJwt=function validateJwt(t,e,o,s,u,c,f){n.Log.debug("JoseUtil.validateJwt");try{if("RSA"===e.kty)if(e.e&&e.n)e=r.getKey(e);else{if(!e.x5c||!e.x5c.length)return n.Log.error("JoseUtil.validateJwt: RSA key missing key material",e),Promise.reject(new Error("RSA key missing key material"));var h=a(e.x5c[0]);e=i.getPublicKeyFromCertHex(h)}else{if("EC"!==e.kty)return n.Log.error("JoseUtil.validateJwt: Unsupported key type",e&&e.kty),Promise.reject(new Error(e.kty));if(!(e.crv&&e.x&&e.y))return n.Log.error("JoseUtil.validateJwt: EC key missing key material",e),Promise.reject(new Error("EC key missing key material"));e=r.getKey(e)}return JoseUtil._validateJwt(t,e,o,s,u,c,f)}catch(t){return n.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},JoseUtil.validateJwtAttributes=function validateJwtAttributes(t,e,r,i,o,s){i||(i=0),o||(o=parseInt(Date.now()/1e3));var a=JoseUtil.parseJwt(t).payload;if(!a.iss)return n.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(a.iss!==e)return n.Log.error("JoseUtil._validateJwt: Invalid issuer in token",a.iss),Promise.reject(new Error("Invalid issuer in token: "+a.iss));if(!a.aud)return n.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));var u=a.aud===r||Array.isArray(a.aud)&&a.aud.indexOf(r)>=0;if(!u)return n.Log.error("JoseUtil._validateJwt: Invalid audience in token",a.aud),Promise.reject(new Error("Invalid audience in token: "+a.aud));if(a.azp&&a.azp!==r)return n.Log.error("JoseUtil._validateJwt: Invalid azp in token",a.azp),Promise.reject(new Error("Invalid azp in token: "+a.azp));if(!s){var c=o+i,f=o-i;if(!a.iat)return n.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(c>>((3&e)<<3)&255;return i}}},function(t,e){for(var r=[],n=0;n<256;++n)r[n]=(n+256).toString(16).substr(1);t.exports=function bytesToUuid(t,e){var n=e||0,i=r;return[i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]]].join("")}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninResponse=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:"#";!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,SigninResponse);var r=i.UrlUtility.parseUrlFragment(t,e);this.error=r.error,this.error_description=r.error_description,this.error_uri=r.error_uri,this.code=r.code,this.state=r.state,this.id_token=r.id_token,this.session_state=r.session_state,this.access_token=r.access_token,this.token_type=r.token_type,this.scope=r.scope,this.profile=void 0,this.expires_in=r.expires_in}return n(SigninResponse,[{key:"expires_in",get:function get(){if(this.expires_at){var t=parseInt(Date.now()/1e3);return this.expires_at-t}},set:function set(t){var e=parseInt(t);if("number"==typeof e&&e>0){var r=parseInt(Date.now()/1e3);this.expires_at=r+e}}},{key:"expired",get:function get(){var t=this.expires_in;if(void 0!==t)return t<=0}},{key:"scopes",get:function get(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function get(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),SigninResponse}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var n=r(3),i=r(55),o=r(102);e.SignoutRequest=function SignoutRequest(t){var e=t.url,r=t.id_token_hint,s=t.post_logout_redirect_uri,a=t.data,u=t.extraQueryParams,c=t.request_type;if(function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,SignoutRequest),!e)throw n.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var f in r&&(e=i.UrlUtility.addQueryParam(e,"id_token_hint",r)),s&&(e=i.UrlUtility.addQueryParam(e,"post_logout_redirect_uri",s),a&&(this.state=new o.State({data:a,request_type:c}),e=i.UrlUtility.addQueryParam(e,"state",this.state.id))),u)e=i.UrlUtility.addQueryParam(e,f,u[f]);this.url=e}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var n=r(55);e.SignoutResponse=function SignoutResponse(t){!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,SignoutResponse);var e=n.UrlUtility.parseUrlFragment(t,"?");this.error=e.error,this.error_description=e.error_description,this.error_uri=e.error_uri,this.state=e.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.SilentRenewService,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f.SessionMonitor,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:h.TokenRevocationClient,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:l.TokenClient,g=arguments.length>5&&void 0!==arguments[5]?arguments[5]:p.JoseUtil;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,UserManager),e instanceof s.UserManagerSettings||(e=new s.UserManagerSettings(e));var d=function _possibleConstructorReturn(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,e));return d._events=new u.UserManagerEvents(e),d._silentRenewService=new r(d),d.settings.automaticSilentRenew&&(i.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),d.startSilentRenew()),d.settings.monitorSession&&(i.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),d._sessionMonitor=new n(d)),d._tokenRevocationClient=new o(d._settings),d._tokenClient=new a(d._settings),d._joseUtil=g,d}return function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(UserManager,t),UserManager.prototype.getUser=function getUser(){var t=this;return this._loadUser().then(function(e){return e?(i.Log.info("UserManager.getUser: user loaded"),t._events.load(e,!1),e):(i.Log.info("UserManager.getUser: user not found in storage"),null)})},UserManager.prototype.removeUser=function removeUser(){var t=this;return this.storeUser(null).then(function(){i.Log.info("UserManager.removeUser: user removed from storage"),t._events.unload()})},UserManager.prototype.signinRedirect=function signinRedirect(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.request_type="si:r";var e={useReplaceToNavigate:t.useReplaceToNavigate};return this._signinStart(t,this._redirectNavigator,e).then(function(){i.Log.info("UserManager.signinRedirect: successful")})},UserManager.prototype.signinRedirectCallback=function signinRedirectCallback(t){return this._signinEnd(t||this._redirectNavigator.url).then(function(t){return t.profile&&t.profile.sub?i.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinRedirectCallback: no sub"),t})},UserManager.prototype.signinPopup=function signinPopup(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.request_type="si:p";var e=t.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return e?(t.redirect_uri=e,t.display="popup",this._signin(t,this._popupNavigator,{startUrl:e,popupWindowFeatures:t.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:t.popupWindowTarget||this.settings.popupWindowTarget}).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopup: no sub")),t})):(i.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},UserManager.prototype.signinPopupCallback=function signinPopupCallback(t){return this._signinCallback(t,this._popupNavigator).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopupCallback: no sub")),t}).catch(function(t){i.Log.error(t.message)})},UserManager.prototype.signinSilent=function signinSilent(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.request_type="si:s",this._loadUser().then(function(r){return r&&r.refresh_token?(e.refresh_token=r.refresh_token,t._useRefreshToken(e)):(e.id_token_hint=e.id_token_hint||t.settings.includeIdTokenInSilentRenew&&r&&r.id_token,r&&t._settings.validateSubOnSilentRenew&&(i.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",r.profile.sub),e.current_sub=r.profile.sub),t._signinSilentIframe(e))})},UserManager.prototype._useRefreshToken=function _useRefreshToken(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(e).then(function(e){return e?e.access_token?t._loadUser().then(function(r){if(r){var n=Promise.resolve();return e.id_token&&(n=t._validateIdTokenFromTokenRefreshToken(r.profile,e.id_token)),n.then(function(){return i.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=e.id_token,r.access_token=e.access_token,r.refresh_token=e.refresh_token||r.refresh_token,r.expires_in=e.expires_in,t.storeUser(r).then(function(){return t._events.load(r),r})})}return null}):(i.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(i.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))})},UserManager.prototype._validateIdTokenFromTokenRefreshToken=function _validateIdTokenFromTokenRefreshToken(t,e){var r=this;return this._metadataService.getIssuer().then(function(n){return r._joseUtil.validateJwtAttributes(e,n,r._settings.client_id,r._settings.clockSkew).then(function(e){return e?e.sub!==t.sub?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):e.auth_time&&e.auth_time!==t.auth_time?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):e.azp&&e.azp!==t.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!e.azp&&t.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))})})},UserManager.prototype._signinSilentIframe=function _signinSilentIframe(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return e?(t.redirect_uri=e,t.prompt=t.prompt||"none",this._signin(t,this._iframeNavigator,{startUrl:e,silentRequestTimeout:t.silentRequestTimeout||this.settings.silentRequestTimeout}).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilent: no sub")),t})):(i.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},UserManager.prototype.signinSilentCallback=function signinSilentCallback(t){return this._signinCallback(t,this._iframeNavigator).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilentCallback: no sub")),t})},UserManager.prototype.signinCallback=function signinCallback(t){var e=this;return this.readSigninResponseState(t).then(function(r){var n=r.state;r.response;return"si:r"===n.request_type?e.signinRedirectCallback(t):"si:p"===n.request_type?e.signinPopupCallback(t):"si:s"===n.request_type?e.signinSilentCallback(t):Promise.reject(new Error("invalid response_type in state"))})},UserManager.prototype.signoutCallback=function signoutCallback(t,e){var r=this;return this.readSignoutResponseState(t).then(function(n){var i=n.state,o=n.response;return i?"so:r"===i.request_type?r.signoutRedirectCallback(t):"so:p"===i.request_type?r.signoutPopupCallback(t,e):Promise.reject(new Error("invalid response_type in state")):o})},UserManager.prototype.querySessionStatus=function querySessionStatus(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.request_type="si:s";var r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt="none",e.response_type=e.response_type||this.settings.query_status_response_type,e.scope="openid",this._signinStart(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then(function(e){return t.processSigninResponse(e.url).then(function(t){if(i.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};i.Log.info("querySessionStatus successful, user not authenticated")})})):(i.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},UserManager.prototype._signin=function _signin(t,e){var r=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(t,e,n).then(function(e){return r._signinEnd(e.url,t)})},UserManager.prototype._signinStart=function _signinStart(t,e){var r=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.prepare(n).then(function(e){return i.Log.debug("UserManager._signinStart: got navigator window handle"),r.createSigninRequest(t).then(function(t){return i.Log.debug("UserManager._signinStart: got signin request"),n.url=t.url,n.id=t.state.id,e.navigate(n)}).catch(function(t){throw e.close&&(i.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),e.close()),t})})},UserManager.prototype._signinEnd=function _signinEnd(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(t).then(function(t){i.Log.debug("UserManager._signinEnd: got signin response");var n=new a.User(t);if(r.current_sub){if(r.current_sub!==n.profile.sub)return i.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",n.profile.sub),Promise.reject(new Error("login_required"));i.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return e.storeUser(n).then(function(){return i.Log.debug("UserManager._signinEnd: user stored"),e._events.load(n),n})})},UserManager.prototype._signinCallback=function _signinCallback(t,e){return i.Log.debug("UserManager._signinCallback"),e.callback(t)},UserManager.prototype.signoutRedirect=function signoutRedirect(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.request_type="so:r";var e=t.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;e&&(t.post_logout_redirect_uri=e);var r={useReplaceToNavigate:t.useReplaceToNavigate};return this._signoutStart(t,this._redirectNavigator,r).then(function(){i.Log.info("UserManager.signoutRedirect: successful")})},UserManager.prototype.signoutRedirectCallback=function signoutRedirectCallback(t){return this._signoutEnd(t||this._redirectNavigator.url).then(function(t){return i.Log.info("UserManager.signoutRedirectCallback: successful"),t})},UserManager.prototype.signoutPopup=function signoutPopup(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.request_type="so:p";var e=t.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return t.post_logout_redirect_uri=e,t.display="popup",t.post_logout_redirect_uri&&(t.state=t.state||{}),this._signout(t,this._popupNavigator,{startUrl:e,popupWindowFeatures:t.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:t.popupWindowTarget||this.settings.popupWindowTarget}).then(function(){i.Log.info("UserManager.signoutPopup: successful")})},UserManager.prototype.signoutPopupCallback=function signoutPopupCallback(t,e){void 0===e&&"boolean"==typeof t&&(e=t,t=null);return this._popupNavigator.callback(t,e,"?").then(function(){i.Log.info("UserManager.signoutPopupCallback: successful")})},UserManager.prototype._signout=function _signout(t,e){var r=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(t,e,n).then(function(t){return r._signoutEnd(t.url)})},UserManager.prototype._signoutStart=function _signoutStart(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this,r=arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(n).then(function(r){return i.Log.debug("UserManager._signoutStart: got navigator window handle"),e._loadUser().then(function(o){return i.Log.debug("UserManager._signoutStart: loaded current user from storage"),(e._settings.revokeAccessTokenOnSignout?e._revokeInternal(o):Promise.resolve()).then(function(){var s=t.id_token_hint||o&&o.id_token;return s&&(i.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),t.id_token_hint=s),e.removeUser().then(function(){return i.Log.debug("UserManager._signoutStart: user removed, creating signout request"),e.createSignoutRequest(t).then(function(t){return i.Log.debug("UserManager._signoutStart: got signout request"),n.url=t.url,t.state&&(n.id=t.state.id),r.navigate(n)})})})}).catch(function(t){throw r.close&&(i.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),r.close()),t})})},UserManager.prototype._signoutEnd=function _signoutEnd(t){return this.processSignoutResponse(t).then(function(t){return i.Log.debug("UserManager._signoutEnd: got signout response"),t})},UserManager.prototype.revokeAccessToken=function revokeAccessToken(){var t=this;return this._loadUser().then(function(e){return t._revokeInternal(e,!0).then(function(r){if(r)return i.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),e.access_token=null,e.refresh_token=null,e.expires_at=null,e.token_type=null,t.storeUser(e).then(function(){i.Log.debug("UserManager.revokeAccessToken: user stored"),t._events.load(e)})})}).then(function(){i.Log.info("UserManager.revokeAccessToken: access token revoked successfully")})},UserManager.prototype._revokeInternal=function _revokeInternal(t,e){var r=this;if(t){var n=t.access_token,o=t.refresh_token;return this._revokeAccessTokenInternal(n,e).then(function(t){return r._revokeRefreshTokenInternal(o,e).then(function(e){return t||e||i.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e})})}return Promise.resolve(!1)},UserManager.prototype._revokeAccessTokenInternal=function _revokeAccessTokenInternal(t,e){return!t||t.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(t,e).then(function(){return!0})},UserManager.prototype._revokeRefreshTokenInternal=function _revokeRefreshTokenInternal(t,e){return t?this._tokenRevocationClient.revoke(t,e,"refresh_token").then(function(){return!0}):Promise.resolve(!1)},UserManager.prototype.startSilentRenew=function startSilentRenew(){this._silentRenewService.start()},UserManager.prototype.stopSilentRenew=function stopSilentRenew(){this._silentRenewService.stop()},UserManager.prototype._loadUser=function _loadUser(){return this._userStore.get(this._userStoreKey).then(function(t){return t?(i.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(i.Log.debug("UserManager._loadUser: no user storageString"),null)})},UserManager.prototype.storeUser=function storeUser(t){if(t){i.Log.debug("UserManager.storeUser: storing user");var e=t.toStorageString();return this._userStore.set(this._userStoreKey,e)}return i.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},n(UserManager,[{key:"_redirectNavigator",get:function get(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function get(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function get(){return this.settings.iframeNavigator}},{key:"_userStore",get:function get(){return this.settings.userStore}},{key:"events",get:function get(){return this._events}},{key:"_userStoreKey",get:function get(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),UserManager}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.popup_redirect_uri,n=e.popup_post_logout_redirect_uri,i=e.popupWindowFeatures,p=e.popupWindowTarget,g=e.silent_redirect_uri,d=e.silentRequestTimeout,v=e.automaticSilentRenew,y=void 0!==v&&v,m=e.validateSubOnSilentRenew,_=void 0!==m&&m,S=e.includeIdTokenInSilentRenew,b=void 0===S||S,w=e.monitorSession,F=void 0===w||w,E=e.checkSessionInterval,x=void 0===E?l:E,k=e.stopCheckSessionOnError,A=void 0===k||k,P=e.query_status_response_type,I=e.revokeAccessTokenOnSignout,C=void 0!==I&&I,R=e.accessTokenExpiringNotificationTime,B=void 0===R?h:R,T=e.redirectNavigator,M=void 0===T?new o.RedirectNavigator:T,O=e.popupNavigator,U=void 0===O?new s.PopupNavigator:O,N=e.iframeNavigator,L=void 0===N?new a.IFrameNavigator:N,D=e.userStore,j=void 0===D?new u.WebStorageStateStore({store:c.Global.sessionStorage}):D;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,UserManagerSettings);var H=function _possibleConstructorReturn(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,arguments[0]));return H._popup_redirect_uri=r,H._popup_post_logout_redirect_uri=n,H._popupWindowFeatures=i,H._popupWindowTarget=p,H._silent_redirect_uri=g,H._silentRequestTimeout=d,H._automaticSilentRenew=y,H._validateSubOnSilentRenew=_,H._includeIdTokenInSilentRenew=b,H._accessTokenExpiringNotificationTime=B,H._monitorSession=F,H._checkSessionInterval=x,H._stopCheckSessionOnError=A,P?H._query_status_response_type=P:arguments[0]&&arguments[0].response_type?H._query_status_response_type=f.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":H._query_status_response_type="id_token",H._revokeAccessTokenOnSignout=C,H._redirectNavigator=M,H._popupNavigator=U,H._iframeNavigator=L,H._userStore=j,H}return function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(UserManagerSettings,t),n(UserManagerSettings,[{key:"popup_redirect_uri",get:function get(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function get(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function get(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function get(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function get(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function get(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function get(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function get(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function get(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function get(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function get(){return this._monitorSession}},{key:"checkSessionInterval",get:function get(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function get(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function get(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function get(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function get(){return this._redirectNavigator}},{key:"popupNavigator",get:function get(){return this._popupNavigator}},{key:"iframeNavigator",get:function get(){return this._iframeNavigator}},{key:"userStore",get:function get(){return this._userStore}}]),UserManagerSettings}(i.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];n.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,e),r&&this._userLoaded.raise(e)},UserManagerEvents.prototype.unload=function unload(){n.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},UserManagerEvents.prototype.addUserLoaded=function addUserLoaded(t){this._userLoaded.addHandler(t)},UserManagerEvents.prototype.removeUserLoaded=function removeUserLoaded(t){this._userLoaded.removeHandler(t)},UserManagerEvents.prototype.addUserUnloaded=function addUserUnloaded(t){this._userUnloaded.addHandler(t)},UserManagerEvents.prototype.removeUserUnloaded=function removeUserUnloaded(t){this._userUnloaded.removeHandler(t)},UserManagerEvents.prototype.addSilentRenewError=function addSilentRenewError(t){this._silentRenewError.addHandler(t)},UserManagerEvents.prototype.removeSilentRenewError=function removeSilentRenewError(t){this._silentRenewError.removeHandler(t)},UserManagerEvents.prototype._raiseSilentRenewError=function _raiseSilentRenewError(t){n.Log.debug("UserManagerEvents._raiseSilentRenewError",t.message),this._silentRenewError.raise(t)},UserManagerEvents.prototype.addUserSignedOut=function addUserSignedOut(t){this._userSignedOut.addHandler(t)},UserManagerEvents.prototype.removeUserSignedOut=function removeUserSignedOut(t){this._userSignedOut.removeHandler(t)},UserManagerEvents.prototype._raiseUserSignedOut=function _raiseUserSignedOut(t){n.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise(t)},UserManagerEvents.prototype.addUserSessionChanged=function addUserSessionChanged(t){this._userSessionChanged.addHandler(t)},UserManagerEvents.prototype.removeUserSessionChanged=function removeUserSessionChanged(t){this._userSessionChanged.removeHandler(t)},UserManagerEvents.prototype._raiseUserSessionChanged=function _raiseUserSessionChanged(t){n.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise(t)},UserManagerEvents}(i.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var n=function(){function defineProperties(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;!function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,Timer);var i=function _possibleConstructorReturn(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,e));return i._timer=r,i._nowFunc=n||function(){return Date.now()/1e3},i}return function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(Timer,t),Timer.prototype.init=function init(t){t<=0&&(t=1),t=parseInt(t);var e=this.now+t;if(this.expiration===e&&this._timerHandle)i.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),i.Log.debug("Timer.init timer "+this._name+" for duration:",t),this._expiration=e;var r=5;t 0 && arguments[0] !== undefined ? arguments[0] : {}; - var url = args.redirect_uri || this.settings.silent_redirect_uri; + var url = args.redirect_uri || this.settings.silent_redirect_uri || this.settings.redirect_uri; if (!url) { _Log.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"); return Promise.reject(new Error("No silent_redirect_uri configured")); @@ -10146,7 +10149,7 @@ var UserManager = exports.UserManager = function (_OidcClient) { var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; args.request_type = "si:s"; // this acts like a signin silent - var url = args.redirect_uri || this.settings.silent_redirect_uri; + var url = args.redirect_uri || this.settings.silent_redirect_uri || this.settings.redirect_uri; if (!url) { _Log.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"); return Promise.reject(new Error("No silent_redirect_uri configured")); @@ -10256,7 +10259,10 @@ var UserManager = exports.UserManager = function (_OidcClient) { if (postLogoutRedirectUri) { args.post_logout_redirect_uri = postLogoutRedirectUri; } - return this._signoutStart(args, this._redirectNavigator).then(function () { + var navParams = { + useReplaceToNavigate: args.useReplaceToNavigate + }; + return this._signoutStart(args, this._redirectNavigator, navParams).then(function () { _Log.Log.info("UserManager.signoutRedirect: successful"); }); }; @@ -10948,6 +10954,8 @@ exports.AllowedSigningAlgs = exports.b64tohex = exports.hextob64u = exports.cryp var _jsbn = __webpack_require__(/*! jsbn */ "./node_modules/jsbn/index.js"); +var _jsbn2 = _interopRequireDefault(_jsbn); + var _sha = __webpack_require__(/*! crypto-js/sha256 */ "./node_modules/crypto-js/sha256.js"); var _sha2 = _interopRequireDefault(_sha); @@ -10958,16 +10966,18 @@ var _base64Js2 = _interopRequireDefault(_base64Js); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var BigInteger = _jsbn2.default.BigInteger; + /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ */ -var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /* - Based on the work of Auth0 - https://github.com/auth0/idtoken-verifier - https://github.com/auth0/idtoken-verifier/blob/master/LICENSE - Which is based on the work of Tom Wu - http://www-cs-students.stanford.edu/~tjw/jsbn/ - http://www-cs-students.stanford.edu/~tjw/jsbn/LICENSE - */ +/* +Based on the work of Auth0 +https://github.com/auth0/idtoken-verifier +https://github.com/auth0/idtoken-verifier/blob/master/LICENSE +Which is based on the work of Tom Wu +http://www-cs-students.stanford.edu/~tjw/jsbn/ +http://www-cs-students.stanford.edu/~tjw/jsbn/LICENSE +*/ /* * To support most basic OpenId use cases (using RSA256), we can get away without @@ -10980,6 +10990,7 @@ var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; * - Perform common base64 encoding/decoding tasks. */ +var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var b64pad = "="; var Base64 = { @@ -11092,7 +11103,7 @@ function RSAVerifier(modulus, exp) { this.e = 0; if (modulus != null && exp != null && modulus.length > 0 && exp.length > 0) { - this.n = new _jsbn.BigInteger(modulus, 16); + this.n = new BigInteger(modulus, 16); this.e = parseInt(exp, 16); } else { throw new Error('Invalid key data'); @@ -11118,7 +11129,7 @@ RSAVerifier.prototype.verify = function (msg, encsig) { encsig = Base64.decodeToHEX(encsig); encsig = encsig.replace(/[^0-9a-f]|[\s\n]]/ig, ''); - var sig = new _jsbn.BigInteger(encsig, 16); + var sig = new BigInteger(encsig, 16); if (sig.bitLength() > this.n.bitLength()) { throw new Error('Signature does not match with the key modulus.'); @@ -11269,6 +11280,23 @@ module.exports = exports['default']; /***/ }), +/***/ "./version.js": +/*!********************!*\ + !*** ./version.js ***! + \********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var Version = "1.9.0-beta.4";exports.Version = Version; + +/***/ }), + /***/ 0: /*!***************************************!*\ !*** multi ./polyfills.js ./index.js ***! @@ -11283,4 +11311,4 @@ module.exports = __webpack_require__(/*! ./index.js */"./index.js"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXM2L3Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL2FycmF5L2ZpbmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL2FycmF5L2lzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9hcnJheS9zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9hcnJheS9zcGxpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL2Z1bmN0aW9uL2JpbmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL29iamVjdC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LW1ldGhvZHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BlcmZvcm0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmljdC1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9jb3JlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTI1Ni5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2pzYm4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL3V1aWQvbGliL3JuZy1icm93c2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvdXVpZC92NC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vcG9seWZpbGxzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQWNjZXNzVG9rZW5FdmVudHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9DaGVja1Nlc3Npb25JRnJhbWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Db3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YVBvcHVwTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YVBvcHVwV2luZG93LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvRXJyb3JSZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0V2ZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvR2xvYmFsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSUZyYW1lTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSUZyYW1lV2luZG93LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSW5NZW1vcnlXZWJTdG9yYWdlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxJbXBsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxSc2EuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Kc29uU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0xvZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL01ldGFkYXRhU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL09pZGNDbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9PaWRjQ2xpZW50U2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Qb3B1cE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1BvcHVwV2luZG93LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUmVkaXJlY3ROYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9SZXNwb25zZVZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Nlc3Npb25Nb25pdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbmluUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblJlc3BvbnNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbmluU3RhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWdub3V0UmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25vdXRSZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpbGVudFJlbmV3U2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1N0YXRlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVGltZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Ub2tlbkNsaWVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Rva2VuUmV2b2NhdGlvbkNsaWVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VybFV0aWxpdHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlckluZm9TZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlckV2ZW50cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL2NyeXB0by9yc2EuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9yYW5kb20uanMiXSwibmFtZXMiOlsiTG9nIiwiT2lkY0NsaWVudCIsIk9pZGNDbGllbnRTZXR0aW5ncyIsIldlYlN0b3JhZ2VTdGF0ZVN0b3JlIiwiSW5NZW1vcnlXZWJTdG9yYWdlIiwiVXNlck1hbmFnZXIiLCJBY2Nlc3NUb2tlbkV2ZW50cyIsIk1ldGFkYXRhU2VydmljZSIsIkNvcmRvdmFQb3B1cE5hdmlnYXRvciIsIkNvcmRvdmFJRnJhbWVOYXZpZ2F0b3IiLCJDaGVja1Nlc3Npb25JRnJhbWUiLCJUb2tlblJldm9jYXRpb25DbGllbnQiLCJTZXNzaW9uTW9uaXRvciIsIkdsb2JhbCIsIlVzZXIiLCJEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUiLCJhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSIsImFjY2Vzc1Rva2VuRXhwaXJpbmdUaW1lciIsIlRpbWVyIiwiYWNjZXNzVG9rZW5FeHBpcmVkVGltZXIiLCJfYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUiLCJfYWNjZXNzVG9rZW5FeHBpcmluZyIsIl9hY2Nlc3NUb2tlbkV4cGlyZWQiLCJsb2FkIiwiY29udGFpbmVyIiwiYWNjZXNzX3Rva2VuIiwiZXhwaXJlc19pbiIsInVuZGVmaW5lZCIsImR1cmF0aW9uIiwiZGVidWciLCJleHBpcmluZyIsImluaXQiLCJjYW5jZWwiLCJleHBpcmVkIiwidW5sb2FkIiwiYWRkQWNjZXNzVG9rZW5FeHBpcmluZyIsImNiIiwiYWRkSGFuZGxlciIsInJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJpbmciLCJyZW1vdmVIYW5kbGVyIiwiYWRkQWNjZXNzVG9rZW5FeHBpcmVkIiwicmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkIiwiRGVmYXVsdEludGVydmFsIiwiY2FsbGJhY2siLCJjbGllbnRfaWQiLCJ1cmwiLCJpbnRlcnZhbCIsInN0b3BPbkVycm9yIiwiX2NhbGxiYWNrIiwiX2NsaWVudF9pZCIsIl91cmwiLCJfaW50ZXJ2YWwiLCJfc3RvcE9uRXJyb3IiLCJpZHgiLCJpbmRleE9mIiwiX2ZyYW1lX29yaWdpbiIsInN1YnN0ciIsIl9mcmFtZSIsIndpbmRvdyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwidmlzaWJpbGl0eSIsInBvc2l0aW9uIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0Iiwic3JjIiwiUHJvbWlzZSIsInJlc29sdmUiLCJvbmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJfYm91bmRNZXNzYWdlRXZlbnQiLCJfbWVzc2FnZSIsImJpbmQiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsIm9yaWdpbiIsInNvdXJjZSIsImNvbnRlbnRXaW5kb3ciLCJkYXRhIiwiZXJyb3IiLCJzdG9wIiwic3RhcnQiLCJzZXNzaW9uX3N0YXRlIiwiX3Nlc3Npb25fc3RhdGUiLCJzZW5kIiwicG9zdE1lc3NhZ2UiLCJfdGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJwcmVwYXJlIiwicGFyYW1zIiwicG9wdXBXaW5kb3dGZWF0dXJlcyIsInBvcHVwIiwiQ29yZG92YVBvcHVwV2luZG93IiwiRGVmYXVsdFBvcHVwRmVhdHVyZXMiLCJEZWZhdWx0UG9wdXBUYXJnZXQiLCJfcHJvbWlzZSIsInJlamVjdCIsIl9yZXNvbHZlIiwiX3JlamVjdCIsImZlYXR1cmVzIiwidGFyZ2V0IiwicG9wdXBXaW5kb3dUYXJnZXQiLCJyZWRpcmVjdF91cmkiLCJzdGFydFVybCIsIl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZCIsImNvcmRvdmFNZXRhZGF0YSIsInNvbWUiLCJuYW1lIiwiaGFzT3duUHJvcGVydHkiLCJuYXZpZ2F0ZSIsIl9lcnJvciIsImNvcmRvdmEiLCJyZXF1aXJlIiwibWV0YWRhdGEiLCJfcG9wdXAiLCJJbkFwcEJyb3dzZXIiLCJvcGVuIiwiX2V4aXRDYWxsYmFja0V2ZW50IiwiX2V4aXRDYWxsYmFjayIsIl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50IiwiX2xvYWRTdGFydENhbGxiYWNrIiwicHJvbWlzZSIsImV2ZW50IiwiX3N1Y2Nlc3MiLCJtZXNzYWdlIiwiX2NsZWFudXAiLCJFcnJvciIsImNsb3NlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkVycm9yUmVzcG9uc2UiLCJlcnJvcl9kZXNjcmlwdGlvbiIsImVycm9yX3VyaSIsInN0YXRlIiwiRXZlbnQiLCJfbmFtZSIsIl9jYWxsYmFja3MiLCJwdXNoIiwiZmluZEluZGV4IiwiaXRlbSIsInNwbGljZSIsInJhaXNlIiwiaSIsImxlbmd0aCIsInRpbWVyIiwiaGFuZGxlIiwidGVzdGluZyIsInJlcXVlc3QiLCJfdGVzdGluZyIsInNldFhNTEh0dHBSZXF1ZXN0IiwibmV3UmVxdWVzdCIsImxvY2F0aW9uIiwibG9jYWxTdG9yYWdlIiwic2Vzc2lvblN0b3JhZ2UiLCJYTUxIdHRwUmVxdWVzdCIsIklGcmFtZU5hdmlnYXRvciIsImZyYW1lIiwiSUZyYW1lV2luZG93Iiwibm90aWZ5UGFyZW50IiwiRGVmYXVsdFRpbWVvdXQiLCJ0aW1lb3V0Iiwic2lsZW50UmVxdWVzdFRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiX3RpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsIl9vcmlnaW4iLCJmcmFtZUVsZW1lbnQiLCJocmVmIiwicGFyZW50IiwicHJvdG9jb2wiLCJob3N0IiwiX2RhdGEiLCJnZXRJdGVtIiwia2V5Iiwic2V0SXRlbSIsInZhbHVlIiwicmVtb3ZlSXRlbSIsImluZGV4IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImdldEpvc2VVdGlsIiwiandzIiwiS2V5VXRpbCIsIlg1MDkiLCJjcnlwdG8iLCJoZXh0b2I2NHUiLCJiNjR0b2hleCIsIkFsbG93ZWRTaWduaW5nQWxncyIsInBhcnNlSnd0Iiwiand0IiwidG9rZW4iLCJKV1MiLCJwYXJzZSIsImhlYWRlciIsImhlYWRlck9iaiIsInBheWxvYWQiLCJwYXlsb2FkT2JqIiwidmFsaWRhdGVKd3QiLCJpc3N1ZXIiLCJhdWRpZW5jZSIsImNsb2NrU2tldyIsIm5vdyIsInRpbWVJbnNlbnNpdGl2ZSIsImt0eSIsIm4iLCJnZXRLZXkiLCJ4NWMiLCJoZXgiLCJnZXRQdWJsaWNLZXlGcm9tQ2VydEhleCIsImNydiIsIngiLCJ5IiwiSm9zZVV0aWwiLCJfdmFsaWRhdGVKd3QiLCJ2YWxpZGF0ZUp3dEF0dHJpYnV0ZXMiLCJwYXJzZUludCIsIkRhdGUiLCJpc3MiLCJhdWQiLCJ2YWxpZEF1ZGllbmNlIiwiQXJyYXkiLCJpc0FycmF5IiwiYXpwIiwibG93ZXJOb3ciLCJ1cHBlck5vdyIsImlhdCIsIm5iZiIsImV4cCIsInRoZW4iLCJ2ZXJpZnkiLCJoYXNoU3RyaW5nIiwiYWxnIiwiVXRpbCIsImhleFRvQmFzZTY0VXJsIiwiSnNvblNlcnZpY2UiLCJhZGRpdGlvbmFsQ29udGVudFR5cGVzIiwiWE1MSHR0cFJlcXVlc3RDdG9yIiwiand0SGFuZGxlciIsIl9jb250ZW50VHlwZXMiLCJzbGljZSIsIl9YTUxIdHRwUmVxdWVzdCIsIl9qd3RIYW5kbGVyIiwiZ2V0SnNvbiIsInJlcSIsImFsbG93ZWRDb250ZW50VHlwZXMiLCJzdGF0dXMiLCJjb250ZW50VHlwZSIsImdldFJlc3BvbnNlSGVhZGVyIiwiZm91bmQiLCJmaW5kIiwic3RhcnRzV2l0aCIsIkpTT04iLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwib25lcnJvciIsInNldFJlcXVlc3RIZWFkZXIiLCJwb3N0Rm9ybSIsImVuY29kZVVSSUNvbXBvbmVudCIsIm5vcExvZ2dlciIsImluZm8iLCJ3YXJuIiwiTk9ORSIsIkVSUk9SIiwiV0FSTiIsIklORk8iLCJERUJVRyIsImxvZ2dlciIsImxldmVsIiwicmVzZXQiLCJhcmdzIiwiYXBwbHkiLCJmcm9tIiwiT2lkY01ldGFkYXRhVXJsUGF0aCIsInNldHRpbmdzIiwiSnNvblNlcnZpY2VDdG9yIiwiX3NldHRpbmdzIiwiX2pzb25TZXJ2aWNlIiwiZ2V0TWV0YWRhdGEiLCJtZXRhZGF0YVVybCIsImdldElzc3VlciIsIl9nZXRNZXRhZGF0YVByb3BlcnR5IiwiZ2V0QXV0aG9yaXphdGlvbkVuZHBvaW50IiwiZ2V0VXNlckluZm9FbmRwb2ludCIsImdldFRva2VuRW5kcG9pbnQiLCJvcHRpb25hbCIsImdldENoZWNrU2Vzc2lvbklmcmFtZSIsImdldEVuZFNlc3Npb25FbmRwb2ludCIsImdldFJldm9jYXRpb25FbmRwb2ludCIsImdldEtleXNFbmRwb2ludCIsImdldFNpZ25pbmdLZXlzIiwic2lnbmluZ0tleXMiLCJqd2tzX3VyaSIsImtleVNldCIsImtleXMiLCJfbWV0YWRhdGFVcmwiLCJhdXRob3JpdHkiLCJjcmVhdGVTaWduaW5SZXF1ZXN0IiwicmVzcG9uc2VfdHlwZSIsInNjb3BlIiwicHJvbXB0IiwibWF4X2FnZSIsInVpX2xvY2FsZXMiLCJpZF90b2tlbl9oaW50IiwibG9naW5faGludCIsImFjcl92YWx1ZXMiLCJyZXNvdXJjZSIsInJlcXVlc3RfdXJpIiwicmVzcG9uc2VfbW9kZSIsImV4dHJhUXVlcnlQYXJhbXMiLCJyZXF1ZXN0X3R5cGUiLCJzdGF0ZVN0b3JlIiwiU2lnbmluUmVxdWVzdCIsImlzQ29kZSIsIl9tZXRhZGF0YVNlcnZpY2UiLCJzaWduaW5SZXF1ZXN0Iiwic2lnbmluU3RhdGUiLCJfc3RhdGVTdG9yZSIsInNldCIsImlkIiwidG9TdG9yYWdlU3RyaW5nIiwicmVhZFNpZ25pblJlc3BvbnNlU3RhdGUiLCJyZW1vdmVTdGF0ZSIsInVzZVF1ZXJ5IiwiZGVsaW1pdGVyIiwicmVzcG9uc2UiLCJTaWduaW5SZXNwb25zZSIsInN0YXRlQXBpIiwicmVtb3ZlIiwiZ2V0Iiwic3RvcmVkU3RhdGVTdHJpbmciLCJTaWduaW5TdGF0ZSIsImZyb21TdG9yYWdlU3RyaW5nIiwicHJvY2Vzc1NpZ25pblJlc3BvbnNlIiwiX3ZhbGlkYXRvciIsInZhbGlkYXRlU2lnbmluUmVzcG9uc2UiLCJjcmVhdGVTaWdub3V0UmVxdWVzdCIsInBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIlNpZ25vdXRSZXF1ZXN0Iiwic2lnbm91dFN0YXRlIiwicmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlIiwiU2lnbm91dFJlc3BvbnNlIiwic3RhdGVLZXkiLCJTdGF0ZSIsInByb2Nlc3NTaWdub3V0UmVzcG9uc2UiLCJ2YWxpZGF0ZVNpZ25vdXRSZXNwb25zZSIsImNsZWFyU3RhbGVTdGF0ZSIsInN0YWxlU3RhdGVBZ2UiLCJ2YWxpZGF0b3IiLCJtZXRhZGF0YVNlcnZpY2UiLCJEZWZhdWx0UmVzcG9uc2VUeXBlIiwiRGVmYXVsdFNjb3BlIiwiRGVmYXVsdFN0YWxlU3RhdGVBZ2UiLCJEZWZhdWx0Q2xvY2tTa2V3SW5TZWNvbmRzIiwiY2xpZW50X3NlY3JldCIsImZpbHRlclByb3RvY29sQ2xhaW1zIiwibG9hZFVzZXJJbmZvIiwidXNlckluZm9Kd3RJc3N1ZXIiLCJSZXNwb25zZVZhbGlkYXRvckN0b3IiLCJSZXNwb25zZVZhbGlkYXRvciIsIk1ldGFkYXRhU2VydmljZUN0b3IiLCJfYXV0aG9yaXR5IiwiX21ldGFkYXRhIiwiX3NpZ25pbmdLZXlzIiwiX2NsaWVudF9zZWNyZXQiLCJfcmVzcG9uc2VfdHlwZSIsIl9zY29wZSIsIl9yZWRpcmVjdF91cmkiLCJfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX3Byb21wdCIsIl9kaXNwbGF5IiwiX21heF9hZ2UiLCJfdWlfbG9jYWxlcyIsIl9hY3JfdmFsdWVzIiwiX3Jlc291cmNlIiwiX3Jlc3BvbnNlX21vZGUiLCJfZmlsdGVyUHJvdG9jb2xDbGFpbXMiLCJfbG9hZFVzZXJJbmZvIiwiX3N0YWxlU3RhdGVBZ2UiLCJfY2xvY2tTa2V3IiwiX3VzZXJJbmZvSnd0SXNzdWVyIiwiX2V4dHJhUXVlcnlQYXJhbXMiLCJQb3B1cE5hdmlnYXRvciIsIlBvcHVwV2luZG93Iiwia2VlcE9wZW4iLCJub3RpZnlPcGVuZXIiLCJDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwiLCJfY2hlY2tGb3JQb3B1cENsb3NlZFRpbWVyIiwiX2NoZWNrRm9yUG9wdXBDbG9zZWQiLCJfaWQiLCJmb2N1cyIsImNsb3NlZCIsIm9wZW5lciIsIlVybFV0aWxpdHkiLCJwYXJzZVVybEZyYWdtZW50IiwiUmVkaXJlY3ROYXZpZ2F0b3IiLCJ1c2VSZXBsYWNlVG9OYXZpZ2F0ZSIsInJlcGxhY2UiLCJQcm90b2NvbENsYWltcyIsIlVzZXJJbmZvU2VydmljZUN0b3IiLCJVc2VySW5mb1NlcnZpY2UiLCJqb3NlVXRpbCIsIlRva2VuQ2xpZW50Q3RvciIsIlRva2VuQ2xpZW50IiwiX3VzZXJJbmZvU2VydmljZSIsIl9qb3NlVXRpbCIsIl90b2tlbkNsaWVudCIsIl9wcm9jZXNzU2lnbmluUGFyYW1zIiwiX3ZhbGlkYXRlVG9rZW5zIiwiX3Byb2Nlc3NDbGFpbXMiLCJub25jZSIsImlkX3Rva2VuIiwiY29kZV92ZXJpZmllciIsImNvZGUiLCJpc09wZW5JZENvbm5lY3QiLCJwcm9maWxlIiwiZ2V0Q2xhaW1zIiwiY2xhaW1zIiwic3ViIiwiX21lcmdlQ2xhaW1zIiwiY2xhaW1zMSIsImNsYWltczIiLCJyZXN1bHQiLCJhc3NpZ24iLCJ2YWx1ZXMiLCJmb3JFYWNoIiwidHlwZSIsIl9wcm9jZXNzQ29kZSIsIl92YWxpZGF0ZUlkVG9rZW5BbmRBY2Nlc3NUb2tlbiIsIl92YWxpZGF0ZUlkVG9rZW4iLCJleGNoYW5nZUNvZGUiLCJ0b2tlblJlc3BvbnNlIiwiX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMiLCJjbG9ja1NrZXdJblNlY29uZHMiLCJfdmFsaWRhdGVBY2Nlc3NUb2tlbiIsImtpZCIsIl9maWx0ZXJCeUFsZyIsImZpbHRlciIsImF0X2hhc2giLCJoYXNoQWxnIiwiaGFzaEJpdHMiLCJzaGEiLCJoYXNoIiwibGVmdCIsImxlZnRfYjY0dSIsInVzZXJNYW5hZ2VyIiwiQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciIsIl91c2VyTWFuYWdlciIsIl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yIiwiZXZlbnRzIiwiYWRkVXNlckxvYWRlZCIsIl9zdGFydCIsImFkZFVzZXJVbmxvYWRlZCIsIl9zdG9wIiwiZ2V0VXNlciIsInVzZXIiLCJjYXRjaCIsImVyciIsIl9zdWIiLCJfc2lkIiwic2lkIiwiX2NoZWNrU2Vzc2lvbklGcmFtZSIsIl9jaGVja1Nlc3Npb25JbnRlcnZhbCIsIl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvciIsInF1ZXJ5U2Vzc2lvblN0YXR1cyIsInJhaXNlVXNlclNpZ25lZE91dEV2ZW50Iiwic2Vzc2lvbiIsIl9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZCIsIl9yYWlzZVVzZXJTaWduZWRPdXQiLCJjaGVja1Nlc3Npb25JbnRlcnZhbCIsInN0b3BDaGVja1Nlc3Npb25PbkVycm9yIiwib2lkYyIsImlzT2lkYyIsImFkZFF1ZXJ5UGFyYW0iLCJjb2RlX2NoYWxsZW5nZSIsInNwbGl0IiwiaXNPQXV0aCIsIk9pZGNTY29wZSIsInRva2VuX3R5cGUiLCJleHBpcmVzX2F0Iiwic2NvcGVzIiwiYXJndW1lbnRzIiwiX25vbmNlIiwiX2NvZGVfdmVyaWZpZXIiLCJfY29kZV9jaGFsbGVuZ2UiLCJzdHJpbmdpZnkiLCJjcmVhdGVkIiwic3RvcmFnZVN0cmluZyIsIlNpbGVudFJlbmV3U2VydmljZSIsIl90b2tlbkV4cGlyaW5nIiwic2lnbmluU2lsZW50IiwiX3JhaXNlU2lsZW50UmVuZXdFcnJvciIsIl9jcmVhdGVkIiwiX3JlcXVlc3RfdHlwZSIsInN0b3JhZ2UiLCJhZ2UiLCJjdXRvZmYiLCJnZXRBbGxLZXlzIiwicHJvbWlzZXMiLCJwIiwiYWxsIiwiVGltZXJEdXJhdGlvbiIsIm5vd0Z1bmMiLCJfbm93RnVuYyIsImV4cGlyYXRpb24iLCJfdGltZXJIYW5kbGUiLCJfZXhwaXJhdGlvbiIsInRpbWVyRHVyYXRpb24iLCJkaWZmIiwiZ3JhbnRfdHlwZSIsImV4Y2hhbmdlUmVmcmVzaFRva2VuIiwicmVmcmVzaF90b2tlbiIsIkFjY2Vzc1Rva2VuVHlwZUhpbnQiLCJSZWZyZXNoVG9rZW5UeXBlSGludCIsIl9YTUxIdHRwUmVxdWVzdEN0b3IiLCJyZXZva2UiLCJyZXF1aXJlZCIsIl9yZXZva2UiLCJ4aHIiLCJnbG9iYWwiLCJsYXN0SW5kZXhPZiIsInJlZ2V4IiwibSIsImNvdW50ZXIiLCJleGVjIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicHJvcCIsIl9nZXRDbGFpbXNGcm9tSnd0IiwiaXNzdWVyUHJvbWlzZSIsIlNpbGVudFJlbmV3U2VydmljZUN0b3IiLCJTZXNzaW9uTW9uaXRvckN0b3IiLCJUb2tlblJldm9jYXRpb25DbGllbnRDdG9yIiwiVXNlck1hbmFnZXJTZXR0aW5ncyIsIl9ldmVudHMiLCJVc2VyTWFuYWdlckV2ZW50cyIsIl9zaWxlbnRSZW5ld1NlcnZpY2UiLCJhdXRvbWF0aWNTaWxlbnRSZW5ldyIsInN0YXJ0U2lsZW50UmVuZXciLCJtb25pdG9yU2Vzc2lvbiIsIl9zZXNzaW9uTW9uaXRvciIsIl90b2tlblJldm9jYXRpb25DbGllbnQiLCJfbG9hZFVzZXIiLCJyZW1vdmVVc2VyIiwic3RvcmVVc2VyIiwic2lnbmluUmVkaXJlY3QiLCJuYXZQYXJhbXMiLCJfc2lnbmluU3RhcnQiLCJfcmVkaXJlY3ROYXZpZ2F0b3IiLCJzaWduaW5SZWRpcmVjdENhbGxiYWNrIiwiX3NpZ25pbkVuZCIsInNpZ25pblBvcHVwIiwicG9wdXBfcmVkaXJlY3RfdXJpIiwiX3NpZ25pbiIsIl9wb3B1cE5hdmlnYXRvciIsInNpZ25pblBvcHVwQ2FsbGJhY2siLCJfc2lnbmluQ2FsbGJhY2siLCJfdXNlUmVmcmVzaFRva2VuIiwiaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3IiwidmFsaWRhdGVTdWJPblNpbGVudFJlbmV3IiwiY3VycmVudF9zdWIiLCJfc2lnbmluU2lsZW50SWZyYW1lIiwiaWRUb2tlblZhbGlkYXRpb24iLCJfdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuIiwiYXV0aF90aW1lIiwic2lsZW50X3JlZGlyZWN0X3VyaSIsIl9pZnJhbWVOYXZpZ2F0b3IiLCJzaWduaW5TaWxlbnRDYWxsYmFjayIsInNpZ25pbkNhbGxiYWNrIiwic2lnbm91dENhbGxiYWNrIiwic2lnbm91dFJlZGlyZWN0Q2FsbGJhY2siLCJzaWdub3V0UG9wdXBDYWxsYmFjayIsInF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlIiwibmF2UmVzcG9uc2UiLCJzaWduaW5SZXNwb25zZSIsIm5hdmlnYXRvciIsIm5hdmlnYXRvclBhcmFtcyIsInNpZ25vdXRSZWRpcmVjdCIsInBvc3RMb2dvdXRSZWRpcmVjdFVyaSIsIl9zaWdub3V0U3RhcnQiLCJfc2lnbm91dEVuZCIsInNpZ25vdXRQb3B1cCIsInBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIl9zaWdub3V0IiwicmV2b2tlUHJvbWlzZSIsInJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0IiwiX3Jldm9rZUludGVybmFsIiwic2lnbm91dFJlcXVlc3QiLCJzaWdub3V0UmVzcG9uc2UiLCJyZXZva2VBY2Nlc3NUb2tlbiIsInN1Y2Nlc3MiLCJfcmV2b2tlQWNjZXNzVG9rZW5JbnRlcm5hbCIsIl9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbCIsImF0U3VjY2VzcyIsInJ0U3VjY2VzcyIsInN0b3BTaWxlbnRSZW5ldyIsIl91c2VyU3RvcmUiLCJfdXNlclN0b3JlS2V5IiwicmVkaXJlY3ROYXZpZ2F0b3IiLCJwb3B1cE5hdmlnYXRvciIsImlmcmFtZU5hdmlnYXRvciIsInVzZXJTdG9yZSIsIl91c2VyTG9hZGVkIiwiX3VzZXJVbmxvYWRlZCIsIl9zaWxlbnRSZW5ld0Vycm9yIiwiX3VzZXJTaWduZWRPdXQiLCJfdXNlclNlc3Npb25DaGFuZ2VkIiwicmFpc2VFdmVudCIsInJlbW92ZVVzZXJMb2FkZWQiLCJyZW1vdmVVc2VyVW5sb2FkZWQiLCJhZGRTaWxlbnRSZW5ld0Vycm9yIiwicmVtb3ZlU2lsZW50UmVuZXdFcnJvciIsImFkZFVzZXJTaWduZWRPdXQiLCJyZW1vdmVVc2VyU2lnbmVkT3V0IiwiYWRkVXNlclNlc3Npb25DaGFuZ2VkIiwicmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkIiwiRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsIiwic3RvcmUiLCJfcG9wdXBfcmVkaXJlY3RfdXJpIiwiX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIl9wb3B1cFdpbmRvd0ZlYXR1cmVzIiwiX3BvcHVwV2luZG93VGFyZ2V0IiwiX3NpbGVudF9yZWRpcmVjdF91cmkiLCJfc2lsZW50UmVxdWVzdFRpbWVvdXQiLCJfYXV0b21hdGljU2lsZW50UmVuZXciLCJfdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3IiwiX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyIsIl9tb25pdG9yU2Vzc2lvbiIsIl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSIsIl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCIsInByZWZpeCIsIl9zdG9yZSIsIl9wcmVmaXgiLCJiNjRtYXAiLCJiNjRwYWQiLCJCYXNlNjQiLCJzIiwicmV0IiwiayIsInNsb3AiLCJjaGFyQXQiLCJ2IiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiaGV4VG9CYXNlNjQiLCJoIiwiYyIsInN1YnN0cmluZyIsInBhZGRpbmciLCJzdHIiLCJtb2QiLCJwYWQiLCJqb2luIiwiYnl0ZUFycmF5VG9IZXgiLCJyYXciLCJIRVgiLCJfaGV4IiwidG9TdHJpbmciLCJkZWNvZGVUb0hFWCIsImJhc2U2NEpzIiwidG9CeXRlQXJyYXkiLCJiYXNlNjRUb0Jhc2U2NFVybCIsInVybERlY29kZSIsImF0b2IiLCJEaWdlc3RJbmZvSGVhZCIsInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDIiLCJtZDUiLCJyaXBlbWQxNjAiLCJEaWdlc3RBbGdzIiwiU0hBMjU2IiwiUlNBVmVyaWZpZXIiLCJtb2R1bHVzIiwiQmlnSW50ZWdlciIsImdldEFsZ29yaXRobUZyb21EaWdlc3QiLCJoRGlnZXN0SW5mbyIsImFsZ05hbWUiLCJoZWFkIiwibGVuIiwicHJvdG90eXBlIiwibXNnIiwiZW5jc2lnIiwic2lnIiwiYml0TGVuZ3RoIiwiZGVjcnlwdGVkU2lnIiwibW9kUG93SW50IiwiZGlnZXN0IiwiZGlnZXN0SW5mbyIsIm1zZ0hhc2giLCJwYXJ0cyIsImFsbG93ZWRTaWduaW5nQWxncyIsImhlYWRlckFuZFBheWxvYWQiLCJnZXRQdWJsaWNLZXlGcm9tQ2VydFBFTSIsImhhc2hGdW5jIiwicmFuZG9tIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7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IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vc3JjL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnQgfSBmcm9tICcuL3NyYy9PaWRjQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudFNldHRpbmdzIH0gZnJvbSAnLi9zcmMvT2lkY0NsaWVudFNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgV2ViU3RvcmFnZVN0YXRlU3RvcmUgfSBmcm9tICcuL3NyYy9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyc7XHJcbmltcG9ydCB7IEluTWVtb3J5V2ViU3RvcmFnZSB9IGZyb20gJy4vc3JjL0luTWVtb3J5V2ViU3RvcmFnZS5qcyc7XHJcbmltcG9ydCB7IFVzZXJNYW5hZ2VyIH0gZnJvbSAnLi9zcmMvVXNlck1hbmFnZXIuanMnO1xyXG5pbXBvcnQgeyBBY2Nlc3NUb2tlbkV2ZW50cyB9IGZyb20gJy4vc3JjL0FjY2Vzc1Rva2VuRXZlbnRzLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9zcmMvTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgQ29yZG92YVBvcHVwTmF2aWdhdG9yIH0gZnJvbSAnLi9zcmMvQ29yZG92YVBvcHVwTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgQ29yZG92YUlGcmFtZU5hdmlnYXRvciB9IGZyb20gJy4vc3JjL0NvcmRvdmFJRnJhbWVOYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBDaGVja1Nlc3Npb25JRnJhbWUgfSBmcm9tICcuL3NyYy9DaGVja1Nlc3Npb25JRnJhbWUuanMnO1xyXG5pbXBvcnQgeyBUb2tlblJldm9jYXRpb25DbGllbnQgfSBmcm9tICcuL3NyYy9Ub2tlblJldm9jYXRpb25DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBTZXNzaW9uTW9uaXRvciB9IGZyb20gJy4vc3JjL1Nlc3Npb25Nb25pdG9yLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9zcmMvR2xvYmFsLmpzJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vc3JjL1VzZXIuanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgTG9nLFxyXG4gICAgT2lkY0NsaWVudCxcclxuICAgIE9pZGNDbGllbnRTZXR0aW5ncyxcclxuICAgIFdlYlN0b3JhZ2VTdGF0ZVN0b3JlLFxyXG4gICAgSW5NZW1vcnlXZWJTdG9yYWdlLFxyXG4gICAgVXNlck1hbmFnZXIsXHJcbiAgICBBY2Nlc3NUb2tlbkV2ZW50cyxcclxuICAgIE1ldGFkYXRhU2VydmljZSxcclxuICAgIENvcmRvdmFQb3B1cE5hdmlnYXRvcixcclxuICAgIENvcmRvdmFJRnJhbWVOYXZpZ2F0b3IsXHJcbiAgICBDaGVja1Nlc3Npb25JRnJhbWUsXHJcbiAgICBUb2tlblJldm9jYXRpb25DbGllbnQsXHJcbiAgICBTZXNzaW9uTW9uaXRvcixcclxuICAgIEdsb2JhbCxcclxuICAgIFVzZXJcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayhcbiAgICAgIHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aClcbiAgICApKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCJyZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL19jb3JlJykuUHJvbWlzZTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LmFycmF5LmZpbmQnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLkFycmF5LmZpbmQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuQXJyYXkuaXNBcnJheTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLkFycmF5LnNvbWU7XG4iLCIvLyBmb3IgYSBsZWdhY3kgY29kZSBhbmQgZnV0dXJlIGZpeGVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLmNhbGwuYXBwbHkoQXJyYXkucHJvdG90eXBlLnNwbGljZSwgYXJndW1lbnRzKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5GdW5jdGlvbi5iaW5kO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmFzc2lnbjtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IHJlcXVpcmUoJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSByZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi40JyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIGlmIChpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKSBUW2tleV0gPSBTW2tleV07XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiLy8gMjIuMS4yLjIgLyAxNS40LjMuMiBBcnJheS5pc0FycmF5KGFyZylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnQXJyYXknLCB7IGlzQXJyYXk6IHJlcXVpcmUoJy4vX2lzLWFycmF5JykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4IHx8ICcnO1xudmFyICRQcm9taXNlID0gZ2xvYmFsW1BST01JU0VdO1xudmFyIGlzTm9kZSA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xudmFyIGVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIEludGVybmFsLCBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHksIE93blByb21pc2VDYXBhYmlsaXR5LCBXcmFwcGVyO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcblxudmFyIFVTRV9OQVRJVkUgPSAhIWZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9ICRQcm9taXNlLnJlc29sdmUoMSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhlbXB0eSwgZW1wdHkpO1xuICAgIH07XG4gICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIHJldHVybiAoaXNOb2RlIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZVxuICAgICAgLy8gdjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gICAgICAvLyB3ZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgICAgJiYgdjguaW5kZXhPZignNi42JykgIT09IDBcbiAgICAgICYmIHVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUvNjYnKSA9PT0gLTE7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbiAocHJvbWlzZSwgaXNSZWplY3QpIHtcbiAgaWYgKHByb21pc2UuX24pIHJldHVybjtcbiAgcHJvbWlzZS5fbiA9IHRydWU7XG4gIHZhciBjaGFpbiA9IHByb21pc2UuX2M7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgb2sgPSBwcm9taXNlLl9zID09IDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBydW4gPSBmdW5jdGlvbiAocmVhY3Rpb24pIHtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHByb21pc2UuX2ggPT0gMikgb25IYW5kbGVVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgICAgICAgICBwcm9taXNlLl9oID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gbWF5IHRocm93XG4gICAgICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGggPiBpKSBydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgIHByb21pc2UuX24gPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpIG9uVW5oYW5kbGVkKHByb21pc2UpO1xuICB9KTtcbn07XG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgdW5oYW5kbGVkID0gaXNVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgdmFyIHJlc3VsdCwgaGFuZGxlciwgY29uc29sZTtcbiAgICBpZiAodW5oYW5kbGVkKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pIHtcbiAgICAgICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgfSBwcm9taXNlLl9hID0gdW5kZWZpbmVkO1xuICAgIGlmICh1bmhhbmRsZWQgJiYgcmVzdWx0LmUpIHRocm93IHJlc3VsdC52O1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICByZXR1cm4gcHJvbWlzZS5faCAhPT0gMSAmJiAocHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jKS5sZW5ndGggPT09IDA7XG59O1xudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpIHtcbiAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHByb21pc2UuX3YgfSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICBwcm9taXNlLl9zID0gMjtcbiAgaWYgKCFwcm9taXNlLl9hKSBwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgdmFyIHRoZW47XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmICh0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgJHJlamVjdC5jYWxsKHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9LCBlKTsgLy8gd3JhcFxuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHRoaXMuX2MgPSBbXTsgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG4gICAgdGhpcy5fYSA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgIHRoaXMuX3MgPSAwOyAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICB0aGlzLl9kID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIGRvbmVcbiAgICB0aGlzLl92ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIHZhbHVlXG4gICAgdGhpcy5faCA9IDA7ICAgICAgICAgICAgICAvLyA8LSByZWplY3Rpb24gc3RhdGUsIDAgLSBkZWZhdWx0LCAxIC0gaGFuZGxlZCwgMiAtIHVuaGFuZGxlZFxuICAgIHRoaXMuX24gPSBmYWxzZTsgICAgICAgICAgLy8gPC0gbm90aWZ5XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpKCRQcm9taXNlLnByb3RvdHlwZSwge1xuICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9hKSB0aGlzLl9hLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgfTtcbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFByb21pc2U6ICRQcm9taXNlIH0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICB2YXIgJCRyZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoTElCUkFSWSAmJiB0aGlzID09PSBXcmFwcGVyID8gJFByb21pc2UgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7XG4gICRQcm9taXNlLmFsbChpdGVyKVsnY2F0Y2gnXShlbXB0eSk7XG59KSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjEgUHJvbWlzZS5hbGwoaXRlcmFibGUpXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyICRpbmRleCA9IGluZGV4Kys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1skaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeSgpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0cm9vdC5DcnlwdG9KUyA9IGZhY3RvcnkoKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG5cblx0LyoqXG5cdCAqIENyeXB0b0pTIGNvcmUgY29tcG9uZW50cy5cblx0ICovXG5cdHZhciBDcnlwdG9KUyA9IENyeXB0b0pTIHx8IChmdW5jdGlvbiAoTWF0aCwgdW5kZWZpbmVkKSB7XG5cdCAgICAvKlxuXHQgICAgICogTG9jYWwgcG9seWZpbCBvZiBPYmplY3QuY3JlYXRlXG5cdCAgICAgKi9cblx0ICAgIHZhciBjcmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZnVuY3Rpb24gRigpIHt9O1xuXG5cdCAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcblx0ICAgICAgICAgICAgdmFyIHN1YnR5cGU7XG5cblx0ICAgICAgICAgICAgRi5wcm90b3R5cGUgPSBvYmo7XG5cblx0ICAgICAgICAgICAgc3VidHlwZSA9IG5ldyBGKCk7XG5cblx0ICAgICAgICAgICAgRi5wcm90b3R5cGUgPSBudWxsO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBzdWJ0eXBlO1xuXHQgICAgICAgIH07XG5cdCAgICB9KCkpXG5cblx0ICAgIC8qKlxuXHQgICAgICogQ3J5cHRvSlMgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQyA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExpYnJhcnkgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYiA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEJhc2Ugb2JqZWN0IGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2UgPSAoZnVuY3Rpb24gKCkge1xuXG5cblx0ICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3ZlcnJpZGVzIFByb3BlcnRpZXMgdG8gY29weSBpbnRvIHRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgTXlUeXBlID0gQ3J5cHRvSlMubGliLkJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJyxcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGV4dGVuZDogZnVuY3Rpb24gKG92ZXJyaWRlcykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3Bhd25cblx0ICAgICAgICAgICAgICAgIHZhciBzdWJ0eXBlID0gY3JlYXRlKHRoaXMpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBBdWdtZW50XG5cdCAgICAgICAgICAgICAgICBpZiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgc3VidHlwZS5taXhJbihvdmVycmlkZXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBDcmVhdGUgZGVmYXVsdCBpbml0aWFsaXplclxuXHQgICAgICAgICAgICAgICAgaWYgKCFzdWJ0eXBlLmhhc093blByb3BlcnR5KCdpbml0JykgfHwgdGhpcy5pbml0ID09PSBzdWJ0eXBlLmluaXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyLmluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplcidzIHByb3RvdHlwZSBpcyB0aGUgc3VidHlwZSBvYmplY3Rcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdC5wcm90b3R5cGUgPSBzdWJ0eXBlO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZWZlcmVuY2Ugc3VwZXJ0eXBlXG5cdCAgICAgICAgICAgICAgICBzdWJ0eXBlLiRzdXBlciA9IHRoaXM7XG5cblx0ICAgICAgICAgICAgICAgIHJldHVybiBzdWJ0eXBlO1xuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBFeHRlbmRzIHRoaXMgb2JqZWN0IGFuZCBydW5zIHRoZSBpbml0IG1ldGhvZC5cblx0ICAgICAgICAgICAgICogQXJndW1lbnRzIHRvIGNyZWF0ZSgpIHdpbGwgYmUgcGFzc2VkIHRvIGluaXQoKS5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgbmV3IG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIGluc3RhbmNlID0gTXlUeXBlLmNyZWF0ZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLmV4dGVuZCgpO1xuXHQgICAgICAgICAgICAgICAgaW5zdGFuY2UuaW5pdC5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTtcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBhZGQgc29tZSBsb2dpYyB3aGVuIHlvdXIgb2JqZWN0cyBhcmUgY3JlYXRlZC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICogICAgICAgICAgICAgLy8gLi4uXG5cdCAgICAgICAgICAgICAqICAgICAgICAgfVxuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIENvcGllcyBwcm9wZXJ0aWVzIGludG8gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIHRvIG1peCBpbi5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIE15VHlwZS5taXhJbih7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgZmllbGQ6ICd2YWx1ZSdcblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgbWl4SW46IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gSUUgd29uJ3QgY29weSB0b1N0cmluZyB1c2luZyB0aGUgbG9vcCBhYm92ZVxuXHQgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ3RvU3RyaW5nJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nID0gcHJvcGVydGllcy50b1N0cmluZztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGNsb25lLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIGNsb25lID0gaW5zdGFuY2UuY2xvbmUoKTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9O1xuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtBcnJheX0gd29yZHMgVGhlIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaWdCeXRlcyBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIChPcHRpb25hbCkgQW4gYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaWdCeXRlcyAoT3B0aW9uYWwpIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhlIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSk7XG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbMHgwMDAxMDIwMywgMHgwNDA1MDYwN10sIDYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uICh3b3Jkcywgc2lnQnl0ZXMpIHtcblx0ICAgICAgICAgICAgd29yZHMgPSB0aGlzLndvcmRzID0gd29yZHMgfHwgW107XG5cblx0ICAgICAgICAgICAgaWYgKHNpZ0J5dGVzICE9IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHdvcmRzLmxlbmd0aCAqIDQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhpcyB3b3JkIGFycmF5IHRvIGEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtFbmNvZGVyfSBlbmNvZGVyIChPcHRpb25hbCkgVGhlIGVuY29kaW5nIHN0cmF0ZWd5IHRvIHVzZS4gRGVmYXVsdDogQ3J5cHRvSlMuZW5jLkhleFxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5naWZpZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheSArICcnO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5LnRvU3RyaW5nKCk7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoZW5jb2Rlcikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGVuY29kZXIgfHwgSGV4KS5zdHJpbmdpZnkodGhpcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmNhdGVuYXRlcyBhIHdvcmQgYXJyYXkgdG8gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgd29yZEFycmF5MS5jb25jYXQod29yZEFycmF5Mik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY29uY2F0OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgdGhpc1dvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRXb3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHRoaXNTaWdCeXRlcyA9IHRoaXMuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciB0aGF0U2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAgdGhpcy5jbGFtcCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbmNhdFxuXHQgICAgICAgICAgICBpZiAodGhpc1NpZ0J5dGVzICUgNCkge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgYnl0ZSBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhhdFNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdEJ5dGUgPSAodGhhdFdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGkpID4+PiAyXSB8PSB0aGF0Qnl0ZSA8PCAoMjQgLSAoKHRoaXNTaWdCeXRlcyArIGkpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIENvcHkgb25lIHdvcmQgYXQgYSB0aW1lXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoYXRTaWdCeXRlczsgaSArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpc1dvcmRzWyh0aGlzU2lnQnl0ZXMgKyBpKSA+Pj4gMl0gPSB0aGF0V29yZHNbaSA+Pj4gMl07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyArPSB0aGF0U2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2hhaW5hYmxlXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZW1vdmVzIGluc2lnbmlmaWNhbnQgYml0cy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgd29yZEFycmF5LmNsYW1wKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xhbXA6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHRoaXMud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHRoaXMuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXBcblx0ICAgICAgICAgICAgd29yZHNbc2lnQnl0ZXMgPj4+IDJdICY9IDB4ZmZmZmZmZmYgPDwgKDMyIC0gKHNpZ0J5dGVzICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgd29yZHMubGVuZ3RoID0gTWF0aC5jZWlsKHNpZ0J5dGVzIC8gNCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSB3b3JkQXJyYXkuY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLndvcmRzID0gdGhpcy53b3Jkcy5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSB3b3JkIGFycmF5IGZpbGxlZCB3aXRoIHJhbmRvbSBieXRlcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuQnl0ZXMgVGhlIG51bWJlciBvZiByYW5kb20gYnl0ZXMgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSByYW5kb20gd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKDE2KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByYW5kb206IGZ1bmN0aW9uIChuQnl0ZXMpIHtcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cblx0ICAgICAgICAgICAgdmFyIHIgPSAoZnVuY3Rpb24gKG1fdykge1xuXHQgICAgICAgICAgICAgICAgdmFyIG1fdyA9IG1fdztcblx0ICAgICAgICAgICAgICAgIHZhciBtX3ogPSAweDNhZGU2OGIxO1xuXHQgICAgICAgICAgICAgICAgdmFyIG1hc2sgPSAweGZmZmZmZmZmO1xuXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG1feiA9ICgweDkwNjkgKiAobV96ICYgMHhGRkZGKSArIChtX3ogPj4gMHgxMCkpICYgbWFzaztcblx0ICAgICAgICAgICAgICAgICAgICBtX3cgPSAoMHg0NjUwICogKG1fdyAmIDB4RkZGRikgKyAobV93ID4+IDB4MTApKSAmIG1hc2s7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICgobV96IDw8IDB4MTApICsgbV93KSAmIG1hc2s7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVzdWx0IC89IDB4MTAwMDAwMDAwO1xuXHQgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAwLjU7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAqIChNYXRoLnJhbmRvbSgpID4gLjUgPyAxIDogLTEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgcmNhY2hlOyBpIDwgbkJ5dGVzOyBpICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBfciA9IHIoKHJjYWNoZSB8fCBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDAwMDAwKTtcblxuXHQgICAgICAgICAgICAgICAgcmNhY2hlID0gX3IoKSAqIDB4M2FkZTY3Yjc7XG5cdCAgICAgICAgICAgICAgICB3b3Jkcy5wdXNoKChfcigpICogMHgxMDAwMDAwMDApIHwgMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBuQnl0ZXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEVuY29kZXIgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYyA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEhleCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEhleCA9IENfZW5jLkhleCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBoZXggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoZXhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgaGV4Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlID4+PiA0KS50b1N0cmluZygxNikpO1xuXHQgICAgICAgICAgICAgICAgaGV4Q2hhcnMucHVzaCgoYml0ZSAmIDB4MGYpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gaGV4Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgaGV4IHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaGV4U3RyIFRoZSBoZXggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2UoaGV4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGhleFN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgaGV4U3RyTGVuZ3RoID0gaGV4U3RyLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhleFN0ckxlbmd0aDsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAzXSB8PSBwYXJzZUludChoZXhTdHIuc3Vic3RyKGksIDIpLCAxNikgPDwgKDI0IC0gKGkgJSA4KSAqIDQpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgaGV4U3RyTGVuZ3RoIC8gMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBMYXRpbjEgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBMYXRpbjEgPSBDX2VuYy5MYXRpbjEgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbGF0aW4xU3RyaW5nID0gQ3J5cHRvSlMuZW5jLkxhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMUNoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJpdGUgPSAod29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgbGF0aW4xQ2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJpdGUpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBsYXRpbjFDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBMYXRpbjEgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXRpbjFTdHIgVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkxhdGluMS5wYXJzZShsYXRpbjFTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAobGF0aW4xU3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBsYXRpbjFTdHJMZW5ndGggPSBsYXRpbjFTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF0aW4xU3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDJdIHw9IChsYXRpbjFTdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYpIDw8ICgyNCAtIChpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIGxhdGluMVN0ckxlbmd0aCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBVVEYtOCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtOCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB1dGY4U3RyaW5nID0gQ3J5cHRvSlMuZW5jLlV0Zjguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShMYXRpbjEuc3RyaW5naWZ5KHdvcmRBcnJheSkpKTtcblx0ICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWxmb3JtZWQgVVRGLTggZGF0YScpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgVVRGLTggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGY4U3RyIFRoZSBVVEYtOCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UodXRmOFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICh1dGY4U3RyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBMYXRpbjEucGFyc2UodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHV0ZjhTdHIpKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBidWZmZXJlZCBibG9jayBhbGdvcml0aG0gdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogVGhlIHByb3BlcnR5IGJsb2NrU2l6ZSBtdXN0IGJlIGltcGxlbWVudGVkIGluIGEgY29uY3JldGUgc3VidHlwZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gX21pbkJ1ZmZlclNpemUgVGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBzaG91bGQgYmUga2VwdCB1bnByb2Nlc3NlZCBpbiB0aGUgYnVmZmVyLiBEZWZhdWx0OiAwXG5cdCAgICAgKi9cblx0ICAgIHZhciBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQ19saWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZXNldHMgdGhpcyBibG9jayBhbGdvcml0aG0ncyBkYXRhIGJ1ZmZlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBuZXcgV29yZEFycmF5LmluaXQoKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyA9IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFkZHMgbmV3IGRhdGEgdG8gdGhpcyBibG9jayBhbGdvcml0aG0ncyBidWZmZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYXBwZW5kLiBTdHJpbmdzIGFyZSBjb252ZXJ0ZWQgdG8gYSBXb3JkQXJyYXkgdXNpbmcgVVRGLTguXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCgnZGF0YScpO1xuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLl9hcHBlbmQod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfYXBwZW5kOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBXb3JkQXJyYXksIGVsc2UgYXNzdW1lIFdvcmRBcnJheSBhbHJlYWR5XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAgZGF0YSA9IFV0ZjgucGFyc2UoZGF0YSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBBcHBlbmRcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YS5jb25jYXQoZGF0YSk7XG5cdCAgICAgICAgICAgIHRoaXMuX25EYXRhQnl0ZXMgKz0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUHJvY2Vzc2VzIGF2YWlsYWJsZSBkYXRhIGJsb2Nrcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIFRoaXMgbWV0aG9kIGludm9rZXMgX2RvUHJvY2Vzc0Jsb2NrKG9mZnNldCksIHdoaWNoIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBkb0ZsdXNoIFdoZXRoZXIgYWxsIGJsb2NrcyBhbmQgcGFydGlhbCBibG9ja3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHByb2Nlc3NlZCBkYXRhLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHByb2Nlc3NlZERhdGEgPSBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLl9wcm9jZXNzKCEhJ2ZsdXNoJyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX3Byb2Nlc3M6IGZ1bmN0aW9uIChkb0ZsdXNoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVNpZ0J5dGVzID0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IHRoaXMuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJsb2NrcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbkJsb2Nrc1JlYWR5ID0gZGF0YVNpZ0J5dGVzIC8gYmxvY2tTaXplQnl0ZXM7XG5cdCAgICAgICAgICAgIGlmIChkb0ZsdXNoKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cCB0byBpbmNsdWRlIHBhcnRpYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLmNlaWwobkJsb2Nrc1JlYWR5KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gdG8gaW5jbHVkZSBvbmx5IGZ1bGwgYmxvY2tzLFxuXHQgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBidWZmZXJcblx0ICAgICAgICAgICAgICAgIG5CbG9ja3NSZWFkeSA9IE1hdGgubWF4KChuQmxvY2tzUmVhZHkgfCAwKSAtIHRoaXMuX21pbkJ1ZmZlclNpemUsIDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgd29yZHMgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5Xb3Jkc1JlYWR5ID0gbkJsb2Nrc1JlYWR5ICogYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJ5dGVzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuQnl0ZXNSZWFkeSA9IE1hdGgubWluKG5Xb3Jkc1JlYWR5ICogNCwgZGF0YVNpZ0J5dGVzKTtcblxuXHQgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2Nrc1xuXHQgICAgICAgICAgICBpZiAobldvcmRzUmVhZHkpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IG5Xb3Jkc1JlYWR5OyBvZmZzZXQgKz0gYmxvY2tTaXplKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1hbGdvcml0aG0gbG9naWNcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb1Byb2Nlc3NCbG9jayhkYXRhV29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBwcm9jZXNzZWQgd29yZHNcblx0ICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzZWRXb3JkcyA9IGRhdGFXb3Jkcy5zcGxpY2UoMCwgbldvcmRzUmVhZHkpO1xuXHQgICAgICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuQnl0ZXNSZWFkeTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBwcm9jZXNzZWQgd29yZHNcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdChwcm9jZXNzZWRXb3JkcywgbkJ5dGVzUmVhZHkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLmNsb25lKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5fZGF0YSA9IHRoaXMuX2RhdGEuY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9taW5CdWZmZXJTaXplOiAwXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBoYXNoZXIgdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGhhc2hlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogMTYgKDUxMiBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyID0gQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEJhc2UuZXh0ZW5kKCksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgaGFzaGVyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGhhc2ggY29tcHV0YXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoYXNoZXIgPSBDcnlwdG9KUy5hbGdvLlNIQTI1Ni5jcmVhdGUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGhhc2hlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSBidWZmZXJcblx0ICAgICAgICAgICAgQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHRoaXMuX2RvUmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogVXBkYXRlcyB0aGlzIGhhc2hlciB3aXRoIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSBUaGUgbWVzc2FnZSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtIYXNoZXJ9IFRoaXMgaGFzaGVyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIudXBkYXRlKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBoYXNoXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEZpbmFsaXplcyB0aGUgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbmFsaXplIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBhIGRlc3RydWN0aXZlLCByZWFkLW9uY2Ugb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIChPcHRpb25hbCkgQSBmaW5hbCBtZXNzYWdlIHVwZGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKCk7XG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEZpbmFsIG1lc3NhZ2UgdXBkYXRlXG5cdCAgICAgICAgICAgIGlmIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWhhc2hlciBsb2dpY1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2RvRmluYWxpemUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA1MTIvMzIsXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgc2hvcnRjdXQgZnVuY3Rpb24gdG8gYSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaGVyIHRvIGNyZWF0ZSBhIGhlbHBlciBmb3IuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHNob3J0Y3V0IGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSGVscGVyKENyeXB0b0pTLmFsZ28uU0hBMjU2KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfY3JlYXRlSGVscGVyOiBmdW5jdGlvbiAoaGFzaGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwgY2ZnKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGhhc2hlci5pbml0KGNmZykuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gdXNlIGluIHRoaXMgSE1BQyBoZWxwZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHNob3J0Y3V0IGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgSG1hY1NIQTI1NiA9IENyeXB0b0pTLmxpYi5IYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIbWFjSGVscGVyOiBmdW5jdGlvbiAoaGFzaGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwga2V5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENfYWxnby5ITUFDLmluaXQoaGFzaGVyLCBrZXkpLmZpbmFsaXplKG1lc3NhZ2UpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFsZ29yaXRobSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ28gPSB7fTtcblxuXHQgICAgcmV0dXJuIEM7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBJbml0aWFsaXphdGlvbiBhbmQgcm91bmQgY29uc3RhbnRzIHRhYmxlc1xuXHQgICAgdmFyIEggPSBbXTtcblx0ICAgIHZhciBLID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgY29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZ1bmN0aW9uIGlzUHJpbWUobikge1xuXHQgICAgICAgICAgICB2YXIgc3FydE4gPSBNYXRoLnNxcnQobik7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGZhY3RvciA9IDI7IGZhY3RvciA8PSBzcXJ0TjsgZmFjdG9yKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmICghKG4gJSBmYWN0b3IpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgZnVuY3Rpb24gZ2V0RnJhY3Rpb25hbEJpdHMobikge1xuXHQgICAgICAgICAgICByZXR1cm4gKChuIC0gKG4gfCAwKSkgKiAweDEwMDAwMDAwMCkgfCAwO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBuID0gMjtcblx0ICAgICAgICB2YXIgblByaW1lID0gMDtcblx0ICAgICAgICB3aGlsZSAoblByaW1lIDwgNjQpIHtcblx0ICAgICAgICAgICAgaWYgKGlzUHJpbWUobikpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChuUHJpbWUgPCA4KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgSFtuUHJpbWVdID0gZ2V0RnJhY3Rpb25hbEJpdHMoTWF0aC5wb3cobiwgMSAvIDIpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIEtbblByaW1lXSA9IGdldEZyYWN0aW9uYWxCaXRzKE1hdGgucG93KG4sIDEgLyAzKSk7XG5cblx0ICAgICAgICAgICAgICAgIG5QcmltZSsrO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgbisrO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdFxuXHQgICAgdmFyIFcgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMjU2IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMjU2ID0gQ19hbGdvLlNIQTI1NiA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoSC5zbGljZSgwKSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgZSA9IEhbNF07XG5cdCAgICAgICAgICAgIHZhciBmID0gSFs1XTtcblx0ICAgICAgICAgICAgdmFyIGcgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgaCA9IEhbN107XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IE1bb2Zmc2V0ICsgaV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweCA9IFdbaSAtIDE1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwICA9ICgoZ2FtbWEweCA8PCAyNSkgfCAoZ2FtbWEweCA+Pj4gNykpICBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGdhbW1hMHggPDwgMTQpIHwgKGdhbW1hMHggPj4+IDE4KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYW1tYTB4ID4+PiAzKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTF4ID0gV1tpIC0gMl07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMSAgPSAoKGdhbW1hMXggPDwgMTUpIHwgKGdhbW1hMXggPj4+IDE3KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnYW1tYTF4IDw8IDEzKSB8IChnYW1tYTF4ID4+PiAxOSkpIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2FtbWExeCA+Pj4gMTApO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgY2ggID0gKGUgJiBmKSBeICh+ZSAmIGcpO1xuXHQgICAgICAgICAgICAgICAgdmFyIG1haiA9IChhICYgYikgXiAoYSAmIGMpIF4gKGIgJiBjKTtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMCA9ICgoYSA8PCAzMCkgfCAoYSA+Pj4gMikpIF4gKChhIDw8IDE5KSB8IChhID4+PiAxMykpIF4gKChhIDw8IDEwKSB8IChhID4+PiAyMikpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMSA9ICgoZSA8PCAyNikgfCAoZSA+Pj4gNikpIF4gKChlIDw8IDIxKSB8IChlID4+PiAxMSkpIF4gKChlIDw8IDcpICB8IChlID4+PiAyNSkpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MiA9IHNpZ21hMCArIG1hajtcblxuXHQgICAgICAgICAgICAgICAgaCA9IGc7XG5cdCAgICAgICAgICAgICAgICBnID0gZjtcblx0ICAgICAgICAgICAgICAgIGYgPSBlO1xuXHQgICAgICAgICAgICAgICAgZSA9IChkICsgdDEpIHwgMDtcblx0ICAgICAgICAgICAgICAgIGQgPSBjO1xuXHQgICAgICAgICAgICAgICAgYyA9IGI7XG5cdCAgICAgICAgICAgICAgICBiID0gYTtcblx0ICAgICAgICAgICAgICAgIGEgPSAodDEgKyB0MikgfCAwO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSFswXSA9IChIWzBdICsgYSkgfCAwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMV0gKyBiKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFsyXSArIGMpIHwgMDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzNdICsgZCkgfCAwO1xuXHQgICAgICAgICAgICBIWzRdID0gKEhbNF0gKyBlKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNV0gPSAoSFs1XSArIGYpIHwgMDtcblx0ICAgICAgICAgICAgSFs2XSA9IChIWzZdICsgZykgfCAwO1xuXHQgICAgICAgICAgICBIWzddID0gKEhbN10gKyBoKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTI1NignbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjU2KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMjU2KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyNTYobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTI1Nik7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTI1NjtcblxufSkpOyIsIihmdW5jdGlvbigpe1xuXG4gICAgLy8gQ29weXJpZ2h0IChjKSAyMDA1ICBUb20gV3VcbiAgICAvLyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICAgIC8vIFNlZSBcIkxJQ0VOU0VcIiBmb3IgZGV0YWlscy5cblxuICAgIC8vIEJhc2ljIEphdmFTY3JpcHQgQk4gbGlicmFyeSAtIHN1YnNldCB1c2VmdWwgZm9yIFJTQSBlbmNyeXB0aW9uLlxuXG4gICAgLy8gQml0cyBwZXIgZGlnaXRcbiAgICB2YXIgZGJpdHM7XG5cbiAgICAvLyBKYXZhU2NyaXB0IGVuZ2luZSBhbmFseXNpc1xuICAgIHZhciBjYW5hcnkgPSAweGRlYWRiZWVmY2FmZTtcbiAgICB2YXIgal9sbSA9ICgoY2FuYXJ5JjB4ZmZmZmZmKT09MHhlZmNhZmUpO1xuXG4gICAgLy8gKHB1YmxpYykgQ29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBCaWdJbnRlZ2VyKGEsYixjKSB7XG4gICAgICBpZihhICE9IG51bGwpXG4gICAgICAgIGlmKFwibnVtYmVyXCIgPT0gdHlwZW9mIGEpIHRoaXMuZnJvbU51bWJlcihhLGIsYyk7XG4gICAgICAgIGVsc2UgaWYoYiA9PSBudWxsICYmIFwic3RyaW5nXCIgIT0gdHlwZW9mIGEpIHRoaXMuZnJvbVN0cmluZyhhLDI1Nik7XG4gICAgICAgIGVsc2UgdGhpcy5mcm9tU3RyaW5nKGEsYik7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIG5ldywgdW5zZXQgQmlnSW50ZWdlclxuICAgIGZ1bmN0aW9uIG5iaSgpIHsgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKG51bGwpOyB9XG5cbiAgICAvLyBhbTogQ29tcHV0ZSB3X2ogKz0gKHgqdGhpc19pKSwgcHJvcGFnYXRlIGNhcnJpZXMsXG4gICAgLy8gYyBpcyBpbml0aWFsIGNhcnJ5LCByZXR1cm5zIGZpbmFsIGNhcnJ5LlxuICAgIC8vIGMgPCAzKmR2YWx1ZSwgeCA8IDIqZHZhbHVlLCB0aGlzX2kgPCBkdmFsdWVcbiAgICAvLyBXZSBuZWVkIHRvIHNlbGVjdCB0aGUgZmFzdGVzdCBvbmUgdGhhdCB3b3JrcyBpbiB0aGlzIGVudmlyb25tZW50LlxuXG4gICAgLy8gYW0xOiB1c2UgYSBzaW5nbGUgbXVsdCBhbmQgZGl2aWRlIHRvIGdldCB0aGUgaGlnaCBiaXRzLFxuICAgIC8vIG1heCBkaWdpdCBiaXRzIHNob3VsZCBiZSAyNiBiZWNhdXNlXG4gICAgLy8gbWF4IGludGVybmFsIHZhbHVlID0gMipkdmFsdWVeMi0yKmR2YWx1ZSAoPCAyXjUzKVxuICAgIGZ1bmN0aW9uIGFtMShpLHgsdyxqLGMsbikge1xuICAgICAgd2hpbGUoLS1uID49IDApIHtcbiAgICAgICAgdmFyIHYgPSB4KnRoaXNbaSsrXSt3W2pdK2M7XG4gICAgICAgIGMgPSBNYXRoLmZsb29yKHYvMHg0MDAwMDAwKTtcbiAgICAgICAgd1tqKytdID0gdiYweDNmZmZmZmY7XG4gICAgICB9XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgLy8gYW0yIGF2b2lkcyBhIGJpZyBtdWx0LWFuZC1leHRyYWN0IGNvbXBsZXRlbHkuXG4gICAgLy8gTWF4IGRpZ2l0IGJpdHMgc2hvdWxkIGJlIDw9IDMwIGJlY2F1c2Ugd2UgZG8gYml0d2lzZSBvcHNcbiAgICAvLyBvbiB2YWx1ZXMgdXAgdG8gMipoZHZhbHVlXjItaGR2YWx1ZS0xICg8IDJeMzEpXG4gICAgZnVuY3Rpb24gYW0yKGkseCx3LGosYyxuKSB7XG4gICAgICB2YXIgeGwgPSB4JjB4N2ZmZiwgeGggPSB4Pj4xNTtcbiAgICAgIHdoaWxlKC0tbiA+PSAwKSB7XG4gICAgICAgIHZhciBsID0gdGhpc1tpXSYweDdmZmY7XG4gICAgICAgIHZhciBoID0gdGhpc1tpKytdPj4xNTtcbiAgICAgICAgdmFyIG0gPSB4aCpsK2gqeGw7XG4gICAgICAgIGwgPSB4bCpsKygobSYweDdmZmYpPDwxNSkrd1tqXSsoYyYweDNmZmZmZmZmKTtcbiAgICAgICAgYyA9IChsPj4+MzApKyhtPj4+MTUpK3hoKmgrKGM+Pj4zMCk7XG4gICAgICAgIHdbaisrXSA9IGwmMHgzZmZmZmZmZjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICAvLyBBbHRlcm5hdGVseSwgc2V0IG1heCBkaWdpdCBiaXRzIHRvIDI4IHNpbmNlIHNvbWVcbiAgICAvLyBicm93c2VycyBzbG93IGRvd24gd2hlbiBkZWFsaW5nIHdpdGggMzItYml0IG51bWJlcnMuXG4gICAgZnVuY3Rpb24gYW0zKGkseCx3LGosYyxuKSB7XG4gICAgICB2YXIgeGwgPSB4JjB4M2ZmZiwgeGggPSB4Pj4xNDtcbiAgICAgIHdoaWxlKC0tbiA+PSAwKSB7XG4gICAgICAgIHZhciBsID0gdGhpc1tpXSYweDNmZmY7XG4gICAgICAgIHZhciBoID0gdGhpc1tpKytdPj4xNDtcbiAgICAgICAgdmFyIG0gPSB4aCpsK2gqeGw7XG4gICAgICAgIGwgPSB4bCpsKygobSYweDNmZmYpPDwxNCkrd1tqXStjO1xuICAgICAgICBjID0gKGw+PjI4KSsobT4+MTQpK3hoKmg7XG4gICAgICAgIHdbaisrXSA9IGwmMHhmZmZmZmZmO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIHZhciBpbkJyb3dzZXIgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xuICAgIGlmKGluQnJvd3NlciAmJiBqX2xtICYmIChuYXZpZ2F0b3IuYXBwTmFtZSA9PSBcIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlclwiKSkge1xuICAgICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYW0gPSBhbTI7XG4gICAgICBkYml0cyA9IDMwO1xuICAgIH1cbiAgICBlbHNlIGlmKGluQnJvd3NlciAmJiBqX2xtICYmIChuYXZpZ2F0b3IuYXBwTmFtZSAhPSBcIk5ldHNjYXBlXCIpKSB7XG4gICAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbSA9IGFtMTtcbiAgICAgIGRiaXRzID0gMjY7XG4gICAgfVxuICAgIGVsc2UgeyAvLyBNb3ppbGxhL05ldHNjYXBlIHNlZW1zIHRvIHByZWZlciBhbTNcbiAgICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFtID0gYW0zO1xuICAgICAgZGJpdHMgPSAyODtcbiAgICB9XG5cbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5EQiA9IGRiaXRzO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkRNID0gKCgxPDxkYml0cyktMSk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuRFYgPSAoMTw8ZGJpdHMpO1xuXG4gICAgdmFyIEJJX0ZQID0gNTI7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuRlYgPSBNYXRoLnBvdygyLEJJX0ZQKTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5GMSA9IEJJX0ZQLWRiaXRzO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkYyID0gMipkYml0cy1CSV9GUDtcblxuICAgIC8vIERpZ2l0IGNvbnZlcnNpb25zXG4gICAgdmFyIEJJX1JNID0gXCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcbiAgICB2YXIgQklfUkMgPSBuZXcgQXJyYXkoKTtcbiAgICB2YXIgcnIsdnY7XG4gICAgcnIgPSBcIjBcIi5jaGFyQ29kZUF0KDApO1xuICAgIGZvcih2diA9IDA7IHZ2IDw9IDk7ICsrdnYpIEJJX1JDW3JyKytdID0gdnY7XG4gICAgcnIgPSBcImFcIi5jaGFyQ29kZUF0KDApO1xuICAgIGZvcih2diA9IDEwOyB2diA8IDM2OyArK3Z2KSBCSV9SQ1tycisrXSA9IHZ2O1xuICAgIHJyID0gXCJBXCIuY2hhckNvZGVBdCgwKTtcbiAgICBmb3IodnYgPSAxMDsgdnYgPCAzNjsgKyt2dikgQklfUkNbcnIrK10gPSB2djtcblxuICAgIGZ1bmN0aW9uIGludDJjaGFyKG4pIHsgcmV0dXJuIEJJX1JNLmNoYXJBdChuKTsgfVxuICAgIGZ1bmN0aW9uIGludEF0KHMsaSkge1xuICAgICAgdmFyIGMgPSBCSV9SQ1tzLmNoYXJDb2RlQXQoaSldO1xuICAgICAgcmV0dXJuIChjPT1udWxsKT8tMTpjO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGNvcHkgdGhpcyB0byByXG4gICAgZnVuY3Rpb24gYm5wQ29weVRvKHIpIHtcbiAgICAgIGZvcih2YXIgaSA9IHRoaXMudC0xOyBpID49IDA7IC0taSkgcltpXSA9IHRoaXNbaV07XG4gICAgICByLnQgPSB0aGlzLnQ7XG4gICAgICByLnMgPSB0aGlzLnM7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgc2V0IGZyb20gaW50ZWdlciB2YWx1ZSB4LCAtRFYgPD0geCA8IERWXG4gICAgZnVuY3Rpb24gYm5wRnJvbUludCh4KSB7XG4gICAgICB0aGlzLnQgPSAxO1xuICAgICAgdGhpcy5zID0gKHg8MCk/LTE6MDtcbiAgICAgIGlmKHggPiAwKSB0aGlzWzBdID0geDtcbiAgICAgIGVsc2UgaWYoeCA8IC0xKSB0aGlzWzBdID0geCt0aGlzLkRWO1xuICAgICAgZWxzZSB0aGlzLnQgPSAwO1xuICAgIH1cblxuICAgIC8vIHJldHVybiBiaWdpbnQgaW5pdGlhbGl6ZWQgdG8gdmFsdWVcbiAgICBmdW5jdGlvbiBuYnYoaSkgeyB2YXIgciA9IG5iaSgpOyByLmZyb21JbnQoaSk7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBzZXQgZnJvbSBzdHJpbmcgYW5kIHJhZGl4XG4gICAgZnVuY3Rpb24gYm5wRnJvbVN0cmluZyhzLGIpIHtcbiAgICAgIHZhciBrO1xuICAgICAgaWYoYiA9PSAxNikgayA9IDQ7XG4gICAgICBlbHNlIGlmKGIgPT0gOCkgayA9IDM7XG4gICAgICBlbHNlIGlmKGIgPT0gMjU2KSBrID0gODsgLy8gYnl0ZSBhcnJheVxuICAgICAgZWxzZSBpZihiID09IDIpIGsgPSAxO1xuICAgICAgZWxzZSBpZihiID09IDMyKSBrID0gNTtcbiAgICAgIGVsc2UgaWYoYiA9PSA0KSBrID0gMjtcbiAgICAgIGVsc2UgeyB0aGlzLmZyb21SYWRpeChzLGIpOyByZXR1cm47IH1cbiAgICAgIHRoaXMudCA9IDA7XG4gICAgICB0aGlzLnMgPSAwO1xuICAgICAgdmFyIGkgPSBzLmxlbmd0aCwgbWkgPSBmYWxzZSwgc2ggPSAwO1xuICAgICAgd2hpbGUoLS1pID49IDApIHtcbiAgICAgICAgdmFyIHggPSAoaz09OCk/c1tpXSYweGZmOmludEF0KHMsaSk7XG4gICAgICAgIGlmKHggPCAwKSB7XG4gICAgICAgICAgaWYocy5jaGFyQXQoaSkgPT0gXCItXCIpIG1pID0gdHJ1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBtaSA9IGZhbHNlO1xuICAgICAgICBpZihzaCA9PSAwKVxuICAgICAgICAgIHRoaXNbdGhpcy50KytdID0geDtcbiAgICAgICAgZWxzZSBpZihzaCtrID4gdGhpcy5EQikge1xuICAgICAgICAgIHRoaXNbdGhpcy50LTFdIHw9ICh4JigoMTw8KHRoaXMuREItc2gpKS0xKSk8PHNoO1xuICAgICAgICAgIHRoaXNbdGhpcy50KytdID0gKHg+Pih0aGlzLkRCLXNoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXNbdGhpcy50LTFdIHw9IHg8PHNoO1xuICAgICAgICBzaCArPSBrO1xuICAgICAgICBpZihzaCA+PSB0aGlzLkRCKSBzaCAtPSB0aGlzLkRCO1xuICAgICAgfVxuICAgICAgaWYoayA9PSA4ICYmIChzWzBdJjB4ODApICE9IDApIHtcbiAgICAgICAgdGhpcy5zID0gLTE7XG4gICAgICAgIGlmKHNoID4gMCkgdGhpc1t0aGlzLnQtMV0gfD0gKCgxPDwodGhpcy5EQi1zaCkpLTEpPDxzaDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xhbXAoKTtcbiAgICAgIGlmKG1pKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyx0aGlzKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBjbGFtcCBvZmYgZXhjZXNzIGhpZ2ggd29yZHNcbiAgICBmdW5jdGlvbiBibnBDbGFtcCgpIHtcbiAgICAgIHZhciBjID0gdGhpcy5zJnRoaXMuRE07XG4gICAgICB3aGlsZSh0aGlzLnQgPiAwICYmIHRoaXNbdGhpcy50LTFdID09IGMpIC0tdGhpcy50O1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gZ2l2ZW4gcmFkaXhcbiAgICBmdW5jdGlvbiBiblRvU3RyaW5nKGIpIHtcbiAgICAgIGlmKHRoaXMucyA8IDApIHJldHVybiBcIi1cIit0aGlzLm5lZ2F0ZSgpLnRvU3RyaW5nKGIpO1xuICAgICAgdmFyIGs7XG4gICAgICBpZihiID09IDE2KSBrID0gNDtcbiAgICAgIGVsc2UgaWYoYiA9PSA4KSBrID0gMztcbiAgICAgIGVsc2UgaWYoYiA9PSAyKSBrID0gMTtcbiAgICAgIGVsc2UgaWYoYiA9PSAzMikgayA9IDU7XG4gICAgICBlbHNlIGlmKGIgPT0gNCkgayA9IDI7XG4gICAgICBlbHNlIHJldHVybiB0aGlzLnRvUmFkaXgoYik7XG4gICAgICB2YXIga20gPSAoMTw8ayktMSwgZCwgbSA9IGZhbHNlLCByID0gXCJcIiwgaSA9IHRoaXMudDtcbiAgICAgIHZhciBwID0gdGhpcy5EQi0oaSp0aGlzLkRCKSVrO1xuICAgICAgaWYoaS0tID4gMCkge1xuICAgICAgICBpZihwIDwgdGhpcy5EQiAmJiAoZCA9IHRoaXNbaV0+PnApID4gMCkgeyBtID0gdHJ1ZTsgciA9IGludDJjaGFyKGQpOyB9XG4gICAgICAgIHdoaWxlKGkgPj0gMCkge1xuICAgICAgICAgIGlmKHAgPCBrKSB7XG4gICAgICAgICAgICBkID0gKHRoaXNbaV0mKCgxPDxwKS0xKSk8PChrLXApO1xuICAgICAgICAgICAgZCB8PSB0aGlzWy0taV0+PihwKz10aGlzLkRCLWspO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGQgPSAodGhpc1tpXT4+KHAtPWspKSZrbTtcbiAgICAgICAgICAgIGlmKHAgPD0gMCkgeyBwICs9IHRoaXMuREI7IC0taTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkID4gMCkgbSA9IHRydWU7XG4gICAgICAgICAgaWYobSkgciArPSBpbnQyY2hhcihkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG0/cjpcIjBcIjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSAtdGhpc1xuICAgIGZ1bmN0aW9uIGJuTmVnYXRlKCkgeyB2YXIgciA9IG5iaSgpOyBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHx0aGlzfFxuICAgIGZ1bmN0aW9uIGJuQWJzKCkgeyByZXR1cm4gKHRoaXMuczwwKT90aGlzLm5lZ2F0ZSgpOnRoaXM7IH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybiArIGlmIHRoaXMgPiBhLCAtIGlmIHRoaXMgPCBhLCAwIGlmIGVxdWFsXG4gICAgZnVuY3Rpb24gYm5Db21wYXJlVG8oYSkge1xuICAgICAgdmFyIHIgPSB0aGlzLnMtYS5zO1xuICAgICAgaWYociAhPSAwKSByZXR1cm4gcjtcbiAgICAgIHZhciBpID0gdGhpcy50O1xuICAgICAgciA9IGktYS50O1xuICAgICAgaWYociAhPSAwKSByZXR1cm4gKHRoaXMuczwwKT8tcjpyO1xuICAgICAgd2hpbGUoLS1pID49IDApIGlmKChyPXRoaXNbaV0tYVtpXSkgIT0gMCkgcmV0dXJuIHI7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGJpdCBsZW5ndGggb2YgdGhlIGludGVnZXIgeFxuICAgIGZ1bmN0aW9uIG5iaXRzKHgpIHtcbiAgICAgIHZhciByID0gMSwgdDtcbiAgICAgIGlmKCh0PXg+Pj4xNikgIT0gMCkgeyB4ID0gdDsgciArPSAxNjsgfVxuICAgICAgaWYoKHQ9eD4+OCkgIT0gMCkgeyB4ID0gdDsgciArPSA4OyB9XG4gICAgICBpZigodD14Pj40KSAhPSAwKSB7IHggPSB0OyByICs9IDQ7IH1cbiAgICAgIGlmKCh0PXg+PjIpICE9IDApIHsgeCA9IHQ7IHIgKz0gMjsgfVxuICAgICAgaWYoKHQ9eD4+MSkgIT0gMCkgeyB4ID0gdDsgciArPSAxOyB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIGluIFwidGhpc1wiXG4gICAgZnVuY3Rpb24gYm5CaXRMZW5ndGgoKSB7XG4gICAgICBpZih0aGlzLnQgPD0gMCkgcmV0dXJuIDA7XG4gICAgICByZXR1cm4gdGhpcy5EQioodGhpcy50LTEpK25iaXRzKHRoaXNbdGhpcy50LTFdXih0aGlzLnMmdGhpcy5ETSkpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIDw8IG4qREJcbiAgICBmdW5jdGlvbiBibnBETFNoaWZ0VG8obixyKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGZvcihpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSByW2krbl0gPSB0aGlzW2ldO1xuICAgICAgZm9yKGkgPSBuLTE7IGkgPj0gMDsgLS1pKSByW2ldID0gMDtcbiAgICAgIHIudCA9IHRoaXMudCtuO1xuICAgICAgci5zID0gdGhpcy5zO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzID4+IG4qREJcbiAgICBmdW5jdGlvbiBibnBEUlNoaWZ0VG8obixyKSB7XG4gICAgICBmb3IodmFyIGkgPSBuOyBpIDwgdGhpcy50OyArK2kpIHJbaS1uXSA9IHRoaXNbaV07XG4gICAgICByLnQgPSBNYXRoLm1heCh0aGlzLnQtbiwwKTtcbiAgICAgIHIucyA9IHRoaXMucztcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyA8PCBuXG4gICAgZnVuY3Rpb24gYm5wTFNoaWZ0VG8obixyKSB7XG4gICAgICB2YXIgYnMgPSBuJXRoaXMuREI7XG4gICAgICB2YXIgY2JzID0gdGhpcy5EQi1icztcbiAgICAgIHZhciBibSA9ICgxPDxjYnMpLTE7XG4gICAgICB2YXIgZHMgPSBNYXRoLmZsb29yKG4vdGhpcy5EQiksIGMgPSAodGhpcy5zPDxicykmdGhpcy5ETSwgaTtcbiAgICAgIGZvcihpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHJbaStkcysxXSA9ICh0aGlzW2ldPj5jYnMpfGM7XG4gICAgICAgIGMgPSAodGhpc1tpXSZibSk8PGJzO1xuICAgICAgfVxuICAgICAgZm9yKGkgPSBkcy0xOyBpID49IDA7IC0taSkgcltpXSA9IDA7XG4gICAgICByW2RzXSA9IGM7XG4gICAgICByLnQgPSB0aGlzLnQrZHMrMTtcbiAgICAgIHIucyA9IHRoaXMucztcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyA+PiBuXG4gICAgZnVuY3Rpb24gYm5wUlNoaWZ0VG8obixyKSB7XG4gICAgICByLnMgPSB0aGlzLnM7XG4gICAgICB2YXIgZHMgPSBNYXRoLmZsb29yKG4vdGhpcy5EQik7XG4gICAgICBpZihkcyA+PSB0aGlzLnQpIHsgci50ID0gMDsgcmV0dXJuOyB9XG4gICAgICB2YXIgYnMgPSBuJXRoaXMuREI7XG4gICAgICB2YXIgY2JzID0gdGhpcy5EQi1icztcbiAgICAgIHZhciBibSA9ICgxPDxicyktMTtcbiAgICAgIHJbMF0gPSB0aGlzW2RzXT4+YnM7XG4gICAgICBmb3IodmFyIGkgPSBkcysxOyBpIDwgdGhpcy50OyArK2kpIHtcbiAgICAgICAgcltpLWRzLTFdIHw9ICh0aGlzW2ldJmJtKTw8Y2JzO1xuICAgICAgICByW2ktZHNdID0gdGhpc1tpXT4+YnM7XG4gICAgICB9XG4gICAgICBpZihicyA+IDApIHJbdGhpcy50LWRzLTFdIHw9ICh0aGlzLnMmYm0pPDxjYnM7XG4gICAgICByLnQgPSB0aGlzLnQtZHM7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgLSBhXG4gICAgZnVuY3Rpb24gYm5wU3ViVG8oYSxyKSB7XG4gICAgICB2YXIgaSA9IDAsIGMgPSAwLCBtID0gTWF0aC5taW4oYS50LHRoaXMudCk7XG4gICAgICB3aGlsZShpIDwgbSkge1xuICAgICAgICBjICs9IHRoaXNbaV0tYVtpXTtcbiAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgfVxuICAgICAgaWYoYS50IDwgdGhpcy50KSB7XG4gICAgICAgIGMgLT0gYS5zO1xuICAgICAgICB3aGlsZShpIDwgdGhpcy50KSB7XG4gICAgICAgICAgYyArPSB0aGlzW2ldO1xuICAgICAgICAgIHJbaSsrXSA9IGMmdGhpcy5ETTtcbiAgICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgICB9XG4gICAgICAgIGMgKz0gdGhpcy5zO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGMgKz0gdGhpcy5zO1xuICAgICAgICB3aGlsZShpIDwgYS50KSB7XG4gICAgICAgICAgYyAtPSBhW2ldO1xuICAgICAgICAgIHJbaSsrXSA9IGMmdGhpcy5ETTtcbiAgICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgICB9XG4gICAgICAgIGMgLT0gYS5zO1xuICAgICAgfVxuICAgICAgci5zID0gKGM8MCk/LTE6MDtcbiAgICAgIGlmKGMgPCAtMSkgcltpKytdID0gdGhpcy5EVitjO1xuICAgICAgZWxzZSBpZihjID4gMCkgcltpKytdID0gYztcbiAgICAgIHIudCA9IGk7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgKiBhLCByICE9IHRoaXMsYSAoSEFDIDE0LjEyKVxuICAgIC8vIFwidGhpc1wiIHNob3VsZCBiZSB0aGUgbGFyZ2VyIG9uZSBpZiBhcHByb3ByaWF0ZS5cbiAgICBmdW5jdGlvbiBibnBNdWx0aXBseVRvKGEscikge1xuICAgICAgdmFyIHggPSB0aGlzLmFicygpLCB5ID0gYS5hYnMoKTtcbiAgICAgIHZhciBpID0geC50O1xuICAgICAgci50ID0gaSt5LnQ7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkgcltpXSA9IDA7XG4gICAgICBmb3IoaSA9IDA7IGkgPCB5LnQ7ICsraSkgcltpK3gudF0gPSB4LmFtKDAseVtpXSxyLGksMCx4LnQpO1xuICAgICAgci5zID0gMDtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICAgIGlmKHRoaXMucyAhPSBhLnMpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyhyLHIpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzXjIsIHIgIT0gdGhpcyAoSEFDIDE0LjE2KVxuICAgIGZ1bmN0aW9uIGJucFNxdWFyZVRvKHIpIHtcbiAgICAgIHZhciB4ID0gdGhpcy5hYnMoKTtcbiAgICAgIHZhciBpID0gci50ID0gMip4LnQ7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkgcltpXSA9IDA7XG4gICAgICBmb3IoaSA9IDA7IGkgPCB4LnQtMTsgKytpKSB7XG4gICAgICAgIHZhciBjID0geC5hbShpLHhbaV0sciwyKmksMCwxKTtcbiAgICAgICAgaWYoKHJbaSt4LnRdKz14LmFtKGkrMSwyKnhbaV0sciwyKmkrMSxjLHgudC1pLTEpKSA+PSB4LkRWKSB7XG4gICAgICAgICAgcltpK3gudF0gLT0geC5EVjtcbiAgICAgICAgICByW2kreC50KzFdID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoci50ID4gMCkgcltyLnQtMV0gKz0geC5hbShpLHhbaV0sciwyKmksMCwxKTtcbiAgICAgIHIucyA9IDA7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgZGl2aWRlIHRoaXMgYnkgbSwgcXVvdGllbnQgYW5kIHJlbWFpbmRlciB0byBxLCByIChIQUMgMTQuMjApXG4gICAgLy8gciAhPSBxLCB0aGlzICE9IG0uICBxIG9yIHIgbWF5IGJlIG51bGwuXG4gICAgZnVuY3Rpb24gYm5wRGl2UmVtVG8obSxxLHIpIHtcbiAgICAgIHZhciBwbSA9IG0uYWJzKCk7XG4gICAgICBpZihwbS50IDw9IDApIHJldHVybjtcbiAgICAgIHZhciBwdCA9IHRoaXMuYWJzKCk7XG4gICAgICBpZihwdC50IDwgcG0udCkge1xuICAgICAgICBpZihxICE9IG51bGwpIHEuZnJvbUludCgwKTtcbiAgICAgICAgaWYociAhPSBudWxsKSB0aGlzLmNvcHlUbyhyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYociA9PSBudWxsKSByID0gbmJpKCk7XG4gICAgICB2YXIgeSA9IG5iaSgpLCB0cyA9IHRoaXMucywgbXMgPSBtLnM7XG4gICAgICB2YXIgbnNoID0gdGhpcy5EQi1uYml0cyhwbVtwbS50LTFdKTsgICAvLyBub3JtYWxpemUgbW9kdWx1c1xuICAgICAgaWYobnNoID4gMCkgeyBwbS5sU2hpZnRUbyhuc2gseSk7IHB0LmxTaGlmdFRvKG5zaCxyKTsgfVxuICAgICAgZWxzZSB7IHBtLmNvcHlUbyh5KTsgcHQuY29weVRvKHIpOyB9XG4gICAgICB2YXIgeXMgPSB5LnQ7XG4gICAgICB2YXIgeTAgPSB5W3lzLTFdO1xuICAgICAgaWYoeTAgPT0gMCkgcmV0dXJuO1xuICAgICAgdmFyIHl0ID0geTAqKDE8PHRoaXMuRjEpKygoeXM+MSk/eVt5cy0yXT4+dGhpcy5GMjowKTtcbiAgICAgIHZhciBkMSA9IHRoaXMuRlYveXQsIGQyID0gKDE8PHRoaXMuRjEpL3l0LCBlID0gMTw8dGhpcy5GMjtcbiAgICAgIHZhciBpID0gci50LCBqID0gaS15cywgdCA9IChxPT1udWxsKT9uYmkoKTpxO1xuICAgICAgeS5kbFNoaWZ0VG8oaix0KTtcbiAgICAgIGlmKHIuY29tcGFyZVRvKHQpID49IDApIHtcbiAgICAgICAgcltyLnQrK10gPSAxO1xuICAgICAgICByLnN1YlRvKHQscik7XG4gICAgICB9XG4gICAgICBCaWdJbnRlZ2VyLk9ORS5kbFNoaWZ0VG8oeXMsdCk7XG4gICAgICB0LnN1YlRvKHkseSk7ICAvLyBcIm5lZ2F0aXZlXCIgeSBzbyB3ZSBjYW4gcmVwbGFjZSBzdWIgd2l0aCBhbSBsYXRlclxuICAgICAgd2hpbGUoeS50IDwgeXMpIHlbeS50KytdID0gMDtcbiAgICAgIHdoaWxlKC0taiA+PSAwKSB7XG4gICAgICAgIC8vIEVzdGltYXRlIHF1b3RpZW50IGRpZ2l0XG4gICAgICAgIHZhciBxZCA9IChyWy0taV09PXkwKT90aGlzLkRNOk1hdGguZmxvb3IocltpXSpkMSsocltpLTFdK2UpKmQyKTtcbiAgICAgICAgaWYoKHJbaV0rPXkuYW0oMCxxZCxyLGosMCx5cykpIDwgcWQpIHsgICAvLyBUcnkgaXQgb3V0XG4gICAgICAgICAgeS5kbFNoaWZ0VG8oaix0KTtcbiAgICAgICAgICByLnN1YlRvKHQscik7XG4gICAgICAgICAgd2hpbGUocltpXSA8IC0tcWQpIHIuc3ViVG8odCxyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYocSAhPSBudWxsKSB7XG4gICAgICAgIHIuZHJTaGlmdFRvKHlzLHEpO1xuICAgICAgICBpZih0cyAhPSBtcykgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHEscSk7XG4gICAgICB9XG4gICAgICByLnQgPSB5cztcbiAgICAgIHIuY2xhbXAoKTtcbiAgICAgIGlmKG5zaCA+IDApIHIuclNoaWZ0VG8obnNoLHIpOyAvLyBEZW5vcm1hbGl6ZSByZW1haW5kZXJcbiAgICAgIGlmKHRzIDwgMCkgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHIscik7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyBtb2QgYVxuICAgIGZ1bmN0aW9uIGJuTW9kKGEpIHtcbiAgICAgIHZhciByID0gbmJpKCk7XG4gICAgICB0aGlzLmFicygpLmRpdlJlbVRvKGEsbnVsbCxyKTtcbiAgICAgIGlmKHRoaXMucyA8IDAgJiYgci5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKSA+IDApIGEuc3ViVG8ocixyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIE1vZHVsYXIgcmVkdWN0aW9uIHVzaW5nIFwiY2xhc3NpY1wiIGFsZ29yaXRobVxuICAgIGZ1bmN0aW9uIENsYXNzaWMobSkgeyB0aGlzLm0gPSBtOyB9XG4gICAgZnVuY3Rpb24gY0NvbnZlcnQoeCkge1xuICAgICAgaWYoeC5zIDwgMCB8fCB4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHJldHVybiB4Lm1vZCh0aGlzLm0pO1xuICAgICAgZWxzZSByZXR1cm4geDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY1JldmVydCh4KSB7IHJldHVybiB4OyB9XG4gICAgZnVuY3Rpb24gY1JlZHVjZSh4KSB7IHguZGl2UmVtVG8odGhpcy5tLG51bGwseCk7IH1cbiAgICBmdW5jdGlvbiBjTXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IHRoaXMucmVkdWNlKHIpOyB9XG4gICAgZnVuY3Rpb24gY1NxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4gICAgQ2xhc3NpYy5wcm90b3R5cGUuY29udmVydCA9IGNDb252ZXJ0O1xuICAgIENsYXNzaWMucHJvdG90eXBlLnJldmVydCA9IGNSZXZlcnQ7XG4gICAgQ2xhc3NpYy5wcm90b3R5cGUucmVkdWNlID0gY1JlZHVjZTtcbiAgICBDbGFzc2ljLnByb3RvdHlwZS5tdWxUbyA9IGNNdWxUbztcbiAgICBDbGFzc2ljLnByb3RvdHlwZS5zcXJUbyA9IGNTcXJUbztcblxuICAgIC8vIChwcm90ZWN0ZWQpIHJldHVybiBcIi0xL3RoaXMgJSAyXkRCXCI7IHVzZWZ1bCBmb3IgTW9udC4gcmVkdWN0aW9uXG4gICAgLy8ganVzdGlmaWNhdGlvbjpcbiAgICAvLyAgICAgICAgIHh5ID09IDEgKG1vZCBtKVxuICAgIC8vICAgICAgICAgeHkgPSAgMStrbVxuICAgIC8vICAgeHkoMi14eSkgPSAoMStrbSkoMS1rbSlcbiAgICAvLyB4W3koMi14eSldID0gMS1rXjJtXjJcbiAgICAvLyB4W3koMi14eSldID09IDEgKG1vZCBtXjIpXG4gICAgLy8gaWYgeSBpcyAxL3ggbW9kIG0sIHRoZW4geSgyLXh5KSBpcyAxL3ggbW9kIG1eMlxuICAgIC8vIHNob3VsZCByZWR1Y2UgeCBhbmQgeSgyLXh5KSBieSBtXjIgYXQgZWFjaCBzdGVwIHRvIGtlZXAgc2l6ZSBib3VuZGVkLlxuICAgIC8vIEpTIG11bHRpcGx5IFwib3ZlcmZsb3dzXCIgZGlmZmVyZW50bHkgZnJvbSBDL0MrKywgc28gY2FyZSBpcyBuZWVkZWQgaGVyZS5cbiAgICBmdW5jdGlvbiBibnBJbnZEaWdpdCgpIHtcbiAgICAgIGlmKHRoaXMudCA8IDEpIHJldHVybiAwO1xuICAgICAgdmFyIHggPSB0aGlzWzBdO1xuICAgICAgaWYoKHgmMSkgPT0gMCkgcmV0dXJuIDA7XG4gICAgICB2YXIgeSA9IHgmMzsgICAgICAgLy8geSA9PSAxL3ggbW9kIDJeMlxuICAgICAgeSA9ICh5KigyLSh4JjB4ZikqeSkpJjB4ZjsgLy8geSA9PSAxL3ggbW9kIDJeNFxuICAgICAgeSA9ICh5KigyLSh4JjB4ZmYpKnkpKSYweGZmOyAgIC8vIHkgPT0gMS94IG1vZCAyXjhcbiAgICAgIHkgPSAoeSooMi0oKCh4JjB4ZmZmZikqeSkmMHhmZmZmKSkpJjB4ZmZmZjsgICAgLy8geSA9PSAxL3ggbW9kIDJeMTZcbiAgICAgIC8vIGxhc3Qgc3RlcCAtIGNhbGN1bGF0ZSBpbnZlcnNlIG1vZCBEViBkaXJlY3RseTtcbiAgICAgIC8vIGFzc3VtZXMgMTYgPCBEQiA8PSAzMiBhbmQgYXNzdW1lcyBhYmlsaXR5IHRvIGhhbmRsZSA0OC1iaXQgaW50c1xuICAgICAgeSA9ICh5KigyLXgqeSV0aGlzLkRWKSkldGhpcy5EVjsgICAgICAgLy8geSA9PSAxL3ggbW9kIDJeZGJpdHNcbiAgICAgIC8vIHdlIHJlYWxseSB3YW50IHRoZSBuZWdhdGl2ZSBpbnZlcnNlLCBhbmQgLURWIDwgeSA8IERWXG4gICAgICByZXR1cm4gKHk+MCk/dGhpcy5EVi15Oi15O1xuICAgIH1cblxuICAgIC8vIE1vbnRnb21lcnkgcmVkdWN0aW9uXG4gICAgZnVuY3Rpb24gTW9udGdvbWVyeShtKSB7XG4gICAgICB0aGlzLm0gPSBtO1xuICAgICAgdGhpcy5tcCA9IG0uaW52RGlnaXQoKTtcbiAgICAgIHRoaXMubXBsID0gdGhpcy5tcCYweDdmZmY7XG4gICAgICB0aGlzLm1waCA9IHRoaXMubXA+PjE1O1xuICAgICAgdGhpcy51bSA9ICgxPDwobS5EQi0xNSkpLTE7XG4gICAgICB0aGlzLm10MiA9IDIqbS50O1xuICAgIH1cblxuICAgIC8vIHhSIG1vZCBtXG4gICAgZnVuY3Rpb24gbW9udENvbnZlcnQoeCkge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIHguYWJzKCkuZGxTaGlmdFRvKHRoaXMubS50LHIpO1xuICAgICAgci5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxyKTtcbiAgICAgIGlmKHgucyA8IDAgJiYgci5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKSA+IDApIHRoaXMubS5zdWJUbyhyLHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8geC9SIG1vZCBtXG4gICAgZnVuY3Rpb24gbW9udFJldmVydCh4KSB7XG4gICAgICB2YXIgciA9IG5iaSgpO1xuICAgICAgeC5jb3B5VG8ocik7XG4gICAgICB0aGlzLnJlZHVjZShyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIHggPSB4L1IgbW9kIG0gKEhBQyAxNC4zMilcbiAgICBmdW5jdGlvbiBtb250UmVkdWNlKHgpIHtcbiAgICAgIHdoaWxlKHgudCA8PSB0aGlzLm10MikgLy8gcGFkIHggc28gYW0gaGFzIGVub3VnaCByb29tIGxhdGVyXG4gICAgICAgIHhbeC50KytdID0gMDtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm0udDsgKytpKSB7XG4gICAgICAgIC8vIGZhc3RlciB3YXkgb2YgY2FsY3VsYXRpbmcgdTAgPSB4W2ldKm1wIG1vZCBEVlxuICAgICAgICB2YXIgaiA9IHhbaV0mMHg3ZmZmO1xuICAgICAgICB2YXIgdTAgPSAoaip0aGlzLm1wbCsoKChqKnRoaXMubXBoKyh4W2ldPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwxNSkpJnguRE07XG4gICAgICAgIC8vIHVzZSBhbSB0byBjb21iaW5lIHRoZSBtdWx0aXBseS1zaGlmdC1hZGQgaW50byBvbmUgY2FsbFxuICAgICAgICBqID0gaSt0aGlzLm0udDtcbiAgICAgICAgeFtqXSArPSB0aGlzLm0uYW0oMCx1MCx4LGksMCx0aGlzLm0udCk7XG4gICAgICAgIC8vIHByb3BhZ2F0ZSBjYXJyeVxuICAgICAgICB3aGlsZSh4W2pdID49IHguRFYpIHsgeFtqXSAtPSB4LkRWOyB4Wysral0rKzsgfVxuICAgICAgfVxuICAgICAgeC5jbGFtcCgpO1xuICAgICAgeC5kclNoaWZ0VG8odGhpcy5tLnQseCk7XG4gICAgICBpZih4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHguc3ViVG8odGhpcy5tLHgpO1xuICAgIH1cblxuICAgIC8vIHIgPSBcInheMi9SIG1vZCBtXCI7IHggIT0gclxuICAgIGZ1bmN0aW9uIG1vbnRTcXJUbyh4LHIpIHsgeC5zcXVhcmVUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuICAgIC8vIHIgPSBcInh5L1IgbW9kIG1cIjsgeCx5ICE9IHJcbiAgICBmdW5jdGlvbiBtb250TXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IHRoaXMucmVkdWNlKHIpOyB9XG5cbiAgICBNb250Z29tZXJ5LnByb3RvdHlwZS5jb252ZXJ0ID0gbW9udENvbnZlcnQ7XG4gICAgTW9udGdvbWVyeS5wcm90b3R5cGUucmV2ZXJ0ID0gbW9udFJldmVydDtcbiAgICBNb250Z29tZXJ5LnByb3RvdHlwZS5yZWR1Y2UgPSBtb250UmVkdWNlO1xuICAgIE1vbnRnb21lcnkucHJvdG90eXBlLm11bFRvID0gbW9udE11bFRvO1xuICAgIE1vbnRnb21lcnkucHJvdG90eXBlLnNxclRvID0gbW9udFNxclRvO1xuXG4gICAgLy8gKHByb3RlY3RlZCkgdHJ1ZSBpZmYgdGhpcyBpcyBldmVuXG4gICAgZnVuY3Rpb24gYm5wSXNFdmVuKCkgeyByZXR1cm4gKCh0aGlzLnQ+MCk/KHRoaXNbMF0mMSk6dGhpcy5zKSA9PSAwOyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0aGlzXmUsIGUgPCAyXjMyLCBkb2luZyBzcXIgYW5kIG11bCB3aXRoIFwiclwiIChIQUMgMTQuNzkpXG4gICAgZnVuY3Rpb24gYm5wRXhwKGUseikge1xuICAgICAgaWYoZSA+IDB4ZmZmZmZmZmYgfHwgZSA8IDEpIHJldHVybiBCaWdJbnRlZ2VyLk9ORTtcbiAgICAgIHZhciByID0gbmJpKCksIHIyID0gbmJpKCksIGcgPSB6LmNvbnZlcnQodGhpcyksIGkgPSBuYml0cyhlKS0xO1xuICAgICAgZy5jb3B5VG8ocik7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkge1xuICAgICAgICB6LnNxclRvKHIscjIpO1xuICAgICAgICBpZigoZSYoMTw8aSkpID4gMCkgei5tdWxUbyhyMixnLHIpO1xuICAgICAgICBlbHNlIHsgdmFyIHQgPSByOyByID0gcjI7IHIyID0gdDsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHoucmV2ZXJ0KHIpO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXNeZSAlIG0sIDAgPD0gZSA8IDJeMzJcbiAgICBmdW5jdGlvbiBibk1vZFBvd0ludChlLG0pIHtcbiAgICAgIHZhciB6O1xuICAgICAgaWYoZSA8IDI1NiB8fCBtLmlzRXZlbigpKSB6ID0gbmV3IENsYXNzaWMobSk7IGVsc2UgeiA9IG5ldyBNb250Z29tZXJ5KG0pO1xuICAgICAgcmV0dXJuIHRoaXMuZXhwKGUseik7XG4gICAgfVxuXG4gICAgLy8gcHJvdGVjdGVkXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY29weVRvID0gYm5wQ29weVRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21JbnQgPSBibnBGcm9tSW50O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21TdHJpbmcgPSBibnBGcm9tU3RyaW5nO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNsYW1wID0gYm5wQ2xhbXA7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZGxTaGlmdFRvID0gYm5wRExTaGlmdFRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmRyU2hpZnRUbyA9IGJucERSU2hpZnRUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5sU2hpZnRUbyA9IGJucExTaGlmdFRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnJTaGlmdFRvID0gYm5wUlNoaWZ0VG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc3ViVG8gPSBibnBTdWJUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseVRvID0gYm5wTXVsdGlwbHlUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmVUbyA9IGJucFNxdWFyZVRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmRpdlJlbVRvID0gYm5wRGl2UmVtVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuaW52RGlnaXQgPSBibnBJbnZEaWdpdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5pc0V2ZW4gPSBibnBJc0V2ZW47XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZXhwID0gYm5wRXhwO1xuXG4gICAgLy8gcHVibGljXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUudG9TdHJpbmcgPSBiblRvU3RyaW5nO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm5lZ2F0ZSA9IGJuTmVnYXRlO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFicyA9IGJuQWJzO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNvbXBhcmVUbyA9IGJuQ29tcGFyZVRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJpdExlbmd0aCA9IGJuQml0TGVuZ3RoO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1vZCA9IGJuTW9kO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1vZFBvd0ludCA9IGJuTW9kUG93SW50O1xuXG4gICAgLy8gXCJjb25zdGFudHNcIlxuICAgIEJpZ0ludGVnZXIuWkVSTyA9IG5idigwKTtcbiAgICBCaWdJbnRlZ2VyLk9ORSA9IG5idigxKTtcblxuICAgIC8vIENvcHlyaWdodCAoYykgMjAwNS0yMDA5ICBUb20gV3VcbiAgICAvLyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICAgIC8vIFNlZSBcIkxJQ0VOU0VcIiBmb3IgZGV0YWlscy5cblxuICAgIC8vIEV4dGVuZGVkIEphdmFTY3JpcHQgQk4gZnVuY3Rpb25zLCByZXF1aXJlZCBmb3IgUlNBIHByaXZhdGUgb3BzLlxuXG4gICAgLy8gVmVyc2lvbiAxLjE6IG5ldyBCaWdJbnRlZ2VyKFwiMFwiLCAxMCkgcmV0dXJucyBcInByb3BlclwiIHplcm9cbiAgICAvLyBWZXJzaW9uIDEuMjogc3F1YXJlKCkgQVBJLCBpc1Byb2JhYmxlUHJpbWUgZml4XG5cbiAgICAvLyAocHVibGljKVxuICAgIGZ1bmN0aW9uIGJuQ2xvbmUoKSB7IHZhciByID0gbmJpKCk7IHRoaXMuY29weVRvKHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIHZhbHVlIGFzIGludGVnZXJcbiAgICBmdW5jdGlvbiBibkludFZhbHVlKCkge1xuICAgICAgaWYodGhpcy5zIDwgMCkge1xuICAgICAgICBpZih0aGlzLnQgPT0gMSkgcmV0dXJuIHRoaXNbMF0tdGhpcy5EVjtcbiAgICAgICAgZWxzZSBpZih0aGlzLnQgPT0gMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgZWxzZSBpZih0aGlzLnQgPT0gMSkgcmV0dXJuIHRoaXNbMF07XG4gICAgICBlbHNlIGlmKHRoaXMudCA9PSAwKSByZXR1cm4gMDtcbiAgICAgIC8vIGFzc3VtZXMgMTYgPCBEQiA8IDMyXG4gICAgICByZXR1cm4gKCh0aGlzWzFdJigoMTw8KDMyLXRoaXMuREIpKS0xKSk8PHRoaXMuREIpfHRoaXNbMF07XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIHZhbHVlIGFzIGJ5dGVcbiAgICBmdW5jdGlvbiBibkJ5dGVWYWx1ZSgpIHsgcmV0dXJuICh0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MjQpPj4yNDsgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIHZhbHVlIGFzIHNob3J0IChhc3N1bWVzIERCPj0xNilcbiAgICBmdW5jdGlvbiBiblNob3J0VmFsdWUoKSB7IHJldHVybiAodGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDE2KT4+MTY7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHJldHVybiB4IHMudC4gcl54IDwgRFZcbiAgICBmdW5jdGlvbiBibnBDaHVua1NpemUocikgeyByZXR1cm4gTWF0aC5mbG9vcihNYXRoLkxOMip0aGlzLkRCL01hdGgubG9nKHIpKTsgfVxuXG4gICAgLy8gKHB1YmxpYykgMCBpZiB0aGlzID09IDAsIDEgaWYgdGhpcyA+IDBcbiAgICBmdW5jdGlvbiBiblNpZ051bSgpIHtcbiAgICAgIGlmKHRoaXMucyA8IDApIHJldHVybiAtMTtcbiAgICAgIGVsc2UgaWYodGhpcy50IDw9IDAgfHwgKHRoaXMudCA9PSAxICYmIHRoaXNbMF0gPD0gMCkpIHJldHVybiAwO1xuICAgICAgZWxzZSByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBjb252ZXJ0IHRvIHJhZGl4IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGJucFRvUmFkaXgoYikge1xuICAgICAgaWYoYiA9PSBudWxsKSBiID0gMTA7XG4gICAgICBpZih0aGlzLnNpZ251bSgpID09IDAgfHwgYiA8IDIgfHwgYiA+IDM2KSByZXR1cm4gXCIwXCI7XG4gICAgICB2YXIgY3MgPSB0aGlzLmNodW5rU2l6ZShiKTtcbiAgICAgIHZhciBhID0gTWF0aC5wb3coYixjcyk7XG4gICAgICB2YXIgZCA9IG5idihhKSwgeSA9IG5iaSgpLCB6ID0gbmJpKCksIHIgPSBcIlwiO1xuICAgICAgdGhpcy5kaXZSZW1UbyhkLHkseik7XG4gICAgICB3aGlsZSh5LnNpZ251bSgpID4gMCkge1xuICAgICAgICByID0gKGErei5pbnRWYWx1ZSgpKS50b1N0cmluZyhiKS5zdWJzdHIoMSkgKyByO1xuICAgICAgICB5LmRpdlJlbVRvKGQseSx6KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB6LmludFZhbHVlKCkudG9TdHJpbmcoYikgKyByO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGNvbnZlcnQgZnJvbSByYWRpeCBzdHJpbmdcbiAgICBmdW5jdGlvbiBibnBGcm9tUmFkaXgocyxiKSB7XG4gICAgICB0aGlzLmZyb21JbnQoMCk7XG4gICAgICBpZihiID09IG51bGwpIGIgPSAxMDtcbiAgICAgIHZhciBjcyA9IHRoaXMuY2h1bmtTaXplKGIpO1xuICAgICAgdmFyIGQgPSBNYXRoLnBvdyhiLGNzKSwgbWkgPSBmYWxzZSwgaiA9IDAsIHcgPSAwO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHggPSBpbnRBdChzLGkpO1xuICAgICAgICBpZih4IDwgMCkge1xuICAgICAgICAgIGlmKHMuY2hhckF0KGkpID09IFwiLVwiICYmIHRoaXMuc2lnbnVtKCkgPT0gMCkgbWkgPSB0cnVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHcgPSBiKncreDtcbiAgICAgICAgaWYoKytqID49IGNzKSB7XG4gICAgICAgICAgdGhpcy5kTXVsdGlwbHkoZCk7XG4gICAgICAgICAgdGhpcy5kQWRkT2Zmc2V0KHcsMCk7XG4gICAgICAgICAgaiA9IDA7XG4gICAgICAgICAgdyA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKGogPiAwKSB7XG4gICAgICAgIHRoaXMuZE11bHRpcGx5KE1hdGgucG93KGIsaikpO1xuICAgICAgICB0aGlzLmRBZGRPZmZzZXQodywwKTtcbiAgICAgIH1cbiAgICAgIGlmKG1pKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyx0aGlzKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBhbHRlcm5hdGUgY29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBibnBGcm9tTnVtYmVyKGEsYixjKSB7XG4gICAgICBpZihcIm51bWJlclwiID09IHR5cGVvZiBiKSB7XG4gICAgICAgIC8vIG5ldyBCaWdJbnRlZ2VyKGludCxpbnQsUk5HKVxuICAgICAgICBpZihhIDwgMikgdGhpcy5mcm9tSW50KDEpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZyb21OdW1iZXIoYSxjKTtcbiAgICAgICAgICBpZighdGhpcy50ZXN0Qml0KGEtMSkpICAgIC8vIGZvcmNlIE1TQiBzZXRcbiAgICAgICAgICAgIHRoaXMuYml0d2lzZVRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChhLTEpLG9wX29yLHRoaXMpO1xuICAgICAgICAgIGlmKHRoaXMuaXNFdmVuKCkpIHRoaXMuZEFkZE9mZnNldCgxLDApOyAvLyBmb3JjZSBvZGRcbiAgICAgICAgICB3aGlsZSghdGhpcy5pc1Byb2JhYmxlUHJpbWUoYikpIHtcbiAgICAgICAgICAgIHRoaXMuZEFkZE9mZnNldCgyLDApO1xuICAgICAgICAgICAgaWYodGhpcy5iaXRMZW5ndGgoKSA+IGEpIHRoaXMuc3ViVG8oQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGEtMSksdGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gbmV3IEJpZ0ludGVnZXIoaW50LFJORylcbiAgICAgICAgdmFyIHggPSBuZXcgQXJyYXkoKSwgdCA9IGEmNztcbiAgICAgICAgeC5sZW5ndGggPSAoYT4+MykrMTtcbiAgICAgICAgYi5uZXh0Qnl0ZXMoeCk7XG4gICAgICAgIGlmKHQgPiAwKSB4WzBdICY9ICgoMTw8dCktMSk7IGVsc2UgeFswXSA9IDA7XG4gICAgICAgIHRoaXMuZnJvbVN0cmluZyh4LDI1Nik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgY29udmVydCB0byBiaWdlbmRpYW4gYnl0ZSBhcnJheVxuICAgIGZ1bmN0aW9uIGJuVG9CeXRlQXJyYXkoKSB7XG4gICAgICB2YXIgaSA9IHRoaXMudCwgciA9IG5ldyBBcnJheSgpO1xuICAgICAgclswXSA9IHRoaXMucztcbiAgICAgIHZhciBwID0gdGhpcy5EQi0oaSp0aGlzLkRCKSU4LCBkLCBrID0gMDtcbiAgICAgIGlmKGktLSA+IDApIHtcbiAgICAgICAgaWYocCA8IHRoaXMuREIgJiYgKGQgPSB0aGlzW2ldPj5wKSAhPSAodGhpcy5zJnRoaXMuRE0pPj5wKVxuICAgICAgICAgIHJbaysrXSA9IGR8KHRoaXMuczw8KHRoaXMuREItcCkpO1xuICAgICAgICB3aGlsZShpID49IDApIHtcbiAgICAgICAgICBpZihwIDwgOCkge1xuICAgICAgICAgICAgZCA9ICh0aGlzW2ldJigoMTw8cCktMSkpPDwoOC1wKTtcbiAgICAgICAgICAgIGQgfD0gdGhpc1stLWldPj4ocCs9dGhpcy5EQi04KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkID0gKHRoaXNbaV0+PihwLT04KSkmMHhmZjtcbiAgICAgICAgICAgIGlmKHAgPD0gMCkgeyBwICs9IHRoaXMuREI7IC0taTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZigoZCYweDgwKSAhPSAwKSBkIHw9IC0yNTY7XG4gICAgICAgICAgaWYoayA9PSAwICYmICh0aGlzLnMmMHg4MCkgIT0gKGQmMHg4MCkpICsraztcbiAgICAgICAgICBpZihrID4gMCB8fCBkICE9IHRoaXMucykgcltrKytdID0gZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYm5FcXVhbHMoYSkgeyByZXR1cm4odGhpcy5jb21wYXJlVG8oYSk9PTApOyB9XG4gICAgZnVuY3Rpb24gYm5NaW4oYSkgeyByZXR1cm4odGhpcy5jb21wYXJlVG8oYSk8MCk/dGhpczphOyB9XG4gICAgZnVuY3Rpb24gYm5NYXgoYSkgeyByZXR1cm4odGhpcy5jb21wYXJlVG8oYSk+MCk/dGhpczphOyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyBvcCBhIChiaXR3aXNlKVxuICAgIGZ1bmN0aW9uIGJucEJpdHdpc2VUbyhhLG9wLHIpIHtcbiAgICAgIHZhciBpLCBmLCBtID0gTWF0aC5taW4oYS50LHRoaXMudCk7XG4gICAgICBmb3IoaSA9IDA7IGkgPCBtOyArK2kpIHJbaV0gPSBvcCh0aGlzW2ldLGFbaV0pO1xuICAgICAgaWYoYS50IDwgdGhpcy50KSB7XG4gICAgICAgIGYgPSBhLnMmdGhpcy5ETTtcbiAgICAgICAgZm9yKGkgPSBtOyBpIDwgdGhpcy50OyArK2kpIHJbaV0gPSBvcCh0aGlzW2ldLGYpO1xuICAgICAgICByLnQgPSB0aGlzLnQ7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZiA9IHRoaXMucyZ0aGlzLkRNO1xuICAgICAgICBmb3IoaSA9IG07IGkgPCBhLnQ7ICsraSkgcltpXSA9IG9wKGYsYVtpXSk7XG4gICAgICAgIHIudCA9IGEudDtcbiAgICAgIH1cbiAgICAgIHIucyA9IG9wKHRoaXMucyxhLnMpO1xuICAgICAgci5jbGFtcCgpO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgJiBhXG4gICAgZnVuY3Rpb24gb3BfYW5kKHgseSkgeyByZXR1cm4geCZ5OyB9XG4gICAgZnVuY3Rpb24gYm5BbmQoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmJpdHdpc2VUbyhhLG9wX2FuZCxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgfCBhXG4gICAgZnVuY3Rpb24gb3Bfb3IoeCx5KSB7IHJldHVybiB4fHk7IH1cbiAgICBmdW5jdGlvbiBibk9yKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5iaXR3aXNlVG8oYSxvcF9vcixyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgXiBhXG4gICAgZnVuY3Rpb24gb3BfeG9yKHgseSkgeyByZXR1cm4geF55OyB9XG4gICAgZnVuY3Rpb24gYm5Yb3IoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmJpdHdpc2VUbyhhLG9wX3hvcixyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgJiB+YVxuICAgIGZ1bmN0aW9uIG9wX2FuZG5vdCh4LHkpIHsgcmV0dXJuIHgmfnk7IH1cbiAgICBmdW5jdGlvbiBibkFuZE5vdChhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3BfYW5kbm90LHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgfnRoaXNcbiAgICBmdW5jdGlvbiBibk5vdCgpIHtcbiAgICAgIHZhciByID0gbmJpKCk7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy50OyArK2kpIHJbaV0gPSB0aGlzLkRNJn50aGlzW2ldO1xuICAgICAgci50ID0gdGhpcy50O1xuICAgICAgci5zID0gfnRoaXMucztcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgPDwgblxuICAgIGZ1bmN0aW9uIGJuU2hpZnRMZWZ0KG4pIHtcbiAgICAgIHZhciByID0gbmJpKCk7XG4gICAgICBpZihuIDwgMCkgdGhpcy5yU2hpZnRUbygtbixyKTsgZWxzZSB0aGlzLmxTaGlmdFRvKG4scik7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzID4+IG5cbiAgICBmdW5jdGlvbiBiblNoaWZ0UmlnaHQobikge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIGlmKG4gPCAwKSB0aGlzLmxTaGlmdFRvKC1uLHIpOyBlbHNlIHRoaXMuclNoaWZ0VG8obixyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIHJldHVybiBpbmRleCBvZiBsb3dlc3QgMS1iaXQgaW4geCwgeCA8IDJeMzFcbiAgICBmdW5jdGlvbiBsYml0KHgpIHtcbiAgICAgIGlmKHggPT0gMCkgcmV0dXJuIC0xO1xuICAgICAgdmFyIHIgPSAwO1xuICAgICAgaWYoKHgmMHhmZmZmKSA9PSAwKSB7IHggPj49IDE2OyByICs9IDE2OyB9XG4gICAgICBpZigoeCYweGZmKSA9PSAwKSB7IHggPj49IDg7IHIgKz0gODsgfVxuICAgICAgaWYoKHgmMHhmKSA9PSAwKSB7IHggPj49IDQ7IHIgKz0gNDsgfVxuICAgICAgaWYoKHgmMykgPT0gMCkgeyB4ID4+PSAyOyByICs9IDI7IH1cbiAgICAgIGlmKCh4JjEpID09IDApICsrcjtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybnMgaW5kZXggb2YgbG93ZXN0IDEtYml0IChvciAtMSBpZiBub25lKVxuICAgIGZ1bmN0aW9uIGJuR2V0TG93ZXN0U2V0Qml0KCkge1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMudDsgKytpKVxuICAgICAgICBpZih0aGlzW2ldICE9IDApIHJldHVybiBpKnRoaXMuREIrbGJpdCh0aGlzW2ldKTtcbiAgICAgIGlmKHRoaXMucyA8IDApIHJldHVybiB0aGlzLnQqdGhpcy5EQjtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gbnVtYmVyIG9mIDEgYml0cyBpbiB4XG4gICAgZnVuY3Rpb24gY2JpdCh4KSB7XG4gICAgICB2YXIgciA9IDA7XG4gICAgICB3aGlsZSh4ICE9IDApIHsgeCAmPSB4LTE7ICsrcjsgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIG51bWJlciBvZiBzZXQgYml0c1xuICAgIGZ1bmN0aW9uIGJuQml0Q291bnQoKSB7XG4gICAgICB2YXIgciA9IDAsIHggPSB0aGlzLnMmdGhpcy5ETTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnQ7ICsraSkgciArPSBjYml0KHRoaXNbaV1eeCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0cnVlIGlmZiBudGggYml0IGlzIHNldFxuICAgIGZ1bmN0aW9uIGJuVGVzdEJpdChuKSB7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3Iobi90aGlzLkRCKTtcbiAgICAgIGlmKGogPj0gdGhpcy50KSByZXR1cm4odGhpcy5zIT0wKTtcbiAgICAgIHJldHVybigodGhpc1tqXSYoMTw8KG4ldGhpcy5EQikpKSE9MCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgdGhpcyBvcCAoMTw8bilcbiAgICBmdW5jdGlvbiBibnBDaGFuZ2VCaXQobixvcCkge1xuICAgICAgdmFyIHIgPSBCaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQobik7XG4gICAgICB0aGlzLmJpdHdpc2VUbyhyLG9wLHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyB8ICgxPDxuKVxuICAgIGZ1bmN0aW9uIGJuU2V0Qml0KG4pIHsgcmV0dXJuIHRoaXMuY2hhbmdlQml0KG4sb3Bfb3IpOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzICYgfigxPDxuKVxuICAgIGZ1bmN0aW9uIGJuQ2xlYXJCaXQobikgeyByZXR1cm4gdGhpcy5jaGFuZ2VCaXQobixvcF9hbmRub3QpOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIF4gKDE8PG4pXG4gICAgZnVuY3Rpb24gYm5GbGlwQml0KG4pIHsgcmV0dXJuIHRoaXMuY2hhbmdlQml0KG4sb3BfeG9yKTsgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgKyBhXG4gICAgZnVuY3Rpb24gYm5wQWRkVG8oYSxyKSB7XG4gICAgICB2YXIgaSA9IDAsIGMgPSAwLCBtID0gTWF0aC5taW4oYS50LHRoaXMudCk7XG4gICAgICB3aGlsZShpIDwgbSkge1xuICAgICAgICBjICs9IHRoaXNbaV0rYVtpXTtcbiAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgfVxuICAgICAgaWYoYS50IDwgdGhpcy50KSB7XG4gICAgICAgIGMgKz0gYS5zO1xuICAgICAgICB3aGlsZShpIDwgdGhpcy50KSB7XG4gICAgICAgICAgYyArPSB0aGlzW2ldO1xuICAgICAgICAgIHJbaSsrXSA9IGMmdGhpcy5ETTtcbiAgICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgICB9XG4gICAgICAgIGMgKz0gdGhpcy5zO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGMgKz0gdGhpcy5zO1xuICAgICAgICB3aGlsZShpIDwgYS50KSB7XG4gICAgICAgICAgYyArPSBhW2ldO1xuICAgICAgICAgIHJbaSsrXSA9IGMmdGhpcy5ETTtcbiAgICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgICB9XG4gICAgICAgIGMgKz0gYS5zO1xuICAgICAgfVxuICAgICAgci5zID0gKGM8MCk/LTE6MDtcbiAgICAgIGlmKGMgPiAwKSByW2krK10gPSBjO1xuICAgICAgZWxzZSBpZihjIDwgLTEpIHJbaSsrXSA9IHRoaXMuRFYrYztcbiAgICAgIHIudCA9IGk7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyArIGFcbiAgICBmdW5jdGlvbiBibkFkZChhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYWRkVG8oYSxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgLSBhXG4gICAgZnVuY3Rpb24gYm5TdWJ0cmFjdChhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuc3ViVG8oYSxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgKiBhXG4gICAgZnVuY3Rpb24gYm5NdWx0aXBseShhKSB7IHZhciByID0gbmJpKCk7IHRoaXMubXVsdGlwbHlUbyhhLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpc14yXG4gICAgZnVuY3Rpb24gYm5TcXVhcmUoKSB7IHZhciByID0gbmJpKCk7IHRoaXMuc3F1YXJlVG8ocik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIC8gYVxuICAgIGZ1bmN0aW9uIGJuRGl2aWRlKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5kaXZSZW1UbyhhLHIsbnVsbCk7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzICUgYVxuICAgIGZ1bmN0aW9uIGJuUmVtYWluZGVyKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5kaXZSZW1UbyhhLG51bGwscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSBbdGhpcy9hLHRoaXMlYV1cbiAgICBmdW5jdGlvbiBibkRpdmlkZUFuZFJlbWFpbmRlcihhKSB7XG4gICAgICB2YXIgcSA9IG5iaSgpLCByID0gbmJpKCk7XG4gICAgICB0aGlzLmRpdlJlbVRvKGEscSxyKTtcbiAgICAgIHJldHVybiBuZXcgQXJyYXkocSxyKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0aGlzICo9IG4sIHRoaXMgPj0gMCwgMSA8IG4gPCBEVlxuICAgIGZ1bmN0aW9uIGJucERNdWx0aXBseShuKSB7XG4gICAgICB0aGlzW3RoaXMudF0gPSB0aGlzLmFtKDAsbi0xLHRoaXMsMCwwLHRoaXMudCk7XG4gICAgICArK3RoaXMudDtcbiAgICAgIHRoaXMuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0aGlzICs9IG4gPDwgdyB3b3JkcywgdGhpcyA+PSAwXG4gICAgZnVuY3Rpb24gYm5wREFkZE9mZnNldChuLHcpIHtcbiAgICAgIGlmKG4gPT0gMCkgcmV0dXJuO1xuICAgICAgd2hpbGUodGhpcy50IDw9IHcpIHRoaXNbdGhpcy50KytdID0gMDtcbiAgICAgIHRoaXNbd10gKz0gbjtcbiAgICAgIHdoaWxlKHRoaXNbd10gPj0gdGhpcy5EVikge1xuICAgICAgICB0aGlzW3ddIC09IHRoaXMuRFY7XG4gICAgICAgIGlmKCsrdyA+PSB0aGlzLnQpIHRoaXNbdGhpcy50KytdID0gMDtcbiAgICAgICAgKyt0aGlzW3ddO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEEgXCJudWxsXCIgcmVkdWNlclxuICAgIGZ1bmN0aW9uIE51bGxFeHAoKSB7fVxuICAgIGZ1bmN0aW9uIG5Ob3AoeCkgeyByZXR1cm4geDsgfVxuICAgIGZ1bmN0aW9uIG5NdWxUbyh4LHkscikgeyB4Lm11bHRpcGx5VG8oeSxyKTsgfVxuICAgIGZ1bmN0aW9uIG5TcXJUbyh4LHIpIHsgeC5zcXVhcmVUbyhyKTsgfVxuXG4gICAgTnVsbEV4cC5wcm90b3R5cGUuY29udmVydCA9IG5Ob3A7XG4gICAgTnVsbEV4cC5wcm90b3R5cGUucmV2ZXJ0ID0gbk5vcDtcbiAgICBOdWxsRXhwLnByb3RvdHlwZS5tdWxUbyA9IG5NdWxUbztcbiAgICBOdWxsRXhwLnByb3RvdHlwZS5zcXJUbyA9IG5TcXJUbztcblxuICAgIC8vIChwdWJsaWMpIHRoaXNeZVxuICAgIGZ1bmN0aW9uIGJuUG93KGUpIHsgcmV0dXJuIHRoaXMuZXhwKGUsbmV3IE51bGxFeHAoKSk7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSBsb3dlciBuIHdvcmRzIG9mIFwidGhpcyAqIGFcIiwgYS50IDw9IG5cbiAgICAvLyBcInRoaXNcIiBzaG91bGQgYmUgdGhlIGxhcmdlciBvbmUgaWYgYXBwcm9wcmlhdGUuXG4gICAgZnVuY3Rpb24gYm5wTXVsdGlwbHlMb3dlclRvKGEsbixyKSB7XG4gICAgICB2YXIgaSA9IE1hdGgubWluKHRoaXMudCthLnQsbik7XG4gICAgICByLnMgPSAwOyAvLyBhc3N1bWVzIGEsdGhpcyA+PSAwXG4gICAgICByLnQgPSBpO1xuICAgICAgd2hpbGUoaSA+IDApIHJbLS1pXSA9IDA7XG4gICAgICB2YXIgajtcbiAgICAgIGZvcihqID0gci50LXRoaXMudDsgaSA8IGo7ICsraSkgcltpK3RoaXMudF0gPSB0aGlzLmFtKDAsYVtpXSxyLGksMCx0aGlzLnQpO1xuICAgICAgZm9yKGogPSBNYXRoLm1pbihhLnQsbik7IGkgPCBqOyArK2kpIHRoaXMuYW0oMCxhW2ldLHIsaSwwLG4taSk7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IFwidGhpcyAqIGFcIiB3aXRob3V0IGxvd2VyIG4gd29yZHMsIG4gPiAwXG4gICAgLy8gXCJ0aGlzXCIgc2hvdWxkIGJlIHRoZSBsYXJnZXIgb25lIGlmIGFwcHJvcHJpYXRlLlxuICAgIGZ1bmN0aW9uIGJucE11bHRpcGx5VXBwZXJUbyhhLG4scikge1xuICAgICAgLS1uO1xuICAgICAgdmFyIGkgPSByLnQgPSB0aGlzLnQrYS50LW47XG4gICAgICByLnMgPSAwOyAvLyBhc3N1bWVzIGEsdGhpcyA+PSAwXG4gICAgICB3aGlsZSgtLWkgPj0gMCkgcltpXSA9IDA7XG4gICAgICBmb3IoaSA9IE1hdGgubWF4KG4tdGhpcy50LDApOyBpIDwgYS50OyArK2kpXG4gICAgICAgIHJbdGhpcy50K2ktbl0gPSB0aGlzLmFtKG4taSxhW2ldLHIsMCwwLHRoaXMudCtpLW4pO1xuICAgICAgci5jbGFtcCgpO1xuICAgICAgci5kclNoaWZ0VG8oMSxyKTtcbiAgICB9XG5cbiAgICAvLyBCYXJyZXR0IG1vZHVsYXIgcmVkdWN0aW9uXG4gICAgZnVuY3Rpb24gQmFycmV0dChtKSB7XG4gICAgICAvLyBzZXR1cCBCYXJyZXR0XG4gICAgICB0aGlzLnIyID0gbmJpKCk7XG4gICAgICB0aGlzLnEzID0gbmJpKCk7XG4gICAgICBCaWdJbnRlZ2VyLk9ORS5kbFNoaWZ0VG8oMiptLnQsdGhpcy5yMik7XG4gICAgICB0aGlzLm11ID0gdGhpcy5yMi5kaXZpZGUobSk7XG4gICAgICB0aGlzLm0gPSBtO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJhcnJldHRDb252ZXJ0KHgpIHtcbiAgICAgIGlmKHgucyA8IDAgfHwgeC50ID4gMip0aGlzLm0udCkgcmV0dXJuIHgubW9kKHRoaXMubSk7XG4gICAgICBlbHNlIGlmKHguY29tcGFyZVRvKHRoaXMubSkgPCAwKSByZXR1cm4geDtcbiAgICAgIGVsc2UgeyB2YXIgciA9IG5iaSgpOyB4LmNvcHlUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IHJldHVybiByOyB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmFycmV0dFJldmVydCh4KSB7IHJldHVybiB4OyB9XG5cbiAgICAvLyB4ID0geCBtb2QgbSAoSEFDIDE0LjQyKVxuICAgIGZ1bmN0aW9uIGJhcnJldHRSZWR1Y2UoeCkge1xuICAgICAgeC5kclNoaWZ0VG8odGhpcy5tLnQtMSx0aGlzLnIyKTtcbiAgICAgIGlmKHgudCA+IHRoaXMubS50KzEpIHsgeC50ID0gdGhpcy5tLnQrMTsgeC5jbGFtcCgpOyB9XG4gICAgICB0aGlzLm11Lm11bHRpcGx5VXBwZXJUbyh0aGlzLnIyLHRoaXMubS50KzEsdGhpcy5xMyk7XG4gICAgICB0aGlzLm0ubXVsdGlwbHlMb3dlclRvKHRoaXMucTMsdGhpcy5tLnQrMSx0aGlzLnIyKTtcbiAgICAgIHdoaWxlKHguY29tcGFyZVRvKHRoaXMucjIpIDwgMCkgeC5kQWRkT2Zmc2V0KDEsdGhpcy5tLnQrMSk7XG4gICAgICB4LnN1YlRvKHRoaXMucjIseCk7XG4gICAgICB3aGlsZSh4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHguc3ViVG8odGhpcy5tLHgpO1xuICAgIH1cblxuICAgIC8vIHIgPSB4XjIgbW9kIG07IHggIT0gclxuICAgIGZ1bmN0aW9uIGJhcnJldHRTcXJUbyh4LHIpIHsgeC5zcXVhcmVUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuICAgIC8vIHIgPSB4KnkgbW9kIG07IHgseSAhPSByXG4gICAgZnVuY3Rpb24gYmFycmV0dE11bFRvKHgseSxyKSB7IHgubXVsdGlwbHlUbyh5LHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4gICAgQmFycmV0dC5wcm90b3R5cGUuY29udmVydCA9IGJhcnJldHRDb252ZXJ0O1xuICAgIEJhcnJldHQucHJvdG90eXBlLnJldmVydCA9IGJhcnJldHRSZXZlcnQ7XG4gICAgQmFycmV0dC5wcm90b3R5cGUucmVkdWNlID0gYmFycmV0dFJlZHVjZTtcbiAgICBCYXJyZXR0LnByb3RvdHlwZS5tdWxUbyA9IGJhcnJldHRNdWxUbztcbiAgICBCYXJyZXR0LnByb3RvdHlwZS5zcXJUbyA9IGJhcnJldHRTcXJUbztcblxuICAgIC8vIChwdWJsaWMpIHRoaXNeZSAlIG0gKEhBQyAxNC44NSlcbiAgICBmdW5jdGlvbiBibk1vZFBvdyhlLG0pIHtcbiAgICAgIHZhciBpID0gZS5iaXRMZW5ndGgoKSwgaywgciA9IG5idigxKSwgejtcbiAgICAgIGlmKGkgPD0gMCkgcmV0dXJuIHI7XG4gICAgICBlbHNlIGlmKGkgPCAxOCkgayA9IDE7XG4gICAgICBlbHNlIGlmKGkgPCA0OCkgayA9IDM7XG4gICAgICBlbHNlIGlmKGkgPCAxNDQpIGsgPSA0O1xuICAgICAgZWxzZSBpZihpIDwgNzY4KSBrID0gNTtcbiAgICAgIGVsc2UgayA9IDY7XG4gICAgICBpZihpIDwgOClcbiAgICAgICAgeiA9IG5ldyBDbGFzc2ljKG0pO1xuICAgICAgZWxzZSBpZihtLmlzRXZlbigpKVxuICAgICAgICB6ID0gbmV3IEJhcnJldHQobSk7XG4gICAgICBlbHNlXG4gICAgICAgIHogPSBuZXcgTW9udGdvbWVyeShtKTtcblxuICAgICAgLy8gcHJlY29tcHV0YXRpb25cbiAgICAgIHZhciBnID0gbmV3IEFycmF5KCksIG4gPSAzLCBrMSA9IGstMSwga20gPSAoMTw8ayktMTtcbiAgICAgIGdbMV0gPSB6LmNvbnZlcnQodGhpcyk7XG4gICAgICBpZihrID4gMSkge1xuICAgICAgICB2YXIgZzIgPSBuYmkoKTtcbiAgICAgICAgei5zcXJUbyhnWzFdLGcyKTtcbiAgICAgICAgd2hpbGUobiA8PSBrbSkge1xuICAgICAgICAgIGdbbl0gPSBuYmkoKTtcbiAgICAgICAgICB6Lm11bFRvKGcyLGdbbi0yXSxnW25dKTtcbiAgICAgICAgICBuICs9IDI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGogPSBlLnQtMSwgdywgaXMxID0gdHJ1ZSwgcjIgPSBuYmkoKSwgdDtcbiAgICAgIGkgPSBuYml0cyhlW2pdKS0xO1xuICAgICAgd2hpbGUoaiA+PSAwKSB7XG4gICAgICAgIGlmKGkgPj0gazEpIHcgPSAoZVtqXT4+KGktazEpKSZrbTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdyA9IChlW2pdJigoMTw8KGkrMSkpLTEpKTw8KGsxLWkpO1xuICAgICAgICAgIGlmKGogPiAwKSB3IHw9IGVbai0xXT4+KHRoaXMuREIraS1rMSk7XG4gICAgICAgIH1cblxuICAgICAgICBuID0gaztcbiAgICAgICAgd2hpbGUoKHcmMSkgPT0gMCkgeyB3ID4+PSAxOyAtLW47IH1cbiAgICAgICAgaWYoKGkgLT0gbikgPCAwKSB7IGkgKz0gdGhpcy5EQjsgLS1qOyB9XG4gICAgICAgIGlmKGlzMSkgeyAgICAvLyByZXQgPT0gMSwgZG9uJ3QgYm90aGVyIHNxdWFyaW5nIG9yIG11bHRpcGx5aW5nIGl0XG4gICAgICAgICAgZ1t3XS5jb3B5VG8ocik7XG4gICAgICAgICAgaXMxID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgd2hpbGUobiA+IDEpIHsgei5zcXJUbyhyLHIyKTsgei5zcXJUbyhyMixyKTsgbiAtPSAyOyB9XG4gICAgICAgICAgaWYobiA+IDApIHouc3FyVG8ocixyMik7IGVsc2UgeyB0ID0gcjsgciA9IHIyOyByMiA9IHQ7IH1cbiAgICAgICAgICB6Lm11bFRvKHIyLGdbd10scik7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZShqID49IDAgJiYgKGVbal0mKDE8PGkpKSA9PSAwKSB7XG4gICAgICAgICAgei5zcXJUbyhyLHIyKTsgdCA9IHI7IHIgPSByMjsgcjIgPSB0O1xuICAgICAgICAgIGlmKC0taSA8IDApIHsgaSA9IHRoaXMuREItMTsgLS1qOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB6LnJldmVydChyKTtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSBnY2QodGhpcyxhKSAoSEFDIDE0LjU0KVxuICAgIGZ1bmN0aW9uIGJuR0NEKGEpIHtcbiAgICAgIHZhciB4ID0gKHRoaXMuczwwKT90aGlzLm5lZ2F0ZSgpOnRoaXMuY2xvbmUoKTtcbiAgICAgIHZhciB5ID0gKGEuczwwKT9hLm5lZ2F0ZSgpOmEuY2xvbmUoKTtcbiAgICAgIGlmKHguY29tcGFyZVRvKHkpIDwgMCkgeyB2YXIgdCA9IHg7IHggPSB5OyB5ID0gdDsgfVxuICAgICAgdmFyIGkgPSB4LmdldExvd2VzdFNldEJpdCgpLCBnID0geS5nZXRMb3dlc3RTZXRCaXQoKTtcbiAgICAgIGlmKGcgPCAwKSByZXR1cm4geDtcbiAgICAgIGlmKGkgPCBnKSBnID0gaTtcbiAgICAgIGlmKGcgPiAwKSB7XG4gICAgICAgIHguclNoaWZ0VG8oZyx4KTtcbiAgICAgICAgeS5yU2hpZnRUbyhnLHkpO1xuICAgICAgfVxuICAgICAgd2hpbGUoeC5zaWdudW0oKSA+IDApIHtcbiAgICAgICAgaWYoKGkgPSB4LmdldExvd2VzdFNldEJpdCgpKSA+IDApIHguclNoaWZ0VG8oaSx4KTtcbiAgICAgICAgaWYoKGkgPSB5LmdldExvd2VzdFNldEJpdCgpKSA+IDApIHkuclNoaWZ0VG8oaSx5KTtcbiAgICAgICAgaWYoeC5jb21wYXJlVG8oeSkgPj0gMCkge1xuICAgICAgICAgIHguc3ViVG8oeSx4KTtcbiAgICAgICAgICB4LnJTaGlmdFRvKDEseCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgeS5zdWJUbyh4LHkpO1xuICAgICAgICAgIHkuclNoaWZ0VG8oMSx5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoZyA+IDApIHkubFNoaWZ0VG8oZyx5KTtcbiAgICAgIHJldHVybiB5O1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHRoaXMgJSBuLCBuIDwgMl4yNlxuICAgIGZ1bmN0aW9uIGJucE1vZEludChuKSB7XG4gICAgICBpZihuIDw9IDApIHJldHVybiAwO1xuICAgICAgdmFyIGQgPSB0aGlzLkRWJW4sIHIgPSAodGhpcy5zPDApP24tMTowO1xuICAgICAgaWYodGhpcy50ID4gMClcbiAgICAgICAgaWYoZCA9PSAwKSByID0gdGhpc1swXSVuO1xuICAgICAgICBlbHNlIGZvcih2YXIgaSA9IHRoaXMudC0xOyBpID49IDA7IC0taSkgciA9IChkKnIrdGhpc1tpXSklbjtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIDEvdGhpcyAlIG0gKEhBQyAxNC42MSlcbiAgICBmdW5jdGlvbiBibk1vZEludmVyc2UobSkge1xuICAgICAgdmFyIGFjID0gbS5pc0V2ZW4oKTtcbiAgICAgIGlmKCh0aGlzLmlzRXZlbigpICYmIGFjKSB8fCBtLnNpZ251bSgpID09IDApIHJldHVybiBCaWdJbnRlZ2VyLlpFUk87XG4gICAgICB2YXIgdSA9IG0uY2xvbmUoKSwgdiA9IHRoaXMuY2xvbmUoKTtcbiAgICAgIHZhciBhID0gbmJ2KDEpLCBiID0gbmJ2KDApLCBjID0gbmJ2KDApLCBkID0gbmJ2KDEpO1xuICAgICAgd2hpbGUodS5zaWdudW0oKSAhPSAwKSB7XG4gICAgICAgIHdoaWxlKHUuaXNFdmVuKCkpIHtcbiAgICAgICAgICB1LnJTaGlmdFRvKDEsdSk7XG4gICAgICAgICAgaWYoYWMpIHtcbiAgICAgICAgICAgIGlmKCFhLmlzRXZlbigpIHx8ICFiLmlzRXZlbigpKSB7IGEuYWRkVG8odGhpcyxhKTsgYi5zdWJUbyhtLGIpOyB9XG4gICAgICAgICAgICBhLnJTaGlmdFRvKDEsYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYoIWIuaXNFdmVuKCkpIGIuc3ViVG8obSxiKTtcbiAgICAgICAgICBiLnJTaGlmdFRvKDEsYik7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUodi5pc0V2ZW4oKSkge1xuICAgICAgICAgIHYuclNoaWZ0VG8oMSx2KTtcbiAgICAgICAgICBpZihhYykge1xuICAgICAgICAgICAgaWYoIWMuaXNFdmVuKCkgfHwgIWQuaXNFdmVuKCkpIHsgYy5hZGRUbyh0aGlzLGMpOyBkLnN1YlRvKG0sZCk7IH1cbiAgICAgICAgICAgIGMuclNoaWZ0VG8oMSxjKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZighZC5pc0V2ZW4oKSkgZC5zdWJUbyhtLGQpO1xuICAgICAgICAgIGQuclNoaWZ0VG8oMSxkKTtcbiAgICAgICAgfVxuICAgICAgICBpZih1LmNvbXBhcmVUbyh2KSA+PSAwKSB7XG4gICAgICAgICAgdS5zdWJUbyh2LHUpO1xuICAgICAgICAgIGlmKGFjKSBhLnN1YlRvKGMsYSk7XG4gICAgICAgICAgYi5zdWJUbyhkLGIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHYuc3ViVG8odSx2KTtcbiAgICAgICAgICBpZihhYykgYy5zdWJUbyhhLGMpO1xuICAgICAgICAgIGQuc3ViVG8oYixkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodi5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpICE9IDApIHJldHVybiBCaWdJbnRlZ2VyLlpFUk87XG4gICAgICBpZihkLmNvbXBhcmVUbyhtKSA+PSAwKSByZXR1cm4gZC5zdWJ0cmFjdChtKTtcbiAgICAgIGlmKGQuc2lnbnVtKCkgPCAwKSBkLmFkZFRvKG0sZCk7IGVsc2UgcmV0dXJuIGQ7XG4gICAgICBpZihkLnNpZ251bSgpIDwgMCkgcmV0dXJuIGQuYWRkKG0pOyBlbHNlIHJldHVybiBkO1xuICAgIH1cblxuICAgIHZhciBsb3dwcmltZXMgPSBbMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3XTtcbiAgICB2YXIgbHBsaW0gPSAoMTw8MjYpL2xvd3ByaW1lc1tsb3dwcmltZXMubGVuZ3RoLTFdO1xuXG4gICAgLy8gKHB1YmxpYykgdGVzdCBwcmltYWxpdHkgd2l0aCBjZXJ0YWludHkgPj0gMS0uNV50XG4gICAgZnVuY3Rpb24gYm5Jc1Byb2JhYmxlUHJpbWUodCkge1xuICAgICAgdmFyIGksIHggPSB0aGlzLmFicygpO1xuICAgICAgaWYoeC50ID09IDEgJiYgeFswXSA8PSBsb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXSkge1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBsb3dwcmltZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgaWYoeFswXSA9PSBsb3dwcmltZXNbaV0pIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZih4LmlzRXZlbigpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpID0gMTtcbiAgICAgIHdoaWxlKGkgPCBsb3dwcmltZXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBtID0gbG93cHJpbWVzW2ldLCBqID0gaSsxO1xuICAgICAgICB3aGlsZShqIDwgbG93cHJpbWVzLmxlbmd0aCAmJiBtIDwgbHBsaW0pIG0gKj0gbG93cHJpbWVzW2orK107XG4gICAgICAgIG0gPSB4Lm1vZEludChtKTtcbiAgICAgICAgd2hpbGUoaSA8IGopIGlmKG0lbG93cHJpbWVzW2krK10gPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHgubWlsbGVyUmFiaW4odCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgdHJ1ZSBpZiBwcm9iYWJseSBwcmltZSAoSEFDIDQuMjQsIE1pbGxlci1SYWJpbilcbiAgICBmdW5jdGlvbiBibnBNaWxsZXJSYWJpbih0KSB7XG4gICAgICB2YXIgbjEgPSB0aGlzLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTtcbiAgICAgIHZhciBrID0gbjEuZ2V0TG93ZXN0U2V0Qml0KCk7XG4gICAgICBpZihrIDw9IDApIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciByID0gbjEuc2hpZnRSaWdodChrKTtcbiAgICAgIHQgPSAodCsxKT4+MTtcbiAgICAgIGlmKHQgPiBsb3dwcmltZXMubGVuZ3RoKSB0ID0gbG93cHJpbWVzLmxlbmd0aDtcbiAgICAgIHZhciBhID0gbmJpKCk7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdDsgKytpKSB7XG4gICAgICAgIC8vUGljayBiYXNlcyBhdCByYW5kb20sIGluc3RlYWQgb2Ygc3RhcnRpbmcgYXQgMlxuICAgICAgICBhLmZyb21JbnQobG93cHJpbWVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsb3dwcmltZXMubGVuZ3RoKV0pO1xuICAgICAgICB2YXIgeSA9IGEubW9kUG93KHIsdGhpcyk7XG4gICAgICAgIGlmKHkuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSAhPSAwICYmIHkuY29tcGFyZVRvKG4xKSAhPSAwKSB7XG4gICAgICAgICAgdmFyIGogPSAxO1xuICAgICAgICAgIHdoaWxlKGorKyA8IGsgJiYgeS5jb21wYXJlVG8objEpICE9IDApIHtcbiAgICAgICAgICAgIHkgPSB5Lm1vZFBvd0ludCgyLHRoaXMpO1xuICAgICAgICAgICAgaWYoeS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpID09IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoeS5jb21wYXJlVG8objEpICE9IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gcHJvdGVjdGVkXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY2h1bmtTaXplID0gYm5wQ2h1bmtTaXplO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnRvUmFkaXggPSBibnBUb1JhZGl4O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21SYWRpeCA9IGJucEZyb21SYWRpeDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tTnVtYmVyID0gYm5wRnJvbU51bWJlcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5iaXR3aXNlVG8gPSBibnBCaXR3aXNlVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY2hhbmdlQml0ID0gYm5wQ2hhbmdlQml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFkZFRvID0gYm5wQWRkVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZE11bHRpcGx5ID0gYm5wRE11bHRpcGx5O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmRBZGRPZmZzZXQgPSBibnBEQWRkT2Zmc2V0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5TG93ZXJUbyA9IGJucE11bHRpcGx5TG93ZXJUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseVVwcGVyVG8gPSBibnBNdWx0aXBseVVwcGVyVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW50ID0gYm5wTW9kSW50O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1pbGxlclJhYmluID0gYm5wTWlsbGVyUmFiaW47XG5cbiAgICAvLyBwdWJsaWNcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbG9uZSA9IGJuQ2xvbmU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuaW50VmFsdWUgPSBibkludFZhbHVlO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJ5dGVWYWx1ZSA9IGJuQnl0ZVZhbHVlO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNob3J0VmFsdWUgPSBiblNob3J0VmFsdWU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc2lnbnVtID0gYm5TaWdOdW07XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUudG9CeXRlQXJyYXkgPSBiblRvQnl0ZUFycmF5O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmVxdWFscyA9IGJuRXF1YWxzO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1pbiA9IGJuTWluO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1heCA9IGJuTWF4O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFuZCA9IGJuQW5kO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm9yID0gYm5PcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS54b3IgPSBiblhvcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmROb3QgPSBibkFuZE5vdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5ub3QgPSBibk5vdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdExlZnQgPSBiblNoaWZ0TGVmdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdFJpZ2h0ID0gYm5TaGlmdFJpZ2h0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmdldExvd2VzdFNldEJpdCA9IGJuR2V0TG93ZXN0U2V0Qml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJpdENvdW50ID0gYm5CaXRDb3VudDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS50ZXN0Qml0ID0gYm5UZXN0Qml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNldEJpdCA9IGJuU2V0Qml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNsZWFyQml0ID0gYm5DbGVhckJpdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5mbGlwQml0ID0gYm5GbGlwQml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFkZCA9IGJuQWRkO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnN1YnRyYWN0ID0gYm5TdWJ0cmFjdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseSA9IGJuTXVsdGlwbHk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlID0gYm5EaXZpZGU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUucmVtYWluZGVyID0gYm5SZW1haW5kZXI7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlQW5kUmVtYWluZGVyID0gYm5EaXZpZGVBbmRSZW1haW5kZXI7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93ID0gYm5Nb2RQb3c7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW52ZXJzZSA9IGJuTW9kSW52ZXJzZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5wb3cgPSBiblBvdztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5nY2QgPSBibkdDRDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5pc1Byb2JhYmxlUHJpbWUgPSBibklzUHJvYmFibGVQcmltZTtcblxuICAgIC8vIEpTQk4tc3BlY2lmaWMgZXh0ZW5zaW9uXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc3F1YXJlID0gYm5TcXVhcmU7XG5cbiAgICAvLyBFeHBvc2UgdGhlIEJhcnJldHQgZnVuY3Rpb25cbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5CYXJyZXR0ID0gQmFycmV0dFxuXG4gICAgLy8gQmlnSW50ZWdlciBpbnRlcmZhY2VzIG5vdCBpbXBsZW1lbnRlZCBpbiBqc2JuOlxuXG4gICAgLy8gQmlnSW50ZWdlcihpbnQgc2lnbnVtLCBieXRlW10gbWFnbml0dWRlKVxuICAgIC8vIGRvdWJsZSBkb3VibGVWYWx1ZSgpXG4gICAgLy8gZmxvYXQgZmxvYXRWYWx1ZSgpXG4gICAgLy8gaW50IGhhc2hDb2RlKClcbiAgICAvLyBsb25nIGxvbmdWYWx1ZSgpXG4gICAgLy8gc3RhdGljIEJpZ0ludGVnZXIgdmFsdWVPZihsb25nIHZhbClcblxuICAgIC8vIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIC0gcmVxdWlyZXMgYSBQUk5HIGJhY2tlbmQsIGUuZy4gcHJuZzQuanNcblxuICAgIC8vIEZvciBiZXN0IHJlc3VsdHMsIHB1dCBjb2RlIGxpa2VcbiAgICAvLyA8Ym9keSBvbkNsaWNrPSdybmdfc2VlZF90aW1lKCk7JyBvbktleVByZXNzPSdybmdfc2VlZF90aW1lKCk7Jz5cbiAgICAvLyBpbiB5b3VyIG1haW4gSFRNTCBkb2N1bWVudC5cblxuICAgIHZhciBybmdfc3RhdGU7XG4gICAgdmFyIHJuZ19wb29sO1xuICAgIHZhciBybmdfcHB0cjtcblxuICAgIC8vIE1peCBpbiBhIDMyLWJpdCBpbnRlZ2VyIGludG8gdGhlIHBvb2xcbiAgICBmdW5jdGlvbiBybmdfc2VlZF9pbnQoeCkge1xuICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0geCAmIDI1NTtcbiAgICAgIHJuZ19wb29sW3JuZ19wcHRyKytdIF49ICh4ID4+IDgpICYgMjU1O1xuICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHggPj4gMTYpICYgMjU1O1xuICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHggPj4gMjQpICYgMjU1O1xuICAgICAgaWYocm5nX3BwdHIgPj0gcm5nX3BzaXplKSBybmdfcHB0ciAtPSBybmdfcHNpemU7XG4gICAgfVxuXG4gICAgLy8gTWl4IGluIHRoZSBjdXJyZW50IHRpbWUgKHcvbWlsbGlzZWNvbmRzKSBpbnRvIHRoZSBwb29sXG4gICAgZnVuY3Rpb24gcm5nX3NlZWRfdGltZSgpIHtcbiAgICAgIHJuZ19zZWVkX2ludChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgcG9vbCB3aXRoIGp1bmsgaWYgbmVlZGVkLlxuICAgIGlmKHJuZ19wb29sID09IG51bGwpIHtcbiAgICAgIHJuZ19wb29sID0gbmV3IEFycmF5KCk7XG4gICAgICBybmdfcHB0ciA9IDA7XG4gICAgICB2YXIgdDtcbiAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmNyeXB0bykge1xuICAgICAgICBpZiAod2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgICAgICAvLyBVc2Ugd2ViY3J5cHRvIGlmIGF2YWlsYWJsZVxuICAgICAgICAgIHZhciB1YSA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICAgICAgICB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyh1YSk7XG4gICAgICAgICAgZm9yKHQgPSAwOyB0IDwgMzI7ICsrdClcbiAgICAgICAgICAgIHJuZ19wb29sW3JuZ19wcHRyKytdID0gdWFbdF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihuYXZpZ2F0b3IuYXBwTmFtZSA9PSBcIk5ldHNjYXBlXCIgJiYgbmF2aWdhdG9yLmFwcFZlcnNpb24gPCBcIjVcIikge1xuICAgICAgICAgIC8vIEV4dHJhY3QgZW50cm9weSAoMjU2IGJpdHMpIGZyb20gTlM0IFJORyBpZiBhdmFpbGFibGVcbiAgICAgICAgICB2YXIgeiA9IHdpbmRvdy5jcnlwdG8ucmFuZG9tKDMyKTtcbiAgICAgICAgICBmb3IodCA9IDA7IHQgPCB6Lmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gPSB6LmNoYXJDb2RlQXQodCkgJiAyNTU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlKHJuZ19wcHRyIDwgcm5nX3BzaXplKSB7ICAvLyBleHRyYWN0IHNvbWUgcmFuZG9tbmVzcyBmcm9tIE1hdGgucmFuZG9tKClcbiAgICAgICAgdCA9IE1hdGguZmxvb3IoNjU1MzYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gPSB0ID4+PiA4O1xuICAgICAgICBybmdfcG9vbFtybmdfcHB0cisrXSA9IHQgJiAyNTU7XG4gICAgICB9XG4gICAgICBybmdfcHB0ciA9IDA7XG4gICAgICBybmdfc2VlZF90aW1lKCk7XG4gICAgICAvL3JuZ19zZWVkX2ludCh3aW5kb3cuc2NyZWVuWCk7XG4gICAgICAvL3JuZ19zZWVkX2ludCh3aW5kb3cuc2NyZWVuWSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcm5nX2dldF9ieXRlKCkge1xuICAgICAgaWYocm5nX3N0YXRlID09IG51bGwpIHtcbiAgICAgICAgcm5nX3NlZWRfdGltZSgpO1xuICAgICAgICBybmdfc3RhdGUgPSBwcm5nX25ld3N0YXRlKCk7XG4gICAgICAgIHJuZ19zdGF0ZS5pbml0KHJuZ19wb29sKTtcbiAgICAgICAgZm9yKHJuZ19wcHRyID0gMDsgcm5nX3BwdHIgPCBybmdfcG9vbC5sZW5ndGg7ICsrcm5nX3BwdHIpXG4gICAgICAgICAgcm5nX3Bvb2xbcm5nX3BwdHJdID0gMDtcbiAgICAgICAgcm5nX3BwdHIgPSAwO1xuICAgICAgICAvL3JuZ19wb29sID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IGFsbG93IHJlc2VlZGluZyBhZnRlciBmaXJzdCByZXF1ZXN0XG4gICAgICByZXR1cm4gcm5nX3N0YXRlLm5leHQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBybmdfZ2V0X2J5dGVzKGJhKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGZvcihpID0gMDsgaSA8IGJhLmxlbmd0aDsgKytpKSBiYVtpXSA9IHJuZ19nZXRfYnl0ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFNlY3VyZVJhbmRvbSgpIHt9XG5cbiAgICBTZWN1cmVSYW5kb20ucHJvdG90eXBlLm5leHRCeXRlcyA9IHJuZ19nZXRfYnl0ZXM7XG5cbiAgICAvLyBwcm5nNC5qcyAtIHVzZXMgQXJjZm91ciBhcyBhIFBSTkdcblxuICAgIGZ1bmN0aW9uIEFyY2ZvdXIoKSB7XG4gICAgICB0aGlzLmkgPSAwO1xuICAgICAgdGhpcy5qID0gMDtcbiAgICAgIHRoaXMuUyA9IG5ldyBBcnJheSgpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgYXJjZm91ciBjb250ZXh0IGZyb20ga2V5LCBhbiBhcnJheSBvZiBpbnRzLCBlYWNoIGZyb20gWzAuLjI1NV1cbiAgICBmdW5jdGlvbiBBUkM0aW5pdChrZXkpIHtcbiAgICAgIHZhciBpLCBqLCB0O1xuICAgICAgZm9yKGkgPSAwOyBpIDwgMjU2OyArK2kpXG4gICAgICAgIHRoaXMuU1tpXSA9IGk7XG4gICAgICBqID0gMDtcbiAgICAgIGZvcihpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgICAgIGogPSAoaiArIHRoaXMuU1tpXSArIGtleVtpICUga2V5Lmxlbmd0aF0pICYgMjU1O1xuICAgICAgICB0ID0gdGhpcy5TW2ldO1xuICAgICAgICB0aGlzLlNbaV0gPSB0aGlzLlNbal07XG4gICAgICAgIHRoaXMuU1tqXSA9IHQ7XG4gICAgICB9XG4gICAgICB0aGlzLmkgPSAwO1xuICAgICAgdGhpcy5qID0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBBUkM0bmV4dCgpIHtcbiAgICAgIHZhciB0O1xuICAgICAgdGhpcy5pID0gKHRoaXMuaSArIDEpICYgMjU1O1xuICAgICAgdGhpcy5qID0gKHRoaXMuaiArIHRoaXMuU1t0aGlzLmldKSAmIDI1NTtcbiAgICAgIHQgPSB0aGlzLlNbdGhpcy5pXTtcbiAgICAgIHRoaXMuU1t0aGlzLmldID0gdGhpcy5TW3RoaXMual07XG4gICAgICB0aGlzLlNbdGhpcy5qXSA9IHQ7XG4gICAgICByZXR1cm4gdGhpcy5TWyh0ICsgdGhpcy5TW3RoaXMuaV0pICYgMjU1XTtcbiAgICB9XG5cbiAgICBBcmNmb3VyLnByb3RvdHlwZS5pbml0ID0gQVJDNGluaXQ7XG4gICAgQXJjZm91ci5wcm90b3R5cGUubmV4dCA9IEFSQzRuZXh0O1xuXG4gICAgLy8gUGx1ZyBpbiB5b3VyIFJORyBjb25zdHJ1Y3RvciBoZXJlXG4gICAgZnVuY3Rpb24gcHJuZ19uZXdzdGF0ZSgpIHtcbiAgICAgIHJldHVybiBuZXcgQXJjZm91cigpO1xuICAgIH1cblxuICAgIC8vIFBvb2wgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBhbmQgZ3JlYXRlciB0aGFuIDMyLlxuICAgIC8vIEFuIGFycmF5IG9mIGJ5dGVzIHRoZSBzaXplIG9mIHRoZSBwb29sIHdpbGwgYmUgcGFzc2VkIHRvIGluaXQoKVxuICAgIHZhciBybmdfcHNpemUgPSAyNTY7XG5cbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICAgIGRlZmF1bHQ6IEJpZ0ludGVnZXIsXG4gICAgICAgICAgICBCaWdJbnRlZ2VyOiBCaWdJbnRlZ2VyLFxuICAgICAgICAgICAgU2VjdXJlUmFuZG9tOiBTZWN1cmVSYW5kb20sXG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5qc2JuID0ge1xuICAgICAgICAgIEJpZ0ludGVnZXI6IEJpZ0ludGVnZXIsXG4gICAgICAgICAgU2VjdXJlUmFuZG9tOiBTZWN1cmVSYW5kb21cbiAgICAgICAgfTtcbiAgICB9XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbnZhciBieXRlVG9IZXggPSBbXTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4W2ldID0gKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1V1aWQoYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBvZmZzZXQgfHwgMDtcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcbiAgLy8gam9pbiB1c2VkIHRvIGZpeCBtZW1vcnkgaXNzdWUgY2F1c2VkIGJ5IGNvbmNhdGVuYXRpb246IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMxNzUjYzRcbiAgcmV0dXJuIChbYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXV0pLmpvaW4oJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xuIiwiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gIEluIHRoZVxuLy8gYnJvd3NlciB0aGlzIGlzIGEgbGl0dGxlIGNvbXBsaWNhdGVkIGR1ZSB0byB1bmtub3duIHF1YWxpdHkgb2YgTWF0aC5yYW5kb20oKVxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxuLy8gZmVhdHVyZS1kZXRlY3Rpb25cblxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvXG4vLyBpbXBsZW1lbnRhdGlvbi4gQWxzbywgZmluZCB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgY3J5cHRvIG9uIElFMTEuXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0bykpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZihtc0NyeXB0bykgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT0gJ2Z1bmN0aW9uJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xuXG5pZiAoZ2V0UmFuZG9tVmFsdWVzKSB7XG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xuICB2YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcbiAgICBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xuICAgIHJldHVybiBybmRzODtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIE1hdGgucmFuZG9tKCktYmFzZWQgKFJORylcbiAgLy9cbiAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHVzZSBNYXRoLnJhbmRvbSgpLiAgSXQncyBmYXN0LCBidXQgaXMgb2YgdW5zcGVjaWZpZWRcbiAgLy8gcXVhbGl0eS5cbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWF0aFJORygpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGlmICgoaSAmIDB4MDMpID09PSAwKSByID0gTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMDAwO1xuICAgICAgcm5kc1tpXSA9IHIgPj4+ICgoaSAmIDB4MDMpIDw8IDMpICYgMHhmZjtcbiAgICB9XG5cbiAgICByZXR1cm4gcm5kcztcbiAgfTtcbn1cbiIsInZhciBybmcgPSByZXF1aXJlKCcuL2xpYi9ybmcnKTtcbnZhciBieXRlc1RvVXVpZCA9IHJlcXVpcmUoJy4vbGliL2J5dGVzVG9VdWlkJyk7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcbiAgICBidWYgPSBvcHRpb25zID09PSAnYmluYXJ5JyA/IG5ldyBBcnJheSgxNikgOiBudWxsO1xuICAgIG9wdGlvbnMgPSBudWxsO1xuICB9XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcblxuICAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcbiAgcm5kc1s4XSA9IChybmRzWzhdICYgMHgzZikgfCAweDgwO1xuXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuICBpZiAoYnVmKSB7XG4gICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDE2OyArK2lpKSB7XG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWYgfHwgYnl0ZXNUb1V1aWQocm5kcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdjQ7XG4iLCIvLyBEZWNsYXJlIHRoZSBFUzYgZmVhdHVyZXMgd2UncmUgdXNpbmdcclxuXHJcbi8vIFRPRE86IENvbnNpZGVyIHVzaW5nIHRoZSBsb2NhbCBmdW5jdGlvbiB2ZXJzaW9ucyBvZiB0aGVzZSwgc28gdGhhdCB3ZVxyXG4vLyBhdm9pZCBtb2RpZnlpbmcgYnJvd3NlciBnbG9iYWxzIChwb3RlbnRpYWwgZm9yIGludGVyb3AgYnVncyB3aXRoIG90aGVyIGxpYnJhcmllc1xyXG4vLyBvbiB0aGUgcGFnZSB0aGF0IG1pZ2h0IGJlIHBvbHlmaWxsaW5nIEVTNiBmZWF0dXJlcylcclxuXHJcbmltcG9ydCAnY29yZS1qcy9lczYvcHJvbWlzZSc7XHJcbmltcG9ydCAnY29yZS1qcy9mbi9mdW5jdGlvbi9iaW5kJztcclxuaW1wb3J0ICdjb3JlLWpzL2ZuL29iamVjdC9hc3NpZ24nO1xyXG5pbXBvcnQgJ2NvcmUtanMvZm4vb2JqZWN0L2Fzc2lnbic7XHJcbmltcG9ydCAnY29yZS1qcy9mbi9hcnJheS9maW5kJztcclxuaW1wb3J0ICdjb3JlLWpzL2ZuL2FycmF5L3NvbWUnO1xyXG5pbXBvcnQgJ2NvcmUtanMvZm4vYXJyYXkvaXMtYXJyYXknO1xyXG5pbXBvcnQgJ2NvcmUtanMvZm4vYXJyYXkvc3BsaWNlJztcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBUaW1lciB9IGZyb20gJy4vVGltZXIuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gNjA7IC8vIHNlY29uZHNcclxuXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NUb2tlbkV2ZW50cyB7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdUaW1lciA9IG5ldyBUaW1lcihcIkFjY2VzcyB0b2tlbiBleHBpcmluZ1wiKSxcclxuICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyZWRUaW1lciA9IG5ldyBUaW1lcihcIkFjY2VzcyB0b2tlbiBleHBpcmVkXCIpXHJcbiAgICB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG5cclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nID0gYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZCA9IGFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWQoY29udGFpbmVyKSB7XHJcbiAgICAgICAgLy8gb25seSByZWdpc3RlciBldmVudHMgaWYgdGhlcmUncyBhbiBhY2Nlc3MgdG9rZW4gYW5kIGl0IGhhcyBhbiBleHBpcmF0aW9uXHJcbiAgICAgICAgaWYgKGNvbnRhaW5lci5hY2Nlc3NfdG9rZW4gJiYgY29udGFpbmVyLmV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBsZXQgZHVyYXRpb24gPSBjb250YWluZXIuZXhwaXJlc19pbjtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogYWNjZXNzIHRva2VuIHByZXNlbnQsIHJlbWFpbmluZyBkdXJhdGlvbjpcIiwgZHVyYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGR1cmF0aW9uID4gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gb25seSByZWdpc3RlciBleHBpcmluZyBpZiB3ZSBzdGlsbCBoYXZlIHRpbWVcclxuICAgICAgICAgICAgICAgIGxldCBleHBpcmluZyA9IGR1cmF0aW9uIC0gdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwaXJpbmcgPD0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwaXJpbmcgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiByZWdpc3RlcmluZyBleHBpcmluZyB0aW1lciBpbjpcIiwgZXhwaXJpbmcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5pbml0KGV4cGlyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IGNhbmNlbGluZyBleGlzdGluZyBleHBpcmluZyB0aW1lciBiZWNhc2Ugd2UncmUgcGFzdCBleHBpcmF0aW9uLlwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGl0J3MgbmVnYXRpdmUsIGl0IHdpbGwgc3RpbGwgZmlyZVxyXG4gICAgICAgICAgICBsZXQgZXhwaXJlZCA9IGR1cmF0aW9uICsgMTtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogcmVnaXN0ZXJpbmcgZXhwaXJlZCB0aW1lciBpbjpcIiwgZXhwaXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5pbml0KGV4cGlyZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmNhbmNlbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bmxvYWQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMudW5sb2FkOiBjYW5jZWxpbmcgZXhpc3RpbmcgYWNjZXNzIHRva2VuIHRpbWVyc1wiKTtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRBY2Nlc3NUb2tlbkV4cGlyaW5nKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJpbmcoY2IpIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFjY2Vzc1Rva2VuRXhwaXJlZChjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJlZChjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0SW50ZXJ2YWwgPSAyMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoZWNrU2Vzc2lvbklGcmFtZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihjYWxsYmFjaywgY2xpZW50X2lkLCB1cmwsIGludGVydmFsLCBzdG9wT25FcnJvciA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IGNsaWVudF9pZDtcclxuICAgICAgICB0aGlzLl91cmwgPSB1cmw7XHJcbiAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBpbnRlcnZhbCB8fCBEZWZhdWx0SW50ZXJ2YWw7XHJcbiAgICAgICAgdGhpcy5fc3RvcE9uRXJyb3IgPSBzdG9wT25FcnJvcjtcclxuXHJcbiAgICAgICAgdmFyIGlkeCA9IHVybC5pbmRleE9mKFwiL1wiLCB1cmwuaW5kZXhPZihcIi8vXCIpICsgMik7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVfb3JpZ2luID0gdXJsLnN1YnN0cigwLCBpZHgpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG5cclxuICAgICAgICAvLyBzaG90Z3VuIGFwcHJvYWNoXHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLndpZHRoID0gMDtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5oZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZS5zcmMgPSB1cmw7XHJcbiAgICB9XHJcbiAgICBsb2FkKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZS5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2ZyYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX21lc3NhZ2UoZSkge1xyXG4gICAgICAgIGlmIChlLm9yaWdpbiA9PT0gdGhpcy5fZnJhbWVfb3JpZ2luICYmXHJcbiAgICAgICAgICAgIGUuc291cmNlID09PSB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmRhdGEgPT09IFwiZXJyb3JcIikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiQ2hlY2tTZXNzaW9uSUZyYW1lOiBlcnJvciBtZXNzYWdlIGZyb20gY2hlY2sgc2Vzc2lvbiBvcCBpZnJhbWVcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RvcE9uRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlLmRhdGEgPT09IFwiY2hhbmdlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWU6IGNoYW5nZWQgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ2hlY2tTZXNzaW9uSUZyYW1lOiBcIiArIGUuZGF0YSArIFwiIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXJ0KHNlc3Npb25fc3RhdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbl9zdGF0ZSAhPT0gc2Vzc2lvbl9zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWUuc3RhcnRcIik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG5cclxuICAgICAgICAgICAgbGV0IHNlbmQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKHRoaXMuX2NsaWVudF9pZCArIFwiIFwiICsgdGhpcy5fc2Vzc2lvbl9zdGF0ZSwgdGhpcy5fZnJhbWVfb3JpZ2luKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIHRyaWdnZXIgbm93XHJcbiAgICAgICAgICAgIHNlbmQoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGFuZCBzZXR1cCB0aW1lclxyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbChzZW5kLCB0aGlzLl9pbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5fc2Vzc2lvbl9zdGF0ZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90aW1lcikge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWUuc3RvcFwiKTtcclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuX3RpbWVyKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBXaW5kb3cgfSBmcm9tICcuL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZG92YUlGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyA9ICdoaWRkZW49eWVzJztcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgQ29yZG92YVBvcHVwV2luZG93IH0gZnJvbSAnLi9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvcmRvdmFQb3B1cE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdFBvcHVwRmVhdHVyZXMgPSAnbG9jYXRpb249bm8sdG9vbGJhcj1ubyx6b29tPW5vJztcclxuY29uc3QgRGVmYXVsdFBvcHVwVGFyZ2V0ID0gXCJfYmxhbmtcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Jkb3ZhUG9wdXBXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcclxuICAgICAgICB0aGlzLnRhcmdldCA9IHBhcmFtcy5wb3B1cFdpbmRvd1RhcmdldCB8fCBEZWZhdWx0UG9wdXBUYXJnZXQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdF91cmkgPSBwYXJhbXMuc3RhcnRVcmw7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93LmN0b3I6IHJlZGlyZWN0X3VyaTogXCIgKyB0aGlzLnJlZGlyZWN0X3VyaSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2lzSW5BcHBCcm93c2VySW5zdGFsbGVkKGNvcmRvdmFNZXRhZGF0YSkge1xyXG4gICAgICAgIHJldHVybiBbXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXJcIiwgXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXIuaW5hcHBicm93c2VyXCIsIFwib3JnLmFwYWNoZS5jb3Jkb3ZhLmluYXBwYnJvd3NlclwiXS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3Jkb3ZhTWV0YWRhdGEuaGFzT3duUHJvcGVydHkobmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5jb3Jkb3ZhKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3IoXCJjb3Jkb3ZhIGlzIHVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgY29yZG92YU1ldGFkYXRhID0gd2luZG93LmNvcmRvdmEucmVxdWlyZShcImNvcmRvdmEvcGx1Z2luX2xpc3RcIikubWV0YWRhdGE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZChjb3Jkb3ZhTWV0YWRhdGEpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yKFwiSW5BcHBCcm93c2VyIHBsdWdpbiBub3QgZm91bmRcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IGNvcmRvdmEuSW5BcHBCcm93c2VyLm9wZW4ocGFyYW1zLnVybCwgdGhpcy50YXJnZXQsIHRoaXMuZmVhdHVyZXMpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50ID0gdGhpcy5fZXhpdENhbGxiYWNrLmJpbmQodGhpcyk7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCA9IHRoaXMuX2xvYWRTdGFydENhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVwLmFkZEV2ZW50TGlzdGVuZXIoXCJleGl0XCIsIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1cC5hZGRFdmVudExpc3RlbmVyKFwibG9hZHN0YXJ0XCIsIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFN0YXJ0Q2FsbGJhY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQudXJsLmluZGV4T2YodGhpcy5yZWRpcmVjdF91cmkpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IGV2ZW50LnVybCB9KTtcclxuICAgICAgICB9ICAgIFxyXG4gICAgfVxyXG4gICAgX2V4aXRDYWxsYmFjayhtZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fZXJyb3IobWVzc2FnZSk7ICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfc3VjY2VzcyhkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3c6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBjb3Jkb3ZhIHBvcHVwIHdpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKXtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93OiBjbGVhbmluZyB1cCBwb3B1cFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImV4aXRcIiwgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRzdGFydFwiLCB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXJyb3JSZXNwb25zZSBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHtlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIGVycm9yX3VyaSwgc3RhdGV9PXt9XHJcbiAgICApIHtcclxuICAgICAgICAgaWYgKCFlcnJvcil7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk5vIGVycm9yIHBhc3NlZCB0byBFcnJvclJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlcnJvclwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyKGVycm9yX2Rlc2NyaXB0aW9uIHx8IGVycm9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFcnJvclJlc3BvbnNlXCI7XHJcblxyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSBlcnJvcl91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXZlbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG5hbWUpIHtcclxuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLl9jYWxsYmFja3MgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRIYW5kbGVyKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzLnB1c2goY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUhhbmRsZXIoY2IpIHtcclxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5fY2FsbGJhY2tzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IGNiKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByYWlzZSguLi5wYXJhbXMpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJFdmVudDogUmFpc2luZyBldmVudDogXCIgKyB0aGlzLl9uYW1lKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3NbaV0oLi4ucGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuY29uc3QgdGltZXIgPSB7XHJcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGNiLCBkdXJhdGlvbikge1xyXG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbChjYiwgZHVyYXRpb24pO1xyXG4gICAgfSxcclxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcclxuICAgICAgICByZXR1cm4gY2xlYXJJbnRlcnZhbChoYW5kbGUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubGV0IHRlc3RpbmcgPSBmYWxzZTtcclxubGV0IHJlcXVlc3QgPSBudWxsO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdsb2JhbCB7XHJcblxyXG4gICAgc3RhdGljIF90ZXN0aW5nKCkge1xyXG4gICAgICAgIHRlc3RpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgbG9jYXRpb24oKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsb2NhbFN0b3JhZ2UoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgc2Vzc2lvblN0b3JhZ2UoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNldFhNTEh0dHBSZXF1ZXN0KG5ld1JlcXVlc3QpIHtcclxuICAgICAgICByZXF1ZXN0ID0gbmV3UmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IFhNTEh0dHBSZXF1ZXN0KCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdCB8fCBYTUxIdHRwUmVxdWVzdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCB0aW1lcigpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRpbWVyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IElGcmFtZVdpbmRvdyB9IGZyb20gJy4vSUZyYW1lV2luZG93LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJRnJhbWVOYXZpZ2F0b3Ige1xyXG5cclxuICAgIHByZXBhcmUocGFyYW1zKSB7XHJcbiAgICAgICAgbGV0IGZyYW1lID0gbmV3IElGcmFtZVdpbmRvdyhwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZnJhbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZU5hdmlnYXRvci5jYWxsYmFja1wiKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgSUZyYW1lV2luZG93Lm5vdGlmeVBhcmVudCh1cmwpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdFRpbWVvdXQgPSAxMDAwMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBJRnJhbWVXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50ID0gdGhpcy5fbWVzc2FnZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG5cclxuICAgICAgICAvLyBzaG90Z3VuIGFwcHJvYWNoXHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLndpZHRoID0gMDtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5oZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9mcmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgdGltZW91dCA9IHBhcmFtcy5zaWxlbnRSZXF1ZXN0VGltZW91dCB8fCBEZWZhdWx0VGltZW91dDtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm5hdmlnYXRlOiBVc2luZyB0aW1lb3V0IG9mOlwiLCB0aW1lb3V0KTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLl90aW1lb3V0LmJpbmQodGhpcyksIHRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZS5zcmMgPSBwYXJhbXMudXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfc3VjY2VzcyhkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3c6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBmcmFtZSB3aW5kb3dcIik7XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZShkYXRhKTtcclxuICAgIH1cclxuICAgIF9lcnJvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5fcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9jbGVhbnVwKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9mcmFtZSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3c6IGNsZWFudXBcIik7XHJcblxyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XHJcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuX2ZyYW1lKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF90aW1lb3V0KCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy50aW1lb3V0XCIpO1xyXG4gICAgICAgIHRoaXMuX2Vycm9yKFwiRnJhbWUgd2luZG93IHRpbWVkIG91dFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBfbWVzc2FnZShlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm1lc3NhZ2VcIik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90aW1lciAmJlxyXG4gICAgICAgICAgICBlLm9yaWdpbiA9PT0gdGhpcy5fb3JpZ2luICYmXHJcbiAgICAgICAgICAgIGUuc291cmNlID09PSB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCB1cmwgPSBlLmRhdGE7XHJcbiAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IHVybCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiSW52YWxpZCByZXNwb25zZSBmcm9tIGZyYW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBfb3JpZ2luKCkge1xyXG4gICAgICAgIHJldHVybiBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG5vdGlmeVBhcmVudCh1cmwpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50XCIpO1xyXG4gICAgICAgIGlmICh3aW5kb3cuZnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHVybCA9IHVybCB8fCB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm5vdGlmeVBhcmVudDogcG9zdGluZyB1cmwgbWVzc2FnZSB0byBwYXJlbnRcIik7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHVybCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSW5NZW1vcnlXZWJTdG9yYWdle1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLl9kYXRhID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbShrZXkpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJbk1lbW9yeVdlYlN0b3JhZ2UuZ2V0SXRlbVwiLCBrZXkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SXRlbShrZXksIHZhbHVlKXtcclxuICAgICAgICBMb2cuZGVidWcoXCJJbk1lbW9yeVdlYlN0b3JhZ2Uuc2V0SXRlbVwiLCBrZXkpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUl0ZW0oa2V5KXtcclxuICAgICAgICBMb2cuZGVidWcoXCJJbk1lbW9yeVdlYlN0b3JhZ2UucmVtb3ZlSXRlbVwiLCBrZXkpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9kYXRhW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxlbmd0aCgpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fZGF0YSkubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGtleShpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9kYXRhKVtpbmRleF07XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pIHtcclxuICAgIHJldHVybiBjbGFzcyBKb3NlVXRpbCB7XHJcblxyXG4gICAgICAgIHN0YXRpYyBwYXJzZUp3dChqd3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwucGFyc2VKd3RcIik7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBqd3MuSldTLnBhcnNlKGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogdG9rZW4uaGVhZGVyT2JqLFxyXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRva2VuLnBheWxvYWRPYmpcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3Qoand0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwudmFsaWRhdGVKd3RcIik7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleS5rdHkgPT09IFwiUlNBXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmUgJiYga2V5Lm4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS54NWMgJiYga2V5Lng1Yy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IGI2NHRvaGV4KGtleS54NWNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGhleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lmt0eSA9PT0gXCJFQ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5jcnYgJiYga2V5LnggJiYga2V5LnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogRUMga2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJFQyBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFVuc3VwcG9ydGVkIGtleSB0eXBlXCIsIGtleSAmJiBrZXkua3R5KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2V5IHR5cGU6IFwiICsga2V5ICYmIGtleS5rdHkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwuX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUgJiYgZS5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiSldUIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWNsb2NrU2tldykge1xyXG4gICAgICAgICAgICAgICAgY2xvY2tTa2V3ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFub3cpIHtcclxuICAgICAgICAgICAgICAgIG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBKb3NlVXRpbC5wYXJzZUp3dChqd3QpLnBheWxvYWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQuaXNzKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGF5bG9hZC5pc3MgIT09IGlzc3Vlcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBJbnZhbGlkIGlzc3VlciBpbiB0b2tlblwiLCBwYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBpc3N1ZXIgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5pc3MpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF1ZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBhdWQgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdWQgd2FzIG5vdCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHZhbGlkQXVkaWVuY2UgPSBwYXlsb2FkLmF1ZCA9PT0gYXVkaWVuY2UgfHwgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdWQpICYmIHBheWxvYWQuYXVkLmluZGV4T2YoYXVkaWVuY2UpID49IDApO1xyXG4gICAgICAgICAgICBpZiAoIXZhbGlkQXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlblwiLCBwYXlsb2FkLmF1ZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlbjogXCIgKyBwYXlsb2FkLmF1ZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gYXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhenAgaW4gdG9rZW5cIiwgcGF5bG9hZC5henApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgYXpwIGluIHRva2VuOiBcIiArIHBheWxvYWQuYXpwKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGltZUluc2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG93ZXJOb3cgPSBub3cgKyBjbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXBwZXJOb3cgPSBub3cgLSBjbG9ja1NrZXc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlhdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogaWF0IHdhcyBub3QgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsb3dlck5vdyA8IHBheWxvYWQuaWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpYXQgaXMgaW4gdGhlIGZ1dHVyZVwiLCBwYXlsb2FkLmlhdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCBpcyBpbiB0aGUgZnV0dXJlOiBcIiArIHBheWxvYWQuaWF0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubmJmICYmIGxvd2VyTm93IDwgcGF5bG9hZC5uYmYpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IG5iZiBpcyBpbiB0aGUgZnV0dXJlXCIsIHBheWxvYWQubmJmKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibmJmIGlzIGluIHRoZSBmdXR1cmU6IFwiICsgcGF5bG9hZC5uYmYpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZXhwIHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZXhwIDwgdXBwZXJOb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGV4cCBpcyBpbiB0aGUgcGFzdFwiLCBwYXlsb2FkLmV4cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImV4cCBpcyBpbiB0aGUgcGFzdDpcIiArIHBheWxvYWQuZXhwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd3MuSldTLnZlcmlmeShqd3QsIGtleSwgQWxsb3dlZFNpZ25pbmdBbGdzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IHNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhhc2hTdHJpbmcodmFsdWUsIGFsZykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5VdGlsLmhhc2hTdHJpbmcodmFsdWUsIGFsZyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhleFRvQmFzZTY0VXJsKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaGV4dG9iNjR1KHZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IGp3cywgS2V5VXRpbCwgWDUwOSwgY3J5cHRvLCBoZXh0b2I2NHUsIGI2NHRvaGV4LCBBbGxvd2VkU2lnbmluZ0FsZ3MgfSBmcm9tICcuL2NyeXB0by9yc2EnO1xyXG5pbXBvcnQgZ2V0Sm9zZVV0aWwgZnJvbSAnLi9Kb3NlVXRpbEltcGwnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEpvc2VVdGlsID0gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pO1xyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBhZGRpdGlvbmFsQ29udGVudFR5cGVzID0gbnVsbCwgXHJcbiAgICAgICAgWE1MSHR0cFJlcXVlc3RDdG9yID0gR2xvYmFsLlhNTEh0dHBSZXF1ZXN0LCBcclxuICAgICAgICBqd3RIYW5kbGVyID0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxDb250ZW50VHlwZXMgJiYgQXJyYXkuaXNBcnJheShhZGRpdGlvbmFsQ29udGVudFR5cGVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRUeXBlcyA9IGFkZGl0aW9uYWxDb250ZW50VHlwZXMuc2xpY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbnRlbnRUeXBlcy5wdXNoKCdhcHBsaWNhdGlvbi9qc29uJyk7XHJcbiAgICAgICAgaWYgKGp3dEhhbmRsZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzLnB1c2goJ2FwcGxpY2F0aW9uL2p3dCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fWE1MSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdEN0b3I7XHJcbiAgICAgICAgdGhpcy5fand0SGFuZGxlciA9IGp3dEhhbmRsZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SnNvbih1cmwsIHRva2VuKSB7XHJcbiAgICAgICAgaWYgKCF1cmwpe1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5nZXRKc29uOiBObyB1cmwgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmxcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uLCB1cmw6IFwiLCB1cmwpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgICAgICByZXEub3BlbignR0VUJywgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhbGxvd2VkQ29udGVudFR5cGVzID0gdGhpcy5fY29udGVudFR5cGVzO1xyXG4gICAgICAgICAgICB2YXIgand0SGFuZGxlciA9IHRoaXMuX2p3dEhhbmRsZXI7XHJcblxyXG4gICAgICAgICAgICByZXEub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uOiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkLCBzdGF0dXNcIiwgcmVxLnN0YXR1cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT09IDIwMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPSByZXEuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBhbGxvd2VkQ29udGVudFR5cGVzLmZpbmQoaXRlbT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gXCJhcHBsaWNhdGlvbi9qd3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgand0SGFuZGxlcihyZXEpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5nZXRKc29uOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIENvbnRlbnQtVHlwZTogXCIgKyBjb250ZW50VHlwZSArIFwiLCBmcm9tIFVSTDogXCIgKyB1cmwpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihyZXEuc3RhdHVzVGV4dCArIFwiIChcIiArIHJlcS5zdGF0dXMgKyBcIilcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IG5ldHdvcmsgZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJOZXR3b3JrIEVycm9yXCIpKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogdG9rZW4gcGFzc2VkLCBzZXR0aW5nIEF1dGhvcml6YXRpb24gaGVhZGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiICsgdG9rZW4pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXEuc2VuZCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RGb3JtKHVybCwgcGF5bG9hZCkge1xyXG4gICAgICAgIGlmICghdXJsKXtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLnBvc3RGb3JtLCB1cmw6IFwiLCB1cmwpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgICAgICByZXEub3BlbignUE9TVCcsIHVybCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYWxsb3dlZENvbnRlbnRUeXBlcyA9IHRoaXMuX2NvbnRlbnRUeXBlcztcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkLCBzdGF0dXNcIiwgcmVxLnN0YXR1cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT09IDIwMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPSByZXEuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBhbGxvd2VkQ29udGVudFR5cGVzLmZpbmQoaXRlbT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIENvbnRlbnQtVHlwZTogXCIgKyBjb250ZW50VHlwZSArIFwiLCBmcm9tIFVSTDogXCIgKyB1cmwpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT09IDQwMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPSByZXEuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBhbGxvd2VkQ29udGVudFR5cGVzLmZpbmQoaXRlbT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEVycm9yIGZyb20gc2VydmVyOiBcIiwgcGF5bG9hZC5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocGF5bG9hZC5lcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgcGFyc2luZyBKU09OIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IocmVxLnN0YXR1c1RleHQgKyBcIiAoXCIgKyByZXEuc3RhdHVzICsgXCIpXCIpKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogbmV0d29yayBlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbGV0IGJvZHkgPSBcIlwiO1xyXG4gICAgICAgICAgICBmb3IobGV0IGtleSBpbiBwYXlsb2FkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcGF5bG9hZFtrZXldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gXCImXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gXCI9XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSArPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcclxuICAgICAgICAgICAgcmVxLnNlbmQoYm9keSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxubGV0IG5vcExvZ2dlciA9IHtcclxuICAgIGRlYnVnKCl7fSxcclxuICAgIGluZm8oKXt9LFxyXG4gICAgd2Fybigpe30sXHJcbiAgICBlcnJvcigpe31cclxufTtcclxuXHJcbmNvbnN0IE5PTkUgPSAwO1xyXG5jb25zdCBFUlJPUiA9IDE7XHJcbmNvbnN0IFdBUk4gPSAyO1xyXG5jb25zdCBJTkZPID0gMztcclxuY29uc3QgREVCVUcgPSA0O1xyXG5cclxubGV0IGxvZ2dlcjtcclxubGV0IGxldmVsO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvZyB7XHJcbiAgICBzdGF0aWMgZ2V0IE5PTkUoKSB7cmV0dXJuIE5PTkV9O1xyXG4gICAgc3RhdGljIGdldCBFUlJPUigpIHtyZXR1cm4gRVJST1J9O1xyXG4gICAgc3RhdGljIGdldCBXQVJOKCkge3JldHVybiBXQVJOfTtcclxuICAgIHN0YXRpYyBnZXQgSU5GTygpIHtyZXR1cm4gSU5GT307XHJcbiAgICBzdGF0aWMgZ2V0IERFQlVHKCkge3JldHVybiBERUJVR307XHJcbiAgICBcclxuICAgIHN0YXRpYyByZXNldCgpe1xyXG4gICAgICAgIGxldmVsID0gSU5GTztcclxuICAgICAgICBsb2dnZXIgPSBub3BMb2dnZXI7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXQgbGV2ZWwoKXtcclxuICAgICAgICByZXR1cm4gbGV2ZWw7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc2V0IGxldmVsKHZhbHVlKXtcclxuICAgICAgICBpZiAoTk9ORSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBERUJVRyl7XHJcbiAgICAgICAgICAgIGxldmVsID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZyBsZXZlbFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXQgbG9nZ2VyKCl7XHJcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzZXQgbG9nZ2VyKHZhbHVlKXtcclxuICAgICAgICBpZiAoIXZhbHVlLmRlYnVnICYmIHZhbHVlLmluZm8pIHtcclxuICAgICAgICAgICAgLy8ganVzdCB0byBzdGF5IGJhY2t3YXJkcyBjb21wYXQuIGNhbiByZW1vdmUgaW4gMi4wXHJcbiAgICAgICAgICAgIHZhbHVlLmRlYnVnID0gdmFsdWUuaW5mbztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5kZWJ1ZyAmJiB2YWx1ZS5pbmZvICYmIHZhbHVlLndhcm4gJiYgdmFsdWUuZXJyb3Ipe1xyXG4gICAgICAgICAgICBsb2dnZXIgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nZ2VyXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGRlYnVnKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBERUJVRyl7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zy5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyBpbmZvKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBJTkZPKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8uYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgd2FybiguLi5hcmdzKXtcclxuICAgICAgICBpZiAobGV2ZWwgPj0gV0FSTil7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGVycm9yKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBFUlJPUil7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvci5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuTG9nLnJlc2V0KCk7XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcclxuXHJcbmNvbnN0IE9pZGNNZXRhZGF0YVVybFBhdGggPSAnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1ldGFkYXRhU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZTogTm8gc2V0dGluZ3MgcGFzc2VkIHRvIE1ldGFkYXRhU2VydmljZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcihbJ2FwcGxpY2F0aW9uL2p3ay1zZXQranNvbiddKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWV0YWRhdGFVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmwgJiYgdGhpcy5fbWV0YWRhdGFVcmwuaW5kZXhPZihPaWRjTWV0YWRhdGFVcmxQYXRoKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmxbdGhpcy5fbWV0YWRhdGFVcmwubGVuZ3RoIC0gMV0gIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9IE9pZGNNZXRhZGF0YVVybFBhdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZXRhZGF0YSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBSZXR1cm5pbmcgbWV0YWRhdGEgZnJvbSBzZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBObyBhdXRob3JpdHkgb3IgbWV0YWRhdGFVcmwgY29uZmlndXJlZCBvbiBzZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF1dGhvcml0eSBvciBtZXRhZGF0YVVybCBjb25maWd1cmVkIG9uIHNldHRpbmdzXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YTogZ2V0dGluZyBtZXRhZGF0YSBmcm9tXCIsIHRoaXMubWV0YWRhdGFVcmwpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UuZ2V0SnNvbih0aGlzLm1ldGFkYXRhVXJsKVxyXG4gICAgICAgICAgICAudGhlbihtZXRhZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IGpzb24gcmVjZWl2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJc3N1ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJpc3N1ZXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXV0aG9yaXphdGlvbkVuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiYXV0aG9yaXphdGlvbl9lbmRwb2ludFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VySW5mb0VuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwidXNlcmluZm9fZW5kcG9pbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VG9rZW5FbmRwb2ludChvcHRpb25hbD10cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJ0b2tlbl9lbmRwb2ludFwiLCBvcHRpb25hbCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiY2hlY2tfc2Vzc2lvbl9pZnJhbWVcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RW5kU2Vzc2lvbkVuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiZW5kX3Nlc3Npb25fZW5kcG9pbnRcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmV2b2NhdGlvbkVuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwicmV2b2NhdGlvbl9lbmRwb2ludFwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRLZXlzRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJqd2tzX3VyaVwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0TWV0YWRhdGFQcm9wZXJ0eShuYW1lLCBvcHRpb25hbD1mYWxzZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5IGZvcjogXCIgKyBuYW1lKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IG1ldGFkYXRhIHJlY2lldmVkXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhW25hbWVdID09PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWwgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIG9wdGlvbmFsIHByb3BlcnR5IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIHByb3BlcnR5IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgZG9lcyBub3QgY29udGFpbiBwcm9wZXJ0eSBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbWV0YWRhdGFbbmFtZV07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2lnbmluZ0tleXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czogUmV0dXJuaW5nIHNpZ25pbmdLZXlzIGZyb20gc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJqd2tzX3VyaVwiKS50aGVuKGp3a3NfdXJpID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBqd2tzX3VyaSByZWNlaXZlZFwiLCBqd2tzX3VyaSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UuZ2V0SnNvbihqd2tzX3VyaSkudGhlbihrZXlTZXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBrZXkgc2V0IHJlY2VpdmVkXCIsIGtleVNldCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFrZXlTZXQua2V5cykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czogTWlzc2luZyBrZXlzIG9uIGtleXNldFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGtleXMgb24ga2V5c2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzID0ga2V5U2V0LmtleXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudFNldHRpbmdzIH0gZnJvbSAnLi9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9FcnJvclJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVxdWVzdCB9IGZyb20gJy4vU2lnbmluUmVxdWVzdC5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblJlc3BvbnNlIH0gZnJvbSAnLi9TaWduaW5SZXNwb25zZS5qcyc7XHJcbmltcG9ydCB7IFNpZ25vdXRSZXF1ZXN0IH0gZnJvbSAnLi9TaWdub3V0UmVxdWVzdC5qcyc7XHJcbmltcG9ydCB7IFNpZ25vdXRSZXNwb25zZSB9IGZyb20gJy4vU2lnbm91dFJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgU2lnbmluU3RhdGUgfSBmcm9tICcuL1NpZ25pblN0YXRlLmpzJztcclxuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL1N0YXRlLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBPaWRjQ2xpZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzID0ge30pIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3MgaW5zdGFuY2VvZiBPaWRjQ2xpZW50U2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzID0gbmV3IE9pZGNDbGllbnRTZXR0aW5ncyhzZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBfc3RhdGVTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5zdGF0ZVN0b3JlO1xyXG4gICAgfVxyXG4gICAgZ2V0IF92YWxpZGF0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MudmFsaWRhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9tZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MubWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlU2lnbmluUmVxdWVzdCh7XHJcbiAgICAgICAgcmVzcG9uc2VfdHlwZSwgc2NvcGUsIHJlZGlyZWN0X3VyaSxcclxuICAgICAgICAvLyBkYXRhIHdhcyBtZWFudCB0byBiZSB0aGUgcGxhY2UgYSBjYWxsZXIgY291bGQgaW5kaWNhdGUgdGhlIGRhdGEgdG9cclxuICAgICAgICAvLyBoYXZlIHJvdW5kIHRyaXBwZWQsIGJ1dCBwZW9wbGUgd2VyZSBnZXR0aW5nIGNvbmZ1c2VkLCBzbyBpIGFkZGVkIHN0YXRlIChzaW5jZSB0aGF0IG1hdGNoZXMgdGhlIHNwZWMpXHJcbiAgICAgICAgLy8gYW5kIHNvIG5vdyBpZiBkYXRhIGlzIG5vdCBwYXNzZWQsIGJ1dCBzdGF0ZSBpcyB0aGVuIHN0YXRlIHdpbGwgYmUgdXNlZFxyXG4gICAgICAgIGRhdGEsIHN0YXRlLCBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsXHJcbiAgICAgICAgcmVzb3VyY2UsIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCByZXNwb25zZV9tb2RlLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGUgfSA9IHt9LFxyXG4gICAgICAgIHN0YXRlU3RvcmVcclxuICAgICkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbmluUmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgbGV0IGNsaWVudF9pZCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICByZXNwb25zZV90eXBlID0gcmVzcG9uc2VfdHlwZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIHNjb3BlID0gc2NvcGUgfHwgdGhpcy5fc2V0dGluZ3Muc2NvcGU7XHJcbiAgICAgICAgcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgLy8gaWRfdG9rZW5faGludCwgbG9naW5faGludCBhcmVuJ3QgYWxsb3dlZCBvbiBfc2V0dGluZ3NcclxuICAgICAgICBwcm9tcHQgPSBwcm9tcHQgfHwgdGhpcy5fc2V0dGluZ3MucHJvbXB0O1xyXG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5IHx8IHRoaXMuX3NldHRpbmdzLmRpc3BsYXk7XHJcbiAgICAgICAgbWF4X2FnZSA9IG1heF9hZ2UgfHwgdGhpcy5fc2V0dGluZ3MubWF4X2FnZTtcclxuICAgICAgICB1aV9sb2NhbGVzID0gdWlfbG9jYWxlcyB8fCB0aGlzLl9zZXR0aW5ncy51aV9sb2NhbGVzO1xyXG4gICAgICAgIGFjcl92YWx1ZXMgPSBhY3JfdmFsdWVzIHx8IHRoaXMuX3NldHRpbmdzLmFjcl92YWx1ZXM7XHJcbiAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNvdXJjZTtcclxuICAgICAgICByZXNwb25zZV9tb2RlID0gcmVzcG9uc2VfbW9kZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlO1xyXG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSBleHRyYVF1ZXJ5UGFyYW1zIHx8IHRoaXMuX3NldHRpbmdzLmV4dHJhUXVlcnlQYXJhbXM7XHJcblxyXG4gICAgICAgIGxldCBhdXRob3JpdHkgPSB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHk7XHJcblxyXG4gICAgICAgIGlmIChTaWduaW5SZXF1ZXN0LmlzQ29kZShyZXNwb25zZV90eXBlKSAmJiByZXNwb25zZV90eXBlICE9PSBcImNvZGVcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiT3BlbklEIENvbm5lY3QgaHlicmlkIGZsb3cgaXMgbm90IHN1cHBvcnRlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWduaW5SZXF1ZXN0OiBSZWNlaXZlZCBhdXRob3JpemF0aW9uIGVuZHBvaW50XCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgc2lnbmluUmVxdWVzdCA9IG5ldyBTaWduaW5SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgIHVybCxcclxuICAgICAgICAgICAgICAgIGNsaWVudF9pZCxcclxuICAgICAgICAgICAgICAgIHJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlX3R5cGUsXHJcbiAgICAgICAgICAgICAgICBzY29wZSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgfHwgc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBhdXRob3JpdHksXHJcbiAgICAgICAgICAgICAgICBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsXHJcbiAgICAgICAgICAgICAgICByZXNvdXJjZSwgcmVxdWVzdCwgcmVxdWVzdF91cmksIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSwgcmVzcG9uc2VfbW9kZVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzaWduaW5TdGF0ZSA9IHNpZ25pblJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVTdG9yZS5zZXQoc2lnbmluU3RhdGUuaWQsIHNpZ25pblN0YXRlLnRvU3RvcmFnZVN0cmluZygpKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaW5SZXF1ZXN0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHJlbW92ZVN0YXRlID0gZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlXCIpO1xyXG5cclxuICAgICAgICBsZXQgdXNlUXVlcnkgPSB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlID09PSBcInF1ZXJ5XCIgfHwgXHJcbiAgICAgICAgICAgICghdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfbW9kZSAmJiBTaWduaW5SZXF1ZXN0LmlzQ29kZSh0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlKSk7XHJcbiAgICAgICAgbGV0IGRlbGltaXRlciA9IHVzZVF1ZXJ5ID8gXCI/XCIgOiBcIiNcIjtcclxuXHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25pblJlc3BvbnNlKHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN0YXRlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0ZUFwaShyZXNwb25zZS5zdGF0ZSkudGhlbihzdG9yZWRTdGF0ZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkU3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhzdG9yZWRTdGF0ZVN0cmluZyk7XHJcbiAgICAgICAgICAgIHJldHVybiB7c3RhdGUsIHJlc3BvbnNlfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgdHJ1ZSkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2U6IFJlY2VpdmVkIHN0YXRlIGZyb20gc3RvcmFnZTsgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlU2lnbm91dFJlcXVlc3Qoe2lkX3Rva2VuX2hpbnQsIGRhdGEsIHN0YXRlLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSB9ID0ge30sXHJcbiAgICAgICAgc3RhdGVTdG9yZVxyXG4gICAgKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0gZXh0cmFRdWVyeVBhcmFtcyB8fCB0aGlzLl9zZXR0aW5ncy5leHRyYVF1ZXJ5UGFyYW1zO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldEVuZFNlc3Npb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IE5vIGVuZCBzZXNzaW9uIGVuZHBvaW50IHVybCByZXR1cm5lZFwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0OiBSZWNlaXZlZCBlbmQgc2Vzc2lvbiBlbmRwb2ludFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgU2lnbm91dFJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgaWRfdG9rZW5faGludCxcclxuICAgICAgICAgICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgfHwgc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdF90eXBlXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZ25vdXRTdGF0ZSA9IHJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIGlmIChzaWdub3V0U3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFNpZ25vdXQgcmVxdWVzdCBoYXMgc3RhdGUgdG8gcGVyc2lzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG4gICAgICAgICAgICAgICAgc3RhdGVTdG9yZS5zZXQoc2lnbm91dFN0YXRlLmlkLCBzaWdub3V0U3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCByZW1vdmVTdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IG5ldyBTaWdub3V0UmVzcG9uc2UodXJsKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLndhcm4oXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZTogUmVzcG9uc2Ugd2FzIGVycm9yOiBcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3VuZGVmaW5lZCwgcmVzcG9uc2V9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUtleSA9IHJlc3BvbnNlLnN0YXRlO1xyXG5cclxuICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG5cclxuICAgICAgICB2YXIgc3RhdGVBcGkgPSByZW1vdmVTdGF0ZSA/IHN0YXRlU3RvcmUucmVtb3ZlLmJpbmQoc3RhdGVTdG9yZSkgOiBzdGF0ZVN0b3JlLmdldC5iaW5kKHN0YXRlU3RvcmUpO1xyXG4gICAgICAgIHJldHVybiBzdGF0ZUFwaShzdGF0ZUtleSkudGhlbihzdG9yZWRTdGF0ZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkU3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmVkU3RhdGVTdHJpbmcpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtzdGF0ZSwgcmVzcG9uc2V9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NTaWdub3V0UmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbm91dFJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCB0cnVlKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWdub3V0UmVzcG9uc2U6IFJlY2VpdmVkIHN0YXRlIGZyb20gc3RvcmFnZTsgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZShzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyU3RhbGVTdGF0ZShzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jbGVhclN0YWxlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHJldHVybiBTdGF0ZS5jbGVhclN0YWxlU3RhdGUoc3RhdGVTdG9yZSwgdGhpcy5zZXR0aW5ncy5zdGFsZVN0YXRlQWdlKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlVmFsaWRhdG9yIH0gZnJvbSAnLi9SZXNwb25zZVZhbGlkYXRvci5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuXHJcbmNvbnN0IE9pZGNNZXRhZGF0YVVybFBhdGggPSAnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgRGVmYXVsdFJlc3BvbnNlVHlwZSA9IFwiaWRfdG9rZW5cIjtcclxuY29uc3QgRGVmYXVsdFNjb3BlID0gXCJvcGVuaWRcIjtcclxuY29uc3QgRGVmYXVsdFN0YWxlU3RhdGVBZ2UgPSA2MCAqIDE1OyAvLyBzZWNvbmRzXHJcbmNvbnN0IERlZmF1bHRDbG9ja1NrZXdJblNlY29uZHMgPSA2MCAqIDU7XHJcblxyXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudFNldHRpbmdzIHtcclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICAvLyBtZXRhZGF0YSByZWxhdGVkXHJcbiAgICAgICAgYXV0aG9yaXR5LCBtZXRhZGF0YVVybCwgbWV0YWRhdGEsIHNpZ25pbmdLZXlzLFxyXG4gICAgICAgIC8vIGNsaWVudCByZWxhdGVkXHJcbiAgICAgICAgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCByZXNwb25zZV90eXBlID0gRGVmYXVsdFJlc3BvbnNlVHlwZSwgc2NvcGUgPSBEZWZhdWx0U2NvcGUsXHJcbiAgICAgICAgcmVkaXJlY3RfdXJpLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgLy8gb3B0aW9uYWwgcHJvdG9jb2xcclxuICAgICAgICBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIC8vIGJlaGF2aW9yIGZsYWdzXHJcbiAgICAgICAgZmlsdGVyUHJvdG9jb2xDbGFpbXMgPSB0cnVlLCBsb2FkVXNlckluZm8gPSB0cnVlLFxyXG4gICAgICAgIHN0YWxlU3RhdGVBZ2UgPSBEZWZhdWx0U3RhbGVTdGF0ZUFnZSwgY2xvY2tTa2V3ID0gRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyxcclxuICAgICAgICB1c2VySW5mb0p3dElzc3VlciA9ICdPUCcsXHJcbiAgICAgICAgLy8gb3RoZXIgYmVoYXZpb3JcclxuICAgICAgICBzdGF0ZVN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKCksXHJcbiAgICAgICAgUmVzcG9uc2VWYWxpZGF0b3JDdG9yID0gUmVzcG9uc2VWYWxpZGF0b3IsXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0ge31cclxuICAgIH0gPSB7fSkge1xyXG5cclxuICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSBhdXRob3JpdHk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSBtZXRhZGF0YVVybDtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgICAgIHRoaXMuX3NpZ25pbmdLZXlzID0gc2lnbmluZ0tleXM7XHJcblxyXG4gICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IGNsaWVudF9pZDtcclxuICAgICAgICB0aGlzLl9jbGllbnRfc2VjcmV0ID0gY2xpZW50X3NlY3JldDtcclxuICAgICAgICB0aGlzLl9yZXNwb25zZV90eXBlID0gcmVzcG9uc2VfdHlwZTtcclxuICAgICAgICB0aGlzLl9zY29wZSA9IHNjb3BlO1xyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb21wdCA9IHByb21wdDtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5ID0gZGlzcGxheTtcclxuICAgICAgICB0aGlzLl9tYXhfYWdlID0gbWF4X2FnZTtcclxuICAgICAgICB0aGlzLl91aV9sb2NhbGVzID0gdWlfbG9jYWxlcztcclxuICAgICAgICB0aGlzLl9hY3JfdmFsdWVzID0gYWNyX3ZhbHVlcztcclxuICAgICAgICB0aGlzLl9yZXNvdXJjZSA9IHJlc291cmNlO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcyA9ICEhZmlsdGVyUHJvdG9jb2xDbGFpbXM7XHJcbiAgICAgICAgdGhpcy5fbG9hZFVzZXJJbmZvID0gISFsb2FkVXNlckluZm87XHJcbiAgICAgICAgdGhpcy5fc3RhbGVTdGF0ZUFnZSA9IHN0YWxlU3RhdGVBZ2U7XHJcbiAgICAgICAgdGhpcy5fY2xvY2tTa2V3ID0gY2xvY2tTa2V3O1xyXG4gICAgICAgIHRoaXMuX3VzZXJJbmZvSnd0SXNzdWVyID0gdXNlckluZm9Kd3RJc3N1ZXI7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlO1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvciA9IG5ldyBSZXNwb25zZVZhbGlkYXRvckN0b3IodGhpcyk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB0eXBlb2YgZXh0cmFRdWVyeVBhcmFtcyA9PT0gJ29iamVjdCcgPyBleHRyYVF1ZXJ5UGFyYW1zIDoge307XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xpZW50IGNvbmZpZ1xyXG4gICAgZ2V0IGNsaWVudF9pZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X2lkO1xyXG4gICAgfVxyXG4gICAgc2V0IGNsaWVudF9pZCh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIC8vIG9uZS10aW1lIHNldCBvbmx5XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudFNldHRpbmdzLnNldF9jbGllbnRfaWQ6IGNsaWVudF9pZCBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGllbnRfaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X3NlY3JldCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X3NlY3JldDtcclxuICAgIH1cclxuICAgIGdldCByZXNwb25zZV90eXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV90eXBlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjb3BlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcclxuICAgIH1cclxuICAgIGdldCByZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gb3B0aW9uYWwgcHJvdG9jb2wgcGFyYW1zXHJcbiAgICBnZXQgcHJvbXB0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9tcHQ7XHJcbiAgICB9XHJcbiAgICBnZXQgZGlzcGxheSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheTtcclxuICAgIH1cclxuICAgIGdldCBtYXhfYWdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhfYWdlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHVpX2xvY2FsZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VpX2xvY2FsZXM7XHJcbiAgICB9XHJcbiAgICBnZXQgYWNyX3ZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWNyX3ZhbHVlcztcclxuICAgIH1cclxuICAgIGdldCByZXNvdXJjZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2U7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfbW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfbW9kZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gbWV0YWRhdGFcclxuICAgIGdldCBhdXRob3JpdHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGhvcml0eTtcclxuICAgIH1cclxuICAgIHNldCBhdXRob3JpdHkodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2F1dGhvcml0eSkge1xyXG4gICAgICAgICAgICAvLyBvbmUtdGltZSBzZXQgb25seVxyXG4gICAgICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnRTZXR0aW5ncy5zZXRfYXV0aG9yaXR5OiBhdXRob3JpdHkgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXV0aG9yaXR5IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhVXJsKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSB0aGlzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybCAmJiB0aGlzLl9tZXRhZGF0YVVybC5pbmRleE9mKE9pZGNNZXRhZGF0YVVybFBhdGgpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsW3RoaXMuX21ldGFkYXRhVXJsLmxlbmd0aCAtIDFdICE9PSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSBPaWRjTWV0YWRhdGFVcmxQYXRoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0dGFibGUvY2FjaGFibGUgbWV0YWRhdGEgdmFsdWVzXHJcbiAgICBnZXQgbWV0YWRhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhO1xyXG4gICAgfVxyXG4gICAgc2V0IG1ldGFkYXRhKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lnbmluZ0tleXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbmdLZXlzO1xyXG4gICAgfVxyXG4gICAgc2V0IHNpZ25pbmdLZXlzKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fc2lnbmluZ0tleXMgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBiZWhhdmlvciBmbGFnc1xyXG4gICAgZ2V0IGZpbHRlclByb3RvY29sQ2xhaW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcztcclxuICAgIH1cclxuICAgIGdldCBsb2FkVXNlckluZm8oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VySW5mbztcclxuICAgIH1cclxuICAgIGdldCBzdGFsZVN0YXRlQWdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFsZVN0YXRlQWdlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNsb2NrU2tldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2tTa2V3O1xyXG4gICAgfVxyXG4gICAgZ2V0IHVzZXJJbmZvSnd0SXNzdWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VySW5mb0p3dElzc3VlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc3RhdGVTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVTdG9yZTtcclxuICAgIH1cclxuICAgIGdldCB2YWxpZGF0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBtZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcclxuICAgIGdldCBleHRyYVF1ZXJ5UGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4dHJhUXVlcnlQYXJhbXModmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyl7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgUG9wdXBXaW5kb3cgfSBmcm9tICcuL1BvcHVwV2luZG93LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQb3B1cE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgUG9wdXBXaW5kb3cocGFyYW1zKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxsYmFjayh1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cE5hdmlnYXRvci5jYWxsYmFja1wiKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuY29uc3QgQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsID0gNTAwO1xyXG5jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHdpZHRoPTUwMCxoZWlnaHQ9NTAwLGxlZnQ9MTAwLHRvcD0xMDA7JztcclxuLy9jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHdpZHRoPTUwMCxoZWlnaHQ9NTAwLGxlZnQ9MTAwLHRvcD0xMDA7cmVzaXphYmxlPXllcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0UG9wdXBUYXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvcHVwV2luZG93IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgdGFyZ2V0ID0gcGFyYW1zLnBvcHVwV2luZG93VGFyZ2V0IHx8IERlZmF1bHRQb3B1cFRhcmdldDtcclxuICAgICAgICBsZXQgZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcclxuXHJcbiAgICAgICAgdGhpcy5fcG9wdXAgPSB3aW5kb3cub3BlbignJywgdGFyZ2V0LCBmZWF0dXJlcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmN0b3I6IHBvcHVwIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZC5iaW5kKHRoaXMpLCBDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcHVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IEVycm9yIG9wZW5pbmcgcG9wdXAgd2luZG93XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IG5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogU2V0dGluZyBVUkwgaW4gcG9wdXBcIik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9pZCA9IHBhcmFtcy5pZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lkKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3dbXCJwb3B1cENhbGxiYWNrX1wiICsgcGFyYW1zLmlkXSA9IHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLndpbmRvdy5sb2NhdGlvbiA9IHBhcmFtcy51cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jYWxsYmFjazogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIHBvcHVwIHdpbmRvd1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBfZXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgIExvZy5lcnJvcihcIlBvcHVwV2luZG93LmVycm9yOiBcIiwgbWVzc2FnZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9jbGVhbnVwKGtlZXBPcGVuKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2xlYW51cFwiKTtcclxuXHJcbiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZFRpbWVyKTtcclxuICAgICAgICB0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIgPSBudWxsO1xyXG5cclxuICAgICAgICBkZWxldGUgd2luZG93W1wicG9wdXBDYWxsYmFja19cIiArIHRoaXMuX2lkXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwICYmICFrZWVwT3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wb3B1cCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrRm9yUG9wdXBDbG9zZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb3B1cCB8fCB0aGlzLl9wb3B1cC5jbG9zZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cCB3aW5kb3cgY2xvc2VkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoa2VlcE9wZW4pO1xyXG5cclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrIHN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IHVybCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrOiBJbnZhbGlkIHJlc3BvbnNlIGZyb20gcG9wdXBcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiSW52YWxpZCByZXNwb25zZSBmcm9tIHBvcHVwXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbm90aWZ5T3BlbmVyKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikge1xyXG4gICAgICAgIGlmICh3aW5kb3cub3BlbmVyKSB7XHJcbiAgICAgICAgICAgIHVybCA9IHVybCB8fCB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQodXJsLCBkZWxpbWl0ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBcInBvcHVwQ2FsbGJhY2tfXCIgKyBkYXRhLnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHdpbmRvdy5vcGVuZXJbbmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogcGFzc2luZyB1cmwgbWVzc2FnZSB0byBvcGVuZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVybCwga2VlcE9wZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXI6IG5vIG1hdGNoaW5nIGNhbGxiYWNrIGZvdW5kIG9uIG9wZW5lclwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gc3RhdGUgZm91bmQgaW4gcmVzcG9uc2UgdXJsXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gd2luZG93Lm9wZW5lci4gQ2FuJ3QgY29tcGxldGUgbm90aWZpY2F0aW9uLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlZGlyZWN0TmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVkaXJlY3ROYXZpZ2F0b3IubmF2aWdhdGU6IE5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFyYW1zLnVzZVJlcGxhY2VUb05hdmlnYXRlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHBhcmFtcy51cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXJsKCkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgVXNlckluZm9TZXJ2aWNlIH0gZnJvbSAnLi9Vc2VySW5mb1NlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vVG9rZW5DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9FcnJvclJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuXHJcbmNvbnN0IFByb3RvY29sQ2xhaW1zID0gW1wibm9uY2VcIiwgXCJhdF9oYXNoXCIsIFwiaWF0XCIsIFwibmJmXCIsIFwiZXhwXCIsIFwiYXVkXCIsIFwiaXNzXCIsIFwiY19oYXNoXCJdO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlc3BvbnNlVmFsaWRhdG9yIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICBVc2VySW5mb1NlcnZpY2VDdG9yID0gVXNlckluZm9TZXJ2aWNlLCBcclxuICAgICAgICBqb3NlVXRpbCA9IEpvc2VVdGlsLFxyXG4gICAgICAgIFRva2VuQ2xpZW50Q3RvciA9IFRva2VuQ2xpZW50KSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5jdG9yOiBObyBzZXR0aW5ncyBwYXNzZWQgdG8gUmVzcG9uc2VWYWxpZGF0b3JcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fdXNlckluZm9TZXJ2aWNlID0gbmV3IFVzZXJJbmZvU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICAgICAgdGhpcy5fdG9rZW5DbGllbnQgPSBuZXcgVG9rZW5DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzU2lnbmluUGFyYW1zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IHN0YXRlIHByb2Nlc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlVG9rZW5zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlOiB0b2tlbnMgdmFsaWRhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NDbGFpbXMocmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IGNsYWltcyBwcm9jZXNzZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlU2lnbm91dFJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChzdGF0ZS5pZCAhPT0gcmVzcG9uc2Uuc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IFN0YXRlIGRvZXMgbm90IG1hdGNoXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiU3RhdGUgZG9lcyBub3QgbWF0Y2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbm93IHRoYXQgd2Uga25vdyB0aGUgc3RhdGUgbWF0Y2hlcywgdGFrZSB0aGUgc3RvcmVkIGRhdGFcclxuICAgICAgICAvLyBhbmQgc2V0IGl0IGludG8gdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIGdldCB0aGVpciBzdGF0ZVxyXG4gICAgICAgIC8vIHRoaXMgaXMgaW1wb3J0YW50IGZvciBib3RoIHN1Y2Nlc3MgJiBlcnJvciBvdXRjb21lc1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBzdGF0ZSB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSBzdGF0ZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcclxuICAgICAgICAgICAgTG9nLndhcm4oXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogUmVzcG9uc2Ugd2FzIGVycm9yXCIsIHJlc3BvbnNlLmVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc1NpZ25pblBhcmFtcyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoc3RhdGUuaWQgIT09IHJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlN0YXRlIGRvZXMgbm90IG1hdGNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBObyBjbGllbnRfaWQgb24gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBjbGllbnRfaWQgb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vIGF1dGhvcml0eSBvbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF1dGhvcml0eSBvbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzIGFsbG93cyB0aGUgYXV0aG9yaXR5IHRvIGJlIGxvYWRlZCBmcm9tIHRoZSBzaWduaW4gc3RhdGVcclxuICAgICAgICBpZiAoIXRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgPSBzdGF0ZS5hdXRob3JpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVuc3VyZSB3ZSdyZSB1c2luZyB0aGUgY29ycmVjdCBhdXRob3JpdHkgaWYgdGhlIGF1dGhvcml0eSBpcyBub3QgbG9hZGVkIGZyb20gc2lnbmluIHN0YXRlXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ICYmIHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSAhPT0gc3RhdGUuYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBhdXRob3JpdHkgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1dGhvcml0eSBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcyBhbGxvd3MgdGhlIGNsaWVudF9pZCB0byBiZSBsb2FkZWQgZnJvbSB0aGUgc2lnbmluIHN0YXRlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkID0gc3RhdGUuY2xpZW50X2lkO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbnN1cmUgd2UncmUgdXNpbmcgdGhlIGNvcnJlY3QgY2xpZW50X2lkIGlmIHRoZSBjbGllbnRfaWQgaXMgbm90IGxvYWRlZCBmcm9tIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCAmJiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgIT09IHN0YXRlLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogY2xpZW50X2lkIG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJjbGllbnRfaWQgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IHRoZSBzdGF0ZSBtYXRjaGVzLCB0YWtlIHRoZSBzdG9yZWQgZGF0YVxyXG4gICAgICAgIC8vIGFuZCBzZXQgaXQgaW50byB0aGUgcmVzcG9uc2Ugc28gY2FsbGVycyBjYW4gZ2V0IHRoZWlyIHN0YXRlXHJcbiAgICAgICAgLy8gdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGJvdGggc3VjY2VzcyAmIGVycm9yIG91dGNvbWVzXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IHN0YXRlIHZhbGlkYXRlZFwiKTtcclxuICAgICAgICByZXNwb25zZS5zdGF0ZSA9IHN0YXRlLmRhdGE7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBSZXNwb25zZSB3YXMgZXJyb3JcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5ub25jZSAmJiAhcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IEV4cGVjdGluZyBpZF90b2tlbiBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUubm9uY2UgJiYgcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vdCBleHBlY3RpbmcgaWRfdG9rZW4gaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5jb2RlX3ZlcmlmaWVyICYmICFyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBFeHBlY3RpbmcgY29kZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGNvZGUgaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5jb2RlX3ZlcmlmaWVyICYmIHJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vdCBleHBlY3RpbmcgY29kZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgY29kZSBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc0NsYWltcyhyZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5pc09wZW5JZENvbm5lY3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIE9JREMsIHByb2Nlc3NpbmcgY2xhaW1zXCIpO1xyXG5cclxuICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLmxvYWRVc2VySW5mbyAmJiByZXNwb25zZS5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiBsb2FkaW5nIHVzZXIgaW5mb1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlckluZm9TZXJ2aWNlLmdldENsYWltcyhyZXNwb25zZS5hY2Nlc3NfdG9rZW4pLnRoZW4oY2xhaW1zID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogdXNlciBpbmZvIGNsYWltcyByZWNlaXZlZCBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsYWltcy5zdWIgIT09IHJlc3BvbnNlLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiBzdWIgZnJvbSB1c2VyIGluZm8gZW5kcG9pbnQgZG9lcyBub3QgbWF0Y2ggc3ViIGluIGFjY2Vzc190b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gYWNjZXNzX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSB0aGlzLl9tZXJnZUNsYWltcyhyZXNwb25zZS5wcm9maWxlLCBjbGFpbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiB1c2VyIGluZm8gY2xhaW1zIHJlY2VpdmVkLCB1cGRhdGVkIHByb2ZpbGU6XCIsIHJlc3BvbnNlLnByb2ZpbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiBub3QgbG9hZGluZyB1c2VyIGluZm9cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiByZXNwb25zZSBpcyBub3QgT0lEQywgbm90IHByb2Nlc3NpbmcgY2xhaW1zXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX21lcmdlQ2xhaW1zKGNsYWltczEsIGNsYWltczIpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgY2xhaW1zMSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IG5hbWUgaW4gY2xhaW1zMikge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWVzID0gY2xhaW1zMltuYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IFt2YWx1ZXNdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0W25hbWVdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbbmFtZV0uaW5kZXhPZih2YWx1ZSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXS5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRbbmFtZV0gIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gdGhpcy5fbWVyZ2VDbGFpbXMocmVzdWx0W25hbWVdLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gW3Jlc3VsdFtuYW1lXSwgdmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBfZmlsdGVyUHJvdG9jb2xDbGFpbXMoY2xhaW1zKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zLCBpbmNvbWluZyBjbGFpbXM6XCIsIGNsYWltcyk7XHJcblxyXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjbGFpbXMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MuX2ZpbHRlclByb3RvY29sQ2xhaW1zKSB7XHJcbiAgICAgICAgICAgIFByb3RvY29sQ2xhaW1zLmZvckVhY2godHlwZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W3R5cGVdO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltczogcHJvdG9jb2wgY2xhaW1zIGZpbHRlcmVkXCIsIHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXM6IHByb3RvY29sIGNsYWltcyBub3QgZmlsdGVyZWRcIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlVG9rZW5zKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBjb2RlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0NvZGUoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IFZhbGlkYXRpbmcgaWRfdG9rZW4gYW5kIGFjY2Vzc190b2tlblwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW5BbmRBY2Nlc3NUb2tlbihzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IFZhbGlkYXRpbmcgaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW4oc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogTm8gY29kZSB0byBwcm9jZXNzIG9yIGlkX3Rva2VuIHRvIHZhbGlkYXRlXCIpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzQ29kZShzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICB2YXIgcmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgY2xpZW50X2lkOiBzdGF0ZS5jbGllbnRfaWQsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQsXHJcbiAgICAgICAgICAgIGNvZGUgOiByZXNwb25zZS5jb2RlLFxyXG4gICAgICAgICAgICByZWRpcmVjdF91cmk6IHN0YXRlLnJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgY29kZV92ZXJpZmllcjogc3RhdGUuY29kZV92ZXJpZmllcixcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbkNsaWVudC5leGNoYW5nZUNvZGUocmVxdWVzdCkudGhlbih0b2tlblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZvcih2YXIga2V5IGluIHRva2VuUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlW2tleV0gPSB0b2tlblJlc3BvbnNlW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDb2RlOiB0b2tlbiByZXNwb25zZSBzdWNjZXNzZnVsLCBwcm9jZXNzaW5nIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ29kZTogdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc2Z1bCwgcmV0dXJuaW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XHJcblxyXG4gICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSBzdGF0ZS5jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzOiBWYWxpZGFpbmcgSldUIGF0dHJpYnV0ZXM7IHVzaW5nIGNsb2NrIHNrZXcgKGluIHNlY29uZHMpIG9mOiBcIiwgY2xvY2tTa2V3SW5TZWNvbmRzKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dEF0dHJpYnV0ZXMocmVzcG9uc2UuaWRfdG9rZW4sIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcykudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubm9uY2UgJiYgc3RhdGUubm9uY2UgIT09IHBheWxvYWQubm9uY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzOiBObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSBwYXlsb2FkO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4oc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoIXN0YXRlLm5vbmNlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIG5vbmNlIG9uIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gbm9uY2Ugb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlc3BvbnNlLmlkX3Rva2VuKTtcclxuICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlciB8fCAhand0LnBheWxvYWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIsIGp3dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLm5vbmNlICE9PSBqd3QucGF5bG9hZC5ub25jZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIga2lkID0gand0LmhlYWRlci5raWQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCkudGhlbihpc3N1ZXIgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBSZWNlaXZlZCBpc3N1ZXJcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICgha2V5cykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGtleTtcclxuICAgICAgICAgICAgICAgIGlmICgha2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5cyA9IHRoaXMuX2ZpbHRlckJ5QWxnKGtleXMsIGp3dC5oZWFkZXIuYWxnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBraWQgaXMgbWFuZGF0b3J5IG9ubHkgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUga2V5cyBpbiB0aGUgcmVmZXJlbmNlZCBKV0sgU2V0IGRvY3VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1NpZ25pbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5c1swXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmtpZCA9PT0ga2lkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pWzBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHN0YXRlLmNsaWVudF9pZDtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY2xvY2tTa2V3SW5TZWNvbmRzID0gdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3O1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogVmFsaWRhaW5nIEpXVDsgdXNpbmcgY2xvY2sgc2tldyAoaW4gc2Vjb25kcykgb2Y6IFwiLCBjbG9ja1NrZXdJblNlY29uZHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dChyZXNwb25zZS5pZF90b2tlbiwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWp3dC5wYXlsb2FkLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSBqd3QucGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9maWx0ZXJCeUFsZyhrZXlzLCBhbGcpe1xyXG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xyXG4gICAgICAgIGlmIChhbGcuc3RhcnRzV2l0aChcIlJTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiUFNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIkVTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogYWxnIG5vdCBzdXBwb3J0ZWQ6IFwiLCBhbGcpO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyQnlBbGc6IExvb2tpbmcgZm9yIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHkpO1xyXG5cclxuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGtleS5rdHkgPT09IGt0eTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICByZXR1cm4ga2V5cztcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZSkge1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UucHJvZmlsZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogTm8gcHJvZmlsZSBsb2FkZWQgZnJvbSBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHByb2ZpbGUgbG9hZGVkIGZyb20gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIGF0X2hhc2ggaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBhdF9oYXNoIGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlc3BvbnNlLmlkX3Rva2VuKTtcclxuICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIsIGp3dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhhc2hBbGcgPSBqd3QuaGVhZGVyLmFsZztcclxuICAgICAgICBpZiAoIWhhc2hBbGcgfHwgaGFzaEFsZy5sZW5ndGggIT09IDUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhhc2hCaXRzID0gaGFzaEFsZy5zdWJzdHIoMiwgMyk7XHJcbiAgICAgICAgaWYgKCFoYXNoQml0cykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnLCBoYXNoQml0cyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaGFzaEJpdHMgPSBwYXJzZUludChoYXNoQml0cyk7XHJcbiAgICAgICAgaWYgKGhhc2hCaXRzICE9PSAyNTYgJiYgaGFzaEJpdHMgIT09IDM4NCAmJiBoYXNoQml0cyAhPT0gNTEyKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcsIGhhc2hCaXRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGFsZzogXCIgKyBoYXNoQWxnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2hhID0gXCJzaGFcIiArIGhhc2hCaXRzO1xyXG4gICAgICAgIHZhciBoYXNoID0gdGhpcy5fam9zZVV0aWwuaGFzaFN0cmluZyhyZXNwb25zZS5hY2Nlc3NfdG9rZW4sIHNoYSk7XHJcbiAgICAgICAgaWYgKCFoYXNoKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBhY2Nlc3NfdG9rZW4gaGFzaCBmYWlsZWQ6XCIsIHNoYSk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGVmdCA9IGhhc2guc3Vic3RyKDAsIGhhc2gubGVuZ3RoIC8gMik7XHJcbiAgICAgICAgdmFyIGxlZnRfYjY0dSA9IHRoaXMuX2pvc2VVdGlsLmhleFRvQmFzZTY0VXJsKGxlZnQpO1xyXG4gICAgICAgIGlmIChsZWZ0X2I2NHUgIT09IHJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIiwgbGVmdF9iNjR1LCByZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IHN1Y2Nlc3NcIik7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9DaGVja1Nlc3Npb25JRnJhbWUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlc3Npb25Nb25pdG9yIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlciwgQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciA9IENoZWNrU2Vzc2lvbklGcmFtZSkge1xyXG4gICAgICAgIGlmICghdXNlck1hbmFnZXIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IuY3RvcjogTm8gdXNlciBtYW5hZ2VyIHBhc3NlZCB0byBTZXNzaW9uTW9uaXRvclwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXNlck1hbmFnZXJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlciA9IHVzZXJNYW5hZ2VyO1xyXG4gICAgICAgIHRoaXMuX0NoZWNrU2Vzc2lvbklGcmFtZUN0b3IgPSBDaGVja1Nlc3Npb25JRnJhbWVDdG9yO1xyXG5cclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuYWRkVXNlckxvYWRlZCh0aGlzLl9zdGFydC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuYWRkVXNlclVubG9hZGVkKHRoaXMuX3N0b3AuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmdldFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAvLyBkb2luZyB0aGlzIG1hbnVhbGx5IGhlcmUgc2luY2UgY2FsbGluZyBnZXRVc2VyIFxyXG4gICAgICAgICAgICAvLyBkb2Vzbid0IHRyaWdnZXIgbG9hZCBldmVudC5cclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHVzZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY3RvclxyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvciBjdG9yOiBlcnJvciBmcm9tIGdldFVzZXI6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3NldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyTWFuYWdlci5zZXR0aW5ncztcclxuICAgIH1cclxuICAgIGdldCBfbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyTWFuYWdlci5tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcbiAgICBnZXQgX2NsaWVudF9pZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9jaGVja1Nlc3Npb25JbnRlcnZhbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3MuY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XHJcbiAgICB9XHJcbiAgICBnZXQgX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBfc3RhcnQodXNlcikge1xyXG4gICAgICAgIGxldCBzZXNzaW9uX3N0YXRlID0gdXNlci5zZXNzaW9uX3N0YXRlO1xyXG5cclxuICAgICAgICBpZiAoc2Vzc2lvbl9zdGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdWIgPSB1c2VyLnByb2ZpbGUuc3ViO1xyXG4gICAgICAgICAgICB0aGlzLl9zaWQgPSB1c2VyLnByb2ZpbGUuc2lkO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb25fc3RhdGUsIFwiLCBzdWI6XCIsIHRoaXMuX3N1Yik7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldENoZWNrU2Vzc2lvbklmcmFtZSgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdGFydDogSW5pdGlhbGl6aW5nIGNoZWNrIHNlc3Npb24gaWZyYW1lXCIpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2xpZW50X2lkID0gdGhpcy5fY2xpZW50X2lkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW50ZXJ2YWwgPSB0aGlzLl9jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0b3BPbkVycm9yID0gdGhpcy5fc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3I7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUgPSBuZXcgdGhpcy5fQ2hlY2tTZXNzaW9uSUZyYW1lQ3Rvcih0aGlzLl9jYWxsYmFjay5iaW5kKHRoaXMpLCBjbGllbnRfaWQsIHVybCwgaW50ZXJ2YWwsIHN0b3BPbkVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLmxvYWQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdGFydChzZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlNlc3Npb25Nb25pdG9yLl9zdGFydDogTm8gY2hlY2sgc2Vzc2lvbiBpZnJhbWUgZm91bmQgaW4gdGhlIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIG5vbi1wcm9taXNlIGNhbGxiYWNrXHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBFcnJvciBmcm9tIGdldENoZWNrU2Vzc2lvbklmcmFtZTpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RhcnQoc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3N0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5fc3ViID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9zaWQgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdG9wXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2soKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzKCkudGhlbihzZXNzaW9uID0+IHtcclxuICAgICAgICAgICAgdmFyIHJhaXNlVXNlclNpZ25lZE91dEV2ZW50ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgPT09IHRoaXMuX3N1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJhaXNlVXNlclNpZ25lZE91dEV2ZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnNpZCA9PT0gdGhpcy5fc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2FtZSBzdWIgc3RpbGwgbG9nZ2VkIGluIGF0IE9QLCByZXN0YXJ0aW5nIGNoZWNrIHNlc3Npb24gaWZyYW1lOyBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uLnNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTYW1lIHN1YiBzdGlsbCBsb2dnZWQgaW4gYXQgT1AsIHNlc3Npb24gc3RhdGUgaGFzIGNoYW5nZWQsIHJlc3RhcnRpbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWU7IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IERpZmZlcmVudCBzdWJqZWN0IHNpZ25lZCBpbnRvIE9QOlwiLCBzZXNzaW9uLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFN1YmplY3Qgbm8gbG9uZ2VyIHNpZ25lZCBpbnRvIE9QXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmFpc2VVc2VyU2lnbmVkT3V0RXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBvdXQgZXZlbnRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlVXNlclNpZ25lZE91dCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBFcnJvciBjYWxsaW5nIHF1ZXJ5Q3VycmVudFNpZ25pblNlc3Npb247IHJhaXNpbmcgc2lnbmVkIG91dCBldmVudFwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBVcmxVdGlsaXR5IH0gZnJvbSAnLi9VcmxVdGlsaXR5LmpzJztcclxuaW1wb3J0IHsgU2lnbmluU3RhdGUgfSBmcm9tICcuL1NpZ25pblN0YXRlLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTaWduaW5SZXF1ZXN0IHtcclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICAvLyBtYW5kYXRvcnlcclxuICAgICAgICB1cmwsIGNsaWVudF9pZCwgcmVkaXJlY3RfdXJpLCByZXNwb25zZV90eXBlLCBzY29wZSwgYXV0aG9yaXR5LFxyXG4gICAgICAgIC8vIG9wdGlvbmFsXHJcbiAgICAgICAgZGF0YSwgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50LCBhY3JfdmFsdWVzLCByZXNvdXJjZSwgcmVzcG9uc2VfbW9kZSxcclxuICAgICAgICByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlXHJcbiAgICB9KSB7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyB1cmwgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmxcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gY2xpZW50X2lkIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpZW50X2lkXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXJlZGlyZWN0X3VyaSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHJlZGlyZWN0X3VyaSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlZGlyZWN0X3VyaVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gcmVzcG9uc2VfdHlwZSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlc3BvbnNlX3R5cGVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2NvcGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyBzY29wZSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNjb3BlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIGF1dGhvcml0eSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImF1dGhvcml0eVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBvaWRjID0gU2lnbmluUmVxdWVzdC5pc09pZGMocmVzcG9uc2VfdHlwZSk7XHJcbiAgICAgICAgbGV0IGNvZGUgPSBTaWduaW5SZXF1ZXN0LmlzQ29kZShyZXNwb25zZV90eXBlKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZV9tb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlX21vZGUgPSBTaWduaW5SZXF1ZXN0LmlzQ29kZShyZXNwb25zZV90eXBlKSA/IFwicXVlcnlcIiA6IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFNpZ25pblN0YXRlKHsgbm9uY2U6IG9pZGMsIFxyXG4gICAgICAgICAgICBkYXRhLCBjbGllbnRfaWQsIGF1dGhvcml0eSwgcmVkaXJlY3RfdXJpLCBcclxuICAgICAgICAgICAgY29kZV92ZXJpZmllcjogY29kZSwgXHJcbiAgICAgICAgICAgIHJlcXVlc3RfdHlwZSwgcmVzcG9uc2VfbW9kZSB9KTtcclxuXHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjbGllbnRfaWRcIiwgY2xpZW50X2lkKTtcclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInJlZGlyZWN0X3VyaVwiLCByZWRpcmVjdF91cmkpO1xyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwicmVzcG9uc2VfdHlwZVwiLCByZXNwb25zZV90eXBlKTtcclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInNjb3BlXCIsIHNjb3BlKTtcclxuXHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzdGF0ZVwiLCB0aGlzLnN0YXRlLmlkKTtcclxuICAgICAgICBpZiAob2lkYykge1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcIm5vbmNlXCIsIHRoaXMuc3RhdGUubm9uY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29kZSkge1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcImNvZGVfY2hhbGxlbmdlXCIsIHRoaXMuc3RhdGUuY29kZV9jaGFsbGVuZ2UpO1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcImNvZGVfY2hhbGxlbmdlX21ldGhvZFwiLCBcIlMyNTZcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgb3B0aW9uYWwgPSB7IHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcywgcmVzb3VyY2UsIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCByZXNwb25zZV9tb2RlIH07XHJcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gb3B0aW9uYWwpe1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uYWxba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwga2V5LCBvcHRpb25hbFtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gZXh0cmFRdWVyeVBhcmFtcyl7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgZXh0cmFRdWVyeVBhcmFtc1trZXldKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzT2lkYyhyZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3BvbnNlX3R5cGUuc3BsaXQoL1xccysvZykuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwiaWRfdG9rZW5cIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNPQXV0aChyZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3BvbnNlX3R5cGUuc3BsaXQoL1xccysvZykuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwidG9rZW5cIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGlzQ29kZShyZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3BvbnNlX3R5cGUuc3BsaXQoL1xccysvZykuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwiY29kZVwiO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAhIShyZXN1bHRbMF0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuY29uc3QgT2lkY1Njb3BlID0gXCJvcGVuaWRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTaWduaW5SZXNwb25zZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGRlbGltaXRlciA9IFwiI1wiKSB7XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZXMgPSBVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQodXJsLCBkZWxpbWl0ZXIpO1xyXG5cclxuICAgICAgICB0aGlzLmVycm9yID0gdmFsdWVzLmVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSB2YWx1ZXMuZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSB2YWx1ZXMuZXJyb3JfdXJpO1xyXG5cclxuICAgICAgICB0aGlzLmNvZGUgPSB2YWx1ZXMuY29kZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gdmFsdWVzLnN0YXRlO1xyXG4gICAgICAgIHRoaXMuaWRfdG9rZW4gPSB2YWx1ZXMuaWRfdG9rZW47XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uX3N0YXRlID0gdmFsdWVzLnNlc3Npb25fc3RhdGU7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NfdG9rZW4gPSB2YWx1ZXMuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgIHRoaXMudG9rZW5fdHlwZSA9IHZhbHVlcy50b2tlbl90eXBlO1xyXG4gICAgICAgIHRoaXMuc2NvcGUgPSB2YWx1ZXMuc2NvcGU7XHJcbiAgICAgICAgdGhpcy5wcm9maWxlID0gdW5kZWZpbmVkOyAvLyB3aWxsIGJlIHNldCBmcm9tIFJlc3BvbnNlVmFsaWRhdG9yXHJcblxyXG4gICAgICAgIHRoaXMuZXhwaXJlc19pbiA9IHZhbHVlcy5leHBpcmVzX2luO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBleHBpcmVzX2luKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmV4cGlyZXNfYXQpIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwaXJlc19hdCAtIG5vdztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHNldCBleHBpcmVzX2luKHZhbHVlKXtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICBpZiAodHlwZW9mIGV4cGlyZXNfaW4gPT09ICdudW1iZXInICYmIGV4cGlyZXNfaW4gPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc19hdCA9IG5vdyArIGV4cGlyZXNfaW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBleHBpcmVkKCkge1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gdGhpcy5leHBpcmVzX2luO1xyXG4gICAgICAgIGlmIChleHBpcmVzX2luICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGV4cGlyZXNfaW4gPD0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2NvcGVzKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zY29wZSB8fCBcIlwiKS5zcGxpdChcIiBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzT3BlbklkQ29ubmVjdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY29wZXMuaW5kZXhPZihPaWRjU2NvcGUpID49IDAgfHwgISF0aGlzLmlkX3Rva2VuO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL1N0YXRlLmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuaW1wb3J0IHJhbmRvbSBmcm9tICcuL3JhbmRvbS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbmluU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7bm9uY2UsIGF1dGhvcml0eSwgY2xpZW50X2lkLCByZWRpcmVjdF91cmksIGNvZGVfdmVyaWZpZXIsIHJlc3BvbnNlX21vZGV9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihhcmd1bWVudHNbMF0pO1xyXG5cclxuICAgICAgICBpZiAobm9uY2UgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9uY2UgPSByYW5kb20oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm9uY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9uY2UgPSBub25jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb2RlX3ZlcmlmaWVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIC8vIHJhbmRvbSgpIHByb2R1Y2VzIDMyIGxlbmd0aFxyXG4gICAgICAgICAgICB0aGlzLl9jb2RlX3ZlcmlmaWVyID0gcmFuZG9tKCkgKyByYW5kb20oKSArIHJhbmRvbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjb2RlX3ZlcmlmaWVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvZGVfdmVyaWZpZXIgPSBjb2RlX3ZlcmlmaWVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5jb2RlX3ZlcmlmaWVyKSB7XHJcbiAgICAgICAgICAgIGxldCBoYXNoID0gSm9zZVV0aWwuaGFzaFN0cmluZyh0aGlzLmNvZGVfdmVyaWZpZXIsIFwiU0hBMjU2XCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlX2NoYWxsZW5nZSA9IEpvc2VVdGlsLmhleFRvQmFzZTY0VXJsKGhhc2gpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IGF1dGhvcml0eTtcclxuICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSBjbGllbnRfaWQ7XHJcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VfbW9kZSA9IHJlc3BvbnNlX21vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5vbmNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub25jZTtcclxuICAgIH1cclxuICAgIGdldCBhdXRob3JpdHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGhvcml0eTtcclxuICAgIH1cclxuICAgIGdldCBjbGllbnRfaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9pZDtcclxuICAgIH1cclxuICAgIGdldCByZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBjb2RlX3ZlcmlmaWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb2RlX3ZlcmlmaWVyO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNvZGVfY2hhbGxlbmdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb2RlX2NoYWxsZW5nZTtcclxuICAgIH1cclxuICAgIGdldCByZXNwb25zZV9tb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV9tb2RlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiB0aGlzLnJlcXVlc3RfdHlwZSxcclxuICAgICAgICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHRoaXMuY29kZV92ZXJpZmllcixcclxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLnJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiB0aGlzLmF1dGhvcml0eSxcclxuICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VfbW9kZTogdGhpcy5yZXNwb25zZV9tb2RlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWduaW5TdGF0ZShkYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXF1ZXN0IHtcclxuICAgIGNvbnN0cnVjdG9yKHt1cmwsIGlkX3Rva2VuX2hpbnQsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZGF0YSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25vdXRSZXF1ZXN0LmN0b3I6IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZF90b2tlbl9oaW50KSB7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiaWRfdG9rZW5faGludFwiLCBpZF90b2tlbl9oaW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIiwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFN0YXRlKHsgZGF0YSwgcmVxdWVzdF90eXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXNwb25zZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmwpIHtcclxuXHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIFwiP1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lsZW50UmVuZXdTZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyID0gdXNlck1hbmFnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFjayA9IHRoaXMuX3Rva2VuRXhwaXJpbmcuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcodGhpcy5fY2FsbGJhY2spO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRyaWdnZXIgbG9hZGluZyBvZiB0aGUgdXNlciBzbyB0aGUgZXhwaXJpbmcgZXZlbnRzIGNhbiBiZSBpbml0aWFsaXplZFxyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyPT57XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxpYmVyYXRlIG5vcFxyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnI9PntcclxuICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5zdGFydDogRXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMucmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyh0aGlzLl9jYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFjaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3Rva2VuRXhwaXJpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuc2lnbmluU2lsZW50KCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBTaWxlbnQgdG9rZW4gcmVuZXdhbCBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5fdG9rZW5FeHBpcmluZzogRXJyb3IgZnJvbSBzaWduaW5TaWxlbnQ6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtpZCwgZGF0YSwgY3JlYXRlZCwgcmVxdWVzdF90eXBlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5faWQgPSBpZCB8fCByYW5kb20oKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjcmVhdGVkID09PSAnbnVtYmVyJyAmJiBjcmVhdGVkID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVkID0gY3JlYXRlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWQgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3JlcXVlc3RfdHlwZSA9ICByZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcclxuICAgIH1cclxuICAgIGdldCBkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNyZWF0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVxdWVzdF90eXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdG9yYWdlU3RyaW5nKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLnRvU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICBjcmVhdGVkOiB0aGlzLmNyZWF0ZWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RfdHlwZTogdGhpcy5yZXF1ZXN0X3R5cGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgU3RhdGUoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNsZWFyU3RhbGVTdGF0ZShzdG9yYWdlLCBhZ2UpIHtcclxuXHJcbiAgICAgICAgdmFyIGN1dG9mZiA9IERhdGUubm93KCkgLyAxMDAwIC0gYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RvcmFnZS5nZXRBbGxLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiBnb3Qga2V5c1wiLCBrZXlzKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBzdG9yYWdlLmdldChrZXkpLnRoZW4oaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoaXRlbSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IGdvdCBpdGVtIGZyb20ga2V5OiBcIiwga2V5LCBzdGF0ZS5jcmVhdGVkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuY3JlYXRlZCA8PSBjdXRvZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IEVycm9yIHBhcnNpbmcgc3RhdGUgZm9yIGtleVwiLCBrZXksIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IG5vIGl0ZW0gaW4gc3RvcmFnZSBmb3Iga2V5OiBcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiByZW1vdmVkIGl0ZW0gZm9yIGtleTogXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yYWdlLnJlbW92ZShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogd2FpdGluZyBvbiBwcm9taXNlIGNvdW50OlwiLCBwcm9taXNlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuY29uc3QgVGltZXJEdXJhdGlvbiA9IDU7IC8vIHNlY29uZHNcclxuXHJcbmV4cG9ydCBjbGFzcyBUaW1lciBleHRlbmRzIEV2ZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0aW1lciA9IEdsb2JhbC50aW1lciwgbm93RnVuYyA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuX3RpbWVyID0gdGltZXI7XHJcblxyXG4gICAgICAgIGlmIChub3dGdW5jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vd0Z1bmMgPSBub3dGdW5jO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbm93RnVuYyA9ICgpID0+IERhdGUubm93KCkgLyAxMDAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm93KCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLl9ub3dGdW5jKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoZHVyYXRpb24pIHtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPD0gMCkge1xyXG4gICAgICAgICAgICBkdXJhdGlvbiA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uID0gcGFyc2VJbnQoZHVyYXRpb24pO1xyXG5cclxuICAgICAgICB2YXIgZXhwaXJhdGlvbiA9IHRoaXMubm93ICsgZHVyYXRpb247XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvbiA9PT0gZXhwaXJhdGlvbiAmJiB0aGlzLl90aW1lckhhbmRsZSkge1xyXG4gICAgICAgICAgICAvLyBubyBuZWVkIHRvIHJlaW5pdGlhbGl6ZSB0byBzYW1lIGV4cGlyYXRpb24sIHNvIGJhaWwgb3V0XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmluaXQgdGltZXIgXCIgKyB0aGlzLl9uYW1lICsgXCIgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24gc2luY2UgYWxyZWFkeSBpbml0aWFsaXplZCBmb3IgZXhwaXJhdGlvbjpcIiwgdGhpcy5leHBpcmF0aW9uKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuaW5pdCB0aW1lciBcIiArIHRoaXMuX25hbWUgKyBcIiBmb3IgZHVyYXRpb246XCIsIGR1cmF0aW9uKTtcclxuICAgICAgICB0aGlzLl9leHBpcmF0aW9uID0gZXhwaXJhdGlvbjtcclxuXHJcbiAgICAgICAgLy8gd2UncmUgdXNpbmcgYSBmYWlybHkgc2hvcnQgdGltZXIgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIGV4cGlyYXRpb24gaW4gdGhlXHJcbiAgICAgICAgLy8gY2FsbGJhY2sgdG8gaGFuZGxlIHNjZW5hcmlvcyB3aGVyZSB0aGUgYnJvd3NlciBkZXZpY2Ugc2xlZXBzLCBhbmQgdGhlblxyXG4gICAgICAgIC8vIHRoZSB0aW1lcnMgZW5kIHVwIGdldHRpbmcgZGVsYXllZC5cclxuICAgICAgICB2YXIgdGltZXJEdXJhdGlvbiA9IFRpbWVyRHVyYXRpb247XHJcbiAgICAgICAgaWYgKGR1cmF0aW9uIDwgdGltZXJEdXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aW1lckR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RpbWVySGFuZGxlID0gdGhpcy5fdGltZXIuc2V0SW50ZXJ2YWwodGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKSwgdGltZXJEdXJhdGlvbiAqIDEwMDApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgZXhwaXJhdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwaXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVySGFuZGxlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmNhbmNlbDogXCIsIHRoaXMuX25hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRoaXMuX3RpbWVySGFuZGxlKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2soKSB7XHJcbiAgICAgICAgdmFyIGRpZmYgPSB0aGlzLl9leHBpcmF0aW9uIC0gdGhpcy5ub3c7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FsbGJhY2s7IFwiICsgdGhpcy5fbmFtZSArIFwiIHRpbWVyIGV4cGlyZXMgaW46XCIsIGRpZmYpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwaXJhdGlvbiA8PSB0aGlzLm5vdykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICBzdXBlci5yYWlzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UsIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcigpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBleGNoYW5nZUNvZGUoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncy5ncmFudF90eXBlID0gYXJncy5ncmFudF90eXBlIHx8IFwiYXV0aG9yaXphdGlvbl9jb2RlXCI7XHJcbiAgICAgICAgYXJncy5jbGllbnRfaWQgPSBhcmdzLmNsaWVudF9pZCB8fCB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLl9zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcblxyXG4gICAgICAgIGlmICghYXJncy5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogTm8gY29kZSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNvZGUgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MucmVkaXJlY3RfdXJpKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogTm8gcmVkaXJlY3RfdXJpIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgcmVkaXJlY3RfdXJpIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNvZGVfdmVyaWZpZXIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjb2RlX3ZlcmlmaWVyIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY29kZV92ZXJpZmllciBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjbGllbnRfaWQgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjbGllbnRfaWQgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRUb2tlbkVuZHBvaW50KGZhbHNlKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogUmVjZWl2ZWQgdG9rZW4gZW5kcG9pbnRcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UucG9zdEZvcm0odXJsLCBhcmdzKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogcmVzcG9uc2UgcmVjZWl2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGV4Y2hhbmdlUmVmcmVzaFRva2VuKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MuZ3JhbnRfdHlwZSA9IGFyZ3MuZ3JhbnRfdHlwZSB8fCBcInJlZnJlc2hfdG9rZW5cIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLmNsaWVudF9zZWNyZXQgPSBhcmdzLmNsaWVudF9zZWNyZXQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLnJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IE5vIHJlZnJlc2hfdG9rZW4gcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWZyZXNoX3Rva2VuIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogTm8gY2xpZW50X2lkIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY2xpZW50X2lkIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0VG9rZW5FbmRwb2ludChmYWxzZSkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogUmVjZWl2ZWQgdG9rZW4gZW5kcG9pbnRcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UucG9zdEZvcm0odXJsLCBhcmdzKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiByZXNwb25zZSByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuXHJcbmNvbnN0IEFjY2Vzc1Rva2VuVHlwZUhpbnQgPSBcImFjY2Vzc190b2tlblwiO1xyXG5jb25zdCBSZWZyZXNoVG9rZW5UeXBlSGludCA9IFwicmVmcmVzaF90b2tlblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRva2VuUmV2b2NhdGlvbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgWE1MSHR0cFJlcXVlc3RDdG9yID0gR2xvYmFsLlhNTEh0dHBSZXF1ZXN0LCBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlblJldm9jYXRpb25DbGllbnQuY3RvcjogTm8gc2V0dGluZ3MgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNldHRpbmdzIHByb3ZpZGVkLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fWE1MSHR0cFJlcXVlc3RDdG9yID0gWE1MSHR0cFJlcXVlc3RDdG9yO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZva2UodG9rZW4sIHJlcXVpcmVkLCB0eXBlID0gXCJhY2Nlc3NfdG9rZW5cIikge1xyXG4gICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogTm8gdG9rZW4gcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHRva2VuIHByb3ZpZGVkLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlICE9PSBBY2Nlc3NUb2tlblR5cGVIaW50ICYmIHR5cGUgIT0gUmVmcmVzaFRva2VuVHlwZUhpbnQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogSW52YWxpZCB0b2tlbiB0eXBlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRva2VuIHR5cGUuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRSZXZvY2F0aW9uRW5kcG9pbnQoKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBSZXZvY2F0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmV2b2NhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG5vdCByZXF1aXJlZCwgc28gZG9uJ3QgZXJyb3IgYW5kIGp1c3QgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IFJldm9raW5nIFwiICsgdHlwZSk7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnRfaWQgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnRfc2VjcmV0ID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZSh1cmwsIGNsaWVudF9pZCwgY2xpZW50X3NlY3JldCwgdG9rZW4sIHR5cGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2UodXJsLCBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHRva2VuLCB0eXBlKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgeGhyID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0Q3RvcigpO1xyXG4gICAgICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkLCBzdGF0dXNcIiwgeGhyLnN0YXR1cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcih4aHIuc3RhdHVzVGV4dCArIFwiIChcIiArIHhoci5zdGF0dXMgKyBcIilcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHsgXHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBOZXR3b3JrIEVycm9yLlwiKVxyXG4gICAgICAgICAgICAgICAgcmVqZWN0KFwiTmV0d29yayBFcnJvclwiKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHZhciBib2R5ID0gXCJjbGllbnRfaWQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50X2lkKTtcclxuICAgICAgICAgICAgaWYgKGNsaWVudF9zZWNyZXQpIHtcclxuICAgICAgICAgICAgICAgIGJvZHkgKz0gXCImY2xpZW50X3NlY3JldD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChjbGllbnRfc2VjcmV0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBib2R5ICs9IFwiJnRva2VuX3R5cGVfaGludD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0eXBlKTtcclxuICAgICAgICAgICAgYm9keSArPSBcIiZ0b2tlbj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0b2tlbik7XHJcblxyXG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcclxuICAgICAgICAgICAgeGhyLnNlbmQoYm9keSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXJsVXRpbGl0eSB7XHJcbiAgICBzdGF0aWMgYWRkUXVlcnlQYXJhbSh1cmwsIG5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPCAwKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBcIj9cIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1cmxbdXJsLmxlbmd0aCAtIDFdICE9PSBcIj9cIikge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCImXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB1cmwgKz0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xyXG4gICAgICAgIHVybCArPSBcIj1cIjtcclxuICAgICAgICB1cmwgKz0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHVybDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcGFyc2VVcmxGcmFnbWVudCh2YWx1ZSwgZGVsaW1pdGVyID0gXCIjXCIsIGdsb2JhbCA9IEdsb2JhbCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKXtcclxuICAgICAgICAgICAgdmFsdWUgPSBnbG9iYWwubG9jYXRpb24uaHJlZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpZHggPSB2YWx1ZS5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cihpZHggKyAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZWxpbWl0ZXIgPT09IFwiP1wiKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGRvaW5nIHF1ZXJ5LCB0aGVuIHN0cmlwIG9mZiBoYXNoIGZyYWdtZW50IGJlZm9yZSB3ZSBwYXJzZVxyXG4gICAgICAgICAgICBpZHggPSB2YWx1ZS5pbmRleE9mKCcjJyk7XHJcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIoMCwgaWR4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHBhcmFtcyA9IHt9LFxyXG4gICAgICAgICAgICByZWdleCA9IC8oW14mPV0rKT0oW14mXSopL2csXHJcbiAgICAgICAgICAgIG07XHJcblxyXG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcclxuICAgICAgICB3aGlsZSAobSA9IHJlZ2V4LmV4ZWModmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQobVsxXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KG1bMl0pO1xyXG4gICAgICAgICAgICBpZiAoY291bnRlcisrID4gNTApIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudDogcmVzcG9uc2UgZXhjZWVkZWQgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnNcIiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJSZXNwb25zZSBleGNlZWRlZCBleHBlY3RlZCBudW1iZXIgb2YgcGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBwcm9wIGluIHBhcmFtcykge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKHtpZF90b2tlbiwgc2Vzc2lvbl9zdGF0ZSwgYWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCB0b2tlbl90eXBlLCBzY29wZSwgcHJvZmlsZSwgZXhwaXJlc19hdCwgc3RhdGV9KSB7XHJcbiAgICAgICAgdGhpcy5pZF90b2tlbiA9IGlkX3Rva2VuO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHNlc3Npb25fc3RhdGU7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NfdG9rZW4gPSBhY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoX3Rva2VuID0gcmVmcmVzaF90b2tlbjtcclxuICAgICAgICB0aGlzLnRva2VuX3R5cGUgPSB0b2tlbl90eXBlO1xyXG4gICAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcclxuICAgICAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlO1xyXG4gICAgICAgIHRoaXMuZXhwaXJlc19hdCA9IGV4cGlyZXNfYXQ7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBleHBpcmVzX2luKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmV4cGlyZXNfYXQpIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwaXJlc19hdCAtIG5vdztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHNldCBleHBpcmVzX2luKHZhbHVlKSB7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBleHBpcmVzX2luID09PSAnbnVtYmVyJyAmJiBleHBpcmVzX2luID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBub3cgKyBleHBpcmVzX2luO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlZCgpIHtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHRoaXMuZXhwaXJlc19pbjtcclxuICAgICAgICBpZiAoZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBpcmVzX2luIDw9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjb3BlcygpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2NvcGUgfHwgXCJcIikuc3BsaXQoXCIgXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvU3RvcmFnZVN0cmluZygpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyLnRvU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBpZF90b2tlbjogdGhpcy5pZF90b2tlbixcclxuICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogdGhpcy5zZXNzaW9uX3N0YXRlLFxyXG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46IHRoaXMuYWNjZXNzX3Rva2VuLFxyXG4gICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0aGlzLnJlZnJlc2hfdG9rZW4sXHJcbiAgICAgICAgICAgIHRva2VuX3R5cGU6IHRoaXMudG9rZW5fdHlwZSxcclxuICAgICAgICAgICAgc2NvcGU6IHRoaXMuc2NvcGUsXHJcbiAgICAgICAgICAgIHByb2ZpbGU6IHRoaXMucHJvZmlsZSxcclxuICAgICAgICAgICAgZXhwaXJlc19hdDogdGhpcy5leHBpcmVzX2F0XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgVXNlcihKU09OLnBhcnNlKHN0b3JhZ2VTdHJpbmcpKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VySW5mb1NlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgc2V0dGluZ3MsIFxyXG4gICAgICAgIEpzb25TZXJ2aWNlQ3RvciA9IEpzb25TZXJ2aWNlLCBcclxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLCBcclxuICAgICAgICBqb3NlVXRpbCA9IEpvc2VVdGlsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5jdG9yOiBObyBzZXR0aW5ncyBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLl9qc29uU2VydmljZSA9IG5ldyBKc29uU2VydmljZUN0b3IodW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMuX2dldENsYWltc0Zyb21Kd3QuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2xhaW1zKHRva2VuKSB7XHJcbiAgICAgICAgaWYgKCF0b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zOiBObyB0b2tlbiBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIHRva2VuIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0VXNlckluZm9FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogcmVjZWl2ZWQgdXNlcmluZm8gdXJsXCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UuZ2V0SnNvbih1cmwsIHRva2VuKS50aGVuKGNsYWltcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zOiBjbGFpbXMgcmVjZWl2ZWRcIiwgY2xhaW1zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjbGFpbXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9nZXRDbGFpbXNGcm9tSnd0KHJlcSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBqd3QgPSB0aGlzLl9qb3NlVXRpbC5wYXJzZUp3dChyZXEucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgaWYgKCFqd3QgfHwgIWp3dC5oZWFkZXIgfHwgIWp3dC5wYXlsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IEZhaWxlZCB0byBwYXJzZSBKV1RcIiwgand0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIga2lkID0gand0LmhlYWRlci5raWQ7XHJcblxyXG4gICAgICAgICAgICBsZXQgaXNzdWVyUHJvbWlzZTtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9zZXR0aW5ncy51c2VySW5mb0p3dElzc3Vlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnT1AnOlxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdBTlknOlxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoand0LnBheWxvYWQuaXNzKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVyUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzLl9zZXR0aW5ncy51c2VySW5mb0p3dElzc3Vlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBpc3N1ZXJQcm9taXNlLnRoZW4oaXNzdWVyID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogUmVjZWl2ZWQgaXNzdWVyOlwiICsgaXNzdWVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogUmVjZWl2ZWQgc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFraWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5cyA9IHRoaXMuX2ZpbHRlckJ5QWxnKGtleXMsIGp3dC5oZWFkZXIuYWxnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpZCBpcyBtYW5kYXRvcnkgb25seSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBrZXlzIGluIHRoZSByZWZlcmVuY2VkIEpXSyBTZXQgZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1NpZ25pbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmtpZCA9PT0ga2lkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVswXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNsb2NrU2tld0luU2Vjb25kcyA9IHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldztcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFZhbGlkYWluZyBKV1Q7IHVzaW5nIGNsb2NrIHNrZXcgKGluIHNlY29uZHMpIG9mOiBcIiwgY2xvY2tTa2V3SW5TZWNvbmRzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0KHJlcS5yZXNwb25zZVRleHQsIGtleSwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3SW5TZWNvbmRzLCB1bmRlZmluZWQsIHRydWUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IEpXVCB2YWxpZGF0aW9uIHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqd3QucGF5bG9hZDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IEVycm9yIHBhcnNpbmcgSldUIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZmlsdGVyQnlBbGcoa2V5cywgYWxnKSB7XHJcbiAgICAgICAgdmFyIGt0eSA9IG51bGw7XHJcbiAgICAgICAgaWYgKGFsZy5zdGFydHNXaXRoKFwiUlNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJSU0FcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJQU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIlBTXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiRVNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJFQ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogYWxnIG5vdCBzdXBwb3J0ZWQ6IFwiLCBhbGcpO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2ZpbHRlckJ5QWxnOiBMb29raW5nIGZvciBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5KTtcclxuXHJcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXkua3R5ID09PSBrdHk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IE51bWJlciBvZiBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5LCBrZXlzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIHJldHVybiBrZXlzO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudCB9IGZyb20gJy4vT2lkY0NsaWVudC5qcyc7XHJcbmltcG9ydCB7IFVzZXJNYW5hZ2VyU2V0dGluZ3MgfSBmcm9tICcuL1VzZXJNYW5hZ2VyU2V0dGluZ3MuanMnO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi9Vc2VyLmpzJztcclxuaW1wb3J0IHsgVXNlck1hbmFnZXJFdmVudHMgfSBmcm9tICcuL1VzZXJNYW5hZ2VyRXZlbnRzLmpzJztcclxuaW1wb3J0IHsgU2lsZW50UmVuZXdTZXJ2aWNlIH0gZnJvbSAnLi9TaWxlbnRSZW5ld1NlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBTZXNzaW9uTW9uaXRvciB9IGZyb20gJy4vU2Vzc2lvbk1vbml0b3IuanMnO1xyXG5pbXBvcnQgeyBUb2tlblJldm9jYXRpb25DbGllbnQgfSBmcm9tICcuL1Rva2VuUmV2b2NhdGlvbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IFRva2VuQ2xpZW50IH0gZnJvbSAnLi9Ub2tlbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyIGV4dGVuZHMgT2lkY0NsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncyA9IHt9LFxyXG4gICAgICAgIFNpbGVudFJlbmV3U2VydmljZUN0b3IgPSBTaWxlbnRSZW5ld1NlcnZpY2UsXHJcbiAgICAgICAgU2Vzc2lvbk1vbml0b3JDdG9yID0gU2Vzc2lvbk1vbml0b3IsXHJcbiAgICAgICAgVG9rZW5SZXZvY2F0aW9uQ2xpZW50Q3RvciA9IFRva2VuUmV2b2NhdGlvbkNsaWVudCxcclxuICAgICAgICBUb2tlbkNsaWVudEN0b3IgPSBUb2tlbkNsaWVudCxcclxuICAgICAgICBqb3NlVXRpbCA9IEpvc2VVdGlsXHJcbiAgICApIHtcclxuXHJcbiAgICAgICAgaWYgKCEoc2V0dGluZ3MgaW5zdGFuY2VvZiBVc2VyTWFuYWdlclNldHRpbmdzKSkge1xyXG4gICAgICAgICAgICBzZXR0aW5ncyA9IG5ldyBVc2VyTWFuYWdlclNldHRpbmdzKHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIoc2V0dGluZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLl9ldmVudHMgPSBuZXcgVXNlck1hbmFnZXJFdmVudHMoc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZSA9IG5ldyBTaWxlbnRSZW5ld1NlcnZpY2VDdG9yKHRoaXMpO1xyXG5cclxuICAgICAgICAvLyBvcmRlciBpcyBpbXBvcnRhbnQgZm9yIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczsgdGhlc2Ugc2VydmljZXMgZGVwZW5kIHVwb24gdGhlIGV2ZW50cy5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5hdXRvbWF0aWNTaWxlbnRSZW5ldykge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5jdG9yOiBhdXRvbWF0aWNTaWxlbnRSZW5ldyBpcyBjb25maWd1cmVkLCBzZXR0aW5nIHVwIHNpbGVudCByZW5ld1wiKTtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFNpbGVudFJlbmV3KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5tb25pdG9yU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5jdG9yOiBtb25pdG9yU2Vzc2lvbiBpcyBjb25maWd1cmVkLCBzZXR0aW5nIHVwIHNlc3Npb24gbW9uaXRvclwiKTtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbk1vbml0b3IgPSBuZXcgU2Vzc2lvbk1vbml0b3JDdG9yKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdG9rZW5SZXZvY2F0aW9uQ2xpZW50ID0gbmV3IFRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX3Rva2VuQ2xpZW50ID0gbmV3IFRva2VuQ2xpZW50Q3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3JlZGlyZWN0TmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnJlZGlyZWN0TmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9wb3B1cE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5wb3B1cE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfaWZyYW1lTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlmcmFtZU5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfdXNlclN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnVzZXJTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXZlbnRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5nZXRVc2VyOiB1c2VyIGxvYWRlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLmdldFVzZXI6IHVzZXIgbm90IGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKG51bGwpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnJlbW92ZVVzZXI6IHVzZXIgcmVtb3ZlZCBmcm9tIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cy51bmxvYWQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduaW5SZWRpcmVjdChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6clwiO1xyXG4gICAgICAgIGxldCBuYXZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLCBuYXZQYXJhbXMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25pblJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrOiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblJlZGlyZWN0Q2FsbGJhY2s6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluUG9wdXAoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnBcIjtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IE5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBzaWduaW5Qb3B1cCBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbmluUG9wdXBDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluQ2FsbGJhY2sodXJsLCB0aGlzLl9wb3B1cE5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXBDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pLmNhdGNoKGVycj0+e1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrIGVycm9yOiBcIiArIGVyciAmJiBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluU2lsZW50KGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzaTpzXCI7XHJcbiAgICAgICAgLy8gZmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYSByZWZyZXNoIHRva2VuLCBvciBuZWVkIHRvIHVzZSBpZnJhbWVcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLnJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGFyZ3MucmVmcmVzaF90b2tlbiA9IHVzZXIucmVmcmVzaF90b2tlbjtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VSZWZyZXNoVG9rZW4oYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhcmdzLmlkX3Rva2VuX2hpbnQgPSBhcmdzLmlkX3Rva2VuX2hpbnQgfHwgKHRoaXMuc2V0dGluZ3MuaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3ICYmIHVzZXIgJiYgdXNlci5pZF90b2tlbik7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlciAmJiB0aGlzLl9zZXR0aW5ncy52YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQsIHN1YmplY3QgcHJpb3IgdG8gc2lsZW50IHJlbmV3OiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJncy5jdXJyZW50X3N1YiA9IHVzZXIucHJvZmlsZS5zdWI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU2lsZW50SWZyYW1lKGFyZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3VzZVJlZnJlc2hUb2tlbihhcmdzID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW4oYXJncykudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3VzZVJlZnJlc2hUb2tlbjogTm8gcmVzcG9uc2UgcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIk5vIHJlc3BvbnNlIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiBObyBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIk5vIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRUb2tlblZhbGlkYXRpb24gPSBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkVG9rZW5WYWxpZGF0aW9uID0gdGhpcy5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuKHVzZXIucHJvZmlsZSwgcmVzdWx0LmlkX3Rva2VuKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZFRva2VuVmFsaWRhdGlvbi50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3VzZVJlZnJlc2hUb2tlbjogcmVmcmVzaCB0b2tlbiByZXNwb25zZSBzdWNjZXNzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmFjY2Vzc190b2tlbiA9IHJlc3VsdC5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIucmVmcmVzaF90b2tlbiA9IHJlc3VsdC5yZWZyZXNoX3Rva2VuIHx8IHVzZXIucmVmcmVzaF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5leHBpcmVzX2luID0gcmVzdWx0LmV4cGlyZXNfaW47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbihwcm9maWxlLCBpZF90b2tlbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCkudGhlbihpc3N1ZXIgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGlkX3Rva2VuLCBpc3N1ZXIsIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCwgdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3KS50aGVuKHBheWxvYWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogRmFpbGVkIHRvIHZhbGlkYXRlIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdmFsaWRhdGUgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuc3ViICE9PSBwcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IHN1YiBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBjdXJyZW50IHN1YlwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF1dGhfdGltZSAmJiBwYXlsb2FkLmF1dGhfdGltZSAhPT0gcHJvZmlsZS5hdXRoX3RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBhdXRoX3RpbWUgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXV0aF90aW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdXRoX3RpbWUgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXV0aF90aW1lXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gcHJvZmlsZS5henApIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBhenAgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXpwXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhenAgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXpwXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5henAgJiYgcHJvZmlsZS5henApIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBhenAgbm90IGluIGlkX3Rva2VuLCBidXQgcHJlc2VudCBpbiBvcmlnaW5hbCBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXpwIG5vdCBpbiBpZF90b2tlbiwgYnV0IHByZXNlbnQgaW4gb3JpZ2luYWwgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgX3NpZ25pblNpbGVudElmcmFtZShhcmdzID0ge30pIHtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MucHJvbXB0ID0gYXJncy5wcm9tcHQgfHwgXCJub25lXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5faWZyYW1lTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0OiBhcmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXRcclxuICAgICAgICB9KS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50OiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblNpbGVudENhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5DYWxsYmFjayh1cmwsIHRoaXMuX2lmcmFtZU5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50Q2FsbGJhY2s6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50Q2FsbGJhY2s6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluQ2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25pblJlc3BvbnNlU3RhdGUodXJsKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnJcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluUmVkaXJlY3RDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6cFwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5Qb3B1cENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpzXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblNpbGVudENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImludmFsaWQgcmVzcG9uc2VfdHlwZSBpbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbm91dENhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic286clwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic286cFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbm91dFBvcHVwQ2FsbGJhY2sodXJsLCBrZWVwT3Blbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZV90eXBlIGluIHN0YXRlXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVlcnlTZXNzaW9uU3RhdHVzKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzaTpzXCI7IC8vIHRoaXMgYWN0cyBsaWtlIGEgc2lnbmluIHNpbGVudFxyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnNpbGVudF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSB1cmw7XHJcbiAgICAgICAgYXJncy5wcm9tcHQgPSBcIm5vbmVcIjtcclxuICAgICAgICBhcmdzLnJlc3BvbnNlX3R5cGUgPSBhcmdzLnJlc3BvbnNlX3R5cGUgfHwgdGhpcy5zZXR0aW5ncy5xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcclxuICAgICAgICBhcmdzLnNjb3BlID0gXCJvcGVuaWRcIjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIHRoaXMuX2lmcmFtZU5hdmlnYXRvciwge1xyXG4gICAgICAgICAgICBzdGFydFVybDogdXJsLFxyXG4gICAgICAgICAgICBzaWxlbnRSZXF1ZXN0VGltZW91dDogYXJncy5zaWxlbnRSZXF1ZXN0VGltZW91dCB8fCB0aGlzLnNldHRpbmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0XHJcbiAgICAgICAgfSkudGhlbihuYXZSZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTaWduaW5SZXNwb25zZShuYXZSZXNwb25zZS51cmwpLnRoZW4oc2lnbmluUmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBnb3Qgc2lnbmluIHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzaWduaW5SZXNwb25zZS5zZXNzaW9uX3N0YXRlICYmIHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IHF1ZXJ5U2Vzc2lvblN0YXR1cyBzdWNjZXNzIGZvciBzdWI6IFwiLCAgc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IHNpZ25pblJlc3BvbnNlLnNlc3Npb25fc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yjogc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zaWRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJxdWVyeVNlc3Npb25TdGF0dXMgc3VjY2Vzc2Z1bCwgdXNlciBub3QgYXV0aGVudGljYXRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3NpZ25pbihhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zKS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZChuYXZSZXNwb25zZS51cmwsIGFyZ3MpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25pblN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5wcmVwYXJlKG5hdmlnYXRvclBhcmFtcykudGhlbihoYW5kbGUgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IGdvdCBuYXZpZ2F0b3Igd2luZG93IGhhbmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNpZ25pblJlcXVlc3QoYXJncykudGhlbihzaWduaW5SZXF1ZXN0ID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogZ290IHNpZ25pbiByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy51cmwgPSBzaWduaW5SZXF1ZXN0LnVybDtcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy5pZCA9IHNpZ25pblJlcXVlc3Quc3RhdGUuaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYXZpZ2F0ZShuYXZpZ2F0b3JQYXJhbXMpO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5jbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogRXJyb3IgYWZ0ZXIgcHJlcGFyaW5nIG5hdmlnYXRvciwgY2xvc2luZyBuYXZpZ2F0b3Igd2luZG93XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWduaW5FbmQodXJsLCBhcmdzID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsKS50aGVuKHNpZ25pblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogZ290IHNpZ25pbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGxldCB1c2VyID0gbmV3IFVzZXIoc2lnbmluUmVzcG9uc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFyZ3MuY3VycmVudF9zdWIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmN1cnJlbnRfc3ViICE9PSB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogY3VycmVudCB1c2VyIGRvZXMgbm90IG1hdGNoIHVzZXIgcmV0dXJuZWQgZnJvbSBzaWduaW4uIHN1YiBmcm9tIHNpZ25pbjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJsb2dpbl9yZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiBjdXJyZW50IHVzZXIgbWF0Y2hlcyB1c2VyIHJldHVybmVkIGZyb20gc2lnbmluXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiB1c2VyIHN0b3JlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbmluQ2FsbGJhY2sodXJsLCBuYXZpZ2F0b3IpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluQ2FsbGJhY2tcIik7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5jYWxsYmFjayh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25vdXRSZWRpcmVjdChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic286clwiO1xyXG4gICAgICAgIGxldCBwb3N0TG9nb3V0UmVkaXJlY3RVcmkgPSBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAocG9zdExvZ291dFJlZGlyZWN0VXJpKXtcclxuICAgICAgICAgICAgYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0TG9nb3V0UmVkaXJlY3RVcmk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0U3RhcnQoYXJncywgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UmVkaXJlY3Q6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzaWdub3V0UmVkaXJlY3RDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dEVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHJlc3BvbnNlPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2s6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWdub3V0UG9wdXAoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNvOnBcIjtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSB1cmw7XHJcbiAgICAgICAgYXJncy5kaXNwbGF5ID0gXCJwb3B1cFwiO1xyXG4gICAgICAgIGlmIChhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSl7XHJcbiAgICAgICAgICAgIC8vIHdlJ3JlIHB1dHRpbmcgYSBkdW1teSBlbnRyeSBpbiBoZXJlIGJlY2F1c2Ugd2VcclxuICAgICAgICAgICAgLy8gbmVlZCBhIHVuaXF1ZSBpZCBmcm9tIHRoZSBzdGF0ZSBmb3Igbm90aWZpY2F0aW9uXHJcbiAgICAgICAgICAgIC8vIHRvIHRoZSBwYXJlbnQgd2luZG93LCB3aGljaCBpcyBuZWNlc3NhcnkgaWYgd2VcclxuICAgICAgICAgICAgLy8gcGxhbiB0byByZXR1cm4gYmFjayB0byB0aGUgY2xpZW50IGFmdGVyIHNpZ25vdXRcclxuICAgICAgICAgICAgLy8gYW5kIHNvIHdlIGNhbiBjbG9zZSB0aGUgcG9wdXAgYWZ0ZXIgc2lnbm91dFxyXG4gICAgICAgICAgICBhcmdzLnN0YXRlID0gYXJncy5zdGF0ZSB8fCB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0KGFyZ3MsIHRoaXMuX3BvcHVwTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHBvcHVwV2luZG93RmVhdHVyZXM6IGFyZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93RmVhdHVyZXMsXHJcbiAgICAgICAgICAgIHBvcHVwV2luZG93VGFyZ2V0OiBhcmdzLnBvcHVwV2luZG93VGFyZ2V0IHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dUYXJnZXRcclxuICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UG9wdXA6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzaWdub3V0UG9wdXBDYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihrZWVwT3BlbikgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZih1cmwpID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAga2VlcE9wZW4gPSB1cmw7XHJcbiAgICAgICAgICAgIHVybCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGVsaW1pdGVyID0gJz8nO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cE5hdmlnYXRvci5jYWxsYmFjayh1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRQb3B1cENhbGxiYWNrOiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9zaWdub3V0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dFN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zKS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRFbmQobmF2UmVzcG9uc2UudXJsKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWdub3V0U3RhcnQoYXJncyA9IHt9LCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5wcmVwYXJlKG5hdmlnYXRvclBhcmFtcykudGhlbihoYW5kbGUgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBnb3QgbmF2aWdhdG9yIHdpbmRvdyBoYW5kbGVcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogbG9hZGVkIGN1cnJlbnQgdXNlciBmcm9tIHN0b3JhZ2VcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHJldm9rZVByb21pc2UgPSB0aGlzLl9zZXR0aW5ncy5yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA/IHRoaXMuX3Jldm9rZUludGVybmFsKHVzZXIpIDogUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2b2tlUHJvbWlzZS50aGVuKCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkX3Rva2VuID0gYXJncy5pZF90b2tlbl9oaW50IHx8IHVzZXIgJiYgdXNlci5pZF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogU2V0dGluZyBpZF90b2tlbiBpbnRvIHNpZ25vdXQgcmVxdWVzdFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5pZF90b2tlbl9oaW50ID0gaWRfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVVc2VyKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IHVzZXIgcmVtb3ZlZCwgY3JlYXRpbmcgc2lnbm91dCByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2lnbm91dFJlcXVlc3QoYXJncykudGhlbihzaWdub3V0UmVxdWVzdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBnb3Qgc2lnbm91dCByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy51cmwgPSBzaWdub3V0UmVxdWVzdC51cmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbm91dFJlcXVlc3Quc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMuaWQgPSBzaWdub3V0UmVxdWVzdC5zdGF0ZS5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUubmF2aWdhdGUobmF2aWdhdG9yUGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUuY2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBFcnJvciBhZnRlciBwcmVwYXJpbmcgbmF2aWdhdG9yLCBjbG9zaW5nIG5hdmlnYXRvciB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25vdXRFbmQodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25vdXRSZXNwb25zZSh1cmwpLnRoZW4oc2lnbm91dFJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRFbmQ6IGdvdCBzaWdub3V0IHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNpZ25vdXRSZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXZva2VBY2Nlc3NUb2tlbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlSW50ZXJuYWwodXNlciwgdHJ1ZSkudGhlbihzdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IHJlbW92aW5nIHRva2VuIHByb3BlcnRpZXMgZnJvbSB1c2VyIGFuZCByZS1zdG9yaW5nXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB1c2VyLmFjY2Vzc190b2tlbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci5yZWZyZXNoX3Rva2VuID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLmV4cGlyZXNfYXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIudG9rZW5fdHlwZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IHVzZXIgc3RvcmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkudGhlbigoKT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiBhY2Nlc3MgdG9rZW4gcmV2b2tlZCBzdWNjZXNzZnVsbHlcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZUludGVybmFsKHVzZXIsIHJlcXVpcmVkKSB7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgdmFyIGFjY2Vzc190b2tlbiA9IHVzZXIuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICB2YXIgcmVmcmVzaF90b2tlbiA9IHVzZXIucmVmcmVzaF90b2tlbjtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbkludGVybmFsKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbihhdFN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbChyZWZyZXNoX3Rva2VuLCByZXF1aXJlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocnRTdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXRTdWNjZXNzICYmICFydFN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogbm8gbmVlZCB0byByZXZva2UgZHVlIHRvIG5vIHRva2VuKHMpLCBvciBKV1QgZm9ybWF0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXRTdWNjZXNzIHx8IHJ0U3VjY2VzcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2VBY2Nlc3NUb2tlbkludGVybmFsKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpIHtcclxuICAgICAgICAvLyBjaGVjayBmb3IgSldUIHZzLiByZWZlcmVuY2UgdG9rZW5cclxuICAgICAgICBpZiAoIWFjY2Vzc190b2tlbiB8fCBhY2Nlc3NfdG9rZW4uaW5kZXhPZignLicpID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZShhY2Nlc3NfdG9rZW4sIHJlcXVpcmVkKS50aGVuKCgpID0+IHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbChyZWZyZXNoX3Rva2VuLCByZXF1aXJlZCkge1xyXG4gICAgICAgIGlmICghcmVmcmVzaF90b2tlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkLCBcInJlZnJlc2hfdG9rZW5cIikudGhlbigoKSA9PiB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydFNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZS5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BTaWxlbnRSZW5ldygpIHtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2Uuc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfdXNlclN0b3JlS2V5KCkge1xyXG4gICAgICAgIHJldHVybiBgdXNlcjoke3RoaXMuc2V0dGluZ3MuYXV0aG9yaXR5fToke3RoaXMuc2V0dGluZ3MuY2xpZW50X2lkfWA7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmUuZ2V0KHRoaXMuX3VzZXJTdG9yZUtleSkudGhlbihzdG9yYWdlU3RyaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9sb2FkVXNlcjogdXNlciBzdG9yYWdlU3RyaW5nIGxvYWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBVc2VyLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fbG9hZFVzZXI6IG5vIHVzZXIgc3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcmVVc2VyKHVzZXIpIHtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5zdG9yZVVzZXI6IHN0b3JpbmcgdXNlclwiKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzdG9yYWdlU3RyaW5nID0gdXNlci50b1N0b3JhZ2VTdHJpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5zZXQodGhpcy5fdXNlclN0b3JlS2V5LCBzdG9yYWdlU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcInN0b3JlVXNlci5zdG9yZVVzZXI6IHJlbW92aW5nIHVzZXJcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmUucmVtb3ZlKHRoaXMuX3VzZXJTdG9yZUtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgQWNjZXNzVG9rZW5FdmVudHMgfSBmcm9tICcuL0FjY2Vzc1Rva2VuRXZlbnRzLmpzJztcclxuaW1wb3J0IHsgRXZlbnQgfSBmcm9tICcuL0V2ZW50LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlckV2ZW50cyBleHRlbmRzIEFjY2Vzc1Rva2VuRXZlbnRzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncykge1xyXG4gICAgICAgIHN1cGVyKHNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl91c2VyTG9hZGVkID0gbmV3IEV2ZW50KFwiVXNlciBsb2FkZWRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkID0gbmV3IEV2ZW50KFwiVXNlciB1bmxvYWRlZFwiKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yID0gbmV3IEV2ZW50KFwiU2lsZW50IHJlbmV3IGVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQgPSBuZXcgRXZlbnQoXCJVc2VyIHNpZ25lZCBvdXRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkID0gbmV3IEV2ZW50KFwiVXNlciBzZXNzaW9uIGNoYW5nZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZCh1c2VyLCByYWlzZUV2ZW50PXRydWUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5sb2FkXCIpO1xyXG4gICAgICAgIHN1cGVyLmxvYWQodXNlcik7XHJcbiAgICAgICAgaWYgKHJhaXNlRXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXNlckxvYWRlZC5yYWlzZSh1c2VyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB1bmxvYWQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMudW5sb2FkXCIpO1xyXG4gICAgICAgIHN1cGVyLnVubG9hZCgpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJVbmxvYWRlZC5yYWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJMb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyTG9hZGVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlckxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclVubG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclVubG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFNpbGVudFJlbmV3RXJyb3IoY2IpIHtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlU2lsZW50UmVuZXdFcnJvcihjYikge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VTaWxlbnRSZW5ld0Vycm9yKGUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VTaWxlbnRSZW5ld0Vycm9yXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5yYWlzZShlKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyU2lnbmVkT3V0KGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJTaWduZWRPdXQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0LnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgX3JhaXNlVXNlclNpZ25lZE91dChlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlVXNlclNpZ25lZE91dFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0LnJhaXNlKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJTZXNzaW9uQ2hhbmdlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJTZXNzaW9uQ2hhbmdlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZChlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZC5yYWlzZShlKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vT2lkY0NsaWVudFNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgUmVkaXJlY3ROYXZpZ2F0b3IgfSBmcm9tICcuL1JlZGlyZWN0TmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgUG9wdXBOYXZpZ2F0b3IgfSBmcm9tICcuL1BvcHVwTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgSUZyYW1lTmF2aWdhdG9yIH0gZnJvbSAnLi9JRnJhbWVOYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblJlcXVlc3QgfSBmcm9tICcuL1NpZ25pblJlcXVlc3QuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gNjA7XHJcbmNvbnN0IERlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCA9IDIwMDA7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZXJTZXR0aW5ncyBleHRlbmRzIE9pZGNDbGllbnRTZXR0aW5ncyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgcG9wdXBfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBwb3B1cFdpbmRvd0ZlYXR1cmVzLFxyXG4gICAgICAgIHBvcHVwV2luZG93VGFyZ2V0LFxyXG4gICAgICAgIHNpbGVudF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgc2lsZW50UmVxdWVzdFRpbWVvdXQsXHJcbiAgICAgICAgYXV0b21hdGljU2lsZW50UmVuZXcgPSBmYWxzZSxcclxuICAgICAgICB2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcgPSBmYWxzZSxcclxuICAgICAgICBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgPSB0cnVlLFxyXG4gICAgICAgIG1vbml0b3JTZXNzaW9uID0gdHJ1ZSxcclxuICAgICAgICBjaGVja1Nlc3Npb25JbnRlcnZhbCA9IERlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCxcclxuICAgICAgICBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvciA9IHRydWUsXHJcbiAgICAgICAgcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUsXHJcbiAgICAgICAgcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPSBmYWxzZSxcclxuICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IERlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSxcclxuICAgICAgICByZWRpcmVjdE5hdmlnYXRvciA9IG5ldyBSZWRpcmVjdE5hdmlnYXRvcigpLFxyXG4gICAgICAgIHBvcHVwTmF2aWdhdG9yID0gbmV3IFBvcHVwTmF2aWdhdG9yKCksXHJcbiAgICAgICAgaWZyYW1lTmF2aWdhdG9yID0gbmV3IElGcmFtZU5hdmlnYXRvcigpLFxyXG4gICAgICAgIHVzZXJTdG9yZSA9IG5ldyBXZWJTdG9yYWdlU3RhdGVTdG9yZSh7IHN0b3JlOiBHbG9iYWwuc2Vzc2lvblN0b3JhZ2UgfSlcclxuICAgIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKGFyZ3VtZW50c1swXSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BvcHVwX3JlZGlyZWN0X3VyaSA9IHBvcHVwX3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBXaW5kb3dGZWF0dXJlcyA9IHBvcHVwV2luZG93RmVhdHVyZXM7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBXaW5kb3dUYXJnZXQgPSBwb3B1cFdpbmRvd1RhcmdldDtcclxuXHJcbiAgICAgICAgdGhpcy5fc2lsZW50X3JlZGlyZWN0X3VyaSA9IHNpbGVudF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVxdWVzdFRpbWVvdXQgPSBzaWxlbnRSZXF1ZXN0VGltZW91dDtcclxuICAgICAgICB0aGlzLl9hdXRvbWF0aWNTaWxlbnRSZW5ldyA9IGF1dG9tYXRpY1NpbGVudFJlbmV3O1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyA9IHZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldztcclxuICAgICAgICB0aGlzLl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgPSBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXc7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5fbW9uaXRvclNlc3Npb24gPSBtb25pdG9yU2Vzc2lvbjtcclxuICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JbnRlcnZhbCA9IGNoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgICAgIHRoaXMuX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yID0gc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3I7XHJcbiAgICAgICAgaWYgKHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlID0gcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGU7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHNbMF0gJiYgYXJndW1lbnRzWzBdLnJlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBTaWduaW5SZXF1ZXN0LmlzT2lkYyhhcmd1bWVudHNbMF0ucmVzcG9uc2VfdHlwZSkgPyBcImlkX3Rva2VuXCIgOiBcImNvZGVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlID0gXCJpZF90b2tlblwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA9IHJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0O1xyXG5cclxuICAgICAgICB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvciA9IHJlZGlyZWN0TmF2aWdhdG9yO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwTmF2aWdhdG9yID0gcG9wdXBOYXZpZ2F0b3I7XHJcbiAgICAgICAgdGhpcy5faWZyYW1lTmF2aWdhdG9yID0gaWZyYW1lTmF2aWdhdG9yO1xyXG5cclxuICAgICAgICB0aGlzLl91c2VyU3RvcmUgPSB1c2VyU3RvcmU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBvcHVwX3JlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBfcmVkaXJlY3RfdXJpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwV2luZG93RmVhdHVyZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwV2luZG93RmVhdHVyZXM7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBXaW5kb3dUYXJnZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwV2luZG93VGFyZ2V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaWxlbnRfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWxlbnRfcmVkaXJlY3RfdXJpO1xyXG4gICAgfVxyXG4gICAgIGdldCBzaWxlbnRSZXF1ZXN0VGltZW91dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lsZW50UmVxdWVzdFRpbWVvdXQ7XHJcbiAgICB9XHJcbiAgICBnZXQgYXV0b21hdGljU2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9tYXRpY1NpbGVudFJlbmV3O1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3O1xyXG4gICAgfVxyXG4gICAgZ2V0IGluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3O1xyXG4gICAgfVxyXG4gICAgZ2V0IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbW9uaXRvclNlc3Npb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vbml0b3JTZXNzaW9uO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNoZWNrU2Vzc2lvbkludGVydmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgIH1cclxuICAgIGdldCBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvcigpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuICAgIH1cclxuICAgIGdldCBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcclxuICAgIH1cclxuICAgIGdldCByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlZGlyZWN0TmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBwb3B1cE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgaWZyYW1lTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZnJhbWVOYXZpZ2F0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHVzZXJTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtwcmVmaXggPSBcIm9pZGMuXCIsIHN0b3JlID0gR2xvYmFsLmxvY2FsU3RvcmFnZX0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuX3N0b3JlID0gc3RvcmU7XHJcbiAgICAgICAgdGhpcy5fcHJlZml4ID0gcHJlZml4O1xyXG4gICAgfVxyXG5cclxuICAgIHNldChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUuc2V0XCIsIGtleSk7XHJcblxyXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RvcmUuc2V0SXRlbShrZXksIHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChrZXkpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5nZXRcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3N0b3JlLmdldEl0ZW0oa2V5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUoa2V5KSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUucmVtb3ZlXCIsIGtleSk7XHJcblxyXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl9zdG9yZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgdGhpcy5fc3RvcmUucmVtb3ZlSXRlbShrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbEtleXMoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUuZ2V0QWxsS2V5c1wiKTtcclxuXHJcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX3N0b3JlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBsZXQga2V5ID0gdGhpcy5fc3RvcmUua2V5KGluZGV4KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZih0aGlzLl9wcmVmaXgpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5LnN1YnN0cih0aGlzLl9wcmVmaXgubGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5cyk7XHJcbiAgICB9XHJcbn1cclxuIiwiLypcclxuQmFzZWQgb24gdGhlIHdvcmsgb2YgQXV0aDBcclxuaHR0cHM6Ly9naXRodWIuY29tL2F1dGgwL2lkdG9rZW4tdmVyaWZpZXJcclxuaHR0cHM6Ly9naXRodWIuY29tL2F1dGgwL2lkdG9rZW4tdmVyaWZpZXIvYmxvYi9tYXN0ZXIvTElDRU5TRVxyXG5XaGljaCBpcyBiYXNlZCBvbiB0aGUgd29yayBvZiBUb20gV3VcclxuaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG5odHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vTElDRU5TRVxyXG4qL1xyXG5cclxuLypcclxuICogVG8gc3VwcG9ydCBtb3N0IGJhc2ljIE9wZW5JZCB1c2UgY2FzZXMgKHVzaW5nIFJTQTI1NiksIHdlIGNhbiBnZXQgYXdheSB3aXRob3V0XHJcbiAqIHJlcXVpcmluZyB0aGUgZnVsbCBqcnNhc2lnbiBmZWF0dXJlIHNldCAoYW5kIHJlc3VsdGluZyBtYXNzaXZlIGJ1bmRsZSkuXHJcbiAqXHJcbiAqIC0gU3VwcG9ydCBSU0EgMjU2IGFsZ29yaXRobSAob3B0aW9uYWxseSBjb3VsZCBzdXBwb3J0IFJTQSogZmFtaWx5KVxyXG4gKiAtIFBhcnNlIEpXVCB0b2tlbnMgdXNpbmcgdGhlIChuKSBwYXJhbWV0ZXIuXHJcbiAqIC0gVmVyaWZ5IHNpZ25hdHVyZSBvZiBpZF90b2tlbnNcclxuICogLSBWZXJpZnkgYXRfaGFzaCBvZiBhY2Nlc3NfdG9rZW5zXHJcbiAqIC0gUGVyZm9ybSBjb21tb24gYmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRhc2tzLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEJpZ0ludGVnZXIgfSBmcm9tICdqc2JuJztcclxuaW1wb3J0IFNIQTI1NiBmcm9tICdjcnlwdG8tanMvc2hhMjU2JztcclxuaW1wb3J0IGJhc2U2NEpzIGZyb20gJ2Jhc2U2NC1qcyc7XHJcblxyXG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbnZhciBiNjRtYXAgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIjtcclxudmFyIGI2NHBhZCA9IFwiPVwiO1xyXG5cclxuY29uc3QgQmFzZTY0ID0ge1xyXG4gICAgYjY0dG9oZXgocykge1xyXG4gICAgICAgIHZhciByZXQgPSBcIlwiO1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBrID0gMDsgLy8gYjY0IHN0YXRlLCAwLTNcclxuICAgICAgICB2YXIgc2xvcDtcclxuICAgICAgICBmb3IoaSA9IDA7IGkgPCBzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIGlmKHMuY2hhckF0KGkpID09PSBiNjRwYWQpIGJyZWFrO1xyXG4gICAgICAgICAgICB2YXIgdiA9IGI2NG1hcC5pbmRleE9mKHMuY2hhckF0KGkpKTtcclxuICAgICAgICAgICAgaWYodiA8IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZihrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh2ID4+IDIpO1xyXG4gICAgICAgICAgICAgICAgc2xvcCA9IHYgJiAzO1xyXG4gICAgICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihrID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoc2xvcCA8PCAyKSB8ICh2ID4+IDQpKTtcclxuICAgICAgICAgICAgICAgIHNsb3AgPSB2ICYgMHhmO1xyXG4gICAgICAgICAgICAgICAgayA9IDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihrID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShzbG9wKTtcclxuICAgICAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHYgPj4gMik7XHJcbiAgICAgICAgICAgICAgICBzbG9wID0gdiAmIDM7XHJcbiAgICAgICAgICAgICAgICBrID0gMztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChzbG9wIDw8IDIpIHwgKHYgPj4gNCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodiAmIDB4Zik7XHJcbiAgICAgICAgICAgICAgICBrID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihrID09PSAxKVxyXG4gICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShzbG9wIDw8IDIpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9LFxyXG4gICAgaGV4VG9CYXNlNjQoaCkge1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBjO1xyXG4gICAgICAgIHZhciByZXQgPSBcIlwiO1xyXG4gICAgICAgIGZvcihpID0gMDsgaSszIDw9IGgubGVuZ3RoOyBpKz0zKSB7XHJcbiAgICAgICAgICAgIGMgPSBwYXJzZUludChoLnN1YnN0cmluZyhpLGkrMyksMTYpO1xyXG4gICAgICAgICAgICByZXQgKz0gYjY0bWFwLmNoYXJBdChjID4+IDYpICsgYjY0bWFwLmNoYXJBdChjICYgNjMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpKzEgPT09IGgubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGMgPSBwYXJzZUludChoLnN1YnN0cmluZyhpLGkrMSksMTYpO1xyXG4gICAgICAgICAgICByZXQgKz0gYjY0bWFwLmNoYXJBdChjIDw8IDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGkrMiA9PT0gaC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGguc3Vic3RyaW5nKGksaSsyKSwxNik7XHJcbiAgICAgICAgICAgIHJldCArPSBiNjRtYXAuY2hhckF0KGMgPj4gMikgKyBiNjRtYXAuY2hhckF0KChjICYgMykgPDwgNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChiNjRwYWQpIHdoaWxlKChyZXQubGVuZ3RoICYgMykgPiAwKSByZXQgKz0gYjY0cGFkO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhZGRpbmcoc3RyKSB7XHJcbiAgICAgICAgdmFyIG1vZCA9IChzdHIubGVuZ3RoICUgNCk7XHJcbiAgICAgICAgdmFyIHBhZCA9IDQgLSBtb2Q7XHJcblxyXG4gICAgICAgIGlmIChtb2QgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdHIgKyAobmV3IEFycmF5KDEgKyBwYWQpKS5qb2luKCc9Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGJ5dGVBcnJheVRvSGV4KHJhdykge1xyXG4gICAgICAgIHZhciBIRVggPSAnJztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIF9oZXggPSByYXdbaV0udG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICBIRVggKz0gKF9oZXgubGVuZ3RoID09PSAyID8gX2hleCA6ICcwJyArIF9oZXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIEhFWDtcclxuICAgIH0sXHJcblxyXG4gICAgZGVjb2RlVG9IRVgoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIEJhc2U2NC5ieXRlQXJyYXlUb0hleChiYXNlNjRKcy50b0J5dGVBcnJheShCYXNlNjQucGFkZGluZyhzdHIpKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGJhc2U2NFRvQmFzZTY0VXJsKHMpIHtcclxuICAgICAgICBzID0gcy5yZXBsYWNlKC89L2csIFwiXCIpO1xyXG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL1xcKy9nLCBcIi1cIik7XHJcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXFwvL2csIFwiX1wiKTtcclxuICAgICAgICByZXR1cm4gcztcclxuICAgIH0sXHJcblxyXG4gICAgdXJsRGVjb2RlKHN0cikge1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8tL2csICcrJykgLy8gQ29udmVydCAnLScgdG8gJysnXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9fL2csICcvJykgLy8gQ29udmVydCAnXycgdG8gJy8nXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJyAnKTsgLy8gQ29udmVydCAnXFxzJyB0byAnICdcclxuXHJcbiAgICAgICAgcmV0dXJuIGF0b2Ioc3RyKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG52YXIgRGlnZXN0SW5mb0hlYWQgPSB7XHJcbiAgICBzaGExOiAnMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0JyxcclxuICAgIHNoYTIyNDogJzMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjJyxcclxuICAgIHNoYTI1NjogJzMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwJyxcclxuICAgIHNoYTM4NDogJzMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwJyxcclxuICAgIHNoYTUxMjogJzMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwJyxcclxuICAgIG1kMjogJzMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDIwNTAwMDQxMCcsXHJcbiAgICBtZDU6ICczMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAnLFxyXG4gICAgcmlwZW1kMTYwOiAnMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0J1xyXG59O1xyXG5cclxudmFyIERpZ2VzdEFsZ3MgPSB7XHJcbiAgICBzaGEyNTY6IFNIQTI1NixcclxuICAgIFNIQTI1NjpTSEEyNTZcclxufTtcclxuXHJcbmZ1bmN0aW9uIFJTQVZlcmlmaWVyKG1vZHVsdXMsIGV4cCkge1xyXG4gICAgdGhpcy5uID0gbnVsbDtcclxuICAgIHRoaXMuZSA9IDA7XHJcblxyXG4gICAgaWYgKG1vZHVsdXMgIT0gbnVsbCAmJiBleHAgIT0gbnVsbCAmJiBtb2R1bHVzLmxlbmd0aCA+IDAgJiYgZXhwLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLm4gPSBuZXcgQmlnSW50ZWdlcihtb2R1bHVzLCAxNik7XHJcbiAgICAgICAgdGhpcy5lID0gcGFyc2VJbnQoZXhwLCAxNik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgZGF0YScpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRBbGdvcml0aG1Gcm9tRGlnZXN0KGhEaWdlc3RJbmZvKSB7XHJcbiAgICBmb3IgKHZhciBhbGdOYW1lIGluIERpZ2VzdEluZm9IZWFkKSB7XHJcbiAgICAgICAgdmFyIGhlYWQgPSBEaWdlc3RJbmZvSGVhZFthbGdOYW1lXTtcclxuICAgICAgICB2YXIgbGVuID0gaGVhZC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmIChoRGlnZXN0SW5mby5zdWJzdHJpbmcoMCwgbGVuKSA9PT0gaGVhZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYWxnOiBhbGdOYW1lLFxyXG4gICAgICAgICAgICAgICAgaGFzaDogaERpZ2VzdEluZm8uc3Vic3RyaW5nKGxlbilcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbn1cclxuXHJcblxyXG5SU0FWZXJpZmllci5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gKG1zZywgZW5jc2lnKSB7XHJcbiAgICBlbmNzaWcgPSBCYXNlNjQuZGVjb2RlVG9IRVgoZW5jc2lnKTtcclxuICAgIGVuY3NpZyA9IGVuY3NpZy5yZXBsYWNlKC9bXjAtOWEtZl18W1xcc1xcbl1dL2lnLCAnJyk7XHJcblxyXG4gICAgdmFyIHNpZyA9IG5ldyBCaWdJbnRlZ2VyKGVuY3NpZywgMTYpO1xyXG5cclxuICAgIGlmIChzaWcuYml0TGVuZ3RoKCkgPiB0aGlzLm4uYml0TGVuZ3RoKCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBrZXkgbW9kdWx1cy4nKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVjcnlwdGVkU2lnID0gc2lnLm1vZFBvd0ludCh0aGlzLmUsIHRoaXMubik7XHJcbiAgICB2YXIgZGlnZXN0ID0gZGVjcnlwdGVkU2lnLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eMWYrMDAvLCAnJyk7XHJcbiAgICB2YXIgZGlnZXN0SW5mbyA9IGdldEFsZ29yaXRobUZyb21EaWdlc3QoZGlnZXN0KTtcclxuXHJcbiAgICBpZiAoZGlnZXN0SW5mby5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFEaWdlc3RBbGdzLmhhc093blByb3BlcnR5KGRpZ2VzdEluZm8uYWxnKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzaGluZyBhbGdvcml0aG0gaXMgbm90IHN1cHBvcnRlZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbXNnSGFzaCA9IERpZ2VzdEFsZ3NbZGlnZXN0SW5mby5hbGddKG1zZykudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiAoZGlnZXN0SW5mby5oYXNoID09PSBtc2dIYXNoKTtcclxufTtcclxuXHJcbmNvbnN0IEFsbG93ZWRTaWduaW5nQWxncyA9IFsnUlMyNTYnXTtcclxuXHJcbmNvbnN0IGp3cyA9IHtcclxuICAgIEpXUzoge1xyXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbih0b2tlbikge1xyXG4gICAgICAgICAgICB2YXIgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICB2YXIgaGVhZGVyO1xyXG4gICAgICAgICAgICB2YXIgcGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoaXMgZGl2ZXJnZXMgZnJvbSBBdXRoMCdzIGltcGxlbWVudGF0aW9uLCB3aGljaCB0aHJvd3MgcmF0aGVyIHRoYW5cclxuICAgICAgICAgICAgLy8gcmV0dXJuaW5nIHVuZGVmaW5lZFxyXG4gICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyID0gSlNPTi5wYXJzZShCYXNlNjQudXJsRGVjb2RlKHBhcnRzWzBdKSk7XHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShCYXNlNjQudXJsRGVjb2RlKHBhcnRzWzFdKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1Rva2VuIGhlYWRlciBvciBwYXlsb2FkIGlzIG5vdCB2YWxpZCBKU09OJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJPYmo6IGhlYWRlcixcclxuICAgICAgICAgICAgICAgIHBheWxvYWRPYmo6IHBheWxvYWQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2ZXJpZnk6IGZ1bmN0aW9uKGp3dCwga2V5LCBhbGxvd2VkU2lnbmluZ0FsZ3MgPSBbXSkge1xyXG4gICAgICAgICAgICBhbGxvd2VkU2lnbmluZ0FsZ3MuZm9yRWFjaCgoYWxnKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQWxsb3dlZFNpZ25pbmdBbGdzLmluZGV4T2YoYWxnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2lnbmluZyBhbGdvcml0aG06ICcgKyBhbGcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdmFyIHZlcmlmeSA9IG5ldyBSU0FWZXJpZmllcihrZXkubiwga2V5LmUpO1xyXG4gICAgICAgICAgICB2YXIgcGFydHMgPSBqd3Quc3BsaXQoJy4nKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBoZWFkZXJBbmRQYXlsb2FkID0gW3BhcnRzWzBdLCBwYXJ0c1sxXV0uam9pbignLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gdmVyaWZ5LnZlcmlmeShoZWFkZXJBbmRQYXlsb2FkLCBwYXJ0c1syXSk7XHJcbiAgICAgICAgfSxcclxuICAgIH0sXHJcbn07XHJcblxyXG5jb25zdCBLZXlVdGlsID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGRlY29kZWQga2V5cyBpbiBIZXggZm9ybWF0IGZvciB1c2UgaW4gY3J5cHRvIGZ1bmN0aW9ucy5cclxuICAgICAqIFN1cHBvcnRzIG1vZHVsdXMvZXhwb25lbnQtc3R5bGUga2V5cy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0ga2V5IHRoZSBzZWN1cml0eSBrZXlcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldEtleShrZXkpIHtcclxuICAgICAgICBpZiAoa2V5Lmt0eSA9PT0gJ1JTQScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGU6IEJhc2U2NC5kZWNvZGVUb0hFWChrZXkuZSksXHJcbiAgICAgICAgICAgICAgICBuOiBCYXNlNjQuZGVjb2RlVG9IRVgoa2V5Lm4pLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuY29uc3QgWDUwOSA9IHtcclxuICAgIGdldFB1YmxpY0tleUZyb21DZXJ0UEVNOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZC4gVXNlIHRoZSBmdWxsIG9pZGMtY2xpZW50IGxpYnJhcnkgaWYgeW91IG5lZWQgc3VwcG9ydCBmb3IgWDUwOS4nKTtcclxuICAgIH0sXHJcbn07XHJcblxyXG5jb25zdCBjcnlwdG8gPSB7XHJcbiAgICBVdGlsOiB7XHJcbiAgICAgICAgaGFzaFN0cmluZzogZnVuY3Rpb24odmFsdWUsIGFsZykge1xyXG4gICAgICAgICAgICB2YXIgaGFzaEZ1bmMgPSBEaWdlc3RBbGdzW2FsZ107XHJcbiAgICAgICAgICAgIHJldHVybiBoYXNoRnVuYyh2YWx1ZSkudG9TdHJpbmcoKTtcclxuICAgICAgICB9LFxyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gaGV4dG9iNjR1KHMpIHtcclxuICAgIGlmIChzLmxlbmd0aCAlIDIgPT09IDEpIHtcclxuICAgICAgICBzID0gJzAnICsgcztcclxuICAgIH1cclxuICAgIHJldHVybiBCYXNlNjQuYmFzZTY0VG9CYXNlNjRVcmwoQmFzZTY0LmhleFRvQmFzZTY0KHMpKTtcclxufVxyXG5cclxuY29uc3Qge2I2NHRvaGV4fSA9IEJhc2U2NDtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBqd3MsXHJcbiAgICBLZXlVdGlsLFxyXG4gICAgWDUwOSxcclxuICAgIGNyeXB0byxcclxuICAgIGhleHRvYjY0dSxcclxuICAgIGI2NHRvaGV4LFxyXG4gICAgQWxsb3dlZFNpZ25pbmdBbGdzXHJcbn07XHJcbiIsImltcG9ydCB1dWlkNCBmcm9tICd1dWlkL3Y0JztcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgUkZDNDEyMiB2ZXJzaW9uIDQgZ3VpZCAoKVxyXG4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmRvbSgpIHtcclxuICByZXR1cm4gdXVpZDQoKS5yZXBsYWNlKC8tL2csICcnKTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXM2L3Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL2FycmF5L2ZpbmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL2FycmF5L2lzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9hcnJheS9zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9hcnJheS9zcGxpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL2Z1bmN0aW9uL2JpbmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL29iamVjdC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LW1ldGhvZHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BlcmZvcm0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmljdC1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9jb3JlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTI1Ni5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2pzYm4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL3V1aWQvbGliL3JuZy1icm93c2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvdXVpZC92NC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vcG9seWZpbGxzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQWNjZXNzVG9rZW5FdmVudHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9DaGVja1Nlc3Npb25JRnJhbWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Db3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YVBvcHVwTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YVBvcHVwV2luZG93LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvRXJyb3JSZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0V2ZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvR2xvYmFsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSUZyYW1lTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSUZyYW1lV2luZG93LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSW5NZW1vcnlXZWJTdG9yYWdlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxJbXBsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxSc2EuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Kc29uU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0xvZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL01ldGFkYXRhU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL09pZGNDbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9PaWRjQ2xpZW50U2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Qb3B1cE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1BvcHVwV2luZG93LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUmVkaXJlY3ROYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9SZXNwb25zZVZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Nlc3Npb25Nb25pdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbmluUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblJlc3BvbnNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbmluU3RhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWdub3V0UmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25vdXRSZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpbGVudFJlbmV3U2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1N0YXRlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVGltZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Ub2tlbkNsaWVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Rva2VuUmV2b2NhdGlvbkNsaWVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VybFV0aWxpdHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlckluZm9TZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlckV2ZW50cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL2NyeXB0by9yc2EuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9yYW5kb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3ZlcnNpb24uanMiXSwibmFtZXMiOlsiVmVyc2lvbiIsIkxvZyIsIk9pZGNDbGllbnQiLCJPaWRjQ2xpZW50U2V0dGluZ3MiLCJXZWJTdG9yYWdlU3RhdGVTdG9yZSIsIkluTWVtb3J5V2ViU3RvcmFnZSIsIlVzZXJNYW5hZ2VyIiwiQWNjZXNzVG9rZW5FdmVudHMiLCJNZXRhZGF0YVNlcnZpY2UiLCJDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IiLCJDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yIiwiQ2hlY2tTZXNzaW9uSUZyYW1lIiwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50IiwiU2Vzc2lvbk1vbml0b3IiLCJHbG9iYWwiLCJVc2VyIiwiRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUiLCJhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXIiLCJUaW1lciIsImFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmciLCJfYWNjZXNzVG9rZW5FeHBpcmVkIiwibG9hZCIsImNvbnRhaW5lciIsImFjY2Vzc190b2tlbiIsImV4cGlyZXNfaW4iLCJ1bmRlZmluZWQiLCJkdXJhdGlvbiIsImRlYnVnIiwiZXhwaXJpbmciLCJpbml0IiwiY2FuY2VsIiwiZXhwaXJlZCIsInVubG9hZCIsImFkZEFjY2Vzc1Rva2VuRXhwaXJpbmciLCJjYiIsImFkZEhhbmRsZXIiLCJyZW1vdmVBY2Nlc3NUb2tlbkV4cGlyaW5nIiwicmVtb3ZlSGFuZGxlciIsImFkZEFjY2Vzc1Rva2VuRXhwaXJlZCIsInJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJlZCIsIkRlZmF1bHRJbnRlcnZhbCIsImNhbGxiYWNrIiwiY2xpZW50X2lkIiwidXJsIiwiaW50ZXJ2YWwiLCJzdG9wT25FcnJvciIsIl9jYWxsYmFjayIsIl9jbGllbnRfaWQiLCJfdXJsIiwiX2ludGVydmFsIiwiX3N0b3BPbkVycm9yIiwiaWR4IiwiaW5kZXhPZiIsIl9mcmFtZV9vcmlnaW4iLCJzdWJzdHIiLCJfZnJhbWUiLCJ3aW5kb3ciLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJwb3NpdGlvbiIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIsInNyYyIsIlByb21pc2UiLCJyZXNvbHZlIiwib25sb2FkIiwiYm9keSIsImFwcGVuZENoaWxkIiwiX2JvdW5kTWVzc2FnZUV2ZW50IiwiX21lc3NhZ2UiLCJiaW5kIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJvcmlnaW4iLCJzb3VyY2UiLCJjb250ZW50V2luZG93IiwiZGF0YSIsImVycm9yIiwic3RvcCIsInN0YXJ0Iiwic2Vzc2lvbl9zdGF0ZSIsIl9zZXNzaW9uX3N0YXRlIiwic2VuZCIsInBvc3RNZXNzYWdlIiwiX3RpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwicHJlcGFyZSIsInBhcmFtcyIsInBvcHVwV2luZG93RmVhdHVyZXMiLCJwb3B1cCIsIkNvcmRvdmFQb3B1cFdpbmRvdyIsIkRlZmF1bHRQb3B1cEZlYXR1cmVzIiwiRGVmYXVsdFBvcHVwVGFyZ2V0IiwiX3Byb21pc2UiLCJyZWplY3QiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJmZWF0dXJlcyIsInRhcmdldCIsInBvcHVwV2luZG93VGFyZ2V0IiwicmVkaXJlY3RfdXJpIiwic3RhcnRVcmwiLCJfaXNJbkFwcEJyb3dzZXJJbnN0YWxsZWQiLCJjb3Jkb3ZhTWV0YWRhdGEiLCJzb21lIiwibmFtZSIsImhhc093blByb3BlcnR5IiwibmF2aWdhdGUiLCJfZXJyb3IiLCJjb3Jkb3ZhIiwicmVxdWlyZSIsIm1ldGFkYXRhIiwiX3BvcHVwIiwiSW5BcHBCcm93c2VyIiwib3BlbiIsIl9leGl0Q2FsbGJhY2tFdmVudCIsIl9leGl0Q2FsbGJhY2siLCJfbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCIsIl9sb2FkU3RhcnRDYWxsYmFjayIsInByb21pc2UiLCJldmVudCIsIl9zdWNjZXNzIiwibWVzc2FnZSIsIl9jbGVhbnVwIiwiRXJyb3IiLCJjbG9zZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFcnJvclJlc3BvbnNlIiwiZXJyb3JfZGVzY3JpcHRpb24iLCJlcnJvcl91cmkiLCJzdGF0ZSIsIkV2ZW50IiwiX25hbWUiLCJfY2FsbGJhY2tzIiwicHVzaCIsImZpbmRJbmRleCIsIml0ZW0iLCJzcGxpY2UiLCJyYWlzZSIsImkiLCJsZW5ndGgiLCJ0aW1lciIsImhhbmRsZSIsInRlc3RpbmciLCJyZXF1ZXN0IiwiX3Rlc3RpbmciLCJzZXRYTUxIdHRwUmVxdWVzdCIsIm5ld1JlcXVlc3QiLCJsb2NhdGlvbiIsImxvY2FsU3RvcmFnZSIsInNlc3Npb25TdG9yYWdlIiwiWE1MSHR0cFJlcXVlc3QiLCJJRnJhbWVOYXZpZ2F0b3IiLCJmcmFtZSIsIklGcmFtZVdpbmRvdyIsIm5vdGlmeVBhcmVudCIsIkRlZmF1bHRUaW1lb3V0IiwidGltZW91dCIsInNpbGVudFJlcXVlc3RUaW1lb3V0Iiwic2V0VGltZW91dCIsIl90aW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJfb3JpZ2luIiwiZnJhbWVFbGVtZW50IiwiaHJlZiIsInBhcmVudCIsInByb3RvY29sIiwiaG9zdCIsIl9kYXRhIiwiZ2V0SXRlbSIsImtleSIsInNldEl0ZW0iLCJ2YWx1ZSIsInJlbW92ZUl0ZW0iLCJpbmRleCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRKb3NlVXRpbCIsImp3cyIsIktleVV0aWwiLCJYNTA5IiwiY3J5cHRvIiwiaGV4dG9iNjR1IiwiYjY0dG9oZXgiLCJBbGxvd2VkU2lnbmluZ0FsZ3MiLCJwYXJzZUp3dCIsImp3dCIsInRva2VuIiwiSldTIiwicGFyc2UiLCJoZWFkZXIiLCJoZWFkZXJPYmoiLCJwYXlsb2FkIiwicGF5bG9hZE9iaiIsInZhbGlkYXRlSnd0IiwiaXNzdWVyIiwiYXVkaWVuY2UiLCJjbG9ja1NrZXciLCJub3ciLCJ0aW1lSW5zZW5zaXRpdmUiLCJrdHkiLCJuIiwiZ2V0S2V5IiwieDVjIiwiaGV4IiwiZ2V0UHVibGljS2V5RnJvbUNlcnRIZXgiLCJjcnYiLCJ4IiwieSIsIkpvc2VVdGlsIiwiX3ZhbGlkYXRlSnd0IiwidmFsaWRhdGVKd3RBdHRyaWJ1dGVzIiwicGFyc2VJbnQiLCJEYXRlIiwiaXNzIiwiYXVkIiwidmFsaWRBdWRpZW5jZSIsIkFycmF5IiwiaXNBcnJheSIsImF6cCIsImxvd2VyTm93IiwidXBwZXJOb3ciLCJpYXQiLCJuYmYiLCJleHAiLCJ0aGVuIiwidmVyaWZ5IiwiaGFzaFN0cmluZyIsImFsZyIsIlV0aWwiLCJoZXhUb0Jhc2U2NFVybCIsIkpzb25TZXJ2aWNlIiwiYWRkaXRpb25hbENvbnRlbnRUeXBlcyIsIlhNTEh0dHBSZXF1ZXN0Q3RvciIsImp3dEhhbmRsZXIiLCJfY29udGVudFR5cGVzIiwic2xpY2UiLCJfWE1MSHR0cFJlcXVlc3QiLCJfand0SGFuZGxlciIsImdldEpzb24iLCJyZXEiLCJhbGxvd2VkQ29udGVudFR5cGVzIiwic3RhdHVzIiwiY29udGVudFR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImZvdW5kIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJKU09OIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIm9uZXJyb3IiLCJzZXRSZXF1ZXN0SGVhZGVyIiwicG9zdEZvcm0iLCJlbmNvZGVVUklDb21wb25lbnQiLCJub3BMb2dnZXIiLCJpbmZvIiwid2FybiIsIk5PTkUiLCJFUlJPUiIsIldBUk4iLCJJTkZPIiwiREVCVUciLCJsb2dnZXIiLCJsZXZlbCIsInJlc2V0IiwiYXJncyIsImFwcGx5IiwiZnJvbSIsIk9pZGNNZXRhZGF0YVVybFBhdGgiLCJzZXR0aW5ncyIsIkpzb25TZXJ2aWNlQ3RvciIsIl9zZXR0aW5ncyIsIl9qc29uU2VydmljZSIsImdldE1ldGFkYXRhIiwibWV0YWRhdGFVcmwiLCJnZXRJc3N1ZXIiLCJfZ2V0TWV0YWRhdGFQcm9wZXJ0eSIsImdldEF1dGhvcml6YXRpb25FbmRwb2ludCIsImdldFVzZXJJbmZvRW5kcG9pbnQiLCJnZXRUb2tlbkVuZHBvaW50Iiwib3B0aW9uYWwiLCJnZXRDaGVja1Nlc3Npb25JZnJhbWUiLCJnZXRFbmRTZXNzaW9uRW5kcG9pbnQiLCJnZXRSZXZvY2F0aW9uRW5kcG9pbnQiLCJnZXRLZXlzRW5kcG9pbnQiLCJnZXRTaWduaW5nS2V5cyIsInNpZ25pbmdLZXlzIiwiandrc191cmkiLCJrZXlTZXQiLCJrZXlzIiwiX21ldGFkYXRhVXJsIiwiYXV0aG9yaXR5IiwiY3JlYXRlU2lnbmluUmVxdWVzdCIsInJlc3BvbnNlX3R5cGUiLCJzY29wZSIsInByb21wdCIsIm1heF9hZ2UiLCJ1aV9sb2NhbGVzIiwiaWRfdG9rZW5faGludCIsImxvZ2luX2hpbnQiLCJhY3JfdmFsdWVzIiwicmVzb3VyY2UiLCJyZXF1ZXN0X3VyaSIsInJlc3BvbnNlX21vZGUiLCJleHRyYVF1ZXJ5UGFyYW1zIiwicmVxdWVzdF90eXBlIiwic3RhdGVTdG9yZSIsIlNpZ25pblJlcXVlc3QiLCJpc0NvZGUiLCJfbWV0YWRhdGFTZXJ2aWNlIiwic2lnbmluUmVxdWVzdCIsInNpZ25pblN0YXRlIiwiX3N0YXRlU3RvcmUiLCJzZXQiLCJpZCIsInRvU3RvcmFnZVN0cmluZyIsInJlYWRTaWduaW5SZXNwb25zZVN0YXRlIiwicmVtb3ZlU3RhdGUiLCJ1c2VRdWVyeSIsImRlbGltaXRlciIsInJlc3BvbnNlIiwiU2lnbmluUmVzcG9uc2UiLCJzdGF0ZUFwaSIsInJlbW92ZSIsImdldCIsInN0b3JlZFN0YXRlU3RyaW5nIiwiU2lnbmluU3RhdGUiLCJmcm9tU3RvcmFnZVN0cmluZyIsInByb2Nlc3NTaWduaW5SZXNwb25zZSIsIl92YWxpZGF0b3IiLCJ2YWxpZGF0ZVNpZ25pblJlc3BvbnNlIiwiY3JlYXRlU2lnbm91dFJlcXVlc3QiLCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJTaWdub3V0UmVxdWVzdCIsInNpZ25vdXRTdGF0ZSIsInJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSIsIlNpZ25vdXRSZXNwb25zZSIsInN0YXRlS2V5IiwiU3RhdGUiLCJwcm9jZXNzU2lnbm91dFJlc3BvbnNlIiwidmFsaWRhdGVTaWdub3V0UmVzcG9uc2UiLCJjbGVhclN0YWxlU3RhdGUiLCJzdGFsZVN0YXRlQWdlIiwidmFsaWRhdG9yIiwibWV0YWRhdGFTZXJ2aWNlIiwiRGVmYXVsdFJlc3BvbnNlVHlwZSIsIkRlZmF1bHRTY29wZSIsIkRlZmF1bHRTdGFsZVN0YXRlQWdlIiwiRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyIsImNsaWVudF9zZWNyZXQiLCJmaWx0ZXJQcm90b2NvbENsYWltcyIsImxvYWRVc2VySW5mbyIsInVzZXJJbmZvSnd0SXNzdWVyIiwiUmVzcG9uc2VWYWxpZGF0b3JDdG9yIiwiUmVzcG9uc2VWYWxpZGF0b3IiLCJNZXRhZGF0YVNlcnZpY2VDdG9yIiwiX2F1dGhvcml0eSIsIl9tZXRhZGF0YSIsIl9zaWduaW5nS2V5cyIsIl9jbGllbnRfc2VjcmV0IiwiX3Jlc3BvbnNlX3R5cGUiLCJfc2NvcGUiLCJfcmVkaXJlY3RfdXJpIiwiX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIl9wcm9tcHQiLCJfZGlzcGxheSIsIl9tYXhfYWdlIiwiX3VpX2xvY2FsZXMiLCJfYWNyX3ZhbHVlcyIsIl9yZXNvdXJjZSIsIl9yZXNwb25zZV9tb2RlIiwiX2ZpbHRlclByb3RvY29sQ2xhaW1zIiwiX2xvYWRVc2VySW5mbyIsIl9zdGFsZVN0YXRlQWdlIiwiX2Nsb2NrU2tldyIsIl91c2VySW5mb0p3dElzc3VlciIsIl9leHRyYVF1ZXJ5UGFyYW1zIiwiUG9wdXBOYXZpZ2F0b3IiLCJQb3B1cFdpbmRvdyIsImtlZXBPcGVuIiwibm90aWZ5T3BlbmVyIiwiQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsIiwiX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciIsIl9jaGVja0ZvclBvcHVwQ2xvc2VkIiwiX2lkIiwiZm9jdXMiLCJjbG9zZWQiLCJvcGVuZXIiLCJVcmxVdGlsaXR5IiwicGFyc2VVcmxGcmFnbWVudCIsIlJlZGlyZWN0TmF2aWdhdG9yIiwidXNlUmVwbGFjZVRvTmF2aWdhdGUiLCJyZXBsYWNlIiwiUHJvdG9jb2xDbGFpbXMiLCJVc2VySW5mb1NlcnZpY2VDdG9yIiwiVXNlckluZm9TZXJ2aWNlIiwiam9zZVV0aWwiLCJUb2tlbkNsaWVudEN0b3IiLCJUb2tlbkNsaWVudCIsIl91c2VySW5mb1NlcnZpY2UiLCJfam9zZVV0aWwiLCJfdG9rZW5DbGllbnQiLCJfcHJvY2Vzc1NpZ25pblBhcmFtcyIsIl92YWxpZGF0ZVRva2VucyIsIl9wcm9jZXNzQ2xhaW1zIiwibm9uY2UiLCJpZF90b2tlbiIsImNvZGVfdmVyaWZpZXIiLCJjb2RlIiwiaXNPcGVuSWRDb25uZWN0IiwicHJvZmlsZSIsImdldENsYWltcyIsImNsYWltcyIsInN1YiIsIl9tZXJnZUNsYWltcyIsImNsYWltczEiLCJjbGFpbXMyIiwicmVzdWx0IiwiYXNzaWduIiwidmFsdWVzIiwiZm9yRWFjaCIsInR5cGUiLCJfcHJvY2Vzc0NvZGUiLCJfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4iLCJfdmFsaWRhdGVJZFRva2VuIiwiZXhjaGFuZ2VDb2RlIiwidG9rZW5SZXNwb25zZSIsIl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzIiwiY2xvY2tTa2V3SW5TZWNvbmRzIiwiX3ZhbGlkYXRlQWNjZXNzVG9rZW4iLCJraWQiLCJfZmlsdGVyQnlBbGciLCJmaWx0ZXIiLCJhdF9oYXNoIiwiaGFzaEFsZyIsImhhc2hCaXRzIiwic2hhIiwiaGFzaCIsImxlZnQiLCJsZWZ0X2I2NHUiLCJ1c2VyTWFuYWdlciIsIkNoZWNrU2Vzc2lvbklGcmFtZUN0b3IiLCJfdXNlck1hbmFnZXIiLCJfQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciIsImV2ZW50cyIsImFkZFVzZXJMb2FkZWQiLCJfc3RhcnQiLCJhZGRVc2VyVW5sb2FkZWQiLCJfc3RvcCIsImdldFVzZXIiLCJ1c2VyIiwiY2F0Y2giLCJlcnIiLCJfc3ViIiwiX3NpZCIsInNpZCIsIl9jaGVja1Nlc3Npb25JRnJhbWUiLCJfY2hlY2tTZXNzaW9uSW50ZXJ2YWwiLCJfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IiLCJxdWVyeVNlc3Npb25TdGF0dXMiLCJyYWlzZVVzZXJTaWduZWRPdXRFdmVudCIsInNlc3Npb24iLCJfcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQiLCJfcmFpc2VVc2VyU2lnbmVkT3V0IiwiY2hlY2tTZXNzaW9uSW50ZXJ2YWwiLCJzdG9wQ2hlY2tTZXNzaW9uT25FcnJvciIsIm9pZGMiLCJpc09pZGMiLCJhZGRRdWVyeVBhcmFtIiwiY29kZV9jaGFsbGVuZ2UiLCJzcGxpdCIsImlzT0F1dGgiLCJPaWRjU2NvcGUiLCJ0b2tlbl90eXBlIiwiZXhwaXJlc19hdCIsInNjb3BlcyIsImFyZ3VtZW50cyIsIl9ub25jZSIsIl9jb2RlX3ZlcmlmaWVyIiwiX2NvZGVfY2hhbGxlbmdlIiwic3RyaW5naWZ5IiwiY3JlYXRlZCIsInN0b3JhZ2VTdHJpbmciLCJTaWxlbnRSZW5ld1NlcnZpY2UiLCJfdG9rZW5FeHBpcmluZyIsInNpZ25pblNpbGVudCIsIl9yYWlzZVNpbGVudFJlbmV3RXJyb3IiLCJfY3JlYXRlZCIsIl9yZXF1ZXN0X3R5cGUiLCJzdG9yYWdlIiwiYWdlIiwiY3V0b2ZmIiwiZ2V0QWxsS2V5cyIsInByb21pc2VzIiwicCIsImFsbCIsIlRpbWVyRHVyYXRpb24iLCJub3dGdW5jIiwiX25vd0Z1bmMiLCJleHBpcmF0aW9uIiwiX3RpbWVySGFuZGxlIiwiX2V4cGlyYXRpb24iLCJ0aW1lckR1cmF0aW9uIiwiZGlmZiIsImdyYW50X3R5cGUiLCJleGNoYW5nZVJlZnJlc2hUb2tlbiIsInJlZnJlc2hfdG9rZW4iLCJBY2Nlc3NUb2tlblR5cGVIaW50IiwiUmVmcmVzaFRva2VuVHlwZUhpbnQiLCJfWE1MSHR0cFJlcXVlc3RDdG9yIiwicmV2b2tlIiwicmVxdWlyZWQiLCJfcmV2b2tlIiwieGhyIiwiZ2xvYmFsIiwibGFzdEluZGV4T2YiLCJyZWdleCIsIm0iLCJjb3VudGVyIiwiZXhlYyIsImRlY29kZVVSSUNvbXBvbmVudCIsInByb3AiLCJfZ2V0Q2xhaW1zRnJvbUp3dCIsImlzc3VlclByb21pc2UiLCJTaWxlbnRSZW5ld1NlcnZpY2VDdG9yIiwiU2Vzc2lvbk1vbml0b3JDdG9yIiwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50Q3RvciIsIlVzZXJNYW5hZ2VyU2V0dGluZ3MiLCJfZXZlbnRzIiwiVXNlck1hbmFnZXJFdmVudHMiLCJfc2lsZW50UmVuZXdTZXJ2aWNlIiwiYXV0b21hdGljU2lsZW50UmVuZXciLCJzdGFydFNpbGVudFJlbmV3IiwibW9uaXRvclNlc3Npb24iLCJfc2Vzc2lvbk1vbml0b3IiLCJfdG9rZW5SZXZvY2F0aW9uQ2xpZW50IiwiX2xvYWRVc2VyIiwicmVtb3ZlVXNlciIsInN0b3JlVXNlciIsInNpZ25pblJlZGlyZWN0IiwibmF2UGFyYW1zIiwiX3NpZ25pblN0YXJ0IiwiX3JlZGlyZWN0TmF2aWdhdG9yIiwic2lnbmluUmVkaXJlY3RDYWxsYmFjayIsIl9zaWduaW5FbmQiLCJzaWduaW5Qb3B1cCIsInBvcHVwX3JlZGlyZWN0X3VyaSIsIl9zaWduaW4iLCJfcG9wdXBOYXZpZ2F0b3IiLCJzaWduaW5Qb3B1cENhbGxiYWNrIiwiX3NpZ25pbkNhbGxiYWNrIiwiX3VzZVJlZnJlc2hUb2tlbiIsImluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyIsInZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyIsImN1cnJlbnRfc3ViIiwiX3NpZ25pblNpbGVudElmcmFtZSIsImlkVG9rZW5WYWxpZGF0aW9uIiwiX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbiIsImF1dGhfdGltZSIsInNpbGVudF9yZWRpcmVjdF91cmkiLCJfaWZyYW1lTmF2aWdhdG9yIiwic2lnbmluU2lsZW50Q2FsbGJhY2siLCJzaWduaW5DYWxsYmFjayIsInNpZ25vdXRDYWxsYmFjayIsInNpZ25vdXRSZWRpcmVjdENhbGxiYWNrIiwic2lnbm91dFBvcHVwQ2FsbGJhY2siLCJxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSIsIm5hdlJlc3BvbnNlIiwic2lnbmluUmVzcG9uc2UiLCJuYXZpZ2F0b3IiLCJuYXZpZ2F0b3JQYXJhbXMiLCJzaWdub3V0UmVkaXJlY3QiLCJwb3N0TG9nb3V0UmVkaXJlY3RVcmkiLCJfc2lnbm91dFN0YXJ0IiwiX3NpZ25vdXRFbmQiLCJzaWdub3V0UG9wdXAiLCJwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfc2lnbm91dCIsInJldm9rZVByb21pc2UiLCJyZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCIsIl9yZXZva2VJbnRlcm5hbCIsInNpZ25vdXRSZXF1ZXN0Iiwic2lnbm91dFJlc3BvbnNlIiwicmV2b2tlQWNjZXNzVG9rZW4iLCJzdWNjZXNzIiwiX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwiLCJfcmV2b2tlUmVmcmVzaFRva2VuSW50ZXJuYWwiLCJhdFN1Y2Nlc3MiLCJydFN1Y2Nlc3MiLCJzdG9wU2lsZW50UmVuZXciLCJfdXNlclN0b3JlIiwiX3VzZXJTdG9yZUtleSIsInJlZGlyZWN0TmF2aWdhdG9yIiwicG9wdXBOYXZpZ2F0b3IiLCJpZnJhbWVOYXZpZ2F0b3IiLCJ1c2VyU3RvcmUiLCJfdXNlckxvYWRlZCIsIl91c2VyVW5sb2FkZWQiLCJfc2lsZW50UmVuZXdFcnJvciIsIl91c2VyU2lnbmVkT3V0IiwiX3VzZXJTZXNzaW9uQ2hhbmdlZCIsInJhaXNlRXZlbnQiLCJyZW1vdmVVc2VyTG9hZGVkIiwicmVtb3ZlVXNlclVubG9hZGVkIiwiYWRkU2lsZW50UmVuZXdFcnJvciIsInJlbW92ZVNpbGVudFJlbmV3RXJyb3IiLCJhZGRVc2VyU2lnbmVkT3V0IiwicmVtb3ZlVXNlclNpZ25lZE91dCIsImFkZFVzZXJTZXNzaW9uQ2hhbmdlZCIsInJlbW92ZVVzZXJTZXNzaW9uQ2hhbmdlZCIsIkRlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCIsInN0b3JlIiwiX3BvcHVwX3JlZGlyZWN0X3VyaSIsIl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfcG9wdXBXaW5kb3dGZWF0dXJlcyIsIl9wb3B1cFdpbmRvd1RhcmdldCIsIl9zaWxlbnRfcmVkaXJlY3RfdXJpIiwiX3NpbGVudFJlcXVlc3RUaW1lb3V0IiwiX2F1dG9tYXRpY1NpbGVudFJlbmV3IiwiX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyIsIl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXciLCJfbW9uaXRvclNlc3Npb24iLCJfcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUiLCJfcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQiLCJwcmVmaXgiLCJfc3RvcmUiLCJfcHJlZml4IiwiQmlnSW50ZWdlciIsIkpTQk4iLCJiNjRtYXAiLCJiNjRwYWQiLCJCYXNlNjQiLCJzIiwicmV0IiwiayIsInNsb3AiLCJjaGFyQXQiLCJ2IiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiaGV4VG9CYXNlNjQiLCJoIiwiYyIsInN1YnN0cmluZyIsInBhZGRpbmciLCJzdHIiLCJtb2QiLCJwYWQiLCJqb2luIiwiYnl0ZUFycmF5VG9IZXgiLCJyYXciLCJIRVgiLCJfaGV4IiwidG9TdHJpbmciLCJkZWNvZGVUb0hFWCIsImJhc2U2NEpzIiwidG9CeXRlQXJyYXkiLCJiYXNlNjRUb0Jhc2U2NFVybCIsInVybERlY29kZSIsImF0b2IiLCJEaWdlc3RJbmZvSGVhZCIsInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDIiLCJtZDUiLCJyaXBlbWQxNjAiLCJEaWdlc3RBbGdzIiwiU0hBMjU2IiwiUlNBVmVyaWZpZXIiLCJtb2R1bHVzIiwiZ2V0QWxnb3JpdGhtRnJvbURpZ2VzdCIsImhEaWdlc3RJbmZvIiwiYWxnTmFtZSIsImhlYWQiLCJsZW4iLCJwcm90b3R5cGUiLCJtc2ciLCJlbmNzaWciLCJzaWciLCJiaXRMZW5ndGgiLCJkZWNyeXB0ZWRTaWciLCJtb2RQb3dJbnQiLCJkaWdlc3QiLCJkaWdlc3RJbmZvIiwibXNnSGFzaCIsInBhcnRzIiwiYWxsb3dlZFNpZ25pbmdBbGdzIiwiaGVhZGVyQW5kUGF5bG9hZCIsImdldFB1YmxpY0tleUZyb21DZXJ0UEVNIiwiaGFzaEZ1bmMiLCJyYW5kb20iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNB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TSxHQUFBQSxNO1FBQ0FDLFMsR0FBQUEsUztRQUNBQyxRLEdBQUFBLFE7UUFDQUMsa0IsR0FBQUEsa0I7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQy9Sb0I4ZixNOztBQU54Qjs7Ozs7O0FBRUE7Ozs7QUFJZSxTQUFTQSxNQUFULEdBQWtCO0FBQy9CLFNBQU8sbUJBQVE3UyxPQUFSLENBQWdCLElBQWhCLEVBQXNCLEVBQXRCLENBQVA7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDUkQsSUFBTWpaLFVBQVUsY0FBaEIsQyxRQUF3Q0EsTyxHQUFBQSxPIiwiZmlsZSI6Im9pZGMtY2xpZW50LnJzYTI1Ni5zbGltLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDApO1xuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9zcmMvTG9nLmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudCB9IGZyb20gJy4vc3JjL09pZGNDbGllbnQuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL3NyYy9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xyXG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vc3JjL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzJztcclxuaW1wb3J0IHsgSW5NZW1vcnlXZWJTdG9yYWdlIH0gZnJvbSAnLi9zcmMvSW5NZW1vcnlXZWJTdG9yYWdlLmpzJztcclxuaW1wb3J0IHsgVXNlck1hbmFnZXIgfSBmcm9tICcuL3NyYy9Vc2VyTWFuYWdlci5qcyc7XHJcbmltcG9ydCB7IEFjY2Vzc1Rva2VuRXZlbnRzIH0gZnJvbSAnLi9zcmMvQWNjZXNzVG9rZW5FdmVudHMuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL3NyYy9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IgfSBmcm9tICcuL3NyYy9Db3Jkb3ZhUG9wdXBOYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yIH0gZnJvbSAnLi9zcmMvQ29yZG92YUlGcmFtZU5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IENoZWNrU2Vzc2lvbklGcmFtZSB9IGZyb20gJy4vc3JjL0NoZWNrU2Vzc2lvbklGcmFtZS5qcyc7XHJcbmltcG9ydCB7IFRva2VuUmV2b2NhdGlvbkNsaWVudCB9IGZyb20gJy4vc3JjL1Rva2VuUmV2b2NhdGlvbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IFNlc3Npb25Nb25pdG9yIH0gZnJvbSAnLi9zcmMvU2Vzc2lvbk1vbml0b3IuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL3NyYy9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi9zcmMvVXNlci5qcyc7XHJcblxyXG5pbXBvcnQgeyBWZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uLmpzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIFZlcnNpb24sXHJcbiAgICBMb2csXHJcbiAgICBPaWRjQ2xpZW50LFxyXG4gICAgT2lkY0NsaWVudFNldHRpbmdzLFxyXG4gICAgV2ViU3RvcmFnZVN0YXRlU3RvcmUsXHJcbiAgICBJbk1lbW9yeVdlYlN0b3JhZ2UsXHJcbiAgICBVc2VyTWFuYWdlcixcclxuICAgIEFjY2Vzc1Rva2VuRXZlbnRzLFxyXG4gICAgTWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgQ29yZG92YVBvcHVwTmF2aWdhdG9yLFxyXG4gICAgQ29yZG92YUlGcmFtZU5hdmlnYXRvcixcclxuICAgIENoZWNrU2Vzc2lvbklGcmFtZSxcclxuICAgIFRva2VuUmV2b2NhdGlvbkNsaWVudCxcclxuICAgIFNlc3Npb25Nb25pdG9yLFxyXG4gICAgR2xvYmFsLFxyXG4gICAgVXNlclxyXG59O1xyXG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKFxuICAgICAgdWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKVxuICAgICkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsInJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvX2NvcmUnKS5Qcm9taXNlO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuQXJyYXkuZmluZDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5pc0FycmF5O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuc29tZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuQXJyYXkuc29tZTtcbiIsIi8vIGZvciBhIGxlZ2FjeSBjb2RlIGFuZCBmdXR1cmUgZml4ZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRnVuY3Rpb24uY2FsbC5hcHBseShBcnJheS5wcm90b3R5cGUuc3BsaWNlLCBhcmd1bWVudHMpO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLkZ1bmN0aW9uLmJpbmQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QuYXNzaWduO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXNjID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsICRjcmVhdGUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICB2YXIgY3JlYXRlID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWwsIHJlcztcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzID0gZih2YWwsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICB9O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwsIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWwpKShsZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjQnIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikgaWYgKGlzRW51bS5jYWxsKFMsIGtleSA9IGtleXNbaisrXSkpIFRba2V5XSA9IFNba2V5XTtcbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGU6IGZhbHNlLCB2OiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IGU6IHRydWUsIHY6IGUgfTtcbiAgfVxufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgc2FmZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgU1JDID0gcmVxdWlyZSgnLi9fdWlkJykoJ3NyYycpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4vX2Z1bmN0aW9uLXRvLXN0cmluZycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgVFBMID0gKCcnICsgJHRvU3RyaW5nKS5zcGxpdChUT19TVFJJTkcpO1xuXG5yZXF1aXJlKCcuL19jb3JlJykuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gJHRvU3RyaW5nLmNhbGwoaXQpO1xufTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2UgaWYgKCFzYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfSBlbHNlIGlmIChPW2tleV0pIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSB7XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH1cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzW1NSQ10gfHwgJHRvU3RyaW5nLmNhbGwodGhpcyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4yLjMuMiAvIDE1LjMuNC41IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKHRoaXNBcmcsIGFyZ3MuLi4pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0Z1bmN0aW9uJywgeyBiaW5kOiByZXF1aXJlKCcuL19iaW5kJykgfSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRyb290LkNyeXB0b0pTID0gZmFjdG9yeSgpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuXHQvKipcblx0ICogQ3J5cHRvSlMgY29yZSBjb21wb25lbnRzLlxuXHQgKi9cblx0dmFyIENyeXB0b0pTID0gQ3J5cHRvSlMgfHwgKGZ1bmN0aW9uIChNYXRoLCB1bmRlZmluZWQpIHtcblx0ICAgIC8qXG5cdCAgICAgKiBMb2NhbCBwb2x5ZmlsIG9mIE9iamVjdC5jcmVhdGVcblx0ICAgICAqL1xuXHQgICAgdmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmdW5jdGlvbiBGKCkge307XG5cblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuXHQgICAgICAgICAgICB2YXIgc3VidHlwZTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG9iajtcblxuXHQgICAgICAgICAgICBzdWJ0eXBlID0gbmV3IEYoKTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG51bGw7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSlcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDcnlwdG9KUyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogTGlicmFyeSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2xpYiA9IEMubGliID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZSBvYmplY3QgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZSA9IChmdW5jdGlvbiAoKSB7XG5cblxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdmVycmlkZXMgUHJvcGVydGllcyB0byBjb3B5IGludG8gdGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIH1cblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgZXh0ZW5kOiBmdW5jdGlvbiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTcGF3blxuXHQgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBjcmVhdGUodGhpcyk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEF1Z21lbnRcblx0ICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZXMpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLm1peEluKG92ZXJyaWRlcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IGluaXRpYWxpemVyXG5cdCAgICAgICAgICAgICAgICBpZiAoIXN1YnR5cGUuaGFzT3duUHJvcGVydHkoJ2luaXQnKSB8fCB0aGlzLmluaXQgPT09IHN1YnR5cGUuaW5pdCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemVyJ3MgcHJvdG90eXBlIGlzIHRoZSBzdWJ0eXBlIG9iamVjdFxuXHQgICAgICAgICAgICAgICAgc3VidHlwZS5pbml0LnByb3RvdHlwZSA9IHN1YnR5cGU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBzdXBlcnR5cGVcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyID0gdGhpcztcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEV4dGVuZHMgdGhpcyBvYmplY3QgYW5kIHJ1bnMgdGhlIGluaXQgbWV0aG9kLlxuXHQgICAgICAgICAgICAgKiBBcmd1bWVudHMgdG8gY3JlYXRlKCkgd2lsbCBiZSBwYXNzZWQgdG8gaW5pdCgpLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgaW5zdGFuY2UgPSBNeVR5cGUuY3JlYXRlKCk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuZXh0ZW5kKCk7XG5cdCAgICAgICAgICAgICAgICBpbnN0YW5jZS5pbml0LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG5cdCAgICAgICAgICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFkZCBzb21lIGxvZ2ljIHdoZW4geW91ciBvYmplY3RzIGFyZSBjcmVhdGVkLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIE15VHlwZSA9IENyeXB0b0pTLmxpYi5CYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgICAgICAvLyAuLi5cblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ29waWVzIHByb3BlcnRpZXMgaW50byB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgdG8gbWl4IGluLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgTXlUeXBlLm1peEluKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJ1xuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBtaXhJbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJRSB3b24ndCBjb3B5IHRvU3RyaW5nIHVzaW5nIHRoZSBsb29wIGFib3ZlXG5cdCAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcgPSBwcm9wZXJ0aWVzLnRvU3RyaW5nO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBpbnN0YW5jZS5jbG9uZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFuIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNpZ0J5dGVzIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICovXG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5ID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgKE9wdGlvbmFsKSBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAwMTAyMDMsIDB4MDQwNTA2MDddKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSwgNik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIHdvcmQgYXJyYXkgdG8gYSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0VuY29kZXJ9IGVuY29kZXIgKE9wdGlvbmFsKSBUaGUgZW5jb2Rpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBDcnlwdG9KUy5lbmMuSGV4XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5ICsgJyc7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIChlbmNvZGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZW5jb2RlciB8fCBIZXgpLnN0cmluZ2lmeSh0aGlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uY2F0ZW5hdGVzIGEgd29yZCBhcnJheSB0byB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5IHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkxLmNvbmNhdCh3b3JkQXJyYXkyKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb25jYXQ6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB0aGlzV29yZHMgPSB0aGlzLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhhdFdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhpc1NpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRTaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICB0aGlzLmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29uY2F0XG5cdCAgICAgICAgICAgIGlmICh0aGlzU2lnQnl0ZXMgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDb3B5IG9uZSBieXRlIGF0IGEgdGltZVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGF0U2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0Qnl0ZSA9ICh0aGF0V29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXNXb3Jkc1sodGhpc1NpZ0J5dGVzICsgaSkgPj4+IDJdIHw9IHRoYXRCeXRlIDw8ICgyNCAtICgodGhpc1NpZ0J5dGVzICsgaSkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgd29yZCBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhhdFNpZ0J5dGVzOyBpICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGkpID4+PiAyXSA9IHRoYXRXb3Jkc1tpID4+PiAyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzICs9IHRoYXRTaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlbW92ZXMgaW5zaWduaWZpY2FudCBiaXRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbGFtcDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcFxuXHQgICAgICAgICAgICB3b3Jkc1tzaWdCeXRlcyA+Pj4gMl0gJj0gMHhmZmZmZmZmZiA8PCAoMzIgLSAoc2lnQnl0ZXMgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB3b3Jkcy5sZW5ndGggPSBNYXRoLmNlaWwoc2lnQnl0ZXMgLyA0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IHdvcmRBcnJheS5jbG9uZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEJhc2UuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUud29yZHMgPSB0aGlzLndvcmRzLnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHdvcmQgYXJyYXkgZmlsbGVkIHdpdGggcmFuZG9tIGJ5dGVzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG5CeXRlcyBUaGUgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHJhbmRvbSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oMTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJhbmRvbTogZnVuY3Rpb24gKG5CeXRlcykge1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuXHQgICAgICAgICAgICB2YXIgciA9IChmdW5jdGlvbiAobV93KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbV93ID0gbV93O1xuXHQgICAgICAgICAgICAgICAgdmFyIG1feiA9IDB4M2FkZTY4YjE7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFzayA9IDB4ZmZmZmZmZmY7XG5cblx0ICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbV96ID0gKDB4OTA2OSAqIChtX3ogJiAweEZGRkYpICsgKG1feiA+PiAweDEwKSkgJiBtYXNrO1xuXHQgICAgICAgICAgICAgICAgICAgIG1fdyA9ICgweDQ2NTAgKiAobV93ICYgMHhGRkZGKSArIChtX3cgPj4gMHgxMCkpICYgbWFzaztcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gKChtX3ogPDwgMHgxMCkgKyBtX3cpICYgbWFzaztcblx0ICAgICAgICAgICAgICAgICAgICByZXN1bHQgLz0gMHgxMDAwMDAwMDA7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IDAuNTtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICogKE1hdGgucmFuZG9tKCkgPiAuNSA/IDEgOiAtMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCByY2FjaGU7IGkgPCBuQnl0ZXM7IGkgKz0gNCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIF9yID0gcigocmNhY2hlIHx8IE1hdGgucmFuZG9tKCkpICogMHgxMDAwMDAwMDApO1xuXG5cdCAgICAgICAgICAgICAgICByY2FjaGUgPSBfcigpICogMHgzYWRlNjdiNztcblx0ICAgICAgICAgICAgICAgIHdvcmRzLnB1c2goKF9yKCkgKiAweDEwMDAwMDAwMCkgfCAwKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIG5CeXRlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRW5jb2RlciBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogSGV4IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgSGV4ID0gQ19lbmMuSGV4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciBoZXhDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRlID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIGhleENoYXJzLnB1c2goKGJpdGUgPj4+IDQpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlICYgMHgwZikudG9TdHJpbmcoMTYpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBoZXhDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBoZXggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBoZXhTdHIgVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZShoZXhTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoaGV4U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoZXhTdHJMZW5ndGggPSBoZXhTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGV4U3RyTGVuZ3RoOyBpICs9IDIpIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDNdIHw9IHBhcnNlSW50KGhleFN0ci5zdWJzdHIoaSwgMiksIDE2KSA8PCAoMjQgLSAoaSAlIDgpICogNCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBoZXhTdHJMZW5ndGggLyAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExhdGluMSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIExhdGluMSA9IENfZW5jLkxhdGluMSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBsYXRpbjFTdHJpbmcgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgbGF0aW4xQ2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBsYXRpbjFDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYml0ZSkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGxhdGluMUNoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIExhdGluMSBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGxhdGluMVN0ciBUaGUgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlKGxhdGluMVN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChsYXRpbjFTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMVN0ckxlbmd0aCA9IGxhdGluMVN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXRpbjFTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMl0gfD0gKGxhdGluMVN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZikgPDwgKDI0IC0gKGkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgbGF0aW4xU3RyTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi04IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0ZjggPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmOC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKExhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KSkpO1xuXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBVVEYtOCBkYXRhJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtOCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHV0ZjhTdHIgVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh1dGY4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjhTdHIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIExhdGluMS5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodXRmOFN0cikpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJ1ZmZlcmVkIGJsb2NrIGFsZ29yaXRobSB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBUaGUgcHJvcGVydHkgYmxvY2tTaXplIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfbWluQnVmZmVyU2l6ZSBUaGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IHNob3VsZCBiZSBrZXB0IHVucHJvY2Vzc2VkIGluIHRoZSBidWZmZXIuIERlZmF1bHQ6IDBcblx0ICAgICAqL1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGRhdGEgYnVmZmVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YSA9IG5ldyBXb3JkQXJyYXkuaW5pdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9uRGF0YUJ5dGVzID0gMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBuZXcgZGF0YSB0byB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGJ1ZmZlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBhcHBlbmQuIFN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byBhIFdvcmRBcnJheSB1c2luZyBVVEYtOC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fYXBwZW5kKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9hcHBlbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFdvcmRBcnJheSwgZWxzZSBhc3N1bWUgV29yZEFycmF5IGFscmVhZHlcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkYXRhID0gVXRmOC5wYXJzZShkYXRhKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9kYXRhLmNvbmNhdChkYXRhKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyArPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBQcm9jZXNzZXMgYXZhaWxhYmxlIGRhdGEgYmxvY2tzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogVGhpcyBtZXRob2QgaW52b2tlcyBfZG9Qcm9jZXNzQmxvY2sob2Zmc2V0KSwgd2hpY2ggbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhIGNvbmNyZXRlIHN1YnR5cGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvRmx1c2ggV2hldGhlciBhbGwgYmxvY2tzIGFuZCBwYXJ0aWFsIGJsb2NrcyBzaG91bGQgYmUgcHJvY2Vzc2VkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcHJvY2Vzc2VkIGRhdGEuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwcm9jZXNzZWREYXRhID0gYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fcHJvY2VzcygpO1xuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoISEnZmx1c2gnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfcHJvY2VzczogZnVuY3Rpb24gKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBkYXRhU2lnQnl0ZXMgPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gdGhpcy5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgYmxvY2tzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuQmxvY2tzUmVhZHkgPSBkYXRhU2lnQnl0ZXMgLyBibG9ja1NpemVCeXRlcztcblx0ICAgICAgICAgICAgaWYgKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFJvdW5kIHVwIHRvIGluY2x1ZGUgcGFydGlhbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIG5CbG9ja3NSZWFkeSA9IE1hdGguY2VpbChuQmxvY2tzUmVhZHkpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gUm91bmQgZG93biB0byBpbmNsdWRlIG9ubHkgZnVsbCBibG9ja3MsXG5cdCAgICAgICAgICAgICAgICAvLyBsZXNzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoYXQgbXVzdCByZW1haW4gaW4gdGhlIGJ1ZmZlclxuXHQgICAgICAgICAgICAgICAgbkJsb2Nrc1JlYWR5ID0gTWF0aC5tYXgoKG5CbG9ja3NSZWFkeSB8IDApIC0gdGhpcy5fbWluQnVmZmVyU2l6ZSwgMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb3VudCB3b3JkcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbldvcmRzUmVhZHkgPSBuQmxvY2tzUmVhZHkgKiBibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgYnl0ZXMgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5CeXRlc1JlYWR5ID0gTWF0aC5taW4obldvcmRzUmVhZHkgKiA0LCBkYXRhU2lnQnl0ZXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFByb2Nlc3MgYmxvY2tzXG5cdCAgICAgICAgICAgIGlmIChuV29yZHNSZWFkeSkge1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbldvcmRzUmVhZHk7IG9mZnNldCArPSBibG9ja1NpemUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWFsZ29yaXRobSBsb2dpY1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvUHJvY2Vzc0Jsb2NrKGRhdGFXb3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NlZFdvcmRzID0gZGF0YVdvcmRzLnNwbGljZSgwLCBuV29yZHNSZWFkeSk7XG5cdCAgICAgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5CeXRlc1JlYWR5O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHByb2Nlc3NlZFdvcmRzLCBuQnl0ZXNSZWFkeSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9kYXRhID0gdGhpcy5fZGF0YS5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21pbkJ1ZmZlclNpemU6IDBcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGhhc2hlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgaGFzaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxNiAoNTEyIGJpdHMpXG5cdCAgICAgKi9cblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2hlciA9IENyeXB0b0pTLmFsZ28uU0hBMjU2LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUmVzZXRzIHRoaXMgaGFzaGVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBSZXNldCBkYXRhIGJ1ZmZlclxuXHQgICAgICAgICAgICBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1oYXNoZXIgbG9naWNcblx0ICAgICAgICAgICAgdGhpcy5fZG9SZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgaGFzaGVyIHdpdGggYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0hhc2hlcn0gVGhpcyBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnVwZGF0ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGhhc2hcblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBoYXNoIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgbWVzc2FnZSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDUxMi8zMixcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byBhIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBTSEEyNTYgPSBDcnlwdG9KUy5saWIuSGFzaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgaGFzaGVyLmluaXQoY2ZnKS5maW5hbGl6ZShtZXNzYWdlKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2hlciB0byB1c2UgaW4gdGhpcyBITUFDIGhlbHBlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBIbWFjU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihDcnlwdG9KUy5hbGdvLlNIQTI1Nik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX2NyZWF0ZUhtYWNIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ19hbGdvLkhNQUMuaW5pdChoYXNoZXIsIGtleSkuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWxnb3JpdGhtIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbyA9IHt9O1xuXG5cdCAgICByZXR1cm4gQztcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoTWF0aCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIEluaXRpYWxpemF0aW9uIGFuZCByb3VuZCBjb25zdGFudHMgdGFibGVzXG5cdCAgICB2YXIgSCA9IFtdO1xuXHQgICAgdmFyIEsgPSBbXTtcblxuXHQgICAgLy8gQ29tcHV0ZSBjb25zdGFudHNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZnVuY3Rpb24gaXNQcmltZShuKSB7XG5cdCAgICAgICAgICAgIHZhciBzcXJ0TiA9IE1hdGguc3FydChuKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgZmFjdG9yID0gMjsgZmFjdG9yIDw9IHNxcnROOyBmYWN0b3IrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKCEobiAlIGZhY3RvcikpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBmdW5jdGlvbiBnZXRGcmFjdGlvbmFsQml0cyhuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoKG4gLSAobiB8IDApKSAqIDB4MTAwMDAwMDAwKSB8IDA7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdmFyIG4gPSAyO1xuXHQgICAgICAgIHZhciBuUHJpbWUgPSAwO1xuXHQgICAgICAgIHdoaWxlIChuUHJpbWUgPCA2NCkge1xuXHQgICAgICAgICAgICBpZiAoaXNQcmltZShuKSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5QcmltZSA8IDgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBIW25QcmltZV0gPSBnZXRGcmFjdGlvbmFsQml0cyhNYXRoLnBvdyhuLCAxIC8gMikpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgS1tuUHJpbWVdID0gZ2V0RnJhY3Rpb25hbEJpdHMoTWF0aC5wb3cobiwgMSAvIDMpKTtcblxuXHQgICAgICAgICAgICAgICAgblByaW1lKys7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICBuKys7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0XG5cdCAgICB2YXIgVyA9IFtdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS0yNTYgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEyNTYgPSBDX2FsZ28uU0hBMjU2ID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChILnNsaWNlKDApKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYSA9IEhbMF07XG5cdCAgICAgICAgICAgIHZhciBiID0gSFsxXTtcblx0ICAgICAgICAgICAgdmFyIGMgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgZCA9IEhbM107XG5cdCAgICAgICAgICAgIHZhciBlID0gSFs0XTtcblx0ICAgICAgICAgICAgdmFyIGYgPSBIWzVdO1xuXHQgICAgICAgICAgICB2YXIgZyA9IEhbNl07XG5cdCAgICAgICAgICAgIHZhciBoID0gSFs3XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChpIDwgMTYpIHtcblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gTVtvZmZzZXQgKyBpXSB8IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4ID0gV1tpIC0gMTVdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTAgID0gKChnYW1tYTB4IDw8IDI1KSB8IChnYW1tYTB4ID4+PiA3KSkgIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZ2FtbWEweCA8PCAxNCkgfCAoZ2FtbWEweCA+Pj4gMTgpKSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdhbW1hMHggPj4+IDMpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXggPSBXW2kgLSAyXTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExICA9ICgoZ2FtbWExeCA8PCAxNSkgfCAoZ2FtbWExeCA+Pj4gMTcpKSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGdhbW1hMXggPDwgMTMpIHwgKGdhbW1hMXggPj4+IDE5KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYW1tYTF4ID4+PiAxMCk7XG5cblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gZ2FtbWEwICsgV1tpIC0gN10gKyBnYW1tYTEgKyBXW2kgLSAxNl07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIHZhciBjaCAgPSAoZSAmIGYpIF4gKH5lICYgZyk7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFqID0gKGEgJiBiKSBeIChhICYgYykgXiAoYiAmIGMpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWEwID0gKChhIDw8IDMwKSB8IChhID4+PiAyKSkgXiAoKGEgPDwgMTkpIHwgKGEgPj4+IDEzKSkgXiAoKGEgPDwgMTApIHwgKGEgPj4+IDIyKSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWExID0gKChlIDw8IDI2KSB8IChlID4+PiA2KSkgXiAoKGUgPDwgMjEpIHwgKGUgPj4+IDExKSkgXiAoKGUgPDwgNykgIHwgKGUgPj4+IDI1KSk7XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbaV0gKyBXW2ldO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyID0gc2lnbWEwICsgbWFqO1xuXG5cdCAgICAgICAgICAgICAgICBoID0gZztcblx0ICAgICAgICAgICAgICAgIGcgPSBmO1xuXHQgICAgICAgICAgICAgICAgZiA9IGU7XG5cdCAgICAgICAgICAgICAgICBlID0gKGQgKyB0MSkgfCAwO1xuXHQgICAgICAgICAgICAgICAgZCA9IGM7XG5cdCAgICAgICAgICAgICAgICBjID0gYjtcblx0ICAgICAgICAgICAgICAgIGIgPSBhO1xuXHQgICAgICAgICAgICAgICAgYSA9ICh0MSArIHQyKSB8IDA7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFs0XSArIGUpIHwgMDtcblx0ICAgICAgICAgICAgSFs1XSA9IChIWzVdICsgZikgfCAwO1xuXHQgICAgICAgICAgICBIWzZdID0gKEhbNl0gKyBnKSB8IDA7XG5cdCAgICAgICAgICAgIEhbN10gPSAoSFs3XSArIGgpIHwgMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjU2KCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEyNTYod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEyNTYgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEEyNTYpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTI1NihtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEyNTYgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMjU2KTtcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBMjU2O1xuXG59KSk7IiwiKGZ1bmN0aW9uKCl7XG5cbiAgICAvLyBDb3B5cmlnaHQgKGMpIDIwMDUgIFRvbSBXdVxuICAgIC8vIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gICAgLy8gU2VlIFwiTElDRU5TRVwiIGZvciBkZXRhaWxzLlxuXG4gICAgLy8gQmFzaWMgSmF2YVNjcmlwdCBCTiBsaWJyYXJ5IC0gc3Vic2V0IHVzZWZ1bCBmb3IgUlNBIGVuY3J5cHRpb24uXG5cbiAgICAvLyBCaXRzIHBlciBkaWdpdFxuICAgIHZhciBkYml0cztcblxuICAgIC8vIEphdmFTY3JpcHQgZW5naW5lIGFuYWx5c2lzXG4gICAgdmFyIGNhbmFyeSA9IDB4ZGVhZGJlZWZjYWZlO1xuICAgIHZhciBqX2xtID0gKChjYW5hcnkmMHhmZmZmZmYpPT0weGVmY2FmZSk7XG5cbiAgICAvLyAocHVibGljKSBDb25zdHJ1Y3RvclxuICAgIGZ1bmN0aW9uIEJpZ0ludGVnZXIoYSxiLGMpIHtcbiAgICAgIGlmKGEgIT0gbnVsbClcbiAgICAgICAgaWYoXCJudW1iZXJcIiA9PSB0eXBlb2YgYSkgdGhpcy5mcm9tTnVtYmVyKGEsYixjKTtcbiAgICAgICAgZWxzZSBpZihiID09IG51bGwgJiYgXCJzdHJpbmdcIiAhPSB0eXBlb2YgYSkgdGhpcy5mcm9tU3RyaW5nKGEsMjU2KTtcbiAgICAgICAgZWxzZSB0aGlzLmZyb21TdHJpbmcoYSxiKTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gbmV3LCB1bnNldCBCaWdJbnRlZ2VyXG4gICAgZnVuY3Rpb24gbmJpKCkgeyByZXR1cm4gbmV3IEJpZ0ludGVnZXIobnVsbCk7IH1cblxuICAgIC8vIGFtOiBDb21wdXRlIHdfaiArPSAoeCp0aGlzX2kpLCBwcm9wYWdhdGUgY2FycmllcyxcbiAgICAvLyBjIGlzIGluaXRpYWwgY2FycnksIHJldHVybnMgZmluYWwgY2FycnkuXG4gICAgLy8gYyA8IDMqZHZhbHVlLCB4IDwgMipkdmFsdWUsIHRoaXNfaSA8IGR2YWx1ZVxuICAgIC8vIFdlIG5lZWQgdG8gc2VsZWN0IHRoZSBmYXN0ZXN0IG9uZSB0aGF0IHdvcmtzIGluIHRoaXMgZW52aXJvbm1lbnQuXG5cbiAgICAvLyBhbTE6IHVzZSBhIHNpbmdsZSBtdWx0IGFuZCBkaXZpZGUgdG8gZ2V0IHRoZSBoaWdoIGJpdHMsXG4gICAgLy8gbWF4IGRpZ2l0IGJpdHMgc2hvdWxkIGJlIDI2IGJlY2F1c2VcbiAgICAvLyBtYXggaW50ZXJuYWwgdmFsdWUgPSAyKmR2YWx1ZV4yLTIqZHZhbHVlICg8IDJeNTMpXG4gICAgZnVuY3Rpb24gYW0xKGkseCx3LGosYyxuKSB7XG4gICAgICB3aGlsZSgtLW4gPj0gMCkge1xuICAgICAgICB2YXIgdiA9IHgqdGhpc1tpKytdK3dbal0rYztcbiAgICAgICAgYyA9IE1hdGguZmxvb3Iodi8weDQwMDAwMDApO1xuICAgICAgICB3W2orK10gPSB2JjB4M2ZmZmZmZjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICAvLyBhbTIgYXZvaWRzIGEgYmlnIG11bHQtYW5kLWV4dHJhY3QgY29tcGxldGVseS5cbiAgICAvLyBNYXggZGlnaXQgYml0cyBzaG91bGQgYmUgPD0gMzAgYmVjYXVzZSB3ZSBkbyBiaXR3aXNlIG9wc1xuICAgIC8vIG9uIHZhbHVlcyB1cCB0byAyKmhkdmFsdWVeMi1oZHZhbHVlLTEgKDwgMl4zMSlcbiAgICBmdW5jdGlvbiBhbTIoaSx4LHcsaixjLG4pIHtcbiAgICAgIHZhciB4bCA9IHgmMHg3ZmZmLCB4aCA9IHg+PjE1O1xuICAgICAgd2hpbGUoLS1uID49IDApIHtcbiAgICAgICAgdmFyIGwgPSB0aGlzW2ldJjB4N2ZmZjtcbiAgICAgICAgdmFyIGggPSB0aGlzW2krK10+PjE1O1xuICAgICAgICB2YXIgbSA9IHhoKmwraCp4bDtcbiAgICAgICAgbCA9IHhsKmwrKChtJjB4N2ZmZik8PDE1KSt3W2pdKyhjJjB4M2ZmZmZmZmYpO1xuICAgICAgICBjID0gKGw+Pj4zMCkrKG0+Pj4xNSkreGgqaCsoYz4+PjMwKTtcbiAgICAgICAgd1tqKytdID0gbCYweDNmZmZmZmZmO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIC8vIEFsdGVybmF0ZWx5LCBzZXQgbWF4IGRpZ2l0IGJpdHMgdG8gMjggc2luY2Ugc29tZVxuICAgIC8vIGJyb3dzZXJzIHNsb3cgZG93biB3aGVuIGRlYWxpbmcgd2l0aCAzMi1iaXQgbnVtYmVycy5cbiAgICBmdW5jdGlvbiBhbTMoaSx4LHcsaixjLG4pIHtcbiAgICAgIHZhciB4bCA9IHgmMHgzZmZmLCB4aCA9IHg+PjE0O1xuICAgICAgd2hpbGUoLS1uID49IDApIHtcbiAgICAgICAgdmFyIGwgPSB0aGlzW2ldJjB4M2ZmZjtcbiAgICAgICAgdmFyIGggPSB0aGlzW2krK10+PjE0O1xuICAgICAgICB2YXIgbSA9IHhoKmwraCp4bDtcbiAgICAgICAgbCA9IHhsKmwrKChtJjB4M2ZmZik8PDE0KSt3W2pdK2M7XG4gICAgICAgIGMgPSAobD4+MjgpKyhtPj4xNCkreGgqaDtcbiAgICAgICAgd1tqKytdID0gbCYweGZmZmZmZmY7XG4gICAgICB9XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgdmFyIGluQnJvd3NlciA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG4gICAgaWYoaW5Ccm93c2VyICYmIGpfbG0gJiYgKG5hdmlnYXRvci5hcHBOYW1lID09IFwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCIpKSB7XG4gICAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbSA9IGFtMjtcbiAgICAgIGRiaXRzID0gMzA7XG4gICAgfVxuICAgIGVsc2UgaWYoaW5Ccm93c2VyICYmIGpfbG0gJiYgKG5hdmlnYXRvci5hcHBOYW1lICE9IFwiTmV0c2NhcGVcIikpIHtcbiAgICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFtID0gYW0xO1xuICAgICAgZGJpdHMgPSAyNjtcbiAgICB9XG4gICAgZWxzZSB7IC8vIE1vemlsbGEvTmV0c2NhcGUgc2VlbXMgdG8gcHJlZmVyIGFtM1xuICAgICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYW0gPSBhbTM7XG4gICAgICBkYml0cyA9IDI4O1xuICAgIH1cblxuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkRCID0gZGJpdHM7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuRE0gPSAoKDE8PGRiaXRzKS0xKTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5EViA9ICgxPDxkYml0cyk7XG5cbiAgICB2YXIgQklfRlAgPSA1MjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5GViA9IE1hdGgucG93KDIsQklfRlApO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkYxID0gQklfRlAtZGJpdHM7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuRjIgPSAyKmRiaXRzLUJJX0ZQO1xuXG4gICAgLy8gRGlnaXQgY29udmVyc2lvbnNcbiAgICB2YXIgQklfUk0gPSBcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiO1xuICAgIHZhciBCSV9SQyA9IG5ldyBBcnJheSgpO1xuICAgIHZhciBycix2djtcbiAgICByciA9IFwiMFwiLmNoYXJDb2RlQXQoMCk7XG4gICAgZm9yKHZ2ID0gMDsgdnYgPD0gOTsgKyt2dikgQklfUkNbcnIrK10gPSB2djtcbiAgICByciA9IFwiYVwiLmNoYXJDb2RlQXQoMCk7XG4gICAgZm9yKHZ2ID0gMTA7IHZ2IDwgMzY7ICsrdnYpIEJJX1JDW3JyKytdID0gdnY7XG4gICAgcnIgPSBcIkFcIi5jaGFyQ29kZUF0KDApO1xuICAgIGZvcih2diA9IDEwOyB2diA8IDM2OyArK3Z2KSBCSV9SQ1tycisrXSA9IHZ2O1xuXG4gICAgZnVuY3Rpb24gaW50MmNoYXIobikgeyByZXR1cm4gQklfUk0uY2hhckF0KG4pOyB9XG4gICAgZnVuY3Rpb24gaW50QXQocyxpKSB7XG4gICAgICB2YXIgYyA9IEJJX1JDW3MuY2hhckNvZGVBdChpKV07XG4gICAgICByZXR1cm4gKGM9PW51bGwpPy0xOmM7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgY29weSB0aGlzIHRvIHJcbiAgICBmdW5jdGlvbiBibnBDb3B5VG8ocikge1xuICAgICAgZm9yKHZhciBpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSByW2ldID0gdGhpc1tpXTtcbiAgICAgIHIudCA9IHRoaXMudDtcbiAgICAgIHIucyA9IHRoaXMucztcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBzZXQgZnJvbSBpbnRlZ2VyIHZhbHVlIHgsIC1EViA8PSB4IDwgRFZcbiAgICBmdW5jdGlvbiBibnBGcm9tSW50KHgpIHtcbiAgICAgIHRoaXMudCA9IDE7XG4gICAgICB0aGlzLnMgPSAoeDwwKT8tMTowO1xuICAgICAgaWYoeCA+IDApIHRoaXNbMF0gPSB4O1xuICAgICAgZWxzZSBpZih4IDwgLTEpIHRoaXNbMF0gPSB4K3RoaXMuRFY7XG4gICAgICBlbHNlIHRoaXMudCA9IDA7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIGJpZ2ludCBpbml0aWFsaXplZCB0byB2YWx1ZVxuICAgIGZ1bmN0aW9uIG5idihpKSB7IHZhciByID0gbmJpKCk7IHIuZnJvbUludChpKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHNldCBmcm9tIHN0cmluZyBhbmQgcmFkaXhcbiAgICBmdW5jdGlvbiBibnBGcm9tU3RyaW5nKHMsYikge1xuICAgICAgdmFyIGs7XG4gICAgICBpZihiID09IDE2KSBrID0gNDtcbiAgICAgIGVsc2UgaWYoYiA9PSA4KSBrID0gMztcbiAgICAgIGVsc2UgaWYoYiA9PSAyNTYpIGsgPSA4OyAvLyBieXRlIGFycmF5XG4gICAgICBlbHNlIGlmKGIgPT0gMikgayA9IDE7XG4gICAgICBlbHNlIGlmKGIgPT0gMzIpIGsgPSA1O1xuICAgICAgZWxzZSBpZihiID09IDQpIGsgPSAyO1xuICAgICAgZWxzZSB7IHRoaXMuZnJvbVJhZGl4KHMsYik7IHJldHVybjsgfVxuICAgICAgdGhpcy50ID0gMDtcbiAgICAgIHRoaXMucyA9IDA7XG4gICAgICB2YXIgaSA9IHMubGVuZ3RoLCBtaSA9IGZhbHNlLCBzaCA9IDA7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkge1xuICAgICAgICB2YXIgeCA9IChrPT04KT9zW2ldJjB4ZmY6aW50QXQocyxpKTtcbiAgICAgICAgaWYoeCA8IDApIHtcbiAgICAgICAgICBpZihzLmNoYXJBdChpKSA9PSBcIi1cIikgbWkgPSB0cnVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG1pID0gZmFsc2U7XG4gICAgICAgIGlmKHNoID09IDApXG4gICAgICAgICAgdGhpc1t0aGlzLnQrK10gPSB4O1xuICAgICAgICBlbHNlIGlmKHNoK2sgPiB0aGlzLkRCKSB7XG4gICAgICAgICAgdGhpc1t0aGlzLnQtMV0gfD0gKHgmKCgxPDwodGhpcy5EQi1zaCkpLTEpKTw8c2g7XG4gICAgICAgICAgdGhpc1t0aGlzLnQrK10gPSAoeD4+KHRoaXMuREItc2gpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpc1t0aGlzLnQtMV0gfD0geDw8c2g7XG4gICAgICAgIHNoICs9IGs7XG4gICAgICAgIGlmKHNoID49IHRoaXMuREIpIHNoIC09IHRoaXMuREI7XG4gICAgICB9XG4gICAgICBpZihrID09IDggJiYgKHNbMF0mMHg4MCkgIT0gMCkge1xuICAgICAgICB0aGlzLnMgPSAtMTtcbiAgICAgICAgaWYoc2ggPiAwKSB0aGlzW3RoaXMudC0xXSB8PSAoKDE8PCh0aGlzLkRCLXNoKSktMSk8PHNoO1xuICAgICAgfVxuICAgICAgdGhpcy5jbGFtcCgpO1xuICAgICAgaWYobWkpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGNsYW1wIG9mZiBleGNlc3MgaGlnaCB3b3Jkc1xuICAgIGZ1bmN0aW9uIGJucENsYW1wKCkge1xuICAgICAgdmFyIGMgPSB0aGlzLnMmdGhpcy5ETTtcbiAgICAgIHdoaWxlKHRoaXMudCA+IDAgJiYgdGhpc1t0aGlzLnQtMV0gPT0gYykgLS10aGlzLnQ7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBpbiBnaXZlbiByYWRpeFxuICAgIGZ1bmN0aW9uIGJuVG9TdHJpbmcoYikge1xuICAgICAgaWYodGhpcy5zIDwgMCkgcmV0dXJuIFwiLVwiK3RoaXMubmVnYXRlKCkudG9TdHJpbmcoYik7XG4gICAgICB2YXIgaztcbiAgICAgIGlmKGIgPT0gMTYpIGsgPSA0O1xuICAgICAgZWxzZSBpZihiID09IDgpIGsgPSAzO1xuICAgICAgZWxzZSBpZihiID09IDIpIGsgPSAxO1xuICAgICAgZWxzZSBpZihiID09IDMyKSBrID0gNTtcbiAgICAgIGVsc2UgaWYoYiA9PSA0KSBrID0gMjtcbiAgICAgIGVsc2UgcmV0dXJuIHRoaXMudG9SYWRpeChiKTtcbiAgICAgIHZhciBrbSA9ICgxPDxrKS0xLCBkLCBtID0gZmFsc2UsIHIgPSBcIlwiLCBpID0gdGhpcy50O1xuICAgICAgdmFyIHAgPSB0aGlzLkRCLShpKnRoaXMuREIpJWs7XG4gICAgICBpZihpLS0gPiAwKSB7XG4gICAgICAgIGlmKHAgPCB0aGlzLkRCICYmIChkID0gdGhpc1tpXT4+cCkgPiAwKSB7IG0gPSB0cnVlOyByID0gaW50MmNoYXIoZCk7IH1cbiAgICAgICAgd2hpbGUoaSA+PSAwKSB7XG4gICAgICAgICAgaWYocCA8IGspIHtcbiAgICAgICAgICAgIGQgPSAodGhpc1tpXSYoKDE8PHApLTEpKTw8KGstcCk7XG4gICAgICAgICAgICBkIHw9IHRoaXNbLS1pXT4+KHArPXRoaXMuREItayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZCA9ICh0aGlzW2ldPj4ocC09aykpJmttO1xuICAgICAgICAgICAgaWYocCA8PSAwKSB7IHAgKz0gdGhpcy5EQjsgLS1pOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGQgPiAwKSBtID0gdHJ1ZTtcbiAgICAgICAgICBpZihtKSByICs9IGludDJjaGFyKGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbT9yOlwiMFwiO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIC10aGlzXG4gICAgZnVuY3Rpb24gYm5OZWdhdGUoKSB7IHZhciByID0gbmJpKCk7IEJpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgfHRoaXN8XG4gICAgZnVuY3Rpb24gYm5BYnMoKSB7IHJldHVybiAodGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpczsgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuICsgaWYgdGhpcyA+IGEsIC0gaWYgdGhpcyA8IGEsIDAgaWYgZXF1YWxcbiAgICBmdW5jdGlvbiBibkNvbXBhcmVUbyhhKSB7XG4gICAgICB2YXIgciA9IHRoaXMucy1hLnM7XG4gICAgICBpZihyICE9IDApIHJldHVybiByO1xuICAgICAgdmFyIGkgPSB0aGlzLnQ7XG4gICAgICByID0gaS1hLnQ7XG4gICAgICBpZihyICE9IDApIHJldHVybiAodGhpcy5zPDApPy1yOnI7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkgaWYoKHI9dGhpc1tpXS1hW2ldKSAhPSAwKSByZXR1cm4gcjtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgYml0IGxlbmd0aCBvZiB0aGUgaW50ZWdlciB4XG4gICAgZnVuY3Rpb24gbmJpdHMoeCkge1xuICAgICAgdmFyIHIgPSAxLCB0O1xuICAgICAgaWYoKHQ9eD4+PjE2KSAhPSAwKSB7IHggPSB0OyByICs9IDE2OyB9XG4gICAgICBpZigodD14Pj44KSAhPSAwKSB7IHggPSB0OyByICs9IDg7IH1cbiAgICAgIGlmKCh0PXg+PjQpICE9IDApIHsgeCA9IHQ7IHIgKz0gNDsgfVxuICAgICAgaWYoKHQ9eD4+MikgIT0gMCkgeyB4ID0gdDsgciArPSAyOyB9XG4gICAgICBpZigodD14Pj4xKSAhPSAwKSB7IHggPSB0OyByICs9IDE7IH1cbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gXCJ0aGlzXCJcbiAgICBmdW5jdGlvbiBibkJpdExlbmd0aCgpIHtcbiAgICAgIGlmKHRoaXMudCA8PSAwKSByZXR1cm4gMDtcbiAgICAgIHJldHVybiB0aGlzLkRCKih0aGlzLnQtMSkrbmJpdHModGhpc1t0aGlzLnQtMV1eKHRoaXMucyZ0aGlzLkRNKSk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPDwgbipEQlxuICAgIGZ1bmN0aW9uIGJucERMU2hpZnRUbyhuLHIpIHtcbiAgICAgIHZhciBpO1xuICAgICAgZm9yKGkgPSB0aGlzLnQtMTsgaSA+PSAwOyAtLWkpIHJbaStuXSA9IHRoaXNbaV07XG4gICAgICBmb3IoaSA9IG4tMTsgaSA+PSAwOyAtLWkpIHJbaV0gPSAwO1xuICAgICAgci50ID0gdGhpcy50K247XG4gICAgICByLnMgPSB0aGlzLnM7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPj4gbipEQlxuICAgIGZ1bmN0aW9uIGJucERSU2hpZnRUbyhuLHIpIHtcbiAgICAgIGZvcih2YXIgaSA9IG47IGkgPCB0aGlzLnQ7ICsraSkgcltpLW5dID0gdGhpc1tpXTtcbiAgICAgIHIudCA9IE1hdGgubWF4KHRoaXMudC1uLDApO1xuICAgICAgci5zID0gdGhpcy5zO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIDw8IG5cbiAgICBmdW5jdGlvbiBibnBMU2hpZnRUbyhuLHIpIHtcbiAgICAgIHZhciBicyA9IG4ldGhpcy5EQjtcbiAgICAgIHZhciBjYnMgPSB0aGlzLkRCLWJzO1xuICAgICAgdmFyIGJtID0gKDE8PGNicyktMTtcbiAgICAgIHZhciBkcyA9IE1hdGguZmxvb3Iobi90aGlzLkRCKSwgYyA9ICh0aGlzLnM8PGJzKSZ0aGlzLkRNLCBpO1xuICAgICAgZm9yKGkgPSB0aGlzLnQtMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgcltpK2RzKzFdID0gKHRoaXNbaV0+PmNicyl8YztcbiAgICAgICAgYyA9ICh0aGlzW2ldJmJtKTw8YnM7XG4gICAgICB9XG4gICAgICBmb3IoaSA9IGRzLTE7IGkgPj0gMDsgLS1pKSByW2ldID0gMDtcbiAgICAgIHJbZHNdID0gYztcbiAgICAgIHIudCA9IHRoaXMudCtkcysxO1xuICAgICAgci5zID0gdGhpcy5zO1xuICAgICAgci5jbGFtcCgpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzID4+IG5cbiAgICBmdW5jdGlvbiBibnBSU2hpZnRUbyhuLHIpIHtcbiAgICAgIHIucyA9IHRoaXMucztcbiAgICAgIHZhciBkcyA9IE1hdGguZmxvb3Iobi90aGlzLkRCKTtcbiAgICAgIGlmKGRzID49IHRoaXMudCkgeyByLnQgPSAwOyByZXR1cm47IH1cbiAgICAgIHZhciBicyA9IG4ldGhpcy5EQjtcbiAgICAgIHZhciBjYnMgPSB0aGlzLkRCLWJzO1xuICAgICAgdmFyIGJtID0gKDE8PGJzKS0xO1xuICAgICAgclswXSA9IHRoaXNbZHNdPj5icztcbiAgICAgIGZvcih2YXIgaSA9IGRzKzE7IGkgPCB0aGlzLnQ7ICsraSkge1xuICAgICAgICByW2ktZHMtMV0gfD0gKHRoaXNbaV0mYm0pPDxjYnM7XG4gICAgICAgIHJbaS1kc10gPSB0aGlzW2ldPj5icztcbiAgICAgIH1cbiAgICAgIGlmKGJzID4gMCkgclt0aGlzLnQtZHMtMV0gfD0gKHRoaXMucyZibSk8PGNicztcbiAgICAgIHIudCA9IHRoaXMudC1kcztcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyAtIGFcbiAgICBmdW5jdGlvbiBibnBTdWJUbyhhLHIpIHtcbiAgICAgIHZhciBpID0gMCwgYyA9IDAsIG0gPSBNYXRoLm1pbihhLnQsdGhpcy50KTtcbiAgICAgIHdoaWxlKGkgPCBtKSB7XG4gICAgICAgIGMgKz0gdGhpc1tpXS1hW2ldO1xuICAgICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICB9XG4gICAgICBpZihhLnQgPCB0aGlzLnQpIHtcbiAgICAgICAgYyAtPSBhLnM7XG4gICAgICAgIHdoaWxlKGkgPCB0aGlzLnQpIHtcbiAgICAgICAgICBjICs9IHRoaXNbaV07XG4gICAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICAgIH1cbiAgICAgICAgYyArPSB0aGlzLnM7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgYyArPSB0aGlzLnM7XG4gICAgICAgIHdoaWxlKGkgPCBhLnQpIHtcbiAgICAgICAgICBjIC09IGFbaV07XG4gICAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICAgIH1cbiAgICAgICAgYyAtPSBhLnM7XG4gICAgICB9XG4gICAgICByLnMgPSAoYzwwKT8tMTowO1xuICAgICAgaWYoYyA8IC0xKSByW2krK10gPSB0aGlzLkRWK2M7XG4gICAgICBlbHNlIGlmKGMgPiAwKSByW2krK10gPSBjO1xuICAgICAgci50ID0gaTtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyAqIGEsIHIgIT0gdGhpcyxhIChIQUMgMTQuMTIpXG4gICAgLy8gXCJ0aGlzXCIgc2hvdWxkIGJlIHRoZSBsYXJnZXIgb25lIGlmIGFwcHJvcHJpYXRlLlxuICAgIGZ1bmN0aW9uIGJucE11bHRpcGx5VG8oYSxyKSB7XG4gICAgICB2YXIgeCA9IHRoaXMuYWJzKCksIHkgPSBhLmFicygpO1xuICAgICAgdmFyIGkgPSB4LnQ7XG4gICAgICByLnQgPSBpK3kudDtcbiAgICAgIHdoaWxlKC0taSA+PSAwKSByW2ldID0gMDtcbiAgICAgIGZvcihpID0gMDsgaSA8IHkudDsgKytpKSByW2kreC50XSA9IHguYW0oMCx5W2ldLHIsaSwwLHgudCk7XG4gICAgICByLnMgPSAwO1xuICAgICAgci5jbGFtcCgpO1xuICAgICAgaWYodGhpcy5zICE9IGEucykgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHIscik7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXNeMiwgciAhPSB0aGlzIChIQUMgMTQuMTYpXG4gICAgZnVuY3Rpb24gYm5wU3F1YXJlVG8ocikge1xuICAgICAgdmFyIHggPSB0aGlzLmFicygpO1xuICAgICAgdmFyIGkgPSByLnQgPSAyKngudDtcbiAgICAgIHdoaWxlKC0taSA+PSAwKSByW2ldID0gMDtcbiAgICAgIGZvcihpID0gMDsgaSA8IHgudC0xOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSB4LmFtKGkseFtpXSxyLDIqaSwwLDEpO1xuICAgICAgICBpZigocltpK3gudF0rPXguYW0oaSsxLDIqeFtpXSxyLDIqaSsxLGMseC50LWktMSkpID49IHguRFYpIHtcbiAgICAgICAgICByW2kreC50XSAtPSB4LkRWO1xuICAgICAgICAgIHJbaSt4LnQrMV0gPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihyLnQgPiAwKSByW3IudC0xXSArPSB4LmFtKGkseFtpXSxyLDIqaSwwLDEpO1xuICAgICAgci5zID0gMDtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBkaXZpZGUgdGhpcyBieSBtLCBxdW90aWVudCBhbmQgcmVtYWluZGVyIHRvIHEsIHIgKEhBQyAxNC4yMClcbiAgICAvLyByICE9IHEsIHRoaXMgIT0gbS4gIHEgb3IgciBtYXkgYmUgbnVsbC5cbiAgICBmdW5jdGlvbiBibnBEaXZSZW1UbyhtLHEscikge1xuICAgICAgdmFyIHBtID0gbS5hYnMoKTtcbiAgICAgIGlmKHBtLnQgPD0gMCkgcmV0dXJuO1xuICAgICAgdmFyIHB0ID0gdGhpcy5hYnMoKTtcbiAgICAgIGlmKHB0LnQgPCBwbS50KSB7XG4gICAgICAgIGlmKHEgIT0gbnVsbCkgcS5mcm9tSW50KDApO1xuICAgICAgICBpZihyICE9IG51bGwpIHRoaXMuY29weVRvKHIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZihyID09IG51bGwpIHIgPSBuYmkoKTtcbiAgICAgIHZhciB5ID0gbmJpKCksIHRzID0gdGhpcy5zLCBtcyA9IG0ucztcbiAgICAgIHZhciBuc2ggPSB0aGlzLkRCLW5iaXRzKHBtW3BtLnQtMV0pOyAgIC8vIG5vcm1hbGl6ZSBtb2R1bHVzXG4gICAgICBpZihuc2ggPiAwKSB7IHBtLmxTaGlmdFRvKG5zaCx5KTsgcHQubFNoaWZ0VG8obnNoLHIpOyB9XG4gICAgICBlbHNlIHsgcG0uY29weVRvKHkpOyBwdC5jb3B5VG8ocik7IH1cbiAgICAgIHZhciB5cyA9IHkudDtcbiAgICAgIHZhciB5MCA9IHlbeXMtMV07XG4gICAgICBpZih5MCA9PSAwKSByZXR1cm47XG4gICAgICB2YXIgeXQgPSB5MCooMTw8dGhpcy5GMSkrKCh5cz4xKT95W3lzLTJdPj50aGlzLkYyOjApO1xuICAgICAgdmFyIGQxID0gdGhpcy5GVi95dCwgZDIgPSAoMTw8dGhpcy5GMSkveXQsIGUgPSAxPDx0aGlzLkYyO1xuICAgICAgdmFyIGkgPSByLnQsIGogPSBpLXlzLCB0ID0gKHE9PW51bGwpP25iaSgpOnE7XG4gICAgICB5LmRsU2hpZnRUbyhqLHQpO1xuICAgICAgaWYoci5jb21wYXJlVG8odCkgPj0gMCkge1xuICAgICAgICByW3IudCsrXSA9IDE7XG4gICAgICAgIHIuc3ViVG8odCxyKTtcbiAgICAgIH1cbiAgICAgIEJpZ0ludGVnZXIuT05FLmRsU2hpZnRUbyh5cyx0KTtcbiAgICAgIHQuc3ViVG8oeSx5KTsgIC8vIFwibmVnYXRpdmVcIiB5IHNvIHdlIGNhbiByZXBsYWNlIHN1YiB3aXRoIGFtIGxhdGVyXG4gICAgICB3aGlsZSh5LnQgPCB5cykgeVt5LnQrK10gPSAwO1xuICAgICAgd2hpbGUoLS1qID49IDApIHtcbiAgICAgICAgLy8gRXN0aW1hdGUgcXVvdGllbnQgZGlnaXRcbiAgICAgICAgdmFyIHFkID0gKHJbLS1pXT09eTApP3RoaXMuRE06TWF0aC5mbG9vcihyW2ldKmQxKyhyW2ktMV0rZSkqZDIpO1xuICAgICAgICBpZigocltpXSs9eS5hbSgwLHFkLHIsaiwwLHlzKSkgPCBxZCkgeyAgIC8vIFRyeSBpdCBvdXRcbiAgICAgICAgICB5LmRsU2hpZnRUbyhqLHQpO1xuICAgICAgICAgIHIuc3ViVG8odCxyKTtcbiAgICAgICAgICB3aGlsZShyW2ldIDwgLS1xZCkgci5zdWJUbyh0LHIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihxICE9IG51bGwpIHtcbiAgICAgICAgci5kclNoaWZ0VG8oeXMscSk7XG4gICAgICAgIGlmKHRzICE9IG1zKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8ocSxxKTtcbiAgICAgIH1cbiAgICAgIHIudCA9IHlzO1xuICAgICAgci5jbGFtcCgpO1xuICAgICAgaWYobnNoID4gMCkgci5yU2hpZnRUbyhuc2gscik7IC8vIERlbm9ybWFsaXplIHJlbWFpbmRlclxuICAgICAgaWYodHMgPCAwKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8ocixyKTtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIG1vZCBhXG4gICAgZnVuY3Rpb24gYm5Nb2QoYSkge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIHRoaXMuYWJzKCkuZGl2UmVtVG8oYSxudWxsLHIpO1xuICAgICAgaWYodGhpcy5zIDwgMCAmJiByLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pID4gMCkgYS5zdWJUbyhyLHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gTW9kdWxhciByZWR1Y3Rpb24gdXNpbmcgXCJjbGFzc2ljXCIgYWxnb3JpdGhtXG4gICAgZnVuY3Rpb24gQ2xhc3NpYyhtKSB7IHRoaXMubSA9IG07IH1cbiAgICBmdW5jdGlvbiBjQ29udmVydCh4KSB7XG4gICAgICBpZih4LnMgPCAwIHx8IHguY29tcGFyZVRvKHRoaXMubSkgPj0gMCkgcmV0dXJuIHgubW9kKHRoaXMubSk7XG4gICAgICBlbHNlIHJldHVybiB4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjUmV2ZXJ0KHgpIHsgcmV0dXJuIHg7IH1cbiAgICBmdW5jdGlvbiBjUmVkdWNlKHgpIHsgeC5kaXZSZW1Ubyh0aGlzLm0sbnVsbCx4KTsgfVxuICAgIGZ1bmN0aW9uIGNNdWxUbyh4LHkscikgeyB4Lm11bHRpcGx5VG8oeSxyKTsgdGhpcy5yZWR1Y2Uocik7IH1cbiAgICBmdW5jdGlvbiBjU3FyVG8oeCxyKSB7IHguc3F1YXJlVG8ocik7IHRoaXMucmVkdWNlKHIpOyB9XG5cbiAgICBDbGFzc2ljLnByb3RvdHlwZS5jb252ZXJ0ID0gY0NvbnZlcnQ7XG4gICAgQ2xhc3NpYy5wcm90b3R5cGUucmV2ZXJ0ID0gY1JldmVydDtcbiAgICBDbGFzc2ljLnByb3RvdHlwZS5yZWR1Y2UgPSBjUmVkdWNlO1xuICAgIENsYXNzaWMucHJvdG90eXBlLm11bFRvID0gY011bFRvO1xuICAgIENsYXNzaWMucHJvdG90eXBlLnNxclRvID0gY1NxclRvO1xuXG4gICAgLy8gKHByb3RlY3RlZCkgcmV0dXJuIFwiLTEvdGhpcyAlIDJeREJcIjsgdXNlZnVsIGZvciBNb250LiByZWR1Y3Rpb25cbiAgICAvLyBqdXN0aWZpY2F0aW9uOlxuICAgIC8vICAgICAgICAgeHkgPT0gMSAobW9kIG0pXG4gICAgLy8gICAgICAgICB4eSA9ICAxK2ttXG4gICAgLy8gICB4eSgyLXh5KSA9ICgxK2ttKSgxLWttKVxuICAgIC8vIHhbeSgyLXh5KV0gPSAxLWteMm1eMlxuICAgIC8vIHhbeSgyLXh5KV0gPT0gMSAobW9kIG1eMilcbiAgICAvLyBpZiB5IGlzIDEveCBtb2QgbSwgdGhlbiB5KDIteHkpIGlzIDEveCBtb2QgbV4yXG4gICAgLy8gc2hvdWxkIHJlZHVjZSB4IGFuZCB5KDIteHkpIGJ5IG1eMiBhdCBlYWNoIHN0ZXAgdG8ga2VlcCBzaXplIGJvdW5kZWQuXG4gICAgLy8gSlMgbXVsdGlwbHkgXCJvdmVyZmxvd3NcIiBkaWZmZXJlbnRseSBmcm9tIEMvQysrLCBzbyBjYXJlIGlzIG5lZWRlZCBoZXJlLlxuICAgIGZ1bmN0aW9uIGJucEludkRpZ2l0KCkge1xuICAgICAgaWYodGhpcy50IDwgMSkgcmV0dXJuIDA7XG4gICAgICB2YXIgeCA9IHRoaXNbMF07XG4gICAgICBpZigoeCYxKSA9PSAwKSByZXR1cm4gMDtcbiAgICAgIHZhciB5ID0geCYzOyAgICAgICAvLyB5ID09IDEveCBtb2QgMl4yXG4gICAgICB5ID0gKHkqKDItKHgmMHhmKSp5KSkmMHhmOyAvLyB5ID09IDEveCBtb2QgMl40XG4gICAgICB5ID0gKHkqKDItKHgmMHhmZikqeSkpJjB4ZmY7ICAgLy8geSA9PSAxL3ggbW9kIDJeOFxuICAgICAgeSA9ICh5KigyLSgoKHgmMHhmZmZmKSp5KSYweGZmZmYpKSkmMHhmZmZmOyAgICAvLyB5ID09IDEveCBtb2QgMl4xNlxuICAgICAgLy8gbGFzdCBzdGVwIC0gY2FsY3VsYXRlIGludmVyc2UgbW9kIERWIGRpcmVjdGx5O1xuICAgICAgLy8gYXNzdW1lcyAxNiA8IERCIDw9IDMyIGFuZCBhc3N1bWVzIGFiaWxpdHkgdG8gaGFuZGxlIDQ4LWJpdCBpbnRzXG4gICAgICB5ID0gKHkqKDIteCp5JXRoaXMuRFYpKSV0aGlzLkRWOyAgICAgICAvLyB5ID09IDEveCBtb2QgMl5kYml0c1xuICAgICAgLy8gd2UgcmVhbGx5IHdhbnQgdGhlIG5lZ2F0aXZlIGludmVyc2UsIGFuZCAtRFYgPCB5IDwgRFZcbiAgICAgIHJldHVybiAoeT4wKT90aGlzLkRWLXk6LXk7XG4gICAgfVxuXG4gICAgLy8gTW9udGdvbWVyeSByZWR1Y3Rpb25cbiAgICBmdW5jdGlvbiBNb250Z29tZXJ5KG0pIHtcbiAgICAgIHRoaXMubSA9IG07XG4gICAgICB0aGlzLm1wID0gbS5pbnZEaWdpdCgpO1xuICAgICAgdGhpcy5tcGwgPSB0aGlzLm1wJjB4N2ZmZjtcbiAgICAgIHRoaXMubXBoID0gdGhpcy5tcD4+MTU7XG4gICAgICB0aGlzLnVtID0gKDE8PChtLkRCLTE1KSktMTtcbiAgICAgIHRoaXMubXQyID0gMiptLnQ7XG4gICAgfVxuXG4gICAgLy8geFIgbW9kIG1cbiAgICBmdW5jdGlvbiBtb250Q29udmVydCh4KSB7XG4gICAgICB2YXIgciA9IG5iaSgpO1xuICAgICAgeC5hYnMoKS5kbFNoaWZ0VG8odGhpcy5tLnQscik7XG4gICAgICByLmRpdlJlbVRvKHRoaXMubSxudWxsLHIpO1xuICAgICAgaWYoeC5zIDwgMCAmJiByLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pID4gMCkgdGhpcy5tLnN1YlRvKHIscik7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyB4L1IgbW9kIG1cbiAgICBmdW5jdGlvbiBtb250UmV2ZXJ0KHgpIHtcbiAgICAgIHZhciByID0gbmJpKCk7XG4gICAgICB4LmNvcHlUbyhyKTtcbiAgICAgIHRoaXMucmVkdWNlKHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8geCA9IHgvUiBtb2QgbSAoSEFDIDE0LjMyKVxuICAgIGZ1bmN0aW9uIG1vbnRSZWR1Y2UoeCkge1xuICAgICAgd2hpbGUoeC50IDw9IHRoaXMubXQyKSAvLyBwYWQgeCBzbyBhbSBoYXMgZW5vdWdoIHJvb20gbGF0ZXJcbiAgICAgICAgeFt4LnQrK10gPSAwO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMubS50OyArK2kpIHtcbiAgICAgICAgLy8gZmFzdGVyIHdheSBvZiBjYWxjdWxhdGluZyB1MCA9IHhbaV0qbXAgbW9kIERWXG4gICAgICAgIHZhciBqID0geFtpXSYweDdmZmY7XG4gICAgICAgIHZhciB1MCA9IChqKnRoaXMubXBsKygoKGoqdGhpcy5tcGgrKHhbaV0+PjE1KSp0aGlzLm1wbCkmdGhpcy51bSk8PDE1KSkmeC5ETTtcbiAgICAgICAgLy8gdXNlIGFtIHRvIGNvbWJpbmUgdGhlIG11bHRpcGx5LXNoaWZ0LWFkZCBpbnRvIG9uZSBjYWxsXG4gICAgICAgIGogPSBpK3RoaXMubS50O1xuICAgICAgICB4W2pdICs9IHRoaXMubS5hbSgwLHUwLHgsaSwwLHRoaXMubS50KTtcbiAgICAgICAgLy8gcHJvcGFnYXRlIGNhcnJ5XG4gICAgICAgIHdoaWxlKHhbal0gPj0geC5EVikgeyB4W2pdIC09IHguRFY7IHhbKytqXSsrOyB9XG4gICAgICB9XG4gICAgICB4LmNsYW1wKCk7XG4gICAgICB4LmRyU2hpZnRUbyh0aGlzLm0udCx4KTtcbiAgICAgIGlmKHguY29tcGFyZVRvKHRoaXMubSkgPj0gMCkgeC5zdWJUbyh0aGlzLm0seCk7XG4gICAgfVxuXG4gICAgLy8gciA9IFwieF4yL1IgbW9kIG1cIjsgeCAhPSByXG4gICAgZnVuY3Rpb24gbW9udFNxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4gICAgLy8gciA9IFwieHkvUiBtb2QgbVwiOyB4LHkgIT0gclxuICAgIGZ1bmN0aW9uIG1vbnRNdWxUbyh4LHkscikgeyB4Lm11bHRpcGx5VG8oeSxyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuICAgIE1vbnRnb21lcnkucHJvdG90eXBlLmNvbnZlcnQgPSBtb250Q29udmVydDtcbiAgICBNb250Z29tZXJ5LnByb3RvdHlwZS5yZXZlcnQgPSBtb250UmV2ZXJ0O1xuICAgIE1vbnRnb21lcnkucHJvdG90eXBlLnJlZHVjZSA9IG1vbnRSZWR1Y2U7XG4gICAgTW9udGdvbWVyeS5wcm90b3R5cGUubXVsVG8gPSBtb250TXVsVG87XG4gICAgTW9udGdvbWVyeS5wcm90b3R5cGUuc3FyVG8gPSBtb250U3FyVG87XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0cnVlIGlmZiB0aGlzIGlzIGV2ZW5cbiAgICBmdW5jdGlvbiBibnBJc0V2ZW4oKSB7IHJldHVybiAoKHRoaXMudD4wKT8odGhpc1swXSYxKTp0aGlzLnMpID09IDA7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHRoaXNeZSwgZSA8IDJeMzIsIGRvaW5nIHNxciBhbmQgbXVsIHdpdGggXCJyXCIgKEhBQyAxNC43OSlcbiAgICBmdW5jdGlvbiBibnBFeHAoZSx6KSB7XG4gICAgICBpZihlID4gMHhmZmZmZmZmZiB8fCBlIDwgMSkgcmV0dXJuIEJpZ0ludGVnZXIuT05FO1xuICAgICAgdmFyIHIgPSBuYmkoKSwgcjIgPSBuYmkoKSwgZyA9IHouY29udmVydCh0aGlzKSwgaSA9IG5iaXRzKGUpLTE7XG4gICAgICBnLmNvcHlUbyhyKTtcbiAgICAgIHdoaWxlKC0taSA+PSAwKSB7XG4gICAgICAgIHouc3FyVG8ocixyMik7XG4gICAgICAgIGlmKChlJigxPDxpKSkgPiAwKSB6Lm11bFRvKHIyLGcscik7XG4gICAgICAgIGVsc2UgeyB2YXIgdCA9IHI7IHIgPSByMjsgcjIgPSB0OyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gei5yZXZlcnQocik7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpc15lICUgbSwgMCA8PSBlIDwgMl4zMlxuICAgIGZ1bmN0aW9uIGJuTW9kUG93SW50KGUsbSkge1xuICAgICAgdmFyIHo7XG4gICAgICBpZihlIDwgMjU2IHx8IG0uaXNFdmVuKCkpIHogPSBuZXcgQ2xhc3NpYyhtKTsgZWxzZSB6ID0gbmV3IE1vbnRnb21lcnkobSk7XG4gICAgICByZXR1cm4gdGhpcy5leHAoZSx6KTtcbiAgICB9XG5cbiAgICAvLyBwcm90ZWN0ZWRcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jb3B5VG8gPSBibnBDb3B5VG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbUludCA9IGJucEZyb21JbnQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbVN0cmluZyA9IGJucEZyb21TdHJpbmc7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY2xhbXAgPSBibnBDbGFtcDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kbFNoaWZ0VG8gPSBibnBETFNoaWZ0VG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZHJTaGlmdFRvID0gYm5wRFJTaGlmdFRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmxTaGlmdFRvID0gYm5wTFNoaWZ0VG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuclNoaWZ0VG8gPSBibnBSU2hpZnRUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zdWJUbyA9IGJucFN1YlRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VG8gPSBibnBNdWx0aXBseVRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNxdWFyZVRvID0gYm5wU3F1YXJlVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2UmVtVG8gPSBibnBEaXZSZW1UbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5pbnZEaWdpdCA9IGJucEludkRpZ2l0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmlzRXZlbiA9IGJucElzRXZlbjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5leHAgPSBibnBFeHA7XG5cbiAgICAvLyBwdWJsaWNcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS50b1N0cmluZyA9IGJuVG9TdHJpbmc7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubmVnYXRlID0gYm5OZWdhdGU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYWJzID0gYm5BYnM7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY29tcGFyZVRvID0gYm5Db21wYXJlVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYml0TGVuZ3RoID0gYm5CaXRMZW5ndGg7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kID0gYm5Nb2Q7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93SW50ID0gYm5Nb2RQb3dJbnQ7XG5cbiAgICAvLyBcImNvbnN0YW50c1wiXG4gICAgQmlnSW50ZWdlci5aRVJPID0gbmJ2KDApO1xuICAgIEJpZ0ludGVnZXIuT05FID0gbmJ2KDEpO1xuXG4gICAgLy8gQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgIFRvbSBXdVxuICAgIC8vIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gICAgLy8gU2VlIFwiTElDRU5TRVwiIGZvciBkZXRhaWxzLlxuXG4gICAgLy8gRXh0ZW5kZWQgSmF2YVNjcmlwdCBCTiBmdW5jdGlvbnMsIHJlcXVpcmVkIGZvciBSU0EgcHJpdmF0ZSBvcHMuXG5cbiAgICAvLyBWZXJzaW9uIDEuMTogbmV3IEJpZ0ludGVnZXIoXCIwXCIsIDEwKSByZXR1cm5zIFwicHJvcGVyXCIgemVyb1xuICAgIC8vIFZlcnNpb24gMS4yOiBzcXVhcmUoKSBBUEksIGlzUHJvYmFibGVQcmltZSBmaXhcblxuICAgIC8vIChwdWJsaWMpXG4gICAgZnVuY3Rpb24gYm5DbG9uZSgpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5jb3B5VG8ocik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gdmFsdWUgYXMgaW50ZWdlclxuICAgIGZ1bmN0aW9uIGJuSW50VmFsdWUoKSB7XG4gICAgICBpZih0aGlzLnMgPCAwKSB7XG4gICAgICAgIGlmKHRoaXMudCA9PSAxKSByZXR1cm4gdGhpc1swXS10aGlzLkRWO1xuICAgICAgICBlbHNlIGlmKHRoaXMudCA9PSAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHRoaXMudCA9PSAxKSByZXR1cm4gdGhpc1swXTtcbiAgICAgIGVsc2UgaWYodGhpcy50ID09IDApIHJldHVybiAwO1xuICAgICAgLy8gYXNzdW1lcyAxNiA8IERCIDwgMzJcbiAgICAgIHJldHVybiAoKHRoaXNbMV0mKCgxPDwoMzItdGhpcy5EQikpLTEpKTw8dGhpcy5EQil8dGhpc1swXTtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gdmFsdWUgYXMgYnl0ZVxuICAgIGZ1bmN0aW9uIGJuQnl0ZVZhbHVlKCkgeyByZXR1cm4gKHRoaXMudD09MCk/dGhpcy5zOih0aGlzWzBdPDwyNCk+PjI0OyB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gdmFsdWUgYXMgc2hvcnQgKGFzc3VtZXMgREI+PTE2KVxuICAgIGZ1bmN0aW9uIGJuU2hvcnRWYWx1ZSgpIHsgcmV0dXJuICh0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MTYpPj4xNjsgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgcmV0dXJuIHggcy50LiByXnggPCBEVlxuICAgIGZ1bmN0aW9uIGJucENodW5rU2l6ZShyKSB7IHJldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKnRoaXMuREIvTWF0aC5sb2cocikpOyB9XG5cbiAgICAvLyAocHVibGljKSAwIGlmIHRoaXMgPT0gMCwgMSBpZiB0aGlzID4gMFxuICAgIGZ1bmN0aW9uIGJuU2lnTnVtKCkge1xuICAgICAgaWYodGhpcy5zIDwgMCkgcmV0dXJuIC0xO1xuICAgICAgZWxzZSBpZih0aGlzLnQgPD0gMCB8fCAodGhpcy50ID09IDEgJiYgdGhpc1swXSA8PSAwKSkgcmV0dXJuIDA7XG4gICAgICBlbHNlIHJldHVybiAxO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGNvbnZlcnQgdG8gcmFkaXggc3RyaW5nXG4gICAgZnVuY3Rpb24gYm5wVG9SYWRpeChiKSB7XG4gICAgICBpZihiID09IG51bGwpIGIgPSAxMDtcbiAgICAgIGlmKHRoaXMuc2lnbnVtKCkgPT0gMCB8fCBiIDwgMiB8fCBiID4gMzYpIHJldHVybiBcIjBcIjtcbiAgICAgIHZhciBjcyA9IHRoaXMuY2h1bmtTaXplKGIpO1xuICAgICAgdmFyIGEgPSBNYXRoLnBvdyhiLGNzKTtcbiAgICAgIHZhciBkID0gbmJ2KGEpLCB5ID0gbmJpKCksIHogPSBuYmkoKSwgciA9IFwiXCI7XG4gICAgICB0aGlzLmRpdlJlbVRvKGQseSx6KTtcbiAgICAgIHdoaWxlKHkuc2lnbnVtKCkgPiAwKSB7XG4gICAgICAgIHIgPSAoYSt6LmludFZhbHVlKCkpLnRvU3RyaW5nKGIpLnN1YnN0cigxKSArIHI7XG4gICAgICAgIHkuZGl2UmVtVG8oZCx5LHopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHouaW50VmFsdWUoKS50b1N0cmluZyhiKSArIHI7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgY29udmVydCBmcm9tIHJhZGl4IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGJucEZyb21SYWRpeChzLGIpIHtcbiAgICAgIHRoaXMuZnJvbUludCgwKTtcbiAgICAgIGlmKGIgPT0gbnVsbCkgYiA9IDEwO1xuICAgICAgdmFyIGNzID0gdGhpcy5jaHVua1NpemUoYik7XG4gICAgICB2YXIgZCA9IE1hdGgucG93KGIsY3MpLCBtaSA9IGZhbHNlLCBqID0gMCwgdyA9IDA7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgeCA9IGludEF0KHMsaSk7XG4gICAgICAgIGlmKHggPCAwKSB7XG4gICAgICAgICAgaWYocy5jaGFyQXQoaSkgPT0gXCItXCIgJiYgdGhpcy5zaWdudW0oKSA9PSAwKSBtaSA9IHRydWU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdyA9IGIqdyt4O1xuICAgICAgICBpZigrK2ogPj0gY3MpIHtcbiAgICAgICAgICB0aGlzLmRNdWx0aXBseShkKTtcbiAgICAgICAgICB0aGlzLmRBZGRPZmZzZXQodywwKTtcbiAgICAgICAgICBqID0gMDtcbiAgICAgICAgICB3ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoaiA+IDApIHtcbiAgICAgICAgdGhpcy5kTXVsdGlwbHkoTWF0aC5wb3coYixqKSk7XG4gICAgICAgIHRoaXMuZEFkZE9mZnNldCh3LDApO1xuICAgICAgfVxuICAgICAgaWYobWkpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGFsdGVybmF0ZSBjb25zdHJ1Y3RvclxuICAgIGZ1bmN0aW9uIGJucEZyb21OdW1iZXIoYSxiLGMpIHtcbiAgICAgIGlmKFwibnVtYmVyXCIgPT0gdHlwZW9mIGIpIHtcbiAgICAgICAgLy8gbmV3IEJpZ0ludGVnZXIoaW50LGludCxSTkcpXG4gICAgICAgIGlmKGEgPCAyKSB0aGlzLmZyb21JbnQoMSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMuZnJvbU51bWJlcihhLGMpO1xuICAgICAgICAgIGlmKCF0aGlzLnRlc3RCaXQoYS0xKSkgICAgLy8gZm9yY2UgTVNCIHNldFxuICAgICAgICAgICAgdGhpcy5iaXR3aXNlVG8oQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGEtMSksb3Bfb3IsdGhpcyk7XG4gICAgICAgICAgaWYodGhpcy5pc0V2ZW4oKSkgdGhpcy5kQWRkT2Zmc2V0KDEsMCk7IC8vIGZvcmNlIG9kZFxuICAgICAgICAgIHdoaWxlKCF0aGlzLmlzUHJvYmFibGVQcmltZShiKSkge1xuICAgICAgICAgICAgdGhpcy5kQWRkT2Zmc2V0KDIsMCk7XG4gICAgICAgICAgICBpZih0aGlzLmJpdExlbmd0aCgpID4gYSkgdGhpcy5zdWJUbyhCaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQoYS0xKSx0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBuZXcgQmlnSW50ZWdlcihpbnQsUk5HKVxuICAgICAgICB2YXIgeCA9IG5ldyBBcnJheSgpLCB0ID0gYSY3O1xuICAgICAgICB4Lmxlbmd0aCA9IChhPj4zKSsxO1xuICAgICAgICBiLm5leHRCeXRlcyh4KTtcbiAgICAgICAgaWYodCA+IDApIHhbMF0gJj0gKCgxPDx0KS0xKTsgZWxzZSB4WzBdID0gMDtcbiAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHgsMjU2KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAocHVibGljKSBjb252ZXJ0IHRvIGJpZ2VuZGlhbiBieXRlIGFycmF5XG4gICAgZnVuY3Rpb24gYm5Ub0J5dGVBcnJheSgpIHtcbiAgICAgIHZhciBpID0gdGhpcy50LCByID0gbmV3IEFycmF5KCk7XG4gICAgICByWzBdID0gdGhpcy5zO1xuICAgICAgdmFyIHAgPSB0aGlzLkRCLShpKnRoaXMuREIpJTgsIGQsIGsgPSAwO1xuICAgICAgaWYoaS0tID4gMCkge1xuICAgICAgICBpZihwIDwgdGhpcy5EQiAmJiAoZCA9IHRoaXNbaV0+PnApICE9ICh0aGlzLnMmdGhpcy5ETSk+PnApXG4gICAgICAgICAgcltrKytdID0gZHwodGhpcy5zPDwodGhpcy5EQi1wKSk7XG4gICAgICAgIHdoaWxlKGkgPj0gMCkge1xuICAgICAgICAgIGlmKHAgPCA4KSB7XG4gICAgICAgICAgICBkID0gKHRoaXNbaV0mKCgxPDxwKS0xKSk8PCg4LXApO1xuICAgICAgICAgICAgZCB8PSB0aGlzWy0taV0+PihwKz10aGlzLkRCLTgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGQgPSAodGhpc1tpXT4+KHAtPTgpKSYweGZmO1xuICAgICAgICAgICAgaWYocCA8PSAwKSB7IHAgKz0gdGhpcy5EQjsgLS1pOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKChkJjB4ODApICE9IDApIGQgfD0gLTI1NjtcbiAgICAgICAgICBpZihrID09IDAgJiYgKHRoaXMucyYweDgwKSAhPSAoZCYweDgwKSkgKytrO1xuICAgICAgICAgIGlmKGsgPiAwIHx8IGQgIT0gdGhpcy5zKSByW2srK10gPSBkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBibkVxdWFscyhhKSB7IHJldHVybih0aGlzLmNvbXBhcmVUbyhhKT09MCk7IH1cbiAgICBmdW5jdGlvbiBibk1pbihhKSB7IHJldHVybih0aGlzLmNvbXBhcmVUbyhhKTwwKT90aGlzOmE7IH1cbiAgICBmdW5jdGlvbiBibk1heChhKSB7IHJldHVybih0aGlzLmNvbXBhcmVUbyhhKT4wKT90aGlzOmE7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIG9wIGEgKGJpdHdpc2UpXG4gICAgZnVuY3Rpb24gYm5wQml0d2lzZVRvKGEsb3Ascikge1xuICAgICAgdmFyIGksIGYsIG0gPSBNYXRoLm1pbihhLnQsdGhpcy50KTtcbiAgICAgIGZvcihpID0gMDsgaSA8IG07ICsraSkgcltpXSA9IG9wKHRoaXNbaV0sYVtpXSk7XG4gICAgICBpZihhLnQgPCB0aGlzLnQpIHtcbiAgICAgICAgZiA9IGEucyZ0aGlzLkRNO1xuICAgICAgICBmb3IoaSA9IG07IGkgPCB0aGlzLnQ7ICsraSkgcltpXSA9IG9wKHRoaXNbaV0sZik7XG4gICAgICAgIHIudCA9IHRoaXMudDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBmID0gdGhpcy5zJnRoaXMuRE07XG4gICAgICAgIGZvcihpID0gbTsgaSA8IGEudDsgKytpKSByW2ldID0gb3AoZixhW2ldKTtcbiAgICAgICAgci50ID0gYS50O1xuICAgICAgfVxuICAgICAgci5zID0gb3AodGhpcy5zLGEucyk7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAmIGFcbiAgICBmdW5jdGlvbiBvcF9hbmQoeCx5KSB7IHJldHVybiB4Jnk7IH1cbiAgICBmdW5jdGlvbiBibkFuZChhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3BfYW5kLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyB8IGFcbiAgICBmdW5jdGlvbiBvcF9vcih4LHkpIHsgcmV0dXJuIHh8eTsgfVxuICAgIGZ1bmN0aW9uIGJuT3IoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmJpdHdpc2VUbyhhLG9wX29yLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyBeIGFcbiAgICBmdW5jdGlvbiBvcF94b3IoeCx5KSB7IHJldHVybiB4Xnk7IH1cbiAgICBmdW5jdGlvbiBiblhvcihhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3BfeG9yLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAmIH5hXG4gICAgZnVuY3Rpb24gb3BfYW5kbm90KHgseSkgeyByZXR1cm4geCZ+eTsgfVxuICAgIGZ1bmN0aW9uIGJuQW5kTm90KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5iaXR3aXNlVG8oYSxvcF9hbmRub3Qscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB+dGhpc1xuICAgIGZ1bmN0aW9uIGJuTm90KCkge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnQ7ICsraSkgcltpXSA9IHRoaXMuRE0mfnRoaXNbaV07XG4gICAgICByLnQgPSB0aGlzLnQ7XG4gICAgICByLnMgPSB+dGhpcy5zO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyA8PCBuXG4gICAgZnVuY3Rpb24gYm5TaGlmdExlZnQobikge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIGlmKG4gPCAwKSB0aGlzLnJTaGlmdFRvKC1uLHIpOyBlbHNlIHRoaXMubFNoaWZ0VG8obixyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgPj4gblxuICAgIGZ1bmN0aW9uIGJuU2hpZnRSaWdodChuKSB7XG4gICAgICB2YXIgciA9IG5iaSgpO1xuICAgICAgaWYobiA8IDApIHRoaXMubFNoaWZ0VG8oLW4scik7IGVsc2UgdGhpcy5yU2hpZnRUbyhuLHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIGluZGV4IG9mIGxvd2VzdCAxLWJpdCBpbiB4LCB4IDwgMl4zMVxuICAgIGZ1bmN0aW9uIGxiaXQoeCkge1xuICAgICAgaWYoeCA9PSAwKSByZXR1cm4gLTE7XG4gICAgICB2YXIgciA9IDA7XG4gICAgICBpZigoeCYweGZmZmYpID09IDApIHsgeCA+Pj0gMTY7IHIgKz0gMTY7IH1cbiAgICAgIGlmKCh4JjB4ZmYpID09IDApIHsgeCA+Pj0gODsgciArPSA4OyB9XG4gICAgICBpZigoeCYweGYpID09IDApIHsgeCA+Pj0gNDsgciArPSA0OyB9XG4gICAgICBpZigoeCYzKSA9PSAwKSB7IHggPj49IDI7IHIgKz0gMjsgfVxuICAgICAgaWYoKHgmMSkgPT0gMCkgKytyO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJucyBpbmRleCBvZiBsb3dlc3QgMS1iaXQgKG9yIC0xIGlmIG5vbmUpXG4gICAgZnVuY3Rpb24gYm5HZXRMb3dlc3RTZXRCaXQoKSB7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy50OyArK2kpXG4gICAgICAgIGlmKHRoaXNbaV0gIT0gMCkgcmV0dXJuIGkqdGhpcy5EQitsYml0KHRoaXNbaV0pO1xuICAgICAgaWYodGhpcy5zIDwgMCkgcmV0dXJuIHRoaXMudCp0aGlzLkRCO1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8vIHJldHVybiBudW1iZXIgb2YgMSBiaXRzIGluIHhcbiAgICBmdW5jdGlvbiBjYml0KHgpIHtcbiAgICAgIHZhciByID0gMDtcbiAgICAgIHdoaWxlKHggIT0gMCkgeyB4ICY9IHgtMTsgKytyOyB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gbnVtYmVyIG9mIHNldCBiaXRzXG4gICAgZnVuY3Rpb24gYm5CaXRDb3VudCgpIHtcbiAgICAgIHZhciByID0gMCwgeCA9IHRoaXMucyZ0aGlzLkRNO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMudDsgKytpKSByICs9IGNiaXQodGhpc1tpXV54KTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRydWUgaWZmIG50aCBiaXQgaXMgc2V0XG4gICAgZnVuY3Rpb24gYm5UZXN0Qml0KG4pIHtcbiAgICAgIHZhciBqID0gTWF0aC5mbG9vcihuL3RoaXMuREIpO1xuICAgICAgaWYoaiA+PSB0aGlzLnQpIHJldHVybih0aGlzLnMhPTApO1xuICAgICAgcmV0dXJuKCh0aGlzW2pdJigxPDwobiV0aGlzLkRCKSkpIT0wKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0aGlzIG9wICgxPDxuKVxuICAgIGZ1bmN0aW9uIGJucENoYW5nZUJpdChuLG9wKSB7XG4gICAgICB2YXIgciA9IEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChuKTtcbiAgICAgIHRoaXMuYml0d2lzZVRvKHIsb3Ascik7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIHwgKDE8PG4pXG4gICAgZnVuY3Rpb24gYm5TZXRCaXQobikgeyByZXR1cm4gdGhpcy5jaGFuZ2VCaXQobixvcF9vcik7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgJiB+KDE8PG4pXG4gICAgZnVuY3Rpb24gYm5DbGVhckJpdChuKSB7IHJldHVybiB0aGlzLmNoYW5nZUJpdChuLG9wX2FuZG5vdCk7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgXiAoMTw8bilcbiAgICBmdW5jdGlvbiBibkZsaXBCaXQobikgeyByZXR1cm4gdGhpcy5jaGFuZ2VCaXQobixvcF94b3IpOyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyArIGFcbiAgICBmdW5jdGlvbiBibnBBZGRUbyhhLHIpIHtcbiAgICAgIHZhciBpID0gMCwgYyA9IDAsIG0gPSBNYXRoLm1pbihhLnQsdGhpcy50KTtcbiAgICAgIHdoaWxlKGkgPCBtKSB7XG4gICAgICAgIGMgKz0gdGhpc1tpXSthW2ldO1xuICAgICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICB9XG4gICAgICBpZihhLnQgPCB0aGlzLnQpIHtcbiAgICAgICAgYyArPSBhLnM7XG4gICAgICAgIHdoaWxlKGkgPCB0aGlzLnQpIHtcbiAgICAgICAgICBjICs9IHRoaXNbaV07XG4gICAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICAgIH1cbiAgICAgICAgYyArPSB0aGlzLnM7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgYyArPSB0aGlzLnM7XG4gICAgICAgIHdoaWxlKGkgPCBhLnQpIHtcbiAgICAgICAgICBjICs9IGFbaV07XG4gICAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICAgIH1cbiAgICAgICAgYyArPSBhLnM7XG4gICAgICB9XG4gICAgICByLnMgPSAoYzwwKT8tMTowO1xuICAgICAgaWYoYyA+IDApIHJbaSsrXSA9IGM7XG4gICAgICBlbHNlIGlmKGMgPCAtMSkgcltpKytdID0gdGhpcy5EVitjO1xuICAgICAgci50ID0gaTtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzICsgYVxuICAgIGZ1bmN0aW9uIGJuQWRkKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5hZGRUbyhhLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAtIGFcbiAgICBmdW5jdGlvbiBiblN1YnRyYWN0KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5zdWJUbyhhLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAqIGFcbiAgICBmdW5jdGlvbiBibk11bHRpcGx5KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5tdWx0aXBseVRvKGEscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzXjJcbiAgICBmdW5jdGlvbiBiblNxdWFyZSgpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5zcXVhcmVUbyhyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgLyBhXG4gICAgZnVuY3Rpb24gYm5EaXZpZGUoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmRpdlJlbVRvKGEscixudWxsKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgJSBhXG4gICAgZnVuY3Rpb24gYm5SZW1haW5kZXIoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmRpdlJlbVRvKGEsbnVsbCxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIFt0aGlzL2EsdGhpcyVhXVxuICAgIGZ1bmN0aW9uIGJuRGl2aWRlQW5kUmVtYWluZGVyKGEpIHtcbiAgICAgIHZhciBxID0gbmJpKCksIHIgPSBuYmkoKTtcbiAgICAgIHRoaXMuZGl2UmVtVG8oYSxxLHIpO1xuICAgICAgcmV0dXJuIG5ldyBBcnJheShxLHIpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHRoaXMgKj0gbiwgdGhpcyA+PSAwLCAxIDwgbiA8IERWXG4gICAgZnVuY3Rpb24gYm5wRE11bHRpcGx5KG4pIHtcbiAgICAgIHRoaXNbdGhpcy50XSA9IHRoaXMuYW0oMCxuLTEsdGhpcywwLDAsdGhpcy50KTtcbiAgICAgICsrdGhpcy50O1xuICAgICAgdGhpcy5jbGFtcCgpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHRoaXMgKz0gbiA8PCB3IHdvcmRzLCB0aGlzID49IDBcbiAgICBmdW5jdGlvbiBibnBEQWRkT2Zmc2V0KG4sdykge1xuICAgICAgaWYobiA9PSAwKSByZXR1cm47XG4gICAgICB3aGlsZSh0aGlzLnQgPD0gdykgdGhpc1t0aGlzLnQrK10gPSAwO1xuICAgICAgdGhpc1t3XSArPSBuO1xuICAgICAgd2hpbGUodGhpc1t3XSA+PSB0aGlzLkRWKSB7XG4gICAgICAgIHRoaXNbd10gLT0gdGhpcy5EVjtcbiAgICAgICAgaWYoKyt3ID49IHRoaXMudCkgdGhpc1t0aGlzLnQrK10gPSAwO1xuICAgICAgICArK3RoaXNbd107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQSBcIm51bGxcIiByZWR1Y2VyXG4gICAgZnVuY3Rpb24gTnVsbEV4cCgpIHt9XG4gICAgZnVuY3Rpb24gbk5vcCh4KSB7IHJldHVybiB4OyB9XG4gICAgZnVuY3Rpb24gbk11bFRvKHgseSxyKSB7IHgubXVsdGlwbHlUbyh5LHIpOyB9XG4gICAgZnVuY3Rpb24gblNxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB9XG5cbiAgICBOdWxsRXhwLnByb3RvdHlwZS5jb252ZXJ0ID0gbk5vcDtcbiAgICBOdWxsRXhwLnByb3RvdHlwZS5yZXZlcnQgPSBuTm9wO1xuICAgIE51bGxFeHAucHJvdG90eXBlLm11bFRvID0gbk11bFRvO1xuICAgIE51bGxFeHAucHJvdG90eXBlLnNxclRvID0gblNxclRvO1xuXG4gICAgLy8gKHB1YmxpYykgdGhpc15lXG4gICAgZnVuY3Rpb24gYm5Qb3coZSkgeyByZXR1cm4gdGhpcy5leHAoZSxuZXcgTnVsbEV4cCgpKTsgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IGxvd2VyIG4gd29yZHMgb2YgXCJ0aGlzICogYVwiLCBhLnQgPD0gblxuICAgIC8vIFwidGhpc1wiIHNob3VsZCBiZSB0aGUgbGFyZ2VyIG9uZSBpZiBhcHByb3ByaWF0ZS5cbiAgICBmdW5jdGlvbiBibnBNdWx0aXBseUxvd2VyVG8oYSxuLHIpIHtcbiAgICAgIHZhciBpID0gTWF0aC5taW4odGhpcy50K2EudCxuKTtcbiAgICAgIHIucyA9IDA7IC8vIGFzc3VtZXMgYSx0aGlzID49IDBcbiAgICAgIHIudCA9IGk7XG4gICAgICB3aGlsZShpID4gMCkgclstLWldID0gMDtcbiAgICAgIHZhciBqO1xuICAgICAgZm9yKGogPSByLnQtdGhpcy50OyBpIDwgajsgKytpKSByW2krdGhpcy50XSA9IHRoaXMuYW0oMCxhW2ldLHIsaSwwLHRoaXMudCk7XG4gICAgICBmb3IoaiA9IE1hdGgubWluKGEudCxuKTsgaSA8IGo7ICsraSkgdGhpcy5hbSgwLGFbaV0scixpLDAsbi1pKTtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gXCJ0aGlzICogYVwiIHdpdGhvdXQgbG93ZXIgbiB3b3JkcywgbiA+IDBcbiAgICAvLyBcInRoaXNcIiBzaG91bGQgYmUgdGhlIGxhcmdlciBvbmUgaWYgYXBwcm9wcmlhdGUuXG4gICAgZnVuY3Rpb24gYm5wTXVsdGlwbHlVcHBlclRvKGEsbixyKSB7XG4gICAgICAtLW47XG4gICAgICB2YXIgaSA9IHIudCA9IHRoaXMudCthLnQtbjtcbiAgICAgIHIucyA9IDA7IC8vIGFzc3VtZXMgYSx0aGlzID49IDBcbiAgICAgIHdoaWxlKC0taSA+PSAwKSByW2ldID0gMDtcbiAgICAgIGZvcihpID0gTWF0aC5tYXgobi10aGlzLnQsMCk7IGkgPCBhLnQ7ICsraSlcbiAgICAgICAgclt0aGlzLnQraS1uXSA9IHRoaXMuYW0obi1pLGFbaV0sciwwLDAsdGhpcy50K2ktbik7XG4gICAgICByLmNsYW1wKCk7XG4gICAgICByLmRyU2hpZnRUbygxLHIpO1xuICAgIH1cblxuICAgIC8vIEJhcnJldHQgbW9kdWxhciByZWR1Y3Rpb25cbiAgICBmdW5jdGlvbiBCYXJyZXR0KG0pIHtcbiAgICAgIC8vIHNldHVwIEJhcnJldHRcbiAgICAgIHRoaXMucjIgPSBuYmkoKTtcbiAgICAgIHRoaXMucTMgPSBuYmkoKTtcbiAgICAgIEJpZ0ludGVnZXIuT05FLmRsU2hpZnRUbygyKm0udCx0aGlzLnIyKTtcbiAgICAgIHRoaXMubXUgPSB0aGlzLnIyLmRpdmlkZShtKTtcbiAgICAgIHRoaXMubSA9IG07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmFycmV0dENvbnZlcnQoeCkge1xuICAgICAgaWYoeC5zIDwgMCB8fCB4LnQgPiAyKnRoaXMubS50KSByZXR1cm4geC5tb2QodGhpcy5tKTtcbiAgICAgIGVsc2UgaWYoeC5jb21wYXJlVG8odGhpcy5tKSA8IDApIHJldHVybiB4O1xuICAgICAgZWxzZSB7IHZhciByID0gbmJpKCk7IHguY29weVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgcmV0dXJuIHI7IH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiYXJyZXR0UmV2ZXJ0KHgpIHsgcmV0dXJuIHg7IH1cblxuICAgIC8vIHggPSB4IG1vZCBtIChIQUMgMTQuNDIpXG4gICAgZnVuY3Rpb24gYmFycmV0dFJlZHVjZSh4KSB7XG4gICAgICB4LmRyU2hpZnRUbyh0aGlzLm0udC0xLHRoaXMucjIpO1xuICAgICAgaWYoeC50ID4gdGhpcy5tLnQrMSkgeyB4LnQgPSB0aGlzLm0udCsxOyB4LmNsYW1wKCk7IH1cbiAgICAgIHRoaXMubXUubXVsdGlwbHlVcHBlclRvKHRoaXMucjIsdGhpcy5tLnQrMSx0aGlzLnEzKTtcbiAgICAgIHRoaXMubS5tdWx0aXBseUxvd2VyVG8odGhpcy5xMyx0aGlzLm0udCsxLHRoaXMucjIpO1xuICAgICAgd2hpbGUoeC5jb21wYXJlVG8odGhpcy5yMikgPCAwKSB4LmRBZGRPZmZzZXQoMSx0aGlzLm0udCsxKTtcbiAgICAgIHguc3ViVG8odGhpcy5yMix4KTtcbiAgICAgIHdoaWxlKHguY29tcGFyZVRvKHRoaXMubSkgPj0gMCkgeC5zdWJUbyh0aGlzLm0seCk7XG4gICAgfVxuXG4gICAgLy8gciA9IHheMiBtb2QgbTsgeCAhPSByXG4gICAgZnVuY3Rpb24gYmFycmV0dFNxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4gICAgLy8gciA9IHgqeSBtb2QgbTsgeCx5ICE9IHJcbiAgICBmdW5jdGlvbiBiYXJyZXR0TXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IHRoaXMucmVkdWNlKHIpOyB9XG5cbiAgICBCYXJyZXR0LnByb3RvdHlwZS5jb252ZXJ0ID0gYmFycmV0dENvbnZlcnQ7XG4gICAgQmFycmV0dC5wcm90b3R5cGUucmV2ZXJ0ID0gYmFycmV0dFJldmVydDtcbiAgICBCYXJyZXR0LnByb3RvdHlwZS5yZWR1Y2UgPSBiYXJyZXR0UmVkdWNlO1xuICAgIEJhcnJldHQucHJvdG90eXBlLm11bFRvID0gYmFycmV0dE11bFRvO1xuICAgIEJhcnJldHQucHJvdG90eXBlLnNxclRvID0gYmFycmV0dFNxclRvO1xuXG4gICAgLy8gKHB1YmxpYykgdGhpc15lICUgbSAoSEFDIDE0Ljg1KVxuICAgIGZ1bmN0aW9uIGJuTW9kUG93KGUsbSkge1xuICAgICAgdmFyIGkgPSBlLmJpdExlbmd0aCgpLCBrLCByID0gbmJ2KDEpLCB6O1xuICAgICAgaWYoaSA8PSAwKSByZXR1cm4gcjtcbiAgICAgIGVsc2UgaWYoaSA8IDE4KSBrID0gMTtcbiAgICAgIGVsc2UgaWYoaSA8IDQ4KSBrID0gMztcbiAgICAgIGVsc2UgaWYoaSA8IDE0NCkgayA9IDQ7XG4gICAgICBlbHNlIGlmKGkgPCA3NjgpIGsgPSA1O1xuICAgICAgZWxzZSBrID0gNjtcbiAgICAgIGlmKGkgPCA4KVxuICAgICAgICB6ID0gbmV3IENsYXNzaWMobSk7XG4gICAgICBlbHNlIGlmKG0uaXNFdmVuKCkpXG4gICAgICAgIHogPSBuZXcgQmFycmV0dChtKTtcbiAgICAgIGVsc2VcbiAgICAgICAgeiA9IG5ldyBNb250Z29tZXJ5KG0pO1xuXG4gICAgICAvLyBwcmVjb21wdXRhdGlvblxuICAgICAgdmFyIGcgPSBuZXcgQXJyYXkoKSwgbiA9IDMsIGsxID0gay0xLCBrbSA9ICgxPDxrKS0xO1xuICAgICAgZ1sxXSA9IHouY29udmVydCh0aGlzKTtcbiAgICAgIGlmKGsgPiAxKSB7XG4gICAgICAgIHZhciBnMiA9IG5iaSgpO1xuICAgICAgICB6LnNxclRvKGdbMV0sZzIpO1xuICAgICAgICB3aGlsZShuIDw9IGttKSB7XG4gICAgICAgICAgZ1tuXSA9IG5iaSgpO1xuICAgICAgICAgIHoubXVsVG8oZzIsZ1tuLTJdLGdbbl0pO1xuICAgICAgICAgIG4gKz0gMjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaiA9IGUudC0xLCB3LCBpczEgPSB0cnVlLCByMiA9IG5iaSgpLCB0O1xuICAgICAgaSA9IG5iaXRzKGVbal0pLTE7XG4gICAgICB3aGlsZShqID49IDApIHtcbiAgICAgICAgaWYoaSA+PSBrMSkgdyA9IChlW2pdPj4oaS1rMSkpJmttO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB3ID0gKGVbal0mKCgxPDwoaSsxKSktMSkpPDwoazEtaSk7XG4gICAgICAgICAgaWYoaiA+IDApIHcgfD0gZVtqLTFdPj4odGhpcy5EQitpLWsxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG4gPSBrO1xuICAgICAgICB3aGlsZSgodyYxKSA9PSAwKSB7IHcgPj49IDE7IC0tbjsgfVxuICAgICAgICBpZigoaSAtPSBuKSA8IDApIHsgaSArPSB0aGlzLkRCOyAtLWo7IH1cbiAgICAgICAgaWYoaXMxKSB7ICAgIC8vIHJldCA9PSAxLCBkb24ndCBib3RoZXIgc3F1YXJpbmcgb3IgbXVsdGlwbHlpbmcgaXRcbiAgICAgICAgICBnW3ddLmNvcHlUbyhyKTtcbiAgICAgICAgICBpczEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB3aGlsZShuID4gMSkgeyB6LnNxclRvKHIscjIpOyB6LnNxclRvKHIyLHIpOyBuIC09IDI7IH1cbiAgICAgICAgICBpZihuID4gMCkgei5zcXJUbyhyLHIyKTsgZWxzZSB7IHQgPSByOyByID0gcjI7IHIyID0gdDsgfVxuICAgICAgICAgIHoubXVsVG8ocjIsZ1t3XSxyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlKGogPj0gMCAmJiAoZVtqXSYoMTw8aSkpID09IDApIHtcbiAgICAgICAgICB6LnNxclRvKHIscjIpOyB0ID0gcjsgciA9IHIyOyByMiA9IHQ7XG4gICAgICAgICAgaWYoLS1pIDwgMCkgeyBpID0gdGhpcy5EQi0xOyAtLWo7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHoucmV2ZXJ0KHIpO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIGdjZCh0aGlzLGEpIChIQUMgMTQuNTQpXG4gICAgZnVuY3Rpb24gYm5HQ0QoYSkge1xuICAgICAgdmFyIHggPSAodGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpcy5jbG9uZSgpO1xuICAgICAgdmFyIHkgPSAoYS5zPDApP2EubmVnYXRlKCk6YS5jbG9uZSgpO1xuICAgICAgaWYoeC5jb21wYXJlVG8oeSkgPCAwKSB7IHZhciB0ID0geDsgeCA9IHk7IHkgPSB0OyB9XG4gICAgICB2YXIgaSA9IHguZ2V0TG93ZXN0U2V0Qml0KCksIGcgPSB5LmdldExvd2VzdFNldEJpdCgpO1xuICAgICAgaWYoZyA8IDApIHJldHVybiB4O1xuICAgICAgaWYoaSA8IGcpIGcgPSBpO1xuICAgICAgaWYoZyA+IDApIHtcbiAgICAgICAgeC5yU2hpZnRUbyhnLHgpO1xuICAgICAgICB5LnJTaGlmdFRvKGcseSk7XG4gICAgICB9XG4gICAgICB3aGlsZSh4LnNpZ251bSgpID4gMCkge1xuICAgICAgICBpZigoaSA9IHguZ2V0TG93ZXN0U2V0Qml0KCkpID4gMCkgeC5yU2hpZnRUbyhpLHgpO1xuICAgICAgICBpZigoaSA9IHkuZ2V0TG93ZXN0U2V0Qml0KCkpID4gMCkgeS5yU2hpZnRUbyhpLHkpO1xuICAgICAgICBpZih4LmNvbXBhcmVUbyh5KSA+PSAwKSB7XG4gICAgICAgICAgeC5zdWJUbyh5LHgpO1xuICAgICAgICAgIHguclNoaWZ0VG8oMSx4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB5LnN1YlRvKHgseSk7XG4gICAgICAgICAgeS5yU2hpZnRUbygxLHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihnID4gMCkgeS5sU2hpZnRUbyhnLHkpO1xuICAgICAgcmV0dXJuIHk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgdGhpcyAlIG4sIG4gPCAyXjI2XG4gICAgZnVuY3Rpb24gYm5wTW9kSW50KG4pIHtcbiAgICAgIGlmKG4gPD0gMCkgcmV0dXJuIDA7XG4gICAgICB2YXIgZCA9IHRoaXMuRFYlbiwgciA9ICh0aGlzLnM8MCk/bi0xOjA7XG4gICAgICBpZih0aGlzLnQgPiAwKVxuICAgICAgICBpZihkID09IDApIHIgPSB0aGlzWzBdJW47XG4gICAgICAgIGVsc2UgZm9yKHZhciBpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSByID0gKGQqcit0aGlzW2ldKSVuO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgMS90aGlzICUgbSAoSEFDIDE0LjYxKVxuICAgIGZ1bmN0aW9uIGJuTW9kSW52ZXJzZShtKSB7XG4gICAgICB2YXIgYWMgPSBtLmlzRXZlbigpO1xuICAgICAgaWYoKHRoaXMuaXNFdmVuKCkgJiYgYWMpIHx8IG0uc2lnbnVtKCkgPT0gMCkgcmV0dXJuIEJpZ0ludGVnZXIuWkVSTztcbiAgICAgIHZhciB1ID0gbS5jbG9uZSgpLCB2ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgdmFyIGEgPSBuYnYoMSksIGIgPSBuYnYoMCksIGMgPSBuYnYoMCksIGQgPSBuYnYoMSk7XG4gICAgICB3aGlsZSh1LnNpZ251bSgpICE9IDApIHtcbiAgICAgICAgd2hpbGUodS5pc0V2ZW4oKSkge1xuICAgICAgICAgIHUuclNoaWZ0VG8oMSx1KTtcbiAgICAgICAgICBpZihhYykge1xuICAgICAgICAgICAgaWYoIWEuaXNFdmVuKCkgfHwgIWIuaXNFdmVuKCkpIHsgYS5hZGRUbyh0aGlzLGEpOyBiLnN1YlRvKG0sYik7IH1cbiAgICAgICAgICAgIGEuclNoaWZ0VG8oMSxhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZighYi5pc0V2ZW4oKSkgYi5zdWJUbyhtLGIpO1xuICAgICAgICAgIGIuclNoaWZ0VG8oMSxiKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSh2LmlzRXZlbigpKSB7XG4gICAgICAgICAgdi5yU2hpZnRUbygxLHYpO1xuICAgICAgICAgIGlmKGFjKSB7XG4gICAgICAgICAgICBpZighYy5pc0V2ZW4oKSB8fCAhZC5pc0V2ZW4oKSkgeyBjLmFkZFRvKHRoaXMsYyk7IGQuc3ViVG8obSxkKTsgfVxuICAgICAgICAgICAgYy5yU2hpZnRUbygxLGMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmKCFkLmlzRXZlbigpKSBkLnN1YlRvKG0sZCk7XG4gICAgICAgICAgZC5yU2hpZnRUbygxLGQpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHUuY29tcGFyZVRvKHYpID49IDApIHtcbiAgICAgICAgICB1LnN1YlRvKHYsdSk7XG4gICAgICAgICAgaWYoYWMpIGEuc3ViVG8oYyxhKTtcbiAgICAgICAgICBiLnN1YlRvKGQsYik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdi5zdWJUbyh1LHYpO1xuICAgICAgICAgIGlmKGFjKSBjLnN1YlRvKGEsYyk7XG4gICAgICAgICAgZC5zdWJUbyhiLGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZih2LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgIT0gMCkgcmV0dXJuIEJpZ0ludGVnZXIuWkVSTztcbiAgICAgIGlmKGQuY29tcGFyZVRvKG0pID49IDApIHJldHVybiBkLnN1YnRyYWN0KG0pO1xuICAgICAgaWYoZC5zaWdudW0oKSA8IDApIGQuYWRkVG8obSxkKTsgZWxzZSByZXR1cm4gZDtcbiAgICAgIGlmKGQuc2lnbnVtKCkgPCAwKSByZXR1cm4gZC5hZGQobSk7IGVsc2UgcmV0dXJuIGQ7XG4gICAgfVxuXG4gICAgdmFyIGxvd3ByaW1lcyA9IFsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTddO1xuICAgIHZhciBscGxpbSA9ICgxPDwyNikvbG93cHJpbWVzW2xvd3ByaW1lcy5sZW5ndGgtMV07XG5cbiAgICAvLyAocHVibGljKSB0ZXN0IHByaW1hbGl0eSB3aXRoIGNlcnRhaW50eSA+PSAxLS41XnRcbiAgICBmdW5jdGlvbiBibklzUHJvYmFibGVQcmltZSh0KSB7XG4gICAgICB2YXIgaSwgeCA9IHRoaXMuYWJzKCk7XG4gICAgICBpZih4LnQgPT0gMSAmJiB4WzBdIDw9IGxvd3ByaW1lc1tsb3dwcmltZXMubGVuZ3RoLTFdKSB7XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGxvd3ByaW1lcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICBpZih4WzBdID09IGxvd3ByaW1lc1tpXSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmKHguaXNFdmVuKCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGkgPSAxO1xuICAgICAgd2hpbGUoaSA8IGxvd3ByaW1lcy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG0gPSBsb3dwcmltZXNbaV0sIGogPSBpKzE7XG4gICAgICAgIHdoaWxlKGogPCBsb3dwcmltZXMubGVuZ3RoICYmIG0gPCBscGxpbSkgbSAqPSBsb3dwcmltZXNbaisrXTtcbiAgICAgICAgbSA9IHgubW9kSW50KG0pO1xuICAgICAgICB3aGlsZShpIDwgaikgaWYobSVsb3dwcmltZXNbaSsrXSA9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4geC5taWxsZXJSYWJpbih0KTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0cnVlIGlmIHByb2JhYmx5IHByaW1lIChIQUMgNC4yNCwgTWlsbGVyLVJhYmluKVxuICAgIGZ1bmN0aW9uIGJucE1pbGxlclJhYmluKHQpIHtcbiAgICAgIHZhciBuMSA9IHRoaXMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpO1xuICAgICAgdmFyIGsgPSBuMS5nZXRMb3dlc3RTZXRCaXQoKTtcbiAgICAgIGlmKGsgPD0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIHIgPSBuMS5zaGlmdFJpZ2h0KGspO1xuICAgICAgdCA9ICh0KzEpPj4xO1xuICAgICAgaWYodCA+IGxvd3ByaW1lcy5sZW5ndGgpIHQgPSBsb3dwcmltZXMubGVuZ3RoO1xuICAgICAgdmFyIGEgPSBuYmkoKTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0OyArK2kpIHtcbiAgICAgICAgLy9QaWNrIGJhc2VzIGF0IHJhbmRvbSwgaW5zdGVhZCBvZiBzdGFydGluZyBhdCAyXG4gICAgICAgIGEuZnJvbUludChsb3dwcmltZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxvd3ByaW1lcy5sZW5ndGgpXSk7XG4gICAgICAgIHZhciB5ID0gYS5tb2RQb3cocix0aGlzKTtcbiAgICAgICAgaWYoeS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpICE9IDAgJiYgeS5jb21wYXJlVG8objEpICE9IDApIHtcbiAgICAgICAgICB2YXIgaiA9IDE7XG4gICAgICAgICAgd2hpbGUoaisrIDwgayAmJiB5LmNvbXBhcmVUbyhuMSkgIT0gMCkge1xuICAgICAgICAgICAgeSA9IHkubW9kUG93SW50KDIsdGhpcyk7XG4gICAgICAgICAgICBpZih5LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZih5LmNvbXBhcmVUbyhuMSkgIT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBwcm90ZWN0ZWRcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jaHVua1NpemUgPSBibnBDaHVua1NpemU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUudG9SYWRpeCA9IGJucFRvUmFkaXg7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbVJhZGl4ID0gYm5wRnJvbVJhZGl4O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21OdW1iZXIgPSBibnBGcm9tTnVtYmVyO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJpdHdpc2VUbyA9IGJucEJpdHdpc2VUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jaGFuZ2VCaXQgPSBibnBDaGFuZ2VCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYWRkVG8gPSBibnBBZGRUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kTXVsdGlwbHkgPSBibnBETXVsdGlwbHk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZEFkZE9mZnNldCA9IGJucERBZGRPZmZzZXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlMb3dlclRvID0gYm5wTXVsdGlwbHlMb3dlclRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VXBwZXJUbyA9IGJucE11bHRpcGx5VXBwZXJUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnQgPSBibnBNb2RJbnQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubWlsbGVyUmFiaW4gPSBibnBNaWxsZXJSYWJpbjtcblxuICAgIC8vIHB1YmxpY1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNsb25lID0gYm5DbG9uZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5pbnRWYWx1ZSA9IGJuSW50VmFsdWU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYnl0ZVZhbHVlID0gYm5CeXRlVmFsdWU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc2hvcnRWYWx1ZSA9IGJuU2hvcnRWYWx1ZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaWdudW0gPSBiblNpZ051bTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS50b0J5dGVBcnJheSA9IGJuVG9CeXRlQXJyYXk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZXF1YWxzID0gYm5FcXVhbHM7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubWluID0gYm5NaW47XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubWF4ID0gYm5NYXg7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYW5kID0gYm5BbmQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUub3IgPSBibk9yO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnhvciA9IGJuWG9yO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFuZE5vdCA9IGJuQW5kTm90O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm5vdCA9IGJuTm90O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0TGVmdCA9IGJuU2hpZnRMZWZ0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0UmlnaHQgPSBiblNoaWZ0UmlnaHQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZ2V0TG93ZXN0U2V0Qml0ID0gYm5HZXRMb3dlc3RTZXRCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYml0Q291bnQgPSBibkJpdENvdW50O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnRlc3RCaXQgPSBiblRlc3RCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc2V0Qml0ID0gYm5TZXRCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY2xlYXJCaXQgPSBibkNsZWFyQml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZsaXBCaXQgPSBibkZsaXBCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYWRkID0gYm5BZGQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc3VidHJhY3QgPSBiblN1YnRyYWN0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5ID0gYm5NdWx0aXBseTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZpZGUgPSBibkRpdmlkZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5yZW1haW5kZXIgPSBiblJlbWFpbmRlcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZpZGVBbmRSZW1haW5kZXIgPSBibkRpdmlkZUFuZFJlbWFpbmRlcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RQb3cgPSBibk1vZFBvdztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnZlcnNlID0gYm5Nb2RJbnZlcnNlO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnBvdyA9IGJuUG93O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmdjZCA9IGJuR0NEO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmlzUHJvYmFibGVQcmltZSA9IGJuSXNQcm9iYWJsZVByaW1lO1xuXG4gICAgLy8gSlNCTi1zcGVjaWZpYyBleHRlbnNpb25cbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmUgPSBiblNxdWFyZTtcblxuICAgIC8vIEV4cG9zZSB0aGUgQmFycmV0dCBmdW5jdGlvblxuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkJhcnJldHQgPSBCYXJyZXR0XG5cbiAgICAvLyBCaWdJbnRlZ2VyIGludGVyZmFjZXMgbm90IGltcGxlbWVudGVkIGluIGpzYm46XG5cbiAgICAvLyBCaWdJbnRlZ2VyKGludCBzaWdudW0sIGJ5dGVbXSBtYWduaXR1ZGUpXG4gICAgLy8gZG91YmxlIGRvdWJsZVZhbHVlKClcbiAgICAvLyBmbG9hdCBmbG9hdFZhbHVlKClcbiAgICAvLyBpbnQgaGFzaENvZGUoKVxuICAgIC8vIGxvbmcgbG9uZ1ZhbHVlKClcbiAgICAvLyBzdGF0aWMgQmlnSW50ZWdlciB2YWx1ZU9mKGxvbmcgdmFsKVxuXG4gICAgLy8gUmFuZG9tIG51bWJlciBnZW5lcmF0b3IgLSByZXF1aXJlcyBhIFBSTkcgYmFja2VuZCwgZS5nLiBwcm5nNC5qc1xuXG4gICAgLy8gRm9yIGJlc3QgcmVzdWx0cywgcHV0IGNvZGUgbGlrZVxuICAgIC8vIDxib2R5IG9uQ2xpY2s9J3JuZ19zZWVkX3RpbWUoKTsnIG9uS2V5UHJlc3M9J3JuZ19zZWVkX3RpbWUoKTsnPlxuICAgIC8vIGluIHlvdXIgbWFpbiBIVE1MIGRvY3VtZW50LlxuXG4gICAgdmFyIHJuZ19zdGF0ZTtcbiAgICB2YXIgcm5nX3Bvb2w7XG4gICAgdmFyIHJuZ19wcHRyO1xuXG4gICAgLy8gTWl4IGluIGEgMzItYml0IGludGVnZXIgaW50byB0aGUgcG9vbFxuICAgIGZ1bmN0aW9uIHJuZ19zZWVkX2ludCh4KSB7XG4gICAgICBybmdfcG9vbFtybmdfcHB0cisrXSBePSB4ICYgMjU1O1xuICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHggPj4gOCkgJiAyNTU7XG4gICAgICBybmdfcG9vbFtybmdfcHB0cisrXSBePSAoeCA+PiAxNikgJiAyNTU7XG4gICAgICBybmdfcG9vbFtybmdfcHB0cisrXSBePSAoeCA+PiAyNCkgJiAyNTU7XG4gICAgICBpZihybmdfcHB0ciA+PSBybmdfcHNpemUpIHJuZ19wcHRyIC09IHJuZ19wc2l6ZTtcbiAgICB9XG5cbiAgICAvLyBNaXggaW4gdGhlIGN1cnJlbnQgdGltZSAody9taWxsaXNlY29uZHMpIGludG8gdGhlIHBvb2xcbiAgICBmdW5jdGlvbiBybmdfc2VlZF90aW1lKCkge1xuICAgICAgcm5nX3NlZWRfaW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBwb29sIHdpdGgganVuayBpZiBuZWVkZWQuXG4gICAgaWYocm5nX3Bvb2wgPT0gbnVsbCkge1xuICAgICAgcm5nX3Bvb2wgPSBuZXcgQXJyYXkoKTtcbiAgICAgIHJuZ19wcHRyID0gMDtcbiAgICAgIHZhciB0O1xuICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuY3J5cHRvKSB7XG4gICAgICAgIGlmICh3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgICAgIC8vIFVzZSB3ZWJjcnlwdG8gaWYgYXZhaWxhYmxlXG4gICAgICAgICAgdmFyIHVhID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICAgICAgICAgIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHVhKTtcbiAgICAgICAgICBmb3IodCA9IDA7IHQgPCAzMjsgKyt0KVxuICAgICAgICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gPSB1YVt0XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKG5hdmlnYXRvci5hcHBOYW1lID09IFwiTmV0c2NhcGVcIiAmJiBuYXZpZ2F0b3IuYXBwVmVyc2lvbiA8IFwiNVwiKSB7XG4gICAgICAgICAgLy8gRXh0cmFjdCBlbnRyb3B5ICgyNTYgYml0cykgZnJvbSBOUzQgUk5HIGlmIGF2YWlsYWJsZVxuICAgICAgICAgIHZhciB6ID0gd2luZG93LmNyeXB0by5yYW5kb20oMzIpO1xuICAgICAgICAgIGZvcih0ID0gMDsgdCA8IHoubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICBybmdfcG9vbFtybmdfcHB0cisrXSA9IHouY2hhckNvZGVBdCh0KSAmIDI1NTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUocm5nX3BwdHIgPCBybmdfcHNpemUpIHsgIC8vIGV4dHJhY3Qgc29tZSByYW5kb21uZXNzIGZyb20gTWF0aC5yYW5kb20oKVxuICAgICAgICB0ID0gTWF0aC5mbG9vcig2NTUzNiAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBybmdfcG9vbFtybmdfcHB0cisrXSA9IHQgPj4+IDg7XG4gICAgICAgIHJuZ19wb29sW3JuZ19wcHRyKytdID0gdCAmIDI1NTtcbiAgICAgIH1cbiAgICAgIHJuZ19wcHRyID0gMDtcbiAgICAgIHJuZ19zZWVkX3RpbWUoKTtcbiAgICAgIC8vcm5nX3NlZWRfaW50KHdpbmRvdy5zY3JlZW5YKTtcbiAgICAgIC8vcm5nX3NlZWRfaW50KHdpbmRvdy5zY3JlZW5ZKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBybmdfZ2V0X2J5dGUoKSB7XG4gICAgICBpZihybmdfc3RhdGUgPT0gbnVsbCkge1xuICAgICAgICBybmdfc2VlZF90aW1lKCk7XG4gICAgICAgIHJuZ19zdGF0ZSA9IHBybmdfbmV3c3RhdGUoKTtcbiAgICAgICAgcm5nX3N0YXRlLmluaXQocm5nX3Bvb2wpO1xuICAgICAgICBmb3Iocm5nX3BwdHIgPSAwOyBybmdfcHB0ciA8IHJuZ19wb29sLmxlbmd0aDsgKytybmdfcHB0cilcbiAgICAgICAgICBybmdfcG9vbFtybmdfcHB0cl0gPSAwO1xuICAgICAgICBybmdfcHB0ciA9IDA7XG4gICAgICAgIC8vcm5nX3Bvb2wgPSBudWxsO1xuICAgICAgfVxuICAgICAgLy8gVE9ETzogYWxsb3cgcmVzZWVkaW5nIGFmdGVyIGZpcnN0IHJlcXVlc3RcbiAgICAgIHJldHVybiBybmdfc3RhdGUubmV4dCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJuZ19nZXRfYnl0ZXMoYmEpIHtcbiAgICAgIHZhciBpO1xuICAgICAgZm9yKGkgPSAwOyBpIDwgYmEubGVuZ3RoOyArK2kpIGJhW2ldID0gcm5nX2dldF9ieXRlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gU2VjdXJlUmFuZG9tKCkge31cblxuICAgIFNlY3VyZVJhbmRvbS5wcm90b3R5cGUubmV4dEJ5dGVzID0gcm5nX2dldF9ieXRlcztcblxuICAgIC8vIHBybmc0LmpzIC0gdXNlcyBBcmNmb3VyIGFzIGEgUFJOR1xuXG4gICAgZnVuY3Rpb24gQXJjZm91cigpIHtcbiAgICAgIHRoaXMuaSA9IDA7XG4gICAgICB0aGlzLmogPSAwO1xuICAgICAgdGhpcy5TID0gbmV3IEFycmF5KCk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBhcmNmb3VyIGNvbnRleHQgZnJvbSBrZXksIGFuIGFycmF5IG9mIGludHMsIGVhY2ggZnJvbSBbMC4uMjU1XVxuICAgIGZ1bmN0aW9uIEFSQzRpbml0KGtleSkge1xuICAgICAgdmFyIGksIGosIHQ7XG4gICAgICBmb3IoaSA9IDA7IGkgPCAyNTY7ICsraSlcbiAgICAgICAgdGhpcy5TW2ldID0gaTtcbiAgICAgIGogPSAwO1xuICAgICAgZm9yKGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgaiA9IChqICsgdGhpcy5TW2ldICsga2V5W2kgJSBrZXkubGVuZ3RoXSkgJiAyNTU7XG4gICAgICAgIHQgPSB0aGlzLlNbaV07XG4gICAgICAgIHRoaXMuU1tpXSA9IHRoaXMuU1tqXTtcbiAgICAgICAgdGhpcy5TW2pdID0gdDtcbiAgICAgIH1cbiAgICAgIHRoaXMuaSA9IDA7XG4gICAgICB0aGlzLmogPSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIEFSQzRuZXh0KCkge1xuICAgICAgdmFyIHQ7XG4gICAgICB0aGlzLmkgPSAodGhpcy5pICsgMSkgJiAyNTU7XG4gICAgICB0aGlzLmogPSAodGhpcy5qICsgdGhpcy5TW3RoaXMuaV0pICYgMjU1O1xuICAgICAgdCA9IHRoaXMuU1t0aGlzLmldO1xuICAgICAgdGhpcy5TW3RoaXMuaV0gPSB0aGlzLlNbdGhpcy5qXTtcbiAgICAgIHRoaXMuU1t0aGlzLmpdID0gdDtcbiAgICAgIHJldHVybiB0aGlzLlNbKHQgKyB0aGlzLlNbdGhpcy5pXSkgJiAyNTVdO1xuICAgIH1cblxuICAgIEFyY2ZvdXIucHJvdG90eXBlLmluaXQgPSBBUkM0aW5pdDtcbiAgICBBcmNmb3VyLnByb3RvdHlwZS5uZXh0ID0gQVJDNG5leHQ7XG5cbiAgICAvLyBQbHVnIGluIHlvdXIgUk5HIGNvbnN0cnVjdG9yIGhlcmVcbiAgICBmdW5jdGlvbiBwcm5nX25ld3N0YXRlKCkge1xuICAgICAgcmV0dXJuIG5ldyBBcmNmb3VyKCk7XG4gICAgfVxuXG4gICAgLy8gUG9vbCBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGFuZCBncmVhdGVyIHRoYW4gMzIuXG4gICAgLy8gQW4gYXJyYXkgb2YgYnl0ZXMgdGhlIHNpemUgb2YgdGhlIHBvb2wgd2lsbCBiZSBwYXNzZWQgdG8gaW5pdCgpXG4gICAgdmFyIHJuZ19wc2l6ZSA9IDI1NjtcblxuICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgICAgZGVmYXVsdDogQmlnSW50ZWdlcixcbiAgICAgICAgICAgIEJpZ0ludGVnZXI6IEJpZ0ludGVnZXIsXG4gICAgICAgICAgICBTZWN1cmVSYW5kb206IFNlY3VyZVJhbmRvbSxcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmpzYm4gPSB7XG4gICAgICAgICAgQmlnSW50ZWdlcjogQmlnSW50ZWdlcixcbiAgICAgICAgICBTZWN1cmVSYW5kb206IFNlY3VyZVJhbmRvbVxuICAgICAgICB9O1xuICAgIH1cblxufSkuY2FsbCh0aGlzKTtcbiIsIi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xudmFyIGJ5dGVUb0hleCA9IFtdO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXhbaV0gPSAoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpO1xufVxuXG5mdW5jdGlvbiBieXRlc1RvVXVpZChidWYsIG9mZnNldCkge1xuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xuICB2YXIgYnRoID0gYnl0ZVRvSGV4O1xuICAvLyBqb2luIHVzZWQgdG8gZml4IG1lbW9yeSBpc3N1ZSBjYXVzZWQgYnkgY29uY2F0ZW5hdGlvbjogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzE3NSNjNFxuICByZXR1cm4gKFtidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCBcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dXSkuam9pbignJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnl0ZXNUb1V1aWQ7XG4iLCIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiAgSW4gdGhlXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXG4vLyBhbmQgaW5jb25zaXN0ZW50IHN1cHBvcnQgZm9yIHRoZSBgY3J5cHRvYCBBUEkuICBXZSBkbyB0aGUgYmVzdCB3ZSBjYW4gdmlhXG4vLyBmZWF0dXJlLWRldGVjdGlvblxuXG4vLyBnZXRSYW5kb21WYWx1ZXMgbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgXCJ0aGlzXCIgaXMgYSBDcnlwdG9cbi8vIGltcGxlbWVudGF0aW9uLiBBbHNvLCBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gb24gSUUxMS5cbnZhciBnZXRSYW5kb21WYWx1ZXMgPSAodHlwZW9mKGNyeXB0bykgIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKSk7XG5cbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcbiAgLy8gV0hBVFdHIGNyeXB0byBSTkcgLSBodHRwOi8vd2lraS53aGF0d2cub3JnL3dpa2kvQ3J5cHRvXG4gIHZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd2hhdHdnUk5HKCkge1xuICAgIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG4gICAgcmV0dXJuIHJuZHM4O1xuICB9O1xufSBlbHNlIHtcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxuICAvL1xuICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdXNlIE1hdGgucmFuZG9tKCkuICBJdCdzIGZhc3QsIGJ1dCBpcyBvZiB1bnNwZWNpZmllZFxuICAvLyBxdWFsaXR5LlxuICB2YXIgcm5kcyA9IG5ldyBBcnJheSgxNik7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCByOyBpIDwgMTY7IGkrKykge1xuICAgICAgaWYgKChpICYgMHgwMykgPT09IDApIHIgPSBNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwMDA7XG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xuICAgIH1cblxuICAgIHJldHVybiBybmRzO1xuICB9O1xufVxuIiwidmFyIHJuZyA9IHJlcXVpcmUoJy4vbGliL3JuZycpO1xudmFyIGJ5dGVzVG9VdWlkID0gcmVxdWlyZSgnLi9saWIvYnl0ZXNUb1V1aWQnKTtcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG5cbiAgaWYgKHR5cGVvZihvcHRpb25zKSA9PSAnc3RyaW5nJykge1xuICAgIGJ1ZiA9IG9wdGlvbnMgPT09ICdiaW5hcnknID8gbmV3IEFycmF5KDE2KSA6IG51bGw7XG4gICAgb3B0aW9ucyA9IG51bGw7XG4gIH1cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgcm5nKSgpO1xuXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcbiAgcm5kc1s2XSA9IChybmRzWzZdICYgMHgwZikgfCAweDQwO1xuICBybmRzWzhdID0gKHJuZHNbOF0gJiAweDNmKSB8IDB4ODA7XG5cbiAgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG4gIGlmIChidWYpIHtcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcbiAgICAgIGJ1ZltpICsgaWldID0gcm5kc1tpaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBieXRlc1RvVXVpZChybmRzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2NDtcbiIsIi8vIERlY2xhcmUgdGhlIEVTNiBmZWF0dXJlcyB3ZSdyZSB1c2luZ1xyXG5cclxuLy8gVE9ETzogQ29uc2lkZXIgdXNpbmcgdGhlIGxvY2FsIGZ1bmN0aW9uIHZlcnNpb25zIG9mIHRoZXNlLCBzbyB0aGF0IHdlXHJcbi8vIGF2b2lkIG1vZGlmeWluZyBicm93c2VyIGdsb2JhbHMgKHBvdGVudGlhbCBmb3IgaW50ZXJvcCBidWdzIHdpdGggb3RoZXIgbGlicmFyaWVzXHJcbi8vIG9uIHRoZSBwYWdlIHRoYXQgbWlnaHQgYmUgcG9seWZpbGxpbmcgRVM2IGZlYXR1cmVzKVxyXG5cclxuaW1wb3J0ICdjb3JlLWpzL2VzNi9wcm9taXNlJztcclxuaW1wb3J0ICdjb3JlLWpzL2ZuL2Z1bmN0aW9uL2JpbmQnO1xyXG5pbXBvcnQgJ2NvcmUtanMvZm4vb2JqZWN0L2Fzc2lnbic7XHJcbmltcG9ydCAnY29yZS1qcy9mbi9hcnJheS9maW5kJztcclxuaW1wb3J0ICdjb3JlLWpzL2ZuL2FycmF5L3NvbWUnO1xyXG5pbXBvcnQgJ2NvcmUtanMvZm4vYXJyYXkvaXMtYXJyYXknO1xyXG5pbXBvcnQgJ2NvcmUtanMvZm4vYXJyYXkvc3BsaWNlJztcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBUaW1lciB9IGZyb20gJy4vVGltZXIuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gNjA7IC8vIHNlY29uZHNcclxuXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NUb2tlbkV2ZW50cyB7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdUaW1lciA9IG5ldyBUaW1lcihcIkFjY2VzcyB0b2tlbiBleHBpcmluZ1wiKSxcclxuICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyZWRUaW1lciA9IG5ldyBUaW1lcihcIkFjY2VzcyB0b2tlbiBleHBpcmVkXCIpXHJcbiAgICB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG5cclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nID0gYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZCA9IGFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWQoY29udGFpbmVyKSB7XHJcbiAgICAgICAgLy8gb25seSByZWdpc3RlciBldmVudHMgaWYgdGhlcmUncyBhbiBhY2Nlc3MgdG9rZW4gYW5kIGl0IGhhcyBhbiBleHBpcmF0aW9uXHJcbiAgICAgICAgaWYgKGNvbnRhaW5lci5hY2Nlc3NfdG9rZW4gJiYgY29udGFpbmVyLmV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBsZXQgZHVyYXRpb24gPSBjb250YWluZXIuZXhwaXJlc19pbjtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogYWNjZXNzIHRva2VuIHByZXNlbnQsIHJlbWFpbmluZyBkdXJhdGlvbjpcIiwgZHVyYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGR1cmF0aW9uID4gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gb25seSByZWdpc3RlciBleHBpcmluZyBpZiB3ZSBzdGlsbCBoYXZlIHRpbWVcclxuICAgICAgICAgICAgICAgIGxldCBleHBpcmluZyA9IGR1cmF0aW9uIC0gdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwaXJpbmcgPD0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwaXJpbmcgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiByZWdpc3RlcmluZyBleHBpcmluZyB0aW1lciBpbjpcIiwgZXhwaXJpbmcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5pbml0KGV4cGlyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IGNhbmNlbGluZyBleGlzdGluZyBleHBpcmluZyB0aW1lciBiZWNhc2Ugd2UncmUgcGFzdCBleHBpcmF0aW9uLlwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGl0J3MgbmVnYXRpdmUsIGl0IHdpbGwgc3RpbGwgZmlyZVxyXG4gICAgICAgICAgICBsZXQgZXhwaXJlZCA9IGR1cmF0aW9uICsgMTtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogcmVnaXN0ZXJpbmcgZXhwaXJlZCB0aW1lciBpbjpcIiwgZXhwaXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5pbml0KGV4cGlyZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmNhbmNlbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bmxvYWQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMudW5sb2FkOiBjYW5jZWxpbmcgZXhpc3RpbmcgYWNjZXNzIHRva2VuIHRpbWVyc1wiKTtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRBY2Nlc3NUb2tlbkV4cGlyaW5nKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJpbmcoY2IpIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFjY2Vzc1Rva2VuRXhwaXJlZChjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJlZChjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0SW50ZXJ2YWwgPSAyMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoZWNrU2Vzc2lvbklGcmFtZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihjYWxsYmFjaywgY2xpZW50X2lkLCB1cmwsIGludGVydmFsLCBzdG9wT25FcnJvciA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IGNsaWVudF9pZDtcclxuICAgICAgICB0aGlzLl91cmwgPSB1cmw7XHJcbiAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBpbnRlcnZhbCB8fCBEZWZhdWx0SW50ZXJ2YWw7XHJcbiAgICAgICAgdGhpcy5fc3RvcE9uRXJyb3IgPSBzdG9wT25FcnJvcjtcclxuXHJcbiAgICAgICAgdmFyIGlkeCA9IHVybC5pbmRleE9mKFwiL1wiLCB1cmwuaW5kZXhPZihcIi8vXCIpICsgMik7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVfb3JpZ2luID0gdXJsLnN1YnN0cigwLCBpZHgpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG5cclxuICAgICAgICAvLyBzaG90Z3VuIGFwcHJvYWNoXHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLndpZHRoID0gMDtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5oZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZS5zcmMgPSB1cmw7XHJcbiAgICB9XHJcbiAgICBsb2FkKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZS5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2ZyYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX21lc3NhZ2UoZSkge1xyXG4gICAgICAgIGlmIChlLm9yaWdpbiA9PT0gdGhpcy5fZnJhbWVfb3JpZ2luICYmXHJcbiAgICAgICAgICAgIGUuc291cmNlID09PSB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmRhdGEgPT09IFwiZXJyb3JcIikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiQ2hlY2tTZXNzaW9uSUZyYW1lOiBlcnJvciBtZXNzYWdlIGZyb20gY2hlY2sgc2Vzc2lvbiBvcCBpZnJhbWVcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RvcE9uRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlLmRhdGEgPT09IFwiY2hhbmdlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWU6IGNoYW5nZWQgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ2hlY2tTZXNzaW9uSUZyYW1lOiBcIiArIGUuZGF0YSArIFwiIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXJ0KHNlc3Npb25fc3RhdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbl9zdGF0ZSAhPT0gc2Vzc2lvbl9zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWUuc3RhcnRcIik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG5cclxuICAgICAgICAgICAgbGV0IHNlbmQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKHRoaXMuX2NsaWVudF9pZCArIFwiIFwiICsgdGhpcy5fc2Vzc2lvbl9zdGF0ZSwgdGhpcy5fZnJhbWVfb3JpZ2luKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIHRyaWdnZXIgbm93XHJcbiAgICAgICAgICAgIHNlbmQoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGFuZCBzZXR1cCB0aW1lclxyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbChzZW5kLCB0aGlzLl9pbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5fc2Vzc2lvbl9zdGF0ZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90aW1lcikge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWUuc3RvcFwiKTtcclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuX3RpbWVyKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBXaW5kb3cgfSBmcm9tICcuL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZG92YUlGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyA9ICdoaWRkZW49eWVzJztcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgQ29yZG92YVBvcHVwV2luZG93IH0gZnJvbSAnLi9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvcmRvdmFQb3B1cE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdFBvcHVwRmVhdHVyZXMgPSAnbG9jYXRpb249bm8sdG9vbGJhcj1ubyx6b29tPW5vJztcclxuY29uc3QgRGVmYXVsdFBvcHVwVGFyZ2V0ID0gXCJfYmxhbmtcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Jkb3ZhUG9wdXBXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcclxuICAgICAgICB0aGlzLnRhcmdldCA9IHBhcmFtcy5wb3B1cFdpbmRvd1RhcmdldCB8fCBEZWZhdWx0UG9wdXBUYXJnZXQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdF91cmkgPSBwYXJhbXMuc3RhcnRVcmw7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93LmN0b3I6IHJlZGlyZWN0X3VyaTogXCIgKyB0aGlzLnJlZGlyZWN0X3VyaSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2lzSW5BcHBCcm93c2VySW5zdGFsbGVkKGNvcmRvdmFNZXRhZGF0YSkge1xyXG4gICAgICAgIHJldHVybiBbXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXJcIiwgXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXIuaW5hcHBicm93c2VyXCIsIFwib3JnLmFwYWNoZS5jb3Jkb3ZhLmluYXBwYnJvd3NlclwiXS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3Jkb3ZhTWV0YWRhdGEuaGFzT3duUHJvcGVydHkobmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5jb3Jkb3ZhKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3IoXCJjb3Jkb3ZhIGlzIHVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgY29yZG92YU1ldGFkYXRhID0gd2luZG93LmNvcmRvdmEucmVxdWlyZShcImNvcmRvdmEvcGx1Z2luX2xpc3RcIikubWV0YWRhdGE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZChjb3Jkb3ZhTWV0YWRhdGEpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yKFwiSW5BcHBCcm93c2VyIHBsdWdpbiBub3QgZm91bmRcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IGNvcmRvdmEuSW5BcHBCcm93c2VyLm9wZW4ocGFyYW1zLnVybCwgdGhpcy50YXJnZXQsIHRoaXMuZmVhdHVyZXMpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50ID0gdGhpcy5fZXhpdENhbGxiYWNrLmJpbmQodGhpcyk7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCA9IHRoaXMuX2xvYWRTdGFydENhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVwLmFkZEV2ZW50TGlzdGVuZXIoXCJleGl0XCIsIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1cC5hZGRFdmVudExpc3RlbmVyKFwibG9hZHN0YXJ0XCIsIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFN0YXJ0Q2FsbGJhY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQudXJsLmluZGV4T2YodGhpcy5yZWRpcmVjdF91cmkpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IGV2ZW50LnVybCB9KTtcclxuICAgICAgICB9ICAgIFxyXG4gICAgfVxyXG4gICAgX2V4aXRDYWxsYmFjayhtZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fZXJyb3IobWVzc2FnZSk7ICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfc3VjY2VzcyhkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3c6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBjb3Jkb3ZhIHBvcHVwIHdpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKXtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93OiBjbGVhbmluZyB1cCBwb3B1cFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImV4aXRcIiwgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRzdGFydFwiLCB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXJyb3JSZXNwb25zZSBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHtlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIGVycm9yX3VyaSwgc3RhdGV9PXt9XHJcbiAgICApIHtcclxuICAgICAgICAgaWYgKCFlcnJvcil7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk5vIGVycm9yIHBhc3NlZCB0byBFcnJvclJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlcnJvclwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyKGVycm9yX2Rlc2NyaXB0aW9uIHx8IGVycm9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFcnJvclJlc3BvbnNlXCI7XHJcblxyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSBlcnJvcl91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXZlbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG5hbWUpIHtcclxuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLl9jYWxsYmFja3MgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRIYW5kbGVyKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzLnB1c2goY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUhhbmRsZXIoY2IpIHtcclxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5fY2FsbGJhY2tzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IGNiKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByYWlzZSguLi5wYXJhbXMpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJFdmVudDogUmFpc2luZyBldmVudDogXCIgKyB0aGlzLl9uYW1lKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3NbaV0oLi4ucGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuY29uc3QgdGltZXIgPSB7XHJcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGNiLCBkdXJhdGlvbikge1xyXG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbChjYiwgZHVyYXRpb24pO1xyXG4gICAgfSxcclxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcclxuICAgICAgICByZXR1cm4gY2xlYXJJbnRlcnZhbChoYW5kbGUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubGV0IHRlc3RpbmcgPSBmYWxzZTtcclxubGV0IHJlcXVlc3QgPSBudWxsO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdsb2JhbCB7XHJcblxyXG4gICAgc3RhdGljIF90ZXN0aW5nKCkge1xyXG4gICAgICAgIHRlc3RpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgbG9jYXRpb24oKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsb2NhbFN0b3JhZ2UoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgc2Vzc2lvblN0b3JhZ2UoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNldFhNTEh0dHBSZXF1ZXN0KG5ld1JlcXVlc3QpIHtcclxuICAgICAgICByZXF1ZXN0ID0gbmV3UmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IFhNTEh0dHBSZXF1ZXN0KCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdCB8fCBYTUxIdHRwUmVxdWVzdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCB0aW1lcigpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRpbWVyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IElGcmFtZVdpbmRvdyB9IGZyb20gJy4vSUZyYW1lV2luZG93LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJRnJhbWVOYXZpZ2F0b3Ige1xyXG5cclxuICAgIHByZXBhcmUocGFyYW1zKSB7XHJcbiAgICAgICAgbGV0IGZyYW1lID0gbmV3IElGcmFtZVdpbmRvdyhwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZnJhbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZU5hdmlnYXRvci5jYWxsYmFja1wiKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgSUZyYW1lV2luZG93Lm5vdGlmeVBhcmVudCh1cmwpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdFRpbWVvdXQgPSAxMDAwMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBJRnJhbWVXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50ID0gdGhpcy5fbWVzc2FnZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG5cclxuICAgICAgICAvLyBzaG90Z3VuIGFwcHJvYWNoXHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLndpZHRoID0gMDtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5oZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9mcmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgdGltZW91dCA9IHBhcmFtcy5zaWxlbnRSZXF1ZXN0VGltZW91dCB8fCBEZWZhdWx0VGltZW91dDtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm5hdmlnYXRlOiBVc2luZyB0aW1lb3V0IG9mOlwiLCB0aW1lb3V0KTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLl90aW1lb3V0LmJpbmQodGhpcyksIHRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZS5zcmMgPSBwYXJhbXMudXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfc3VjY2VzcyhkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3c6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBmcmFtZSB3aW5kb3dcIik7XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZShkYXRhKTtcclxuICAgIH1cclxuICAgIF9lcnJvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5fcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9jbGVhbnVwKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9mcmFtZSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3c6IGNsZWFudXBcIik7XHJcblxyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XHJcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuX2ZyYW1lKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF90aW1lb3V0KCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy50aW1lb3V0XCIpO1xyXG4gICAgICAgIHRoaXMuX2Vycm9yKFwiRnJhbWUgd2luZG93IHRpbWVkIG91dFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBfbWVzc2FnZShlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm1lc3NhZ2VcIik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90aW1lciAmJlxyXG4gICAgICAgICAgICBlLm9yaWdpbiA9PT0gdGhpcy5fb3JpZ2luICYmXHJcbiAgICAgICAgICAgIGUuc291cmNlID09PSB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCB1cmwgPSBlLmRhdGE7XHJcbiAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IHVybCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiSW52YWxpZCByZXNwb25zZSBmcm9tIGZyYW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBfb3JpZ2luKCkge1xyXG4gICAgICAgIHJldHVybiBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG5vdGlmeVBhcmVudCh1cmwpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50XCIpO1xyXG4gICAgICAgIGlmICh3aW5kb3cuZnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHVybCA9IHVybCB8fCB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm5vdGlmeVBhcmVudDogcG9zdGluZyB1cmwgbWVzc2FnZSB0byBwYXJlbnRcIik7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHVybCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSW5NZW1vcnlXZWJTdG9yYWdle1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLl9kYXRhID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbShrZXkpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJbk1lbW9yeVdlYlN0b3JhZ2UuZ2V0SXRlbVwiLCBrZXkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SXRlbShrZXksIHZhbHVlKXtcclxuICAgICAgICBMb2cuZGVidWcoXCJJbk1lbW9yeVdlYlN0b3JhZ2Uuc2V0SXRlbVwiLCBrZXkpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUl0ZW0oa2V5KXtcclxuICAgICAgICBMb2cuZGVidWcoXCJJbk1lbW9yeVdlYlN0b3JhZ2UucmVtb3ZlSXRlbVwiLCBrZXkpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9kYXRhW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxlbmd0aCgpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fZGF0YSkubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGtleShpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9kYXRhKVtpbmRleF07XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pIHtcclxuICAgIHJldHVybiBjbGFzcyBKb3NlVXRpbCB7XHJcblxyXG4gICAgICAgIHN0YXRpYyBwYXJzZUp3dChqd3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwucGFyc2VKd3RcIik7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBqd3MuSldTLnBhcnNlKGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogdG9rZW4uaGVhZGVyT2JqLFxyXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRva2VuLnBheWxvYWRPYmpcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3Qoand0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwudmFsaWRhdGVKd3RcIik7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleS5rdHkgPT09IFwiUlNBXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmUgJiYga2V5Lm4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS54NWMgJiYga2V5Lng1Yy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IGI2NHRvaGV4KGtleS54NWNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGhleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lmt0eSA9PT0gXCJFQ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5jcnYgJiYga2V5LnggJiYga2V5LnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogRUMga2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJFQyBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFVuc3VwcG9ydGVkIGtleSB0eXBlXCIsIGtleSAmJiBrZXkua3R5KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2V5IHR5cGU6IFwiICsga2V5ICYmIGtleS5rdHkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwuX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUgJiYgZS5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiSldUIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWNsb2NrU2tldykge1xyXG4gICAgICAgICAgICAgICAgY2xvY2tTa2V3ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFub3cpIHtcclxuICAgICAgICAgICAgICAgIG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBKb3NlVXRpbC5wYXJzZUp3dChqd3QpLnBheWxvYWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQuaXNzKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGF5bG9hZC5pc3MgIT09IGlzc3Vlcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBJbnZhbGlkIGlzc3VlciBpbiB0b2tlblwiLCBwYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBpc3N1ZXIgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5pc3MpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF1ZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBhdWQgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdWQgd2FzIG5vdCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHZhbGlkQXVkaWVuY2UgPSBwYXlsb2FkLmF1ZCA9PT0gYXVkaWVuY2UgfHwgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdWQpICYmIHBheWxvYWQuYXVkLmluZGV4T2YoYXVkaWVuY2UpID49IDApO1xyXG4gICAgICAgICAgICBpZiAoIXZhbGlkQXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlblwiLCBwYXlsb2FkLmF1ZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlbjogXCIgKyBwYXlsb2FkLmF1ZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gYXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhenAgaW4gdG9rZW5cIiwgcGF5bG9hZC5henApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgYXpwIGluIHRva2VuOiBcIiArIHBheWxvYWQuYXpwKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGltZUluc2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG93ZXJOb3cgPSBub3cgKyBjbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXBwZXJOb3cgPSBub3cgLSBjbG9ja1NrZXc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlhdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogaWF0IHdhcyBub3QgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsb3dlck5vdyA8IHBheWxvYWQuaWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpYXQgaXMgaW4gdGhlIGZ1dHVyZVwiLCBwYXlsb2FkLmlhdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCBpcyBpbiB0aGUgZnV0dXJlOiBcIiArIHBheWxvYWQuaWF0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubmJmICYmIGxvd2VyTm93IDwgcGF5bG9hZC5uYmYpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IG5iZiBpcyBpbiB0aGUgZnV0dXJlXCIsIHBheWxvYWQubmJmKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibmJmIGlzIGluIHRoZSBmdXR1cmU6IFwiICsgcGF5bG9hZC5uYmYpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZXhwIHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZXhwIDwgdXBwZXJOb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGV4cCBpcyBpbiB0aGUgcGFzdFwiLCBwYXlsb2FkLmV4cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImV4cCBpcyBpbiB0aGUgcGFzdDpcIiArIHBheWxvYWQuZXhwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd3MuSldTLnZlcmlmeShqd3QsIGtleSwgQWxsb3dlZFNpZ25pbmdBbGdzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IHNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhhc2hTdHJpbmcodmFsdWUsIGFsZykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5VdGlsLmhhc2hTdHJpbmcodmFsdWUsIGFsZyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhleFRvQmFzZTY0VXJsKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaGV4dG9iNjR1KHZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IGp3cywgS2V5VXRpbCwgWDUwOSwgY3J5cHRvLCBoZXh0b2I2NHUsIGI2NHRvaGV4LCBBbGxvd2VkU2lnbmluZ0FsZ3MgfSBmcm9tICcuL2NyeXB0by9yc2EnO1xyXG5pbXBvcnQgZ2V0Sm9zZVV0aWwgZnJvbSAnLi9Kb3NlVXRpbEltcGwnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEpvc2VVdGlsID0gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pO1xyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBhZGRpdGlvbmFsQ29udGVudFR5cGVzID0gbnVsbCwgXHJcbiAgICAgICAgWE1MSHR0cFJlcXVlc3RDdG9yID0gR2xvYmFsLlhNTEh0dHBSZXF1ZXN0LCBcclxuICAgICAgICBqd3RIYW5kbGVyID0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxDb250ZW50VHlwZXMgJiYgQXJyYXkuaXNBcnJheShhZGRpdGlvbmFsQ29udGVudFR5cGVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRUeXBlcyA9IGFkZGl0aW9uYWxDb250ZW50VHlwZXMuc2xpY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbnRlbnRUeXBlcy5wdXNoKCdhcHBsaWNhdGlvbi9qc29uJyk7XHJcbiAgICAgICAgaWYgKGp3dEhhbmRsZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzLnB1c2goJ2FwcGxpY2F0aW9uL2p3dCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fWE1MSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdEN0b3I7XHJcbiAgICAgICAgdGhpcy5fand0SGFuZGxlciA9IGp3dEhhbmRsZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SnNvbih1cmwsIHRva2VuKSB7XHJcbiAgICAgICAgaWYgKCF1cmwpe1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5nZXRKc29uOiBObyB1cmwgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmxcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uLCB1cmw6IFwiLCB1cmwpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgICAgICByZXEub3BlbignR0VUJywgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhbGxvd2VkQ29udGVudFR5cGVzID0gdGhpcy5fY29udGVudFR5cGVzO1xyXG4gICAgICAgICAgICB2YXIgand0SGFuZGxlciA9IHRoaXMuX2p3dEhhbmRsZXI7XHJcblxyXG4gICAgICAgICAgICByZXEub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uOiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkLCBzdGF0dXNcIiwgcmVxLnN0YXR1cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT09IDIwMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPSByZXEuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBhbGxvd2VkQ29udGVudFR5cGVzLmZpbmQoaXRlbT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gXCJhcHBsaWNhdGlvbi9qd3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgand0SGFuZGxlcihyZXEpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5nZXRKc29uOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIENvbnRlbnQtVHlwZTogXCIgKyBjb250ZW50VHlwZSArIFwiLCBmcm9tIFVSTDogXCIgKyB1cmwpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihyZXEuc3RhdHVzVGV4dCArIFwiIChcIiArIHJlcS5zdGF0dXMgKyBcIilcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IG5ldHdvcmsgZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJOZXR3b3JrIEVycm9yXCIpKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogdG9rZW4gcGFzc2VkLCBzZXR0aW5nIEF1dGhvcml6YXRpb24gaGVhZGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiICsgdG9rZW4pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXEuc2VuZCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RGb3JtKHVybCwgcGF5bG9hZCkge1xyXG4gICAgICAgIGlmICghdXJsKXtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLnBvc3RGb3JtLCB1cmw6IFwiLCB1cmwpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgICAgICByZXEub3BlbignUE9TVCcsIHVybCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYWxsb3dlZENvbnRlbnRUeXBlcyA9IHRoaXMuX2NvbnRlbnRUeXBlcztcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkLCBzdGF0dXNcIiwgcmVxLnN0YXR1cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT09IDIwMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPSByZXEuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBhbGxvd2VkQ29udGVudFR5cGVzLmZpbmQoaXRlbT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIENvbnRlbnQtVHlwZTogXCIgKyBjb250ZW50VHlwZSArIFwiLCBmcm9tIFVSTDogXCIgKyB1cmwpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT09IDQwMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPSByZXEuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBhbGxvd2VkQ29udGVudFR5cGVzLmZpbmQoaXRlbT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEVycm9yIGZyb20gc2VydmVyOiBcIiwgcGF5bG9hZC5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocGF5bG9hZC5lcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgcGFyc2luZyBKU09OIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IocmVxLnN0YXR1c1RleHQgKyBcIiAoXCIgKyByZXEuc3RhdHVzICsgXCIpXCIpKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogbmV0d29yayBlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbGV0IGJvZHkgPSBcIlwiO1xyXG4gICAgICAgICAgICBmb3IobGV0IGtleSBpbiBwYXlsb2FkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcGF5bG9hZFtrZXldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gXCImXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gXCI9XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSArPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcclxuICAgICAgICAgICAgcmVxLnNlbmQoYm9keSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxubGV0IG5vcExvZ2dlciA9IHtcclxuICAgIGRlYnVnKCl7fSxcclxuICAgIGluZm8oKXt9LFxyXG4gICAgd2Fybigpe30sXHJcbiAgICBlcnJvcigpe31cclxufTtcclxuXHJcbmNvbnN0IE5PTkUgPSAwO1xyXG5jb25zdCBFUlJPUiA9IDE7XHJcbmNvbnN0IFdBUk4gPSAyO1xyXG5jb25zdCBJTkZPID0gMztcclxuY29uc3QgREVCVUcgPSA0O1xyXG5cclxubGV0IGxvZ2dlcjtcclxubGV0IGxldmVsO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvZyB7XHJcbiAgICBzdGF0aWMgZ2V0IE5PTkUoKSB7cmV0dXJuIE5PTkV9O1xyXG4gICAgc3RhdGljIGdldCBFUlJPUigpIHtyZXR1cm4gRVJST1J9O1xyXG4gICAgc3RhdGljIGdldCBXQVJOKCkge3JldHVybiBXQVJOfTtcclxuICAgIHN0YXRpYyBnZXQgSU5GTygpIHtyZXR1cm4gSU5GT307XHJcbiAgICBzdGF0aWMgZ2V0IERFQlVHKCkge3JldHVybiBERUJVR307XHJcbiAgICBcclxuICAgIHN0YXRpYyByZXNldCgpe1xyXG4gICAgICAgIGxldmVsID0gSU5GTztcclxuICAgICAgICBsb2dnZXIgPSBub3BMb2dnZXI7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXQgbGV2ZWwoKXtcclxuICAgICAgICByZXR1cm4gbGV2ZWw7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc2V0IGxldmVsKHZhbHVlKXtcclxuICAgICAgICBpZiAoTk9ORSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBERUJVRyl7XHJcbiAgICAgICAgICAgIGxldmVsID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZyBsZXZlbFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXQgbG9nZ2VyKCl7XHJcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzZXQgbG9nZ2VyKHZhbHVlKXtcclxuICAgICAgICBpZiAoIXZhbHVlLmRlYnVnICYmIHZhbHVlLmluZm8pIHtcclxuICAgICAgICAgICAgLy8ganVzdCB0byBzdGF5IGJhY2t3YXJkcyBjb21wYXQuIGNhbiByZW1vdmUgaW4gMi4wXHJcbiAgICAgICAgICAgIHZhbHVlLmRlYnVnID0gdmFsdWUuaW5mbztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5kZWJ1ZyAmJiB2YWx1ZS5pbmZvICYmIHZhbHVlLndhcm4gJiYgdmFsdWUuZXJyb3Ipe1xyXG4gICAgICAgICAgICBsb2dnZXIgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nZ2VyXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGRlYnVnKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBERUJVRyl7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zy5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyBpbmZvKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBJTkZPKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8uYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgd2FybiguLi5hcmdzKXtcclxuICAgICAgICBpZiAobGV2ZWwgPj0gV0FSTil7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGVycm9yKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBFUlJPUil7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvci5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuTG9nLnJlc2V0KCk7XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcclxuXHJcbmNvbnN0IE9pZGNNZXRhZGF0YVVybFBhdGggPSAnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1ldGFkYXRhU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZTogTm8gc2V0dGluZ3MgcGFzc2VkIHRvIE1ldGFkYXRhU2VydmljZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcihbJ2FwcGxpY2F0aW9uL2p3ay1zZXQranNvbiddKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWV0YWRhdGFVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmwgJiYgdGhpcy5fbWV0YWRhdGFVcmwuaW5kZXhPZihPaWRjTWV0YWRhdGFVcmxQYXRoKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmxbdGhpcy5fbWV0YWRhdGFVcmwubGVuZ3RoIC0gMV0gIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9IE9pZGNNZXRhZGF0YVVybFBhdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZXRhZGF0YSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBSZXR1cm5pbmcgbWV0YWRhdGEgZnJvbSBzZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBObyBhdXRob3JpdHkgb3IgbWV0YWRhdGFVcmwgY29uZmlndXJlZCBvbiBzZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF1dGhvcml0eSBvciBtZXRhZGF0YVVybCBjb25maWd1cmVkIG9uIHNldHRpbmdzXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YTogZ2V0dGluZyBtZXRhZGF0YSBmcm9tXCIsIHRoaXMubWV0YWRhdGFVcmwpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UuZ2V0SnNvbih0aGlzLm1ldGFkYXRhVXJsKVxyXG4gICAgICAgICAgICAudGhlbihtZXRhZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IGpzb24gcmVjZWl2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJc3N1ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJpc3N1ZXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXV0aG9yaXphdGlvbkVuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiYXV0aG9yaXphdGlvbl9lbmRwb2ludFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VySW5mb0VuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwidXNlcmluZm9fZW5kcG9pbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VG9rZW5FbmRwb2ludChvcHRpb25hbD10cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJ0b2tlbl9lbmRwb2ludFwiLCBvcHRpb25hbCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiY2hlY2tfc2Vzc2lvbl9pZnJhbWVcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RW5kU2Vzc2lvbkVuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiZW5kX3Nlc3Npb25fZW5kcG9pbnRcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmV2b2NhdGlvbkVuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwicmV2b2NhdGlvbl9lbmRwb2ludFwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRLZXlzRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJqd2tzX3VyaVwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0TWV0YWRhdGFQcm9wZXJ0eShuYW1lLCBvcHRpb25hbD1mYWxzZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5IGZvcjogXCIgKyBuYW1lKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IG1ldGFkYXRhIHJlY2lldmVkXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhW25hbWVdID09PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWwgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIG9wdGlvbmFsIHByb3BlcnR5IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIHByb3BlcnR5IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgZG9lcyBub3QgY29udGFpbiBwcm9wZXJ0eSBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbWV0YWRhdGFbbmFtZV07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2lnbmluZ0tleXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czogUmV0dXJuaW5nIHNpZ25pbmdLZXlzIGZyb20gc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJqd2tzX3VyaVwiKS50aGVuKGp3a3NfdXJpID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBqd2tzX3VyaSByZWNlaXZlZFwiLCBqd2tzX3VyaSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UuZ2V0SnNvbihqd2tzX3VyaSkudGhlbihrZXlTZXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBrZXkgc2V0IHJlY2VpdmVkXCIsIGtleVNldCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFrZXlTZXQua2V5cykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czogTWlzc2luZyBrZXlzIG9uIGtleXNldFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGtleXMgb24ga2V5c2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzID0ga2V5U2V0LmtleXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudFNldHRpbmdzIH0gZnJvbSAnLi9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9FcnJvclJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVxdWVzdCB9IGZyb20gJy4vU2lnbmluUmVxdWVzdC5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblJlc3BvbnNlIH0gZnJvbSAnLi9TaWduaW5SZXNwb25zZS5qcyc7XHJcbmltcG9ydCB7IFNpZ25vdXRSZXF1ZXN0IH0gZnJvbSAnLi9TaWdub3V0UmVxdWVzdC5qcyc7XHJcbmltcG9ydCB7IFNpZ25vdXRSZXNwb25zZSB9IGZyb20gJy4vU2lnbm91dFJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgU2lnbmluU3RhdGUgfSBmcm9tICcuL1NpZ25pblN0YXRlLmpzJztcclxuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL1N0YXRlLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBPaWRjQ2xpZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzID0ge30pIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3MgaW5zdGFuY2VvZiBPaWRjQ2xpZW50U2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzID0gbmV3IE9pZGNDbGllbnRTZXR0aW5ncyhzZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBfc3RhdGVTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5zdGF0ZVN0b3JlO1xyXG4gICAgfVxyXG4gICAgZ2V0IF92YWxpZGF0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MudmFsaWRhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9tZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MubWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlU2lnbmluUmVxdWVzdCh7XHJcbiAgICAgICAgcmVzcG9uc2VfdHlwZSwgc2NvcGUsIHJlZGlyZWN0X3VyaSxcclxuICAgICAgICAvLyBkYXRhIHdhcyBtZWFudCB0byBiZSB0aGUgcGxhY2UgYSBjYWxsZXIgY291bGQgaW5kaWNhdGUgdGhlIGRhdGEgdG9cclxuICAgICAgICAvLyBoYXZlIHJvdW5kIHRyaXBwZWQsIGJ1dCBwZW9wbGUgd2VyZSBnZXR0aW5nIGNvbmZ1c2VkLCBzbyBpIGFkZGVkIHN0YXRlIChzaW5jZSB0aGF0IG1hdGNoZXMgdGhlIHNwZWMpXHJcbiAgICAgICAgLy8gYW5kIHNvIG5vdyBpZiBkYXRhIGlzIG5vdCBwYXNzZWQsIGJ1dCBzdGF0ZSBpcyB0aGVuIHN0YXRlIHdpbGwgYmUgdXNlZFxyXG4gICAgICAgIGRhdGEsIHN0YXRlLCBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsXHJcbiAgICAgICAgcmVzb3VyY2UsIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCByZXNwb25zZV9tb2RlLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGUgfSA9IHt9LFxyXG4gICAgICAgIHN0YXRlU3RvcmVcclxuICAgICkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbmluUmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgbGV0IGNsaWVudF9pZCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICByZXNwb25zZV90eXBlID0gcmVzcG9uc2VfdHlwZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIHNjb3BlID0gc2NvcGUgfHwgdGhpcy5fc2V0dGluZ3Muc2NvcGU7XHJcbiAgICAgICAgcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgLy8gaWRfdG9rZW5faGludCwgbG9naW5faGludCBhcmVuJ3QgYWxsb3dlZCBvbiBfc2V0dGluZ3NcclxuICAgICAgICBwcm9tcHQgPSBwcm9tcHQgfHwgdGhpcy5fc2V0dGluZ3MucHJvbXB0O1xyXG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5IHx8IHRoaXMuX3NldHRpbmdzLmRpc3BsYXk7XHJcbiAgICAgICAgbWF4X2FnZSA9IG1heF9hZ2UgfHwgdGhpcy5fc2V0dGluZ3MubWF4X2FnZTtcclxuICAgICAgICB1aV9sb2NhbGVzID0gdWlfbG9jYWxlcyB8fCB0aGlzLl9zZXR0aW5ncy51aV9sb2NhbGVzO1xyXG4gICAgICAgIGFjcl92YWx1ZXMgPSBhY3JfdmFsdWVzIHx8IHRoaXMuX3NldHRpbmdzLmFjcl92YWx1ZXM7XHJcbiAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNvdXJjZTtcclxuICAgICAgICByZXNwb25zZV9tb2RlID0gcmVzcG9uc2VfbW9kZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlO1xyXG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSBleHRyYVF1ZXJ5UGFyYW1zIHx8IHRoaXMuX3NldHRpbmdzLmV4dHJhUXVlcnlQYXJhbXM7XHJcblxyXG4gICAgICAgIGxldCBhdXRob3JpdHkgPSB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHk7XHJcblxyXG4gICAgICAgIGlmIChTaWduaW5SZXF1ZXN0LmlzQ29kZShyZXNwb25zZV90eXBlKSAmJiByZXNwb25zZV90eXBlICE9PSBcImNvZGVcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiT3BlbklEIENvbm5lY3QgaHlicmlkIGZsb3cgaXMgbm90IHN1cHBvcnRlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWduaW5SZXF1ZXN0OiBSZWNlaXZlZCBhdXRob3JpemF0aW9uIGVuZHBvaW50XCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgc2lnbmluUmVxdWVzdCA9IG5ldyBTaWduaW5SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgIHVybCxcclxuICAgICAgICAgICAgICAgIGNsaWVudF9pZCxcclxuICAgICAgICAgICAgICAgIHJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlX3R5cGUsXHJcbiAgICAgICAgICAgICAgICBzY29wZSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgfHwgc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBhdXRob3JpdHksXHJcbiAgICAgICAgICAgICAgICBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsXHJcbiAgICAgICAgICAgICAgICByZXNvdXJjZSwgcmVxdWVzdCwgcmVxdWVzdF91cmksIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSwgcmVzcG9uc2VfbW9kZVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzaWduaW5TdGF0ZSA9IHNpZ25pblJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVTdG9yZS5zZXQoc2lnbmluU3RhdGUuaWQsIHNpZ25pblN0YXRlLnRvU3RvcmFnZVN0cmluZygpKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaW5SZXF1ZXN0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHJlbW92ZVN0YXRlID0gZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlXCIpO1xyXG5cclxuICAgICAgICBsZXQgdXNlUXVlcnkgPSB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlID09PSBcInF1ZXJ5XCIgfHwgXHJcbiAgICAgICAgICAgICghdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfbW9kZSAmJiBTaWduaW5SZXF1ZXN0LmlzQ29kZSh0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlKSk7XHJcbiAgICAgICAgbGV0IGRlbGltaXRlciA9IHVzZVF1ZXJ5ID8gXCI/XCIgOiBcIiNcIjtcclxuXHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25pblJlc3BvbnNlKHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN0YXRlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0ZUFwaShyZXNwb25zZS5zdGF0ZSkudGhlbihzdG9yZWRTdGF0ZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkU3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhzdG9yZWRTdGF0ZVN0cmluZyk7XHJcbiAgICAgICAgICAgIHJldHVybiB7c3RhdGUsIHJlc3BvbnNlfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgdHJ1ZSkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2U6IFJlY2VpdmVkIHN0YXRlIGZyb20gc3RvcmFnZTsgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlU2lnbm91dFJlcXVlc3Qoe2lkX3Rva2VuX2hpbnQsIGRhdGEsIHN0YXRlLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSB9ID0ge30sXHJcbiAgICAgICAgc3RhdGVTdG9yZVxyXG4gICAgKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0gZXh0cmFRdWVyeVBhcmFtcyB8fCB0aGlzLl9zZXR0aW5ncy5leHRyYVF1ZXJ5UGFyYW1zO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldEVuZFNlc3Npb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IE5vIGVuZCBzZXNzaW9uIGVuZHBvaW50IHVybCByZXR1cm5lZFwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0OiBSZWNlaXZlZCBlbmQgc2Vzc2lvbiBlbmRwb2ludFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgU2lnbm91dFJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgaWRfdG9rZW5faGludCxcclxuICAgICAgICAgICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgfHwgc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdF90eXBlXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZ25vdXRTdGF0ZSA9IHJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIGlmIChzaWdub3V0U3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFNpZ25vdXQgcmVxdWVzdCBoYXMgc3RhdGUgdG8gcGVyc2lzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG4gICAgICAgICAgICAgICAgc3RhdGVTdG9yZS5zZXQoc2lnbm91dFN0YXRlLmlkLCBzaWdub3V0U3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCByZW1vdmVTdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IG5ldyBTaWdub3V0UmVzcG9uc2UodXJsKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLndhcm4oXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZTogUmVzcG9uc2Ugd2FzIGVycm9yOiBcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3VuZGVmaW5lZCwgcmVzcG9uc2V9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUtleSA9IHJlc3BvbnNlLnN0YXRlO1xyXG5cclxuICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG5cclxuICAgICAgICB2YXIgc3RhdGVBcGkgPSByZW1vdmVTdGF0ZSA/IHN0YXRlU3RvcmUucmVtb3ZlLmJpbmQoc3RhdGVTdG9yZSkgOiBzdGF0ZVN0b3JlLmdldC5iaW5kKHN0YXRlU3RvcmUpO1xyXG4gICAgICAgIHJldHVybiBzdGF0ZUFwaShzdGF0ZUtleSkudGhlbihzdG9yZWRTdGF0ZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkU3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmVkU3RhdGVTdHJpbmcpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtzdGF0ZSwgcmVzcG9uc2V9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NTaWdub3V0UmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbm91dFJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCB0cnVlKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWdub3V0UmVzcG9uc2U6IFJlY2VpdmVkIHN0YXRlIGZyb20gc3RvcmFnZTsgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZShzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyU3RhbGVTdGF0ZShzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jbGVhclN0YWxlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHJldHVybiBTdGF0ZS5jbGVhclN0YWxlU3RhdGUoc3RhdGVTdG9yZSwgdGhpcy5zZXR0aW5ncy5zdGFsZVN0YXRlQWdlKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlVmFsaWRhdG9yIH0gZnJvbSAnLi9SZXNwb25zZVZhbGlkYXRvci5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuXHJcbmNvbnN0IE9pZGNNZXRhZGF0YVVybFBhdGggPSAnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgRGVmYXVsdFJlc3BvbnNlVHlwZSA9IFwiaWRfdG9rZW5cIjtcclxuY29uc3QgRGVmYXVsdFNjb3BlID0gXCJvcGVuaWRcIjtcclxuY29uc3QgRGVmYXVsdFN0YWxlU3RhdGVBZ2UgPSA2MCAqIDE1OyAvLyBzZWNvbmRzXHJcbmNvbnN0IERlZmF1bHRDbG9ja1NrZXdJblNlY29uZHMgPSA2MCAqIDU7XHJcblxyXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudFNldHRpbmdzIHtcclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICAvLyBtZXRhZGF0YSByZWxhdGVkXHJcbiAgICAgICAgYXV0aG9yaXR5LCBtZXRhZGF0YVVybCwgbWV0YWRhdGEsIHNpZ25pbmdLZXlzLFxyXG4gICAgICAgIC8vIGNsaWVudCByZWxhdGVkXHJcbiAgICAgICAgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCByZXNwb25zZV90eXBlID0gRGVmYXVsdFJlc3BvbnNlVHlwZSwgc2NvcGUgPSBEZWZhdWx0U2NvcGUsXHJcbiAgICAgICAgcmVkaXJlY3RfdXJpLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgLy8gb3B0aW9uYWwgcHJvdG9jb2xcclxuICAgICAgICBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIC8vIGJlaGF2aW9yIGZsYWdzXHJcbiAgICAgICAgZmlsdGVyUHJvdG9jb2xDbGFpbXMgPSB0cnVlLCBsb2FkVXNlckluZm8gPSB0cnVlLFxyXG4gICAgICAgIHN0YWxlU3RhdGVBZ2UgPSBEZWZhdWx0U3RhbGVTdGF0ZUFnZSwgY2xvY2tTa2V3ID0gRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyxcclxuICAgICAgICB1c2VySW5mb0p3dElzc3VlciA9ICdPUCcsXHJcbiAgICAgICAgLy8gb3RoZXIgYmVoYXZpb3JcclxuICAgICAgICBzdGF0ZVN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKCksXHJcbiAgICAgICAgUmVzcG9uc2VWYWxpZGF0b3JDdG9yID0gUmVzcG9uc2VWYWxpZGF0b3IsXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0ge31cclxuICAgIH0gPSB7fSkge1xyXG5cclxuICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSBhdXRob3JpdHk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSBtZXRhZGF0YVVybDtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgICAgIHRoaXMuX3NpZ25pbmdLZXlzID0gc2lnbmluZ0tleXM7XHJcblxyXG4gICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IGNsaWVudF9pZDtcclxuICAgICAgICB0aGlzLl9jbGllbnRfc2VjcmV0ID0gY2xpZW50X3NlY3JldDtcclxuICAgICAgICB0aGlzLl9yZXNwb25zZV90eXBlID0gcmVzcG9uc2VfdHlwZTtcclxuICAgICAgICB0aGlzLl9zY29wZSA9IHNjb3BlO1xyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb21wdCA9IHByb21wdDtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5ID0gZGlzcGxheTtcclxuICAgICAgICB0aGlzLl9tYXhfYWdlID0gbWF4X2FnZTtcclxuICAgICAgICB0aGlzLl91aV9sb2NhbGVzID0gdWlfbG9jYWxlcztcclxuICAgICAgICB0aGlzLl9hY3JfdmFsdWVzID0gYWNyX3ZhbHVlcztcclxuICAgICAgICB0aGlzLl9yZXNvdXJjZSA9IHJlc291cmNlO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcyA9ICEhZmlsdGVyUHJvdG9jb2xDbGFpbXM7XHJcbiAgICAgICAgdGhpcy5fbG9hZFVzZXJJbmZvID0gISFsb2FkVXNlckluZm87XHJcbiAgICAgICAgdGhpcy5fc3RhbGVTdGF0ZUFnZSA9IHN0YWxlU3RhdGVBZ2U7XHJcbiAgICAgICAgdGhpcy5fY2xvY2tTa2V3ID0gY2xvY2tTa2V3O1xyXG4gICAgICAgIHRoaXMuX3VzZXJJbmZvSnd0SXNzdWVyID0gdXNlckluZm9Kd3RJc3N1ZXI7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlO1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvciA9IG5ldyBSZXNwb25zZVZhbGlkYXRvckN0b3IodGhpcyk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB0eXBlb2YgZXh0cmFRdWVyeVBhcmFtcyA9PT0gJ29iamVjdCcgPyBleHRyYVF1ZXJ5UGFyYW1zIDoge307XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xpZW50IGNvbmZpZ1xyXG4gICAgZ2V0IGNsaWVudF9pZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X2lkO1xyXG4gICAgfVxyXG4gICAgc2V0IGNsaWVudF9pZCh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIC8vIG9uZS10aW1lIHNldCBvbmx5XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudFNldHRpbmdzLnNldF9jbGllbnRfaWQ6IGNsaWVudF9pZCBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGllbnRfaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X3NlY3JldCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X3NlY3JldDtcclxuICAgIH1cclxuICAgIGdldCByZXNwb25zZV90eXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV90eXBlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjb3BlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcclxuICAgIH1cclxuICAgIGdldCByZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gb3B0aW9uYWwgcHJvdG9jb2wgcGFyYW1zXHJcbiAgICBnZXQgcHJvbXB0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9tcHQ7XHJcbiAgICB9XHJcbiAgICBnZXQgZGlzcGxheSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheTtcclxuICAgIH1cclxuICAgIGdldCBtYXhfYWdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhfYWdlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHVpX2xvY2FsZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VpX2xvY2FsZXM7XHJcbiAgICB9XHJcbiAgICBnZXQgYWNyX3ZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWNyX3ZhbHVlcztcclxuICAgIH1cclxuICAgIGdldCByZXNvdXJjZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2U7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfbW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfbW9kZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gbWV0YWRhdGFcclxuICAgIGdldCBhdXRob3JpdHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGhvcml0eTtcclxuICAgIH1cclxuICAgIHNldCBhdXRob3JpdHkodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2F1dGhvcml0eSkge1xyXG4gICAgICAgICAgICAvLyBvbmUtdGltZSBzZXQgb25seVxyXG4gICAgICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnRTZXR0aW5ncy5zZXRfYXV0aG9yaXR5OiBhdXRob3JpdHkgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXV0aG9yaXR5IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhVXJsKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSB0aGlzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybCAmJiB0aGlzLl9tZXRhZGF0YVVybC5pbmRleE9mKE9pZGNNZXRhZGF0YVVybFBhdGgpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsW3RoaXMuX21ldGFkYXRhVXJsLmxlbmd0aCAtIDFdICE9PSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSBPaWRjTWV0YWRhdGFVcmxQYXRoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0dGFibGUvY2FjaGFibGUgbWV0YWRhdGEgdmFsdWVzXHJcbiAgICBnZXQgbWV0YWRhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhO1xyXG4gICAgfVxyXG4gICAgc2V0IG1ldGFkYXRhKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lnbmluZ0tleXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbmdLZXlzO1xyXG4gICAgfVxyXG4gICAgc2V0IHNpZ25pbmdLZXlzKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fc2lnbmluZ0tleXMgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBiZWhhdmlvciBmbGFnc1xyXG4gICAgZ2V0IGZpbHRlclByb3RvY29sQ2xhaW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcztcclxuICAgIH1cclxuICAgIGdldCBsb2FkVXNlckluZm8oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VySW5mbztcclxuICAgIH1cclxuICAgIGdldCBzdGFsZVN0YXRlQWdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFsZVN0YXRlQWdlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNsb2NrU2tldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2tTa2V3O1xyXG4gICAgfVxyXG4gICAgZ2V0IHVzZXJJbmZvSnd0SXNzdWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VySW5mb0p3dElzc3VlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc3RhdGVTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVTdG9yZTtcclxuICAgIH1cclxuICAgIGdldCB2YWxpZGF0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBtZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcclxuICAgIGdldCBleHRyYVF1ZXJ5UGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4dHJhUXVlcnlQYXJhbXModmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyl7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgUG9wdXBXaW5kb3cgfSBmcm9tICcuL1BvcHVwV2luZG93LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQb3B1cE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgUG9wdXBXaW5kb3cocGFyYW1zKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxsYmFjayh1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cE5hdmlnYXRvci5jYWxsYmFja1wiKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuY29uc3QgQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsID0gNTAwO1xyXG5jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHdpZHRoPTUwMCxoZWlnaHQ9NTAwLGxlZnQ9MTAwLHRvcD0xMDA7JztcclxuLy9jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHdpZHRoPTUwMCxoZWlnaHQ9NTAwLGxlZnQ9MTAwLHRvcD0xMDA7cmVzaXphYmxlPXllcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0UG9wdXBUYXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvcHVwV2luZG93IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgdGFyZ2V0ID0gcGFyYW1zLnBvcHVwV2luZG93VGFyZ2V0IHx8IERlZmF1bHRQb3B1cFRhcmdldDtcclxuICAgICAgICBsZXQgZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcclxuXHJcbiAgICAgICAgdGhpcy5fcG9wdXAgPSB3aW5kb3cub3BlbignJywgdGFyZ2V0LCBmZWF0dXJlcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmN0b3I6IHBvcHVwIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZC5iaW5kKHRoaXMpLCBDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcHVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IEVycm9yIG9wZW5pbmcgcG9wdXAgd2luZG93XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IG5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogU2V0dGluZyBVUkwgaW4gcG9wdXBcIik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9pZCA9IHBhcmFtcy5pZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lkKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3dbXCJwb3B1cENhbGxiYWNrX1wiICsgcGFyYW1zLmlkXSA9IHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLndpbmRvdy5sb2NhdGlvbiA9IHBhcmFtcy51cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jYWxsYmFjazogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIHBvcHVwIHdpbmRvd1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBfZXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgIExvZy5lcnJvcihcIlBvcHVwV2luZG93LmVycm9yOiBcIiwgbWVzc2FnZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9jbGVhbnVwKGtlZXBPcGVuKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2xlYW51cFwiKTtcclxuXHJcbiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZFRpbWVyKTtcclxuICAgICAgICB0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIgPSBudWxsO1xyXG5cclxuICAgICAgICBkZWxldGUgd2luZG93W1wicG9wdXBDYWxsYmFja19cIiArIHRoaXMuX2lkXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwICYmICFrZWVwT3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wb3B1cCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrRm9yUG9wdXBDbG9zZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb3B1cCB8fCB0aGlzLl9wb3B1cC5jbG9zZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cCB3aW5kb3cgY2xvc2VkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoa2VlcE9wZW4pO1xyXG5cclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrIHN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IHVybCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrOiBJbnZhbGlkIHJlc3BvbnNlIGZyb20gcG9wdXBcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiSW52YWxpZCByZXNwb25zZSBmcm9tIHBvcHVwXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbm90aWZ5T3BlbmVyKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikge1xyXG4gICAgICAgIGlmICh3aW5kb3cub3BlbmVyKSB7XHJcbiAgICAgICAgICAgIHVybCA9IHVybCB8fCB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQodXJsLCBkZWxpbWl0ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBcInBvcHVwQ2FsbGJhY2tfXCIgKyBkYXRhLnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHdpbmRvdy5vcGVuZXJbbmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogcGFzc2luZyB1cmwgbWVzc2FnZSB0byBvcGVuZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVybCwga2VlcE9wZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXI6IG5vIG1hdGNoaW5nIGNhbGxiYWNrIGZvdW5kIG9uIG9wZW5lclwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gc3RhdGUgZm91bmQgaW4gcmVzcG9uc2UgdXJsXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gd2luZG93Lm9wZW5lci4gQ2FuJ3QgY29tcGxldGUgbm90aWZpY2F0aW9uLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlZGlyZWN0TmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVkaXJlY3ROYXZpZ2F0b3IubmF2aWdhdGU6IE5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFyYW1zLnVzZVJlcGxhY2VUb05hdmlnYXRlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHBhcmFtcy51cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXJsKCkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgVXNlckluZm9TZXJ2aWNlIH0gZnJvbSAnLi9Vc2VySW5mb1NlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vVG9rZW5DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9FcnJvclJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuXHJcbmNvbnN0IFByb3RvY29sQ2xhaW1zID0gW1wibm9uY2VcIiwgXCJhdF9oYXNoXCIsIFwiaWF0XCIsIFwibmJmXCIsIFwiZXhwXCIsIFwiYXVkXCIsIFwiaXNzXCIsIFwiY19oYXNoXCJdO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlc3BvbnNlVmFsaWRhdG9yIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICBVc2VySW5mb1NlcnZpY2VDdG9yID0gVXNlckluZm9TZXJ2aWNlLCBcclxuICAgICAgICBqb3NlVXRpbCA9IEpvc2VVdGlsLFxyXG4gICAgICAgIFRva2VuQ2xpZW50Q3RvciA9IFRva2VuQ2xpZW50KSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5jdG9yOiBObyBzZXR0aW5ncyBwYXNzZWQgdG8gUmVzcG9uc2VWYWxpZGF0b3JcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fdXNlckluZm9TZXJ2aWNlID0gbmV3IFVzZXJJbmZvU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICAgICAgdGhpcy5fdG9rZW5DbGllbnQgPSBuZXcgVG9rZW5DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzU2lnbmluUGFyYW1zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IHN0YXRlIHByb2Nlc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlVG9rZW5zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlOiB0b2tlbnMgdmFsaWRhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NDbGFpbXMocmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IGNsYWltcyBwcm9jZXNzZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlU2lnbm91dFJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChzdGF0ZS5pZCAhPT0gcmVzcG9uc2Uuc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IFN0YXRlIGRvZXMgbm90IG1hdGNoXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiU3RhdGUgZG9lcyBub3QgbWF0Y2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbm93IHRoYXQgd2Uga25vdyB0aGUgc3RhdGUgbWF0Y2hlcywgdGFrZSB0aGUgc3RvcmVkIGRhdGFcclxuICAgICAgICAvLyBhbmQgc2V0IGl0IGludG8gdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIGdldCB0aGVpciBzdGF0ZVxyXG4gICAgICAgIC8vIHRoaXMgaXMgaW1wb3J0YW50IGZvciBib3RoIHN1Y2Nlc3MgJiBlcnJvciBvdXRjb21lc1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBzdGF0ZSB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSBzdGF0ZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcclxuICAgICAgICAgICAgTG9nLndhcm4oXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogUmVzcG9uc2Ugd2FzIGVycm9yXCIsIHJlc3BvbnNlLmVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc1NpZ25pblBhcmFtcyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoc3RhdGUuaWQgIT09IHJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlN0YXRlIGRvZXMgbm90IG1hdGNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBObyBjbGllbnRfaWQgb24gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBjbGllbnRfaWQgb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vIGF1dGhvcml0eSBvbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF1dGhvcml0eSBvbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzIGFsbG93cyB0aGUgYXV0aG9yaXR5IHRvIGJlIGxvYWRlZCBmcm9tIHRoZSBzaWduaW4gc3RhdGVcclxuICAgICAgICBpZiAoIXRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgPSBzdGF0ZS5hdXRob3JpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVuc3VyZSB3ZSdyZSB1c2luZyB0aGUgY29ycmVjdCBhdXRob3JpdHkgaWYgdGhlIGF1dGhvcml0eSBpcyBub3QgbG9hZGVkIGZyb20gc2lnbmluIHN0YXRlXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ICYmIHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSAhPT0gc3RhdGUuYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBhdXRob3JpdHkgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1dGhvcml0eSBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcyBhbGxvd3MgdGhlIGNsaWVudF9pZCB0byBiZSBsb2FkZWQgZnJvbSB0aGUgc2lnbmluIHN0YXRlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkID0gc3RhdGUuY2xpZW50X2lkO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbnN1cmUgd2UncmUgdXNpbmcgdGhlIGNvcnJlY3QgY2xpZW50X2lkIGlmIHRoZSBjbGllbnRfaWQgaXMgbm90IGxvYWRlZCBmcm9tIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCAmJiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgIT09IHN0YXRlLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogY2xpZW50X2lkIG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJjbGllbnRfaWQgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IHRoZSBzdGF0ZSBtYXRjaGVzLCB0YWtlIHRoZSBzdG9yZWQgZGF0YVxyXG4gICAgICAgIC8vIGFuZCBzZXQgaXQgaW50byB0aGUgcmVzcG9uc2Ugc28gY2FsbGVycyBjYW4gZ2V0IHRoZWlyIHN0YXRlXHJcbiAgICAgICAgLy8gdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGJvdGggc3VjY2VzcyAmIGVycm9yIG91dGNvbWVzXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IHN0YXRlIHZhbGlkYXRlZFwiKTtcclxuICAgICAgICByZXNwb25zZS5zdGF0ZSA9IHN0YXRlLmRhdGE7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBSZXNwb25zZSB3YXMgZXJyb3JcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5ub25jZSAmJiAhcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IEV4cGVjdGluZyBpZF90b2tlbiBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUubm9uY2UgJiYgcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vdCBleHBlY3RpbmcgaWRfdG9rZW4gaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5jb2RlX3ZlcmlmaWVyICYmICFyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBFeHBlY3RpbmcgY29kZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGNvZGUgaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5jb2RlX3ZlcmlmaWVyICYmIHJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vdCBleHBlY3RpbmcgY29kZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgY29kZSBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc0NsYWltcyhyZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5pc09wZW5JZENvbm5lY3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIE9JREMsIHByb2Nlc3NpbmcgY2xhaW1zXCIpO1xyXG5cclxuICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLmxvYWRVc2VySW5mbyAmJiByZXNwb25zZS5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiBsb2FkaW5nIHVzZXIgaW5mb1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlckluZm9TZXJ2aWNlLmdldENsYWltcyhyZXNwb25zZS5hY2Nlc3NfdG9rZW4pLnRoZW4oY2xhaW1zID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogdXNlciBpbmZvIGNsYWltcyByZWNlaXZlZCBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsYWltcy5zdWIgIT09IHJlc3BvbnNlLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiBzdWIgZnJvbSB1c2VyIGluZm8gZW5kcG9pbnQgZG9lcyBub3QgbWF0Y2ggc3ViIGluIGFjY2Vzc190b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gYWNjZXNzX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSB0aGlzLl9tZXJnZUNsYWltcyhyZXNwb25zZS5wcm9maWxlLCBjbGFpbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiB1c2VyIGluZm8gY2xhaW1zIHJlY2VpdmVkLCB1cGRhdGVkIHByb2ZpbGU6XCIsIHJlc3BvbnNlLnByb2ZpbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiBub3QgbG9hZGluZyB1c2VyIGluZm9cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiByZXNwb25zZSBpcyBub3QgT0lEQywgbm90IHByb2Nlc3NpbmcgY2xhaW1zXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX21lcmdlQ2xhaW1zKGNsYWltczEsIGNsYWltczIpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgY2xhaW1zMSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IG5hbWUgaW4gY2xhaW1zMikge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWVzID0gY2xhaW1zMltuYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IFt2YWx1ZXNdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0W25hbWVdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbbmFtZV0uaW5kZXhPZih2YWx1ZSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXS5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRbbmFtZV0gIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gdGhpcy5fbWVyZ2VDbGFpbXMocmVzdWx0W25hbWVdLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gW3Jlc3VsdFtuYW1lXSwgdmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBfZmlsdGVyUHJvdG9jb2xDbGFpbXMoY2xhaW1zKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zLCBpbmNvbWluZyBjbGFpbXM6XCIsIGNsYWltcyk7XHJcblxyXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjbGFpbXMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MuX2ZpbHRlclByb3RvY29sQ2xhaW1zKSB7XHJcbiAgICAgICAgICAgIFByb3RvY29sQ2xhaW1zLmZvckVhY2godHlwZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W3R5cGVdO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltczogcHJvdG9jb2wgY2xhaW1zIGZpbHRlcmVkXCIsIHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXM6IHByb3RvY29sIGNsYWltcyBub3QgZmlsdGVyZWRcIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlVG9rZW5zKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBjb2RlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0NvZGUoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IFZhbGlkYXRpbmcgaWRfdG9rZW4gYW5kIGFjY2Vzc190b2tlblwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW5BbmRBY2Nlc3NUb2tlbihzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IFZhbGlkYXRpbmcgaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW4oc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogTm8gY29kZSB0byBwcm9jZXNzIG9yIGlkX3Rva2VuIHRvIHZhbGlkYXRlXCIpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzQ29kZShzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICB2YXIgcmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgY2xpZW50X2lkOiBzdGF0ZS5jbGllbnRfaWQsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQsXHJcbiAgICAgICAgICAgIGNvZGUgOiByZXNwb25zZS5jb2RlLFxyXG4gICAgICAgICAgICByZWRpcmVjdF91cmk6IHN0YXRlLnJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgY29kZV92ZXJpZmllcjogc3RhdGUuY29kZV92ZXJpZmllcixcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbkNsaWVudC5leGNoYW5nZUNvZGUocmVxdWVzdCkudGhlbih0b2tlblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZvcih2YXIga2V5IGluIHRva2VuUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlW2tleV0gPSB0b2tlblJlc3BvbnNlW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDb2RlOiB0b2tlbiByZXNwb25zZSBzdWNjZXNzZnVsLCBwcm9jZXNzaW5nIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ29kZTogdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc2Z1bCwgcmV0dXJuaW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XHJcblxyXG4gICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSBzdGF0ZS5jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzOiBWYWxpZGFpbmcgSldUIGF0dHJpYnV0ZXM7IHVzaW5nIGNsb2NrIHNrZXcgKGluIHNlY29uZHMpIG9mOiBcIiwgY2xvY2tTa2V3SW5TZWNvbmRzKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dEF0dHJpYnV0ZXMocmVzcG9uc2UuaWRfdG9rZW4sIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcykudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubm9uY2UgJiYgc3RhdGUubm9uY2UgIT09IHBheWxvYWQubm9uY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzOiBObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSBwYXlsb2FkO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4oc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoIXN0YXRlLm5vbmNlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIG5vbmNlIG9uIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gbm9uY2Ugb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlc3BvbnNlLmlkX3Rva2VuKTtcclxuICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlciB8fCAhand0LnBheWxvYWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIsIGp3dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLm5vbmNlICE9PSBqd3QucGF5bG9hZC5ub25jZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIga2lkID0gand0LmhlYWRlci5raWQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCkudGhlbihpc3N1ZXIgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBSZWNlaXZlZCBpc3N1ZXJcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICgha2V5cykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGtleTtcclxuICAgICAgICAgICAgICAgIGlmICgha2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5cyA9IHRoaXMuX2ZpbHRlckJ5QWxnKGtleXMsIGp3dC5oZWFkZXIuYWxnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBraWQgaXMgbWFuZGF0b3J5IG9ubHkgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUga2V5cyBpbiB0aGUgcmVmZXJlbmNlZCBKV0sgU2V0IGRvY3VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1NpZ25pbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5c1swXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmtpZCA9PT0ga2lkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pWzBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHN0YXRlLmNsaWVudF9pZDtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY2xvY2tTa2V3SW5TZWNvbmRzID0gdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3O1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogVmFsaWRhaW5nIEpXVDsgdXNpbmcgY2xvY2sgc2tldyAoaW4gc2Vjb25kcykgb2Y6IFwiLCBjbG9ja1NrZXdJblNlY29uZHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dChyZXNwb25zZS5pZF90b2tlbiwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWp3dC5wYXlsb2FkLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSBqd3QucGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9maWx0ZXJCeUFsZyhrZXlzLCBhbGcpe1xyXG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xyXG4gICAgICAgIGlmIChhbGcuc3RhcnRzV2l0aChcIlJTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiUFNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIkVTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogYWxnIG5vdCBzdXBwb3J0ZWQ6IFwiLCBhbGcpO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyQnlBbGc6IExvb2tpbmcgZm9yIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHkpO1xyXG5cclxuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGtleS5rdHkgPT09IGt0eTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICByZXR1cm4ga2V5cztcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZSkge1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UucHJvZmlsZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogTm8gcHJvZmlsZSBsb2FkZWQgZnJvbSBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHByb2ZpbGUgbG9hZGVkIGZyb20gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIGF0X2hhc2ggaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBhdF9oYXNoIGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlc3BvbnNlLmlkX3Rva2VuKTtcclxuICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIsIGp3dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhhc2hBbGcgPSBqd3QuaGVhZGVyLmFsZztcclxuICAgICAgICBpZiAoIWhhc2hBbGcgfHwgaGFzaEFsZy5sZW5ndGggIT09IDUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhhc2hCaXRzID0gaGFzaEFsZy5zdWJzdHIoMiwgMyk7XHJcbiAgICAgICAgaWYgKCFoYXNoQml0cykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnLCBoYXNoQml0cyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaGFzaEJpdHMgPSBwYXJzZUludChoYXNoQml0cyk7XHJcbiAgICAgICAgaWYgKGhhc2hCaXRzICE9PSAyNTYgJiYgaGFzaEJpdHMgIT09IDM4NCAmJiBoYXNoQml0cyAhPT0gNTEyKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcsIGhhc2hCaXRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGFsZzogXCIgKyBoYXNoQWxnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2hhID0gXCJzaGFcIiArIGhhc2hCaXRzO1xyXG4gICAgICAgIHZhciBoYXNoID0gdGhpcy5fam9zZVV0aWwuaGFzaFN0cmluZyhyZXNwb25zZS5hY2Nlc3NfdG9rZW4sIHNoYSk7XHJcbiAgICAgICAgaWYgKCFoYXNoKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBhY2Nlc3NfdG9rZW4gaGFzaCBmYWlsZWQ6XCIsIHNoYSk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGVmdCA9IGhhc2guc3Vic3RyKDAsIGhhc2gubGVuZ3RoIC8gMik7XHJcbiAgICAgICAgdmFyIGxlZnRfYjY0dSA9IHRoaXMuX2pvc2VVdGlsLmhleFRvQmFzZTY0VXJsKGxlZnQpO1xyXG4gICAgICAgIGlmIChsZWZ0X2I2NHUgIT09IHJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIiwgbGVmdF9iNjR1LCByZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IHN1Y2Nlc3NcIik7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9DaGVja1Nlc3Npb25JRnJhbWUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlc3Npb25Nb25pdG9yIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlciwgQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciA9IENoZWNrU2Vzc2lvbklGcmFtZSkge1xyXG4gICAgICAgIGlmICghdXNlck1hbmFnZXIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IuY3RvcjogTm8gdXNlciBtYW5hZ2VyIHBhc3NlZCB0byBTZXNzaW9uTW9uaXRvclwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXNlck1hbmFnZXJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlciA9IHVzZXJNYW5hZ2VyO1xyXG4gICAgICAgIHRoaXMuX0NoZWNrU2Vzc2lvbklGcmFtZUN0b3IgPSBDaGVja1Nlc3Npb25JRnJhbWVDdG9yO1xyXG5cclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuYWRkVXNlckxvYWRlZCh0aGlzLl9zdGFydC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuYWRkVXNlclVubG9hZGVkKHRoaXMuX3N0b3AuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmdldFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAvLyBkb2luZyB0aGlzIG1hbnVhbGx5IGhlcmUgc2luY2UgY2FsbGluZyBnZXRVc2VyIFxyXG4gICAgICAgICAgICAvLyBkb2Vzbid0IHRyaWdnZXIgbG9hZCBldmVudC5cclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHVzZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY3RvclxyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvciBjdG9yOiBlcnJvciBmcm9tIGdldFVzZXI6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3NldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyTWFuYWdlci5zZXR0aW5ncztcclxuICAgIH1cclxuICAgIGdldCBfbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyTWFuYWdlci5tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcbiAgICBnZXQgX2NsaWVudF9pZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9jaGVja1Nlc3Npb25JbnRlcnZhbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3MuY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XHJcbiAgICB9XHJcbiAgICBnZXQgX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBfc3RhcnQodXNlcikge1xyXG4gICAgICAgIGxldCBzZXNzaW9uX3N0YXRlID0gdXNlci5zZXNzaW9uX3N0YXRlO1xyXG5cclxuICAgICAgICBpZiAoc2Vzc2lvbl9zdGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdWIgPSB1c2VyLnByb2ZpbGUuc3ViO1xyXG4gICAgICAgICAgICB0aGlzLl9zaWQgPSB1c2VyLnByb2ZpbGUuc2lkO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb25fc3RhdGUsIFwiLCBzdWI6XCIsIHRoaXMuX3N1Yik7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldENoZWNrU2Vzc2lvbklmcmFtZSgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdGFydDogSW5pdGlhbGl6aW5nIGNoZWNrIHNlc3Npb24gaWZyYW1lXCIpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2xpZW50X2lkID0gdGhpcy5fY2xpZW50X2lkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW50ZXJ2YWwgPSB0aGlzLl9jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0b3BPbkVycm9yID0gdGhpcy5fc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3I7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUgPSBuZXcgdGhpcy5fQ2hlY2tTZXNzaW9uSUZyYW1lQ3Rvcih0aGlzLl9jYWxsYmFjay5iaW5kKHRoaXMpLCBjbGllbnRfaWQsIHVybCwgaW50ZXJ2YWwsIHN0b3BPbkVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLmxvYWQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdGFydChzZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlNlc3Npb25Nb25pdG9yLl9zdGFydDogTm8gY2hlY2sgc2Vzc2lvbiBpZnJhbWUgZm91bmQgaW4gdGhlIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIG5vbi1wcm9taXNlIGNhbGxiYWNrXHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBFcnJvciBmcm9tIGdldENoZWNrU2Vzc2lvbklmcmFtZTpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RhcnQoc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3N0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5fc3ViID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9zaWQgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdG9wXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2soKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzKCkudGhlbihzZXNzaW9uID0+IHtcclxuICAgICAgICAgICAgdmFyIHJhaXNlVXNlclNpZ25lZE91dEV2ZW50ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgPT09IHRoaXMuX3N1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJhaXNlVXNlclNpZ25lZE91dEV2ZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnNpZCA9PT0gdGhpcy5fc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2FtZSBzdWIgc3RpbGwgbG9nZ2VkIGluIGF0IE9QLCByZXN0YXJ0aW5nIGNoZWNrIHNlc3Npb24gaWZyYW1lOyBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uLnNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTYW1lIHN1YiBzdGlsbCBsb2dnZWQgaW4gYXQgT1AsIHNlc3Npb24gc3RhdGUgaGFzIGNoYW5nZWQsIHJlc3RhcnRpbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWU7IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IERpZmZlcmVudCBzdWJqZWN0IHNpZ25lZCBpbnRvIE9QOlwiLCBzZXNzaW9uLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFN1YmplY3Qgbm8gbG9uZ2VyIHNpZ25lZCBpbnRvIE9QXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmFpc2VVc2VyU2lnbmVkT3V0RXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBvdXQgZXZlbnRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlVXNlclNpZ25lZE91dCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBFcnJvciBjYWxsaW5nIHF1ZXJ5Q3VycmVudFNpZ25pblNlc3Npb247IHJhaXNpbmcgc2lnbmVkIG91dCBldmVudFwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBVcmxVdGlsaXR5IH0gZnJvbSAnLi9VcmxVdGlsaXR5LmpzJztcclxuaW1wb3J0IHsgU2lnbmluU3RhdGUgfSBmcm9tICcuL1NpZ25pblN0YXRlLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTaWduaW5SZXF1ZXN0IHtcclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICAvLyBtYW5kYXRvcnlcclxuICAgICAgICB1cmwsIGNsaWVudF9pZCwgcmVkaXJlY3RfdXJpLCByZXNwb25zZV90eXBlLCBzY29wZSwgYXV0aG9yaXR5LFxyXG4gICAgICAgIC8vIG9wdGlvbmFsXHJcbiAgICAgICAgZGF0YSwgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50LCBhY3JfdmFsdWVzLCByZXNvdXJjZSwgcmVzcG9uc2VfbW9kZSxcclxuICAgICAgICByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlXHJcbiAgICB9KSB7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyB1cmwgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmxcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gY2xpZW50X2lkIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpZW50X2lkXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXJlZGlyZWN0X3VyaSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHJlZGlyZWN0X3VyaSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlZGlyZWN0X3VyaVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gcmVzcG9uc2VfdHlwZSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlc3BvbnNlX3R5cGVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2NvcGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyBzY29wZSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNjb3BlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIGF1dGhvcml0eSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImF1dGhvcml0eVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBvaWRjID0gU2lnbmluUmVxdWVzdC5pc09pZGMocmVzcG9uc2VfdHlwZSk7XHJcbiAgICAgICAgbGV0IGNvZGUgPSBTaWduaW5SZXF1ZXN0LmlzQ29kZShyZXNwb25zZV90eXBlKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZV9tb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlX21vZGUgPSBTaWduaW5SZXF1ZXN0LmlzQ29kZShyZXNwb25zZV90eXBlKSA/IFwicXVlcnlcIiA6IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFNpZ25pblN0YXRlKHsgbm9uY2U6IG9pZGMsIFxyXG4gICAgICAgICAgICBkYXRhLCBjbGllbnRfaWQsIGF1dGhvcml0eSwgcmVkaXJlY3RfdXJpLCBcclxuICAgICAgICAgICAgY29kZV92ZXJpZmllcjogY29kZSwgXHJcbiAgICAgICAgICAgIHJlcXVlc3RfdHlwZSwgcmVzcG9uc2VfbW9kZSB9KTtcclxuXHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjbGllbnRfaWRcIiwgY2xpZW50X2lkKTtcclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInJlZGlyZWN0X3VyaVwiLCByZWRpcmVjdF91cmkpO1xyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwicmVzcG9uc2VfdHlwZVwiLCByZXNwb25zZV90eXBlKTtcclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInNjb3BlXCIsIHNjb3BlKTtcclxuXHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzdGF0ZVwiLCB0aGlzLnN0YXRlLmlkKTtcclxuICAgICAgICBpZiAob2lkYykge1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcIm5vbmNlXCIsIHRoaXMuc3RhdGUubm9uY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29kZSkge1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcImNvZGVfY2hhbGxlbmdlXCIsIHRoaXMuc3RhdGUuY29kZV9jaGFsbGVuZ2UpO1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcImNvZGVfY2hhbGxlbmdlX21ldGhvZFwiLCBcIlMyNTZcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgb3B0aW9uYWwgPSB7IHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcywgcmVzb3VyY2UsIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCByZXNwb25zZV9tb2RlIH07XHJcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gb3B0aW9uYWwpe1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uYWxba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwga2V5LCBvcHRpb25hbFtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gZXh0cmFRdWVyeVBhcmFtcyl7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgZXh0cmFRdWVyeVBhcmFtc1trZXldKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzT2lkYyhyZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3BvbnNlX3R5cGUuc3BsaXQoL1xccysvZykuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwiaWRfdG9rZW5cIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNPQXV0aChyZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3BvbnNlX3R5cGUuc3BsaXQoL1xccysvZykuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwidG9rZW5cIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGlzQ29kZShyZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3BvbnNlX3R5cGUuc3BsaXQoL1xccysvZykuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwiY29kZVwiO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAhIShyZXN1bHRbMF0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuY29uc3QgT2lkY1Njb3BlID0gXCJvcGVuaWRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTaWduaW5SZXNwb25zZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGRlbGltaXRlciA9IFwiI1wiKSB7XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZXMgPSBVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQodXJsLCBkZWxpbWl0ZXIpO1xyXG5cclxuICAgICAgICB0aGlzLmVycm9yID0gdmFsdWVzLmVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSB2YWx1ZXMuZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSB2YWx1ZXMuZXJyb3JfdXJpO1xyXG5cclxuICAgICAgICB0aGlzLmNvZGUgPSB2YWx1ZXMuY29kZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gdmFsdWVzLnN0YXRlO1xyXG4gICAgICAgIHRoaXMuaWRfdG9rZW4gPSB2YWx1ZXMuaWRfdG9rZW47XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uX3N0YXRlID0gdmFsdWVzLnNlc3Npb25fc3RhdGU7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NfdG9rZW4gPSB2YWx1ZXMuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgIHRoaXMudG9rZW5fdHlwZSA9IHZhbHVlcy50b2tlbl90eXBlO1xyXG4gICAgICAgIHRoaXMuc2NvcGUgPSB2YWx1ZXMuc2NvcGU7XHJcbiAgICAgICAgdGhpcy5wcm9maWxlID0gdW5kZWZpbmVkOyAvLyB3aWxsIGJlIHNldCBmcm9tIFJlc3BvbnNlVmFsaWRhdG9yXHJcblxyXG4gICAgICAgIHRoaXMuZXhwaXJlc19pbiA9IHZhbHVlcy5leHBpcmVzX2luO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBleHBpcmVzX2luKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmV4cGlyZXNfYXQpIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwaXJlc19hdCAtIG5vdztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHNldCBleHBpcmVzX2luKHZhbHVlKXtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICBpZiAodHlwZW9mIGV4cGlyZXNfaW4gPT09ICdudW1iZXInICYmIGV4cGlyZXNfaW4gPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc19hdCA9IG5vdyArIGV4cGlyZXNfaW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBleHBpcmVkKCkge1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gdGhpcy5leHBpcmVzX2luO1xyXG4gICAgICAgIGlmIChleHBpcmVzX2luICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGV4cGlyZXNfaW4gPD0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2NvcGVzKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zY29wZSB8fCBcIlwiKS5zcGxpdChcIiBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzT3BlbklkQ29ubmVjdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY29wZXMuaW5kZXhPZihPaWRjU2NvcGUpID49IDAgfHwgISF0aGlzLmlkX3Rva2VuO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL1N0YXRlLmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuaW1wb3J0IHJhbmRvbSBmcm9tICcuL3JhbmRvbS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbmluU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7bm9uY2UsIGF1dGhvcml0eSwgY2xpZW50X2lkLCByZWRpcmVjdF91cmksIGNvZGVfdmVyaWZpZXIsIHJlc3BvbnNlX21vZGV9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihhcmd1bWVudHNbMF0pO1xyXG5cclxuICAgICAgICBpZiAobm9uY2UgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9uY2UgPSByYW5kb20oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm9uY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9uY2UgPSBub25jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb2RlX3ZlcmlmaWVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIC8vIHJhbmRvbSgpIHByb2R1Y2VzIDMyIGxlbmd0aFxyXG4gICAgICAgICAgICB0aGlzLl9jb2RlX3ZlcmlmaWVyID0gcmFuZG9tKCkgKyByYW5kb20oKSArIHJhbmRvbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjb2RlX3ZlcmlmaWVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvZGVfdmVyaWZpZXIgPSBjb2RlX3ZlcmlmaWVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5jb2RlX3ZlcmlmaWVyKSB7XHJcbiAgICAgICAgICAgIGxldCBoYXNoID0gSm9zZVV0aWwuaGFzaFN0cmluZyh0aGlzLmNvZGVfdmVyaWZpZXIsIFwiU0hBMjU2XCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlX2NoYWxsZW5nZSA9IEpvc2VVdGlsLmhleFRvQmFzZTY0VXJsKGhhc2gpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IGF1dGhvcml0eTtcclxuICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSBjbGllbnRfaWQ7XHJcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VfbW9kZSA9IHJlc3BvbnNlX21vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5vbmNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub25jZTtcclxuICAgIH1cclxuICAgIGdldCBhdXRob3JpdHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGhvcml0eTtcclxuICAgIH1cclxuICAgIGdldCBjbGllbnRfaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9pZDtcclxuICAgIH1cclxuICAgIGdldCByZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBjb2RlX3ZlcmlmaWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb2RlX3ZlcmlmaWVyO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNvZGVfY2hhbGxlbmdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb2RlX2NoYWxsZW5nZTtcclxuICAgIH1cclxuICAgIGdldCByZXNwb25zZV9tb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV9tb2RlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiB0aGlzLnJlcXVlc3RfdHlwZSxcclxuICAgICAgICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHRoaXMuY29kZV92ZXJpZmllcixcclxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLnJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiB0aGlzLmF1dGhvcml0eSxcclxuICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VfbW9kZTogdGhpcy5yZXNwb25zZV9tb2RlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWduaW5TdGF0ZShkYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXF1ZXN0IHtcclxuICAgIGNvbnN0cnVjdG9yKHt1cmwsIGlkX3Rva2VuX2hpbnQsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZGF0YSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25vdXRSZXF1ZXN0LmN0b3I6IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZF90b2tlbl9oaW50KSB7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiaWRfdG9rZW5faGludFwiLCBpZF90b2tlbl9oaW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIiwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFN0YXRlKHsgZGF0YSwgcmVxdWVzdF90eXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXNwb25zZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmwpIHtcclxuXHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIFwiP1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lsZW50UmVuZXdTZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyID0gdXNlck1hbmFnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFjayA9IHRoaXMuX3Rva2VuRXhwaXJpbmcuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcodGhpcy5fY2FsbGJhY2spO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRyaWdnZXIgbG9hZGluZyBvZiB0aGUgdXNlciBzbyB0aGUgZXhwaXJpbmcgZXZlbnRzIGNhbiBiZSBpbml0aWFsaXplZFxyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyPT57XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxpYmVyYXRlIG5vcFxyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnI9PntcclxuICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5zdGFydDogRXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMucmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyh0aGlzLl9jYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFjaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3Rva2VuRXhwaXJpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuc2lnbmluU2lsZW50KCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBTaWxlbnQgdG9rZW4gcmVuZXdhbCBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5fdG9rZW5FeHBpcmluZzogRXJyb3IgZnJvbSBzaWduaW5TaWxlbnQ6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtpZCwgZGF0YSwgY3JlYXRlZCwgcmVxdWVzdF90eXBlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5faWQgPSBpZCB8fCByYW5kb20oKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjcmVhdGVkID09PSAnbnVtYmVyJyAmJiBjcmVhdGVkID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVkID0gY3JlYXRlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWQgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3JlcXVlc3RfdHlwZSA9ICByZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcclxuICAgIH1cclxuICAgIGdldCBkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNyZWF0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVxdWVzdF90eXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdG9yYWdlU3RyaW5nKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLnRvU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICBjcmVhdGVkOiB0aGlzLmNyZWF0ZWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RfdHlwZTogdGhpcy5yZXF1ZXN0X3R5cGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgU3RhdGUoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNsZWFyU3RhbGVTdGF0ZShzdG9yYWdlLCBhZ2UpIHtcclxuXHJcbiAgICAgICAgdmFyIGN1dG9mZiA9IERhdGUubm93KCkgLyAxMDAwIC0gYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RvcmFnZS5nZXRBbGxLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiBnb3Qga2V5c1wiLCBrZXlzKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBzdG9yYWdlLmdldChrZXkpLnRoZW4oaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoaXRlbSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IGdvdCBpdGVtIGZyb20ga2V5OiBcIiwga2V5LCBzdGF0ZS5jcmVhdGVkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuY3JlYXRlZCA8PSBjdXRvZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IEVycm9yIHBhcnNpbmcgc3RhdGUgZm9yIGtleVwiLCBrZXksIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IG5vIGl0ZW0gaW4gc3RvcmFnZSBmb3Iga2V5OiBcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiByZW1vdmVkIGl0ZW0gZm9yIGtleTogXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yYWdlLnJlbW92ZShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogd2FpdGluZyBvbiBwcm9taXNlIGNvdW50OlwiLCBwcm9taXNlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuY29uc3QgVGltZXJEdXJhdGlvbiA9IDU7IC8vIHNlY29uZHNcclxuXHJcbmV4cG9ydCBjbGFzcyBUaW1lciBleHRlbmRzIEV2ZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0aW1lciA9IEdsb2JhbC50aW1lciwgbm93RnVuYyA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuX3RpbWVyID0gdGltZXI7XHJcblxyXG4gICAgICAgIGlmIChub3dGdW5jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vd0Z1bmMgPSBub3dGdW5jO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbm93RnVuYyA9ICgpID0+IERhdGUubm93KCkgLyAxMDAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm93KCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLl9ub3dGdW5jKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoZHVyYXRpb24pIHtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPD0gMCkge1xyXG4gICAgICAgICAgICBkdXJhdGlvbiA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uID0gcGFyc2VJbnQoZHVyYXRpb24pO1xyXG5cclxuICAgICAgICB2YXIgZXhwaXJhdGlvbiA9IHRoaXMubm93ICsgZHVyYXRpb247XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvbiA9PT0gZXhwaXJhdGlvbiAmJiB0aGlzLl90aW1lckhhbmRsZSkge1xyXG4gICAgICAgICAgICAvLyBubyBuZWVkIHRvIHJlaW5pdGlhbGl6ZSB0byBzYW1lIGV4cGlyYXRpb24sIHNvIGJhaWwgb3V0XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmluaXQgdGltZXIgXCIgKyB0aGlzLl9uYW1lICsgXCIgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24gc2luY2UgYWxyZWFkeSBpbml0aWFsaXplZCBmb3IgZXhwaXJhdGlvbjpcIiwgdGhpcy5leHBpcmF0aW9uKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuaW5pdCB0aW1lciBcIiArIHRoaXMuX25hbWUgKyBcIiBmb3IgZHVyYXRpb246XCIsIGR1cmF0aW9uKTtcclxuICAgICAgICB0aGlzLl9leHBpcmF0aW9uID0gZXhwaXJhdGlvbjtcclxuXHJcbiAgICAgICAgLy8gd2UncmUgdXNpbmcgYSBmYWlybHkgc2hvcnQgdGltZXIgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIGV4cGlyYXRpb24gaW4gdGhlXHJcbiAgICAgICAgLy8gY2FsbGJhY2sgdG8gaGFuZGxlIHNjZW5hcmlvcyB3aGVyZSB0aGUgYnJvd3NlciBkZXZpY2Ugc2xlZXBzLCBhbmQgdGhlblxyXG4gICAgICAgIC8vIHRoZSB0aW1lcnMgZW5kIHVwIGdldHRpbmcgZGVsYXllZC5cclxuICAgICAgICB2YXIgdGltZXJEdXJhdGlvbiA9IFRpbWVyRHVyYXRpb247XHJcbiAgICAgICAgaWYgKGR1cmF0aW9uIDwgdGltZXJEdXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aW1lckR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RpbWVySGFuZGxlID0gdGhpcy5fdGltZXIuc2V0SW50ZXJ2YWwodGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKSwgdGltZXJEdXJhdGlvbiAqIDEwMDApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgZXhwaXJhdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwaXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVySGFuZGxlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmNhbmNlbDogXCIsIHRoaXMuX25hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRoaXMuX3RpbWVySGFuZGxlKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2soKSB7XHJcbiAgICAgICAgdmFyIGRpZmYgPSB0aGlzLl9leHBpcmF0aW9uIC0gdGhpcy5ub3c7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FsbGJhY2s7IFwiICsgdGhpcy5fbmFtZSArIFwiIHRpbWVyIGV4cGlyZXMgaW46XCIsIGRpZmYpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwaXJhdGlvbiA8PSB0aGlzLm5vdykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICBzdXBlci5yYWlzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UsIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcigpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBleGNoYW5nZUNvZGUoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncy5ncmFudF90eXBlID0gYXJncy5ncmFudF90eXBlIHx8IFwiYXV0aG9yaXphdGlvbl9jb2RlXCI7XHJcbiAgICAgICAgYXJncy5jbGllbnRfaWQgPSBhcmdzLmNsaWVudF9pZCB8fCB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLl9zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcblxyXG4gICAgICAgIGlmICghYXJncy5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogTm8gY29kZSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNvZGUgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MucmVkaXJlY3RfdXJpKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogTm8gcmVkaXJlY3RfdXJpIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgcmVkaXJlY3RfdXJpIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNvZGVfdmVyaWZpZXIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjb2RlX3ZlcmlmaWVyIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY29kZV92ZXJpZmllciBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjbGllbnRfaWQgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjbGllbnRfaWQgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRUb2tlbkVuZHBvaW50KGZhbHNlKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogUmVjZWl2ZWQgdG9rZW4gZW5kcG9pbnRcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UucG9zdEZvcm0odXJsLCBhcmdzKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogcmVzcG9uc2UgcmVjZWl2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGV4Y2hhbmdlUmVmcmVzaFRva2VuKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MuZ3JhbnRfdHlwZSA9IGFyZ3MuZ3JhbnRfdHlwZSB8fCBcInJlZnJlc2hfdG9rZW5cIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLmNsaWVudF9zZWNyZXQgPSBhcmdzLmNsaWVudF9zZWNyZXQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLnJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IE5vIHJlZnJlc2hfdG9rZW4gcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWZyZXNoX3Rva2VuIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogTm8gY2xpZW50X2lkIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY2xpZW50X2lkIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0VG9rZW5FbmRwb2ludChmYWxzZSkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogUmVjZWl2ZWQgdG9rZW4gZW5kcG9pbnRcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UucG9zdEZvcm0odXJsLCBhcmdzKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiByZXNwb25zZSByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuXHJcbmNvbnN0IEFjY2Vzc1Rva2VuVHlwZUhpbnQgPSBcImFjY2Vzc190b2tlblwiO1xyXG5jb25zdCBSZWZyZXNoVG9rZW5UeXBlSGludCA9IFwicmVmcmVzaF90b2tlblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRva2VuUmV2b2NhdGlvbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgWE1MSHR0cFJlcXVlc3RDdG9yID0gR2xvYmFsLlhNTEh0dHBSZXF1ZXN0LCBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlblJldm9jYXRpb25DbGllbnQuY3RvcjogTm8gc2V0dGluZ3MgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNldHRpbmdzIHByb3ZpZGVkLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fWE1MSHR0cFJlcXVlc3RDdG9yID0gWE1MSHR0cFJlcXVlc3RDdG9yO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZva2UodG9rZW4sIHJlcXVpcmVkLCB0eXBlID0gXCJhY2Nlc3NfdG9rZW5cIikge1xyXG4gICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogTm8gdG9rZW4gcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHRva2VuIHByb3ZpZGVkLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlICE9PSBBY2Nlc3NUb2tlblR5cGVIaW50ICYmIHR5cGUgIT0gUmVmcmVzaFRva2VuVHlwZUhpbnQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogSW52YWxpZCB0b2tlbiB0eXBlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRva2VuIHR5cGUuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRSZXZvY2F0aW9uRW5kcG9pbnQoKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBSZXZvY2F0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmV2b2NhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG5vdCByZXF1aXJlZCwgc28gZG9uJ3QgZXJyb3IgYW5kIGp1c3QgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IFJldm9raW5nIFwiICsgdHlwZSk7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnRfaWQgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnRfc2VjcmV0ID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZSh1cmwsIGNsaWVudF9pZCwgY2xpZW50X3NlY3JldCwgdG9rZW4sIHR5cGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2UodXJsLCBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHRva2VuLCB0eXBlKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgeGhyID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0Q3RvcigpO1xyXG4gICAgICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkLCBzdGF0dXNcIiwgeGhyLnN0YXR1cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcih4aHIuc3RhdHVzVGV4dCArIFwiIChcIiArIHhoci5zdGF0dXMgKyBcIilcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHsgXHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBOZXR3b3JrIEVycm9yLlwiKVxyXG4gICAgICAgICAgICAgICAgcmVqZWN0KFwiTmV0d29yayBFcnJvclwiKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHZhciBib2R5ID0gXCJjbGllbnRfaWQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50X2lkKTtcclxuICAgICAgICAgICAgaWYgKGNsaWVudF9zZWNyZXQpIHtcclxuICAgICAgICAgICAgICAgIGJvZHkgKz0gXCImY2xpZW50X3NlY3JldD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChjbGllbnRfc2VjcmV0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBib2R5ICs9IFwiJnRva2VuX3R5cGVfaGludD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0eXBlKTtcclxuICAgICAgICAgICAgYm9keSArPSBcIiZ0b2tlbj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0b2tlbik7XHJcblxyXG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcclxuICAgICAgICAgICAgeGhyLnNlbmQoYm9keSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXJsVXRpbGl0eSB7XHJcbiAgICBzdGF0aWMgYWRkUXVlcnlQYXJhbSh1cmwsIG5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPCAwKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBcIj9cIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1cmxbdXJsLmxlbmd0aCAtIDFdICE9PSBcIj9cIikge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCImXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB1cmwgKz0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xyXG4gICAgICAgIHVybCArPSBcIj1cIjtcclxuICAgICAgICB1cmwgKz0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHVybDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcGFyc2VVcmxGcmFnbWVudCh2YWx1ZSwgZGVsaW1pdGVyID0gXCIjXCIsIGdsb2JhbCA9IEdsb2JhbCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKXtcclxuICAgICAgICAgICAgdmFsdWUgPSBnbG9iYWwubG9jYXRpb24uaHJlZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpZHggPSB2YWx1ZS5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cihpZHggKyAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZWxpbWl0ZXIgPT09IFwiP1wiKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGRvaW5nIHF1ZXJ5LCB0aGVuIHN0cmlwIG9mZiBoYXNoIGZyYWdtZW50IGJlZm9yZSB3ZSBwYXJzZVxyXG4gICAgICAgICAgICBpZHggPSB2YWx1ZS5pbmRleE9mKCcjJyk7XHJcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIoMCwgaWR4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHBhcmFtcyA9IHt9LFxyXG4gICAgICAgICAgICByZWdleCA9IC8oW14mPV0rKT0oW14mXSopL2csXHJcbiAgICAgICAgICAgIG07XHJcblxyXG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcclxuICAgICAgICB3aGlsZSAobSA9IHJlZ2V4LmV4ZWModmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQobVsxXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KG1bMl0pO1xyXG4gICAgICAgICAgICBpZiAoY291bnRlcisrID4gNTApIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudDogcmVzcG9uc2UgZXhjZWVkZWQgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnNcIiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJSZXNwb25zZSBleGNlZWRlZCBleHBlY3RlZCBudW1iZXIgb2YgcGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBwcm9wIGluIHBhcmFtcykge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKHtpZF90b2tlbiwgc2Vzc2lvbl9zdGF0ZSwgYWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCB0b2tlbl90eXBlLCBzY29wZSwgcHJvZmlsZSwgZXhwaXJlc19hdCwgc3RhdGV9KSB7XHJcbiAgICAgICAgdGhpcy5pZF90b2tlbiA9IGlkX3Rva2VuO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHNlc3Npb25fc3RhdGU7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NfdG9rZW4gPSBhY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoX3Rva2VuID0gcmVmcmVzaF90b2tlbjtcclxuICAgICAgICB0aGlzLnRva2VuX3R5cGUgPSB0b2tlbl90eXBlO1xyXG4gICAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcclxuICAgICAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlO1xyXG4gICAgICAgIHRoaXMuZXhwaXJlc19hdCA9IGV4cGlyZXNfYXQ7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBleHBpcmVzX2luKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmV4cGlyZXNfYXQpIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwaXJlc19hdCAtIG5vdztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHNldCBleHBpcmVzX2luKHZhbHVlKSB7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBleHBpcmVzX2luID09PSAnbnVtYmVyJyAmJiBleHBpcmVzX2luID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBub3cgKyBleHBpcmVzX2luO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlZCgpIHtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHRoaXMuZXhwaXJlc19pbjtcclxuICAgICAgICBpZiAoZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBpcmVzX2luIDw9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjb3BlcygpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2NvcGUgfHwgXCJcIikuc3BsaXQoXCIgXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvU3RvcmFnZVN0cmluZygpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyLnRvU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBpZF90b2tlbjogdGhpcy5pZF90b2tlbixcclxuICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogdGhpcy5zZXNzaW9uX3N0YXRlLFxyXG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46IHRoaXMuYWNjZXNzX3Rva2VuLFxyXG4gICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0aGlzLnJlZnJlc2hfdG9rZW4sXHJcbiAgICAgICAgICAgIHRva2VuX3R5cGU6IHRoaXMudG9rZW5fdHlwZSxcclxuICAgICAgICAgICAgc2NvcGU6IHRoaXMuc2NvcGUsXHJcbiAgICAgICAgICAgIHByb2ZpbGU6IHRoaXMucHJvZmlsZSxcclxuICAgICAgICAgICAgZXhwaXJlc19hdDogdGhpcy5leHBpcmVzX2F0XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgVXNlcihKU09OLnBhcnNlKHN0b3JhZ2VTdHJpbmcpKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VySW5mb1NlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgc2V0dGluZ3MsIFxyXG4gICAgICAgIEpzb25TZXJ2aWNlQ3RvciA9IEpzb25TZXJ2aWNlLCBcclxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLCBcclxuICAgICAgICBqb3NlVXRpbCA9IEpvc2VVdGlsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5jdG9yOiBObyBzZXR0aW5ncyBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLl9qc29uU2VydmljZSA9IG5ldyBKc29uU2VydmljZUN0b3IodW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMuX2dldENsYWltc0Zyb21Kd3QuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2xhaW1zKHRva2VuKSB7XHJcbiAgICAgICAgaWYgKCF0b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zOiBObyB0b2tlbiBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIHRva2VuIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0VXNlckluZm9FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogcmVjZWl2ZWQgdXNlcmluZm8gdXJsXCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UuZ2V0SnNvbih1cmwsIHRva2VuKS50aGVuKGNsYWltcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zOiBjbGFpbXMgcmVjZWl2ZWRcIiwgY2xhaW1zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjbGFpbXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9nZXRDbGFpbXNGcm9tSnd0KHJlcSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBqd3QgPSB0aGlzLl9qb3NlVXRpbC5wYXJzZUp3dChyZXEucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgaWYgKCFqd3QgfHwgIWp3dC5oZWFkZXIgfHwgIWp3dC5wYXlsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IEZhaWxlZCB0byBwYXJzZSBKV1RcIiwgand0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIga2lkID0gand0LmhlYWRlci5raWQ7XHJcblxyXG4gICAgICAgICAgICBsZXQgaXNzdWVyUHJvbWlzZTtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9zZXR0aW5ncy51c2VySW5mb0p3dElzc3Vlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnT1AnOlxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdBTlknOlxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoand0LnBheWxvYWQuaXNzKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVyUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzLl9zZXR0aW5ncy51c2VySW5mb0p3dElzc3Vlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBpc3N1ZXJQcm9taXNlLnRoZW4oaXNzdWVyID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogUmVjZWl2ZWQgaXNzdWVyOlwiICsgaXNzdWVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogUmVjZWl2ZWQgc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFraWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5cyA9IHRoaXMuX2ZpbHRlckJ5QWxnKGtleXMsIGp3dC5oZWFkZXIuYWxnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpZCBpcyBtYW5kYXRvcnkgb25seSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBrZXlzIGluIHRoZSByZWZlcmVuY2VkIEpXSyBTZXQgZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1NpZ25pbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmtpZCA9PT0ga2lkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVswXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNsb2NrU2tld0luU2Vjb25kcyA9IHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldztcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFZhbGlkYWluZyBKV1Q7IHVzaW5nIGNsb2NrIHNrZXcgKGluIHNlY29uZHMpIG9mOiBcIiwgY2xvY2tTa2V3SW5TZWNvbmRzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0KHJlcS5yZXNwb25zZVRleHQsIGtleSwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3SW5TZWNvbmRzLCB1bmRlZmluZWQsIHRydWUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IEpXVCB2YWxpZGF0aW9uIHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqd3QucGF5bG9hZDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IEVycm9yIHBhcnNpbmcgSldUIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZmlsdGVyQnlBbGcoa2V5cywgYWxnKSB7XHJcbiAgICAgICAgdmFyIGt0eSA9IG51bGw7XHJcbiAgICAgICAgaWYgKGFsZy5zdGFydHNXaXRoKFwiUlNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJSU0FcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJQU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIlBTXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiRVNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJFQ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogYWxnIG5vdCBzdXBwb3J0ZWQ6IFwiLCBhbGcpO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2ZpbHRlckJ5QWxnOiBMb29raW5nIGZvciBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5KTtcclxuXHJcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXkua3R5ID09PSBrdHk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IE51bWJlciBvZiBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5LCBrZXlzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIHJldHVybiBrZXlzO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudCB9IGZyb20gJy4vT2lkY0NsaWVudC5qcyc7XHJcbmltcG9ydCB7IFVzZXJNYW5hZ2VyU2V0dGluZ3MgfSBmcm9tICcuL1VzZXJNYW5hZ2VyU2V0dGluZ3MuanMnO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi9Vc2VyLmpzJztcclxuaW1wb3J0IHsgVXNlck1hbmFnZXJFdmVudHMgfSBmcm9tICcuL1VzZXJNYW5hZ2VyRXZlbnRzLmpzJztcclxuaW1wb3J0IHsgU2lsZW50UmVuZXdTZXJ2aWNlIH0gZnJvbSAnLi9TaWxlbnRSZW5ld1NlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBTZXNzaW9uTW9uaXRvciB9IGZyb20gJy4vU2Vzc2lvbk1vbml0b3IuanMnO1xyXG5pbXBvcnQgeyBUb2tlblJldm9jYXRpb25DbGllbnQgfSBmcm9tICcuL1Rva2VuUmV2b2NhdGlvbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IFRva2VuQ2xpZW50IH0gZnJvbSAnLi9Ub2tlbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyIGV4dGVuZHMgT2lkY0NsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncyA9IHt9LFxyXG4gICAgICAgIFNpbGVudFJlbmV3U2VydmljZUN0b3IgPSBTaWxlbnRSZW5ld1NlcnZpY2UsXHJcbiAgICAgICAgU2Vzc2lvbk1vbml0b3JDdG9yID0gU2Vzc2lvbk1vbml0b3IsXHJcbiAgICAgICAgVG9rZW5SZXZvY2F0aW9uQ2xpZW50Q3RvciA9IFRva2VuUmV2b2NhdGlvbkNsaWVudCxcclxuICAgICAgICBUb2tlbkNsaWVudEN0b3IgPSBUb2tlbkNsaWVudCxcclxuICAgICAgICBqb3NlVXRpbCA9IEpvc2VVdGlsXHJcbiAgICApIHtcclxuXHJcbiAgICAgICAgaWYgKCEoc2V0dGluZ3MgaW5zdGFuY2VvZiBVc2VyTWFuYWdlclNldHRpbmdzKSkge1xyXG4gICAgICAgICAgICBzZXR0aW5ncyA9IG5ldyBVc2VyTWFuYWdlclNldHRpbmdzKHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIoc2V0dGluZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLl9ldmVudHMgPSBuZXcgVXNlck1hbmFnZXJFdmVudHMoc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZSA9IG5ldyBTaWxlbnRSZW5ld1NlcnZpY2VDdG9yKHRoaXMpO1xyXG5cclxuICAgICAgICAvLyBvcmRlciBpcyBpbXBvcnRhbnQgZm9yIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczsgdGhlc2Ugc2VydmljZXMgZGVwZW5kIHVwb24gdGhlIGV2ZW50cy5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5hdXRvbWF0aWNTaWxlbnRSZW5ldykge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5jdG9yOiBhdXRvbWF0aWNTaWxlbnRSZW5ldyBpcyBjb25maWd1cmVkLCBzZXR0aW5nIHVwIHNpbGVudCByZW5ld1wiKTtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFNpbGVudFJlbmV3KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5tb25pdG9yU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5jdG9yOiBtb25pdG9yU2Vzc2lvbiBpcyBjb25maWd1cmVkLCBzZXR0aW5nIHVwIHNlc3Npb24gbW9uaXRvclwiKTtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbk1vbml0b3IgPSBuZXcgU2Vzc2lvbk1vbml0b3JDdG9yKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdG9rZW5SZXZvY2F0aW9uQ2xpZW50ID0gbmV3IFRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX3Rva2VuQ2xpZW50ID0gbmV3IFRva2VuQ2xpZW50Q3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3JlZGlyZWN0TmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnJlZGlyZWN0TmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9wb3B1cE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5wb3B1cE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfaWZyYW1lTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlmcmFtZU5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfdXNlclN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnVzZXJTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXZlbnRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5nZXRVc2VyOiB1c2VyIGxvYWRlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLmdldFVzZXI6IHVzZXIgbm90IGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKG51bGwpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnJlbW92ZVVzZXI6IHVzZXIgcmVtb3ZlZCBmcm9tIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cy51bmxvYWQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduaW5SZWRpcmVjdChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6clwiO1xyXG4gICAgICAgIGxldCBuYXZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLCBuYXZQYXJhbXMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25pblJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUmVkaXJlY3RDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblBvcHVwKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzaTpwXCI7XHJcbiAgICAgICAgbGV0IHVybCA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBObyBwb3B1cF9yZWRpcmVjdF91cmkgb3IgcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBwb3B1cF9yZWRpcmVjdF91cmkgb3IgcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSB1cmw7XHJcbiAgICAgICAgYXJncy5kaXNwbGF5ID0gXCJwb3B1cFwiO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluKGFyZ3MsIHRoaXMuX3BvcHVwTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHBvcHVwV2luZG93RmVhdHVyZXM6IGFyZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93RmVhdHVyZXMsXHJcbiAgICAgICAgICAgIHBvcHVwV2luZG93VGFyZ2V0OiBhcmdzLnBvcHVwV2luZG93VGFyZ2V0IHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dUYXJnZXRcclxuICAgICAgICB9KS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cDogc2lnbmluUG9wdXAgc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cDogbm8gc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25pblBvcHVwQ2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkNhbGxiYWNrKHVybCwgdGhpcy5fcG9wdXBOYXZpZ2F0b3IpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwQ2FsbGJhY2s6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXBDYWxsYmFjazogbm8gc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICB9KS5jYXRjaChlcnI9PntcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXBDYWxsYmFjayBlcnJvcjogXCIgKyBlcnIgJiYgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblNpbGVudChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6c1wiO1xyXG4gICAgICAgIC8vIGZpcnN0IGRldGVybWluZSBpZiB3ZSBoYXZlIGEgcmVmcmVzaCB0b2tlbiwgb3IgbmVlZCB0byB1c2UgaWZyYW1lXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5yZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBhcmdzLnJlZnJlc2hfdG9rZW4gPSB1c2VyLnJlZnJlc2hfdG9rZW47XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlUmVmcmVzaFRva2VuKGFyZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXJncy5pZF90b2tlbl9oaW50ID0gYXJncy5pZF90b2tlbl9oaW50IHx8ICh0aGlzLnNldHRpbmdzLmluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyAmJiB1c2VyICYmIHVzZXIuaWRfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIgJiYgdGhpcy5fc2V0dGluZ3MudmFsaWRhdGVTdWJPblNpbGVudFJlbmV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50LCBzdWJqZWN0IHByaW9yIHRvIHNpbGVudCByZW5ldzogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyZ3MuY3VycmVudF9zdWIgPSB1c2VyLnByb2ZpbGUuc3ViO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblNpbGVudElmcmFtZShhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF91c2VSZWZyZXNoVG9rZW4oYXJncyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuKGFyZ3MpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IE5vIHJlc3BvbnNlIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJObyByZXNwb25zZSByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3VzZVJlZnJlc2hUb2tlbjogTm8gYWNjZXNzIHRva2VuIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJObyBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkVG9rZW5WYWxpZGF0aW9uID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZFRva2VuVmFsaWRhdGlvbiA9IHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbih1c2VyLnByb2ZpbGUsIHJlc3VsdC5pZF90b2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWRUb2tlblZhbGlkYXRpb24udGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IHJlZnJlc2ggdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5pZF90b2tlbiA9IHJlc3VsdC5pZF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5hY2Nlc3NfdG9rZW4gPSByZXN1bHQuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnJlZnJlc2hfdG9rZW4gPSByZXN1bHQucmVmcmVzaF90b2tlbiB8fCB1c2VyLnJlZnJlc2hfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuZXhwaXJlc19pbiA9IHJlc3VsdC5leHBpcmVzX2luO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKHVzZXIpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW4ocHJvZmlsZSwgaWRfdG9rZW4pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0QXR0cmlidXRlcyhpZF90b2tlbiwgaXNzdWVyLCB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQsIHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldykudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IEZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHZhbGlkYXRlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnN1YiAhPT0gcHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBzdWIgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggY3VycmVudCBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInN1YiBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBjdXJyZW50IHN1YlwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5hdXRoX3RpbWUgJiYgcGF5bG9hZC5hdXRoX3RpbWUgIT09IHByb2ZpbGUuYXV0aF90aW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogYXV0aF90aW1lIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF1dGhfdGltZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXV0aF90aW1lIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF1dGhfdGltZVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5henAgJiYgcGF5bG9hZC5henAgIT09IHByb2ZpbGUuYXpwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogYXpwIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF6cFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXpwIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF6cFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuYXpwICYmIHByb2ZpbGUuYXpwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogYXpwIG5vdCBpbiBpZF90b2tlbiwgYnV0IHByZXNlbnQgaW4gb3JpZ2luYWwgaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF6cCBub3QgaW4gaWRfdG9rZW4sIGJ1dCBwcmVzZW50IGluIG9yaWdpbmFsIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIF9zaWduaW5TaWxlbnRJZnJhbWUoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgbGV0IHVybCA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IE5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLnByb21wdCA9IGFyZ3MucHJvbXB0IHx8IFwibm9uZVwiO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluKGFyZ3MsIHRoaXMuX2lmcmFtZU5hdmlnYXRvciwge1xyXG4gICAgICAgICAgICBzdGFydFVybDogdXJsLFxyXG4gICAgICAgICAgICBzaWxlbnRSZXF1ZXN0VGltZW91dDogYXJncy5zaWxlbnRSZXF1ZXN0VGltZW91dCB8fCB0aGlzLnNldHRpbmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0XHJcbiAgICAgICAgfSkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50OiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogbm8gc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduaW5TaWxlbnRDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluQ2FsbGJhY2sodXJsLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudENhbGxiYWNrOiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pbkNhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpyXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblJlZGlyZWN0Q2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnBcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluUG9wdXBDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6c1wiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5TaWxlbnRDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJpbnZhbGlkIHJlc3BvbnNlX3R5cGUgaW4gc3RhdGVcIikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25vdXRDYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlKHVybCkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNvOnJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25vdXRSZWRpcmVjdENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNvOnBcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25vdXRQb3B1cENhbGxiYWNrKHVybCwga2VlcE9wZW4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImludmFsaWQgcmVzcG9uc2VfdHlwZSBpbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHF1ZXJ5U2Vzc2lvblN0YXR1cyhhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6c1wiOyAvLyB0aGlzIGFjdHMgbGlrZSBhIHNpZ25pbiBzaWxlbnRcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MucHJvbXB0ID0gXCJub25lXCI7XHJcbiAgICAgICAgYXJncy5yZXNwb25zZV90eXBlID0gYXJncy5yZXNwb25zZV90eXBlIHx8IHRoaXMuc2V0dGluZ3MucXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGU7XHJcbiAgICAgICAgYXJncy5zY29wZSA9IFwib3BlbmlkXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TdGFydChhcmdzLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgc2lsZW50UmVxdWVzdFRpbWVvdXQ6IGFyZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRSZXF1ZXN0VGltZW91dFxyXG4gICAgICAgIH0pLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbmluUmVzcG9uc2UobmF2UmVzcG9uc2UudXJsKS50aGVuKHNpZ25pblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogZ290IHNpZ25pbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2lnbmluUmVzcG9uc2Uuc2Vzc2lvbl9zdGF0ZSAmJiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBxdWVyeVNlc3Npb25TdGF0dXMgc3VjY2VzcyBmb3Igc3ViOiBcIiwgIHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBzaWduaW5SZXNwb25zZS5zZXNzaW9uX3N0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWI6IHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc3ViLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWQ6IHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc2lkXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwicXVlcnlTZXNzaW9uU3RhdHVzIHN1Y2Nlc3NmdWwsIHVzZXIgbm90IGF1dGhlbnRpY2F0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9zaWduaW4oYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TdGFydChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcykudGhlbihuYXZSZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5FbmQobmF2UmVzcG9uc2UudXJsLCBhcmdzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWduaW5TdGFydChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IucHJlcGFyZShuYXZpZ2F0b3JQYXJhbXMpLnRoZW4oaGFuZGxlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pblN0YXJ0OiBnb3QgbmF2aWdhdG9yIHdpbmRvdyBoYW5kbGVcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTaWduaW5SZXF1ZXN0KGFyZ3MpLnRoZW4oc2lnbmluUmVxdWVzdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IGdvdCBzaWduaW4gcmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMudXJsID0gc2lnbmluUmVxdWVzdC51cmw7XHJcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMuaWQgPSBzaWduaW5SZXF1ZXN0LnN0YXRlLmlkO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUubmF2aWdhdGUobmF2aWdhdG9yUGFyYW1zKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUuY2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IEVycm9yIGFmdGVyIHByZXBhcmluZyBuYXZpZ2F0b3IsIGNsb3NpbmcgbmF2aWdhdG9yIHdpbmRvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbmluRW5kKHVybCwgYXJncyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25pblJlc3BvbnNlKHVybCkudGhlbihzaWduaW5SZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IGdvdCBzaWduaW4gcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICBsZXQgdXNlciA9IG5ldyBVc2VyKHNpZ25pblJlc3BvbnNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcmdzLmN1cnJlbnRfc3ViKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5jdXJyZW50X3N1YiAhPT0gdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IGN1cnJlbnQgdXNlciBkb2VzIG5vdCBtYXRjaCB1c2VyIHJldHVybmVkIGZyb20gc2lnbmluLiBzdWIgZnJvbSBzaWduaW46IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibG9naW5fcmVxdWlyZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogY3VycmVudCB1c2VyIG1hdGNoZXMgdXNlciByZXR1cm5lZCBmcm9tIHNpZ25pblwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKHVzZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogdXNlciBzdG9yZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25pbkNhbGxiYWNrKHVybCwgbmF2aWdhdG9yKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkNhbGxiYWNrXCIpO1xyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IuY2FsbGJhY2sodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBzaWdub3V0UmVkaXJlY3QoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNvOnJcIjtcclxuICAgICAgICBsZXQgcG9zdExvZ291dFJlZGlyZWN0VXJpID0gYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKHBvc3RMb2dvdXRSZWRpcmVjdFVyaSl7XHJcbiAgICAgICAgICAgIGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9zdExvZ291dFJlZGlyZWN0VXJpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbmF2UGFyYW1zID0ge1xyXG4gICAgICAgICAgICB1c2VSZXBsYWNlVG9OYXZpZ2F0ZSA6IGFyZ3MudXNlUmVwbGFjZVRvTmF2aWdhdGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0U3RhcnQoYXJncywgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IsIG5hdlBhcmFtcykudGhlbigoKT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRSZWRpcmVjdDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25vdXRSZWRpcmVjdENhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0RW5kKHVybCB8fCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvci51cmwpLnRoZW4ocmVzcG9uc2U9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UmVkaXJlY3RDYWxsYmFjazogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25vdXRQb3B1cChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic286cFwiO1xyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcbiAgICAgICAgaWYgKGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKXtcclxuICAgICAgICAgICAgLy8gd2UncmUgcHV0dGluZyBhIGR1bW15IGVudHJ5IGluIGhlcmUgYmVjYXVzZSB3ZVxyXG4gICAgICAgICAgICAvLyBuZWVkIGEgdW5pcXVlIGlkIGZyb20gdGhlIHN0YXRlIGZvciBub3RpZmljYXRpb25cclxuICAgICAgICAgICAgLy8gdG8gdGhlIHBhcmVudCB3aW5kb3csIHdoaWNoIGlzIG5lY2Vzc2FyeSBpZiB3ZVxyXG4gICAgICAgICAgICAvLyBwbGFuIHRvIHJldHVybiBiYWNrIHRvIHRoZSBjbGllbnQgYWZ0ZXIgc2lnbm91dFxyXG4gICAgICAgICAgICAvLyBhbmQgc28gd2UgY2FuIGNsb3NlIHRoZSBwb3B1cCBhZnRlciBzaWdub3V0XHJcbiAgICAgICAgICAgIGFyZ3Muc3RhdGUgPSBhcmdzLnN0YXRlIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXQoYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRQb3B1cDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25vdXRQb3B1cENhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcclxuICAgICAgICBpZiAodHlwZW9mKGtlZXBPcGVuKSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKHVybCkgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICBrZWVwT3BlbiA9IHVybDtcclxuICAgICAgICAgICAgdXJsID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkZWxpbWl0ZXIgPSAnPyc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwTmF2aWdhdG9yLmNhbGxiYWNrKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFBvcHVwQ2FsbGJhY2s6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3NpZ25vdXQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0U3RhcnQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMpLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dEVuZChuYXZSZXNwb25zZS51cmwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25vdXRTdGFydChhcmdzID0ge30sIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLnByZXBhcmUobmF2aWdhdG9yUGFyYW1zKS50aGVuKGhhbmRsZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGdvdCBuYXZpZ2F0b3Igd2luZG93IGhhbmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBsb2FkZWQgY3VycmVudCB1c2VyIGZyb20gc3RvcmFnZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmV2b2tlUHJvbWlzZSA9IHRoaXMuX3NldHRpbmdzLnJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID8gdGhpcy5fcmV2b2tlSW50ZXJuYWwodXNlcikgOiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXZva2VQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaWRfdG9rZW4gPSBhcmdzLmlkX3Rva2VuX2hpbnQgfHwgdXNlciAmJiB1c2VyLmlkX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBTZXR0aW5nIGlkX3Rva2VuIGludG8gc2lnbm91dCByZXF1ZXN0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmlkX3Rva2VuX2hpbnQgPSBpZF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZVVzZXIoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogdXNlciByZW1vdmVkLCBjcmVhdGluZyBzaWdub3V0IHJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTaWdub3V0UmVxdWVzdChhcmdzKS50aGVuKHNpZ25vdXRSZXF1ZXN0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGdvdCBzaWdub3V0IHJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yUGFyYW1zLnVybCA9IHNpZ25vdXRSZXF1ZXN0LnVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWdub3V0UmVxdWVzdC5zdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy5pZCA9IHNpZ25vdXRSZXF1ZXN0LnN0YXRlLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYXZpZ2F0ZShuYXZpZ2F0b3JQYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5jbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IEVycm9yIGFmdGVyIHByZXBhcmluZyBuYXZpZ2F0b3IsIGNsb3NpbmcgbmF2aWdhdG9yIHdpbmRvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbm91dEVuZCh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbm91dFJlc3BvbnNlKHVybCkudGhlbihzaWdub3V0UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dEVuZDogZ290IHNpZ25vdXQgcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc2lnbm91dFJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldm9rZUFjY2Vzc1Rva2VuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VJbnRlcm5hbCh1c2VyLCB0cnVlKS50aGVuKHN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogcmVtb3ZpbmcgdG9rZW4gcHJvcGVydGllcyBmcm9tIHVzZXIgYW5kIHJlLXN0b3JpbmdcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuYWNjZXNzX3Rva2VuID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLnJlZnJlc2hfdG9rZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuZXhwaXJlc19hdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci50b2tlbl90eXBlID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKHVzZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogdXNlciBzdG9yZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IGFjY2VzcyB0b2tlbiByZXZva2VkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlSW50ZXJuYWwodXNlciwgcmVxdWlyZWQpIHtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICB2YXIgYWNjZXNzX3Rva2VuID0gdXNlci5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgIHZhciByZWZyZXNoX3Rva2VuID0gdXNlci5yZWZyZXNoX3Rva2VuO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwoYWNjZXNzX3Rva2VuLCByZXF1aXJlZClcclxuICAgICAgICAgICAgICAgIC50aGVuKGF0U3VjY2VzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihydFN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdFN1Y2Nlc3MgJiYgIXJ0U3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiBubyBuZWVkIHRvIHJldm9rZSBkdWUgdG8gbm8gdG9rZW4ocyksIG9yIEpXVCBmb3JtYXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdFN1Y2Nlc3MgfHwgcnRTdWNjZXNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwoYWNjZXNzX3Rva2VuLCByZXF1aXJlZCkge1xyXG4gICAgICAgIC8vIGNoZWNrIGZvciBKV1QgdnMuIHJlZmVyZW5jZSB0b2tlblxyXG4gICAgICAgIGlmICghYWNjZXNzX3Rva2VuIHx8IGFjY2Vzc190b2tlbi5pbmRleE9mKCcuJykgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpLnRoZW4oKCkgPT4gdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkKSB7XHJcbiAgICAgICAgaWYgKCFyZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2UocmVmcmVzaF90b2tlbiwgcmVxdWlyZWQsIFwicmVmcmVzaF90b2tlblwiKS50aGVuKCgpID0+IHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0U2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcFNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZS5zdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF91c2VyU3RvcmVLZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIGB1c2VyOiR7dGhpcy5zZXR0aW5ncy5hdXRob3JpdHl9OiR7dGhpcy5zZXR0aW5ncy5jbGllbnRfaWR9YDtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5nZXQodGhpcy5fdXNlclN0b3JlS2V5KS50aGVuKHN0b3JhZ2VTdHJpbmcgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX2xvYWRVc2VyOiB1c2VyIHN0b3JhZ2VTdHJpbmcgbG9hZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFVzZXIuZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9sb2FkVXNlcjogbm8gdXNlciBzdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9yZVVzZXIodXNlcikge1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnN0b3JlVXNlcjogc3RvcmluZyB1c2VyXCIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN0b3JhZ2VTdHJpbmcgPSB1c2VyLnRvU3RvcmFnZVN0cmluZygpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlLnNldCh0aGlzLl91c2VyU3RvcmVLZXksIHN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwic3RvcmVVc2VyLnN0b3JlVXNlcjogcmVtb3ZpbmcgdXNlclwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5yZW1vdmUodGhpcy5fdXNlclN0b3JlS2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBBY2Nlc3NUb2tlbkV2ZW50cyB9IGZyb20gJy4vQWNjZXNzVG9rZW5FdmVudHMuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyRXZlbnRzIGV4dGVuZHMgQWNjZXNzVG9rZW5FdmVudHMge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XHJcbiAgICAgICAgc3VwZXIoc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQgPSBuZXcgRXZlbnQoXCJVc2VyIGxvYWRlZFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQgPSBuZXcgRXZlbnQoXCJVc2VyIHVubG9hZGVkXCIpO1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IgPSBuZXcgRXZlbnQoXCJTaWxlbnQgcmVuZXcgZXJyb3JcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dCA9IG5ldyBFdmVudChcIlVzZXIgc2lnbmVkIG91dFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQgPSBuZXcgRXZlbnQoXCJVc2VyIHNlc3Npb24gY2hhbmdlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkKHVzZXIsIHJhaXNlRXZlbnQ9dHJ1ZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLmxvYWRcIik7XHJcbiAgICAgICAgc3VwZXIubG9hZCh1c2VyKTtcclxuICAgICAgICBpZiAocmFpc2VFdmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTG9hZGVkLnJhaXNlKHVzZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHVubG9hZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy51bmxvYWRcIik7XHJcbiAgICAgICAgc3VwZXIudW5sb2FkKCk7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLnJhaXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlckxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyTG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlckxvYWRlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyVW5sb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyVW5sb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU2lsZW50UmVuZXdFcnJvcihjYikge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVTaWxlbnRSZW5ld0Vycm9yKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3JcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLnJhaXNlKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJTaWduZWRPdXQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0LmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclNpZ25lZE91dChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VVc2VyU2lnbmVkT3V0KGUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0XCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQucmFpc2UoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclNlc3Npb25DaGFuZ2VkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkKGUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLnJhaXNlKGUpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudFNldHRpbmdzIH0gZnJvbSAnLi9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xyXG5pbXBvcnQgeyBSZWRpcmVjdE5hdmlnYXRvciB9IGZyb20gJy4vUmVkaXJlY3ROYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBQb3B1cE5hdmlnYXRvciB9IGZyb20gJy4vUG9wdXBOYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBJRnJhbWVOYXZpZ2F0b3IgfSBmcm9tICcuL0lGcmFtZU5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVxdWVzdCB9IGZyb20gJy4vU2lnbmluUmVxdWVzdC5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSA2MDtcclxuY29uc3QgRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsID0gMjAwMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlclNldHRpbmdzIGV4dGVuZHMgT2lkY0NsaWVudFNldHRpbmdzIHtcclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICBwb3B1cF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIHBvcHVwV2luZG93RmVhdHVyZXMsXHJcbiAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQsXHJcbiAgICAgICAgc2lsZW50X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBzaWxlbnRSZXF1ZXN0VGltZW91dCxcclxuICAgICAgICBhdXRvbWF0aWNTaWxlbnRSZW5ldyA9IGZhbHNlLFxyXG4gICAgICAgIHZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyA9IGZhbHNlLFxyXG4gICAgICAgIGluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyA9IHRydWUsXHJcbiAgICAgICAgbW9uaXRvclNlc3Npb24gPSB0cnVlLFxyXG4gICAgICAgIGNoZWNrU2Vzc2lvbkludGVydmFsID0gRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsLFxyXG4gICAgICAgIHN0b3BDaGVja1Nlc3Npb25PbkVycm9yID0gdHJ1ZSxcclxuICAgICAgICBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSxcclxuICAgICAgICByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA9IGZhbHNlLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lLFxyXG4gICAgICAgIHJlZGlyZWN0TmF2aWdhdG9yID0gbmV3IFJlZGlyZWN0TmF2aWdhdG9yKCksXHJcbiAgICAgICAgcG9wdXBOYXZpZ2F0b3IgPSBuZXcgUG9wdXBOYXZpZ2F0b3IoKSxcclxuICAgICAgICBpZnJhbWVOYXZpZ2F0b3IgPSBuZXcgSUZyYW1lTmF2aWdhdG9yKCksXHJcbiAgICAgICAgdXNlclN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKHsgc3RvcmU6IEdsb2JhbC5zZXNzaW9uU3RvcmFnZSB9KVxyXG4gICAgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoYXJndW1lbnRzWzBdKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcG9wdXBfcmVkaXJlY3RfdXJpID0gcG9wdXBfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3B1cFdpbmRvd0ZlYXR1cmVzID0gcG9wdXBXaW5kb3dGZWF0dXJlcztcclxuICAgICAgICB0aGlzLl9wb3B1cFdpbmRvd1RhcmdldCA9IHBvcHVwV2luZG93VGFyZ2V0O1xyXG5cclxuICAgICAgICB0aGlzLl9zaWxlbnRfcmVkaXJlY3RfdXJpID0gc2lsZW50X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZXF1ZXN0VGltZW91dCA9IHNpbGVudFJlcXVlc3RUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY1NpbGVudFJlbmV3ID0gYXV0b21hdGljU2lsZW50UmVuZXc7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3ID0gdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3O1xyXG4gICAgICAgIHRoaXMuX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyA9IGluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldztcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG5cclxuICAgICAgICB0aGlzLl9tb25pdG9yU2Vzc2lvbiA9IG1vbml0b3JTZXNzaW9uO1xyXG4gICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsID0gY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XHJcbiAgICAgICAgdGhpcy5fc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IgPSBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuICAgICAgICBpZiAocXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50c1swXSAmJiBhcmd1bWVudHNbMF0ucmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKGFyZ3VtZW50c1swXS5yZXNwb25zZV90eXBlKSA/IFwiaWRfdG9rZW5cIiA6IFwiY29kZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBcImlkX3Rva2VuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID0gcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQ7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yID0gcmVkaXJlY3ROYXZpZ2F0b3I7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBOYXZpZ2F0b3IgPSBwb3B1cE5hdmlnYXRvcjtcclxuICAgICAgICB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IgPSBpZnJhbWVOYXZpZ2F0b3I7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJTdG9yZSA9IHVzZXJTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcG9wdXBfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBXaW5kb3dGZWF0dXJlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBXaW5kb3dGZWF0dXJlcztcclxuICAgIH1cclxuICAgIGdldCBwb3B1cFdpbmRvd1RhcmdldCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBXaW5kb3dUYXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNpbGVudF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpbGVudF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICAgZ2V0IHNpbGVudFJlcXVlc3RUaW1lb3V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWxlbnRSZXF1ZXN0VGltZW91dDtcclxuICAgIH1cclxuICAgIGdldCBhdXRvbWF0aWNTaWxlbnRSZW5ldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b21hdGljU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb25pdG9yU2Vzc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbW9uaXRvclNlc3Npb247XHJcbiAgICB9XHJcbiAgICBnZXQgY2hlY2tTZXNzaW9uSW50ZXJ2YWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgfVxyXG4gICAgZ2V0IHN0b3BDaGVja1Nlc3Npb25PbkVycm9yKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVkaXJlY3ROYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBpZnJhbWVOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lmcmFtZU5hdmlnYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXNlclN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmU7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgV2ViU3RvcmFnZVN0YXRlU3RvcmUge1xyXG4gICAgY29uc3RydWN0b3Ioe3ByZWZpeCA9IFwib2lkYy5cIiwgc3RvcmUgPSBHbG9iYWwubG9jYWxTdG9yYWdlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5fc3RvcmUgPSBzdG9yZTtcclxuICAgICAgICB0aGlzLl9wcmVmaXggPSBwcmVmaXg7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5zZXRcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICB0aGlzLl9zdG9yZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLmdldFwiLCBrZXkpO1xyXG5cclxuICAgICAgICBrZXkgPSB0aGlzLl9wcmVmaXggKyBrZXk7XHJcblxyXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5fc3RvcmUuZ2V0SXRlbShrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZShrZXkpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5yZW1vdmVcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3N0b3JlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICB0aGlzLl9zdG9yZS5yZW1vdmVJdGVtKGtleSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsS2V5cygpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5nZXRBbGxLZXlzXCIpO1xyXG5cclxuICAgICAgICB2YXIga2V5cyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fc3RvcmUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGxldCBrZXkgPSB0aGlzLl9zdG9yZS5rZXkoaW5kZXgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKHRoaXMuX3ByZWZpeCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkuc3Vic3RyKHRoaXMuX3ByZWZpeC5sZW5ndGgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXlzKTtcclxuICAgIH1cclxufVxyXG4iLCIvKlxyXG5CYXNlZCBvbiB0aGUgd29yayBvZiBBdXRoMFxyXG5odHRwczovL2dpdGh1Yi5jb20vYXV0aDAvaWR0b2tlbi12ZXJpZmllclxyXG5odHRwczovL2dpdGh1Yi5jb20vYXV0aDAvaWR0b2tlbi12ZXJpZmllci9ibG9iL21hc3Rlci9MSUNFTlNFXHJcbldoaWNoIGlzIGJhc2VkIG9uIHRoZSB3b3JrIG9mIFRvbSBXdVxyXG5odHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbmh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9MSUNFTlNFXHJcbiovXHJcblxyXG4vKlxyXG4gKiBUbyBzdXBwb3J0IG1vc3QgYmFzaWMgT3BlbklkIHVzZSBjYXNlcyAodXNpbmcgUlNBMjU2KSwgd2UgY2FuIGdldCBhd2F5IHdpdGhvdXRcclxuICogcmVxdWlyaW5nIHRoZSBmdWxsIGpyc2FzaWduIGZlYXR1cmUgc2V0IChhbmQgcmVzdWx0aW5nIG1hc3NpdmUgYnVuZGxlKS5cclxuICpcclxuICogLSBTdXBwb3J0IFJTQSAyNTYgYWxnb3JpdGhtIChvcHRpb25hbGx5IGNvdWxkIHN1cHBvcnQgUlNBKiBmYW1pbHkpXHJcbiAqIC0gUGFyc2UgSldUIHRva2VucyB1c2luZyB0aGUgKG4pIHBhcmFtZXRlci5cclxuICogLSBWZXJpZnkgc2lnbmF0dXJlIG9mIGlkX3Rva2Vuc1xyXG4gKiAtIFZlcmlmeSBhdF9oYXNoIG9mIGFjY2Vzc190b2tlbnNcclxuICogLSBQZXJmb3JtIGNvbW1vbiBiYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdGFza3MuXHJcbiAqL1xyXG5cclxuaW1wb3J0IEpTQk4gZnJvbSAnanNibic7XHJcbmltcG9ydCBTSEEyNTYgZnJvbSAnY3J5cHRvLWpzL3NoYTI1Nic7XHJcbmltcG9ydCBiYXNlNjRKcyBmcm9tICdiYXNlNjQtanMnO1xyXG5cclxudmFyIEJpZ0ludGVnZXIgPSBKU0JOLkJpZ0ludGVnZXI7XHJcblxyXG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbnZhciBiNjRtYXAgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIjtcclxudmFyIGI2NHBhZCA9IFwiPVwiO1xyXG5cclxuY29uc3QgQmFzZTY0ID0ge1xyXG4gICAgYjY0dG9oZXgocykge1xyXG4gICAgICAgIHZhciByZXQgPSBcIlwiO1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBrID0gMDsgLy8gYjY0IHN0YXRlLCAwLTNcclxuICAgICAgICB2YXIgc2xvcDtcclxuICAgICAgICBmb3IoaSA9IDA7IGkgPCBzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIGlmKHMuY2hhckF0KGkpID09PSBiNjRwYWQpIGJyZWFrO1xyXG4gICAgICAgICAgICB2YXIgdiA9IGI2NG1hcC5pbmRleE9mKHMuY2hhckF0KGkpKTtcclxuICAgICAgICAgICAgaWYodiA8IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZihrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh2ID4+IDIpO1xyXG4gICAgICAgICAgICAgICAgc2xvcCA9IHYgJiAzO1xyXG4gICAgICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihrID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoc2xvcCA8PCAyKSB8ICh2ID4+IDQpKTtcclxuICAgICAgICAgICAgICAgIHNsb3AgPSB2ICYgMHhmO1xyXG4gICAgICAgICAgICAgICAgayA9IDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihrID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShzbG9wKTtcclxuICAgICAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHYgPj4gMik7XHJcbiAgICAgICAgICAgICAgICBzbG9wID0gdiAmIDM7XHJcbiAgICAgICAgICAgICAgICBrID0gMztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChzbG9wIDw8IDIpIHwgKHYgPj4gNCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodiAmIDB4Zik7XHJcbiAgICAgICAgICAgICAgICBrID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihrID09PSAxKVxyXG4gICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShzbG9wIDw8IDIpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9LFxyXG4gICAgaGV4VG9CYXNlNjQoaCkge1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBjO1xyXG4gICAgICAgIHZhciByZXQgPSBcIlwiO1xyXG4gICAgICAgIGZvcihpID0gMDsgaSszIDw9IGgubGVuZ3RoOyBpKz0zKSB7XHJcbiAgICAgICAgICAgIGMgPSBwYXJzZUludChoLnN1YnN0cmluZyhpLGkrMyksMTYpO1xyXG4gICAgICAgICAgICByZXQgKz0gYjY0bWFwLmNoYXJBdChjID4+IDYpICsgYjY0bWFwLmNoYXJBdChjICYgNjMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpKzEgPT09IGgubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGMgPSBwYXJzZUludChoLnN1YnN0cmluZyhpLGkrMSksMTYpO1xyXG4gICAgICAgICAgICByZXQgKz0gYjY0bWFwLmNoYXJBdChjIDw8IDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGkrMiA9PT0gaC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGguc3Vic3RyaW5nKGksaSsyKSwxNik7XHJcbiAgICAgICAgICAgIHJldCArPSBiNjRtYXAuY2hhckF0KGMgPj4gMikgKyBiNjRtYXAuY2hhckF0KChjICYgMykgPDwgNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChiNjRwYWQpIHdoaWxlKChyZXQubGVuZ3RoICYgMykgPiAwKSByZXQgKz0gYjY0cGFkO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhZGRpbmcoc3RyKSB7XHJcbiAgICAgICAgdmFyIG1vZCA9IChzdHIubGVuZ3RoICUgNCk7XHJcbiAgICAgICAgdmFyIHBhZCA9IDQgLSBtb2Q7XHJcblxyXG4gICAgICAgIGlmIChtb2QgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdHIgKyAobmV3IEFycmF5KDEgKyBwYWQpKS5qb2luKCc9Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGJ5dGVBcnJheVRvSGV4KHJhdykge1xyXG4gICAgICAgIHZhciBIRVggPSAnJztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIF9oZXggPSByYXdbaV0udG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICBIRVggKz0gKF9oZXgubGVuZ3RoID09PSAyID8gX2hleCA6ICcwJyArIF9oZXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIEhFWDtcclxuICAgIH0sXHJcblxyXG4gICAgZGVjb2RlVG9IRVgoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIEJhc2U2NC5ieXRlQXJyYXlUb0hleChiYXNlNjRKcy50b0J5dGVBcnJheShCYXNlNjQucGFkZGluZyhzdHIpKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGJhc2U2NFRvQmFzZTY0VXJsKHMpIHtcclxuICAgICAgICBzID0gcy5yZXBsYWNlKC89L2csIFwiXCIpO1xyXG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL1xcKy9nLCBcIi1cIik7XHJcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXFwvL2csIFwiX1wiKTtcclxuICAgICAgICByZXR1cm4gcztcclxuICAgIH0sXHJcblxyXG4gICAgdXJsRGVjb2RlKHN0cikge1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8tL2csICcrJykgLy8gQ29udmVydCAnLScgdG8gJysnXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9fL2csICcvJykgLy8gQ29udmVydCAnXycgdG8gJy8nXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJyAnKTsgLy8gQ29udmVydCAnXFxzJyB0byAnICdcclxuXHJcbiAgICAgICAgcmV0dXJuIGF0b2Ioc3RyKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG52YXIgRGlnZXN0SW5mb0hlYWQgPSB7XHJcbiAgICBzaGExOiAnMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0JyxcclxuICAgIHNoYTIyNDogJzMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjJyxcclxuICAgIHNoYTI1NjogJzMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwJyxcclxuICAgIHNoYTM4NDogJzMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwJyxcclxuICAgIHNoYTUxMjogJzMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwJyxcclxuICAgIG1kMjogJzMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDIwNTAwMDQxMCcsXHJcbiAgICBtZDU6ICczMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAnLFxyXG4gICAgcmlwZW1kMTYwOiAnMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0J1xyXG59O1xyXG5cclxudmFyIERpZ2VzdEFsZ3MgPSB7XHJcbiAgICBzaGEyNTY6IFNIQTI1NixcclxuICAgIFNIQTI1NjpTSEEyNTZcclxufTtcclxuXHJcbmZ1bmN0aW9uIFJTQVZlcmlmaWVyKG1vZHVsdXMsIGV4cCkge1xyXG4gICAgdGhpcy5uID0gbnVsbDtcclxuICAgIHRoaXMuZSA9IDA7XHJcblxyXG4gICAgaWYgKG1vZHVsdXMgIT0gbnVsbCAmJiBleHAgIT0gbnVsbCAmJiBtb2R1bHVzLmxlbmd0aCA+IDAgJiYgZXhwLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLm4gPSBuZXcgQmlnSW50ZWdlcihtb2R1bHVzLCAxNik7XHJcbiAgICAgICAgdGhpcy5lID0gcGFyc2VJbnQoZXhwLCAxNik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgZGF0YScpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRBbGdvcml0aG1Gcm9tRGlnZXN0KGhEaWdlc3RJbmZvKSB7XHJcbiAgICBmb3IgKHZhciBhbGdOYW1lIGluIERpZ2VzdEluZm9IZWFkKSB7XHJcbiAgICAgICAgdmFyIGhlYWQgPSBEaWdlc3RJbmZvSGVhZFthbGdOYW1lXTtcclxuICAgICAgICB2YXIgbGVuID0gaGVhZC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmIChoRGlnZXN0SW5mby5zdWJzdHJpbmcoMCwgbGVuKSA9PT0gaGVhZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYWxnOiBhbGdOYW1lLFxyXG4gICAgICAgICAgICAgICAgaGFzaDogaERpZ2VzdEluZm8uc3Vic3RyaW5nKGxlbilcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbn1cclxuXHJcblxyXG5SU0FWZXJpZmllci5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gKG1zZywgZW5jc2lnKSB7XHJcbiAgICBlbmNzaWcgPSBCYXNlNjQuZGVjb2RlVG9IRVgoZW5jc2lnKTtcclxuICAgIGVuY3NpZyA9IGVuY3NpZy5yZXBsYWNlKC9bXjAtOWEtZl18W1xcc1xcbl1dL2lnLCAnJyk7XHJcblxyXG4gICAgdmFyIHNpZyA9IG5ldyBCaWdJbnRlZ2VyKGVuY3NpZywgMTYpO1xyXG5cclxuICAgIGlmIChzaWcuYml0TGVuZ3RoKCkgPiB0aGlzLm4uYml0TGVuZ3RoKCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBrZXkgbW9kdWx1cy4nKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVjcnlwdGVkU2lnID0gc2lnLm1vZFBvd0ludCh0aGlzLmUsIHRoaXMubik7XHJcbiAgICB2YXIgZGlnZXN0ID0gZGVjcnlwdGVkU2lnLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eMWYrMDAvLCAnJyk7XHJcbiAgICB2YXIgZGlnZXN0SW5mbyA9IGdldEFsZ29yaXRobUZyb21EaWdlc3QoZGlnZXN0KTtcclxuXHJcbiAgICBpZiAoZGlnZXN0SW5mby5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFEaWdlc3RBbGdzLmhhc093blByb3BlcnR5KGRpZ2VzdEluZm8uYWxnKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzaGluZyBhbGdvcml0aG0gaXMgbm90IHN1cHBvcnRlZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbXNnSGFzaCA9IERpZ2VzdEFsZ3NbZGlnZXN0SW5mby5hbGddKG1zZykudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiAoZGlnZXN0SW5mby5oYXNoID09PSBtc2dIYXNoKTtcclxufTtcclxuXHJcbmNvbnN0IEFsbG93ZWRTaWduaW5nQWxncyA9IFsnUlMyNTYnXTtcclxuXHJcbmNvbnN0IGp3cyA9IHtcclxuICAgIEpXUzoge1xyXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbih0b2tlbikge1xyXG4gICAgICAgICAgICB2YXIgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICB2YXIgaGVhZGVyO1xyXG4gICAgICAgICAgICB2YXIgcGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoaXMgZGl2ZXJnZXMgZnJvbSBBdXRoMCdzIGltcGxlbWVudGF0aW9uLCB3aGljaCB0aHJvd3MgcmF0aGVyIHRoYW5cclxuICAgICAgICAgICAgLy8gcmV0dXJuaW5nIHVuZGVmaW5lZFxyXG4gICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyID0gSlNPTi5wYXJzZShCYXNlNjQudXJsRGVjb2RlKHBhcnRzWzBdKSk7XHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShCYXNlNjQudXJsRGVjb2RlKHBhcnRzWzFdKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1Rva2VuIGhlYWRlciBvciBwYXlsb2FkIGlzIG5vdCB2YWxpZCBKU09OJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJPYmo6IGhlYWRlcixcclxuICAgICAgICAgICAgICAgIHBheWxvYWRPYmo6IHBheWxvYWQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2ZXJpZnk6IGZ1bmN0aW9uKGp3dCwga2V5LCBhbGxvd2VkU2lnbmluZ0FsZ3MgPSBbXSkge1xyXG4gICAgICAgICAgICBhbGxvd2VkU2lnbmluZ0FsZ3MuZm9yRWFjaCgoYWxnKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQWxsb3dlZFNpZ25pbmdBbGdzLmluZGV4T2YoYWxnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2lnbmluZyBhbGdvcml0aG06ICcgKyBhbGcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdmFyIHZlcmlmeSA9IG5ldyBSU0FWZXJpZmllcihrZXkubiwga2V5LmUpO1xyXG4gICAgICAgICAgICB2YXIgcGFydHMgPSBqd3Quc3BsaXQoJy4nKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBoZWFkZXJBbmRQYXlsb2FkID0gW3BhcnRzWzBdLCBwYXJ0c1sxXV0uam9pbignLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gdmVyaWZ5LnZlcmlmeShoZWFkZXJBbmRQYXlsb2FkLCBwYXJ0c1syXSk7XHJcbiAgICAgICAgfSxcclxuICAgIH0sXHJcbn07XHJcblxyXG5jb25zdCBLZXlVdGlsID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGRlY29kZWQga2V5cyBpbiBIZXggZm9ybWF0IGZvciB1c2UgaW4gY3J5cHRvIGZ1bmN0aW9ucy5cclxuICAgICAqIFN1cHBvcnRzIG1vZHVsdXMvZXhwb25lbnQtc3R5bGUga2V5cy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0ga2V5IHRoZSBzZWN1cml0eSBrZXlcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldEtleShrZXkpIHtcclxuICAgICAgICBpZiAoa2V5Lmt0eSA9PT0gJ1JTQScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGU6IEJhc2U2NC5kZWNvZGVUb0hFWChrZXkuZSksXHJcbiAgICAgICAgICAgICAgICBuOiBCYXNlNjQuZGVjb2RlVG9IRVgoa2V5Lm4pLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuY29uc3QgWDUwOSA9IHtcclxuICAgIGdldFB1YmxpY0tleUZyb21DZXJ0UEVNOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZC4gVXNlIHRoZSBmdWxsIG9pZGMtY2xpZW50IGxpYnJhcnkgaWYgeW91IG5lZWQgc3VwcG9ydCBmb3IgWDUwOS4nKTtcclxuICAgIH0sXHJcbn07XHJcblxyXG5jb25zdCBjcnlwdG8gPSB7XHJcbiAgICBVdGlsOiB7XHJcbiAgICAgICAgaGFzaFN0cmluZzogZnVuY3Rpb24odmFsdWUsIGFsZykge1xyXG4gICAgICAgICAgICB2YXIgaGFzaEZ1bmMgPSBEaWdlc3RBbGdzW2FsZ107XHJcbiAgICAgICAgICAgIHJldHVybiBoYXNoRnVuYyh2YWx1ZSkudG9TdHJpbmcoKTtcclxuICAgICAgICB9LFxyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gaGV4dG9iNjR1KHMpIHtcclxuICAgIGlmIChzLmxlbmd0aCAlIDIgPT09IDEpIHtcclxuICAgICAgICBzID0gJzAnICsgcztcclxuICAgIH1cclxuICAgIHJldHVybiBCYXNlNjQuYmFzZTY0VG9CYXNlNjRVcmwoQmFzZTY0LmhleFRvQmFzZTY0KHMpKTtcclxufVxyXG5cclxuY29uc3Qge2I2NHRvaGV4fSA9IEJhc2U2NDtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBqd3MsXHJcbiAgICBLZXlVdGlsLFxyXG4gICAgWDUwOSxcclxuICAgIGNyeXB0byxcclxuICAgIGhleHRvYjY0dSxcclxuICAgIGI2NHRvaGV4LFxyXG4gICAgQWxsb3dlZFNpZ25pbmdBbGdzXHJcbn07XHJcbiIsImltcG9ydCB1dWlkNCBmcm9tICd1dWlkL3Y0JztcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgUkZDNDEyMiB2ZXJzaW9uIDQgZ3VpZCAoKVxyXG4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmRvbSgpIHtcclxuICByZXR1cm4gdXVpZDQoKS5yZXBsYWNlKC8tL2csICcnKTtcclxufVxyXG4iLCJjb25zdCBWZXJzaW9uID0gXCIxLjkuMC1iZXRhLjRcIjsgZXhwb3J0IHtWZXJzaW9ufTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/dist/oidc-client.rsa256.slim.min.js b/dist/oidc-client.rsa256.slim.min.js index 9a7097b7..bd4fc380 100644 --- a/dist/oidc-client.rsa256.slim.min.js +++ b/dist/oidc-client.rsa256.slim.min.js @@ -1,3 +1,3 @@ -var Oidc=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function t(){return e.default}:function t(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=62)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r=4){for(var t=arguments.length,r=Array(t),n=0;n=3){for(var t=arguments.length,r=Array(t),n=0;n=2){for(var t=arguments.length,r=Array(t),n=0;n=1){for(var t=arguments.length,r=Array(t),n=0;n1&&void 0!==arguments[1]?arguments[1]:i.JsonService;if(function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw o.Log.error("MetadataService: No settings passed to MetadataService"),new Error("settings");this._settings=t,this._jsonService=new r(["application/jwk-set+json"])}return e.prototype.getMetadata=function e(){var t=this;return this._settings.metadata?(o.Log.debug("MetadataService.getMetadata: Returning metadata from settings"),Promise.resolve(this._settings.metadata)):this.metadataUrl?(o.Log.debug("MetadataService.getMetadata: getting metadata from",this.metadataUrl),this._jsonService.getJson(this.metadataUrl).then(function(e){return o.Log.debug("MetadataService.getMetadata: json received"),t._settings.metadata=e,e})):(o.Log.error("MetadataService.getMetadata: No authority or metadataUrl configured on settings"),Promise.reject(new Error("No authority or metadataUrl configured on settings")))},e.prototype.getIssuer=function e(){return this._getMetadataProperty("issuer")},e.prototype.getAuthorizationEndpoint=function e(){return this._getMetadataProperty("authorization_endpoint")},e.prototype.getUserInfoEndpoint=function e(){return this._getMetadataProperty("userinfo_endpoint")},e.prototype.getTokenEndpoint=function e(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._getMetadataProperty("token_endpoint",t)},e.prototype.getCheckSessionIframe=function e(){return this._getMetadataProperty("check_session_iframe",!0)},e.prototype.getEndSessionEndpoint=function e(){return this._getMetadataProperty("end_session_endpoint",!0)},e.prototype.getRevocationEndpoint=function e(){return this._getMetadataProperty("revocation_endpoint",!0)},e.prototype.getKeysEndpoint=function e(){return this._getMetadataProperty("jwks_uri",!0)},e.prototype._getMetadataProperty=function e(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return o.Log.debug("MetadataService.getMetadataProperty for: "+t),this.getMetadata().then(function(e){if(o.Log.debug("MetadataService.getMetadataProperty: metadata recieved"),void 0===e[t]){if(!0===r)return void o.Log.warn("MetadataService.getMetadataProperty: Metadata does not contain optional property "+t);throw o.Log.error("MetadataService.getMetadataProperty: Metadata does not contain property "+t),new Error("Metadata does not contain property "+t)}return e[t]})},e.prototype.getSigningKeys=function e(){var t=this;return this._settings.signingKeys?(o.Log.debug("MetadataService.getSigningKeys: Returning signingKeys from settings"),Promise.resolve(this._settings.signingKeys)):this._getMetadataProperty("jwks_uri").then(function(e){return o.Log.debug("MetadataService.getSigningKeys: jwks_uri received",e),t._jsonService.getJson(e).then(function(e){if(o.Log.debug("MetadataService.getSigningKeys: key set received",e),!e.keys)throw o.Log.error("MetadataService.getSigningKeys: Missing keys on keyset"),new Error("Missing keys on keyset");return t._settings.signingKeys=e.keys,t._settings.signingKeys})})},n(e,[{key:"metadataUrl",get:function e(){return this._metadataUrl||(this._settings.metadataUrl?this._metadataUrl=this._settings.metadataUrl:(this._metadataUrl=this._settings.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration"))),this._metadataUrl}}]),e}()},function(e,t){var r={}.toString;e.exports=function(e){return r.call(e).slice(8,-1)}},function(e,t,r){var n=r(2),o=r(8),i=r(19),s=r(24)("src"),a=r(68),u=(""+a).split("toString");r(3).inspectSource=function(e){return a.call(e)},(e.exports=function(e,t,r,a){var c="function"==typeof r;c&&(i(r,"name")||o(r,"name",t)),e[t]!==r&&(c&&(i(r,s)||o(r,s,e[t]?""+e[t]:u.join(String(t)))),e===n?e[t]=r:a?e[t]?e[t]=r:o(e,t,r):(delete e[t],o(e,t,r)))})(Function.prototype,"toString",function e(){return"function"==typeof this&&this[s]||a.call(this)})},function(e,t,r){e.exports=!r(18)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,r){var n=r(14);e.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,o){return e.call(t,r,n,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){e.exports={}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UrlUtility=void 0;var n=r(0),o=r(7);t.UrlUtility=function(){function e(){!function t(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}(this,e)}return e.addQueryParam=function e(t,r,n){return t.indexOf("?")<0&&(t+="?"),"?"!==t[t.length-1]&&(t+="&"),t+=encodeURIComponent(r),t+="=",t+=encodeURIComponent(n)},e.parseUrlFragment=function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.Global;"string"!=typeof t&&(t=i.location.href);var s=t.lastIndexOf(r);s>=0&&(t=t.substr(s+1)),"?"===r&&(s=t.indexOf("#"))>=0&&(t=t.substr(0,s));for(var a,u={},c=/([^&=]+)=([^&]*)/g,l=0;a=c.exec(t);)if(u[decodeURIComponent(a[1])]=decodeURIComponent(a[2]),l++>50)return n.Log.error("UrlUtility.parseUrlFragment: response exceeded expected number of parameters",t),{error:"Response exceeded expected number of parameters"};for(var p in u)return u;return{}},e}()},function(e,t,r){var n=r(4),o=r(66),i=r(67),s=Object.defineProperty;t.f=r(12)?Object.defineProperty:function e(t,r,a){if(n(t),r=i(r,!0),n(a),o)try{return s(t,r,a)}catch(e){}if("get"in a||"set"in a)throw TypeError("Accessors not supported!");return"value"in a&&(t[r]=a.value),t}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){var r={}.hasOwnProperty;e.exports=function(e,t){return r.call(e,t)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JoseUtil=void 0;var n=r(116),o=function i(e){return e&&e.__esModule?e:{default:e}}(r(121));t.JoseUtil=(0,o.default)({jws:n.jws,KeyUtil:n.KeyUtil,X509:n.X509,crypto:n.crypto,hextob64u:n.hextob64u,b64tohex:n.b64tohex,AllowedSigningAlgs:n.AllowedSigningAlgs})},function(e,t,r){var n=r(10),o=r(1)("toStringTag"),i="Arguments"==n(function(){return arguments}());e.exports=function(e){var t,r,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?r:i?n(t):"Object"==(s=n(t))&&"function"==typeof t.callee?"Arguments":s}},function(e,t,r){var n=r(3),o=r(2),i=o["__core-js_shared__"]||(o["__core-js_shared__"]={});(e.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:n.version,mode:r(23)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports=!1},function(e,t){var r=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++r+n).toString(36))}},function(e,t,r){var n=r(5),o=r(2).document,i=n(o)&&n(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t){var r=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:r)(e)}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,r){var n=r(74),o=r(41);e.exports=Object.keys||function e(t){return n(t,o)}},function(e,t,r){var n=r(30),o=r(27);e.exports=function(e){return n(o(e))}},function(e,t,r){var n=r(10);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},function(e,t,r){var n=r(26),o=Math.min;e.exports=function(e){return e>0?o(n(e),9007199254740991):0}},function(e,t,r){var n=r(22)("keys"),o=r(24);e.exports=function(e){return n[e]||(n[e]=o(e))}},function(e,t,r){var n=r(17).f,o=r(19),i=r(1)("toStringTag");e.exports=function(e,t,r){e&&!o(e=r?e:e.prototype,i)&&n(e,i,{configurable:!0,value:t})}},function(e,t,r){var n=r(27);e.exports=function(e){return Object(n(e))}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OidcClientSettings=void 0;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=t.authority,o=t.metadataUrl,i=t.metadata,d=t.signingKeys,h=t.client_id,g=t.client_secret,_=t.response_type,v=void 0===_?c:_,y=t.scope,m=void 0===y?l:y,b=t.redirect_uri,w=t.post_logout_redirect_uri,S=t.prompt,k=t.display,T=t.max_age,E=t.ui_locales,L=t.acr_values,P=t.resource,R=t.response_mode,C=t.filterProtocolClaims,x=void 0===C||C,U=t.loadUserInfo,M=void 0===U||U,O=t.staleStateAge,j=void 0===O?p:O,I=t.clockSkew,A=void 0===I?f:I,N=t.userInfoJwtIssuer,F=void 0===N?"OP":N,q=t.stateStore,J=void 0===q?new s.WebStorageStateStore:q,B=t.ResponseValidatorCtor,V=void 0===B?a.ResponseValidator:B,W=t.MetadataServiceCtor,D=void 0===W?u.MetadataService:W,H=t.extraQueryParams,z=void 0===H?{}:H;!function K(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._authority=r,this._metadataUrl=o,this._metadata=i,this._signingKeys=d,this._client_id=h,this._client_secret=g,this._response_type=v,this._scope=m,this._redirect_uri=b,this._post_logout_redirect_uri=w,this._prompt=S,this._display=k,this._max_age=T,this._ui_locales=E,this._acr_values=L,this._resource=P,this._response_mode=R,this._filterProtocolClaims=!!x,this._loadUserInfo=!!M,this._staleStateAge=j,this._clockSkew=A,this._userInfoJwtIssuer=F,this._stateStore=J,this._validator=new V(this),this._metadataService=new D(this),this._extraQueryParams="object"===(void 0===z?"undefined":n(z))?z:{}}return o(e,[{key:"client_id",get:function e(){return this._client_id},set:function e(t){if(this._client_id)throw i.Log.error("OidcClientSettings.set_client_id: client_id has already been assigned."),new Error("client_id has already been assigned.");this._client_id=t}},{key:"client_secret",get:function e(){return this._client_secret}},{key:"response_type",get:function e(){return this._response_type}},{key:"scope",get:function e(){return this._scope}},{key:"redirect_uri",get:function e(){return this._redirect_uri}},{key:"post_logout_redirect_uri",get:function e(){return this._post_logout_redirect_uri}},{key:"prompt",get:function e(){return this._prompt}},{key:"display",get:function e(){return this._display}},{key:"max_age",get:function e(){return this._max_age}},{key:"ui_locales",get:function e(){return this._ui_locales}},{key:"acr_values",get:function e(){return this._acr_values}},{key:"resource",get:function e(){return this._resource}},{key:"response_mode",get:function e(){return this._response_mode}},{key:"authority",get:function e(){return this._authority},set:function e(t){if(this._authority)throw i.Log.error("OidcClientSettings.set_authority: authority has already been assigned."),new Error("authority has already been assigned.");this._authority=t}},{key:"metadataUrl",get:function e(){return this._metadataUrl||(this._metadataUrl=this.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration")),this._metadataUrl}},{key:"metadata",get:function e(){return this._metadata},set:function e(t){this._metadata=t}},{key:"signingKeys",get:function e(){return this._signingKeys},set:function e(t){this._signingKeys=t}},{key:"filterProtocolClaims",get:function e(){return this._filterProtocolClaims}},{key:"loadUserInfo",get:function e(){return this._loadUserInfo}},{key:"staleStateAge",get:function e(){return this._staleStateAge}},{key:"clockSkew",get:function e(){return this._clockSkew}},{key:"userInfoJwtIssuer",get:function e(){return this._userInfoJwtIssuer}},{key:"stateStore",get:function e(){return this._stateStore}},{key:"validator",get:function e(){return this._validator}},{key:"metadataService",get:function e(){return this._metadataService}},{key:"extraQueryParams",get:function e(){return this._extraQueryParams},set:function e(t){"object"===(void 0===t?"undefined":n(t))?this._extraQueryParams=t:this._extraQueryParams={}}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WebStorageStateStore=void 0;var n=r(0),o=r(7);t.WebStorageStateStore=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.prefix,n=void 0===r?"oidc.":r,i=t.store,s=void 0===i?o.Global.localStorage:i;!function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._store=s,this._prefix=n}return e.prototype.set=function e(t,r){return n.Log.debug("WebStorageStateStore.set",t),t=this._prefix+t,this._store.setItem(t,r),Promise.resolve()},e.prototype.get=function e(t){n.Log.debug("WebStorageStateStore.get",t),t=this._prefix+t;var r=this._store.getItem(t);return Promise.resolve(r)},e.prototype.remove=function e(t){n.Log.debug("WebStorageStateStore.remove",t),t=this._prefix+t;var r=this._store.getItem(t);return this._store.removeItem(t),Promise.resolve(r)},e.prototype.getAllKeys=function e(){n.Log.debug("WebStorageStateStore.getAllKeys");for(var t=[],r=0;r0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.Global.XMLHttpRequest,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;!function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t&&Array.isArray(t)?this._contentTypes=t.slice():this._contentTypes=[],this._contentTypes.push("application/json"),n&&this._contentTypes.push("application/jwt"),this._XMLHttpRequest=r,this._jwtHandler=n}return e.prototype.getJson=function e(t,r){var o=this;if(!t)throw n.Log.error("JsonService.getJson: No url passed"),new Error("url");return n.Log.debug("JsonService.getJson, url: ",t),new Promise(function(e,i){var s=new o._XMLHttpRequest;s.open("GET",t);var a=o._contentTypes,u=o._jwtHandler;s.onload=function(){if(n.Log.debug("JsonService.getJson: HTTP response received, status",s.status),200===s.status){var r=s.getResponseHeader("Content-Type");if(r){var o=a.find(function(e){if(r.startsWith(e))return!0});if("application/jwt"==o)return void u(s).then(e,i);if(o)try{return void e(JSON.parse(s.responseText))}catch(e){return n.Log.error("JsonService.getJson: Error parsing JSON response",e.message),void i(e)}}i(Error("Invalid response Content-Type: "+r+", from URL: "+t))}else i(Error(s.statusText+" ("+s.status+")"))},s.onerror=function(){n.Log.error("JsonService.getJson: network error"),i(Error("Network Error"))},r&&(n.Log.debug("JsonService.getJson: token passed, setting Authorization header"),s.setRequestHeader("Authorization","Bearer "+r)),s.send()})},e.prototype.postForm=function e(t,r){var o=this;if(!t)throw n.Log.error("JsonService.postForm: No url passed"),new Error("url");return n.Log.debug("JsonService.postForm, url: ",t),new Promise(function(e,i){var s=new o._XMLHttpRequest;s.open("POST",t);var a=o._contentTypes;s.onload=function(){if(n.Log.debug("JsonService.postForm: HTTP response received, status",s.status),200!==s.status){if(400===s.status)if(o=s.getResponseHeader("Content-Type"))if(a.find(function(e){if(o.startsWith(e))return!0}))try{var r=JSON.parse(s.responseText);if(r&&r.error)return n.Log.error("JsonService.postForm: Error from server: ",r.error),void i(new Error(r.error))}catch(e){return n.Log.error("JsonService.postForm: Error parsing JSON response",e.message),void i(e)}i(Error(s.statusText+" ("+s.status+")"))}else{var o;if((o=s.getResponseHeader("Content-Type"))&&a.find(function(e){if(o.startsWith(e))return!0}))try{return void e(JSON.parse(s.responseText))}catch(e){return n.Log.error("JsonService.postForm: Error parsing JSON response",e.message),void i(e)}i(Error("Invalid response Content-Type: "+o+", from URL: "+t))}},s.onerror=function(){n.Log.error("JsonService.postForm: network error"),i(Error("Network Error"))};var u="";for(var c in r){var l=r[c];l&&(u.length>0&&(u+="&"),u+=encodeURIComponent(c),u+="=",u+=encodeURIComponent(l))}s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(u)})},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.State=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=t.id,n=t.data,o=t.created,s=t.request_type;!function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._id=r||(0,i.default)(),this._data=n,this._created="number"==typeof o&&o>0?o:parseInt(Date.now()/1e3),this._request_type=s}return e.prototype.toStorageString=function e(){return o.Log.debug("State.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type})},e.fromStorageString=function t(r){return o.Log.debug("State.fromStorageString"),new e(JSON.parse(r))},e.clearStaleState=function t(r,n){var i=Date.now()/1e3-n;return r.getAllKeys().then(function(t){o.Log.debug("State.clearStaleState: got keys",t);for(var n=[],s=function s(a){var c=t[a];u=r.get(c).then(function(t){var n=!1;if(t)try{var s=e.fromStorageString(t);o.Log.debug("State.clearStaleState: got item from key: ",c,s.created),s.created<=i&&(n=!0)}catch(e){o.Log.error("State.clearStaleState: Error parsing state for key",c,e.message),n=!0}else o.Log.debug("State.clearStaleState: no item in storage for key: ",c),n=!0;if(n)return o.Log.debug("State.clearStaleState: removed item for key: ",c),r.remove(c)}),n.push(u)},a=0;ao;)r.push(arguments[o++]);return v[++_]=function(){a("function"==typeof t?t:Function(t),r)},n(_),_},d=function e(t){delete v[t]},"process"==r(10)(p)?n=function(e){p.nextTick(s(y,e,1))}:g&&g.now?n=function(e){g.now(s(y,e,1))}:h?(i=(o=new h).port2,o.port1.onmessage=m,n=s(i.postMessage,i,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(n=function(e){l.postMessage(e+"","*")},l.addEventListener("message",m,!1)):n="onreadystatechange"in c("script")?function(e){u.appendChild(c("script")).onreadystatechange=function(){u.removeChild(this),y.call(e)}}:function(e){setTimeout(s(y,e,1),0)}),e.exports={set:f,clear:d}},function(e,t){e.exports=function(e,t,r){var n=void 0===r;switch(t.length){case 0:return n?e():e.call(r);case 1:return n?e(t[0]):e.call(r,t[0]);case 2:return n?e(t[0],t[1]):e.call(r,t[0],t[1]);case 3:return n?e(t[0],t[1],t[2]):e.call(r,t[0],t[1],t[2]);case 4:return n?e(t[0],t[1],t[2],t[3]):e.call(r,t[0],t[1],t[2],t[3])}return e.apply(r,t)}},function(e,t,r){"use strict";var n=r(14);e.exports.f=function(e){return new function t(e){var t,r;this.promise=new e(function(e,n){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=n}),this.resolve=n(t),this.reject=n(r)}(e)}},function(e,t,r){var n=r(13),o=r(30),i=r(34),s=r(31),a=r(105);e.exports=function(e,t){var r=1==e,u=2==e,c=3==e,l=4==e,p=6==e,f=5==e||p,d=t||a;return function(t,a,h){for(var g,_,v=i(t),y=o(v),m=n(a,h,3),b=s(y.length),w=0,S=r?d(t,b):u?d(t,0):void 0;b>w;w++)if((f||w in y)&&(_=m(g=y[w],w,v),e))if(r)S[w]=_;else if(_)switch(e){case 3:return!0;case 5:return g;case 6:return w;case 2:S.push(g)}else if(l)return!1;return p?-1:c||l?l:S}}},function(e,t,r){var n=r(10);e.exports=Array.isArray||function e(t){return"Array"==n(t)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OidcClient=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};!function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t instanceof i.OidcClientSettings?this._settings=t:this._settings=new i.OidcClientSettings(t)}return e.prototype.createSigninRequest=function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.response_type,i=r.scope,s=r.redirect_uri,u=r.data,c=r.state,l=r.prompt,p=r.display,f=r.max_age,d=r.ui_locales,h=r.id_token_hint,g=r.login_hint,_=r.acr_values,v=r.resource,y=r.request,m=r.request_uri,b=r.response_mode,w=r.extraQueryParams,S=r.request_type,k=arguments[1];o.Log.debug("OidcClient.createSigninRequest");var T=this._settings.client_id;n=n||this._settings.response_type,i=i||this._settings.scope,s=s||this._settings.redirect_uri,l=l||this._settings.prompt,p=p||this._settings.display,f=f||this._settings.max_age,d=d||this._settings.ui_locales,_=_||this._settings.acr_values,v=v||this._settings.resource,b=b||this._settings.response_mode,w=w||this._settings.extraQueryParams;var E=this._settings.authority;return a.SigninRequest.isCode(n)&&"code"!==n?Promise.reject(new Error("OpenID Connect hybrid flow is not supported")):this._metadataService.getAuthorizationEndpoint().then(function(e){o.Log.debug("OidcClient.createSigninRequest: Received authorization endpoint",e);var r=new a.SigninRequest({url:e,client_id:T,redirect_uri:s,response_type:n,scope:i,data:u||c,authority:E,prompt:l,display:p,max_age:f,ui_locales:d,id_token_hint:h,login_hint:g,acr_values:_,resource:v,request:y,request_uri:m,extraQueryParams:w,request_type:S,response_mode:b}),L=r.state;return(k=k||t._stateStore).set(L.id,L.toStorageString()).then(function(){return r})})},e.prototype.readSigninResponseState=function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];o.Log.debug("OidcClient.readSigninResponseState");var i="query"===this._settings.response_mode||!this._settings.response_mode&&a.SigninRequest.isCode(this._settings.response_type)?"?":"#",s=new u.SigninResponse(t,i);return s.state?(r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(s.state).then(function(e){if(!e)throw o.Log.error("OidcClient.readSigninResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:p.SigninState.fromStorageString(e),response:s}})):(o.Log.error("OidcClient.readSigninResponseState: No state in response"),Promise.reject(new Error("No state in response")))},e.prototype.processSigninResponse=function e(t,r){var n=this;return o.Log.debug("OidcClient.processSigninResponse"),this.readSigninResponseState(t,r,!0).then(function(e){var t=e.state,r=e.response;return o.Log.debug("OidcClient.processSigninResponse: Received state from storage; validating response"),n._validator.validateSigninResponse(t,r)})},e.prototype.createSignoutRequest=function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.id_token_hint,i=r.data,s=r.state,a=r.post_logout_redirect_uri,u=r.extraQueryParams,l=r.request_type,p=arguments[1];return o.Log.debug("OidcClient.createSignoutRequest"),a=a||this._settings.post_logout_redirect_uri,u=u||this._settings.extraQueryParams,this._metadataService.getEndSessionEndpoint().then(function(e){if(!e)throw o.Log.error("OidcClient.createSignoutRequest: No end session endpoint url returned"),new Error("no end session endpoint");o.Log.debug("OidcClient.createSignoutRequest: Received end session endpoint",e);var r=new c.SignoutRequest({url:e,id_token_hint:n,post_logout_redirect_uri:a,data:i||s,extraQueryParams:u,request_type:l}),f=r.state;return f&&(o.Log.debug("OidcClient.createSignoutRequest: Signout request has state to persist"),(p=p||t._stateStore).set(f.id,f.toStorageString())),r})},e.prototype.readSignoutResponseState=function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];o.Log.debug("OidcClient.readSignoutResponseState");var i=new l.SignoutResponse(t);if(!i.state)return o.Log.debug("OidcClient.readSignoutResponseState: No state in response"),i.error?(o.Log.warn("OidcClient.readSignoutResponseState: Response was error: ",i.error),Promise.reject(new s.ErrorResponse(i))):Promise.resolve({undefined:void 0,response:i});var a=i.state;return r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(a).then(function(e){if(!e)throw o.Log.error("OidcClient.readSignoutResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:f.State.fromStorageString(e),response:i}})},e.prototype.processSignoutResponse=function e(t,r){var n=this;return o.Log.debug("OidcClient.processSignoutResponse"),this.readSignoutResponseState(t,r,!0).then(function(e){var t=e.state,r=e.response;return o.Log.debug("OidcClient.processSignoutResponse: Received state from storage; validating response"),n._validator.validateSignoutResponse(t,r)})},e.prototype.clearStaleState=function e(t){return o.Log.debug("OidcClient.clearStaleState"),t=t||this._stateStore,f.State.clearStaleState(t,this.settings.staleStateAge)},n(e,[{key:"_stateStore",get:function e(){return this.settings.stateStore}},{key:"_validator",get:function e(){return this.settings.validator}},{key:"_metadataService",get:function e(){return this.settings.metadataService}},{key:"settings",get:function e(){return this._settings}},{key:"metadataService",get:function e(){return this._metadataService}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TokenClient=void 0;var n=r(37),o=r(9),i=r(0);t.TokenClient=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.MetadataService;if(function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw i.Log.error("TokenClient.ctor: No settings passed"),new Error("settings");this._settings=t,this._jsonService=new r,this._metadataService=new s(this._settings)}return e.prototype.exchangeCode=function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r.grant_type=r.grant_type||"authorization_code",r.client_id=r.client_id||this._settings.client_id,r.redirect_uri=r.redirect_uri||this._settings.redirect_uri,r.code?r.redirect_uri?r.code_verifier?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(e){return i.Log.debug("TokenClient.exchangeCode: Received token endpoint"),t._jsonService.postForm(e,r).then(function(e){return i.Log.debug("TokenClient.exchangeCode: response received"),e})}):(i.Log.error("TokenClient.exchangeCode: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(i.Log.error("TokenClient.exchangeCode: No code_verifier passed"),Promise.reject(new Error("A code_verifier is required"))):(i.Log.error("TokenClient.exchangeCode: No redirect_uri passed"),Promise.reject(new Error("A redirect_uri is required"))):(i.Log.error("TokenClient.exchangeCode: No code passed"),Promise.reject(new Error("A code is required")))},e.prototype.exchangeRefreshToken=function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r.grant_type=r.grant_type||"refresh_token",r.client_id=r.client_id||this._settings.client_id,r.client_secret=r.client_secret||this._settings.client_secret,r.refresh_token?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(e){return i.Log.debug("TokenClient.exchangeRefreshToken: Received token endpoint"),t._jsonService.postForm(e,r).then(function(e){return i.Log.debug("TokenClient.exchangeRefreshToken: response received"),e})}):(i.Log.error("TokenClient.exchangeRefreshToken: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(i.Log.error("TokenClient.exchangeRefreshToken: No refresh_token passed"),Promise.reject(new Error("A refresh_token is required")))},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ErrorResponse=void 0;var n=r(0);t.ErrorResponse=function(e){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=r.error,i=r.error_description,s=r.error_uri,a=r.state;if(function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),!o)throw n.Log.error("No error passed to ErrorResponse"),new Error("error");var c=function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,i||o));return c.name="ErrorResponse",c.error=o,c.error_description=i,c.error_uri=s,c.state=a,c}return function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(Error)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SigninRequest=void 0;var n=r(0),o=r(16),i=r(53);t.SigninRequest=function(){function e(t){var r=t.url,s=t.client_id,a=t.redirect_uri,u=t.response_type,c=t.scope,l=t.authority,p=t.data,f=t.prompt,d=t.display,h=t.max_age,g=t.ui_locales,_=t.id_token_hint,v=t.login_hint,y=t.acr_values,m=t.resource,b=t.response_mode,w=t.request,S=t.request_uri,k=t.extraQueryParams,T=t.request_type;if(function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!r)throw n.Log.error("SigninRequest.ctor: No url passed"),new Error("url");if(!s)throw n.Log.error("SigninRequest.ctor: No client_id passed"),new Error("client_id");if(!a)throw n.Log.error("SigninRequest.ctor: No redirect_uri passed"),new Error("redirect_uri");if(!u)throw n.Log.error("SigninRequest.ctor: No response_type passed"),new Error("response_type");if(!c)throw n.Log.error("SigninRequest.ctor: No scope passed"),new Error("scope");if(!l)throw n.Log.error("SigninRequest.ctor: No authority passed"),new Error("authority");var L=e.isOidc(u),P=e.isCode(u);b||(b=e.isCode(u)?"query":null),this.state=new i.SigninState({nonce:L,data:p,client_id:s,authority:l,redirect_uri:a,code_verifier:P,request_type:T,response_mode:b}),r=o.UrlUtility.addQueryParam(r,"client_id",s),r=o.UrlUtility.addQueryParam(r,"redirect_uri",a),r=o.UrlUtility.addQueryParam(r,"response_type",u),r=o.UrlUtility.addQueryParam(r,"scope",c),r=o.UrlUtility.addQueryParam(r,"state",this.state.id),L&&(r=o.UrlUtility.addQueryParam(r,"nonce",this.state.nonce)),P&&(r=o.UrlUtility.addQueryParam(r,"code_challenge",this.state.code_challenge),r=o.UrlUtility.addQueryParam(r,"code_challenge_method","S256"));var R={prompt:f,display:d,max_age:h,ui_locales:g,id_token_hint:_,login_hint:v,acr_values:y,resource:m,request:w,request_uri:S,response_mode:b};for(var C in R)R[C]&&(r=o.UrlUtility.addQueryParam(r,C,R[C]));for(var x in k)r=o.UrlUtility.addQueryParam(r,x,k[x]);this.url=r}return e.isOidc=function e(t){return!!t.split(/\s+/g).filter(function(e){return"id_token"===e})[0]},e.isOAuth=function e(t){return!!t.split(/\s+/g).filter(function(e){return"token"===e})[0]},e.isCode=function e(t){return!!t.split(/\s+/g).filter(function(e){return"code"===e})[0]},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SigninState=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.nonce,o=r.authority,i=r.client_id,u=r.redirect_uri,c=r.code_verifier,l=r.response_mode;!function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var f=function d(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,arguments[0]));if(!0===n?f._nonce=(0,a.default)():n&&(f._nonce=n),!0===c?f._code_verifier=(0,a.default)()+(0,a.default)()+(0,a.default)():c&&(f._code_verifier=c),f.code_verifier){var h=s.JoseUtil.hashString(f.code_verifier,"SHA256");f._code_challenge=s.JoseUtil.hexToBase64Url(h)}return f._redirect_uri=u,f._authority=o,f._client_id=i,f._response_mode=l,f}return function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.toStorageString=function e(){return o.Log.debug("SigninState.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type,nonce:this.nonce,code_verifier:this.code_verifier,redirect_uri:this.redirect_uri,authority:this.authority,client_id:this.client_id,response_mode:this.response_mode})},t.fromStorageString=function e(r){return o.Log.debug("SigninState.fromStorageString"),new t(JSON.parse(r))},n(t,[{key:"nonce",get:function e(){return this._nonce}},{key:"authority",get:function e(){return this._authority}},{key:"client_id",get:function e(){return this._client_id}},{key:"redirect_uri",get:function e(){return this._redirect_uri}},{key:"code_verifier",get:function e(){return this._code_verifier}},{key:"code_challenge",get:function e(){return this._code_challenge}},{key:"response_mode",get:function e(){return this._response_mode}}]),t}(i.State)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function n(){return(0,o.default)().replace(/-/g,"")};var o=function i(e){return e&&e.__esModule?e:{default:e}}(r(122));e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.User=void 0;var n=function(){function e(e,t){for(var r=0;r0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function e(){var t=this.expires_in;if(void 0!==t)return t<=0}},{key:"scopes",get:function e(){return(this.scope||"").split(" ")}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AccessTokenEvents=void 0;var n=r(0),o=r(137);var i=60;t.AccessTokenEvents=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.accessTokenExpiringNotificationTime,n=void 0===r?i:r,s=t.accessTokenExpiringTimer,a=void 0===s?new o.Timer("Access token expiring"):s,u=t.accessTokenExpiredTimer,c=void 0===u?new o.Timer("Access token expired"):u;!function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._accessTokenExpiringNotificationTime=n,this._accessTokenExpiring=a,this._accessTokenExpired=c}return e.prototype.load=function e(t){if(t.access_token&&void 0!==t.expires_in){var r=t.expires_in;if(n.Log.debug("AccessTokenEvents.load: access token present, remaining duration:",r),r>0){var o=r-this._accessTokenExpiringNotificationTime;o<=0&&(o=1),n.Log.debug("AccessTokenEvents.load: registering expiring timer in:",o),this._accessTokenExpiring.init(o)}else n.Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration."),this._accessTokenExpiring.cancel();var i=r+1;n.Log.debug("AccessTokenEvents.load: registering expired timer in:",i),this._accessTokenExpired.init(i)}else this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},e.prototype.unload=function e(){n.Log.debug("AccessTokenEvents.unload: canceling existing access token timers"),this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},e.prototype.addAccessTokenExpiring=function e(t){this._accessTokenExpiring.addHandler(t)},e.prototype.removeAccessTokenExpiring=function e(t){this._accessTokenExpiring.removeHandler(t)},e.prototype.addAccessTokenExpired=function e(t){this._accessTokenExpired.addHandler(t)},e.prototype.removeAccessTokenExpired=function e(t){this._accessTokenExpired.removeHandler(t)},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Event=void 0;var n=r(0);t.Event=function(){function e(t){!function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._name=t,this._callbacks=[]}return e.prototype.addHandler=function e(t){this._callbacks.push(t)},e.prototype.removeHandler=function e(t){var r=this._callbacks.findIndex(function(e){return e===t});r>=0&&this._callbacks.splice(r,1)},e.prototype.raise=function e(){n.Log.debug("Event: Raising event: "+this._name);for(var t=0;t1&&void 0!==arguments[1]?arguments[1]:i.CheckSessionIFrame;if(function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw o.Log.error("SessionMonitor.ctor: No user manager passed to SessionMonitor"),new Error("userManager");this._userManager=t,this._CheckSessionIFrameCtor=n,this._userManager.events.addUserLoaded(this._start.bind(this)),this._userManager.events.addUserUnloaded(this._stop.bind(this)),this._userManager.getUser().then(function(e){e&&r._start(e)}).catch(function(e){o.Log.error("SessionMonitor ctor: error from getUser:",e.message)})}return e.prototype._start=function e(t){var r=this,n=t.session_state;n&&(this._sub=t.profile.sub,this._sid=t.profile.sid,o.Log.debug("SessionMonitor._start: session_state:",n,", sub:",this._sub),this._checkSessionIFrame?this._checkSessionIFrame.start(n):this._metadataService.getCheckSessionIframe().then(function(e){if(e){o.Log.debug("SessionMonitor._start: Initializing check session iframe");var t=r._client_id,i=r._checkSessionInterval,s=r._stopCheckSessionOnError;r._checkSessionIFrame=new r._CheckSessionIFrameCtor(r._callback.bind(r),t,e,i,s),r._checkSessionIFrame.load().then(function(){r._checkSessionIFrame.start(n)})}else o.Log.warn("SessionMonitor._start: No check session iframe found in the metadata")}).catch(function(e){o.Log.error("SessionMonitor._start: Error from getCheckSessionIframe:",e.message)}))},e.prototype._stop=function e(){this._sub=null,this._sid=null,this._checkSessionIFrame&&(o.Log.debug("SessionMonitor._stop"),this._checkSessionIFrame.stop())},e.prototype._callback=function e(){var t=this;this._userManager.querySessionStatus().then(function(e){var r=!0;e?e.sub===t._sub?(r=!1,t._checkSessionIFrame.start(e.session_state),e.sid===t._sid?o.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:",e.session_state):(o.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:",e.session_state),t._userManager.events._raiseUserSessionChanged())):o.Log.debug("SessionMonitor._callback: Different subject signed into OP:",e.sub):o.Log.debug("SessionMonitor._callback: Subject no longer signed into OP"),r&&(o.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed out event"),t._userManager.events._raiseUserSignedOut())}).catch(function(e){o.Log.debug("SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event",e.message),t._userManager.events._raiseUserSignedOut()})},n(e,[{key:"_settings",get:function e(){return this._userManager.settings}},{key:"_metadataService",get:function e(){return this._userManager.metadataService}},{key:"_client_id",get:function e(){return this._settings.client_id}},{key:"_checkSessionInterval",get:function e(){return this._settings.checkSessionInterval}},{key:"_stopCheckSessionOnError",get:function e(){return this._settings.stopCheckSessionOnError}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CheckSessionIFrame=void 0;var n=r(0);var o=2e3;t.CheckSessionIFrame=function(){function e(t,r,n,i){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];!function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._callback=t,this._client_id=r,this._url=n,this._interval=i||o,this._stopOnError=s;var u=n.indexOf("/",n.indexOf("//")+2);this._frame_origin=n.substr(0,u),this._frame=window.document.createElement("iframe"),this._frame.style.visibility="hidden",this._frame.style.position="absolute",this._frame.style.display="none",this._frame.style.width=0,this._frame.style.height=0,this._frame.src=n}return e.prototype.load=function e(){var t=this;return new Promise(function(e){t._frame.onload=function(){e()},window.document.body.appendChild(t._frame),t._boundMessageEvent=t._message.bind(t),window.addEventListener("message",t._boundMessageEvent,!1)})},e.prototype._message=function e(t){t.origin===this._frame_origin&&t.source===this._frame.contentWindow&&("error"===t.data?(n.Log.error("CheckSessionIFrame: error message from check session op iframe"),this._stopOnError&&this.stop()):"changed"===t.data?(n.Log.debug("CheckSessionIFrame: changed message from check session op iframe"),this.stop(),this._callback()):n.Log.debug("CheckSessionIFrame: "+t.data+" message from check session op iframe"))},e.prototype.start=function e(t){var r=this;if(this._session_state!==t){n.Log.debug("CheckSessionIFrame.start"),this.stop(),this._session_state=t;var o=function e(){r._frame.contentWindow.postMessage(r._client_id+" "+r._session_state,r._frame_origin)};o(),this._timer=window.setInterval(o,this._interval)}},e.prototype.stop=function e(){this._session_state=null,this._timer&&(n.Log.debug("CheckSessionIFrame.stop"),window.clearInterval(this._timer),this._timer=null)},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TokenRevocationClient=void 0;var n=r(0),o=r(9),i=r(7);t.TokenRevocationClient=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.MetadataService;if(function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw n.Log.error("TokenRevocationClient.ctor: No settings provided"),new Error("No settings provided.");this._settings=t,this._XMLHttpRequestCtor=r,this._metadataService=new s(this._settings)}return e.prototype.revoke=function e(t,r){var o=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"access_token";if(!t)throw n.Log.error("TokenRevocationClient.revoke: No token provided"),new Error("No token provided.");if("access_token"!==i&&"refresh_token"!=i)throw n.Log.error("TokenRevocationClient.revoke: Invalid token type"),new Error("Invalid token type.");return this._metadataService.getRevocationEndpoint().then(function(e){if(e){n.Log.debug("TokenRevocationClient.revoke: Revoking "+i);var s=o._settings.client_id,a=o._settings.client_secret;return o._revoke(e,s,a,t,i)}if(r)throw n.Log.error("TokenRevocationClient.revoke: Revocation not supported"),new Error("Revocation not supported")})},e.prototype._revoke=function e(t,r,o,i,s){var a=this;return new Promise(function(e,u){var c=new a._XMLHttpRequestCtor;c.open("POST",t),c.onload=function(){n.Log.debug("TokenRevocationClient.revoke: HTTP response received, status",c.status),200===c.status?e():u(Error(c.statusText+" ("+c.status+")"))},c.onerror=function(){n.Log.debug("TokenRevocationClient.revoke: Network Error."),u("Network Error")};var l="client_id="+encodeURIComponent(r);o&&(l+="&client_secret="+encodeURIComponent(o)),l+="&token_type_hint="+encodeURIComponent(s),l+="&token="+encodeURIComponent(i),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.send(l)})},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CordovaPopupWindow=void 0;var n=function(){function e(e,t){for(var r=0;r=t.length?{value:void 0,done:!0}:(e=n(t,r),this._i+=e.length,{value:e,done:!1})})},function(e,t,r){var n=r(26),o=r(27);e.exports=function(e){return function(t,r){var i,s,a=String(o(t)),u=n(r),c=a.length;return u<0||u>=c?e?"":void 0:(i=a.charCodeAt(u))<55296||i>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?e?a.charAt(u):i:e?a.slice(u,u+2):s-56320+(i-55296<<10)+65536}}},function(e,t,r){"use strict";var n=r(72),o=r(39),i=r(33),s={};r(8)(s,r(1)("iterator"),function(){return this}),e.exports=function(e,t,r){e.prototype=n(s,{next:o(1,r)}),i(e,t+" Iterator")}},function(e,t,r){var n=r(4),o=r(73),i=r(41),s=r(32)("IE_PROTO"),a=function(){},u=function(){var e,t=r(25)("iframe"),n=i.length;for(t.style.display="none",r(42).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("