diff --git a/README.md b/README.md index 25128f2..6d4bdb4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

weRequest

-

v1.2.3

+

v1.2.4

解决繁琐的小程序会话管理,一款自带登录态管理的网络请求组件。

diff --git a/build/module/mockManager.d.ts b/build/module/mockManager.d.ts index 3cda97c..4a0ad0d 100644 --- a/build/module/mockManager.d.ts +++ b/build/module/mockManager.d.ts @@ -1,5 +1,5 @@ import { IRequestOption, IUploadFileOption } from "../interface"; -declare function get(obj: IRequestOption | IUploadFileOption, method: "request" | "uploadFile"): any; +declare function get(obj: IRequestOption | IUploadFileOption): any; declare const _default: { get: typeof get; }; diff --git a/build/weRequest.js b/build/weRequest.js index 902e64b..8715ad7 100644 --- a/build/weRequest.js +++ b/build/weRequest.js @@ -1,5 +1,5 @@ /*! - * weRequest 1.2.3 + * weRequest 1.2.4 * https://github.com/IvinWu/weRequest */ module.exports = @@ -437,8 +437,7 @@ exports.default = { Object.defineProperty(exports, "__esModule", { value: true }); var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts"); var loading_1 = __webpack_require__(/*! ../util/loading */ "./src/util/loading.ts"); -var responseHandler_1 = __webpack_require__(/*! ./responseHandler */ "./src/module/responseHandler.ts"); -function get(obj, method) { +function get(obj) { if (!(config_1.default.mockJson[obj.url] || (obj.originUrl && config_1.default.mockJson[obj.originUrl]))) { console.error('mock 没有对应接口的数据'); return false; @@ -450,12 +449,12 @@ function get(obj, method) { statusCode: 200 }; loading_1.default.hide(); - return responseHandler_1.default(res, obj, method); + return res; } exports.default = { get: get }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL21vY2tNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMENBQW9DO0FBQ3BDLDJDQUFxQztBQUNyQyxxREFBK0M7QUFHL0MsU0FBUyxHQUFHLENBQUMsR0FBdUMsRUFBRSxNQUFnQztJQUVsRixJQUFHLENBQUMsQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLGdCQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFFakYsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsSUFBSSxJQUFJLEdBQUcsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUU3RixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBTSxHQUFHLEdBQUc7UUFDUixJQUFJLE1BQUE7UUFDSixVQUFVLEVBQUUsR0FBRztLQUNsQixDQUFDO0lBRUYsaUJBQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNmLE9BQU8seUJBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQzVDLENBQUM7QUFFRCxrQkFBZTtJQUNYLEdBQUcsS0FBQTtDQUNOLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcclxuaW1wb3J0IGxvYWRpbmcgZnJvbSAnLi4vdXRpbC9sb2FkaW5nJ1xyXG5pbXBvcnQgcmVzcG9uc2VIYW5kbGVyIGZyb20gJy4vcmVzcG9uc2VIYW5kbGVyJ1xyXG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCJcclxuXHJcbmZ1bmN0aW9uIGdldChvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24sIG1ldGhvZDogXCJyZXF1ZXN0XCIgfCBcInVwbG9hZEZpbGVcIik6IGFueSB7XHJcblxyXG4gICAgaWYoIShjb25maWcubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgJiYgY29uZmlnLm1vY2tKc29uW29iai5vcmlnaW5VcmxdKSkpIHtcclxuICAgICAgICAvLyBtb2NrIOayoeacieWvueW6lOaOpeWPo+eahOaVsOaNrlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ21vY2sg5rKh5pyJ5a+55bqU5o6l5Y+j55qE5pWw5o2uJyk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXRhID0gY29uZmlnLm1vY2tKc29uW29iai51cmxdIHx8IChvYmoub3JpZ2luVXJsID8gY29uZmlnLm1vY2tKc29uW29iai5vcmlnaW5VcmxdIDogJycpO1xyXG4gICAgLy8gZGVlcCBjb3B5XHJcbiAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICBjb25zdCByZXMgPSB7XHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBzdGF0dXNDb2RlOiAyMDBcclxuICAgIH07XHJcblxyXG4gICAgbG9hZGluZy5oaWRlKCk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2VIYW5kbGVyKHJlcywgb2JqLCBtZXRob2QpXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIGdldFxyXG59XHJcbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL21vY2tNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMENBQW9DO0FBQ3BDLDJDQUFxQztBQUdyQyxTQUFTLEdBQUcsQ0FBQyxHQUF1QztJQUVoRCxJQUFHLENBQUMsQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLGdCQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFFakYsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsSUFBSSxJQUFJLEdBQUcsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUU3RixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBTSxHQUFHLEdBQUc7UUFDUixJQUFJLE1BQUE7UUFDSixVQUFVLEVBQUUsR0FBRztLQUNsQixDQUFDO0lBRUYsaUJBQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNmLE9BQU8sR0FBRyxDQUFBO0FBQ2QsQ0FBQztBQUVELGtCQUFlO0lBQ1gsR0FBRyxLQUFBO0NBQ04sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xyXG5pbXBvcnQgbG9hZGluZyBmcm9tICcuLi91dGlsL2xvYWRpbmcnXHJcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIlxyXG5cclxuZnVuY3Rpb24gZ2V0KG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbik6IGFueSB7XHJcblxyXG4gICAgaWYoIShjb25maWcubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgJiYgY29uZmlnLm1vY2tKc29uW29iai5vcmlnaW5VcmxdKSkpIHtcclxuICAgICAgICAvLyBtb2NrIOayoeacieWvueW6lOaOpeWPo+eahOaVsOaNrlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ21vY2sg5rKh5pyJ5a+55bqU5o6l5Y+j55qE5pWw5o2uJyk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXRhID0gY29uZmlnLm1vY2tKc29uW29iai51cmxdIHx8IChvYmoub3JpZ2luVXJsID8gY29uZmlnLm1vY2tKc29uW29iai5vcmlnaW5VcmxdIDogJycpO1xyXG4gICAgLy8gZGVlcCBjb3B5XHJcbiAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICBjb25zdCByZXMgPSB7XHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBzdGF0dXNDb2RlOiAyMDBcclxuICAgIH07XHJcblxyXG4gICAgbG9hZGluZy5oaWRlKCk7XHJcbiAgICByZXR1cm4gcmVzXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIGdldFxyXG59XHJcbiJdfQ== /***/ }), @@ -626,9 +625,10 @@ function request(obj) { return new Promise(function (resolve, reject) { obj = preDo(obj); if (config_1.default.mockJson) { - var mockResponse = mockManager_1.default.get(obj, 'request'); + var mockResponse = mockManager_1.default.get(obj); if (mockResponse) { - return resolve(mockResponse); + var response = responseHandler_1.default(mockResponse, obj, 'request'); + return resolve(response); } } if (obj.cache) { @@ -648,8 +648,11 @@ function uploadFile(obj) { return new Promise(function (resolve, reject) { obj = preDo(obj); if (config_1.default.mockJson) { - mockManager_1.default.get(obj, 'uploadFile'); - return; + var mockResponse = mockManager_1.default.get(obj); + if (mockResponse) { + var response = responseHandler_1.default(mockResponse, obj, 'uploadFile'); + return resolve(response); + } } sessionManager_1.default.main().then(function () { return doUploadFile(obj); @@ -666,7 +669,7 @@ exports.default = { request: request, uploadFile: uploadFile }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQyw2Q0FBdUM7QUFDdkMsK0NBQXlDO0FBQ3pDLG1EQUE2QztBQUM3QyxxREFBK0M7QUFDL0MsdURBQWlEO0FBQ2pELG1DQUE2QjtBQUU3QiwrQ0FBMEM7QUFHMUMsU0FBUyxNQUFNLENBQUMsU0FBaUI7SUFDN0IsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzlCLE9BQU8sU0FBUyxDQUFBO0tBQ25CO1NBQU07UUFDSCxJQUFJLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQ3hDLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO1NBQ2pDO1FBQ0QsT0FBTyxTQUFTLEdBQUcsU0FBUyxDQUFDO0tBQ2hDO0FBQ0wsQ0FBQztBQUdELFNBQVMsS0FBSyxDQUErQyxHQUFNO0lBQy9ELElBQUksT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUN0QyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7S0FDcEI7SUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDekMsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7S0FDeEI7U0FBTTtRQUNILEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUN0QjtJQUVELElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRTtRQUNqQixpQkFBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDakM7SUFFRCxJQUFJLENBQUMsR0FB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T0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQUMsQ0FBQztZQUNQLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsa0JBQWU7SUFDWCxNQUFNLFFBQUE7SUFDTixPQUFPLFNBQUE7SUFDUCxVQUFVLFlBQUE7Q0FDYixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvYWRpbmcgZnJvbSAnLi4vdXRpbC9sb2FkaW5nJ1xyXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcclxuaW1wb3J0IHN0YXR1cyBmcm9tICcuLi9zdG9yZS9zdGF0dXMnXHJcbmltcG9ydCBtb2NrTWFuYWdlciBmcm9tICcuL21vY2tNYW5hZ2VyJ1xyXG5pbXBvcnQgY2FjaGVNYW5hZ2VyIGZyb20gJy4vY2FjaGVNYW5hZ2VyJ1xyXG5pbXBvcnQgc2Vzc2lvbk1hbmFnZXIgZnJvbSAnLi9zZXNzaW9uTWFuYWdlcidcclxuaW1wb3J0IHJlc3BvbnNlSGFuZGxlciBmcm9tICcuL3Jlc3BvbnNlSGFuZGxlcidcclxuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSBcIi4vZHVyYXRpb25SZXBvcnRlclwiXHJcbmltcG9ydCB1cmwgZnJvbSAnLi4vdXRpbC91cmwnXHJcbmltcG9ydCB7SVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9ufSBmcm9tIFwiLi4vaW50ZXJmYWNlXCJcclxuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tIFwiLi9lcnJvckhhbmRsZXJcIjtcclxuXHJcbi8vIOagvOW8j+WMlnVybFxyXG5mdW5jdGlvbiBmb3JtYXQob3JpZ2luVXJsOiBzdHJpbmcpIHtcclxuICAgIGlmIChvcmlnaW5Vcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XHJcbiAgICAgICAgcmV0dXJuIG9yaWdpblVybFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgdXJsUGVyZml4ID0gY29uZmlnLnVybFBlcmZpeDtcclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy51cmxQZXJmaXggPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB1cmxQZXJmaXggPSBjb25maWcudXJsUGVyZml4KClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVybFBlcmZpeCArIG9yaWdpblVybDtcclxuICAgIH1cclxufVxyXG5cclxuLy8g5omA5pyJ6K+35rGC5Y+R5Ye65YmN6ZyA6KaB5YGa55qE5LqL5oOFXHJcbmZ1bmN0aW9uIHByZURvPFQgZXh0ZW5kcyBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uPihvYmo6IFQpOiBUIHtcclxuICAgIGlmICh0eXBlb2Ygb2JqLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIG9iai5iZWZvcmVTZW5kKCk7XHJcbiAgICB9XHJcbiAgICAvLyDnmbvlvZXmgIHlpLHmlYjvvIzph43lpI3nmbvlvZXorqHmlbBcclxuICAgIGlmICh0eXBlb2Ygb2JqLnJlTG9naW5Db3VudCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvYmoucmVMb2dpbkNvdW50Kys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9iai5zaG93TG9hZGluZykge1xyXG4gICAgICAgIGxvYWRpbmcuc2hvdyhvYmouc2hvd0xvYWRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xyXG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xyXG4gICAgICAgIG9iai51cmwgPSBmb3JtYXQob2JqLnVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuLy8g5qC85byP5YyW5aSE55CG6K+35rGC55qEb2Jq5YaF5a65XHJcbmZ1bmN0aW9uIGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iajogSVJlcXVlc3RPcHRpb24pIHtcclxuXHJcbiAgICBpZiAoIW9iai5kYXRhKSB7XHJcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1cy5zZXNzaW9uKSB7XHJcbiAgICAgICAgb2JqLmRhdGEgPSB7Li4ub2JqLmRhdGEgYXMgb2JqZWN0LCBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb259O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWmguaenOacieWFqOWxgOWPguaVsO+8jOWImea3u+WKoFxyXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XHJcbiAgICBvYmouZGF0YSA9IHsuLi5nZCwgLi4ub2JqLmRhdGEgYXMgb2JqZWN0fTtcclxuXHJcbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcclxuICAgIG9iai5kYXRhVHlwZSA9IG9iai5kYXRhVHlwZSB8fCAnanNvbic7XHJcblxyXG4gICAgLy8g5aaC5p6c6K+35rGC5LiN5pivR0VU77yM5YiZ5ZyoVVJM5Lit6Ieq5Yqo5Yqg5LiK55m75b2V5oCB5ZKM5YWo5bGA5Y+C5pWwXHJcbiAgICBpZiAob2JqLm1ldGhvZCAhPT0gXCJHRVRcIikge1xyXG4gICAgICAgIGlmIChzdGF0dXMuc2Vzc2lvbikge1xyXG4gICAgICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCB7W2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9ufSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcclxuICAgIH1cclxuXHJcbiAgICBkdXJhdGlvblJlcG9ydGVyLnN0YXJ0KG9iaik7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuLy8g5qC85byP5YyW5aSE55CG5LiK5Lyg5paH5Lu255qEb2Jq5YaF5a65XHJcbmZ1bmN0aW9uIGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iajogSVVwbG9hZEZpbGVPcHRpb24pIHtcclxuICAgIGlmICghb2JqLmZvcm1EYXRhKSB7XHJcbiAgICAgICAgb2JqLmZvcm1EYXRhID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9iai5vcmlnaW5VcmwgIT09IGNvbmZpZy5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXMuc2Vzc2lvbikge1xyXG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHsuLi5vYmouZm9ybURhdGEgYXMgb2JqZWN0LCBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb259O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWmguaenOacieWFqOWxgOWPguaVsO+8jOWImea3u+WKoFxyXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XHJcbiAgICBvYmouZm9ybURhdGEgPSB7Li4uZ2QsIC4uLm9iai5mb3JtRGF0YX07XHJcblxyXG4gICAgLy8g5bCG55m76ZmG5oCB5Lmf5bim5ZyodXJs5LiKXHJcbiAgICBpZiAoc3RhdHVzLnNlc3Npb24pIHtcclxuICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCB7W2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9ufSk7XHJcbiAgICB9XHJcbiAgICAvLyDlhajlsYDlj4LmlbDlkIzml7bmlL7lnKh1cmzkuIpcclxuICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcclxuXHJcbiAgICBkdXJhdGlvblJlcG9ydGVyLnN0YXJ0KG9iaik7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0R2xvYmFsRGF0YSgpIHtcclxuICAgIGxldCBnZDogYW55ID0ge307XHJcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5nbG9iYWxEYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBnZCA9IGNvbmZpZy5nbG9iYWxEYXRhKCk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZ2xvYmFsRGF0YSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGdkID0gY29uZmlnLmdsb2JhbERhdGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ2Q7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRvUmVxdWVzdChvYmo6IElSZXF1ZXN0T3B0aW9uKSB7XHJcbiAgICBvYmogPSBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB3eC5yZXF1ZXN0KHtcclxuICAgICAgICAgICAgdXJsOiBvYmoudXJsLFxyXG4gICAgICAgICAgICBkYXRhOiBvYmouZGF0YSxcclxuICAgICAgICAgICAgbWV0aG9kOiBvYmoubWV0aG9kLFxyXG4gICAgICAgICAgICBoZWFkZXI6IG9iai5oZWFkZXIgfHwge30sXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiBvYmouZGF0YVR5cGUgfHwgJ2pzb24nLFxyXG4gICAgICAgICAgICBzdWNjZXNzKHJlczogd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmFpbChyZXM6IHd4LkdlbmVyYWxDYWxsYmFja1Jlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyLnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29tcGxldGUoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZy5oaWRlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBkb1VwbG9hZEZpbGUob2JqOiBJVXBsb2FkRmlsZU9wdGlvbikge1xyXG4gICAgb2JqID0gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgd3gudXBsb2FkRmlsZSh7XHJcbiAgICAgICAgICAgIHVybDogb2JqLnVybCxcclxuICAgICAgICAgICAgZmlsZVBhdGg6IG9iai5maWxlUGF0aCB8fCAnJyxcclxuICAgICAgICAgICAgbmFtZTogb2JqLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIGZvcm1EYXRhOiBvYmouZm9ybURhdGEsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzOiB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmYWlsKHJlczogd3guR2VuZXJhbENhbGxiYWNrUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcXVlc3Qob2JqOiBJUmVxdWVzdE9wdGlvbik6IGFueSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIG9iaiA9IHByZURvKG9iaik7XHJcblxyXG4gICAgICAgIGlmIChjb25maWcubW9ja0pzb24pIHtcclxuICAgICAgICAgICAgbGV0IG1vY2tSZXNwb25zZSA9IG1vY2tNYW5hZ2VyLmdldChvYmosICdyZXF1ZXN0Jyk7XHJcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG1vY2tSZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvYmouY2FjaGUpIHtcclxuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyLmdldChvYmopO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2Vzc2lvbk1hbmFnZXIubWFpbigpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9SZXF1ZXN0KG9iailcclxuICAgICAgICB9KS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyKHJlcyBhcyB3eC5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0LCBvYmosICdyZXF1ZXN0Jyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGxvYWRGaWxlKG9iajogSVVwbG9hZEZpbGVPcHRpb24pOiBhbnkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBvYmogPSBwcmVEbyhvYmopO1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnLm1vY2tKc29uKSB7XHJcbiAgICAgICAgICAgIG1vY2tNYW5hZ2VyLmdldChvYmosICd1cGxvYWRGaWxlJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNlc3Npb25NYW5hZ2VyLm1haW4oKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGRvVXBsb2FkRmlsZShvYmopXHJcbiAgICAgICAgfSkudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcihyZXMgYXMgd3guVXBsb2FkRmlsZVN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCwgb2JqLCAndXBsb2FkRmlsZScpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgZm9ybWF0LFxyXG4gICAgcmVxdWVzdCxcclxuICAgIHVwbG9hZEZpbGVcclxufVxyXG4iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQyw2Q0FBdUM7QUFDdkMsK0NBQXlDO0FBQ3pDLG1EQUE2QztBQUM3QyxxREFBK0M7QUFDL0MsdURBQWlEO0FBQ2pELG1DQUE2QjtBQUU3QiwrQ0FBMEM7QUFHMUMsU0FBUyxNQUFNLENBQUMsU0FBaUI7SUFDN0IsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzlCLE9BQU8sU0FBUyxDQUFBO0tBQ25CO1NBQU07UUFDSCxJQUFJLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQ3hDLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO1NBQ2pDO1FBQ0QsT0FBTyxTQUFTLEdBQUcsU0FBUyxDQUFDO0tBQ2hDO0FBQ0wsQ0FBQztBQUdELFNBQVMsS0FBSyxDQUErQyxHQUFNO0lBQy9ELElBQUksT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUN0QyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7S0FDcEI7SUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDekMsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7S0FDeEI7U0FBTTtRQUNILEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUN0QjtJQUVELElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRTtRQUNqQixpQkFBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDakM7SUFFRCxJQUFJLENBQUMsR0FB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QWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDdkIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDNUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsR0FBRztZQUNSLElBQUksUUFBUSxHQUFHLHlCQUFlLENBQUMsR0FBeUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDN0YsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQUMsQ0FBQztZQUNQLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsa0JBQWU7SUFDWCxNQUFNLFFBQUE7SUFDTixPQUFPLFNBQUE7SUFDUCxVQUFVLFlBQUE7Q0FDYixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvYWRpbmcgZnJvbSAnLi4vdXRpbC9sb2FkaW5nJ1xyXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcclxuaW1wb3J0IHN0YXR1cyBmcm9tICcuLi9zdG9yZS9zdGF0dXMnXHJcbmltcG9ydCBtb2NrTWFuYWdlciBmcm9tICcuL21vY2tNYW5hZ2VyJ1xyXG5pbXBvcnQgY2FjaGVNYW5hZ2VyIGZyb20gJy4vY2FjaGVNYW5hZ2VyJ1xyXG5pbXBvcnQgc2Vzc2lvbk1hbmFnZXIgZnJvbSAnLi9zZXNzaW9uTWFuYWdlcidcclxuaW1wb3J0IHJlc3BvbnNlSGFuZGxlciBmcm9tICcuL3Jlc3BvbnNlSGFuZGxlcidcclxuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSBcIi4vZHVyYXRpb25SZXBvcnRlclwiXHJcbmltcG9ydCB1cmwgZnJvbSAnLi4vdXRpbC91cmwnXHJcbmltcG9ydCB7SVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9ufSBmcm9tIFwiLi4vaW50ZXJmYWNlXCJcclxuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tIFwiLi9lcnJvckhhbmRsZXJcIjtcclxuXHJcbi8vIOagvOW8j+WMlnVybFxyXG5mdW5jdGlvbiBmb3JtYXQob3JpZ2luVXJsOiBzdHJpbmcpIHtcclxuICAgIGlmIChvcmlnaW5Vcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XHJcbiAgICAgICAgcmV0dXJuIG9yaWdpblVybFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgdXJsUGVyZml4ID0gY29uZmlnLnVybFBlcmZpeDtcclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy51cmxQZXJmaXggPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB1cmxQZXJmaXggPSBjb25maWcudXJsUGVyZml4KClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVybFBlcmZpeCArIG9yaWdpblVybDtcclxuICAgIH1cclxufVxyXG5cclxuLy8g5omA5pyJ6K+35rGC5Y+R5Ye65YmN6ZyA6KaB5YGa55qE5LqL5oOFXHJcbmZ1bmN0aW9uIHByZURvPFQgZXh0ZW5kcyBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uPihvYmo6IFQpOiBUIHtcclxuICAgIGlmICh0eXBlb2Ygb2JqLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIG9iai5iZWZvcmVTZW5kKCk7XHJcbiAgICB9XHJcbiAgICAvLyDnmbvlvZXmgIHlpLHmlYjvvIzph43lpI3nmbvlvZXorqHmlbBcclxuICAgIGlmICh0eXBlb2Ygb2JqLnJlTG9naW5Db3VudCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvYmoucmVMb2dpbkNvdW50Kys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9iai5zaG93TG9hZGluZykge1xyXG4gICAgICAgIGxvYWRpbmcuc2hvdyhvYmouc2hvd0xvYWRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xyXG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xyXG4gICAgICAgIG9iai51cmwgPSBmb3JtYXQob2JqLnVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuLy8g5qC85byP5YyW5aSE55CG6K+35rGC55qEb2Jq5YaF5a65XHJcbmZ1bmN0aW9uIGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iajogSVJlcXVlc3RPcHRpb24pIHtcclxuXHJcbiAgICBpZiAoIW9iai5kYXRhKSB7XHJcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1cy5zZXNzaW9uKSB7XHJcbiAgICAgICAgb2JqLmRhdGEgPSB7Li4ub2JqLmRhdGEgYXMgb2JqZWN0LCBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb259O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWmguaenOacieWFqOWxgOWPguaVsO+8jOWImea3u+WKoFxyXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XHJcbiAgICBvYmouZGF0YSA9IHsuLi5nZCwgLi4ub2JqLmRhdGEgYXMgb2JqZWN0fTtcclxuXHJcbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcclxuICAgIG9iai5kYXRhVHlwZSA9IG9iai5kYXRhVHlwZSB8fCAnanNvbic7XHJcblxyXG4gICAgLy8g5aaC5p6c6K+35rGC5LiN5pivR0VU77yM5YiZ5ZyoVVJM5Lit6Ieq5Yqo5Yqg5LiK55m75b2V5oCB5ZKM5YWo5bGA5Y+C5pWwXHJcbiAgICBpZiAob2JqLm1ldGhvZCAhPT0gXCJHRVRcIikge1xyXG4gICAgICAgIGlmIChzdGF0dXMuc2Vzc2lvbikge1xyXG4gICAgICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCB7W2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9ufSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcclxuICAgIH1cclxuXHJcbiAgICBkdXJhdGlvblJlcG9ydGVyLnN0YXJ0KG9iaik7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuLy8g5qC85byP5YyW5aSE55CG5LiK5Lyg5paH5Lu255qEb2Jq5YaF5a65XHJcbmZ1bmN0aW9uIGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iajogSVVwbG9hZEZpbGVPcHRpb24pIHtcclxuICAgIGlmICghb2JqLmZvcm1EYXRhKSB7XHJcbiAgICAgICAgb2JqLmZvcm1EYXRhID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9iai5vcmlnaW5VcmwgIT09IGNvbmZpZy5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXMuc2Vzc2lvbikge1xyXG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHsuLi5vYmouZm9ybURhdGEgYXMgb2JqZWN0LCBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb259O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWmguaenOacieWFqOWxgOWPguaVsO+8jOWImea3u+WKoFxyXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XHJcbiAgICBvYmouZm9ybURhdGEgPSB7Li4uZ2QsIC4uLm9iai5mb3JtRGF0YX07XHJcblxyXG4gICAgLy8g5bCG55m76ZmG5oCB5Lmf5bim5ZyodXJs5LiKXHJcbiAgICBpZiAoc3RhdHVzLnNlc3Npb24pIHtcclxuICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCB7W2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9ufSk7XHJcbiAgICB9XHJcbiAgICAvLyDlhajlsYDlj4LmlbDlkIzml7bmlL7lnKh1cmzkuIpcclxuICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcclxuXHJcbiAgICBkdXJhdGlvblJlcG9ydGVyLnN0YXJ0KG9iaik7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0R2xvYmFsRGF0YSgpIHtcclxuICAgIGxldCBnZDogYW55ID0ge307XHJcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5nbG9iYWxEYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBnZCA9IGNvbmZpZy5nbG9iYWxEYXRhKCk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZ2xvYmFsRGF0YSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGdkID0gY29uZmlnLmdsb2JhbERhdGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ2Q7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRvUmVxdWVzdChvYmo6IElSZXF1ZXN0T3B0aW9uKSB7XHJcbiAgICBvYmogPSBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB3eC5yZXF1ZXN0KHtcclxuICAgICAgICAgICAgdXJsOiBvYmoudXJsLFxyXG4gICAgICAgICAgICBkYXRhOiBvYmouZGF0YSxcclxuICAgICAgICAgICAgbWV0aG9kOiBvYmoubWV0aG9kLFxyXG4gICAgICAgICAgICBoZWFkZXI6IG9iai5oZWFkZXIgfHwge30sXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiBvYmouZGF0YVR5cGUgfHwgJ2pzb24nLFxyXG4gICAgICAgICAgICBzdWNjZXNzKHJlczogd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmFpbChyZXM6IHd4LkdlbmVyYWxDYWxsYmFja1Jlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyLnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29tcGxldGUoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZy5oaWRlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBkb1VwbG9hZEZpbGUob2JqOiBJVXBsb2FkRmlsZU9wdGlvbikge1xyXG4gICAgb2JqID0gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgd3gudXBsb2FkRmlsZSh7XHJcbiAgICAgICAgICAgIHVybDogb2JqLnVybCxcclxuICAgICAgICAgICAgZmlsZVBhdGg6IG9iai5maWxlUGF0aCB8fCAnJyxcclxuICAgICAgICAgICAgbmFtZTogb2JqLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIGZvcm1EYXRhOiBvYmouZm9ybURhdGEsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzOiB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmYWlsKHJlczogd3guR2VuZXJhbENhbGxiYWNrUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcXVlc3Qob2JqOiBJUmVxdWVzdE9wdGlvbik6IGFueSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIG9iaiA9IHByZURvKG9iaik7XHJcblxyXG4gICAgICAgIGlmIChjb25maWcubW9ja0pzb24pIHtcclxuICAgICAgICAgICAgbGV0IG1vY2tSZXNwb25zZSA9IG1vY2tNYW5hZ2VyLmdldChvYmopO1xyXG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIobW9ja1Jlc3BvbnNlLCBvYmosICdyZXF1ZXN0Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvYmouY2FjaGUpIHtcclxuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyLmdldChvYmopO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2Vzc2lvbk1hbmFnZXIubWFpbigpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9SZXF1ZXN0KG9iailcclxuICAgICAgICB9KS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyKHJlcyBhcyB3eC5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0LCBvYmosICdyZXF1ZXN0Jyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGxvYWRGaWxlKG9iajogSVVwbG9hZEZpbGVPcHRpb24pOiBhbnkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBvYmogPSBwcmVEbyhvYmopO1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnLm1vY2tKc29uKSB7XHJcbiAgICAgICAgICAgIGxldCBtb2NrUmVzcG9uc2UgPSBtb2NrTWFuYWdlci5nZXQob2JqKTtcclxuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyKG1vY2tSZXNwb25zZSwgb2JqLCAndXBsb2FkRmlsZScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXNzaW9uTWFuYWdlci5tYWluKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBkb1VwbG9hZEZpbGUob2JqKVxyXG4gICAgICAgIH0pLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIocmVzIGFzIHd4LlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQsIG9iaiwgJ3VwbG9hZEZpbGUnKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIGZvcm1hdCxcclxuICAgIHJlcXVlc3QsXHJcbiAgICB1cGxvYWRGaWxlXHJcbn1cclxuIl19 /***/ }), @@ -1118,4 +1121,4 @@ exports.default = { /***/ }) /******/ })["default"]; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2xvYWRp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OztBQ2pOOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHU1RDs7Ozs7Ozs7Ozs7O0FDL0I5QjtBQUNiLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLDJjOzs7Ozs7Ozs7Ozs7QUNOOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLCtpQzs7Ozs7Ozs7Ozs7O0FDakI5QjtBQUNiO0FBQ0E7QUFDQSxnREFBZ0QsT0FBTztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQSx5QkFBeUIsVUFBVTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1a0YiLCJmaWxlIjoid2VSZXF1ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXgudHNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xyXG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB1cmxQZXJmaXg6IGNvbmZpZ18xLmRlZmF1bHQudXJsUGVyZml4LFxyXG4gICAgICAgIHNlc3Npb25FeHBpcmVUaW1lOiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lLFxyXG4gICAgICAgIHNlc3Npb25FeHBpcmVLZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcclxuICAgICAgICBzZXNzaW9uRXhwaXJlOiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVcclxuICAgIH07XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laMlYwUTI5dVptbG5MbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyRndhUzluWlhSRGIyNW1hV2N1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3d3UTBGQmIwTTdRVUZEY0VNc01FTkJRVzlETzBGQlJYQkRMRzFDUVVGbE8wbEJRMWdzVDBGQlR6dFJRVU5JTEZOQlFWTXNSVUZCUlN4blFrRkJUU3hEUVVGRExGTkJRVk03VVVGRE0wSXNhVUpCUVdsQ0xFVkJRVVVzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUk3VVVGRE0wTXNaMEpCUVdkQ0xFVkJRVVVzWjBKQlFVMHNRMEZCUXl4blFrRkJaMEk3VVVGRGVrTXNZVUZCWVN4RlFVRkZMR2RDUVVGTkxFTkJRVU1zWVVGQllUdExRVU4wUXl4RFFVRkJPMEZCUTB3c1EwRkJReXhGUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YSEpjYm1sdGNHOXlkQ0J6ZEdGMGRYTWdabkp2YlNBbkxpNHZjM1J2Y21VdmMzUmhkSFZ6SjF4eVhHNWNjbHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLQ2tnUFQ0Z2UxeHlYRzRnSUNBZ2NtVjBkWEp1SUh0Y2NseHVJQ0FnSUNBZ0lDQjFjbXhRWlhKbWFYZzZJR052Ym1acFp5NTFjbXhRWlhKbWFYZ3NYSEpjYmlBZ0lDQWdJQ0FnYzJWemMybHZia1Y0Y0dseVpWUnBiV1U2SUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaU3hjY2x4dUlDQWdJQ0FnSUNCelpYTnphVzl1Ulhod2FYSmxTMlY1T2lCamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpVdGxlU3hjY2x4dUlDQWdJQ0FnSUNCelpYTnphVzl1Ulhod2FYSmxPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJrVjRjR2x5WlZ4eVhHNGdJQ0FnZlZ4eVhHNTlPMXh5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbjtcclxufSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBVMlZ6YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZaMlYwVTJWemMybHZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVVZ3UXl4dFFrRkJaVHRKUVVOWUxFOUJRVThzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVFN1FVRkRla0lzUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhISmNibHh5WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0FvS1NBOVBpQjdYSEpjYmlBZ0lDQnlaWFIxY200Z2MzUmhkSFZ6TG5ObGMzTnBiMjVjY2x4dWZWeHlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XHJcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKGNvbmZpZ18xLmRlZmF1bHQsIHBhcmFtcyk7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9IHd4LmdldFN0b3JhZ2VTeW5jKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUpIHx8ICcnO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCd3eC5nZXRTdG9yYWdlU3luYzpmYWlsLCBjYW4gbm90IGdldCBzZXNzaW9uLicpO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSB3eC5nZXRTdG9yYWdlU3luYyhjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkgfHwgXCJzZXNzaW9uRXhwaXJlS2V5XCIpIHx8IEluZmluaXR5O1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCd3eC5nZXRTdG9yYWdlU3luYzpmYWlsLCBjYW4gbm90IGdldCBzZXNzaW9uRXhwaXJlLicpO1xyXG4gICAgfVxyXG59KTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1cGRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZhVzVwZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVOd1F5d3dRMEZCYjBNN1FVRkhjRU1zYlVKQlFXVXNWVUZCUXl4TlFVRnRRanRKUVVNdlFpeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdTVUZET1VJc1NVRkJTVHRSUVVOQkxHZENRVUZOTEVOQlFVTXNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJReXhqUVVGakxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4WFFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03UzBGRGFrVTdTVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRSUVVOU0xFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNPRU5CUVRoRExFTkJRVU1zUTBGQlFUdExRVU5vUlR0SlFVTkVMRWxCUVVrN1VVRkRRU3huUWtGQlRTeERRVUZETEdGQlFXRXNSMEZCUnl4RlFVRkZMRU5CUVVNc1kwRkJZeXhEUVVGRExHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ0xFbEJRVWtzYTBKQlFXdENMRU5CUVVNc1NVRkJTU3hSUVVGUkxFTkJRVU03UzBGRGRrYzdTVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRSUVVOU0xFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNiMFJCUVc5RUxFTkJRVU1zUTBGQlFUdExRVU4wUlR0QlFVTk1MRU5CUVVNc1JVRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JqYjI1bWFXY2dabkp2YlNBbkxpNHZjM1J2Y21VdlkyOXVabWxuSjF4eVhHNXBiWEJ2Y25RZ2MzUmhkSFZ6SUdaeWIyMGdKeTR1TDNOMGIzSmxMM04wWVhSMWN5ZGNjbHh1YVcxd2IzSjBJSHNnU1VsdWFYUlBjSFJwYjI0Z2ZTQm1jbTl0SUNjdUxpOXBiblJsY21aaFkyVW5YSEpjYmx4eVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENBb2NHRnlZVzF6T2lCSlNXNXBkRTl3ZEdsdmJpa2dQVDRnZTF4eVhHNGdJQ0FnVDJKcVpXTjBMbUZ6YzJsbmJpaGpiMjVtYVdjc0lIQmhjbUZ0Y3lrN1hISmNiaUFnSUNCMGNua2dlMXh5WEc0Z0lDQWdJQ0FnSUhOMFlYUjFjeTV6WlhOemFXOXVJRDBnZDNndVoyVjBVM1J2Y21GblpWTjVibU1vWTI5dVptbG5Mbk5sYzNOcGIyNU9ZVzFsSVNrZ2ZId2dKeWM3WEhKY2JpQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hISmNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2lnbmQzZ3VaMlYwVTNSdmNtRm5aVk41Ym1NNlptRnBiQ3dnWTJGdUlHNXZkQ0JuWlhRZ2MyVnpjMmx2Ymk0bktWeHlYRzRnSUNBZ2ZWeHlYRzRnSUNBZ2RISjVJSHRjY2x4dUlDQWdJQ0FnSUNCemRHRjBkWE11YzJWemMybHZia1Y0Y0dseVpTQTlJSGQ0TG1kbGRGTjBiM0poWjJWVGVXNWpLR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsUzJWNUlIeDhJRndpYzJWemMybHZia1Y0Y0dseVpVdGxlVndpS1NCOGZDQkpibVpwYm1sMGVUdGNjbHh1SUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjY2x4dUlDQWdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLQ2QzZUM1blpYUlRkRzl5WVdkbFUzbHVZenBtWVdsc0xDQmpZVzRnYm05MElHZGxkQ0J6WlhOemFXOXVSWGh3YVhKbExpY3BYSEpjYmlBZ0lDQjlYSEpjYm4xY2NseHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3Nlc3Npb25NYW5hZ2VyXCIpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5tYWluKCk7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzluYVc0dWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12WVhCcEwyeHZaMmx1TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzTWtSQlFYRkVPMEZCUlhKRUxHMUNRVUZsTzBsQlExZ3NUMEZCVHl4M1FrRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZCTzBGQlEyaERMRU5CUVVNc1JVRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0J6WlhOemFXOXVUV0Z1WVdkbGNpQm1jbTl0SUNjdUxpOXRiMlIxYkdVdmMyVnpjMmx2YmsxaGJtRm5aWEluWEhKY2JseHlYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQW9LU0E5UGlCN1hISmNiaUFnSUNCeVpYUjFjbTRnYzJWemMybHZiazFoYm1GblpYSXViV0ZwYmlncFhISmNibjFjY2x4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvcmVxdWVzdEhhbmRsZXJcIik7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAob2JqKSB7XHJcbiAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnJlcXVlc3Qob2JqKTtcclxufSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnhkV1Z6ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmNtVnhkV1Z6ZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVkeVJDeHRRa0ZCWlN4VlFVRkRMRWRCUVcxQ08wbEJReTlDTEU5QlFVOHNkMEpCUVdNc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdRVUZEZEVNc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElISmxjWFZsYzNSSVlXNWtiR1Z5SUdaeWIyMGdKeTR1TDIxdlpIVnNaUzl5WlhGMVpYTjBTR0Z1Wkd4bGNpZGNjbHh1YVcxd2IzSjBJSHNnU1ZKbGNYVmxjM1JQY0hScGIyNGdmU0JtY205dElDY3VMaTlwYm5SbGNtWmhZMlVuWEhKY2JseHlYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQW9iMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaWtnUFQ0Z2UxeHlYRzRnSUNBZ2NtVjBkWEp1SUhKbGNYVmxjM1JJWVc1a2JHVnlMbkpsY1hWbGMzUW9iMkpxS1Z4eVhHNTlYSEpjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvc2Vzc2lvbk1hbmFnZXJcIik7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoc2Vzc2lvbikge1xyXG4gICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0LnNldFNlc3Npb24oc2Vzc2lvbik7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMlYwVTJWemMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2YzJWMFUyVnpjMmx2Ymk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVWeVJDeHRRa0ZCWlN4VlFVRkRMRTlCUVdVN1NVRkRNMElzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGRGRrTXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSE5sYzNOcGIyNU5ZVzVoWjJWeUlHWnliMjBnSnk0dUwyMXZaSFZzWlM5elpYTnphVzl1VFdGdVlXZGxjaWRjY2x4dVhISmNibVY0Y0c5eWRDQmtaV1poZFd4MElDaHpaWE56YVc5dU9pQnpkSEpwYm1jcElEMCtJSHRjY2x4dUlDQWdJSE5sYzNOcGIyNU5ZVzVoWjJWeUxuTmxkRk5sYzNOcGIyNG9jMlZ6YzJsdmJpazdYSEpjYm4xY2NseHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3JlcXVlc3RIYW5kbGVyXCIpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKG9iaikge1xyXG4gICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC51cGxvYWRGaWxlKG9iaik7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWEJzYjJGa1JtbHNaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2ZFhCc2IyRmtSbWxzWlM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVkeVJDeHRRa0ZCWlN4VlFVRkRMRWRCUVhOQ08wbEJRMnhETEU5QlFVOHNkMEpCUVdNc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdRVUZEZWtNc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElISmxjWFZsYzNSSVlXNWtiR1Z5SUdaeWIyMGdKeTR1TDIxdlpIVnNaUzl5WlhGMVpYTjBTR0Z1Wkd4bGNpZGNjbHh1YVcxd2IzSjBJSHNnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRnZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSTdYSEpjYmx4eVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENBb2IySnFPaUJKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnUFQ0Z2UxeHlYRzRnSUNBZ2NtVjBkWEp1SUhKbGNYVmxjM1JJWVc1a2JHVnlMblZ3Ykc5aFpFWnBiR1VvYjJKcUtWeHlYRzU5WEhKY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGluaXRfMSA9IHJlcXVpcmUoXCIuL2FwaS9pbml0XCIpO1xyXG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4vYXBpL3JlcXVlc3RcIik7XHJcbnZhciB1cGxvYWRGaWxlXzEgPSByZXF1aXJlKFwiLi9hcGkvdXBsb2FkRmlsZVwiKTtcclxudmFyIHNldFNlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2FwaS9zZXRTZXNzaW9uXCIpO1xyXG52YXIgbG9naW5fMSA9IHJlcXVpcmUoXCIuL2FwaS9sb2dpblwiKTtcclxudmFyIGdldFNlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2FwaS9nZXRTZXNzaW9uXCIpO1xyXG52YXIgZ2V0Q29uZmlnXzEgPSByZXF1aXJlKFwiLi9hcGkvZ2V0Q29uZmlnXCIpO1xyXG52YXIgd2VSZXF1ZXN0T2JqZWN0ID0ge1xyXG4gICAgaW5pdDogaW5pdF8xLmRlZmF1bHQsXHJcbiAgICByZXF1ZXN0OiByZXF1ZXN0XzEuZGVmYXVsdCxcclxuICAgIHVwbG9hZEZpbGU6IHVwbG9hZEZpbGVfMS5kZWZhdWx0LFxyXG4gICAgc2V0U2Vzc2lvbjogc2V0U2Vzc2lvbl8xLmRlZmF1bHQsXHJcbiAgICBsb2dpbjogbG9naW5fMS5kZWZhdWx0LFxyXG4gICAgZ2V0U2Vzc2lvbjogZ2V0U2Vzc2lvbl8xLmRlZmF1bHQsXHJcbiAgICBnZXRDb25maWc6IGdldENvbmZpZ18xLmRlZmF1bHRcclxufTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gd2VSZXF1ZXN0T2JqZWN0O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4dFEwRkJOa0k3UVVGRE4wSXNlVU5CUVcxRE8wRkJRMjVETEN0RFFVRjVRenRCUVVONlF5d3JRMEZCZVVNN1FVRkRla01zY1VOQlFTdENPMEZCUXk5Q0xDdERRVUY1UXp0QlFVTjZReXcyUTBGQmRVTTdRVUZIZGtNc1NVRkJUU3hsUVVGbExFZEJRV003U1VGRGFrTXNTVUZCU1N4blFrRkJRVHRKUVVOS0xFOUJRVThzYlVKQlFVRTdTVUZEVUN4VlFVRlZMSE5DUVVGQk8wbEJRMVlzVlVGQlZTeHpRa0ZCUVR0SlFVTldMRXRCUVVzc2FVSkJRVUU3U1VGRFRDeFZRVUZWTEhOQ1FVRkJPMGxCUTFZc1UwRkJVeXh4UWtGQlFUdERRVU5XTEVOQlFVTTdRVUZGUml4clFrRkJaU3hsUVVGbExFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnYVc1cGRDQm1jbTl0SUZ3aUxpOWhjR2t2YVc1cGRGd2lYSEpjYm1sdGNHOXlkQ0J5WlhGMVpYTjBJR1p5YjIwZ1hDSXVMMkZ3YVM5eVpYRjFaWE4wWENKY2NseHVhVzF3YjNKMElIVndiRzloWkVacGJHVWdabkp2YlNCY0lpNHZZWEJwTDNWd2JHOWhaRVpwYkdWY0lseHlYRzVwYlhCdmNuUWdjMlYwVTJWemMybHZiaUJtY205dElGd2lMaTloY0drdmMyVjBVMlZ6YzJsdmJsd2lYSEpjYm1sdGNHOXlkQ0JzYjJkcGJpQm1jbTl0SUZ3aUxpOWhjR2t2Ykc5bmFXNWNJbHh5WEc1cGJYQnZjblFnWjJWMFUyVnpjMmx2YmlCbWNtOXRJRndpTGk5aGNHa3ZaMlYwVTJWemMybHZibHdpWEhKY2JtbHRjRzl5ZENCblpYUkRiMjVtYVdjZ1puSnZiU0JjSWk0dllYQnBMMmRsZEVOdmJtWnBaMXdpWEhKY2JtbHRjRzl5ZENCN0lIZGxVbVZ4ZFdWemRDQjlJR1p5YjIwZ1hDSXVMMmx1ZEdWeVptRmpaVndpWEhKY2JseHlYRzVqYjI1emRDQjNaVkpsY1hWbGMzUlBZbXBsWTNRNklIZGxVbVZ4ZFdWemRDQTlJSHRjY2x4dUlDQnBibWwwTEZ4eVhHNGdJSEpsY1hWbGMzUXNYSEpjYmlBZ2RYQnNiMkZrUm1sc1pTeGNjbHh1SUNCelpYUlRaWE56YVc5dUxGeHlYRzRnSUd4dloybHVMRnh5WEc0Z0lHZGxkRk5sYzNOcGIyNHNYSEpjYmlBZ1oyVjBRMjl1Wm1sblhISmNibjA3WEhKY2JseHlYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjNaVkpsY1hWbGMzUlBZbXBsWTNRN1hISmNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbmZ1bmN0aW9uIGdldChvYmopIHtcclxuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHd4LmdldFN0b3JhZ2Uoe1xyXG4gICAgICAgIGtleTogb2JqLm9yaWdpblVybCxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIGlmIChvYmouY2FjaGUgPT09IHRydWUgfHxcclxuICAgICAgICAgICAgICAgICh0eXBlb2Ygb2JqLmNhY2hlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNhY2hlKHJlcy5kYXRhKSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlcy5kYXRhLCB7IGlzQ2FjaGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBzZXQob2JqLCByZWFsRGF0YSkge1xyXG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKG9iai5jYWNoZSA9PT0gdHJ1ZSB8fFxyXG4gICAgICAgICh0eXBlb2Ygb2JqLmNhY2hlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNhY2hlKHJlYWxEYXRhKSkpIHtcclxuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcclxuICAgICAgICAgICAga2V5OiBvYmoub3JpZ2luVXJsLFxyXG4gICAgICAgICAgICBkYXRhOiByZWFsRGF0YVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IHtcclxuICAgIGdldDogZ2V0LFxyXG4gICAgc2V0OiBzZXRcclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJGamFHVk5ZVzVoWjJWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlqWVdOb1pVMWhibUZuWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZGUVN4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGdFFqdEpRVU0xUWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUlVGQlJUdFJRVU5vUWl4UFFVRlBPMHRCUTFZN1NVRkRSQ3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFGQlExWXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhUUVVGVE8xRkJRMnhDTEU5QlFVOHNXVUZCUlN4SFFVRkhPMWxCUTFJc1NVRkRTU3hIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEVsQlFVazdaMEpCUTJ4Q0xFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRlZCUVZVc1NVRkJTU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVNeFJEdG5Ra0ZEUlN4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFOUJRVThzUzBGQlN5eFZRVUZWTEVWQlFVVTdiMEpCUTI1RExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVWQlFVTXNRMEZCUXl4RFFVRkJPMmxDUVVONlF6dGhRVU5LTzFsQlEwUXNTVUZCUnl4UFFVRlBMRWRCUVVjc1EwRkJReXhSUVVGUkxFdEJRVXNzVlVGQlZTeEZRVUZGTzJkQ1FVTnVReXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdZVUZEYkVJN1VVRkRUQ3hEUVVGRE8wdEJRMG9zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRk5CUVZNc1IwRkJSeXhEUVVGRExFZEJRVzFDTEVWQlFVY3NVVUZCZVVJN1NVRkRlRVFzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRVZCUVVVN1VVRkRhRUlzVDBGQlR6dExRVU5XTzBsQlEwUXNTVUZEU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExFbEJRVWs3VVVGRGJFSXNRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhMUVVGTExFdEJRVXNzVlVGQlZTeEpRVUZKTEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGRE1VUTdVVUZEUlN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xbEJRMVlzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4VFFVRlRPMWxCUTJ4Q0xFbEJRVWtzUlVGQlJTeFJRVUZSTzFOQlEycENMRU5CUVVNc1EwRkJRVHRMUVVOTU8wRkJRMHdzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1IwRkJSeXhMUVVGQk8wbEJRMGdzUjBGQlJ5eExRVUZCTzBOQlEwNHNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lYSEpjYmx4eVhHNW1kVzVqZEdsdmJpQm5aWFFvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlrZ2UxeHlYRzRnSUNBZ2FXWWdLQ0Z2WW1vdWIzSnBaMmx1VlhKc0tTQjdYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh5WEc0Z0lDQWdmVnh5WEc0Z0lDQWdkM2d1WjJWMFUzUnZjbUZuWlNoN1hISmNiaUFnSUNBZ0lDQWdhMlY1T2lCdlltb3ViM0pwWjJsdVZYSnNMRnh5WEc0Z0lDQWdJQ0FnSUhOMVkyTmxjM01nS0hKbGN5a2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlltb3VZMkZqYUdVZ1BUMDlJSFJ5ZFdVZ2ZIeGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2gwZVhCbGIyWWdiMkpxTG1OaFkyaGxJRDA5UFNCY0ltWjFibU4wYVc5dVhDSWdKaVlnYjJKcUxtTmhZMmhsS0hKbGN5NWtZWFJoS1NsY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1emRXTmpaWE56SUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2WW1vdWMzVmpZMlZ6Y3loeVpYTXVaR0YwWVN3Z2UybHpRMkZqYUdVNklIUnlkV1Y5S1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUtIUjVjR1Z2WmlCdlltb3VZMjl0Y0d4bGRHVWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTnZiWEJzWlhSbEtDazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0I5S1Z4eVhHNTlYSEpjYmx4eVhHNW1kVzVqZEdsdmJpQnpaWFFvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlBc0lISmxZV3hFWVhSaE9pQnpkSEpwYm1jZ2ZDQnZZbXBsWTNRcElIdGNjbHh1SUNBZ0lHbG1JQ2doYjJKcUxtOXlhV2RwYmxWeWJDa2dlMXh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnlianRjY2x4dUlDQWdJSDFjY2x4dUlDQWdJR2xtSUNoY2NseHVJQ0FnSUNBZ0lDQnZZbW91WTJGamFHVWdQVDA5SUhSeWRXVWdmSHhjY2x4dUlDQWdJQ0FnSUNBb2RIbHdaVzltSUc5aWFpNWpZV05vWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpSUNZbUlHOWlhaTVqWVdOb1pTaHlaV0ZzUkdGMFlTa3BYSEpjYmlBZ0lDQXBJSHRjY2x4dUlDQWdJQ0FnSUNCM2VDNXpaWFJUZEc5eVlXZGxLSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdhMlY1T2lCdlltb3ViM0pwWjJsdVZYSnNMRnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQmtZWFJoT2lCeVpXRnNSR0YwWVZ4eVhHNGdJQ0FnSUNBZ0lIMHBYSEpjYmlBZ0lDQjlYSEpjYm4xY2NseHVYSEpjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjY2x4dUlDQWdJR2RsZEN4Y2NseHVJQ0FnSUhObGRGeHlYRzU5TzF4eVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcclxudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuLi9hcGkvcmVxdWVzdFwiKTtcclxuZnVuY3Rpb24gc3RhcnQob2JqKSB7XHJcbiAgICBvYmouX3JlcG9ydFN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG59XHJcbmZ1bmN0aW9uIGVuZChvYmopIHtcclxuICAgIG9iai5fcmVwb3J0RW5kVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgaWYgKG9iai5yZXBvcnQgJiYgb2JqLl9yZXBvcnRTdGFydFRpbWUpIHtcclxuICAgICAgICByZXBvcnQob2JqLnJlcG9ydCwgb2JqLl9yZXBvcnRTdGFydFRpbWUsIG9iai5fcmVwb3J0RW5kVGltZSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcmVwb3J0KG5hbWUsIHN0YXJ0VGltZSwgZW5kVGltZSkge1xyXG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnJlcG9ydENHSSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5yZXBvcnRDR0kobmFtZSwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXF1ZXN0XzEuZGVmYXVsdCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0ge1xyXG4gICAgc3RhcnQ6IHN0YXJ0LFxyXG4gICAgZW5kOiBlbmQsXHJcbiAgICByZXBvcnQ6IHJlcG9ydFxyXG59O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5dGIyUjFiR1V2WkhWeVlYUnBiMjVTWlhCdmNuUmxjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVU53UXl3d1EwRkJiME03UVVGSGNFTXNVMEZCVXl4TFFVRkxMRU5CUVVNc1IwRkJkVU03U1VGRGJFUXNSMEZCUnl4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03UVVGRGFFUXNRMEZCUXp0QlFVVkVMRk5CUVZNc1IwRkJSeXhEUVVGRExFZEJRWFZETzBsQlEyaEVMRWRCUVVjc1EwRkJReXhqUVVGakxFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRKUVVNeFF5eEpRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhEUVVGRExHZENRVUZuUWl4RlFVRkZPMUZCUTI1RExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCWjBJc1JVRkJSU3hIUVVGSExFTkJRVU1zWjBKQlFXZENMRVZCUVVVc1IwRkJSeXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETzB0QlF6RkZPMEZCUTB3c1EwRkJRenRCUVVWRUxGTkJRVk1zVFVGQlRTeERRVUZETEVsQlFWa3NSVUZCUlN4VFFVRnBRaXhGUVVGRkxFOUJRV1U3U1VGRE5VUXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTjRReXhuUWtGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1UwRkJVeXhGUVVGRkxFOUJRVThzUlVGQlJTeHBRa0ZCVHl4RFFVRkRMRU5CUVVNN1MwRkRka1E3UVVGRFRDeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hMUVVGTExFOUJRVUU3U1VGRFRDeEhRVUZITEV0QlFVRTdTVUZEU0N4TlFVRk5MRkZCUVVFN1EwRkRWQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YSEpjYm1sdGNHOXlkQ0J5WlhGMVpYTjBJR1p5YjIwZ0p5NHVMMkZ3YVM5eVpYRjFaWE4wSjF4eVhHNXBiWEJ2Y25RZ2V5QkpVbVZ4ZFdWemRFOXdkR2x2Yml3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0Z2ZTQm1jbTl0SUZ3aUxpNHZhVzUwWlhKbVlXTmxYQ0k3WEhKY2JseHlYRzVtZFc1amRHbHZiaUJ6ZEdGeWRDaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRwSUh0Y2NseHVJQ0FnSUc5aWFpNWZjbVZ3YjNKMFUzUmhjblJVYVcxbElEMGdibVYzSUVSaGRHVW9LUzVuWlhSVWFXMWxLQ2s3WEhKY2JuMWNjbHh1WEhKY2JtWjFibU4wYVc5dUlHVnVaQ2h2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1SUh3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0cElIdGNjbHh1SUNBZ0lHOWlhaTVmY21Wd2IzSjBSVzVrVkdsdFpTQTlJRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwTzF4eVhHNGdJQ0FnYVdZb2IySnFMbkpsY0c5eWRDQW1KaUJ2WW1vdVgzSmxjRzl5ZEZOMFlYSjBWR2x0WlNrZ2UxeHlYRzRnSUNBZ0lDQWdJSEpsY0c5eWRDaHZZbW91Y21Wd2IzSjBJR0Z6SUhOMGNtbHVaeXdnYjJKcUxsOXlaWEJ2Y25SVGRHRnlkRlJwYldVc0lHOWlhaTVmY21Wd2IzSjBSVzVrVkdsdFpTazdYSEpjYmlBZ0lDQjlYSEpjYm4xY2NseHVYSEpjYm1aMWJtTjBhVzl1SUhKbGNHOXlkQ2h1WVcxbE9pQnpkSEpwYm1jc0lITjBZWEowVkdsdFpUb2diblZ0WW1WeUxDQmxibVJVYVcxbE9pQnVkVzFpWlhJcElIdGNjbHh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxuSmxjRzl5ZEVOSFNTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYSEpjYmlBZ0lDQWdJQ0FnWTI5dVptbG5MbkpsY0c5eWRFTkhTU2h1WVcxbExDQnpkR0Z5ZEZScGJXVXNJR1Z1WkZScGJXVXNJSEpsY1hWbGMzUXBPMXh5WEc0Z0lDQWdmVnh5WEc1OVhISmNibHh5WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEhKY2JpQWdJQ0J6ZEdGeWRDeGNjbHh1SUNBZ0lHVnVaQ3hjY2x4dUlDQWdJSEpsY0c5eWRGeHlYRzU5WEhKY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcclxuZnVuY3Rpb24gc3lzdGVtRXJyb3Iob2JqLCByZXMpIHtcclxuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIG9iai5mYWlsKHJlcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBkb0Vycm9yKFwiXCIsIHJlcy5lcnJNc2cpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGxvZ2ljRXJyb3Iob2JqLCByZXMpIHtcclxuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIG9iai5mYWlsKHJlcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgX2EgPSBnZXRFcnJvck1zZyhyZXMpLCB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcclxuICAgICAgICBkb0Vycm9yKHRpdGxlLCBjb250ZW50KTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBjb25maWdfMS5kZWZhdWx0LmVycm9yQ2FsbGJhY2sob2JqLCByZXMpO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5lcnJvcihyZXMpO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVycm9yTXNnKHJlcykge1xyXG4gICAgdmFyIHRpdGxlID0gXCJcIjtcclxuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aXRsZSA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZShyZXMuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHRpdGxlID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlO1xyXG4gICAgfVxyXG4gICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xyXG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudCA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29udGVudCA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50KHJlcy5kYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBjb250ZW50ID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyB0aXRsZTogdGl0bGUsIGNvbnRlbnQ6IGNvbnRlbnQgfTtcclxufVxyXG5mdW5jdGlvbiBkb0Vycm9yKHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICB3eC5zaG93TW9kYWwoe1xyXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICBjb250ZW50OiBjb250ZW50IHx8IFwi572R57uc5oiW5pyN5Yqh5byC5bi477yM6K+356iN5ZCO6YeN6K+VXCIsXHJcbiAgICAgICAgc2hvd0NhbmNlbDogZmFsc2VcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IHtcclxuICAgIHN5c3RlbUVycm9yOiBzeXN0ZW1FcnJvcixcclxuICAgIGxvZ2ljRXJyb3I6IGxvZ2ljRXJyb3IsXHJcbiAgICBkb0Vycm9yOiBkb0Vycm9yLFxyXG4gICAgZ2V0RXJyb3JNc2c6IGdldEVycm9yTXNnXHJcbn07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpYSnliM0pJWVc1a2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5bGNuSnZja2hoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkhjRU1zVTBGQlV5eFhRVUZYTEVOQlFVTXNSMEZCZFVNc1JVRkJSU3hIUVVFMlFqdEpRVU4yUml4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFbEJRVWtzUzBGQlN5eFZRVUZWTEVWQlFVVTdVVUZEYUVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTnFRanRUUVVGTk8xRkJRMGdzVDBGQlR5eERRVUZETEVWQlFVVXNSVUZCUlN4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UzBGRE0wSTdRVUZEVEN4RFFVRkRPMEZCUlVRc1UwRkJVeXhWUVVGVkxFTkJRVU1zUjBGQmRVTXNSVUZCUlN4SFFVRjVSVHRKUVVOc1NTeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRWxCUVVrc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGFFTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5xUWp0VFFVRk5PMUZCUTBjc1NVRkJRU3h4UWtGQmJVTXNSVUZCYkVNc1owSkJRVXNzUlVGQlJTeHZRa0ZCTWtJc1EwRkJRenRSUVVNeFF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8wdEJRek5DTzBsQlIwUXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zWVVGQllTeExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTTFReXhuUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03UzBGRGJFTTdTVUZGUkN4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEzWkNMRU5CUVVNN1FVRkZSQ3hUUVVGVExGZEJRVmNzUTBGQlF5eEhRVUY1UlR0SlFVTXhSaXhKUVVGSkxFdEJRVXNzUjBGQlJ5eEZRVUZGTEVOQlFVTTdTVUZEWml4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFZRVUZWTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTNwRExFbEJRVWs3V1VGRFFTeExRVUZMTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkJPMU5CUTNSRE8xRkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdVMEZEV0R0TFFVTktPMU5CUVUwc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNWVUZCVlN4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVNNVF5eExRVUZMTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU03UzBGRE4wSTdTVUZGUkN4SlFVRkpMRTlCUVU4c1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGFrSXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zV1VGQldTeExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTXpReXhKUVVGSk8xbEJRMEVzVDBGQlR5eEhRVUZITEdkQ1FVRk5MRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUVR0VFFVTXhRenRSUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTzFOQlExZzdTMEZEU2p0VFFVRk5MRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZsQlFWa3NTMEZCU3l4UlFVRlJMRVZCUVVVN1VVRkRhRVFzVDBGQlR5eEhRVUZITEdkQ1FVRk5MRU5CUVVNc1dVRkJXU3hEUVVGRE8wdEJRMnBETzBsQlJVUXNUMEZCVHl4RlFVRkRMRXRCUVVzc1QwRkJRU3hGUVVGRkxFOUJRVThzVTBGQlFTeEZRVUZETEVOQlFVRTdRVUZETTBJc1EwRkJRenRCUVVWRUxGTkJRVk1zVDBGQlR5eERRVUZETEV0QlFXRXNSVUZCUlN4UFFVRmxPMGxCUXpORExFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTTdVVUZEVkN4TFFVRkxMRTlCUVVFN1VVRkRUQ3hQUVVGUExFVkJRVVVzVDBGQlR5eEpRVUZKTEdWQlFXVTdVVUZEYmtNc1ZVRkJWU3hGUVVGRkxFdEJRVXM3UzBGRGNFSXNRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVWRUxHdENRVUZsTzBsQlExZ3NWMEZCVnl4aFFVRkJPMGxCUTFnc1ZVRkJWU3haUVVGQk8wbEJRMVlzVDBGQlR5eFRRVUZCTzBsQlExQXNWMEZCVnl4aFFVRkJPME5CUTJRc1EwRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JqYjI1bWFXY2dabkp2YlNBbkxpNHZjM1J2Y21VdlkyOXVabWxuSjF4eVhHNXBiWEJ2Y25RZ2V5QkpVbVZ4ZFdWemRFOXdkR2x2Yml3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0Z2ZTQm1jbTl0SUZ3aUxpNHZhVzUwWlhKbVlXTmxYQ0k3WEhKY2JseHlYRzVtZFc1amRHbHZiaUJ6ZVhOMFpXMUZjbkp2Y2lodlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUlId2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHNJSEpsY3pvZ2QzZ3VSMlZ1WlhKaGJFTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hISmNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTVtWVdsc0lEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNjbHh1SUNBZ0lDQWdJQ0J2WW1vdVptRnBiQ2h5WlhNcE8xeHlYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2NseHVJQ0FnSUNBZ0lDQmtiMFZ5Y205eUtGd2lYQ0lzSUhKbGN5NWxjbkpOYzJjcE8xeHlYRzRnSUNBZ2ZWeHlYRzU5WEhKY2JseHlYRzVtZFc1amRHbHZiaUJzYjJkcFkwVnljbTl5S0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0Z2ZDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpd2djbVZ6T2lCM2VDNVNaWEYxWlhOMFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBJSHdnZDNndVZYQnNiMkZrUm1sc1pWTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ2tnZTF4eVhHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VabUZwYkNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hISmNiaUFnSUNBZ0lDQWdiMkpxTG1aaGFXd29jbVZ6S1R0Y2NseHVJQ0FnSUgwZ1pXeHpaU0I3WEhKY2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZTNScGRHeGxMQ0JqYjI1MFpXNTBmU0E5SUdkbGRFVnljbTl5VFhObktISmxjeWs3WEhKY2JpQWdJQ0FnSUNBZ1pHOUZjbkp2Y2loMGFYUnNaU3dnWTI5dWRHVnVkQ2s3WEhKY2JpQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0x5OGc1YWFDNXA2YzVweUo2WVdONTcydTU3dWY1TGlBNlpTWjZLK3Y1WnVlNkxDRDVZZTk1cFd3Nzd5TTVZaVo1b21uNktHTTVhNkRYSEpjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWxjbkp2Y2tOaGJHeGlZV05ySUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2NseHVJQ0FnSUNBZ0lDQmpiMjVtYVdjdVpYSnliM0pEWVd4c1ltRmpheWh2WW1vc0lISmxjeWs3WEhKY2JpQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWh5WlhNcE8xeHlYRzU5WEhKY2JseHlYRzVtZFc1amRHbHZiaUJuWlhSRmNuSnZjazF6WnloeVpYTTZJSGQ0TGxKbGNYVmxjM1JUZFdOalpYTnpRMkZzYkdKaFkydFNaWE4xYkhRZ2ZDQjNlQzVWY0d4dllXUkdhV3hsVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYSEpjYmlBZ0lDQnNaWFFnZEdsMGJHVWdQU0JjSWx3aU8xeHlYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdVpYSnliM0pVYVhSc1pTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYSEpjYmlBZ0lDQWdJQ0FnZEhKNUlIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2RHbDBiR1VnUFNCamIyNW1hV2N1WlhKeWIzSlVhWFJzWlNoeVpYTXVaR0YwWVNsY2NseHVJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1WeWNtOXlWR2wwYkdVZ1BUMDlJRndpYzNSeWFXNW5YQ0lwSUh0Y2NseHVJQ0FnSUNBZ0lDQjBhWFJzWlNBOUlHTnZibVpwWnk1bGNuSnZjbFJwZEd4bE8xeHlYRzRnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJR3hsZENCamIyNTBaVzUwSUQwZ1hDSmNJanRjY2x4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVEyOXVkR1Z1ZENBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hISmNiaUFnSUNBZ0lDQWdkSEo1SUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWRHVnVkQ0E5SUdOdmJtWnBaeTVsY25KdmNrTnZiblJsYm5Rb2NtVnpMbVJoZEdFcFhISmNiaUFnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1bGNuSnZja052Ym5SbGJuUWdQVDA5SUZ3aWMzUnlhVzVuWENJcElIdGNjbHh1SUNBZ0lDQWdJQ0JqYjI1MFpXNTBJRDBnWTI5dVptbG5MbVZ5Y205eVEyOXVkR1Z1ZER0Y2NseHVJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQnlaWFIxY200Z2UzUnBkR3hsTENCamIyNTBaVzUwZlZ4eVhHNTlYSEpjYmx4eVhHNW1kVzVqZEdsdmJpQmtiMFZ5Y205eUtIUnBkR3hsT2lCemRISnBibWNzSUdOdmJuUmxiblE2SUhOMGNtbHVaeWtnZTF4eVhHNGdJQ0FnZDNndWMyaHZkMDF2WkdGc0tIdGNjbHh1SUNBZ0lDQWdJQ0IwYVhSc1pTeGNjbHh1SUNBZ0lDQWdJQ0JqYjI1MFpXNTBPaUJqYjI1MFpXNTBJSHg4SUZ3aTU3MlI1N3VjNW9pVzVweU41WXFoNWJ5QzViaTQ3N3lNNksrMzU2aU41WkNPNlllTjZLK1ZYQ0lzWEhKY2JpQWdJQ0FnSUNBZ2MyaHZkME5oYm1ObGJEb2dabUZzYzJWY2NseHVJQ0FnSUgwcFhISmNibjFjY2x4dVhISmNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNjbHh1SUNBZ0lITjVjM1JsYlVWeWNtOXlMRnh5WEc0Z0lDQWdiRzluYVdORmNuSnZjaXhjY2x4dUlDQWdJR1J2UlhKeWIzSXNYSEpjYmlBZ0lDQm5aWFJGY25KdmNrMXpaMXh5WEc1OVhISmNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XHJcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xyXG52YXIgcmVzcG9uc2VIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXNwb25zZUhhbmRsZXJcIik7XHJcbmZ1bmN0aW9uIGdldChvYmosIG1ldGhvZCkge1xyXG4gICAgaWYgKCEoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoudXJsXSB8fCAob2JqLm9yaWdpblVybCAmJiBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai5vcmlnaW5VcmxdKSkpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdtb2NrIOayoeacieWvueW6lOaOpeWPo+eahOaVsOaNricpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHZhciBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoudXJsXSB8fCAob2JqLm9yaWdpblVybCA/IGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLm9yaWdpblVybF0gOiAnJyk7XHJcbiAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB2YXIgcmVzID0ge1xyXG4gICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwXHJcbiAgICB9O1xyXG4gICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQocmVzLCBvYmosIG1ldGhvZCk7XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0ge1xyXG4gICAgZ2V0OiBnZXRcclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYlc5amEwMWhibUZuWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMMjF2WTJ0TllXNWhaMlZ5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzTUVOQlFXOURPMEZCUTNCRExESkRRVUZ4UXp0QlFVTnlReXh4UkVGQkswTTdRVUZITDBNc1UwRkJVeXhIUVVGSExFTkJRVU1zUjBGQmRVTXNSVUZCUlN4TlFVRm5RenRKUVVWc1JpeEpRVUZITEVOQlFVTXNRMEZCUXl4blFrRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVN1VVRkZha1lzVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETzFGQlEyaERMRTlCUVU4c1MwRkJTeXhEUVVGRE8wdEJRMmhDTzBsQlJVUXNTVUZCU1N4SlFVRkpMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0SlFVVTNSaXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZUVNc1NVRkJUU3hIUVVGSExFZEJRVWM3VVVGRFVpeEpRVUZKTEUxQlFVRTdVVUZEU2l4VlFVRlZMRVZCUVVVc1IwRkJSenRMUVVOc1FpeERRVUZETzBsQlJVWXNhVUpCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dEpRVU5tTEU5QlFVOHNlVUpCUVdVc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkJPMEZCUXpWRExFTkJRVU03UVVGRlJDeHJRa0ZCWlR0SlFVTllMRWRCUVVjc1MwRkJRVHREUVVOT0xFTkJRVUVpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnWTI5dVptbG5JR1p5YjIwZ0p5NHVMM04wYjNKbEwyTnZibVpwWnlkY2NseHVhVzF3YjNKMElHeHZZV1JwYm1jZ1puSnZiU0FuTGk0dmRYUnBiQzlzYjJGa2FXNW5KMXh5WEc1cGJYQnZjblFnY21WemNHOXVjMlZJWVc1a2JHVnlJR1p5YjIwZ0p5NHZjbVZ6Y0c5dWMyVklZVzVrYkdWeUoxeHlYRzVwYlhCdmNuUWdleUJKVW1WeGRXVnpkRTl3ZEdsdmJpd2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNGdmU0JtY205dElGd2lMaTR2YVc1MFpYSm1ZV05sWENKY2NseHVYSEpjYm1aMWJtTjBhVzl1SUdkbGRDaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRzSUcxbGRHaHZaRG9nWENKeVpYRjFaWE4wWENJZ2ZDQmNJblZ3Ykc5aFpFWnBiR1ZjSWlrNklHRnVlU0I3WEhKY2JseHlYRzRnSUNBZ2FXWW9JU2hqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG5WeWJGMGdmSHdnS0c5aWFpNXZjbWxuYVc1VmNtd2dKaVlnWTI5dVptbG5MbTF2WTJ0S2MyOXVXMjlpYWk1dmNtbG5hVzVWY214ZEtTa3BJSHRjY2x4dUlDQWdJQ0FnSUNBdkx5QnRiMk5ySU9heW9lYWNpZVd2dWVXNmxPYU9wZVdQbytlYWhPYVZzT2FOcmx4eVhHNGdJQ0FnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvSjIxdlkyc2c1cktoNXB5SjVhKzU1YnFVNW82bDVZK2o1NXFFNXBXdzVvMnVKeWs3WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUd4bGRDQmtZWFJoSUQwZ1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNTFjbXhkSUh4OElDaHZZbW91YjNKcFoybHVWWEpzSUQ4Z1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNXZjbWxuYVc1VmNteGRJRG9nSnljcE8xeHlYRzRnSUNBZ0x5OGdaR1ZsY0NCamIzQjVYSEpjYmlBZ0lDQmtZWFJoSUQwZ1NsTlBUaTV3WVhKelpTaEtVMDlPTG5OMGNtbHVaMmxtZVNoa1lYUmhLU2s3WEhKY2JpQWdJQ0JqYjI1emRDQnlaWE1nUFNCN1hISmNiaUFnSUNBZ0lDQWdaR0YwWVN4Y2NseHVJQ0FnSUNBZ0lDQnpkR0YwZFhORGIyUmxPaUF5TURCY2NseHVJQ0FnSUgwN1hISmNibHh5WEc0Z0lDQWdiRzloWkdsdVp5NW9hV1JsS0NrN1hISmNiaUFnSUNCeVpYUjFjbTRnY21WemNHOXVjMlZJWVc1a2JHVnlLSEpsY3l3Z2IySnFMQ0J0WlhSb2IyUXBYSEpjYm4xY2NseHVYSEpjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjY2x4dUlDQWdJR2RsZEZ4eVhHNTlYSEpjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxyXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xyXG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xyXG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xyXG52YXIgbW9ja01hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL21vY2tNYW5hZ2VyXCIpO1xyXG52YXIgY2FjaGVNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9jYWNoZU1hbmFnZXJcIik7XHJcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vc2Vzc2lvbk1hbmFnZXJcIik7XHJcbnZhciByZXNwb25zZUhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3Jlc3BvbnNlSGFuZGxlclwiKTtcclxudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XHJcbnZhciB1cmxfMSA9IHJlcXVpcmUoXCIuLi91dGlsL3VybFwiKTtcclxudmFyIGVycm9ySGFuZGxlcl8xID0gcmVxdWlyZShcIi4vZXJyb3JIYW5kbGVyXCIpO1xyXG5mdW5jdGlvbiBmb3JtYXQob3JpZ2luVXJsKSB7XHJcbiAgICBpZiAob3JpZ2luVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xyXG4gICAgICAgIHJldHVybiBvcmlnaW5Vcmw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgdXJsUGVyZml4ID0gY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXg7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHVybFBlcmZpeCA9IGNvbmZpZ18xLmRlZmF1bHQudXJsUGVyZml4KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1cmxQZXJmaXggKyBvcmlnaW5Vcmw7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gcHJlRG8ob2JqKSB7XHJcbiAgICBpZiAodHlwZW9mIG9iai5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBvYmouYmVmb3JlU2VuZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkNvdW50ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBvYmoucmVMb2dpbkNvdW50Kys7XHJcbiAgICB9XHJcbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XHJcbiAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuc2hvdyhvYmouc2hvd0xvYWRpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XHJcbiAgICAgICAgb2JqLm9yaWdpblVybCA9IG9iai51cmw7XHJcbiAgICAgICAgb2JqLnVybCA9IGZvcm1hdChvYmoudXJsKTtcclxuICAgIH1cclxuICAgIHJldHVybiBvYmo7XHJcbn1cclxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKSB7XHJcbiAgICB2YXIgX2EsIF9iO1xyXG4gICAgaWYgKCFvYmouZGF0YSkge1xyXG4gICAgICAgIG9iai5kYXRhID0ge307XHJcbiAgICB9XHJcbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcclxuICAgICAgICBvYmouZGF0YSA9IF9fYXNzaWduKHt9LCBvYmouZGF0YSwgKF9hID0ge30sIF9hW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYSkpO1xyXG4gICAgfVxyXG4gICAgdmFyIGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xyXG4gICAgb2JqLmRhdGEgPSBfX2Fzc2lnbih7fSwgZ2QsIG9iai5kYXRhKTtcclxuICAgIG9iai5tZXRob2QgPSBvYmoubWV0aG9kIHx8ICdHRVQnO1xyXG4gICAgb2JqLmRhdGFUeXBlID0gb2JqLmRhdGFUeXBlIHx8ICdqc29uJztcclxuICAgIGlmIChvYmoubWV0aG9kICE9PSBcIkdFVFwiKSB7XHJcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xyXG4gICAgICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgKF9iID0ge30sIF9iW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xyXG4gICAgfVxyXG4gICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQuc3RhcnQob2JqKTtcclxuICAgIHJldHVybiBvYmo7XHJcbn1cclxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqKSB7XHJcbiAgICB2YXIgX2EsIF9iO1xyXG4gICAgaWYgKCFvYmouZm9ybURhdGEpIHtcclxuICAgICAgICBvYmouZm9ybURhdGEgPSB7fTtcclxuICAgIH1cclxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xyXG4gICAgICAgIG9iai5mb3JtRGF0YSA9IF9fYXNzaWduKHt9LCBvYmouZm9ybURhdGEsIChfYSA9IHt9LCBfYVtjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2EpKTtcclxuICAgIH1cclxuICAgIHZhciBnZCA9IGdldEdsb2JhbERhdGEoKTtcclxuICAgIG9iai5mb3JtRGF0YSA9IF9fYXNzaWduKHt9LCBnZCwgb2JqLmZvcm1EYXRhKTtcclxuICAgIGlmIChzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcclxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgKF9iID0ge30sIF9iW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYikpO1xyXG4gICAgfVxyXG4gICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcclxuICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnN0YXJ0KG9iaik7XHJcbiAgICByZXR1cm4gb2JqO1xyXG59XHJcbmZ1bmN0aW9uIGdldEdsb2JhbERhdGEoKSB7XHJcbiAgICB2YXIgZ2QgPSB7fTtcclxuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBnZCA9IGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGdkID0gY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdkO1xyXG59XHJcbmZ1bmN0aW9uIGRvUmVxdWVzdChvYmopIHtcclxuICAgIG9iaiA9IGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iaik7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHd4LnJlcXVlc3Qoe1xyXG4gICAgICAgICAgICB1cmw6IG9iai51cmwsXHJcbiAgICAgICAgICAgIGRhdGE6IG9iai5kYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6IG9iai5tZXRob2QsXHJcbiAgICAgICAgICAgIGhlYWRlcjogb2JqLmhlYWRlciB8fCB7fSxcclxuICAgICAgICAgICAgZGF0YVR5cGU6IG9iai5kYXRhVHlwZSB8fCAnanNvbicsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gZG9VcGxvYWRGaWxlKG9iaikge1xyXG4gICAgb2JqID0gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgd3gudXBsb2FkRmlsZSh7XHJcbiAgICAgICAgICAgIHVybDogb2JqLnVybCxcclxuICAgICAgICAgICAgZmlsZVBhdGg6IG9iai5maWxlUGF0aCB8fCAnJyxcclxuICAgICAgICAgICAgbmFtZTogb2JqLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIGZvcm1EYXRhOiBvYmouZm9ybURhdGEsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gcmVxdWVzdChvYmopIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqKTtcclxuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbikge1xyXG4gICAgICAgICAgICB2YXIgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXJfMS5kZWZhdWx0LmdldChvYmosICdyZXF1ZXN0Jyk7XHJcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG1vY2tSZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iai5jYWNoZSkge1xyXG4gICAgICAgICAgICBjYWNoZU1hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQubWFpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9SZXF1ZXN0KG9iaik7XHJcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQocmVzLCBvYmosICdyZXF1ZXN0Jyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gdXBsb2FkRmlsZShvYmopIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqKTtcclxuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbikge1xyXG4gICAgICAgICAgICBtb2NrTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaiwgJ3VwbG9hZEZpbGUnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQubWFpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9VcGxvYWRGaWxlKG9iaik7XHJcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQocmVzLCBvYmosICd1cGxvYWRGaWxlJyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0ge1xyXG4gICAgZm9ybWF0OiBmb3JtYXQsXHJcbiAgICByZXF1ZXN0OiByZXF1ZXN0LFxyXG4gICAgdXBsb2FkRmlsZTogdXBsb2FkRmlsZVxyXG59O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ4ZFdWemRFaGhibVJzWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMM0psY1hWbGMzUklZVzVrYkdWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN096czdPenM3UVVGQlFTd3lRMEZCY1VNN1FVRkRja01zTUVOQlFXOURPMEZCUTNCRExEQkRRVUZ2UXp0QlFVTndReXcyUTBGQmRVTTdRVUZEZGtNc0swTkJRWGxETzBGQlEzcERMRzFFUVVFMlF6dEJRVU0zUXl4eFJFRkJLME03UVVGREwwTXNkVVJCUVdsRU8wRkJRMnBFTEcxRFFVRTJRanRCUVVVM1Fpd3JRMEZCTUVNN1FVRkhNVU1zVTBGQlV5eE5RVUZOTEVOQlFVTXNVMEZCYVVJN1NVRkROMElzU1VGQlNTeFRRVUZUTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRk8xRkJRemxDTEU5QlFVOHNVMEZCVXl4RFFVRkJPMHRCUTI1Q08xTkJRVTA3VVVGRFNDeEpRVUZKTEZOQlFWTXNSMEZCUnl4blFrRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF6dFJRVU5xUXl4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFRRVUZUTEV0QlFVc3NWVUZCVlN4RlFVRkZPMWxCUTNoRExGTkJRVk1zUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGQk8xTkJRMnBETzFGQlEwUXNUMEZCVHl4VFFVRlRMRWRCUVVjc1UwRkJVeXhEUVVGRE8wdEJRMmhETzBGQlEwd3NRMEZCUXp0QlFVZEVMRk5CUVZNc1MwRkJTeXhEUVVFclF5eEhRVUZOTzBsQlF5OUVMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVlVGQlZTeExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTjBReXhIUVVGSExFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdTMEZEY0VJN1NVRkZSQ3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEZsQlFWa3NTMEZCU3l4WFFVRlhMRVZCUVVVN1VVRkRla01zUjBGQlJ5eERRVUZETEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRlRUk3VTBGQlRUdFJRVU5JTEVkQlFVY3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRMUVVOMFFqdEpRVVZFTEVsQlFVa3NSMEZCUnl4RFFVRkRMRmRCUVZjc1JVRkJSVHRSUVVOcVFpeHBRa0ZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdTMEZEYWtNN1NVRkZSQ3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNSVUZCUlR0UlFVTm9RaXhIUVVGSExFTkJRVU1zVTBGQlV5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNN1VVRkRlRUlzUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzB0QlF6ZENPMGxCUlVRc1QwRkJUeXhIUVVGSExFTkJRVU03UVVGRFppeERRVUZETzBGQlIwUXNVMEZCVXl4dlFrRkJiMElzUTBGQlF5eEhRVUZ0UWpzN1NVRkZOME1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRVZCUVVVN1VVRkRXQ3hIUVVGSExFTkJRVU1zU1VGQlNTeEhRVUZITEVWQlFVVXNRMEZCUXp0TFFVTnFRanRKUVVWRUxFbEJRVWtzUjBGQlJ5eERRVUZETEZOQlFWTXNTMEZCU3l4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVsQlFVa3NaMEpCUVUwc1EwRkJReXhQUVVGUExFVkJRVVU3VVVGRE9VUXNSMEZCUnl4RFFVRkRMRWxCUVVrc1owSkJRVThzUjBGQlJ5eERRVUZETEVsQlFXTXNaVUZCUnl4blFrRkJUU3hEUVVGRExGZEJRVmNzU1VGQlJ5eG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1RVRkJReXhEUVVGRE8wdEJRelZGTzBsQlIwUXNTVUZCVFN4RlFVRkZMRWRCUVVjc1lVRkJZU3hGUVVGRkxFTkJRVU03U1VGRE0wSXNSMEZCUnl4RFFVRkRMRWxCUVVrc1owSkJRVThzUlVGQlJTeEZRVUZMTEVkQlFVY3NRMEZCUXl4SlFVRmpMRU5CUVVNc1EwRkJRenRKUVVVeFF5eEhRVUZITEVOQlFVTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETzBsQlEycERMRWRCUVVjc1EwRkJReXhSUVVGUkxFZEJRVWNzUjBGQlJ5eERRVUZETEZGQlFWRXNTVUZCU1N4TlFVRk5MRU5CUVVNN1NVRkhkRU1zU1VGQlNTeEhRVUZITEVOQlFVTXNUVUZCVFN4TFFVRkxMRXRCUVVzc1JVRkJSVHRSUVVOMFFpeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRMmhDTEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1lVRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4WlFVRkhMRWRCUVVNc1owSkJRVTBzUTBGQlF5eFhRVUZYTEVsQlFVY3NaMEpCUVUwc1EwRkJReXhQUVVGUExFMUJRVVVzUTBGQlF6dFRRVU0xUlR0UlFVTkVMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzWVVGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzB0QlEzaERPMGxCUlVRc01FSkJRV2RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSVFZDTEU5QlFVOHNSMEZCUnl4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVkRUxGTkJRVk1zZFVKQlFYVkNMRU5CUVVNc1IwRkJjMEk3TzBsQlEyNUVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTzFGQlEyWXNSMEZCUnl4RFFVRkRMRkZCUVZFc1IwRkJSeXhGUVVGRkxFTkJRVU03UzBGRGNrSTdTVUZGUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhUUVVGVExFdEJRVXNzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJSeXhKUVVGSkxHZENRVUZOTEVOQlFVTXNUMEZCVHl4RlFVRkZPMUZCUXpsRUxFZEJRVWNzUTBGQlF5eFJRVUZSTEdkQ1FVRlBMRWRCUVVjc1EwRkJReXhSUVVGclFpeGxRVUZITEdkQ1FVRk5MRU5CUVVNc1YwRkJWeXhKUVVGSExHZENRVUZOTEVOQlFVTXNUMEZCVHl4TlFVRkRMRU5CUVVNN1MwRkRjRVk3U1VGSFJDeEpRVUZOTEVWQlFVVXNSMEZCUnl4aFFVRmhMRVZCUVVVc1EwRkJRenRKUVVNelFpeEhRVUZITEVOQlFVTXNVVUZCVVN4blFrRkJUeXhGUVVGRkxFVkJRVXNzUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMGxCUjNoRExFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVN1VVRkRhRUlzUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4aFFVRkhMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEZsQlFVY3NSMEZCUXl4blFrRkJUU3hEUVVGRExGZEJRVmNzU1VGQlJ5eG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1RVRkJSU3hEUVVGRE8wdEJRelZGTzBsQlJVUXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhoUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03U1VGRmNrTXNNRUpCUVdkQ0xFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUlRWQ0xFOUJRVThzUjBGQlJ5eERRVUZETzBGQlEyWXNRMEZCUXp0QlFVVkVMRk5CUVZNc1lVRkJZVHRKUVVOc1FpeEpRVUZKTEVWQlFVVXNSMEZCVVN4RlFVRkZMRU5CUVVNN1NVRkRha0lzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU42UXl4RlFVRkZMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0TFFVTTFRanRUUVVGTkxFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1MwRkJTeXhSUVVGUkxFVkJRVVU3VVVGRE9VTXNSVUZCUlN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETzB0QlF6RkNPMGxCUTBRc1QwRkJUeXhGUVVGRkxFTkJRVU03UVVGRFpDeERRVUZETzBGQlJVUXNVMEZCVXl4VFFVRlRMRU5CUVVNc1IwRkJiVUk3U1VGRGJFTXNSMEZCUnl4SFFVRkhMRzlDUVVGdlFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJoRExFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNWVUZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUVHRSUVVNdlFpeEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRPMWxCUTFBc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eEhRVUZITzFsQlExb3NTVUZCU1N4RlFVRkZMRWRCUVVjc1EwRkJReXhKUVVGSk8xbEJRMlFzVFVGQlRTeEZRVUZGTEVkQlFVY3NRMEZCUXl4TlFVRk5PMWxCUTJ4Q0xFMUJRVTBzUlVGQlJTeEhRVUZITEVOQlFVTXNUVUZCVFN4SlFVRkpMRVZCUVVVN1dVRkRlRUlzVVVGQlVTeEZRVUZGTEVkQlFVY3NRMEZCUXl4UlFVRlJMRWxCUVVrc1RVRkJUVHRaUVVOb1F5eFBRVUZQTEZsQlFVTXNSMEZCYjBNN1owSkJRM2hETEU5QlFVOHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM2hDTEVOQlFVTTdXVUZEUkN4SlFVRkpMRmxCUVVNc1IwRkJOa0k3WjBKQlF6bENMSE5DUVVGWkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRuUWtGRGJrTXNUMEZCVHl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGRrSXNRMEZCUXp0WlFVTkVMRkZCUVZFN1owSkJRMG9zU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UlFVRlJMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yOUNRVU53UXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03YVVKQlEyeENPMmRDUVVORUxFbEJRVWtzUjBGQlJ5eERRVUZETEZkQlFWY3NSVUZCUlR0dlFrRkRha0lzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRVHRwUWtGRGFrSTdXVUZEVEN4RFFVRkRPMU5CUTBvc1EwRkJReXhEUVVGQk8wbEJRMDRzUTBGQlF5eERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc1UwRkJVeXhaUVVGWkxFTkJRVU1zUjBGQmMwSTdTVUZEZUVNc1IwRkJSeXhIUVVGSExIVkNRVUYxUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMjVETEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xbEJRMVlzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4SFFVRkhPMWxCUTFvc1VVRkJVU3hGUVVGRkxFZEJRVWNzUTBGQlF5eFJRVUZSTEVsQlFVa3NSVUZCUlR0WlFVTTFRaXhKUVVGSkxFVkJRVVVzUjBGQlJ5eERRVUZETEVsQlFVa3NTVUZCU1N4RlFVRkZPMWxCUTNCQ0xGRkJRVkVzUlVGQlJTeEhRVUZITEVOQlFVTXNVVUZCVVR0WlFVTjBRaXhQUVVGUExGbEJRVU1zUjBGQmRVTTdaMEpCUXpORExFOUJRVThzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoQ0xFTkJRVU03V1VGRFJDeEpRVUZKTEZsQlFVTXNSMEZCTmtJN1owSkJRemxDTEhOQ1FVRlpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0blFrRkRia01zVDBGQlR5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRka0lzUTBGQlF6dFpRVU5FTEZGQlFWRTdaMEpCUTBvc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eFJRVUZSTEV0QlFVc3NWVUZCVlN4RlFVRkZPMjlDUVVOd1F5eEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN2FVSkJRMnhDTzJkQ1FVTkVMRWxCUVVrc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJUdHZRa0ZEYWtJc2FVSkJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUVR0cFFrRkRha0k3V1VGRFRDeERRVUZETzFOQlEwb3NRMEZCUXl4RFFVRkJPMGxCUTA0c1EwRkJReXhEUVVGRExFTkJRVUU3UVVGRFRpeERRVUZETzBGQlJVUXNVMEZCVXl4UFFVRlBMRU5CUVVNc1IwRkJiVUk3U1VGRGFFTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlF5OUNMRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZGYWtJc1NVRkJTU3huUWtGQlRTeERRVUZETEZGQlFWRXNSVUZCUlR0WlFVTnFRaXhKUVVGSkxGbEJRVmtzUjBGQlJ5eHhRa0ZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdXVUZEYmtRc1NVRkJTU3haUVVGWkxFVkJRVVU3WjBKQlEyUXNUMEZCVHl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03WVVGRGFFTTdVMEZEU2p0UlFVVkVMRWxCUVVrc1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlJUdFpRVU5ZTEhOQ1FVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFOQlEzcENPMUZCUlVRc2QwSkJRV01zUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRka0lzVDBGQlR5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1VVRkRla0lzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVVNc1IwRkJSenRaUVVOU0xFbEJRVWtzVVVGQlVTeEhRVUZITEhsQ1FVRmxMRU5CUVVNc1IwRkJjME1zUlVGQlJTeEhRVUZITEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN1dVRkRka1lzVDBGQlR5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkROMElzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVVNc1EwRkJRenRaUVVOUUxFOUJRVThzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKQ0xFTkJRVU1zUTBGQlF5eERRVUZCTzBsQlEwNHNRMEZCUXl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSVVFzVTBGQlV5eFZRVUZWTEVOQlFVTXNSMEZCYzBJN1NVRkRkRU1zVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xRkJReTlDTEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRmFrSXNTVUZCU1N4blFrRkJUU3hEUVVGRExGRkJRVkVzUlVGQlJUdFpRVU5xUWl4eFFrRkJWeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVWQlFVVXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkRia01zVDBGQlR6dFRRVU5XTzFGQlJVUXNkMEpCUVdNc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdXVUZEZGtJc1QwRkJUeXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdVVUZETlVJc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFVTXNSMEZCUnp0WlFVTlNMRWxCUVVrc1VVRkJVU3hIUVVGSExIbENRVUZsTEVOQlFVTXNSMEZCZVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzV1VGQldTeERRVUZETEVOQlFVTTdXVUZETjBZc1QwRkJUeXhQUVVGUExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZETjBJc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFVTXNRMEZCUXp0WlFVTlFMRTlCUVU4c1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkNMRU5CUVVNc1EwRkJReXhEUVVGQk8wbEJRMDRzUTBGQlF5eERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeE5RVUZOTEZGQlFVRTdTVUZEVGl4UFFVRlBMRk5CUVVFN1NVRkRVQ3hWUVVGVkxGbEJRVUU3UTBGRFlpeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUd4dllXUnBibWNnWm5KdmJTQW5MaTR2ZFhScGJDOXNiMkZrYVc1bkoxeHlYRzVwYlhCdmNuUWdZMjl1Wm1sbklHWnliMjBnSnk0dUwzTjBiM0psTDJOdmJtWnBaeWRjY2x4dWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhISmNibWx0Y0c5eWRDQnRiMk5yVFdGdVlXZGxjaUJtY205dElDY3VMMjF2WTJ0TllXNWhaMlZ5SjF4eVhHNXBiWEJ2Y25RZ1kyRmphR1ZOWVc1aFoyVnlJR1p5YjIwZ0p5NHZZMkZqYUdWTllXNWhaMlZ5SjF4eVhHNXBiWEJ2Y25RZ2MyVnpjMmx2YmsxaGJtRm5aWElnWm5KdmJTQW5MaTl6WlhOemFXOXVUV0Z1WVdkbGNpZGNjbHh1YVcxd2IzSjBJSEpsYzNCdmJuTmxTR0Z1Wkd4bGNpQm1jbTl0SUNjdUwzSmxjM0J2Ym5ObFNHRnVaR3hsY2lkY2NseHVhVzF3YjNKMElHUjFjbUYwYVc5dVVtVndiM0owWlhJZ1puSnZiU0JjSWk0dlpIVnlZWFJwYjI1U1pYQnZjblJsY2x3aVhISmNibWx0Y0c5eWRDQjFjbXdnWm5KdmJTQW5MaTR2ZFhScGJDOTFjbXduWEhKY2JtbHRjRzl5ZENCN1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1ZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSmNjbHh1YVcxd2IzSjBJR1Z5Y205eVNHRnVaR3hsY2lCbWNtOXRJRndpTGk5bGNuSnZja2hoYm1Sc1pYSmNJanRjY2x4dVhISmNiaTh2SU9hZ3ZPVzhqK1dNbG5WeWJGeHlYRzVtZFc1amRHbHZiaUJtYjNKdFlYUW9iM0pwWjJsdVZYSnNPaUJ6ZEhKcGJtY3BJSHRjY2x4dUlDQWdJR2xtSUNodmNtbG5hVzVWY213dWMzUmhjblJ6VjJsMGFDZ25hSFIwY0NjcEtTQjdYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzl5YVdkcGJsVnliRnh5WEc0Z0lDQWdmU0JsYkhObElIdGNjbHh1SUNBZ0lDQWdJQ0JzWlhRZ2RYSnNVR1Z5Wm1sNElEMGdZMjl1Wm1sbkxuVnliRkJsY21acGVEdGNjbHh1SUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTUxY214UVpYSm1hWGdnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0IxY214UVpYSm1hWGdnUFNCamIyNW1hV2N1ZFhKc1VHVnlabWw0S0NsY2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFZ5YkZCbGNtWnBlQ0FySUc5eWFXZHBibFZ5YkR0Y2NseHVJQ0FnSUgxY2NseHVmVnh5WEc1Y2NseHVMeThnNW9tQTVweUo2SyszNXJHQzVZK1I1WWU2NVltTjZaeUE2S2FCNVlHYTU1cUU1THFMNW9PRlhISmNibVoxYm1OMGFXOXVJSEJ5WlVSdlBGUWdaWGgwWlc1a2N5QkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dVBpaHZZbW82SUZRcE9pQlVJSHRjY2x4dUlDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxtSmxabTl5WlZObGJtUWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh5WEc0Z0lDQWdJQ0FnSUc5aWFpNWlaV1p2Y21WVFpXNWtLQ2s3WEhKY2JpQWdJQ0I5WEhKY2JpQWdJQ0F2THlEbm1idmx2WlhtZ0lIbHBMSG1sWWp2dkl6cGg0M2xwSTNubWJ2bHZaWG9ycUhtbGJCY2NseHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2IySnFMbkpsVEc5bmFXNURiM1Z1ZENBOVBUMGdYQ0oxYm1SbFptbHVaV1JjSWlrZ2UxeHlYRzRnSUNBZ0lDQWdJRzlpYWk1eVpVeHZaMmx1UTI5MWJuUWdQU0F3TzF4eVhHNGdJQ0FnZlNCbGJITmxJSHRjY2x4dUlDQWdJQ0FnSUNCdlltb3VjbVZNYjJkcGJrTnZkVzUwS3lzN1hISmNiaUFnSUNCOVhISmNibHh5WEc0Z0lDQWdhV1lnS0c5aWFpNXphRzkzVEc5aFpHbHVaeWtnZTF4eVhHNGdJQ0FnSUNBZ0lHeHZZV1JwYm1jdWMyaHZkeWh2WW1vdWMyaHZkMHh2WVdScGJtY3BPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUdsbUlDZ2hiMkpxTG05eWFXZHBibFZ5YkNrZ2UxeHlYRzRnSUNBZ0lDQWdJRzlpYWk1dmNtbG5hVzVWY213Z1BTQnZZbW91ZFhKc08xeHlYRzRnSUNBZ0lDQWdJRzlpYWk1MWNtd2dQU0JtYjNKdFlYUW9iMkpxTG5WeWJDazdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnY21WMGRYSnVJRzlpYWp0Y2NseHVmVnh5WEc1Y2NseHVMeThnNXFDODVieVA1WXlXNWFTRTU1Q0c2SyszNXJHQzU1cUViMkpxNVlhRjVhNjVYSEpjYm1aMWJtTjBhVzl1SUdsdWFYUnBZV3hwZW1WU1pYRjFaWE4wVDJKcUtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNHBJSHRjY2x4dVhISmNiaUFnSUNCcFppQW9JVzlpYWk1a1lYUmhLU0I3WEhKY2JpQWdJQ0FnSUNBZ2IySnFMbVJoZEdFZ1BTQjdmVHRjY2x4dUlDQWdJSDFjY2x4dVhISmNiaUFnSUNCcFppQW9iMkpxTG05eWFXZHBibFZ5YkNBaFBUMGdZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1ZFhKc0lDWW1JSE4wWVhSMWN5NXpaWE56YVc5dUtTQjdYSEpjYmlBZ0lDQWdJQ0FnYjJKcUxtUmhkR0VnUFNCN0xpNHViMkpxTG1SaGRHRWdZWE1nYjJKcVpXTjBMQ0JiWTI5dVptbG5Mbk5sYzNOcGIyNU9ZVzFsWFRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjU5TzF4eVhHNGdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZVdGcU9XeGdPV1BndWFWc08rOGpPV0ltZWEzdStXS29GeHlYRzRnSUNBZ1kyOXVjM1FnWjJRZ1BTQm5aWFJIYkc5aVlXeEVZWFJoS0NrN1hISmNiaUFnSUNCdlltb3VaR0YwWVNBOUlIc3VMaTVuWkN3Z0xpNHViMkpxTG1SaGRHRWdZWE1nYjJKcVpXTjBmVHRjY2x4dVhISmNiaUFnSUNCdlltb3ViV1YwYUc5a0lEMGdiMkpxTG0xbGRHaHZaQ0I4ZkNBblIwVlVKenRjY2x4dUlDQWdJRzlpYWk1a1lYUmhWSGx3WlNBOUlHOWlhaTVrWVhSaFZIbHdaU0I4ZkNBbmFuTnZiaWM3WEhKY2JseHlYRzRnSUNBZ0x5OGc1YWFDNXA2YzZLKzM1ckdDNUxpTjVwaXZSMFZVNzd5TTVZaVo1WnlvVlZKTTVMaXQ2SWVxNVlxbzVZcWc1TGlLNTVtNzViMlY1b0NCNVpLTTVZV281YkdBNVkrQzVwV3dYSEpjYmlBZ0lDQnBaaUFvYjJKcUxtMWxkR2h2WkNBaFBUMGdYQ0pIUlZSY0lpa2dlMXh5WEc0Z0lDQWdJQ0FnSUdsbUlDaHpkR0YwZFhNdWMyVnpjMmx2YmlrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCdlltb3VkWEpzSUQwZ2RYSnNMbk5sZEZCaGNtRnRjeWh2WW1vdWRYSnNMQ0I3VzJOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlYwNklITjBZWFIxY3k1elpYTnphVzl1ZlNrN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUc5aWFpNTFjbXdnUFNCMWNtd3VjMlYwVUdGeVlXMXpLRzlpYWk1MWNtd3NJR2RrS1R0Y2NseHVJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQmtkWEpoZEdsdmJsSmxjRzl5ZEdWeUxuTjBZWEowS0c5aWFpazdYSEpjYmx4eVhHNGdJQ0FnY21WMGRYSnVJRzlpYWp0Y2NseHVmVnh5WEc1Y2NseHVMeThnNXFDODVieVA1WXlXNWFTRTU1Q0c1TGlLNUx5ZzVwYUg1THUyNTVxRWIySnE1WWFGNWE2NVhISmNibVoxYm1OMGFXOXVJR2x1YVhScFlXeHBlbVZWY0d4dllXUkdhV3hsVDJKcUtHOWlham9nU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRwSUh0Y2NseHVJQ0FnSUdsbUlDZ2hiMkpxTG1admNtMUVZWFJoS1NCN1hISmNiaUFnSUNBZ0lDQWdiMkpxTG1admNtMUVZWFJoSUQwZ2UzMDdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnYVdZZ0tHOWlhaTV2Y21sbmFXNVZjbXdnSVQwOUlHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMblZ5YkNBbUppQnpkR0YwZFhNdWMyVnpjMmx2YmlrZ2UxeHlYRzRnSUNBZ0lDQWdJRzlpYWk1bWIzSnRSR0YwWVNBOUlIc3VMaTV2WW1vdVptOXliVVJoZEdFZ1lYTWdiMkpxWldOMExDQmJZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxYVG9nYzNSaGRIVnpMbk5sYzNOcGIyNTlPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUM4dklPV21ndWFlbk9hY2llV0ZxT1d4Z09XUGd1YVZzTys4ak9XSW1lYTN1K1dLb0Z4eVhHNGdJQ0FnWTI5dWMzUWdaMlFnUFNCblpYUkhiRzlpWVd4RVlYUmhLQ2s3WEhKY2JpQWdJQ0J2WW1vdVptOXliVVJoZEdFZ1BTQjdMaTR1WjJRc0lDNHVMbTlpYWk1bWIzSnRSR0YwWVgwN1hISmNibHh5WEc0Z0lDQWdMeThnNWJDRzU1bTc2Wm1HNW9DQjVMbWY1YmltNVp5b2RYSnM1TGlLWEhKY2JpQWdJQ0JwWmlBb2MzUmhkSFZ6TG5ObGMzTnBiMjRwSUh0Y2NseHVJQ0FnSUNBZ0lDQnZZbW91ZFhKc0lEMGdkWEpzTG5ObGRGQmhjbUZ0Y3lodlltb3VkWEpzTENCN1cyTnZibVpwWnk1elpYTnphVzl1VG1GdFpWMDZJSE4wWVhSMWN5NXpaWE56YVc5dWZTazdYSEpjYmlBZ0lDQjlYSEpjYmlBZ0lDQXZMeURsaGFqbHNZRGxqNExtbGJEbGtJem1sN2JtbEw3bG5LaDFjbXprdUlwY2NseHVJQ0FnSUc5aWFpNTFjbXdnUFNCMWNtd3VjMlYwVUdGeVlXMXpLRzlpYWk1MWNtd3NJR2RrS1R0Y2NseHVYSEpjYmlBZ0lDQmtkWEpoZEdsdmJsSmxjRzl5ZEdWeUxuTjBZWEowS0c5aWFpazdYSEpjYmx4eVhHNGdJQ0FnY21WMGRYSnVJRzlpYWp0Y2NseHVmVnh5WEc1Y2NseHVablZ1WTNScGIyNGdaMlYwUjJ4dlltRnNSR0YwWVNncElIdGNjbHh1SUNBZ0lHeGxkQ0JuWkRvZ1lXNTVJRDBnZTMwN1hISmNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1bmJHOWlZV3hFWVhSaElEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNjbHh1SUNBZ0lDQWdJQ0JuWkNBOUlHTnZibVpwWnk1bmJHOWlZV3hFWVhSaEtDazdYSEpjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdVoyeHZZbUZzUkdGMFlTQTlQVDBnWENKdlltcGxZM1JjSWlrZ2UxeHlYRzRnSUNBZ0lDQWdJR2RrSUQwZ1kyOXVabWxuTG1kc2IySmhiRVJoZEdFN1hISmNiaUFnSUNCOVhISmNiaUFnSUNCeVpYUjFjbTRnWjJRN1hISmNibjFjY2x4dVhISmNibVoxYm1OMGFXOXVJR1J2VW1WeGRXVnpkQ2h2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1S1NCN1hISmNiaUFnSUNCdlltb2dQU0JwYm1sMGFXRnNhWHBsVW1WeGRXVnpkRTlpYWlodlltb3BPMXh5WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2NseHVJQ0FnSUNBZ0lDQjNlQzV5WlhGMVpYTjBLSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdkWEpzT2lCdlltb3VkWEpzTEZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaE9pQnZZbW91WkdGMFlTeGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2JXVjBhRzlrT2lCdlltb3ViV1YwYUc5a0xGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCb1pXRmtaWEk2SUc5aWFpNW9aV0ZrWlhJZ2ZId2dlMzBzWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR1JoZEdGVWVYQmxPaUJ2WW1vdVpHRjBZVlI1Y0dVZ2ZId2dKMnB6YjI0bkxGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCemRXTmpaWE56S0hKbGN6b2dkM2d1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb2NtVnpLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdmU3hjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdabUZwYkNoeVpYTTZJSGQ0TGtkbGJtVnlZV3hEWVd4c1ltRmphMUpsYzNWc2RDa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlhKeWIzSklZVzVrYkdWeUxuTjVjM1JsYlVWeWNtOXlLRzlpYWl3Z2NtVnpLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9jbVZ6S1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHeGxkR1VvS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1amIyMXdiR1YwWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTnZiWEJzWlhSbEtDazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9iMkpxTG5Ob2IzZE1iMkZrYVc1bktTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHOWhaR2x1Wnk1b2FXUmxLQ2xjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lIMHBYSEpjYmlBZ0lDQjlLVnh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCa2IxVndiRzloWkVacGJHVW9iMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHlYRzRnSUNBZ2IySnFJRDBnYVc1cGRHbGhiR2w2WlZWd2JHOWhaRVpwYkdWUFltb29iMkpxS1R0Y2NseHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYSEpjYmlBZ0lDQWdJQ0FnZDNndWRYQnNiMkZrUm1sc1pTaDdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIVnliRG9nYjJKcUxuVnliQ3hjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdabWxzWlZCaGRHZzZJRzlpYWk1bWFXeGxVR0YwYUNCOGZDQW5KeXhjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdibUZ0WlRvZ2IySnFMbTVoYldVZ2ZId2dKeWNzWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR1p2Y20xRVlYUmhPaUJ2WW1vdVptOXliVVJoZEdFc1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhOMVkyTmxjM01vY21Wek9pQjNlQzVWY0d4dllXUkdhV3hsVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHlaWE1wTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc0tISmxjem9nZDNndVIyVnVaWEpoYkVOaGJHeGlZV05yVW1WemRXeDBLU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGNuSnZja2hoYm1Sc1pYSXVjM2x6ZEdWdFJYSnliM0lvYjJKcUxDQnlaWE1wTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2h5WlhNcE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyMXdiR1YwWlNncElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxtTnZiWEJzWlhSbElEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlltb3VZMjl0Y0d4bGRHVW9LVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h2WW1vdWMyaHZkMHh2WVdScGJtY3BJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMkZrYVc1bkxtaHBaR1VvS1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdmU2xjY2x4dUlDQWdJSDBwWEhKY2JuMWNjbHh1WEhKY2JtWjFibU4wYVc5dUlISmxjWFZsYzNRb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpazZJR0Z1ZVNCN1hISmNiaUFnSUNCeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh5WEc0Z0lDQWdJQ0FnSUc5aWFpQTlJSEJ5WlVSdktHOWlhaWs3WEhKY2JseHlYRzRnSUNBZ0lDQWdJR2xtSUNoamIyNW1hV2N1Ylc5amEwcHpiMjRwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHMXZZMnRTWlhOd2IyNXpaU0E5SUcxdlkydE5ZVzVoWjJWeUxtZGxkQ2h2WW1vc0lDZHlaWEYxWlhOMEp5azdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h0YjJOclVtVnpjRzl1YzJVcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtHMXZZMnRTWlhOd2IyNXpaU2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FnSUdsbUlDaHZZbW91WTJGamFHVXBJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZqYUdWTllXNWhaMlZ5TG1kbGRDaHZZbW9wTzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNBZ2MyVnpjMmx2YmsxaGJtRm5aWEl1YldGcGJpZ3BMblJvWlc0b0tDa2dQVDRnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdaRzlTWlhGMVpYTjBLRzlpYWlsY2NseHVJQ0FnSUNBZ0lDQjlLUzUwYUdWdUtDaHlaWE1wSUQwK0lIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEpsYzNCdmJuTmxJRDBnY21WemNHOXVjMlZJWVc1a2JHVnlLSEpsY3lCaGN5QjNlQzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwTENCdlltb3NJQ2R5WlhGMVpYTjBKeWs3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtISmxjM0J2Ym5ObEtUdGNjbHh1SUNBZ0lDQWdJQ0I5S1M1allYUmphQ2dvWlNrZ1BUNGdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0dVcE8xeHlYRzRnSUNBZ0lDQWdJSDBwWEhKY2JpQWdJQ0I5S1Z4eVhHNTlYSEpjYmx4eVhHNW1kVzVqZEdsdmJpQjFjR3h2WVdSR2FXeGxLRzlpYWpvZ1NWVndiRzloWkVacGJHVlBjSFJwYjI0cE9pQmhibmtnZTF4eVhHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNjbHh1SUNBZ0lDQWdJQ0J2WW1vZ1BTQndjbVZFYnlodlltb3BPMXh5WEc1Y2NseHVJQ0FnSUNBZ0lDQnBaaUFvWTI5dVptbG5MbTF2WTJ0S2MyOXVLU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJRzF2WTJ0TllXNWhaMlZ5TG1kbGRDaHZZbW9zSUNkMWNHeHZZV1JHYVd4bEp5azdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBZ0lITmxjM05wYjI1TllXNWhaMlZ5TG0xaGFXNG9LUzUwYUdWdUtDZ3BJRDArSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1J2VlhCc2IyRmtSbWxzWlNodlltb3BYSEpjYmlBZ0lDQWdJQ0FnZlNrdWRHaGxiaWdvY21WektTQTlQaUI3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCeVpYTndiMjV6WlNBOUlISmxjM0J2Ym5ObFNHRnVaR3hsY2loeVpYTWdZWE1nZDNndVZYQnNiMkZrUm1sc1pWTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ3dnYjJKcUxDQW5kWEJzYjJGa1JtbHNaU2NwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHlaWE53YjI1elpTazdYSEpjYmlBZ0lDQWdJQ0FnZlNrdVkyRjBZMmdvS0dVcElEMCtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENobEtUdGNjbHh1SUNBZ0lDQWdJQ0I5S1Z4eVhHNGdJQ0FnZlNsY2NseHVmVnh5WEc1Y2NseHVaWGh3YjNKMElHUmxabUYxYkhRZ2UxeHlYRzRnSUNBZ1ptOXliV0YwTEZ4eVhHNGdJQ0FnY21WeGRXVnpkQ3hjY2x4dUlDQWdJSFZ3Ykc5aFpFWnBiR1ZjY2x4dWZWeHlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XHJcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVxdWVzdEhhbmRsZXJcIik7XHJcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcclxudmFyIGNhY2hlTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vY2FjaGVNYW5hZ2VyXCIpO1xyXG52YXIgZHVyYXRpb25SZXBvcnRlcl8xID0gcmVxdWlyZShcIi4vZHVyYXRpb25SZXBvcnRlclwiKTtcclxudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcclxuZnVuY3Rpb24gcmVzcG9uc2UocmVzLCBvYmosIG1ldGhvZCkge1xyXG4gICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICBpZiAodHlwZW9mIHJlcy5kYXRhID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IEpTT04ucGFyc2UocmVzLmRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLmNhdGNoRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmxvZ2ljRXJyb3Iob2JqLCByZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5lbmQob2JqKTtcclxuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5sb2dpblRyaWdnZXIocmVzLmRhdGEpICYmIG9iai5yZUxvZ2luQ291bnQgIT09IHVuZGVmaW5lZCAmJiBvYmoucmVMb2dpbkNvdW50IDwgY29uZmlnXzEuZGVmYXVsdC5yZUxvZ2luTGltaXQpIHtcclxuICAgICAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0LmRlbFNlc3Npb24oKTtcclxuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJyZXF1ZXN0XCIpIHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5yZXF1ZXN0KG9iaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kID09PSBcInVwbG9hZEZpbGVcIikge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnVwbG9hZEZpbGUob2JqKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NUcmlnZ2VyKHJlcy5kYXRhKSkge1xyXG4gICAgICAgICAgICB2YXIgcmVhbERhdGEgPSBcIlwiO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVhbERhdGEgPSBjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NEYXRhKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZ1bmN0aW9uIHN1Y2Nlc3NEYXRhIG9jY3VyIGVycm9yOiBcIiArIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghb2JqLm5vQ2FjaGVGbGFzaCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVhbERhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxEYXRhO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhY2hlTWFuYWdlcl8xLmRlZmF1bHQuc2V0KG9iaiwgcmVhbERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbXNnID0gZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5nZXRFcnJvck1zZyhyZXMpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZy5jb250ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAob2JqLmNhdGNoRXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5zdGF0dXNDb2RlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5sb2dpY0Vycm9yKG9iaiwgcmVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gcmVzcG9uc2U7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnpjRzl1YzJWSVlXNWtiR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOXlaWE53YjI1elpVaGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNiVVJCUVRaRE8wRkJRemRETEN0RFFVRjVRenRCUVVONlF5d3JRMEZCZVVNN1FVRkRla01zZFVSQlFXbEVPMEZCUTJwRUxHMUVRVUUyUXp0QlFVYzNReXhUUVVGVExGRkJRVkVzUTBGRFlpeEhRVUY1UlN4RlFVTjZSU3hIUVVGMVF5eEZRVU4yUXl4TlFVRm5RenRKUVVWb1F5eEpRVUZKTEVkQlFVY3NRMEZCUXl4VlFVRlZMRXRCUVVzc1IwRkJSeXhGUVVGRk8xRkJSM2hDTEVsQlFVY3NUMEZCVHl4SFFVRkhMRU5CUVVNc1NVRkJTU3hMUVVGTExGRkJRVkVzUlVGQlJUdFpRVU0zUWl4SlFVRkpPMmRDUVVOQkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdZVUZEYmtNN1dVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdG5Ra0ZEVWl4SlFVRkhMRWRCUVVjc1EwRkJReXhWUVVGVkxFVkJRVVU3YjBKQlEyWXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZEZEVJN2NVSkJRVTA3YjBKQlEwZ3NjMEpCUVZrc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMjlDUVVOc1F5eFBRVUZQTzJsQ1FVTldPMkZCUTBvN1UwRkRTanRSUVVWRUxEQkNRVUZuUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVVV4UWl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zV1VGQllTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zV1VGQldTeExRVUZMTEZOQlFWTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1dVRkJXU3hIUVVGSExHZENRVUZOTEVOQlFVTXNXVUZCWVN4RlFVRkZPMWxCUlRkSExIZENRVUZqTEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNN1dVRkROVUlzU1VGQlJ5eE5RVUZOTEV0QlFVc3NVMEZCVXl4RlFVRkZPMmRDUVVOeVFpeDNRa0ZCWXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGeFFpeERRVUZETEVOQlFVTTdZVUZEYWtRN2FVSkJRVTBzU1VGQlJ5eE5RVUZOTEV0QlFVc3NXVUZCV1N4RlFVRkZPMmRDUVVNdlFpeDNRa0ZCWXl4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGM1FpeERRVUZETEVOQlFVTTdZVUZEZGtRN1UwRkRTanRoUVVGTkxFbEJRVWtzWjBKQlFVMHNRMEZCUXl4alFVRmpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTzFsQlJYaERMRWxCUVVrc1VVRkJVU3hIUVVGelF5eEZRVUZGTEVOQlFVTTdXVUZEY2tRc1NVRkJTVHRuUWtGRFFTeFJRVUZSTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMkZCUXpORE8xbEJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdaMEpCUTFJc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eHZRMEZCYjBNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU16UkR0WlFVTkVMRWxCUVVjc1EwRkJSU3hIUVVGelFpeERRVUZETEZsQlFWa3NSVUZCUlR0blFrRkZkRU1zU1VGQlJ5eFBRVUZQTEVkQlFVY3NRMEZCUXl4UFFVRlBMRXRCUVVzc1ZVRkJWU3hGUVVGRE8yOUNRVU5xUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJsQ1FVTjZRanR4UWtGQlRUdHZRa0ZEU0N4UFFVRlBMRkZCUVZFc1EwRkJRenRwUWtGRGJrSTdZVUZEU2p0WlFVVkVMSE5DUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJRenRUUVVOdVF6dGhRVUZOTzFsQlJVZ3NTVUZCUnl4SFFVRkhMRU5CUVVNc1ZVRkJWU3hGUVVGRk8yZENRVU5tTEVsQlFVa3NSMEZCUnl4SFFVRkhMSE5DUVVGWkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVONFF5eE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dGhRVU5vUXp0cFFrRkJUVHRuUWtGRFNDeHpRa0ZCV1N4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdZVUZEY2tNN1UwRkRTanRMUVVOS08xTkJRVTA3VVVGRlNDeEpRVUZITEVkQlFVY3NRMEZCUXl4VlFVRlZMRVZCUVVVN1dVRkRaaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4VlFVRlZMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFRRVU01UXp0aFFVRk5PMWxCUTBnc2MwSkJRVmtzUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRM0pETzB0QlEwbzdRVUZEVEN4RFFVRkRPMEZCUlVRc2EwSkJRV1VzVVVGQlVTeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhISmNibWx0Y0c5eWRDQnlaWEYxWlhOMFNHRnVaR3hsY2lCbWNtOXRJQ2N1TDNKbGNYVmxjM1JJWVc1a2JHVnlKMXh5WEc1cGJYQnZjblFnWlhKeWIzSklZVzVrYkdWeUlHWnliMjBnSnk0dlpYSnliM0pJWVc1a2JHVnlKMXh5WEc1cGJYQnZjblFnWTJGamFHVk5ZVzVoWjJWeUlHWnliMjBnSnk0dlkyRmphR1ZOWVc1aFoyVnlKMXh5WEc1cGJYQnZjblFnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaUJtY205dElDY3VMMlIxY21GMGFXOXVVbVZ3YjNKMFpYSW5YSEpjYm1sdGNHOXlkQ0J6WlhOemFXOXVUV0Z1WVdkbGNpQm1jbTl0SUNjdUwzTmxjM05wYjI1TllXNWhaMlZ5SjF4eVhHNXBiWEJ2Y25RZ2V5QkpVbVZ4ZFdWemRFOXdkR2x2Yml3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0Z2ZTQm1jbTl0SUZ3aUxpNHZhVzUwWlhKbVlXTmxYQ0k3WEhKY2JseHlYRzVtZFc1amRHbHZiaUJ5WlhOd2IyNXpaU2hjY2x4dUlDQWdJSEpsY3pvZ2QzZ3VVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ0I4SUhkNExsVndiRzloWkVacGJHVlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFzWEhKY2JpQWdJQ0J2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1SUh3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0c1hISmNiaUFnSUNCdFpYUm9iMlE2SUZ3aWNtVnhkV1Z6ZEZ3aUlId2dYQ0oxY0d4dllXUkdhV3hsWENKY2NseHVLVG9nWVc1NUlIdGNjbHh1SUNBZ0lHbG1JQ2h5WlhNdWMzUmhkSFZ6UTI5a1pTQTlQVDBnTWpBd0tTQjdYSEpjYmx4eVhHNGdJQ0FnSUNBZ0lDOHZJT1dGdk9XdXVYVndiRzloWkVacGJHWG92NVRsbTU3bm1vUnlaWE11WkdGMFllV1ByK2lEdmVhWXIrV3RsK2VzcHVTNHNseHlYRzRnSUNBZ0lDQWdJR2xtS0hSNWNHVnZaaUJ5WlhNdVpHRjBZU0E5UFQwZ1hDSnpkSEpwYm1kY0lpa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBjbmtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVnpMbVJoZEdFZ1BTQktVMDlPTG5CaGNuTmxLSEpsY3k1a1lYUmhLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWW9iMkpxTG1OaGRHTm9SWEp5YjNJcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWlNrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWeWNtOXlTR0Z1Wkd4bGNpNXNiMmRwWTBWeWNtOXlLRzlpYWl3Z2NtVnpLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200N1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQWdJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSXVaVzVrS0c5aWFpazdYSEpjYmx4eVhHNGdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY3ViRzluYVc1VWNtbG5aMlZ5SVNoeVpYTXVaR0YwWVNrZ0ppWWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDQWhQVDBnZFc1a1pXWnBibVZrSUNZbUlHOWlhaTV5WlV4dloybHVRMjkxYm5RZ1BDQmpiMjVtYVdjdWNtVk1iMmRwYmt4cGJXbDBJU2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbm1idmx2WlhtZ0lIbHBMSG1sWWp2dkl6a3VKVHBoNDNvcjVYbXJLSG1sYkRrdUkzb3RvWG92NGZwaFkzbnZhNWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2MyVnpjMmx2YmsxaGJtRm5aWEl1WkdWc1UyVnpjMmx2YmlncE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaHRaWFJvYjJRZ1BUMDlJRndpY21WeGRXVnpkRndpS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWEYxWlhOMFNHRnVaR3hsY2k1eVpYRjFaWE4wS0c5aWFpQmhjeUJKVW1WeGRXVnpkRTl3ZEdsdmJpazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppaHRaWFJvYjJRZ1BUMDlJRndpZFhCc2IyRmtSbWxzWlZ3aUtTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhGMVpYTjBTR0Z1Wkd4bGNpNTFjR3h2WVdSR2FXeGxLRzlpYWlCaGN5QkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOdmJtWnBaeTV6ZFdOalpYTnpWSEpwWjJkbGNpaHlaWE11WkdGMFlTa3BJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNW82bDVZK2o2TCtVNVp1ZTVvaVE1WXFmNTZDQlhISmNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnlaV0ZzUkdGMFlUb2djM1J5YVc1bklId2dTVUZ1ZVU5aWFtVmpkQ0I4SUVGeWNtRjVRblZtWm1WeUlEMGdYQ0pjSWp0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZEhKNUlIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsWVd4RVlYUmhJRDBnWTI5dVptbG5Mbk4xWTJObGMzTkVZWFJoS0hKbGN5NWtZWFJoS1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2loY0lrWjFibU4wYVc5dUlITjFZMk5sYzNORVlYUmhJRzlqWTNWeUlHVnljbTl5T2lCY0lpQXJJR1VwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtS0NFb2IySnFJR0Z6SUVsU1pYRjFaWE4wVDNCMGFXOXVLUzV1YjBOaFkyaGxSbXhoYzJncElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SU9XbWd1YWVuT1M0dXVTNmh1Uy9uZWl2Z2VtaHRlbWRvdVM0amVtWHF1ZURnZSs4ak9XSW1lUzRqZVdibnVpd2crKzhqT1dQcXVhWXIrZThrK1d0bU9hY2dPYVdzT2FWc09hTnJ1KzhqT1craGVTNGkrYXNvZWkvbStXRnBlV0dqZWVVcUZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUlHOWlhaTV6ZFdOalpYTnpJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOWlhaTV6ZFdOalpYTnpLSEpsWVd4RVlYUmhLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxZV3hFWVhSaE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJT2U4aytXdG1PV3RtT1dDcUZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVdOb1pVMWhibUZuWlhJdWMyVjBLRzlpYWl3Z2NtVmhiRVJoZEdFcE8xeHlYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJT2FPcGVXUG8raS9sT1dibnVXa3NlaTBwZWVnZ1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlodlltb3VZMkYwWTJoRmNuSnZjaWtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJRzF6WnlBOUlHVnljbTl5U0dGdVpHeGxjaTVuWlhSRmNuSnZjazF6WnloeVpYTXBPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRzF6Wnk1amIyNTBaVzUwS1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWeWNtOXlTR0Z1Wkd4bGNpNXNiMmRwWTBWeWNtOXlLRzlpYWl3Z2NtVnpLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUgwZ1pXeHpaU0I3WEhKY2JpQWdJQ0FnSUNBZ0x5OGdhSFIwY0hQb3Y1VGxtNTduaXJibWdJSG5vSUhwblo0eU1EQmNjbHh1SUNBZ0lDQWdJQ0JwWmlodlltb3VZMkYwWTJoRmNuSnZjaWtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9jbVZ6TG5OMFlYUjFjME52WkdVdWRHOVRkSEpwYm1jb0tTazdYSEpjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdaWEp5YjNKSVlXNWtiR1Z5TG14dloybGpSWEp5YjNJb2IySnFMQ0J5WlhNcE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJSDFjY2x4dWZWeHlYRzVjY2x4dVpYaHdiM0owSUdSbFptRjFiSFFnY21WemNHOXVjMlU3WEhKY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcclxudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcclxudmFyIGVycm9ySGFuZGxlcl8xID0gcmVxdWlyZShcIi4vZXJyb3JIYW5kbGVyXCIpO1xyXG52YXIgZHVyYXRpb25SZXBvcnRlcl8xID0gcmVxdWlyZShcIi4vZHVyYXRpb25SZXBvcnRlclwiKTtcclxudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcclxudmFyIGNoZWNrU2Vzc2lvblByb21pc2UgPSBudWxsO1xyXG5mdW5jdGlvbiBjaGVja1Nlc3Npb24oKSB7XHJcbiAgICBpZiAoIWNoZWNrU2Vzc2lvblByb21pc2UpIHtcclxuICAgICAgICBjaGVja1Nlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInd4LmNoZWNrU2Vzc2lvbigpXCIpO1xyXG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgd3guY2hlY2tTZXNzaW9uKHtcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoJ3d4X2NoZWNrU2Vzc2lvbicsIHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBjaGVja1Nlc3Npb25Qcm9taXNlO1xyXG59XHJcbmZ1bmN0aW9uIGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSB7XHJcbiAgICBpZiAoIXN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgbmV3IERhdGUoKS5nZXRUaW1lKCkgPiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUpIHtcclxuICAgICAgICBkZWxTZXNzaW9uKCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tMb2dpbigpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgaWYgKGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSkge1xyXG4gICAgICAgICAgICBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIGRvTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbnZhciBsb2dpblByb21pc2UgPSBudWxsO1xyXG5mdW5jdGlvbiBkb0xvZ2luKCkge1xyXG4gICAgaWYgKCFsb2dpblByb21pc2UpIHtcclxuICAgICAgICBsb2dpblByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIGxvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbG9naW5Qcm9taXNlO1xyXG59XHJcbmZ1bmN0aW9uIGxvZ2luKCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnd3gubG9naW4nKTtcclxuICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICB3eC5sb2dpbih7XHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvZGUyU2Vzc2lvbihyZXMuY29kZSkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiBcIuivt+eojeWQjumHjeivlVtjb2RlIOiOt+WPluWksei0pV1cIiB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydCgnd3hfbG9naW4nLCBzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogcmVzLmVyck1zZyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gc2V0U2Vzc2lvbihzZXNzaW9uKSB7XHJcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSBzZXNzaW9uO1xyXG4gICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XHJcbiAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkpIHtcclxuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWU7XHJcbiAgICAgICAgd3guc2V0U3RvcmFnZSh7XHJcbiAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5LFxyXG4gICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgd3guc2V0U3RvcmFnZSh7XHJcbiAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lLFxyXG4gICAgICAgIGRhdGE6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvblxyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gY29kZTJTZXNzaW9uKGNvZGUpIHtcclxuICAgIHZhciBkYXRhO1xyXG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgZGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEgfHwge307XHJcbiAgICB9XHJcbiAgICBkYXRhW2NvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZV0gPSBjb2RlO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICB3eC5yZXF1ZXN0KHtcclxuICAgICAgICAgICAgdXJsOiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQuZm9ybWF0KGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi51cmwpLFxyXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5tZXRob2QgfHwgJ0dFVCcsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5yZXBvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnJlcG9ydCwgc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnN1Y2Nlc3MocmVzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSBzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eC5zZXRTdG9yYWdlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZ2V0RXJyb3JNc2cocmVzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogXCLor7fnqI3lkI7ph43or5VcIiB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogXCLor7fnqI3lkI7ph43or5VcIiB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gZGVsU2Vzc2lvbigpIHtcclxuICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9ICcnO1xyXG4gICAgd3gucmVtb3ZlU3RvcmFnZSh7XHJcbiAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXHJcbiAgICB9KTtcclxuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xyXG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IEluZmluaXR5O1xyXG4gICAgICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xyXG4gICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIG1haW4oKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHJldHVybiBjaGVja0xvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBjaGVja1Nlc3Npb24oKTtcclxuICAgICAgICB9LCBmdW5jdGlvbiAoX2EpIHtcclxuICAgICAgICAgICAgdmFyIHRpdGxlID0gX2EudGl0bGUsIGNvbnRlbnQgPSBfYS5jb250ZW50O1xyXG4gICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmRvRXJyb3IodGl0bGUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH0pO1xyXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChfYSkge1xyXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBfYS50aXRsZSwgY29udGVudCA9IF9hLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZG9FcnJvcih0aXRsZSwgY29udGVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogdGl0bGUsIGNvbnRlbnQ6IGNvbnRlbnQgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSB7XHJcbiAgICBtYWluOiBtYWluLFxyXG4gICAgc2V0U2Vzc2lvbjogc2V0U2Vzc2lvbixcclxuICAgIGRlbFNlc3Npb246IGRlbFNlc3Npb25cclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJWemMybHZiazFoYm1GblpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDNObGMzTnBiMjVOWVc1aFoyVnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFVRXNNRU5CUVc5RE8wRkJRM0JETERCRFFVRnZRenRCUVVOd1F5d3JRMEZCZVVNN1FVRkRla01zZFVSQlFXbEVPMEZCUTJwRUxHMUVRVUUyUXp0QlFVYzNReXhKUVVGSkxHMUNRVUZ0UWl4SFFVRlJMRWxCUVVrc1EwRkJRenRCUVVWd1F5eFRRVUZUTEZsQlFWazdTVUZEYWtJc1NVRkJTU3hEUVVGRExHMUNRVUZ0UWl4RlFVRkZPMUZCUTNSQ0xHMUNRVUZ0UWl4SFFVRkhMRWxCUVVrc1QwRkJUeXhEUVVGRExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdXVUZET1VNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eHRRa0ZCYlVJc1EwRkJReXhEUVVGRE8xbEJRMnBETEVsQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZEYmtNc1JVRkJSU3hEUVVGRExGbEJRVmtzUTBGQlF6dG5Ra0ZEV2l4UFFVRlBPMjlDUVVWSUxFOUJRVThzVDBGQlR5eEZRVUZGTEVOQlFVTTdaMEpCUTNKQ0xFTkJRVU03WjBKQlEwUXNTVUZCU1R0dlFrRkZRU3hWUVVGVkxFVkJRVVVzUTBGQlF6dHZRa0ZEWWl4UFFVRlBMRTlCUVU4c1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF6dDNRa0ZEYkVJc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dHZRa0ZEY2tJc1EwRkJReXhGUVVGRkxGVkJRVU1zUjBGQlVUdDNRa0ZEVWl4UFFVRlBMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHZRa0ZEZGtJc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlExQXNRMEZCUXp0blFrRkRSQ3hSUVVGUk8yOUNRVU5LTEVsQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdiMEpCUTJwRExEQkNRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNSVUZCUlN4TFFVRkxMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03WjBKQlF6TkVMRU5CUVVNN1lVRkRTaXhEUVVGRExFTkJRVUU3VVVGRFRpeERRVUZETEVOQlFVTXNRMEZCUVR0TFFVTk1PMGxCUTBRc1QwRkJUeXh0UWtGQmJVSXNRMEZCUXp0QlFVTXZRaXhEUVVGRE8wRkJSMFFzVTBGQlV5eHpRa0ZCYzBJN1NVRkRNMElzU1VGQlNTeERRVUZETEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xRkJSV3BDTEU5QlFVOHNTVUZCU1N4RFFVRkJPMHRCUTJRN1NVRkRSQ3hKUVVGSkxHZENRVUZOTEVOQlFVTXNhVUpCUVdsQ0xFbEJRVWtzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1IwRkJSeXhuUWtGQlRTeERRVUZETEdGQlFXRXNSVUZCUlR0UlFVVjZSU3hWUVVGVkxFVkJRVVVzUTBGQlF6dFJRVU5pTEU5QlFVOHNTVUZCU1N4RFFVRkJPMHRCUTJRN1NVRkRSQ3hQUVVGUExFdEJRVXNzUTBGQlFUdEJRVU5vUWl4RFFVRkRPMEZCUlVRc1UwRkJVeXhWUVVGVk8wbEJRMllzVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xRkJReTlDTEVsQlFVa3NjMEpCUVhOQ0xFVkJRVVVzUlVGQlJUdFpRVVV4UWl4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4SFFVRkhMRWxCUVVrc1EwRkJRenRaUVVOb1F5eFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenRuUWtGRGJFSXNUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenRaUVVOeVFpeERRVUZETEVWQlFVVXNWVUZCUXl4SFFVRlJPMmRDUVVOU0xFOUJRVThzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNaQ0xFTkJRVU1zUTBGQlF5eERRVUZCTzFOQlEwdzdZVUZCVFR0WlFVVklMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03VTBGRGNFSTdTVUZEVEN4RFFVRkRMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGSFJDeEpRVUZKTEZsQlFWa3NSMEZCVVN4SlFVRkpMRU5CUVVNN1FVRkZOMElzVTBGQlV5eFBRVUZQTzBsQlExb3NTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSVHRSUVVObUxGbEJRVmtzUjBGQlJ5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xbEJRM1pETEV0QlFVc3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenRuUWtGRFZDeFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRPMmRDUVVOd1FpeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTNKQ0xFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4VlFVRkRMRWRCUVVjN1owSkJRMVFzV1VGQldTeEhRVUZITEVsQlFVa3NRMEZCUXp0blFrRkRjRUlzVDBGQlR5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRka0lzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEVUN4RFFVRkRMRU5CUVVNc1EwRkJRVHRMUVVOTU8wbEJRMFFzVDBGQlR5eFpRVUZaTEVOQlFVTTdRVUZEZUVJc1EwRkJRenRCUVVWRUxGTkJRVk1zUzBGQlN6dEpRVU5XTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzFGQlEzaENMRWxCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1VVRkRia01zUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXp0WlFVTk1MRTlCUVU4c1dVRkJReXhIUVVGSE8yZENRVU5RTEVsQlFVa3NSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSVHR2UWtGRFZpeFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dDNRa0ZEZUVJc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dHZRa0ZEY2tJc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFVTXNSMEZCUnp0M1FrRkRWQ3hQUVVGUExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0dlFrRkRka0lzUTBGQlF5eERRVUZETEVOQlFVRTdhVUpCUTB3N2NVSkJRVTA3YjBKQlEwZ3NUMEZCVHl4TlFVRk5MRU5CUVVNc1JVRkJReXhMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEZOQlFWTXNSVUZCUlN4clFrRkJhMElzUlVGQlF5eERRVUZETEVOQlFVTTdhVUpCUTJwRk8xbEJRMHdzUTBGQlF6dFpRVU5FTEZGQlFWRTdaMEpCUTBvc1NVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRuUWtGRGFrTXNNRUpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNSVUZCUlN4TFFVRkxMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGNFUXNRMEZCUXp0WlFVTkVMRWxCUVVrc1dVRkJReXhIUVVGSE8yZENRVU5LTEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVNc1MwRkJTeXhGUVVGRkxFMUJRVTBzUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4RFFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFTkJRVU03V1VGRE1VUXNRMEZCUXp0VFFVTktMRU5CUVVNc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRk5CUVZNc1ZVRkJWU3hEUVVGRExFOUJRV1U3U1VGREwwSXNaMEpCUVUwc1EwRkJReXhQUVVGUExFZEJRVWNzVDBGQlR5eERRVUZETzBsQlJYcENMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRWRCUVVjc1NVRkJTU3hEUVVGRE8wbEJSV2hETEVsQlFVa3NaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4blFrRkJUU3hEUVVGRExHZENRVUZuUWl4RlFVRkZPMUZCUTNKRUxHZENRVUZOTEVOQlFVTXNZVUZCWVN4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNRMEZCUXp0UlFVTjJSU3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFsQlExWXNSMEZCUnl4RlFVRkZMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENPMWxCUXpWQ0xFbEJRVWtzUlVGQlJTeE5RVUZOTEVOQlFVTXNaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU03VTBGRGNrTXNRMEZCUXl4RFFVRkJPMHRCUTB3N1NVRkRSQ3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFGQlExWXNSMEZCUnl4RlFVRkZMR2RDUVVGTkxFTkJRVU1zVjBGQmNVSTdVVUZEYWtNc1NVRkJTU3hGUVVGRkxHZENRVUZOTEVOQlFVTXNUMEZCVHp0TFFVTjJRaXhEUVVGRExFTkJRVU03UVVGRFVDeERRVUZETzBGQlJVUXNVMEZCVXl4WlFVRlpMRU5CUVVNc1NVRkJXVHRKUVVNNVFpeEpRVUZKTEVsQlFWTXNRMEZCUXp0SlFVVmtMRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRMnBFTEVsQlFVa3NSMEZCUnl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0TFFVTjBRenRUUVVGTk8xRkJRMGdzU1VGQlNTeEhRVUZITEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTTdTMEZETVVNN1NVRkRSQ3hKUVVGSkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1VVRkJVeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzBsQlJUVkRMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTXZRaXhKUVVGSkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8xRkJRMnBETEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNN1dVRkRVQ3hIUVVGSExFVkJRVVVzZDBKQlFXTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRPMWxCUTNCRUxFbEJRVWtzVFVGQlFUdFpRVU5LTEUxQlFVMHNSVUZCUlN4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZOTEVsQlFVa3NTMEZCU3p0WlFVTTFReXhQUVVGUExGbEJRVU1zUjBGQmIwTTdaMEpCUTNoRExFbEJRVWtzUjBGQlJ5eERRVUZETEZWQlFWVXNTMEZCU3l4SFFVRkhMRVZCUVVVN2IwSkJSWGhDTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeEZRVUZGTzNkQ1FVTTNRaXhKUVVGSkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8zZENRVU12UWl3d1FrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeEZRVUZGTEV0QlFVc3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRVHR4UWtGRGJrVTdiMEpCUlVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzI5Q1FVTllMRWxCUVVrN2QwSkJRMEVzUTBGQlF5eEhRVUZITEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN2NVSkJRemxETzI5Q1FVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8zRkNRVU5ZTzI5Q1FVVkVMRWxCUVVrc1EwRkJReXhGUVVGRk8zZENRVU5JTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUTBGQlF6dDNRa0ZGYmtJc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1IwRkJSeXhKUVVGSkxFTkJRVU03ZDBKQlJXaERMRWxCUVVrc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1NVRkJTU3huUWtGQlRTeERRVUZETEdkQ1FVRm5RaXhGUVVGRk96UkNRVU55UkN4blFrRkJUU3hEUVVGRExHRkJRV0VzUjBGQlJ5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExHZENRVUZOTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU03TkVKQlEzWkZMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU03WjBOQlExWXNSMEZCUnl4RlFVRkZMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENPMmREUVVNMVFpeEpRVUZKTEVWQlFVVXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZET3paQ1FVTnlReXhEUVVGRExFTkJRVUU3ZVVKQlEwdzdkMEpCUTBRc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF6czBRa0ZEVml4SFFVRkhMRVZCUVVVc1owSkJRVTBzUTBGQlF5eFhRVUZYT3pSQ1FVTjJRaXhKUVVGSkxFVkJRVVVzWjBKQlFVMHNRMEZCUXl4UFFVRlBPM2xDUVVOMlFpeERRVUZETEVOQlFVTTdkMEpCUTBnc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dHhRa0ZEY0VJN2VVSkJRVTA3ZDBKQlEwZ3NUMEZCVHl4TlFVRk5MRU5CUVVNc2MwSkJRVmtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenR4UWtGRGFFUTdhVUpCUTBvN2NVSkJRVTA3YjBKQlEwZ3NUMEZCVHl4TlFVRk5MRU5CUVVNc1JVRkJReXhMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEZOQlFWTXNSVUZCUlN4UFFVRlBMRVZCUVVNc1EwRkJReXhEUVVGRE8ybENRVU4wUkR0WlFVTk1MRU5CUVVNN1dVRkRSQ3hSUVVGUk8xbEJRMUlzUTBGQlF6dFpRVU5FTEVsQlFVa3NSVUZCUlR0blFrRkRSaXhQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEV0QlFVc3NSVUZCUlN4TlFVRk5MRVZCUVVVc1UwRkJVeXhGUVVGRkxFOUJRVThzUlVGQlF5eERRVUZETEVOQlFVTTdXVUZEZGtRc1EwRkJRenRUUVVOS0xFTkJRVU1zUTBGQlFUdEpRVU5PTEVOQlFVTXNRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVkRUxGTkJRVk1zVlVGQlZUdEpRVU5tTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU53UWl4RlFVRkZMRU5CUVVNc1lVRkJZU3hEUVVGRE8xRkJRMklzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1YwRkJjVUk3UzBGRGNFTXNRMEZCUXl4RFFVRkRPMGxCUTBnc1NVRkJTU3huUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhKUVVGSkxHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVU3VVVGRGNrUXNaMEpCUVUwc1EwRkJReXhoUVVGaExFZEJRVWNzVVVGQlVTeERRVUZETzFGQlEyaERMRVZCUVVVc1EwRkJReXhoUVVGaExFTkJRVU03V1VGRFlpeEhRVUZITEVWQlFVVXNaMEpCUVUwc1EwRkJReXhuUWtGQlowSTdVMEZETDBJc1EwRkJReXhEUVVGQk8wdEJRMHc3UVVGRFRDeERRVUZETzBGQlJVUXNVMEZCVXl4SlFVRkpPMGxCUTFRc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5PMUZCUXk5Q0xFOUJRVThzVlVGQlZTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNKQ0xFOUJRVThzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUVR0UlFVTjRSU3hEUVVGRExFVkJRVVVzVlVGQlF5eEZRVUZuUWp0blFrRkJaaXhuUWtGQlN5eEZRVUZGTEc5Q1FVRlBPMWxCUTJZc2MwSkJRVmtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8xbEJRM0pETEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVNc1MwRkJTeXhQUVVGQkxFVkJRVVVzVDBGQlR5eFRRVUZCTEVWQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNCRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTktMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRGNrSXNRMEZCUXl4RlFVRkZMRlZCUVVNc1JVRkJaMEk3WjBKQlFXWXNaMEpCUVVzc1JVRkJSU3h2UWtGQlR6dFpRVU5tTEhOQ1FVRlpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0WlFVTnlReXhQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEV0QlFVc3NUMEZCUVN4RlFVRkZMRTlCUVU4c1UwRkJRU3hGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU53UXl4RFFVRkRMRU5CUVVNc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMR3RDUVVGbE8wbEJRMWdzU1VGQlNTeE5RVUZCTzBsQlEwb3NWVUZCVlN4WlFVRkJPMGxCUTFZc1ZVRkJWU3haUVVGQk8wTkJRMklzUTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnpkR0YwZFhNZ1puSnZiU0FuTGk0dmMzUnZjbVV2YzNSaGRIVnpKMXh5WEc1cGJYQnZjblFnWTI5dVptbG5JR1p5YjIwZ0p5NHVMM04wYjNKbEwyTnZibVpwWnlkY2NseHVhVzF3YjNKMElHVnljbTl5U0dGdVpHeGxjaUJtY205dElDY3VMMlZ5Y205eVNHRnVaR3hsY2lkY2NseHVhVzF3YjNKMElHUjFjbUYwYVc5dVVtVndiM0owWlhJZ1puSnZiU0FuTGk5a2RYSmhkR2x2YmxKbGNHOXlkR1Z5SjF4eVhHNXBiWEJ2Y25RZ2NtVnhkV1Z6ZEVoaGJtUnNaWElnWm5KdmJTQW5MaTl5WlhGMVpYTjBTR0Z1Wkd4bGNpZGNjbHh1WEhKY2JpOHFJT2VVbitXUnZlV1JxT2FjbitXR2hlV1BxdVdCbXVTNGdPYXNvZWVhaEdOb1pXTnJVMlZ6YzJsdmJpQXFMMXh5WEc1c1pYUWdZMmhsWTJ0VFpYTnphVzl1VUhKdmJXbHpaVG9nWVc1NUlEMGdiblZzYkR0Y2NseHVYSEpjYm1aMWJtTjBhVzl1SUdOb1pXTnJVMlZ6YzJsdmJpZ3BJSHRjY2x4dUlDQWdJR2xtSUNnaFkyaGxZMnRUWlhOemFXOXVVSEp2YldselpTa2dlMXh5WEc0Z0lDQWdJQ0FnSUdOb1pXTnJVMlZ6YzJsdmJsQnliMjFwYzJVZ1BTQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1Ykc5bktGd2lkM2d1WTJobFkydFRaWE56YVc5dUtDbGNJaWs3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElITjBZWEowSUQwZ2JtVjNJRVJoZEdVb0tTNW5aWFJVYVcxbEtDazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIZDRMbU5vWldOclUyVnpjMmx2YmloN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkV05qWlhOektDa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT2VadStXOWxlYUFnZWFjaWVhVmlPKzhqT1M0bE9XY3FPYWNyT2VVbitXUnZlV1JxT2FjbitXR2hlYVhvT21odStXR2plYWpnT21xak9TNmhseHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUxGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabUZwYkNncElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RG5tYnZsdlpYbWdJSG92NGZtbko5Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrWld4VFpYTnphVzl1S0NrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1J2VEc5bmFXNG9LUzUwYUdWdUtDZ3BJRDArSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvS1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5TENBb2NtVnpPaUJoYm5rcFBUNTdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2NtVnpLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwc1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjF3YkdWMFpTZ3BJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJtUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrZFhKaGRHbHZibEpsY0c5eWRHVnlMbkpsY0c5eWRDZ25kM2hmWTJobFkydFRaWE56YVc5dUp5d2djM1JoY25Rc0lHVnVaQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdJQ0FnSUgwcFhISmNiaUFnSUNBZ0lDQWdmU2xjY2x4dUlDQWdJSDFjY2x4dUlDQWdJSEpsZEhWeWJpQmphR1ZqYTFObGMzTnBiMjVRY205dGFYTmxPMXh5WEc1OVhISmNibHh5WEc0dktpRGxpS1RtbHExelpYTnphVzl1NXBpdjVaQ201TGk2NTZtNjVvaVc1YmV5NkwrSDVweWZJQ292WEhKY2JtWjFibU4wYVc5dUlHbHpVMlZ6YzJsdmJrVjRjR2x5WlU5eVJXMXdkSGtvS1NCN1hISmNiaUFnSUNCcFppQW9JWE4wWVhSMWN5NXpaWE56YVc5dUtTQjdYSEpjYmlBZ0lDQWdJQ0FnTHk4ZzVhYUM1cDZjNTd5VDVhMlk1TGl0NXJLaDVweUpjMlZ6YzJsdmJseHlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBjblZsWEhKY2JpQWdJQ0I5WEhKY2JpQWdJQ0JwWmlBb1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVlVhVzFsSUNZbUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BJRDRnYzNSaGRIVnpMbk5sYzNOcGIyNUZlSEJwY21VcElIdGNjbHh1SUNBZ0lDQWdJQ0F2THlEbHBvTG1ucHptbklub3JyN252YTdtbkt6bG5MQnpaWE56YVc5dTU3eVQ1YTJZNXBlMjZaZTA3N3lNNUxpVTU3eVQ1YTJZNXBlMjZaZTA1YmV5NVlpd1hISmNiaUFnSUNBZ0lDQWdaR1ZzVTJWemMybHZiaWdwTzF4eVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxYSEpjYmlBZ0lDQjlYSEpjYmlBZ0lDQnlaWFIxY200Z1ptRnNjMlZjY2x4dWZWeHlYRzVjY2x4dVpuVnVZM1JwYjI0Z1kyaGxZMnRNYjJkcGJpZ3BJSHRjY2x4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hISmNiaUFnSUNBZ0lDQWdhV1lnS0dselUyVnpjMmx2YmtWNGNHbHlaVTl5Ulcxd2RIa29LU2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbXNxSG1uSW5ubWJ2cG1ZYm1nSUh2dkl6a3VJM3BuSURvcG9IbGhvMWphR1ZqYTFObGMzTnBiMjVjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1Wm1sbkxtUnZUbTkwUTJobFkydFRaWE56YVc5dUlEMGdkSEoxWlR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1J2VEc5bmFXNG9LUzUwYUdWdUtDZ3BJRDArSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0NrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUgwc0lDaHlaWE02SUdGdWVTazlQbnRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9jbVZ6S1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlNsY2NseHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG52SlBsclpqa3VLM21uSWx6WlhOemFXOXU1TGlVNXB5cTZMK0g1cHlmWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnZlNsY2NseHVmVnh5WEc1Y2NseHVMeW9nNTVtNzZabUc1cldCNTZpTDU1cUVjSEp2YldselpTQXFMMXh5WEc1c1pYUWdiRzluYVc1UWNtOXRhWE5sT2lCaGJua2dQU0J1ZFd4c08xeHlYRzVjY2x4dVpuVnVZM1JwYjI0Z1pHOU1iMmRwYmlncElIdGNjbHh1SUNBZ0lHbG1JQ2doYkc5bmFXNVFjbTl0YVhObEtTQjdYSEpjYmlBZ0lDQWdJQ0FnYkc5bmFXNVFjbTl0YVhObElEMGdibVYzSUZCeWIyMXBjMlVvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCc2IyZHBiaWdwTG5Sb1pXNG9LQ2tnUFQ0Z2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiRzluYVc1UWNtOXRhWE5sSUQwZ2JuVnNiRHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSDBwTG1OaGRHTm9LQ2h5WlhNcElEMCtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4dloybHVVSEp2YldselpTQTlJRzUxYkd3N1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0hKbGN5azdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBPMXh5WEc0Z0lDQWdJQ0FnSUgwcFhISmNiaUFnSUNCOVhISmNiaUFnSUNCeVpYUjFjbTRnYkc5bmFXNVFjbTl0YVhObE8xeHlYRzU5WEhKY2JseHlYRzVtZFc1amRHbHZiaUJzYjJkcGJpZ3BJSHRjY2x4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hISmNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNXNiMmNvSjNkNExteHZaMmx1SnlrN1hISmNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2MzUmhjblFnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNjbHh1SUNBZ0lDQWdJQ0IzZUM1c2IyZHBiaWg3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSE4xWTJObGMzTW9jbVZ6S1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY21WekxtTnZaR1VwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjJSbE1sTmxjM05wYjI0b2NtVnpMbU52WkdVcExuUm9aVzRvS0NrZ1BUNGdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTZ3BPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBMbU5oZEdOb0tDaHlaWE1wSUQwK0lIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoeVpYTXBPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvZTNScGRHeGxPaUJjSXVlWnUrVzlsZVdrc2VpMHBWd2lMQ0JjSW1OdmJuUmxiblJjSWpvZ1hDTG9yN2ZucUkzbGtJN3BoNDNvcjVWYlkyOWtaU0RvanJmbGo1YmxwTEhvdEtWZFhDSjlLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHeGxkR1VvS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJtUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUjFjbUYwYVc5dVVtVndiM0owWlhJdWNtVndiM0owS0NkM2VGOXNiMmRwYmljc0lITjBZWEowTENCbGJtUXBPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQm1ZV2xzS0hKbGN5a2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaDdkR2wwYkdVNklGd2k1NW03NWIyVjVhU3g2TFNsWENJc0lGd2lZMjl1ZEdWdWRGd2lPaUJ5WlhNdVpYSnlUWE5uZlNrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQjlLVnh5WEc0Z0lDQWdmU2xjY2x4dWZWeHlYRzVjY2x4dVpuVnVZM1JwYjI0Z2MyVjBVMlZ6YzJsdmJpaHpaWE56YVc5dU9pQnpkSEpwYm1jcElIdGNjbHh1SUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ2MyVnpjMmx2Ymp0Y2NseHVJQ0FnSUM4dklPYU5vdVdibnVhZHBlZWFoSE5sYzNOcGIyN3Z2SXprdUkzcG5JRG9wb0hsaG8xamFHVmphMU5sYzNOcGIyNWNjbHh1SUNBZ0lHTnZibVpwWnk1a2IwNXZkRU5vWldOclUyVnpjMmx2YmlBOUlIUnlkV1U3WEhKY2JpQWdJQ0F2THlEbHBvTG1ucHptbklub3JyN252YTdtbkt6bG5MQnpaWE56YVc5dTZMK0g1cHlmNXBlMjZaZTBYSEpjYmlBZ0lDQnBaaUFvWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WVWFXMWxJQ1ltSUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFMyVjVLU0I3WEhKY2JpQWdJQ0FnSUNBZ2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1NBcklHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlR0Y2NseHVJQ0FnSUNBZ0lDQjNlQzV6WlhSVGRHOXlZV2RsS0h0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYTJWNU9pQmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVXRsZVN4Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlUb2dVM1J5YVc1bktITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxLVnh5WEc0Z0lDQWdJQ0FnSUgwcFhISmNiaUFnSUNCOVhISmNiaUFnSUNCM2VDNXpaWFJUZEc5eVlXZGxLSHRjY2x4dUlDQWdJQ0FnSUNCclpYazZJR052Ym1acFp5NXpaWE56YVc5dVRtRnRaU0JoY3lCemRISnBibWNzWEhKY2JpQWdJQ0FnSUNBZ1pHRjBZVG9nYzNSaGRIVnpMbk5sYzNOcGIyNWNjbHh1SUNBZ0lIMHBPMXh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCamIyUmxNbE5sYzNOcGIyNG9ZMjlrWlRvZ2MzUnlhVzVuS1NCN1hISmNiaUFnSUNCc1pYUWdaR0YwWVRvZ1lXNTVPMXh5WEc0Z0lDQWdMeThnWTI5a1pWUnZVMlZ6YzJsdmJpNWtZWFJoNXBTdjVveUI1WWU5NXBXd1hISmNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMbVJoZEdFZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHlYRzRnSUNBZ0lDQWdJR1JoZEdFZ1BTQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTVrWVhSaEtDazdYSEpjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHlYRzRnSUNBZ0lDQWdJR1JoZEdFZ1BTQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTVrWVhSaElIeDhJSHQ5TzF4eVhHNGdJQ0FnZlZ4eVhHNGdJQ0FnWkdGMFlWdGpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTVqYjJSbFRtRnRaU0ZkSUQwZ1kyOWtaVHRjY2x4dVhISmNiaUFnSUNCeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh5WEc0Z0lDQWdJQ0FnSUd4bGRDQnpkR0Z5ZENBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh5WEc0Z0lDQWdJQ0FnSUhkNExuSmxjWFZsYzNRb2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCMWNtdzZJSEpsY1hWbGMzUklZVzVrYkdWeUxtWnZjbTFoZENoamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNTFjbXdwTEZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaExGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCdFpYUm9iMlE2SUdOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxtMWxkR2h2WkNCOGZDQW5SMFZVSnl4Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYzNWalkyVnpjeWh5WlhNNklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h5WlhNdWMzUmhkSFZ6UTI5a1pTQTlQVDBnTWpBd0tTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGc2SUNYNXBlMjVMaUs1b3FsWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxuSmxjRzl5ZENrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWlc1a0lEMGdibVYzSUVSaGRHVW9LUzVuWlhSVWFXMWxLQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWEl1Y21Wd2IzSjBLR052Ym1acFp5NWpiMlJsVkc5VFpYTnphVzl1TG5KbGNHOXlkQ3dnYzNSaGNuUXNJR1Z1WkNsY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQnpJRDBnWENKY0lqdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGNua2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6SUQwZ1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVjM1ZqWTJWemN5aHlaWE11WkdGMFlTazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hNcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1JoZEhWekxuTmxjM05wYjI0Z1BTQnpPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlEbWphTGxtNTdtbmFYbm1vUnpaWE56YVc5dTc3eU01TGlONlp5QTZLYUI1WWFOWTJobFkydFRaWE56YVc5dVhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibVpwWnk1a2IwNXZkRU5vWldOclUyVnpjMmx2YmlBOUlIUnlkV1U3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklPV21ndWFlbk9hY2llaXV2dWU5cnVhY3JPV2NzSE5sYzNOcGIyN292NGZtbkovbWw3YnBsN1JjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlNBbUppQmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVXRsZVNrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNSaGRIVnpMbk5sYzNOcGIyNUZlSEJwY21VZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LU0FySUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIZDRMbk5sZEZOMGIzSmhaMlVvZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd0bGVUb2dZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZMWlhrc1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZVG9nVTNSeWFXNW5LSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsS1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2xjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCM2VDNXpaWFJUZEc5eVlXZGxLSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNU9ZVzFsTEZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjVjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0NrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaGxjbkp2Y2toaGJtUnNaWEl1WjJWMFJYSnliM0pOYzJjb2NtVnpLU2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0h0MGFYUnNaVG9nWENMbm1idmx2WlhscExIb3RLVmNJaXdnWENKamIyNTBaVzUwWENJNklGd2k2SyszNTZpTjVaQ082WWVONksrVlhDSjlLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHeGxkR1VvS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUgwc1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUdaaGFXdzZJQ2dwSUQwK0lIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2UzUnBkR3hsT2lCY0l1ZVp1K1c5bGVXa3NlaTBwVndpTENCY0ltTnZiblJsYm5SY0lqb2dYQ0xvcjdmbnFJM2xrSTdwaDQzb3I1VmNJbjBwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ2ZTbGNjbHh1SUNBZ0lIMHBYSEpjYm4xY2NseHVYSEpjYmk4cUlPYTRoZWVwdW5ObGMzTnBiMjRnS2k5Y2NseHVablZ1WTNScGIyNGdaR1ZzVTJWemMybHZiaWdwSUh0Y2NseHVJQ0FnSUhOMFlYUjFjeTV6WlhOemFXOXVJRDBnSnljN1hISmNiaUFnSUNCM2VDNXlaVzF2ZG1WVGRHOXlZV2RsS0h0Y2NseHVJQ0FnSUNBZ0lDQnJaWGs2SUdOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlNCaGN5QnpkSEpwYm1kY2NseHVJQ0FnSUgwcE8xeHlYRzRnSUNBZ2FXWWdLR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsVkdsdFpTQW1KaUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlV0bGVTa2dlMXh5WEc0Z0lDQWdJQ0FnSUhOMFlYUjFjeTV6WlhOemFXOXVSWGh3YVhKbElEMGdTVzVtYVc1cGRIazdYSEpjYmlBZ0lDQWdJQ0FnZDNndWNtVnRiM1psVTNSdmNtRm5aU2g3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR3RsZVRvZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVkxaWGxjY2x4dUlDQWdJQ0FnSUNCOUtWeHlYRzRnSUNBZ2ZWeHlYRzU5WEhKY2JseHlYRzVtZFc1amRHbHZiaUJ0WVdsdUtDa2dlMXh5WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2NseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyaGxZMnRNYjJkcGJpZ3BMblJvWlc0b0tDa2dQVDRnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZMjl1Wm1sbkxtUnZUbTkwUTJobFkydFRaWE56YVc5dUlEOGdVSEp2YldselpTNXlaWE52YkhabEtDa2dPaUJqYUdWamExTmxjM05wYjI0b0tWeHlYRzRnSUNBZ0lDQWdJSDBzSUNoN2RHbDBiR1VzSUdOdmJuUmxiblI5S1NBOVBpQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnljbTl5U0dGdVpHeGxjaTVrYjBWeWNtOXlLSFJwZEd4bExDQmpiMjUwWlc1MEtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2g3ZEdsMGJHVXNJR052Ym5SbGJuUjlLVHRjY2x4dUlDQWdJQ0FnSUNCOUtTNTBhR1Z1S0NncElEMCtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNjbHh1SUNBZ0lDQWdJQ0I5TENBb2UzUnBkR3hsTENCamIyNTBaVzUwZlNrOVBpQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnljbTl5U0dGdVpHeGxjaTVrYjBWeWNtOXlLSFJwZEd4bExDQmpiMjUwWlc1MEtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2g3ZEdsMGJHVXNJR052Ym5SbGJuUjlLVHRjY2x4dUlDQWdJQ0FnSUNCOUtWeHlYRzRnSUNBZ2ZTbGNjbHh1ZlZ4eVhHNWNjbHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdlMXh5WEc0Z0lDQWdiV0ZwYml4Y2NseHVJQ0FnSUhObGRGTmxjM05wYjI0c1hISmNiaUFnSUNCa1pXeFRaWE56YVc5dVhISmNibjFjY2x4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgZGVmYXVsdENvbmZpZyA9IHtcclxuICAgIHNlc3Npb25OYW1lOiBcInNlc3Npb25cIixcclxuICAgIGxvZ2luVHJpZ2dlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcbiAgICBjb2RlVG9TZXNzaW9uOiB7XHJcbiAgICAgICAgdXJsOiBcIlwiLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHsgfVxyXG4gICAgfSxcclxuICAgIHN1Y2Nlc3NUcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG4gICAgdXJsUGVyZml4OiBcIlwiLFxyXG4gICAgc3VjY2Vzc0RhdGE6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfSxcclxuICAgIGRvTm90Q2hlY2tTZXNzaW9uOiBmYWxzZSxcclxuICAgIGVycm9yVGl0bGU6IFwi5pON5L2c5aSx6LSlXCIsXHJcbiAgICBlcnJvckNvbnRlbnQ6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfSxcclxuICAgIHJlTG9naW5MaW1pdDogMyxcclxuICAgIGVycm9yQ2FsbGJhY2s6IG51bGwsXHJcbiAgICByZXBvcnRDR0k6IGZhbHNlLFxyXG4gICAgbW9ja0pzb246IGZhbHNlLFxyXG4gICAgZ2xvYmFsRGF0YTogZmFsc2UsXHJcbiAgICBzZXNzaW9uRXhwaXJlS2V5OiBcInNlc3Npb25FeHBpcmVLZXlcIlxyXG59O1xyXG5leHBvcnRzLmRlZmF1bHQgPSBkZWZhdWx0Q29uZmlnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMjl1Wm1sbkxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNOMGIzSmxMMk52Ym1acFp5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVWQkxFbEJRVTBzWVVGQllTeEhRVUZuUWp0SlFVTXZRaXhYUVVGWExFVkJRVVVzVTBGQlV6dEpRVU4wUWl4WlFVRlpPMUZCUTFJc1QwRkJUeXhMUVVGTExFTkJRVUU3U1VGRGFFSXNRMEZCUXp0SlFVTkVMR0ZCUVdFc1JVRkJSVHRSUVVOWUxFZEJRVWNzUlVGQlJTeEZRVUZGTzFGQlExQXNUMEZCVHl4RlFVRkZMR05CUVUwc1EwRkJRenRMUVVOdVFqdEpRVU5FTEdOQlFXTTdVVUZEVml4UFFVRlBMRWxCUVVrc1EwRkJRVHRKUVVObUxFTkJRVU03U1VGRFJDeFRRVUZUTEVWQlFVVXNSVUZCUlR0SlFVTmlMRmRCUVZjc1dVRkJReXhIUVVGUk8xRkJRMmhDTEU5QlFVOHNSMEZCUnl4RFFVRkJPMGxCUTJRc1EwRkJRenRKUVVORUxHbENRVUZwUWl4RlFVRkZMRXRCUVVzN1NVRkRlRUlzVlVGQlZTeEZRVUZGTEUxQlFVMDdTVUZEYkVJc1dVRkJXU3haUVVGRExFZEJRVkU3VVVGRGFrSXNUMEZCVHl4SFFVRkhMRU5CUVVFN1NVRkRaQ3hEUVVGRE8wbEJRMFFzV1VGQldTeEZRVUZGTEVOQlFVTTdTVUZEWml4aFFVRmhMRVZCUVVVc1NVRkJTVHRKUVVOdVFpeFRRVUZUTEVWQlFVVXNTMEZCU3p0SlFVTm9RaXhSUVVGUkxFVkJRVVVzUzBGQlN6dEpRVU5tTEZWQlFWVXNSVUZCUlN4TFFVRkxPMGxCUldwQ0xHZENRVUZuUWl4RlFVRkZMR3RDUVVGclFqdERRVU4yUXl4RFFVRkRPMEZCUlVZc2EwSkJRV1VzWVVGQllTeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhzZ1NVbHVhWFJQY0hScGIyNGdmU0JtY205dElDY3VMaTlwYm5SbGNtWmhZMlVuWEhKY2JseHlYRzVqYjI1emRDQmtaV1poZFd4MFEyOXVabWxuT2lCSlNXNXBkRTl3ZEdsdmJpQTlJSHRjY2x4dUlDQWdJSE5sYzNOcGIyNU9ZVzFsT2lCY0luTmxjM05wYjI1Y0lpeGNjbHh1SUNBZ0lHeHZaMmx1VkhKcFoyZGxjaWdwSUh0Y2NseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlZjY2x4dUlDQWdJSDBzWEhKY2JpQWdJQ0JqYjJSbFZHOVRaWE56YVc5dU9pQjdYSEpjYmlBZ0lDQWdJQ0FnZFhKc09pQmNJbHdpTEZ4eVhHNGdJQ0FnSUNBZ0lITjFZMk5sYzNNNklDZ3BQVDRnZTMxY2NseHVJQ0FnSUgwc1hISmNiaUFnSUNCemRXTmpaWE56VkhKcFoyZGxjaWdwSUh0Y2NseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RISjFaVnh5WEc0Z0lDQWdmU3hjY2x4dUlDQWdJSFZ5YkZCbGNtWnBlRG9nWENKY0lpeGNjbHh1SUNBZ0lITjFZMk5sYzNORVlYUmhLSEpsY3pvZ1lXNTVLU0I3WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMxeHlYRzRnSUNBZ2ZTeGNjbHh1SUNBZ0lHUnZUbTkwUTJobFkydFRaWE56YVc5dU9pQm1ZV3h6WlN4Y2NseHVJQ0FnSUdWeWNtOXlWR2wwYkdVNklGd2k1cE9ONUwyYzVhU3g2TFNsWENJc1hISmNiaUFnSUNCbGNuSnZja052Ym5SbGJuUW9jbVZ6T2lCaGJua3BJSHRjY2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21WelhISmNiaUFnSUNCOUxGeHlYRzRnSUNBZ2NtVk1iMmRwYmt4cGJXbDBPaUF6TEZ4eVhHNGdJQ0FnWlhKeWIzSkRZV3hzWW1GamF6b2diblZzYkN4Y2NseHVJQ0FnSUhKbGNHOXlkRU5IU1RvZ1ptRnNjMlVzWEhKY2JpQWdJQ0J0YjJOclNuTnZiam9nWm1Gc2MyVXNYSEpjYmlBZ0lDQm5iRzlpWVd4RVlYUmhPaUJtWVd4elpTeGNjbHh1SUNBZ0lDOHZJSE5sYzNOcGIyN2xuS2ptbkt6bG5MRG52SlBsclpqbm1vUnJaWGxjY2x4dUlDQWdJSE5sYzNOcGIyNUZlSEJwY21WTFpYazZJRndpYzJWemMybHZia1Y0Y0dseVpVdGxlVndpWEhKY2JuMDdYSEpjYmx4eVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCa1pXWmhkV3gwUTI5dVptbG5PMXh5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5leHBvcnRzLmRlZmF1bHQgPSB7XHJcbiAgICBzZXNzaW9uOiAnJyxcclxuICAgIHNlc3Npb25FeHBpcmU6IEluZmluaXR5XHJcbn07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMzUmhkSFZ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM04wYjNKbEwzTjBZWFIxY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTEd0Q1FVRmxPMGxCUTFnc1QwRkJUeXhGUVVGRkxFVkJRVms3U1VGRmNrSXNZVUZCWVN4RlFVRkZMRkZCUVd0Q08wTkJRemRDTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYSEpjYmlBZ0lDQnpaWE56YVc5dU9pQW5KeUJoY3lCemRISnBibWNzWEhKY2JpQWdJQ0F2THlCelpYTnphVzl1NkwrSDVweWY1NXFFNXBlMjZaZTA1NEs1WEhKY2JpQWdJQ0J6WlhOemFXOXVSWGh3YVhKbE9pQkpibVpwYm1sMGVTQmhjeUJ1ZFcxaVpYSmNjbHh1ZlNCaGN5QmhibmxjY2x4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5mdW5jdGlvbiBzaG93KHR4dCkge1xyXG4gICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICB0aXRsZTogdHlwZW9mIHR4dCA9PT0gJ2Jvb2xlYW4nID8gJ+WKoOi9veS4rScgOiB0eHQsXHJcbiAgICAgICAgaWNvbjogJ2xvYWRpbmcnLFxyXG4gICAgICAgIG1hc2s6IHRydWUsXHJcbiAgICAgICAgZHVyYXRpb246IDYwMDAwXHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBoaWRlKCkge1xyXG4gICAgd3guaGlkZVRvYXN0KHt9KTtcclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSB7XHJcbiAgICBzaG93OiBzaG93LFxyXG4gICAgaGlkZTogaGlkZVxyXG59O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzloWkdsdVp5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MWRHbHNMMnh2WVdScGJtY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeFRRVUZUTEVsQlFVa3NRMEZCUXl4SFFVRnhRanRKUVVNdlFpeEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTFRc1MwRkJTeXhGUVVGRkxFOUJRVThzUjBGQlJ5eExRVUZMTEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITzFGQlF6ZERMRWxCUVVrc1JVRkJSU3hUUVVGVE8xRkJRMllzU1VGQlNTeEZRVUZGTEVsQlFVazdVVUZEVml4UlFVRlJMRVZCUVVVc1MwRkJTenRMUVVOc1FpeERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc1UwRkJVeXhKUVVGSk8wbEJRMVFzUlVGQlJTeERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVOeVFpeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hKUVVGSkxFMUJRVUU3U1VGRFNpeEpRVUZKTEUxQlFVRTdRMEZEVUN4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWm5WdVkzUnBiMjRnYzJodmR5aDBlSFE2SUdKdmIyeGxZVzRnZkNCemRISnBibWNwSUh0Y2NseHVJQ0FnSUhkNExuTm9iM2RVYjJGemRDaDdYSEpjYmlBZ0lDQWdJQ0FnZEdsMGJHVTZJSFI1Y0dWdlppQjBlSFFnUFQwOUlDZGliMjlzWldGdUp5QS9JQ2ZsaXFEb3ZiM2t1SzBuSURvZ2RIaDBMRnh5WEc0Z0lDQWdJQ0FnSUdsamIyNDZJQ2RzYjJGa2FXNW5KeXhjY2x4dUlDQWdJQ0FnSUNCdFlYTnJPaUIwY25WbExGeHlYRzRnSUNBZ0lDQWdJR1IxY21GMGFXOXVPaUEyTURBd01GeHlYRzRnSUNBZ2ZTbGNjbHh1ZlZ4eVhHNWNjbHh1Wm5WdVkzUnBiMjRnYUdsa1pTZ3BJSHRjY2x4dUlDQWdJSGQ0TG1ocFpHVlViMkZ6ZENoN2ZTazdYSEpjYm4xY2NseHVYSEpjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjY2x4dUlDQWdJSE5vYjNjc1hISmNiaUFnSUNCb2FXUmxYSEpjYm4xY2NseHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcclxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5mdW5jdGlvbiBzZXRQYXJhbXModXJsLCBwYXJhbXMpIHtcclxuICAgIGlmICh1cmwgPT09IHZvaWQgMCkgeyB1cmwgPSBcIlwiOyB9XHJcbiAgICB2YXIgcXVlcnlTdHJpbmdJbmRleCA9IHVybC5pbmRleE9mKFwiP1wiKTtcclxuICAgIHZhciBrdnAgPSB7fTtcclxuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcclxuICAgICAgICB2YXIgb2xkUXVlcnlTdHJpbmdfMSA9IHVybC5zdWJzdHIocXVlcnlTdHJpbmdJbmRleCArIDEpLnNwbGl0KFwiJlwiKTtcclxuICAgICAgICBvbGRRdWVyeVN0cmluZ18xLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHtcclxuICAgICAgICAgICAgdmFyIGt2ID0gb2xkUXVlcnlTdHJpbmdfMVtpXS5zcGxpdChcIj1cIik7XHJcbiAgICAgICAgICAgIGt2cFtrdlswXV0gPSBrdlsxXTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGt2cCA9IF9fYXNzaWduKHt9LCBrdnAsIHBhcmFtcyk7XHJcbiAgICB2YXIgcXVlcnlTdHJpbmcgPSBPYmplY3Qua2V5cyhrdnApXHJcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIGtleSArIFwiPVwiICsgZW5jb2RlVVJJKGt2cFtrZXldKTtcclxuICAgIH0pXHJcbiAgICAgICAgLmpvaW4oXCImXCIpO1xyXG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RyaW5nSW5kZXggKyAxKSArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHVybCArIFwiP1wiICsgcXVlcnlTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0ge1xyXG4gICAgc2V0UGFyYW1zOiBzZXRQYXJhbXNcclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhKc0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNWMGFXd3ZkWEpzTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdRVUZCUVN4VFFVRlRMRk5CUVZNc1EwRkJReXhIUVVGblFpeEZRVUZGTEUxQlFXTTdTVUZCYUVNc2IwSkJRVUVzUlVGQlFTeFJRVUZuUWp0SlFVTXZRaXhKUVVGTkxHZENRVUZuUWl4SFFVRlhMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEYkVRc1NVRkJTU3hIUVVGSExFZEJRVkVzUlVGQlJTeERRVUZETzBsQlEyeENMRWxCUVVrc1owSkJRV2RDTEVsQlFVa3NRMEZCUXl4RlFVRkZPMUZCUTNaQ0xFbEJRVTBzWjBKQlFXTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVVnVSU3huUWtGQll5eERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRE8xbEJRM2hDTEVsQlFVMHNSVUZCUlN4SFFVRmhMR2RDUVVGakxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMnhFTEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRka0lzUTBGQlF5eERRVUZETEVOQlFVTTdTMEZEVGp0SlFVVkVMRWRCUVVjc1owSkJRVThzUjBGQlJ5eEZRVUZMTEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUlRGQ0xFbEJRVTBzVjBGQlZ5eEhRVUZITEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8xTkJReTlDTEVkQlFVY3NRMEZCUXl4VlFVRkJMRWRCUVVjN1VVRkRTaXhQUVVGVkxFZEJRVWNzVTBGQlNTeFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGSExFTkJRVU03U1VGRE0wTXNRMEZCUXl4RFFVRkRPMU5CUTBRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlJXWXNTVUZCU1N4blFrRkJaMElzU1VGQlNTeERRVUZETEVWQlFVVTdVVUZEZGtJc1QwRkJUeXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNSVUZCUlN4blFrRkJaMElzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4WFFVRlhMRU5CUVVNN1MwRkRMMFE3VTBGQlRUdFJRVU5JTEU5QlFVOHNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhYUVVGWExFTkJRVU03UzBGRGJFTTdRVUZEVEN4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeFRRVUZUTEZkQlFVRTdRMEZEV2l4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWm5WdVkzUnBiMjRnYzJWMFVHRnlZVzF6S0hWeWJEb2djM1J5YVc1bklEMGdYQ0pjSWl3Z2NHRnlZVzF6T2lCdlltcGxZM1FwSUh0Y2NseHVJQ0FnSUdOdmJuTjBJSEYxWlhKNVUzUnlhVzVuU1c1a1pYZzZJRzUxYldKbGNpQTlJSFZ5YkM1cGJtUmxlRTltS0Z3aVAxd2lLVHRjY2x4dUlDQWdJR3hsZENCcmRuQTZJR0Z1ZVNBOUlIdDlPMXh5WEc0Z0lDQWdhV1lnS0hGMVpYSjVVM1J5YVc1blNXNWtaWGdnUGowZ01Da2dlMXh5WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzlzWkZGMVpYSjVVM1J5YVc1bklEMGdkWEpzTG5OMVluTjBjaWh4ZFdWeWVWTjBjbWx1WjBsdVpHVjRJQ3NnTVNrdWMzQnNhWFFvWENJbVhDSXBPMXh5WEc0Z0lDQWdJQ0FnSUM4dklFQjBjeTFwWjI1dmNtVmNjbHh1SUNBZ0lDQWdJQ0J2YkdSUmRXVnllVk4wY21sdVp5NW1iM0pGWVdOb0tDaDRMQ0JwS1NBOVBpQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUd0Mk9pQnpkSEpwYm1kYlhTQTlJRzlzWkZGMVpYSjVVM1J5YVc1blcybGRMbk53YkdsMEtGd2lQVndpS1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYTNad1cydDJXekJkWFNBOUlHdDJXekZkTzF4eVhHNGdJQ0FnSUNBZ0lIMHBPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUd0MmNDQTlJSHN1TGk1cmRuQXNJQzR1TG5CaGNtRnRjMzA3WEhKY2JseHlYRzRnSUNBZ1kyOXVjM1FnY1hWbGNubFRkSEpwYm1jZ1BTQlBZbXBsWTNRdWEyVjVjeWhyZG5BcFhISmNiaUFnSUNBZ0lDQWdMbTFoY0NoclpYa2dQVDRnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZQ1I3YTJWNWZUMGtlMlZ1WTI5a1pWVlNTU2hyZG5CYmEyVjVYU2w5WUR0Y2NseHVJQ0FnSUNBZ0lDQjlLVnh5WEc0Z0lDQWdJQ0FnSUM1cWIybHVLRndpSmx3aUtUdGNjbHh1WEhKY2JpQWdJQ0JwWmlBb2NYVmxjbmxUZEhKcGJtZEpibVJsZUNBK1BTQXdLU0I3WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJDNXpkV0p6ZEhKcGJtY29NQ3dnY1hWbGNubFRkSEpwYm1kSmJtUmxlQ0FySURFcElDc2djWFZsY25sVGRISnBibWM3WEhKY2JpQWdJQ0I5SUdWc2MyVWdlMXh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIxY213Z0t5QmNJajljSWlBcklIRjFaWEo1VTNSeWFXNW5PMXh5WEc0Z0lDQWdmVnh5WEc1OVhISmNibHh5WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEhKY2JpQWdJQ0J6WlhSUVlYSmhiWE5jY2x4dWZUdGNjbHh1SWwxOSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2xvYWRpbmcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3V0aWwvdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCwyQ0FBMkMsMjVCOzs7Ozs7Ozs7Ozs7QUNaOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLCthOzs7Ozs7Ozs7Ozs7QUNOOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCwyQ0FBMkMsdW5EOzs7Ozs7Ozs7Ozs7QUNuQjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsdUJBQXVCLG1CQUFPLENBQUMsZ0VBQTBCO0FBQ3pEO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLHVjOzs7Ozs7Ozs7Ozs7QUNOOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCx1QkFBdUIsbUJBQU8sQ0FBQyxnRUFBMEI7QUFDekQ7QUFDQTtBQUNBLENBQUM7QUFDRCwyQ0FBMkMsK2tCOzs7Ozs7Ozs7Ozs7QUNOOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCx1QkFBdUIsbUJBQU8sQ0FBQyxnRUFBMEI7QUFDekQ7QUFDQTtBQUNBLENBQUM7QUFDRCwyQ0FBMkMsdWdCOzs7Ozs7Ozs7Ozs7QUNOOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCx1QkFBdUIsbUJBQU8sQ0FBQyxnRUFBMEI7QUFDekQ7QUFDQTtBQUNBLENBQUM7QUFDRCwyQ0FBMkMsdW1COzs7Ozs7Ozs7Ozs7QUNOOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxhQUFhLG1CQUFPLENBQUMscUNBQVk7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsMkNBQWU7QUFDdkMsbUJBQW1CLG1CQUFPLENBQUMsaURBQWtCO0FBQzdDLG1CQUFtQixtQkFBTyxDQUFDLGlEQUFrQjtBQUM3QyxjQUFjLG1CQUFPLENBQUMsdUNBQWE7QUFDbkMsbUJBQW1CLG1CQUFPLENBQUMsaURBQWtCO0FBQzdDLGtCQUFrQixtQkFBTyxDQUFDLCtDQUFpQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQywrc0M7Ozs7Ozs7Ozs7OztBQ25COUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxtMkY7Ozs7Ozs7Ozs7OztBQ3JDOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLDRDQUFnQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxta0U7Ozs7Ozs7Ozs7OztBQ3ZCOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLCtySjs7Ozs7Ozs7Ozs7O0FDOUQ5QjtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEMsZ0JBQWdCLG1CQUFPLENBQUMsOENBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsbW9FOzs7Ozs7Ozs7Ozs7QUNyQjlCO0FBQ2I7QUFDQTtBQUNBLGdEQUFnRCxPQUFPO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCxnQkFBZ0IsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDekMsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4QyxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDLG9CQUFvQixtQkFBTyxDQUFDLGtEQUFlO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLG9EQUFnQjtBQUM3Qyx1QkFBdUIsbUJBQU8sQ0FBQyx3REFBa0I7QUFDakQsd0JBQXdCLG1CQUFPLENBQUMsMERBQW1CO0FBQ25ELHlCQUF5QixtQkFBTyxDQUFDLDREQUFvQjtBQUNyRCxZQUFZLG1CQUFPLENBQUMsc0NBQWE7QUFDakMscUJBQXFCLG1CQUFPLENBQUMsb0RBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLG9CQUFvQjtBQUNsRDtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyx3QkFBd0I7QUFDMUQ7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQywyMmhCOzs7Ozs7Ozs7Ozs7QUMzTTlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4Qyx1QkFBdUIsbUJBQU8sQ0FBQyx3REFBa0I7QUFDakQscUJBQXFCLG1CQUFPLENBQUMsb0RBQWdCO0FBQzdDLHFCQUFxQixtQkFBTyxDQUFDLG9EQUFnQjtBQUM3Qyx5QkFBeUIsbUJBQU8sQ0FBQyw0REFBb0I7QUFDckQsdUJBQXVCLG1CQUFPLENBQUMsd0RBQWtCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLDI5TTs7Ozs7Ozs7Ozs7O0FDeEU5QjtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4QyxxQkFBcUIsbUJBQU8sQ0FBQyxvREFBZ0I7QUFDN0MseUJBQXlCLG1CQUFPLENBQUMsNERBQW9CO0FBQ3JELHVCQUF1QixtQkFBTyxDQUFDLHdEQUFrQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EsbUNBQW1DLCtDQUErQztBQUNsRjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSwrQkFBK0IsdUNBQXVDO0FBQ3RFO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG9DQUFvQztBQUN2RTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLCtCQUErQixvQ0FBb0M7QUFDbkU7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSwyQkFBMkIsaUNBQWlDO0FBQzVELFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsMkJBQTJCLGlDQUFpQztBQUM1RCxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxtL2tCOzs7Ozs7Ozs7Ozs7QUNqTjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QixLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1NUQ7Ozs7Ozs7Ozs7OztBQy9COUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQywyYzs7Ozs7Ozs7Ozs7O0FDTjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQywraUM7Ozs7Ozs7Ozs7OztBQ2pCOUI7QUFDYjtBQUNBO0FBQ0EsZ0RBQWdELE9BQU87QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0EseUJBQXlCLFVBQVU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsdWtGIiwiZmlsZSI6IndlUmVxdWVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LnRzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcclxudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdXJsUGVyZml4OiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCxcclxuICAgICAgICBzZXNzaW9uRXhwaXJlVGltZTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSxcclxuICAgICAgICBzZXNzaW9uRXhwaXJlS2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXHJcbiAgICAgICAgc2Vzc2lvbkV4cGlyZTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlXHJcbiAgICB9O1xyXG59KTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWjJWMFEyOXVabWxuTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMkZ3YVM5blpYUkRiMjVtYVdjdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNNRU5CUVc5RE8wRkJSWEJETEcxQ1FVRmxPMGxCUTFnc1QwRkJUenRSUVVOSUxGTkJRVk1zUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRk5CUVZNN1VVRkRNMElzYVVKQlFXbENMRVZCUVVVc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJN1VVRkRNME1zWjBKQlFXZENMRVZCUVVVc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJN1VVRkRla01zWVVGQllTeEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1lVRkJZVHRMUVVOMFF5eERRVUZCTzBGQlEwd3NRMEZCUXl4RlFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEhKY2JtbHRjRzl5ZENCemRHRjBkWE1nWm5KdmJTQW5MaTR2YzNSdmNtVXZjM1JoZEhWekoxeHlYRzVjY2x4dVpYaHdiM0owSUdSbFptRjFiSFFnS0NrZ1BUNGdlMXh5WEc0Z0lDQWdjbVYwZFhKdUlIdGNjbHh1SUNBZ0lDQWdJQ0IxY214UVpYSm1hWGc2SUdOdmJtWnBaeTUxY214UVpYSm1hWGdzWEhKY2JpQWdJQ0FnSUNBZ2MyVnpjMmx2YmtWNGNHbHlaVlJwYldVNklHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlN4Y2NseHVJQ0FnSUNBZ0lDQnpaWE56YVc5dVJYaHdhWEpsUzJWNU9pQmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVXRsZVN4Y2NseHVJQ0FnSUNBZ0lDQnpaWE56YVc5dVJYaHdhWEpsT2lCemRHRjBkWE11YzJWemMybHZia1Y0Y0dseVpWeHlYRzRnSUNBZ2ZWeHlYRzU5TzF4eVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb247XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laMlYwVTJWemMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2WjJWMFUyVnpjMmx2Ymk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVWd1F5eHRRa0ZCWlR0SlFVTllMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVRTdRVUZEZWtJc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElITjBZWFIxY3lCbWNtOXRJQ2N1TGk5emRHOXlaUzl6ZEdGMGRYTW5YSEpjYmx4eVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENBb0tTQTlQaUI3WEhKY2JpQWdJQ0J5WlhSMWNtNGdjM1JoZEhWekxuTmxjM05wYjI1Y2NseHVmVnh5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xyXG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHBhcmFtcykge1xyXG4gICAgT2JqZWN0LmFzc2lnbihjb25maWdfMS5kZWZhdWx0LCBwYXJhbXMpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSB3eC5nZXRTdG9yYWdlU3luYyhjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lKSB8fCAnJztcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignd3guZ2V0U3RvcmFnZVN5bmM6ZmFpbCwgY2FuIG5vdCBnZXQgc2Vzc2lvbi4nKTtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gd3guZ2V0U3RvcmFnZVN5bmMoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5IHx8IFwic2Vzc2lvbkV4cGlyZUtleVwiKSB8fCBJbmZpbml0eTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignd3guZ2V0U3RvcmFnZVN5bmM6ZmFpbCwgY2FuIG5vdCBnZXQgc2Vzc2lvbkV4cGlyZS4nKTtcclxuICAgIH1cclxufSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNXBkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2YVc1cGRDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVTndReXd3UTBGQmIwTTdRVUZIY0VNc2JVSkJRV1VzVlVGQlF5eE5RVUZ0UWp0SlFVTXZRaXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRE9VSXNTVUZCU1R0UlFVTkJMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXl4alFVRmpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eFhRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1MwRkRha1U3U1VGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0UlFVTlNMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zT0VOQlFUaERMRU5CUVVNc1EwRkJRVHRMUVVOb1JUdEpRVU5FTEVsQlFVazdVVUZEUVN4blFrRkJUU3hEUVVGRExHRkJRV0VzUjBGQlJ5eEZRVUZGTEVOQlFVTXNZMEZCWXl4RFFVRkRMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENMRWxCUVVrc2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4UlFVRlJMRU5CUVVNN1MwRkRka2M3U1VGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0UlFVTlNMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zYjBSQlFXOUVMRU5CUVVNc1EwRkJRVHRMUVVOMFJUdEJRVU5NTEVOQlFVTXNSVUZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHlYRzVwYlhCdmNuUWdjM1JoZEhWeklHWnliMjBnSnk0dUwzTjBiM0psTDNOMFlYUjFjeWRjY2x4dWFXMXdiM0owSUhzZ1NVbHVhWFJQY0hScGIyNGdmU0JtY205dElDY3VMaTlwYm5SbGNtWmhZMlVuWEhKY2JseHlYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQW9jR0Z5WVcxek9pQkpTVzVwZEU5d2RHbHZiaWtnUFQ0Z2UxeHlYRzRnSUNBZ1QySnFaV04wTG1GemMybG5iaWhqYjI1bWFXY3NJSEJoY21GdGN5azdYSEpjYmlBZ0lDQjBjbmtnZTF4eVhHNGdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ2QzZ3VaMlYwVTNSdmNtRm5aVk41Ym1Nb1kyOXVabWxuTG5ObGMzTnBiMjVPWVcxbElTa2dmSHdnSnljN1hISmNiaUFnSUNCOUlHTmhkR05vSUNobEtTQjdYSEpjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpZ25kM2d1WjJWMFUzUnZjbUZuWlZONWJtTTZabUZwYkN3Z1kyRnVJRzV2ZENCblpYUWdjMlZ6YzJsdmJpNG5LVnh5WEc0Z0lDQWdmVnh5WEc0Z0lDQWdkSEo1SUh0Y2NseHVJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmtWNGNHbHlaU0E5SUhkNExtZGxkRk4wYjNKaFoyVlRlVzVqS0dOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFMyVjVJSHg4SUZ3aWMyVnpjMmx2YmtWNGNHbHlaVXRsZVZ3aUtTQjhmQ0JKYm1acGJtbDBlVHRjY2x4dUlDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2NseHVJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0NkM2VDNW5aWFJUZEc5eVlXZGxVM2x1WXpwbVlXbHNMQ0JqWVc0Z2JtOTBJR2RsZENCelpYTnphVzl1Ulhod2FYSmxMaWNwWEhKY2JpQWdJQ0I5WEhKY2JuMWNjbHh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9zZXNzaW9uTWFuYWdlclwiKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQubWFpbigpO1xyXG59KTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYkc5bmFXNHVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdllYQnBMMnh2WjJsdUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01rUkJRWEZFTzBGQlJYSkVMRzFDUVVGbE8wbEJRMWdzVDBGQlR5eDNRa0ZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGQk8wRkJRMmhETEVOQlFVTXNSVUZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCelpYTnphVzl1VFdGdVlXZGxjaUJtY205dElDY3VMaTl0YjJSMWJHVXZjMlZ6YzJsdmJrMWhibUZuWlhJblhISmNibHh5WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0FvS1NBOVBpQjdYSEpjYmlBZ0lDQnlaWFIxY200Z2MyVnpjMmx2YmsxaGJtRm5aWEl1YldGcGJpZ3BYSEpjYm4xY2NseHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3JlcXVlc3RIYW5kbGVyXCIpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKG9iaikge1xyXG4gICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5yZXF1ZXN0KG9iaik7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ4ZFdWemRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZjbVZ4ZFdWemRDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxESkVRVUZ4UkR0QlFVZHlSQ3h0UWtGQlpTeFZRVUZETEVkQlFXMUNPMGxCUXk5Q0xFOUJRVThzZDBKQlFXTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVUU3UVVGRGRFTXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSEpsY1hWbGMzUklZVzVrYkdWeUlHWnliMjBnSnk0dUwyMXZaSFZzWlM5eVpYRjFaWE4wU0dGdVpHeGxjaWRjY2x4dWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZlNCbWNtOXRJQ2N1TGk5cGJuUmxjbVpoWTJVblhISmNibHh5WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0FvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlrZ1BUNGdlMXh5WEc0Z0lDQWdjbVYwZFhKdUlISmxjWFZsYzNSSVlXNWtiR1Z5TG5KbGNYVmxjM1FvYjJKcUtWeHlYRzU5WEhKY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3Nlc3Npb25NYW5hZ2VyXCIpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHNlc3Npb24pIHtcclxuICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5zZXRTZXNzaW9uKHNlc3Npb24pO1xyXG59KTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJWMFUyVnpjMmx2Ymk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmMyVjBVMlZ6YzJsdmJpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxESkVRVUZ4UkR0QlFVVnlSQ3h0UWtGQlpTeFZRVUZETEU5QlFXVTdTVUZETTBJc2QwSkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkRka01zUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhObGMzTnBiMjVOWVc1aFoyVnlJR1p5YjIwZ0p5NHVMMjF2WkhWc1pTOXpaWE56YVc5dVRXRnVZV2RsY2lkY2NseHVYSEpjYm1WNGNHOXlkQ0JrWldaaGRXeDBJQ2h6WlhOemFXOXVPaUJ6ZEhKcGJtY3BJRDArSUh0Y2NseHVJQ0FnSUhObGMzTnBiMjVOWVc1aFoyVnlMbk5sZEZObGMzTnBiMjRvYzJWemMybHZiaWs3WEhKY2JuMWNjbHh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlclwiKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChvYmopIHtcclxuICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQudXBsb2FkRmlsZShvYmopO1xyXG59KTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhCc2IyRmtSbWxzWlM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmRYQnNiMkZrUm1sc1pTNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxESkVRVUZ4UkR0QlFVZHlSQ3h0UWtGQlpTeFZRVUZETEVkQlFYTkNPMGxCUTJ4RExFOUJRVThzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVUU3UVVGRGVrTXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSEpsY1hWbGMzUklZVzVrYkdWeUlHWnliMjBnSnk0dUwyMXZaSFZzWlM5eVpYRjFaWE4wU0dGdVpHeGxjaWRjY2x4dWFXMXdiM0owSUhzZ1NWVndiRzloWkVacGJHVlBjSFJwYjI0Z2ZTQm1jbTl0SUZ3aUxpNHZhVzUwWlhKbVlXTmxYQ0k3WEhKY2JseHlYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQW9iMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ1BUNGdlMXh5WEc0Z0lDQWdjbVYwZFhKdUlISmxjWFZsYzNSSVlXNWtiR1Z5TG5Wd2JHOWhaRVpwYkdVb2IySnFLVnh5WEc1OVhISmNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBpbml0XzEgPSByZXF1aXJlKFwiLi9hcGkvaW5pdFwiKTtcclxudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL2FwaS9yZXF1ZXN0XCIpO1xyXG52YXIgdXBsb2FkRmlsZV8xID0gcmVxdWlyZShcIi4vYXBpL3VwbG9hZEZpbGVcIik7XHJcbnZhciBzZXRTZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9hcGkvc2V0U2Vzc2lvblwiKTtcclxudmFyIGxvZ2luXzEgPSByZXF1aXJlKFwiLi9hcGkvbG9naW5cIik7XHJcbnZhciBnZXRTZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9hcGkvZ2V0U2Vzc2lvblwiKTtcclxudmFyIGdldENvbmZpZ18xID0gcmVxdWlyZShcIi4vYXBpL2dldENvbmZpZ1wiKTtcclxudmFyIHdlUmVxdWVzdE9iamVjdCA9IHtcclxuICAgIGluaXQ6IGluaXRfMS5kZWZhdWx0LFxyXG4gICAgcmVxdWVzdDogcmVxdWVzdF8xLmRlZmF1bHQsXHJcbiAgICB1cGxvYWRGaWxlOiB1cGxvYWRGaWxlXzEuZGVmYXVsdCxcclxuICAgIHNldFNlc3Npb246IHNldFNlc3Npb25fMS5kZWZhdWx0LFxyXG4gICAgbG9naW46IGxvZ2luXzEuZGVmYXVsdCxcclxuICAgIGdldFNlc3Npb246IGdldFNlc3Npb25fMS5kZWZhdWx0LFxyXG4gICAgZ2V0Q29uZmlnOiBnZXRDb25maWdfMS5kZWZhdWx0XHJcbn07XHJcbmV4cG9ydHMuZGVmYXVsdCA9IHdlUmVxdWVzdE9iamVjdDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12YVc1a1pYZ3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeHRRMEZCTmtJN1FVRkROMElzZVVOQlFXMURPMEZCUTI1RExDdERRVUY1UXp0QlFVTjZReXdyUTBGQmVVTTdRVUZEZWtNc2NVTkJRU3RDTzBGQlF5OUNMQ3REUVVGNVF6dEJRVU42UXl3MlEwRkJkVU03UVVGSGRrTXNTVUZCVFN4bFFVRmxMRWRCUVdNN1NVRkRha01zU1VGQlNTeG5Ra0ZCUVR0SlFVTktMRTlCUVU4c2JVSkJRVUU3U1VGRFVDeFZRVUZWTEhOQ1FVRkJPMGxCUTFZc1ZVRkJWU3h6UWtGQlFUdEpRVU5XTEV0QlFVc3NhVUpCUVVFN1NVRkRUQ3hWUVVGVkxITkNRVUZCTzBsQlExWXNVMEZCVXl4eFFrRkJRVHREUVVOV0xFTkJRVU03UVVGRlJpeHJRa0ZCWlN4bFFVRmxMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2FXNXBkQ0JtY205dElGd2lMaTloY0drdmFXNXBkRndpWEhKY2JtbHRjRzl5ZENCeVpYRjFaWE4wSUdaeWIyMGdYQ0l1TDJGd2FTOXlaWEYxWlhOMFhDSmNjbHh1YVcxd2IzSjBJSFZ3Ykc5aFpFWnBiR1VnWm5KdmJTQmNJaTR2WVhCcEwzVndiRzloWkVacGJHVmNJbHh5WEc1cGJYQnZjblFnYzJWMFUyVnpjMmx2YmlCbWNtOXRJRndpTGk5aGNHa3ZjMlYwVTJWemMybHZibHdpWEhKY2JtbHRjRzl5ZENCc2IyZHBiaUJtY205dElGd2lMaTloY0drdmJHOW5hVzVjSWx4eVhHNXBiWEJ2Y25RZ1oyVjBVMlZ6YzJsdmJpQm1jbTl0SUZ3aUxpOWhjR2t2WjJWMFUyVnpjMmx2Ymx3aVhISmNibWx0Y0c5eWRDQm5aWFJEYjI1bWFXY2dabkp2YlNCY0lpNHZZWEJwTDJkbGRFTnZibVpwWjF3aVhISmNibWx0Y0c5eWRDQjdJSGRsVW1WeGRXVnpkQ0I5SUdaeWIyMGdYQ0l1TDJsdWRHVnlabUZqWlZ3aVhISmNibHh5WEc1amIyNXpkQ0IzWlZKbGNYVmxjM1JQWW1wbFkzUTZJSGRsVW1WeGRXVnpkQ0E5SUh0Y2NseHVJQ0JwYm1sMExGeHlYRzRnSUhKbGNYVmxjM1FzWEhKY2JpQWdkWEJzYjJGa1JtbHNaU3hjY2x4dUlDQnpaWFJUWlhOemFXOXVMRnh5WEc0Z0lHeHZaMmx1TEZ4eVhHNGdJR2RsZEZObGMzTnBiMjRzWEhKY2JpQWdaMlYwUTI5dVptbG5YSEpjYm4wN1hISmNibHh5WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0IzWlZKbGNYVmxjM1JQWW1wbFkzUTdYSEpjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5mdW5jdGlvbiBnZXQob2JqKSB7XHJcbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB3eC5nZXRTdG9yYWdlKHtcclxuICAgICAgICBrZXk6IG9iai5vcmlnaW5VcmwsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICBpZiAob2JqLmNhY2hlID09PSB0cnVlIHx8XHJcbiAgICAgICAgICAgICAgICAodHlwZW9mIG9iai5jYWNoZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jYWNoZShyZXMuZGF0YSkpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZXMuZGF0YSwgeyBpc0NhY2hlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gc2V0KG9iaiwgcmVhbERhdGEpIHtcclxuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChvYmouY2FjaGUgPT09IHRydWUgfHxcclxuICAgICAgICAodHlwZW9mIG9iai5jYWNoZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jYWNoZShyZWFsRGF0YSkpKSB7XHJcbiAgICAgICAgd3guc2V0U3RvcmFnZSh7XHJcbiAgICAgICAgICAgIGtleTogb2JqLm9yaWdpblVybCxcclxuICAgICAgICAgICAgZGF0YTogcmVhbERhdGFcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSB7XHJcbiAgICBnZXQ6IGdldCxcclxuICAgIHNldDogc2V0XHJcbn07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyRmphR1ZOWVc1aFoyVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5allXTm9aVTFoYm1GblpYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGRlFTeFRRVUZUTEVkQlFVY3NRMEZCUXl4SFFVRnRRanRKUVVNMVFpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1JVRkJSVHRSUVVOb1FpeFBRVUZQTzB0QlExWTdTVUZEUkN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xRkJRMVlzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4VFFVRlRPMUZCUTJ4Q0xFOUJRVThzV1VGQlJTeEhRVUZITzFsQlExSXNTVUZEU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExFbEJRVWs3WjBKQlEyeENMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEZWQlFWVXNTVUZCU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVTXhSRHRuUWtGRFJTeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRTlCUVU4c1MwRkJTeXhWUVVGVkxFVkJRVVU3YjBKQlEyNURMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkRMRTlCUVU4c1JVRkJSU3hKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZCTzJsQ1FVTjZRenRoUVVOS08xbEJRMFFzU1VGQlJ5eFBRVUZQTEVkQlFVY3NRMEZCUXl4UlFVRlJMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yZENRVU51UXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03WVVGRGJFSTdVVUZEVEN4RFFVRkRPMHRCUTBvc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNSMEZCUnl4RFFVRkRMRWRCUVcxQ0xFVkJRVWNzVVVGQmVVSTdTVUZEZUVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVWQlFVVTdVVUZEYUVJc1QwRkJUenRMUVVOV08wbEJRMFFzU1VGRFNTeEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRWxCUVVrN1VVRkRiRUlzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4TFFVRkxMRXRCUVVzc1ZVRkJWU3hKUVVGSkxFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1JVRkRNVVE3VVVGRFJTeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMWxCUTFZc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eFRRVUZUTzFsQlEyeENMRWxCUVVrc1JVRkJSU3hSUVVGUk8xTkJRMnBDTEVOQlFVTXNRMEZCUVR0TFFVTk1PMEZCUTB3c1EwRkJRenRCUVVWRUxHdENRVUZsTzBsQlExZ3NSMEZCUnl4TFFVRkJPMGxCUTBnc1IwRkJSeXhMUVVGQk8wTkJRMDRzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpWEhKY2JseHlYRzVtZFc1amRHbHZiaUJuWlhRb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpa2dlMXh5WEc0Z0lDQWdhV1lnS0NGdlltb3ViM0pwWjJsdVZYSnNLU0I3WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4eVhHNGdJQ0FnZlZ4eVhHNGdJQ0FnZDNndVoyVjBVM1J2Y21GblpTaDdYSEpjYmlBZ0lDQWdJQ0FnYTJWNU9pQnZZbW91YjNKcFoybHVWWEpzTEZ4eVhHNGdJQ0FnSUNBZ0lITjFZMk5sYzNNZ0tISmxjeWtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZZbW91WTJGamFHVWdQVDA5SUhSeWRXVWdmSHhjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNoMGVYQmxiMllnYjJKcUxtTmhZMmhsSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lnSmlZZ2IySnFMbU5oWTJobEtISmxjeTVrWVhSaEtTbGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0tTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNXpkV05qWlhOeklEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlltb3VjM1ZqWTJWemN5aHlaWE11WkdGMFlTd2dlMmx6UTJGamFHVTZJSFJ5ZFdWOUtWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1LSFI1Y0dWdlppQnZZbW91WTI5dGNHeGxkR1VnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbU52YlhCc1pYUmxLQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNCOUtWeHlYRzU5WEhKY2JseHlYRzVtZFc1amRHbHZiaUJ6WlhRb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQXNJSEpsWVd4RVlYUmhPaUJ6ZEhKcGJtY2dmQ0J2WW1wbFkzUXBJSHRjY2x4dUlDQWdJR2xtSUNnaGIySnFMbTl5YVdkcGJsVnliQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2NseHVJQ0FnSUgxY2NseHVJQ0FnSUdsbUlDaGNjbHh1SUNBZ0lDQWdJQ0J2WW1vdVkyRmphR1VnUFQwOUlIUnlkV1VnZkh4Y2NseHVJQ0FnSUNBZ0lDQW9kSGx3Wlc5bUlHOWlhaTVqWVdOb1pTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUlDWW1JRzlpYWk1allXTm9aU2h5WldGc1JHRjBZU2twWEhKY2JpQWdJQ0FwSUh0Y2NseHVJQ0FnSUNBZ0lDQjNlQzV6WlhSVGRHOXlZV2RsS0h0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYTJWNU9pQnZZbW91YjNKcFoybHVWWEpzTEZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaE9pQnlaV0ZzUkdGMFlWeHlYRzRnSUNBZ0lDQWdJSDBwWEhKY2JpQWdJQ0I5WEhKY2JuMWNjbHh1WEhKY2JtVjRjRzl5ZENCa1pXWmhkV3gwSUh0Y2NseHVJQ0FnSUdkbGRDeGNjbHh1SUNBZ0lITmxkRnh5WEc1OU8xeHlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XHJcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi4vYXBpL3JlcXVlc3RcIik7XHJcbmZ1bmN0aW9uIHN0YXJ0KG9iaikge1xyXG4gICAgb2JqLl9yZXBvcnRTdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxufVxyXG5mdW5jdGlvbiBlbmQob2JqKSB7XHJcbiAgICBvYmouX3JlcG9ydEVuZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGlmIChvYmoucmVwb3J0ICYmIG9iai5fcmVwb3J0U3RhcnRUaW1lKSB7XHJcbiAgICAgICAgcmVwb3J0KG9iai5yZXBvcnQsIG9iai5fcmVwb3J0U3RhcnRUaW1lLCBvYmouX3JlcG9ydEVuZFRpbWUpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlcG9ydChuYW1lLCBzdGFydFRpbWUsIGVuZFRpbWUpIHtcclxuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5yZXBvcnRDR0kgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGNvbmZpZ18xLmRlZmF1bHQucmVwb3J0Q0dJKG5hbWUsIHN0YXJ0VGltZSwgZW5kVGltZSwgcmVxdWVzdF8xLmRlZmF1bHQpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IHtcclxuICAgIHN0YXJ0OiBzdGFydCxcclxuICAgIGVuZDogZW5kLFxyXG4gICAgcmVwb3J0OiByZXBvcnRcclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXRiMlIxYkdVdlpIVnlZWFJwYjI1U1pYQnZjblJsY2k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVOd1F5d3dRMEZCYjBNN1FVRkhjRU1zVTBGQlV5eExRVUZMTEVOQlFVTXNSMEZCZFVNN1NVRkRiRVFzUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1FVRkRhRVFzUTBGQlF6dEJRVVZFTEZOQlFWTXNSMEZCUnl4RFFVRkRMRWRCUVhWRE8wbEJRMmhFTEVkQlFVY3NRMEZCUXl4alFVRmpMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0SlFVTXhReXhKUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRMR2RDUVVGblFpeEZRVUZGTzFGQlEyNURMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlowSXNSVUZCUlN4SFFVRkhMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNSMEZCUnl4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRE8wdEJRekZGTzBGQlEwd3NRMEZCUXp0QlFVVkVMRk5CUVZNc1RVRkJUU3hEUVVGRExFbEJRVmtzUlVGQlJTeFRRVUZwUWl4RlFVRkZMRTlCUVdVN1NVRkROVVFzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1UwRkJVeXhMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU40UXl4blFrRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVWQlFVVXNVMEZCVXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hwUWtGQlR5eERRVUZETEVOQlFVTTdTMEZEZGtRN1FVRkRUQ3hEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4TFFVRkxMRTlCUVVFN1NVRkRUQ3hIUVVGSExFdEJRVUU3U1VGRFNDeE5RVUZOTEZGQlFVRTdRMEZEVkN4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEhKY2JtbHRjRzl5ZENCeVpYRjFaWE4wSUdaeWIyMGdKeTR1TDJGd2FTOXlaWEYxWlhOMEoxeHlYRzVwYlhCdmNuUWdleUJKVW1WeGRXVnpkRTl3ZEdsdmJpd2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNGdmU0JtY205dElGd2lMaTR2YVc1MFpYSm1ZV05sWENJN1hISmNibHh5WEc1bWRXNWpkR2x2YmlCemRHRnlkQ2h2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1SUh3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0cElIdGNjbHh1SUNBZ0lHOWlhaTVmY21Wd2IzSjBVM1JoY25SVWFXMWxJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrN1hISmNibjFjY2x4dVhISmNibVoxYm1OMGFXOXVJR1Z1WkNodlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUlId2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBJSHRjY2x4dUlDQWdJRzlpYWk1ZmNtVndiM0owUlc1a1ZHbHRaU0E5SUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncE8xeHlYRzRnSUNBZ2FXWW9iMkpxTG5KbGNHOXlkQ0FtSmlCdlltb3VYM0psY0c5eWRGTjBZWEowVkdsdFpTa2dlMXh5WEc0Z0lDQWdJQ0FnSUhKbGNHOXlkQ2h2WW1vdWNtVndiM0owSUdGeklITjBjbWx1Wnl3Z2IySnFMbDl5WlhCdmNuUlRkR0Z5ZEZScGJXVXNJRzlpYWk1ZmNtVndiM0owUlc1a1ZHbHRaU2s3WEhKY2JpQWdJQ0I5WEhKY2JuMWNjbHh1WEhKY2JtWjFibU4wYVc5dUlISmxjRzl5ZENodVlXMWxPaUJ6ZEhKcGJtY3NJSE4wWVhKMFZHbHRaVG9nYm5WdFltVnlMQ0JsYm1SVWFXMWxPaUJ1ZFcxaVpYSXBJSHRjY2x4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbkpsY0c5eWRFTkhTU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEhKY2JpQWdJQ0FnSUNBZ1kyOXVabWxuTG5KbGNHOXlkRU5IU1NodVlXMWxMQ0J6ZEdGeWRGUnBiV1VzSUdWdVpGUnBiV1VzSUhKbGNYVmxjM1FwTzF4eVhHNGdJQ0FnZlZ4eVhHNTlYSEpjYmx4eVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCN1hISmNiaUFnSUNCemRHRnlkQ3hjY2x4dUlDQWdJR1Z1WkN4Y2NseHVJQ0FnSUhKbGNHOXlkRnh5WEc1OVhISmNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XHJcbmZ1bmN0aW9uIHN5c3RlbUVycm9yKG9iaiwgcmVzKSB7XHJcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBvYmouZmFpbChyZXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZG9FcnJvcihcIlwiLCByZXMuZXJyTXNnKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBsb2dpY0Vycm9yKG9iaiwgcmVzKSB7XHJcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBvYmouZmFpbChyZXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIF9hID0gZ2V0RXJyb3JNc2cocmVzKSwgdGl0bGUgPSBfYS50aXRsZSwgY29udGVudCA9IF9hLmNvbnRlbnQ7XHJcbiAgICAgICAgZG9FcnJvcih0aXRsZSwgY29udGVudCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNhbGxiYWNrKG9iaiwgcmVzKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUuZXJyb3IocmVzKTtcclxufVxyXG5mdW5jdGlvbiBnZXRFcnJvck1zZyhyZXMpIHtcclxuICAgIHZhciB0aXRsZSA9IFwiXCI7XHJcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGl0bGUgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUocmVzLmRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICB0aXRsZSA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZTtcclxuICAgIH1cclxuICAgIHZhciBjb250ZW50ID0gXCJcIjtcclxuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudChyZXMuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgY29udGVudCA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH07XHJcbn1cclxuZnVuY3Rpb24gZG9FcnJvcih0aXRsZSwgY29udGVudCkge1xyXG4gICAgd3guc2hvd01vZGFsKHtcclxuICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgY29udGVudDogY29udGVudCB8fCBcIue9kee7nOaIluacjeWKoeW8guW4uO+8jOivt+eojeWQjumHjeivlVwiLFxyXG4gICAgICAgIHNob3dDYW5jZWw6IGZhbHNlXHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSB7XHJcbiAgICBzeXN0ZW1FcnJvcjogc3lzdGVtRXJyb3IsXHJcbiAgICBsb2dpY0Vycm9yOiBsb2dpY0Vycm9yLFxyXG4gICAgZG9FcnJvcjogZG9FcnJvcixcclxuICAgIGdldEVycm9yTXNnOiBnZXRFcnJvck1zZ1xyXG59O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laWEp5YjNKSVlXNWtiR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOWxjbkp2Y2toaGJtUnNaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3d3UTBGQmIwTTdRVUZIY0VNc1UwRkJVeXhYUVVGWExFTkJRVU1zUjBGQmRVTXNSVUZCUlN4SFFVRTJRanRKUVVOMlJpeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRWxCUVVrc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGFFTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5xUWp0VFFVRk5PMUZCUTBnc1QwRkJUeXhEUVVGRExFVkJRVVVzUlVGQlJTeEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1MwRkRNMEk3UVVGRFRDeERRVUZETzBGQlJVUXNVMEZCVXl4VlFVRlZMRU5CUVVNc1IwRkJkVU1zUlVGQlJTeEhRVUY1UlR0SlFVTnNTU3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEVsQlFVa3NTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRhRU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRMUVVOcVFqdFRRVUZOTzFGQlEwY3NTVUZCUVN4eFFrRkJiVU1zUlVGQmJFTXNaMEpCUVVzc1JVRkJSU3h2UWtGQk1rSXNRMEZCUXp0UlFVTXhReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMHRCUXpOQ08wbEJSMFFzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU0xUXl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRiRU03U1VGRlJDeFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRM1pDTEVOQlFVTTdRVUZGUkN4VFFVRlRMRmRCUVZjc1EwRkJReXhIUVVGNVJUdEpRVU14Uml4SlFVRkpMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRFppeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhWUVVGVkxFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEzcERMRWxCUVVrN1dVRkRRU3hMUVVGTExFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZCTzFOQlEzUkRPMUZCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3VTBGRFdEdExRVU5LTzFOQlFVMHNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeExRVUZMTEZGQlFWRXNSVUZCUlR0UlFVTTVReXhMUVVGTExFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNN1MwRkROMEk3U1VGRlJDeEpRVUZKTEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRha0lzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1dVRkJXU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU16UXl4SlFVRkpPMWxCUTBFc1QwRkJUeXhIUVVGSExHZENRVUZOTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlFUdFRRVU14UXp0UlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8xTkJRMWc3UzBGRFNqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGbEJRVmtzUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZEYUVRc1QwRkJUeXhIUVVGSExHZENRVUZOTEVOQlFVTXNXVUZCV1N4RFFVRkRPMHRCUTJwRE8wbEJSVVFzVDBGQlR5eEZRVUZETEV0QlFVc3NUMEZCUVN4RlFVRkZMRTlCUVU4c1UwRkJRU3hGUVVGRExFTkJRVUU3UVVGRE0wSXNRMEZCUXp0QlFVVkVMRk5CUVZNc1QwRkJUeXhEUVVGRExFdEJRV0VzUlVGQlJTeFBRVUZsTzBsQlF6TkRMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU03VVVGRFZDeExRVUZMTEU5QlFVRTdVVUZEVEN4UFFVRlBMRVZCUVVVc1QwRkJUeXhKUVVGSkxHVkJRV1U3VVVGRGJrTXNWVUZCVlN4RlFVRkZMRXRCUVVzN1MwRkRjRUlzUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMR3RDUVVGbE8wbEJRMWdzVjBGQlZ5eGhRVUZCTzBsQlExZ3NWVUZCVlN4WlFVRkJPMGxCUTFZc1QwRkJUeXhUUVVGQk8wbEJRMUFzVjBGQlZ5eGhRVUZCTzBOQlEyUXNRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCamIyNW1hV2NnWm5KdmJTQW5MaTR2YzNSdmNtVXZZMjl1Wm1sbkoxeHlYRzVwYlhCdmNuUWdleUJKVW1WeGRXVnpkRTl3ZEdsdmJpd2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNGdmU0JtY205dElGd2lMaTR2YVc1MFpYSm1ZV05sWENJN1hISmNibHh5WEc1bWRXNWpkR2x2YmlCemVYTjBaVzFGY25KdmNpaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRzSUhKbGN6b2dkM2d1UjJWdVpYSmhiRU5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYSEpjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1bVlXbHNJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjY2x4dUlDQWdJQ0FnSUNCdlltb3VabUZwYkNoeVpYTXBPMXh5WEc0Z0lDQWdmU0JsYkhObElIdGNjbHh1SUNBZ0lDQWdJQ0JrYjBWeWNtOXlLRndpWENJc0lISmxjeTVsY25KTmMyY3BPMXh5WEc0Z0lDQWdmVnh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCc2IyZHBZMFZ5Y205eUtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaXdnY21Wek9pQjNlQzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwSUh3Z2QzZ3VWWEJzYjJGa1JtbHNaVk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENrZ2UxeHlYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91Wm1GcGJDQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYSEpjYmlBZ0lDQWdJQ0FnYjJKcUxtWmhhV3dvY21WektUdGNjbHh1SUNBZ0lIMGdaV3h6WlNCN1hISmNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2UzUnBkR3hsTENCamIyNTBaVzUwZlNBOUlHZGxkRVZ5Y205eVRYTm5LSEpsY3lrN1hISmNiaUFnSUNBZ0lDQWdaRzlGY25KdmNpaDBhWFJzWlN3Z1kyOXVkR1Z1ZENrN1hISmNiaUFnSUNCOVhISmNibHh5WEc0Z0lDQWdMeThnNWFhQzVwNmM1cHlKNllXTjU3MnU1N3VmNUxpQTZaU1o2Syt2NVp1ZTZMQ0Q1WWU5NXBXdzc3eU01WWlaNW9tbjZLR001YTZEWEhKY2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTVsY25KdmNrTmhiR3hpWVdOcklEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNjbHh1SUNBZ0lDQWdJQ0JqYjI1bWFXY3VaWEp5YjNKRFlXeHNZbUZqYXlodlltb3NJSEpsY3lrN1hISmNiaUFnSUNCOVhISmNibHh5WEc0Z0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2loeVpYTXBPMXh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCblpYUkZjbkp2Y2sxelp5aHlaWE02SUhkNExsSmxjWFZsYzNSVGRXTmpaWE56UTJGc2JHSmhZMnRTWlhOMWJIUWdmQ0IzZUM1VmNHeHZZV1JHYVd4bFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBLU0I3WEhKY2JpQWdJQ0JzWlhRZ2RHbDBiR1VnUFNCY0lsd2lPMXh5WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VaWEp5YjNKVWFYUnNaU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEhKY2JpQWdJQ0FnSUNBZ2RISjVJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdkR2wwYkdVZ1BTQmpiMjVtYVdjdVpYSnliM0pVYVhSc1pTaHlaWE11WkdGMFlTbGNjbHh1SUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtVnljbTl5VkdsMGJHVWdQVDA5SUZ3aWMzUnlhVzVuWENJcElIdGNjbHh1SUNBZ0lDQWdJQ0IwYVhSc1pTQTlJR052Ym1acFp5NWxjbkp2Y2xScGRHeGxPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUd4bGRDQmpiMjUwWlc1MElEMGdYQ0pjSWp0Y2NseHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1WeWNtOXlRMjl1ZEdWdWRDQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYSEpjYmlBZ0lDQWdJQ0FnZEhKNUlIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR1Z1ZENBOUlHTnZibVpwWnk1bGNuSnZja052Ym5SbGJuUW9jbVZ6TG1SaGRHRXBYSEpjYmlBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWxjbkp2Y2tOdmJuUmxiblFnUFQwOUlGd2ljM1J5YVc1blhDSXBJSHRjY2x4dUlDQWdJQ0FnSUNCamIyNTBaVzUwSUQwZ1kyOXVabWxuTG1WeWNtOXlRMjl1ZEdWdWREdGNjbHh1SUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0J5WlhSMWNtNGdlM1JwZEd4bExDQmpiMjUwWlc1MGZWeHlYRzU5WEhKY2JseHlYRzVtZFc1amRHbHZiaUJrYjBWeWNtOXlLSFJwZEd4bE9pQnpkSEpwYm1jc0lHTnZiblJsYm5RNklITjBjbWx1WnlrZ2UxeHlYRzRnSUNBZ2QzZ3VjMmh2ZDAxdlpHRnNLSHRjY2x4dUlDQWdJQ0FnSUNCMGFYUnNaU3hjY2x4dUlDQWdJQ0FnSUNCamIyNTBaVzUwT2lCamIyNTBaVzUwSUh4OElGd2k1NzJSNTd1YzVvaVc1cHlONVlxaDVieUM1Ymk0Nzd5TTZLKzM1NmlONVpDTzZZZU42SytWWENJc1hISmNiaUFnSUNBZ0lDQWdjMmh2ZDBOaGJtTmxiRG9nWm1Gc2MyVmNjbHh1SUNBZ0lIMHBYSEpjYm4xY2NseHVYSEpjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjY2x4dUlDQWdJSE41YzNSbGJVVnljbTl5TEZ4eVhHNGdJQ0FnYkc5bmFXTkZjbkp2Y2l4Y2NseHVJQ0FnSUdSdlJYSnliM0lzWEhKY2JpQWdJQ0JuWlhSRmNuSnZjazF6WjF4eVhHNTlYSEpjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xyXG52YXIgbG9hZGluZ18xID0gcmVxdWlyZShcIi4uL3V0aWwvbG9hZGluZ1wiKTtcclxuZnVuY3Rpb24gZ2V0KG9iaikge1xyXG4gICAgaWYgKCEoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoudXJsXSB8fCAob2JqLm9yaWdpblVybCAmJiBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai5vcmlnaW5VcmxdKSkpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdtb2NrIOayoeacieWvueW6lOaOpeWPo+eahOaVsOaNricpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHZhciBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoudXJsXSB8fCAob2JqLm9yaWdpblVybCA/IGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLm9yaWdpblVybF0gOiAnJyk7XHJcbiAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB2YXIgcmVzID0ge1xyXG4gICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwXHJcbiAgICB9O1xyXG4gICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xyXG4gICAgcmV0dXJuIHJlcztcclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSB7XHJcbiAgICBnZXQ6IGdldFxyXG59O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liVzlqYTAxaGJtRm5aWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwyMXZZMnROWVc1aFoyVnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFVRXNNRU5CUVc5RE8wRkJRM0JETERKRFFVRnhRenRCUVVkeVF5eFRRVUZUTEVkQlFVY3NRMEZCUXl4SFFVRjFRenRKUVVWb1JDeEpRVUZITEVOQlFVTXNRMEZCUXl4blFrRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVN1VVRkZha1lzVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETzFGQlEyaERMRTlCUVU4c1MwRkJTeXhEUVVGRE8wdEJRMmhDTzBsQlJVUXNTVUZCU1N4SlFVRkpMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0SlFVVTNSaXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEZUVNc1NVRkJUU3hIUVVGSExFZEJRVWM3VVVGRFVpeEpRVUZKTEUxQlFVRTdVVUZEU2l4VlFVRlZMRVZCUVVVc1IwRkJSenRMUVVOc1FpeERRVUZETzBsQlJVWXNhVUpCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dEpRVU5tTEU5QlFVOHNSMEZCUnl4RFFVRkJPMEZCUTJRc1EwRkJRenRCUVVWRUxHdENRVUZsTzBsQlExZ3NSMEZCUnl4TFFVRkJPME5CUTA0c1EwRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JqYjI1bWFXY2dabkp2YlNBbkxpNHZjM1J2Y21VdlkyOXVabWxuSjF4eVhHNXBiWEJ2Y25RZ2JHOWhaR2x1WnlCbWNtOXRJQ2N1TGk5MWRHbHNMMnh2WVdScGJtY25YSEpjYm1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVMQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaUI5SUdaeWIyMGdYQ0l1TGk5cGJuUmxjbVpoWTJWY0lseHlYRzVjY2x4dVpuVnVZM1JwYjI0Z1oyVjBLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrNklHRnVlU0I3WEhKY2JseHlYRzRnSUNBZ2FXWW9JU2hqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG5WeWJGMGdmSHdnS0c5aWFpNXZjbWxuYVc1VmNtd2dKaVlnWTI5dVptbG5MbTF2WTJ0S2MyOXVXMjlpYWk1dmNtbG5hVzVWY214ZEtTa3BJSHRjY2x4dUlDQWdJQ0FnSUNBdkx5QnRiMk5ySU9heW9lYWNpZVd2dWVXNmxPYU9wZVdQbytlYWhPYVZzT2FOcmx4eVhHNGdJQ0FnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvSjIxdlkyc2c1cktoNXB5SjVhKzU1YnFVNW82bDVZK2o1NXFFNXBXdzVvMnVKeWs3WEhKY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUd4bGRDQmtZWFJoSUQwZ1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNTFjbXhkSUh4OElDaHZZbW91YjNKcFoybHVWWEpzSUQ4Z1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNXZjbWxuYVc1VmNteGRJRG9nSnljcE8xeHlYRzRnSUNBZ0x5OGdaR1ZsY0NCamIzQjVYSEpjYmlBZ0lDQmtZWFJoSUQwZ1NsTlBUaTV3WVhKelpTaEtVMDlPTG5OMGNtbHVaMmxtZVNoa1lYUmhLU2s3WEhKY2JpQWdJQ0JqYjI1emRDQnlaWE1nUFNCN1hISmNiaUFnSUNBZ0lDQWdaR0YwWVN4Y2NseHVJQ0FnSUNBZ0lDQnpkR0YwZFhORGIyUmxPaUF5TURCY2NseHVJQ0FnSUgwN1hISmNibHh5WEc0Z0lDQWdiRzloWkdsdVp5NW9hV1JsS0NrN1hISmNiaUFnSUNCeVpYUjFjbTRnY21WelhISmNibjFjY2x4dVhISmNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNjbHh1SUNBZ0lHZGxkRnh5WEc1OVhISmNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXHJcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XHJcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XHJcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XHJcbnZhciBtb2NrTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vbW9ja01hbmFnZXJcIik7XHJcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcclxudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcclxudmFyIHJlc3BvbnNlSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVzcG9uc2VIYW5kbGVyXCIpO1xyXG52YXIgZHVyYXRpb25SZXBvcnRlcl8xID0gcmVxdWlyZShcIi4vZHVyYXRpb25SZXBvcnRlclwiKTtcclxudmFyIHVybF8xID0gcmVxdWlyZShcIi4uL3V0aWwvdXJsXCIpO1xyXG52YXIgZXJyb3JIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9lcnJvckhhbmRsZXJcIik7XHJcbmZ1bmN0aW9uIGZvcm1hdChvcmlnaW5VcmwpIHtcclxuICAgIGlmIChvcmlnaW5Vcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XHJcbiAgICAgICAgcmV0dXJuIG9yaWdpblVybDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeDtcclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQudXJsUGVyZml4ID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdXJsUGVyZml4ID0gY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXgoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVybFBlcmZpeCArIG9yaWdpblVybDtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBwcmVEbyhvYmopIHtcclxuICAgIGlmICh0eXBlb2Ygb2JqLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIG9iai5iZWZvcmVTZW5kKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIG9iai5yZUxvZ2luQ291bnQgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICBvYmoucmVMb2dpbkNvdW50ID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQrKztcclxuICAgIH1cclxuICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcclxuICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5zaG93KG9iai5zaG93TG9hZGluZyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcclxuICAgICAgICBvYmoub3JpZ2luVXJsID0gb2JqLnVybDtcclxuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iajtcclxufVxyXG5mdW5jdGlvbiBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopIHtcclxuICAgIHZhciBfYSwgX2I7XHJcbiAgICBpZiAoIW9iai5kYXRhKSB7XHJcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcclxuICAgIH1cclxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xyXG4gICAgICAgIG9iai5kYXRhID0gX19hc3NpZ24oe30sIG9iai5kYXRhLCAoX2EgPSB7fSwgX2FbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9hKSk7XHJcbiAgICB9XHJcbiAgICB2YXIgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XHJcbiAgICBvYmouZGF0YSA9IF9fYXNzaWduKHt9LCBnZCwgb2JqLmRhdGEpO1xyXG4gICAgb2JqLm1ldGhvZCA9IG9iai5tZXRob2QgfHwgJ0dFVCc7XHJcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xyXG4gICAgaWYgKG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcclxuICAgICAgICBpZiAoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCAoX2IgPSB7fSwgX2JbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9iKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XHJcbiAgICB9XHJcbiAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5zdGFydChvYmopO1xyXG4gICAgcmV0dXJuIG9iajtcclxufVxyXG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopIHtcclxuICAgIHZhciBfYSwgX2I7XHJcbiAgICBpZiAoIW9iai5mb3JtRGF0YSkge1xyXG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHt9O1xyXG4gICAgfVxyXG4gICAgaWYgKG9iai5vcmlnaW5VcmwgIT09IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi51cmwgJiYgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XHJcbiAgICAgICAgb2JqLmZvcm1EYXRhID0gX19hc3NpZ24oe30sIG9iai5mb3JtRGF0YSwgKF9hID0ge30sIF9hW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYSkpO1xyXG4gICAgfVxyXG4gICAgdmFyIGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xyXG4gICAgb2JqLmZvcm1EYXRhID0gX19hc3NpZ24oe30sIGdkLCBvYmouZm9ybURhdGEpO1xyXG4gICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xyXG4gICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCAoX2IgPSB7fSwgX2JbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9iKSk7XHJcbiAgICB9XHJcbiAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xyXG4gICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQuc3RhcnQob2JqKTtcclxuICAgIHJldHVybiBvYmo7XHJcbn1cclxuZnVuY3Rpb24gZ2V0R2xvYmFsRGF0YSgpIHtcclxuICAgIHZhciBnZCA9IHt9O1xyXG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGdkID0gY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgZ2QgPSBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ2Q7XHJcbn1cclxuZnVuY3Rpb24gZG9SZXF1ZXN0KG9iaikge1xyXG4gICAgb2JqID0gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgd3gucmVxdWVzdCh7XHJcbiAgICAgICAgICAgIHVybDogb2JqLnVybCxcclxuICAgICAgICAgICAgZGF0YTogb2JqLmRhdGEsXHJcbiAgICAgICAgICAgIG1ldGhvZDogb2JqLm1ldGhvZCxcclxuICAgICAgICAgICAgaGVhZGVyOiBvYmouaGVhZGVyIHx8IHt9LFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogb2JqLmRhdGFUeXBlIHx8ICdqc29uJyxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBkb1VwbG9hZEZpbGUob2JqKSB7XHJcbiAgICBvYmogPSBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICB3eC51cGxvYWRGaWxlKHtcclxuICAgICAgICAgICAgdXJsOiBvYmoudXJsLFxyXG4gICAgICAgICAgICBmaWxlUGF0aDogb2JqLmZpbGVQYXRoIHx8ICcnLFxyXG4gICAgICAgICAgICBuYW1lOiBvYmoubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgZm9ybURhdGE6IG9iai5mb3JtRGF0YSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiByZXF1ZXN0KG9iaikge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBvYmogPSBwcmVEbyhvYmopO1xyXG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uKSB7XHJcbiAgICAgICAgICAgIHZhciBtb2NrUmVzcG9uc2UgPSBtb2NrTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaik7XHJcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQobW9ja1Jlc3BvbnNlLCBvYmosICdyZXF1ZXN0Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iai5jYWNoZSkge1xyXG4gICAgICAgICAgICBjYWNoZU1hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQubWFpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9SZXF1ZXN0KG9iaik7XHJcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQocmVzLCBvYmosICdyZXF1ZXN0Jyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gdXBsb2FkRmlsZShvYmopIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqKTtcclxuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbikge1xyXG4gICAgICAgICAgICB2YXIgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xyXG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0KG1vY2tSZXNwb25zZSwgb2JqLCAndXBsb2FkRmlsZScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5tYWluKCkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkb1VwbG9hZEZpbGUob2JqKTtcclxuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdChyZXMsIG9iaiwgJ3VwbG9hZEZpbGUnKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnRzLmRlZmF1bHQgPSB7XHJcbiAgICBmb3JtYXQ6IGZvcm1hdCxcclxuICAgIHJlcXVlc3Q6IHJlcXVlc3QsXHJcbiAgICB1cGxvYWRGaWxlOiB1cGxvYWRGaWxlXHJcbn07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnhkV1Z6ZEVoaGJtUnNaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzSmxjWFZsYzNSSVlXNWtiR1Z5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdRVUZCUVN3eVEwRkJjVU03UVVGRGNrTXNNRU5CUVc5RE8wRkJRM0JETERCRFFVRnZRenRCUVVOd1F5dzJRMEZCZFVNN1FVRkRka01zSzBOQlFYbERPMEZCUTNwRExHMUVRVUUyUXp0QlFVTTNReXh4UkVGQkswTTdRVUZETDBNc2RVUkJRV2xFTzBGQlEycEVMRzFEUVVFMlFqdEJRVVUzUWl3clEwRkJNRU03UVVGSE1VTXNVMEZCVXl4TlFVRk5MRU5CUVVNc1UwRkJhVUk3U1VGRE4wSXNTVUZCU1N4VFFVRlRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTzFGQlF6bENMRTlCUVU4c1UwRkJVeXhEUVVGQk8wdEJRMjVDTzFOQlFVMDdVVUZEU0N4SlFVRkpMRk5CUVZNc1IwRkJSeXhuUWtGQlRTeERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTnFReXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xbEJRM2hETEZOQlFWTXNSMEZCUnl4blFrRkJUU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZCTzFOQlEycERPMUZCUTBRc1QwRkJUeXhUUVVGVExFZEJRVWNzVTBGQlV5eERRVUZETzB0QlEyaERPMEZCUTB3c1EwRkJRenRCUVVkRUxGTkJRVk1zUzBGQlN5eERRVUVyUXl4SFFVRk5PMGxCUXk5RUxFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNWVUZCVlN4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVOMFF5eEhRVUZITEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNN1MwRkRjRUk3U1VGRlJDeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRmxCUVZrc1MwRkJTeXhYUVVGWExFVkJRVVU3VVVGRGVrTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1IwRkJSeXhEUVVGRExFTkJRVU03UzBGRGVFSTdVMEZCVFR0UlFVTklMRWRCUVVjc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF6dExRVU4wUWp0SlFVVkVMRWxCUVVrc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJUdFJRVU5xUWl4cFFrRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1MwRkRha003U1VGRlJDeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1JVRkJSVHRSUVVOb1FpeEhRVUZITEVOQlFVTXNVMEZCVXl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU03VVVGRGVFSXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMHRCUXpkQ08wbEJSVVFzVDBGQlR5eEhRVUZITEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUjBRc1UwRkJVeXh2UWtGQmIwSXNRMEZCUXl4SFFVRnRRanM3U1VGRk4wTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFVkJRVVU3VVVGRFdDeEhRVUZITEVOQlFVTXNTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenRMUVVOcVFqdEpRVVZFTEVsQlFVa3NSMEZCUnl4RFFVRkRMRk5CUVZNc1MwRkJTeXhuUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4SFFVRkhMRWxCUVVrc1owSkJRVTBzUTBGQlF5eFBRVUZQTEVWQlFVVTdVVUZET1VRc1IwRkJSeXhEUVVGRExFbEJRVWtzWjBKQlFVOHNSMEZCUnl4RFFVRkRMRWxCUVdNc1pVRkJSeXhuUWtGQlRTeERRVUZETEZkQlFWY3NTVUZCUnl4blFrRkJUU3hEUVVGRExFOUJRVThzVFVGQlF5eERRVUZETzB0QlF6VkZPMGxCUjBRc1NVRkJUU3hGUVVGRkxFZEJRVWNzWVVGQllTeEZRVUZGTEVOQlFVTTdTVUZETTBJc1IwRkJSeXhEUVVGRExFbEJRVWtzWjBKQlFVOHNSVUZCUlN4RlFVRkxMRWRCUVVjc1EwRkJReXhKUVVGakxFTkJRVU1zUTBGQlF6dEpRVVV4UXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRPMGxCUTJwRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVkQlFVY3NSMEZCUnl4RFFVRkRMRkZCUVZFc1NVRkJTU3hOUVVGTkxFTkJRVU03U1VGSGRFTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hMUVVGTExFdEJRVXNzUlVGQlJUdFJRVU4wUWl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFsQlEyaENMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzWVVGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhaUVVGSExFZEJRVU1zWjBKQlFVMHNRMEZCUXl4WFFVRlhMRWxCUVVjc1owSkJRVTBzUTBGQlF5eFBRVUZQTEUxQlFVVXNRMEZCUXp0VFFVTTFSVHRSUVVORUxFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NZVUZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMHRCUTNoRE8wbEJSVVFzTUVKQlFXZENMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlJUVkNMRTlCUVU4c1IwRkJSeXhEUVVGRE8wRkJRMllzUTBGQlF6dEJRVWRFTEZOQlFWTXNkVUpCUVhWQ0xFTkJRVU1zUjBGQmMwSTdPMGxCUTI1RUxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZPMUZCUTJZc1IwRkJSeXhEUVVGRExGRkJRVkVzUjBGQlJ5eEZRVUZGTEVOQlFVTTdTMEZEY2tJN1NVRkZSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eFRRVUZUTEV0QlFVc3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xRkJRemxFTEVkQlFVY3NRMEZCUXl4UlFVRlJMR2RDUVVGUExFZEJRVWNzUTBGQlF5eFJRVUZyUWl4bFFVRkhMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eEpRVUZITEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhOUVVGRExFTkJRVU03UzBGRGNFWTdTVUZIUkN4SlFVRk5MRVZCUVVVc1IwRkJSeXhoUVVGaExFVkJRVVVzUTBGQlF6dEpRVU16UWl4SFFVRkhMRU5CUVVNc1VVRkJVU3huUWtGQlR5eEZRVUZGTEVWQlFVc3NSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wbEJSM2hETEVsQlFVa3NaMEpCUVUwc1EwRkJReXhQUVVGUExFVkJRVVU3VVVGRGFFSXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhoUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRmxCUVVjc1IwRkJReXhuUWtGQlRTeERRVUZETEZkQlFWY3NTVUZCUnl4blFrRkJUU3hEUVVGRExFOUJRVThzVFVGQlJTeERRVUZETzB0QlF6VkZPMGxCUlVRc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eGhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdTVUZGY2tNc01FSkJRV2RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSVFZDTEU5QlFVOHNSMEZCUnl4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVWRUxGTkJRVk1zWVVGQllUdEpRVU5zUWl4SlFVRkpMRVZCUVVVc1IwRkJVU3hGUVVGRkxFTkJRVU03U1VGRGFrSXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTjZReXhGUVVGRkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRMUVVNMVFqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGVkJRVlVzUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZET1VNc1JVRkJSU3hIUVVGSExHZENRVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRPMHRCUXpGQ08wbEJRMFFzVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEWkN4RFFVRkRPMEZCUlVRc1UwRkJVeXhUUVVGVExFTkJRVU1zUjBGQmJVSTdTVUZEYkVNc1IwRkJSeXhIUVVGSExHOUNRVUZ2UWl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMmhETEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRE8xbEJRMUFzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4SFFVRkhPMWxCUTFvc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eEpRVUZKTzFsQlEyUXNUVUZCVFN4RlFVRkZMRWRCUVVjc1EwRkJReXhOUVVGTk8xbEJRMnhDTEUxQlFVMHNSVUZCUlN4SFFVRkhMRU5CUVVNc1RVRkJUU3hKUVVGSkxFVkJRVVU3V1VGRGVFSXNVVUZCVVN4RlFVRkZMRWRCUVVjc1EwRkJReXhSUVVGUkxFbEJRVWtzVFVGQlRUdFpRVU5vUXl4UFFVRlBMRmxCUVVNc1IwRkJiME03WjBKQlEzaERMRTlCUVU4c1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzaENMRU5CUVVNN1dVRkRSQ3hKUVVGSkxGbEJRVU1zUjBGQk5rSTdaMEpCUXpsQ0xITkNRVUZaTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZEYmtNc1QwRkJUeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZGtJc1EwRkJRenRaUVVORUxGRkJRVkU3WjBKQlEwb3NTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhSUVVGUkxFdEJRVXNzVlVGQlZTeEZRVUZGTzI5Q1FVTndReXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdhVUpCUTJ4Q08yZENRVU5FTEVsQlFVa3NSMEZCUnl4RFFVRkRMRmRCUVZjc1JVRkJSVHR2UWtGRGFrSXNhVUpCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlFUdHBRa0ZEYWtJN1dVRkRUQ3hEUVVGRE8xTkJRMG9zUTBGQlF5eERRVUZCTzBsQlEwNHNRMEZCUXl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSVVFzVTBGQlV5eFpRVUZaTEVOQlFVTXNSMEZCYzBJN1NVRkRlRU1zUjBGQlJ5eEhRVUZITEhWQ1FVRjFRaXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEyNURMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTXZRaXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFsQlExWXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhIUVVGSE8xbEJRMW9zVVVGQlVTeEZRVUZGTEVkQlFVY3NRMEZCUXl4UlFVRlJMRWxCUVVrc1JVRkJSVHRaUVVNMVFpeEpRVUZKTEVWQlFVVXNSMEZCUnl4RFFVRkRMRWxCUVVrc1NVRkJTU3hGUVVGRk8xbEJRM0JDTEZGQlFWRXNSVUZCUlN4SFFVRkhMRU5CUVVNc1VVRkJVVHRaUVVOMFFpeFBRVUZQTEZsQlFVTXNSMEZCZFVNN1owSkJRek5ETEU5QlFVOHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM2hDTEVOQlFVTTdXVUZEUkN4SlFVRkpMRmxCUVVNc1IwRkJOa0k3WjBKQlF6bENMSE5DUVVGWkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRuUWtGRGJrTXNUMEZCVHl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGRrSXNRMEZCUXp0WlFVTkVMRkZCUVZFN1owSkJRMG9zU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4UlFVRlJMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yOUNRVU53UXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03YVVKQlEyeENPMmRDUVVORUxFbEJRVWtzUjBGQlJ5eERRVUZETEZkQlFWY3NSVUZCUlR0dlFrRkRha0lzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRVHRwUWtGRGFrSTdXVUZEVEN4RFFVRkRPMU5CUTBvc1EwRkJReXhEUVVGQk8wbEJRMDRzUTBGQlF5eERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc1UwRkJVeXhQUVVGUExFTkJRVU1zUjBGQmJVSTdTVUZEYUVNc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5PMUZCUXk5Q0xFZEJRVWNzUjBGQlJ5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkZha0lzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMRkZCUVZFc1JVRkJSVHRaUVVOcVFpeEpRVUZKTEZsQlFWa3NSMEZCUnl4eFFrRkJWeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTjRReXhKUVVGSkxGbEJRVmtzUlVGQlJUdG5Ra0ZEWkN4SlFVRkpMRkZCUVZFc1IwRkJSeXg1UWtGQlpTeERRVUZETEZsQlFWa3NSVUZCUlN4SFFVRkhMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU03WjBKQlF6ZEVMRTlCUVU4c1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJGQlF6VkNPMU5CUTBvN1VVRkZSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eExRVUZMTEVWQlFVVTdXVUZEV0N4elFrRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTjZRanRSUVVWRUxIZENRVUZqTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRM1pDTEU5QlFVOHNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGQk8xRkJRM3BDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGRExFZEJRVWM3V1VGRFVpeEpRVUZKTEZGQlFWRXNSMEZCUnl4NVFrRkJaU3hEUVVGRExFZEJRWE5ETEVWQlFVVXNSMEZCUnl4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJRM1pHTEU5QlFVOHNUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8xRkJRemRDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGRExFTkJRVU03V1VGRFVDeFBRVUZQTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOeVFpeERRVUZETEVOQlFVTXNRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNWVUZCVlN4RFFVRkRMRWRCUVhOQ08wbEJRM1JETEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4SFFVRkhMRWRCUVVjc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJXcENMRWxCUVVrc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVWQlFVVTdXVUZEYWtJc1NVRkJTU3haUVVGWkxFZEJRVWNzY1VKQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVFTXNTVUZCU1N4WlFVRlpMRVZCUVVVN1owSkJRMlFzU1VGQlNTeFJRVUZSTEVkQlFVY3NlVUpCUVdVc1EwRkJReXhaUVVGWkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEZsQlFWa3NRMEZCUXl4RFFVRkRPMmRDUVVOb1JTeFBRVUZQTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVNMVFqdFRRVU5LTzFGQlJVUXNkMEpCUVdNc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdXVUZEZGtJc1QwRkJUeXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdVVUZETlVJc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFVTXNSMEZCUnp0WlFVTlNMRWxCUVVrc1VVRkJVU3hIUVVGSExIbENRVUZsTEVOQlFVTXNSMEZCZVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzV1VGQldTeERRVUZETEVOQlFVTTdXVUZETjBZc1QwRkJUeXhQUVVGUExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZETjBJc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFVTXNRMEZCUXp0WlFVTlFMRTlCUVU4c1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkNMRU5CUVVNc1EwRkJReXhEUVVGQk8wbEJRMDRzUTBGQlF5eERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeE5RVUZOTEZGQlFVRTdTVUZEVGl4UFFVRlBMRk5CUVVFN1NVRkRVQ3hWUVVGVkxGbEJRVUU3UTBGRFlpeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUd4dllXUnBibWNnWm5KdmJTQW5MaTR2ZFhScGJDOXNiMkZrYVc1bkoxeHlYRzVwYlhCdmNuUWdZMjl1Wm1sbklHWnliMjBnSnk0dUwzTjBiM0psTDJOdmJtWnBaeWRjY2x4dWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhISmNibWx0Y0c5eWRDQnRiMk5yVFdGdVlXZGxjaUJtY205dElDY3VMMjF2WTJ0TllXNWhaMlZ5SjF4eVhHNXBiWEJ2Y25RZ1kyRmphR1ZOWVc1aFoyVnlJR1p5YjIwZ0p5NHZZMkZqYUdWTllXNWhaMlZ5SjF4eVhHNXBiWEJ2Y25RZ2MyVnpjMmx2YmsxaGJtRm5aWElnWm5KdmJTQW5MaTl6WlhOemFXOXVUV0Z1WVdkbGNpZGNjbHh1YVcxd2IzSjBJSEpsYzNCdmJuTmxTR0Z1Wkd4bGNpQm1jbTl0SUNjdUwzSmxjM0J2Ym5ObFNHRnVaR3hsY2lkY2NseHVhVzF3YjNKMElHUjFjbUYwYVc5dVVtVndiM0owWlhJZ1puSnZiU0JjSWk0dlpIVnlZWFJwYjI1U1pYQnZjblJsY2x3aVhISmNibWx0Y0c5eWRDQjFjbXdnWm5KdmJTQW5MaTR2ZFhScGJDOTFjbXduWEhKY2JtbHRjRzl5ZENCN1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1ZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSmNjbHh1YVcxd2IzSjBJR1Z5Y205eVNHRnVaR3hsY2lCbWNtOXRJRndpTGk5bGNuSnZja2hoYm1Sc1pYSmNJanRjY2x4dVhISmNiaTh2SU9hZ3ZPVzhqK1dNbG5WeWJGeHlYRzVtZFc1amRHbHZiaUJtYjNKdFlYUW9iM0pwWjJsdVZYSnNPaUJ6ZEhKcGJtY3BJSHRjY2x4dUlDQWdJR2xtSUNodmNtbG5hVzVWY213dWMzUmhjblJ6VjJsMGFDZ25hSFIwY0NjcEtTQjdYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzl5YVdkcGJsVnliRnh5WEc0Z0lDQWdmU0JsYkhObElIdGNjbHh1SUNBZ0lDQWdJQ0JzWlhRZ2RYSnNVR1Z5Wm1sNElEMGdZMjl1Wm1sbkxuVnliRkJsY21acGVEdGNjbHh1SUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTUxY214UVpYSm1hWGdnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0IxY214UVpYSm1hWGdnUFNCamIyNW1hV2N1ZFhKc1VHVnlabWw0S0NsY2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFZ5YkZCbGNtWnBlQ0FySUc5eWFXZHBibFZ5YkR0Y2NseHVJQ0FnSUgxY2NseHVmVnh5WEc1Y2NseHVMeThnNW9tQTVweUo2SyszNXJHQzVZK1I1WWU2NVltTjZaeUE2S2FCNVlHYTU1cUU1THFMNW9PRlhISmNibVoxYm1OMGFXOXVJSEJ5WlVSdlBGUWdaWGgwWlc1a2N5QkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dVBpaHZZbW82SUZRcE9pQlVJSHRjY2x4dUlDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxtSmxabTl5WlZObGJtUWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh5WEc0Z0lDQWdJQ0FnSUc5aWFpNWlaV1p2Y21WVFpXNWtLQ2s3WEhKY2JpQWdJQ0I5WEhKY2JpQWdJQ0F2THlEbm1idmx2WlhtZ0lIbHBMSG1sWWp2dkl6cGg0M2xwSTNubWJ2bHZaWG9ycUhtbGJCY2NseHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2IySnFMbkpsVEc5bmFXNURiM1Z1ZENBOVBUMGdYQ0oxYm1SbFptbHVaV1JjSWlrZ2UxeHlYRzRnSUNBZ0lDQWdJRzlpYWk1eVpVeHZaMmx1UTI5MWJuUWdQU0F3TzF4eVhHNGdJQ0FnZlNCbGJITmxJSHRjY2x4dUlDQWdJQ0FnSUNCdlltb3VjbVZNYjJkcGJrTnZkVzUwS3lzN1hISmNiaUFnSUNCOVhISmNibHh5WEc0Z0lDQWdhV1lnS0c5aWFpNXphRzkzVEc5aFpHbHVaeWtnZTF4eVhHNGdJQ0FnSUNBZ0lHeHZZV1JwYm1jdWMyaHZkeWh2WW1vdWMyaHZkMHh2WVdScGJtY3BPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUdsbUlDZ2hiMkpxTG05eWFXZHBibFZ5YkNrZ2UxeHlYRzRnSUNBZ0lDQWdJRzlpYWk1dmNtbG5hVzVWY213Z1BTQnZZbW91ZFhKc08xeHlYRzRnSUNBZ0lDQWdJRzlpYWk1MWNtd2dQU0JtYjNKdFlYUW9iMkpxTG5WeWJDazdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnY21WMGRYSnVJRzlpYWp0Y2NseHVmVnh5WEc1Y2NseHVMeThnNXFDODVieVA1WXlXNWFTRTU1Q0c2SyszNXJHQzU1cUViMkpxNVlhRjVhNjVYSEpjYm1aMWJtTjBhVzl1SUdsdWFYUnBZV3hwZW1WU1pYRjFaWE4wVDJKcUtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNHBJSHRjY2x4dVhISmNiaUFnSUNCcFppQW9JVzlpYWk1a1lYUmhLU0I3WEhKY2JpQWdJQ0FnSUNBZ2IySnFMbVJoZEdFZ1BTQjdmVHRjY2x4dUlDQWdJSDFjY2x4dVhISmNiaUFnSUNCcFppQW9iMkpxTG05eWFXZHBibFZ5YkNBaFBUMGdZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1ZFhKc0lDWW1JSE4wWVhSMWN5NXpaWE56YVc5dUtTQjdYSEpjYmlBZ0lDQWdJQ0FnYjJKcUxtUmhkR0VnUFNCN0xpNHViMkpxTG1SaGRHRWdZWE1nYjJKcVpXTjBMQ0JiWTI5dVptbG5Mbk5sYzNOcGIyNU9ZVzFsWFRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjU5TzF4eVhHNGdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZVdGcU9XeGdPV1BndWFWc08rOGpPV0ltZWEzdStXS29GeHlYRzRnSUNBZ1kyOXVjM1FnWjJRZ1BTQm5aWFJIYkc5aVlXeEVZWFJoS0NrN1hISmNiaUFnSUNCdlltb3VaR0YwWVNBOUlIc3VMaTVuWkN3Z0xpNHViMkpxTG1SaGRHRWdZWE1nYjJKcVpXTjBmVHRjY2x4dVhISmNiaUFnSUNCdlltb3ViV1YwYUc5a0lEMGdiMkpxTG0xbGRHaHZaQ0I4ZkNBblIwVlVKenRjY2x4dUlDQWdJRzlpYWk1a1lYUmhWSGx3WlNBOUlHOWlhaTVrWVhSaFZIbHdaU0I4ZkNBbmFuTnZiaWM3WEhKY2JseHlYRzRnSUNBZ0x5OGc1YWFDNXA2YzZLKzM1ckdDNUxpTjVwaXZSMFZVNzd5TTVZaVo1WnlvVlZKTTVMaXQ2SWVxNVlxbzVZcWc1TGlLNTVtNzViMlY1b0NCNVpLTTVZV281YkdBNVkrQzVwV3dYSEpjYmlBZ0lDQnBaaUFvYjJKcUxtMWxkR2h2WkNBaFBUMGdYQ0pIUlZSY0lpa2dlMXh5WEc0Z0lDQWdJQ0FnSUdsbUlDaHpkR0YwZFhNdWMyVnpjMmx2YmlrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCdlltb3VkWEpzSUQwZ2RYSnNMbk5sZEZCaGNtRnRjeWh2WW1vdWRYSnNMQ0I3VzJOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlYwNklITjBZWFIxY3k1elpYTnphVzl1ZlNrN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0FnSUc5aWFpNTFjbXdnUFNCMWNtd3VjMlYwVUdGeVlXMXpLRzlpYWk1MWNtd3NJR2RrS1R0Y2NseHVJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQmtkWEpoZEdsdmJsSmxjRzl5ZEdWeUxuTjBZWEowS0c5aWFpazdYSEpjYmx4eVhHNGdJQ0FnY21WMGRYSnVJRzlpYWp0Y2NseHVmVnh5WEc1Y2NseHVMeThnNXFDODVieVA1WXlXNWFTRTU1Q0c1TGlLNUx5ZzVwYUg1THUyNTVxRWIySnE1WWFGNWE2NVhISmNibVoxYm1OMGFXOXVJR2x1YVhScFlXeHBlbVZWY0d4dllXUkdhV3hsVDJKcUtHOWlham9nU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRwSUh0Y2NseHVJQ0FnSUdsbUlDZ2hiMkpxTG1admNtMUVZWFJoS1NCN1hISmNiaUFnSUNBZ0lDQWdiMkpxTG1admNtMUVZWFJoSUQwZ2UzMDdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnYVdZZ0tHOWlhaTV2Y21sbmFXNVZjbXdnSVQwOUlHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMblZ5YkNBbUppQnpkR0YwZFhNdWMyVnpjMmx2YmlrZ2UxeHlYRzRnSUNBZ0lDQWdJRzlpYWk1bWIzSnRSR0YwWVNBOUlIc3VMaTV2WW1vdVptOXliVVJoZEdFZ1lYTWdiMkpxWldOMExDQmJZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxYVG9nYzNSaGRIVnpMbk5sYzNOcGIyNTlPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUM4dklPV21ndWFlbk9hY2llV0ZxT1d4Z09XUGd1YVZzTys4ak9XSW1lYTN1K1dLb0Z4eVhHNGdJQ0FnWTI5dWMzUWdaMlFnUFNCblpYUkhiRzlpWVd4RVlYUmhLQ2s3WEhKY2JpQWdJQ0J2WW1vdVptOXliVVJoZEdFZ1BTQjdMaTR1WjJRc0lDNHVMbTlpYWk1bWIzSnRSR0YwWVgwN1hISmNibHh5WEc0Z0lDQWdMeThnNWJDRzU1bTc2Wm1HNW9DQjVMbWY1YmltNVp5b2RYSnM1TGlLWEhKY2JpQWdJQ0JwWmlBb2MzUmhkSFZ6TG5ObGMzTnBiMjRwSUh0Y2NseHVJQ0FnSUNBZ0lDQnZZbW91ZFhKc0lEMGdkWEpzTG5ObGRGQmhjbUZ0Y3lodlltb3VkWEpzTENCN1cyTnZibVpwWnk1elpYTnphVzl1VG1GdFpWMDZJSE4wWVhSMWN5NXpaWE56YVc5dWZTazdYSEpjYmlBZ0lDQjlYSEpjYmlBZ0lDQXZMeURsaGFqbHNZRGxqNExtbGJEbGtJem1sN2JtbEw3bG5LaDFjbXprdUlwY2NseHVJQ0FnSUc5aWFpNTFjbXdnUFNCMWNtd3VjMlYwVUdGeVlXMXpLRzlpYWk1MWNtd3NJR2RrS1R0Y2NseHVYSEpjYmlBZ0lDQmtkWEpoZEdsdmJsSmxjRzl5ZEdWeUxuTjBZWEowS0c5aWFpazdYSEpjYmx4eVhHNGdJQ0FnY21WMGRYSnVJRzlpYWp0Y2NseHVmVnh5WEc1Y2NseHVablZ1WTNScGIyNGdaMlYwUjJ4dlltRnNSR0YwWVNncElIdGNjbHh1SUNBZ0lHeGxkQ0JuWkRvZ1lXNTVJRDBnZTMwN1hISmNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1bmJHOWlZV3hFWVhSaElEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNjbHh1SUNBZ0lDQWdJQ0JuWkNBOUlHTnZibVpwWnk1bmJHOWlZV3hFWVhSaEtDazdYSEpjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdVoyeHZZbUZzUkdGMFlTQTlQVDBnWENKdlltcGxZM1JjSWlrZ2UxeHlYRzRnSUNBZ0lDQWdJR2RrSUQwZ1kyOXVabWxuTG1kc2IySmhiRVJoZEdFN1hISmNiaUFnSUNCOVhISmNiaUFnSUNCeVpYUjFjbTRnWjJRN1hISmNibjFjY2x4dVhISmNibVoxYm1OMGFXOXVJR1J2VW1WeGRXVnpkQ2h2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1S1NCN1hISmNiaUFnSUNCdlltb2dQU0JwYm1sMGFXRnNhWHBsVW1WeGRXVnpkRTlpYWlodlltb3BPMXh5WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2NseHVJQ0FnSUNBZ0lDQjNlQzV5WlhGMVpYTjBLSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdkWEpzT2lCdlltb3VkWEpzTEZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaE9pQnZZbW91WkdGMFlTeGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2JXVjBhRzlrT2lCdlltb3ViV1YwYUc5a0xGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCb1pXRmtaWEk2SUc5aWFpNW9aV0ZrWlhJZ2ZId2dlMzBzWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR1JoZEdGVWVYQmxPaUJ2WW1vdVpHRjBZVlI1Y0dVZ2ZId2dKMnB6YjI0bkxGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCemRXTmpaWE56S0hKbGN6b2dkM2d1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb2NtVnpLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdmU3hjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdabUZwYkNoeVpYTTZJSGQ0TGtkbGJtVnlZV3hEWVd4c1ltRmphMUpsYzNWc2RDa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlhKeWIzSklZVzVrYkdWeUxuTjVjM1JsYlVWeWNtOXlLRzlpYWl3Z2NtVnpLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9jbVZ6S1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHeGxkR1VvS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1amIyMXdiR1YwWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTnZiWEJzWlhSbEtDazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9iMkpxTG5Ob2IzZE1iMkZrYVc1bktTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHOWhaR2x1Wnk1b2FXUmxLQ2xjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lIMHBYSEpjYmlBZ0lDQjlLVnh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCa2IxVndiRzloWkVacGJHVW9iMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHlYRzRnSUNBZ2IySnFJRDBnYVc1cGRHbGhiR2w2WlZWd2JHOWhaRVpwYkdWUFltb29iMkpxS1R0Y2NseHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYSEpjYmlBZ0lDQWdJQ0FnZDNndWRYQnNiMkZrUm1sc1pTaDdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIVnliRG9nYjJKcUxuVnliQ3hjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdabWxzWlZCaGRHZzZJRzlpYWk1bWFXeGxVR0YwYUNCOGZDQW5KeXhjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdibUZ0WlRvZ2IySnFMbTVoYldVZ2ZId2dKeWNzWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR1p2Y20xRVlYUmhPaUJ2WW1vdVptOXliVVJoZEdFc1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhOMVkyTmxjM01vY21Wek9pQjNlQzVWY0d4dllXUkdhV3hsVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHlaWE1wTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc0tISmxjem9nZDNndVIyVnVaWEpoYkVOaGJHeGlZV05yVW1WemRXeDBLU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGNuSnZja2hoYm1Sc1pYSXVjM2x6ZEdWdFJYSnliM0lvYjJKcUxDQnlaWE1wTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2h5WlhNcE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyMXdiR1YwWlNncElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxtTnZiWEJzWlhSbElEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlltb3VZMjl0Y0d4bGRHVW9LVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h2WW1vdWMyaHZkMHh2WVdScGJtY3BJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMkZrYVc1bkxtaHBaR1VvS1Z4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdmU2xjY2x4dUlDQWdJSDBwWEhKY2JuMWNjbHh1WEhKY2JtWjFibU4wYVc5dUlISmxjWFZsYzNRb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpazZJR0Z1ZVNCN1hISmNiaUFnSUNCeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh5WEc0Z0lDQWdJQ0FnSUc5aWFpQTlJSEJ5WlVSdktHOWlhaWs3WEhKY2JseHlYRzRnSUNBZ0lDQWdJR2xtSUNoamIyNW1hV2N1Ylc5amEwcHpiMjRwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHMXZZMnRTWlhOd2IyNXpaU0E5SUcxdlkydE5ZVzVoWjJWeUxtZGxkQ2h2WW1vcE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9iVzlqYTFKbGMzQnZibk5sS1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnY21WemNHOXVjMlVnUFNCeVpYTndiMjV6WlVoaGJtUnNaWElvYlc5amExSmxjM0J2Ym5ObExDQnZZbW9zSUNkeVpYRjFaWE4wSnlrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNoeVpYTndiMjV6WlNrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBZ0lHbG1JQ2h2WW1vdVkyRmphR1VwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGamFHVk5ZVzVoWjJWeUxtZGxkQ2h2WW1vcE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDQWdjMlZ6YzJsdmJrMWhibUZuWlhJdWJXRnBiaWdwTG5Sb1pXNG9LQ2tnUFQ0Z2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWkc5U1pYRjFaWE4wS0c5aWFpbGNjbHh1SUNBZ0lDQWdJQ0I5S1M1MGFHVnVLQ2h5WlhNcElEMCtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhKbGMzQnZibk5sSUQwZ2NtVnpjRzl1YzJWSVlXNWtiR1Z5S0hKbGN5QmhjeUIzZUM1U1pYRjFaWE4wVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MExDQnZZbW9zSUNkeVpYRjFaWE4wSnlrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLSEpsYzNCdmJuTmxLVHRjY2x4dUlDQWdJQ0FnSUNCOUtTNWpZWFJqYUNnb1pTa2dQVDRnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtHVXBPMXh5WEc0Z0lDQWdJQ0FnSUgwcFhISmNiaUFnSUNCOUtWeHlYRzU5WEhKY2JseHlYRzVtZFc1amRHbHZiaUIxY0d4dllXUkdhV3hsS0c5aWFqb2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBPaUJoYm5rZ2UxeHlYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjY2x4dUlDQWdJQ0FnSUNCdlltb2dQU0J3Y21WRWJ5aHZZbW9wTzF4eVhHNWNjbHh1SUNBZ0lDQWdJQ0JwWmlBb1kyOXVabWxuTG0xdlkydEtjMjl1S1NCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnRiMk5yVW1WemNHOXVjMlVnUFNCdGIyTnJUV0Z1WVdkbGNpNW5aWFFvYjJKcUtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzF2WTJ0U1pYTndiMjV6WlNrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhKbGMzQnZibk5sSUQwZ2NtVnpjRzl1YzJWSVlXNWtiR1Z5S0cxdlkydFNaWE53YjI1elpTd2diMkpxTENBbmRYQnNiMkZrUm1sc1pTY3BPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9jbVZ6Y0c5dWMyVXBPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdJQ0J6WlhOemFXOXVUV0Z1WVdkbGNpNXRZV2x1S0NrdWRHaGxiaWdvS1NBOVBpQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCa2IxVndiRzloWkVacGJHVW9iMkpxS1Z4eVhHNGdJQ0FnSUNBZ0lIMHBMblJvWlc0b0tISmxjeWtnUFQ0Z2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZ6Y0c5dWMyVWdQU0J5WlhOd2IyNXpaVWhoYm1Sc1pYSW9jbVZ6SUdGeklIZDRMbFZ3Ykc5aFpFWnBiR1ZUZFdOalpYTnpRMkZzYkdKaFkydFNaWE4xYkhRc0lHOWlhaXdnSjNWd2JHOWhaRVpwYkdVbktUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvY21WemNHOXVjMlVwTzF4eVhHNGdJQ0FnSUNBZ0lIMHBMbU5oZEdOb0tDaGxLU0E5UGlCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9aU2s3WEhKY2JpQWdJQ0FnSUNBZ2ZTbGNjbHh1SUNBZ0lIMHBYSEpjYm4xY2NseHVYSEpjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjY2x4dUlDQWdJR1p2Y20xaGRDeGNjbHh1SUNBZ0lISmxjWFZsYzNRc1hISmNiaUFnSUNCMWNHeHZZV1JHYVd4bFhISmNibjFjY2x4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xyXG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RIYW5kbGVyXCIpO1xyXG52YXIgZXJyb3JIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9lcnJvckhhbmRsZXJcIik7XHJcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcclxudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XHJcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vc2Vzc2lvbk1hbmFnZXJcIik7XHJcbmZ1bmN0aW9uIHJlc3BvbnNlKHJlcywgb2JqLCBtZXRob2QpIHtcclxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXMuZGF0YSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5sb2dpY0Vycm9yKG9iaiwgcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQuZW5kKG9iaik7XHJcbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubG9naW5UcmlnZ2VyKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgb2JqLnJlTG9naW5Db3VudCA8IGNvbmZpZ18xLmRlZmF1bHQucmVMb2dpbkxpbWl0KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5kZWxTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09IFwicmVxdWVzdFwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQucmVxdWVzdChvYmopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJ1cGxvYWRGaWxlXCIpIHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC51cGxvYWRGaWxlKG9iaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzVHJpZ2dlcihyZXMuZGF0YSkpIHtcclxuICAgICAgICAgICAgdmFyIHJlYWxEYXRhID0gXCJcIjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzRGF0YShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGdW5jdGlvbiBzdWNjZXNzRGF0YSBvY2N1ciBlcnJvcjogXCIgKyBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW9iai5ub0NhY2hlRmxhc2gpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlYWxEYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFsRGF0YTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWNoZU1hbmFnZXJfMS5kZWZhdWx0LnNldChvYmosIHJlYWxEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChvYmouY2F0Y2hFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1zZyA9IGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZ2V0RXJyb3JNc2cocmVzKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cuY29udGVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmxvZ2ljRXJyb3Iob2JqLCByZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuc3RhdHVzQ29kZS50b1N0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IHJlc3BvbnNlO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ6Y0c5dWMyVklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzl5WlhOd2IyNXpaVWhoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zYlVSQlFUWkRPMEZCUXpkRExDdERRVUY1UXp0QlFVTjZReXdyUTBGQmVVTTdRVUZEZWtNc2RVUkJRV2xFTzBGQlEycEVMRzFFUVVFMlF6dEJRVWMzUXl4VFFVRlRMRkZCUVZFc1EwRkRZaXhIUVVGNVJTeEZRVU42UlN4SFFVRjFReXhGUVVOMlF5eE5RVUZuUXp0SlFVVm9ReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFZRVUZWTEV0QlFVc3NSMEZCUnl4RlFVRkZPMUZCUjNoQ0xFbEJRVWNzVDBGQlR5eEhRVUZITEVOQlFVTXNTVUZCU1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRaUVVNM1FpeEpRVUZKTzJkQ1FVTkJMRWRCUVVjc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WVVGRGJrTTdXVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRuUWtGRFVpeEpRVUZITEVkQlFVY3NRMEZCUXl4VlFVRlZMRVZCUVVVN2IwSkJRMllzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRGRFSTdjVUpCUVUwN2IwSkJRMGdzYzBKQlFWa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzI5Q1FVTnNReXhQUVVGUE8ybENRVU5XTzJGQlEwbzdVMEZEU2p0UlFVVkVMREJDUVVGblFpeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVVeFFpeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1dVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1dVRkJXU3hMUVVGTExGTkJRVk1zU1VGQlNTeEhRVUZITEVOQlFVTXNXVUZCV1N4SFFVRkhMR2RDUVVGTkxFTkJRVU1zV1VGQllTeEZRVUZGTzFsQlJUZEhMSGRDUVVGakxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdXVUZETlVJc1NVRkJSeXhOUVVGTkxFdEJRVXNzVTBGQlV5eEZRVUZGTzJkQ1FVTnlRaXgzUWtGQll5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRnhRaXhEUVVGRExFTkJRVU03WVVGRGFrUTdhVUpCUVUwc1NVRkJSeXhOUVVGTkxFdEJRVXNzV1VGQldTeEZRVUZGTzJkQ1FVTXZRaXgzUWtGQll5eERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRjNRaXhEUVVGRExFTkJRVU03WVVGRGRrUTdVMEZEU2p0aFFVRk5MRWxCUVVrc1owSkJRVTBzUTBGQlF5eGpRVUZqTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRk8xbEJSWGhETEVsQlFVa3NVVUZCVVN4SFFVRnpReXhGUVVGRkxFTkJRVU03V1VGRGNrUXNTVUZCU1R0blFrRkRRU3hSUVVGUkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJGQlF6TkRPMWxCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3WjBKQlExSXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXh2UTBGQmIwTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVNelJEdFpRVU5FTEVsQlFVY3NRMEZCUlN4SFFVRnpRaXhEUVVGRExGbEJRVmtzUlVGQlJUdG5Ra0ZGZEVNc1NVRkJSeXhQUVVGUExFZEJRVWNzUTBGQlF5eFBRVUZQTEV0QlFVc3NWVUZCVlN4RlFVRkRPMjlDUVVOcVF5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8ybENRVU42UWp0eFFrRkJUVHR2UWtGRFNDeFBRVUZQTEZGQlFWRXNRMEZCUXp0cFFrRkRia0k3WVVGRFNqdFpRVVZFTEhOQ1FVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeFJRVUZSTEVOQlFVTXNRMEZCUXp0VFFVTnVRenRoUVVGTk8xbEJSVWdzU1VGQlJ5eEhRVUZITEVOQlFVTXNWVUZCVlN4RlFVRkZPMmRDUVVObUxFbEJRVWtzUjBGQlJ5eEhRVUZITEhOQ1FVRlpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTjRReXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRoUVVOb1F6dHBRa0ZCVFR0blFrRkRTQ3h6UWtGQldTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03WVVGRGNrTTdVMEZEU2p0TFFVTktPMU5CUVUwN1VVRkZTQ3hKUVVGSExFZEJRVWNzUTBGQlF5eFZRVUZWTEVWQlFVVTdXVUZEWml4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eFZRVUZWTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1EwRkJRenRUUVVNNVF6dGhRVUZOTzFsQlEwZ3NjMEpCUVZrc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMU5CUTNKRE8wdEJRMG83UVVGRFRDeERRVUZETzBGQlJVUXNhMEpCUVdVc1VVRkJVU3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YSEpjYm1sdGNHOXlkQ0J5WlhGMVpYTjBTR0Z1Wkd4bGNpQm1jbTl0SUNjdUwzSmxjWFZsYzNSSVlXNWtiR1Z5SjF4eVhHNXBiWEJ2Y25RZ1pYSnliM0pJWVc1a2JHVnlJR1p5YjIwZ0p5NHZaWEp5YjNKSVlXNWtiR1Z5SjF4eVhHNXBiWEJ2Y25RZ1kyRmphR1ZOWVc1aFoyVnlJR1p5YjIwZ0p5NHZZMkZqYUdWTllXNWhaMlZ5SjF4eVhHNXBiWEJ2Y25RZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2lCbWNtOXRJQ2N1TDJSMWNtRjBhVzl1VW1Wd2IzSjBaWEluWEhKY2JtbHRjRzl5ZENCelpYTnphVzl1VFdGdVlXZGxjaUJtY205dElDY3VMM05sYzNOcGIyNU5ZVzVoWjJWeUoxeHlYRzVwYlhCdmNuUWdleUJKVW1WeGRXVnpkRTl3ZEdsdmJpd2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNGdmU0JtY205dElGd2lMaTR2YVc1MFpYSm1ZV05sWENJN1hISmNibHh5WEc1bWRXNWpkR2x2YmlCeVpYTndiMjV6WlNoY2NseHVJQ0FnSUhKbGN6b2dkM2d1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENCOElIZDRMbFZ3Ykc5aFpFWnBiR1ZUZFdOalpYTnpRMkZzYkdKaFkydFNaWE4xYkhRc1hISmNiaUFnSUNCdlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUlId2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHNYSEpjYmlBZ0lDQnRaWFJvYjJRNklGd2ljbVZ4ZFdWemRGd2lJSHdnWENKMWNHeHZZV1JHYVd4bFhDSmNjbHh1S1RvZ1lXNTVJSHRjY2x4dUlDQWdJR2xtSUNoeVpYTXVjM1JoZEhWelEyOWtaU0E5UFQwZ01qQXdLU0I3WEhKY2JseHlYRzRnSUNBZ0lDQWdJQzh2SU9XRnZPV3V1WFZ3Ykc5aFpFWnBiR1hvdjVUbG01N25tb1J5WlhNdVpHRjBZZVdQcitpRHZlYVlyK1d0bCtlc3B1UzRzbHh5WEc0Z0lDQWdJQ0FnSUdsbUtIUjVjR1Z2WmlCeVpYTXVaR0YwWVNBOVBUMGdYQ0p6ZEhKcGJtZGNJaWtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0IwY25rZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVZ6TG1SaGRHRWdQU0JLVTA5T0xuQmhjbk5sS0hKbGN5NWtZWFJoS1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lvYjJKcUxtTmhkR05vUlhKeWIzSXBJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1pTazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnljbTl5U0dGdVpHeGxjaTVzYjJkcFkwVnljbTl5S0c5aWFpd2djbVZ6S1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNDdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FnSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWEl1Wlc1a0tHOWlhaWs3WEhKY2JseHlYRzRnSUNBZ0lDQWdJR2xtSUNoamIyNW1hV2N1Ykc5bmFXNVVjbWxuWjJWeUlTaHlaWE11WkdGMFlTa2dKaVlnYjJKcUxuSmxURzluYVc1RGIzVnVkQ0FoUFQwZ2RXNWtaV1pwYm1Wa0lDWW1JRzlpYWk1eVpVeHZaMmx1UTI5MWJuUWdQQ0JqYjI1bWFXY3VjbVZNYjJkcGJreHBiV2wwSVNrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG5tYnZsdlpYbWdJSGxwTEhtbFlqdnZJemt1SlRwaDQzb3I1WG1yS0htbGJEa3VJM290b1hvdjRmcGhZM252YTVjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdjMlZ6YzJsdmJrMWhibUZuWlhJdVpHVnNVMlZ6YzJsdmJpZ3BPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaWh0WlhSb2IyUWdQVDA5SUZ3aWNtVnhkV1Z6ZEZ3aUtTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhGMVpYTjBTR0Z1Wkd4bGNpNXlaWEYxWlhOMEtHOWlhaUJoY3lCSlVtVnhkV1Z6ZEU5d2RHbHZiaWs3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaWh0WlhSb2IyUWdQVDA5SUZ3aWRYQnNiMkZrUm1sc1pWd2lLU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYRjFaWE4wU0dGdVpHeGxjaTUxY0d4dllXUkdhV3hsS0c5aWFpQmhjeUJKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWs3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHTnZibVpwWnk1emRXTmpaWE56VkhKcFoyZGxjaWh5WlhNdVpHRjBZU2twSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVvNmw1WStqNkwrVTVadWU1b2lRNVlxZjU2Q0JYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J5WldGc1JHRjBZVG9nYzNSeWFXNW5JSHdnU1VGdWVVOWlhbVZqZENCOElFRnljbUY1UW5WbVptVnlJRDBnWENKY0lqdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2RISjVJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFlXeEVZWFJoSUQwZ1kyOXVabWxuTG5OMVkyTmxjM05FWVhSaEtISmxjeTVrWVhSaEtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpaGNJa1oxYm1OMGFXOXVJSE4xWTJObGMzTkVZWFJoSUc5alkzVnlJR1Z5Y205eU9pQmNJaUFySUdVcE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUtDRW9iMkpxSUdGeklFbFNaWEYxWlhOMFQzQjBhVzl1S1M1dWIwTmhZMmhsUm14aGMyZ3BJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklPV21ndWFlbk9TNHV1UzZodVMvbmVpdmdlbWh0ZW1kb3VTNGplbVhxdWVEZ2UrOGpPV0ltZVM0amVXYm51aXdnKys4ak9XUHF1YVlyK2U4aytXdG1PYWNnT2FXc09hVnNPYU5ydSs4ak9XK2hlUzRpK2Fzb2VpL20rV0ZwZVdHamVlVXFGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lvZEhsd1pXOW1JRzlpYWk1emRXTmpaWE56SUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1emRXTmpaWE56S0hKbFlXeEVZWFJoS1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsWVd4RVlYUmhPMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9lOGsrV3RtT1d0bU9XQ3FGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCallXTm9aVTFoYm1GblpYSXVjMlYwS0c5aWFpd2djbVZoYkVSaGRHRXBPMXh5WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9hT3BlV1BvK2kvbE9XYm51V2tzZWkwcGVlZ2dWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaHZZbW91WTJGMFkyaEZjbkp2Y2lrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUcxelp5QTlJR1Z5Y205eVNHRnVaR3hsY2k1blpYUkZjbkp2Y2sxelp5aHlaWE1wTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0cxelp5NWpiMjUwWlc1MEtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnljbTl5U0dGdVpHeGxjaTVzYjJkcFkwVnljbTl5S0c5aWFpd2djbVZ6S1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lIMGdaV3h6WlNCN1hISmNiaUFnSUNBZ0lDQWdMeThnYUhSMGNIUG92NVRsbTU3bmlyYm1nSUhub0lIcG5aNHlNREJjY2x4dUlDQWdJQ0FnSUNCcFppaHZZbW91WTJGMFkyaEZjbkp2Y2lrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvY21WekxuTjBZWFIxYzBOdlpHVXVkRzlUZEhKcGJtY29LU2s3WEhKY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnWlhKeWIzSklZVzVrYkdWeUxteHZaMmxqUlhKeWIzSW9iMkpxTENCeVpYTXBPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUgxY2NseHVmVnh5WEc1Y2NseHVaWGh3YjNKMElHUmxabUYxYkhRZ2NtVnpjRzl1YzJVN1hISmNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XHJcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XHJcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcclxudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XHJcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVxdWVzdEhhbmRsZXJcIik7XHJcbnZhciBjaGVja1Nlc3Npb25Qcm9taXNlID0gbnVsbDtcclxuZnVuY3Rpb24gY2hlY2tTZXNzaW9uKCkge1xyXG4gICAgaWYgKCFjaGVja1Nlc3Npb25Qcm9taXNlKSB7XHJcbiAgICAgICAgY2hlY2tTZXNzaW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ3eC5jaGVja1Nlc3Npb24oKVwiKTtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIHd4LmNoZWNrU2Vzc2lvbih7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KCd3eF9jaGVja1Nlc3Npb24nLCBzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hlY2tTZXNzaW9uUHJvbWlzZTtcclxufVxyXG5mdW5jdGlvbiBpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkge1xyXG4gICAgaWYgKCFzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKSB7XHJcbiAgICAgICAgZGVsU2Vzc2lvbigpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmZ1bmN0aW9uIGNoZWNrTG9naW4oKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGlmIChpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkpIHtcclxuICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG52YXIgbG9naW5Qcm9taXNlID0gbnVsbDtcclxuZnVuY3Rpb24gZG9Mb2dpbigpIHtcclxuICAgIGlmICghbG9naW5Qcm9taXNlKSB7XHJcbiAgICAgICAgbG9naW5Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICBsb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIGxvZ2luUHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxvZ2luUHJvbWlzZTtcclxufVxyXG5mdW5jdGlvbiBsb2dpbigpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3d4LmxvZ2luJyk7XHJcbiAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgd3gubG9naW4oe1xyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2RlMlNlc3Npb24ocmVzLmNvZGUpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogXCLor7fnqI3lkI7ph43or5VbY29kZSDojrflj5blpLHotKVdXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoJ3d4X2xvZ2luJywgc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IHJlcy5lcnJNc2cgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIHNldFNlc3Npb24oc2Vzc2lvbikge1xyXG4gICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gc2Vzc2lvbjtcclxuICAgIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xyXG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5KSB7XHJcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lO1xyXG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xyXG4gICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcclxuICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHd4LnNldFN0b3JhZ2Uoe1xyXG4gICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZSxcclxuICAgICAgICBkYXRhOiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25cclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIGNvZGUyU2Vzc2lvbihjb2RlKSB7XHJcbiAgICB2YXIgZGF0YTtcclxuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uZGF0YSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhIHx8IHt9O1xyXG4gICAgfVxyXG4gICAgZGF0YVtjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uY29kZU5hbWVdID0gY29kZTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgd3gucmVxdWVzdCh7XHJcbiAgICAgICAgICAgIHVybDogcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LmZvcm1hdChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsKSxcclxuICAgICAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICAgICAgbWV0aG9kOiBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ubWV0aG9kIHx8ICdHRVQnLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ucmVwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5yZXBvcnQsIHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5zdWNjZXNzKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmdldEVycm9yTXNnKHJlcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VXCIgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcbmZ1bmN0aW9uIGRlbFNlc3Npb24oKSB7XHJcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSAnJztcclxuICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xyXG4gICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZVxyXG4gICAgfSk7XHJcbiAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkpIHtcclxuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBJbmZpbml0eTtcclxuICAgICAgICB3eC5yZW1vdmVTdG9yYWdlKHtcclxuICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBtYWluKCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICByZXR1cm4gY2hlY2tMb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA/IFByb21pc2UucmVzb2x2ZSgpIDogY2hlY2tTZXNzaW9uKCk7XHJcbiAgICAgICAgfSwgZnVuY3Rpb24gKF9hKSB7XHJcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcclxuICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5kb0Vycm9yKHRpdGxlLCBjb250ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9KTtcclxuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcclxuICAgICAgICB9LCBmdW5jdGlvbiAoX2EpIHtcclxuICAgICAgICAgICAgdmFyIHRpdGxlID0gX2EudGl0bGUsIGNvbnRlbnQgPSBfYS5jb250ZW50O1xyXG4gICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmRvRXJyb3IodGl0bGUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0ge1xyXG4gICAgbWFpbjogbWFpbixcclxuICAgIHNldFNlc3Npb246IHNldFNlc3Npb24sXHJcbiAgICBkZWxTZXNzaW9uOiBkZWxTZXNzaW9uXHJcbn07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMyVnpjMmx2YmsxaGJtRm5aWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzTmxjM05wYjI1TllXNWhaMlZ5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzTUVOQlFXOURPMEZCUTNCRExEQkRRVUZ2UXp0QlFVTndReXdyUTBGQmVVTTdRVUZEZWtNc2RVUkJRV2xFTzBGQlEycEVMRzFFUVVFMlF6dEJRVWMzUXl4SlFVRkpMRzFDUVVGdFFpeEhRVUZSTEVsQlFVa3NRMEZCUXp0QlFVVndReXhUUVVGVExGbEJRVms3U1VGRGFrSXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeEZRVUZGTzFGQlEzUkNMRzFDUVVGdFFpeEhRVUZITEVsQlFVa3NUMEZCVHl4RFFVRkRMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3V1VGRE9VTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4RFFVRkRPMWxCUTJwRExFbEJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03V1VGRGJrTXNSVUZCUlN4RFFVRkRMRmxCUVZrc1EwRkJRenRuUWtGRFdpeFBRVUZQTzI5Q1FVVklMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03WjBKQlEzSkNMRU5CUVVNN1owSkJRMFFzU1VGQlNUdHZRa0ZGUVN4VlFVRlZMRVZCUVVVc1EwRkJRenR2UWtGRFlpeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenQzUWtGRGJFSXNUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenR2UWtGRGNrSXNRMEZCUXl4RlFVRkZMRlZCUVVNc1IwRkJVVHQzUWtGRFVpeFBRVUZQTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRGRrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRMUFzUTBGQlF6dG5Ra0ZEUkN4UlFVRlJPMjlDUVVOS0xFbEJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03YjBKQlEycERMREJDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4cFFrRkJhVUlzUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRek5FTEVOQlFVTTdZVUZEU2l4RFFVRkRMRU5CUVVFN1VVRkRUaXhEUVVGRExFTkJRVU1zUTBGQlFUdExRVU5NTzBsQlEwUXNUMEZCVHl4dFFrRkJiVUlzUTBGQlF6dEJRVU12UWl4RFFVRkRPMEZCUjBRc1UwRkJVeXh6UWtGQmMwSTdTVUZETTBJc1NVRkJTU3hEUVVGRExHZENRVUZOTEVOQlFVTXNUMEZCVHl4RlFVRkZPMUZCUldwQ0xFOUJRVThzU1VGQlNTeERRVUZCTzB0QlEyUTdTVUZEUkN4SlFVRkpMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRWxCUVVrc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNSMEZCUnl4blFrRkJUU3hEUVVGRExHRkJRV0VzUlVGQlJUdFJRVVY2UlN4VlFVRlZMRVZCUVVVc1EwRkJRenRSUVVOaUxFOUJRVThzU1VGQlNTeERRVUZCTzB0QlEyUTdTVUZEUkN4UFFVRlBMRXRCUVVzc1EwRkJRVHRCUVVOb1FpeERRVUZETzBGQlJVUXNVMEZCVXl4VlFVRlZPMGxCUTJZc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5PMUZCUXk5Q0xFbEJRVWtzYzBKQlFYTkNMRVZCUVVVc1JVRkJSVHRaUVVVeFFpeG5Ra0ZCVFN4RFFVRkRMR2xDUVVGcFFpeEhRVUZITEVsQlFVa3NRMEZCUXp0WlFVTm9ReXhQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXp0blFrRkRiRUlzVDBGQlR5eFBRVUZQTEVWQlFVVXNRMEZCUXp0WlFVTnlRaXhEUVVGRExFVkJRVVVzVlVGQlF5eEhRVUZSTzJkQ1FVTlNMRTlCUVU4c1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzWkNMRU5CUVVNc1EwRkJReXhEUVVGQk8xTkJRMHc3WVVGQlRUdFpRVVZJTEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNN1UwRkRjRUk3U1VGRFRDeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkhSQ3hKUVVGSkxGbEJRVmtzUjBGQlVTeEpRVUZKTEVOQlFVTTdRVUZGTjBJc1UwRkJVeXhQUVVGUE8wbEJRMW9zU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0UlFVTm1MRmxCUVZrc1IwRkJSeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5PMWxCUTNaRExFdEJRVXNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXp0blFrRkRWQ3haUVVGWkxFZEJRVWNzU1VGQlNTeERRVUZETzJkQ1FVTndRaXhQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETzFsQlEzSkNMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eFZRVUZETEVkQlFVYzdaMEpCUTFRc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF6dG5Ra0ZEY0VJc1QwRkJUeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZGtJc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFVDeERRVUZETEVOQlFVTXNRMEZCUVR0TFFVTk1PMGxCUTBRc1QwRkJUeXhaUVVGWkxFTkJRVU03UVVGRGVFSXNRMEZCUXp0QlFVVkVMRk5CUVZNc1MwRkJTenRKUVVOV0xFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNWVUZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUVHRSUVVNdlFpeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8xRkJRM2hDTEVsQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZEYmtNc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF6dFpRVU5NTEU5QlFVOHNXVUZCUXl4SFFVRkhPMmRDUVVOUUxFbEJRVWtzUjBGQlJ5eERRVUZETEVsQlFVa3NSVUZCUlR0dlFrRkRWaXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenQzUWtGRGVFSXNUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenR2UWtGRGNrSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVU1zUjBGQlJ6dDNRa0ZEVkN4UFFVRlBMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHZRa0ZEZGtJc1EwRkJReXhEUVVGRExFTkJRVUU3YVVKQlEwdzdjVUpCUVUwN2IwSkJRMGdzVDBGQlR5eE5RVUZOTEVOQlFVTXNSVUZCUXl4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxGTkJRVk1zUlVGQlJTeHJRa0ZCYTBJc1JVRkJReXhEUVVGRExFTkJRVU03YVVKQlEycEZPMWxCUTB3c1EwRkJRenRaUVVORUxGRkJRVkU3WjBKQlEwb3NTVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0blFrRkRha01zTUVKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRjRVFzUTBGQlF6dFpRVU5FTEVsQlFVa3NXVUZCUXl4SFFVRkhPMmRDUVVOS0xFOUJRVThzVFVGQlRTeERRVUZETEVWQlFVTXNTMEZCU3l4RlFVRkZMRTFCUVUwc1JVRkJSU3hUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEUxQlFVMHNSVUZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNVVFzUTBGQlF6dFRRVU5LTEVOQlFVTXNRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNWVUZCVlN4RFFVRkRMRTlCUVdVN1NVRkRMMElzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRE8wbEJSWHBDTEdkQ1FVRk5MRU5CUVVNc2FVSkJRV2xDTEVkQlFVY3NTVUZCU1N4RFFVRkRPMGxCUldoRExFbEJRVWtzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMR2RDUVVGblFpeEZRVUZGTzFGQlEzSkVMR2RDUVVGTkxFTkJRVU1zWVVGQllTeEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF6dFJRVU4yUlN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xbEJRMVlzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTzFsQlF6VkNMRWxCUVVrc1JVRkJSU3hOUVVGTkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNN1UwRkRja01zUTBGQlF5eERRVUZCTzB0QlEwdzdTVUZEUkN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xRkJRMVlzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1YwRkJjVUk3VVVGRGFrTXNTVUZCU1N4RlFVRkZMR2RDUVVGTkxFTkJRVU1zVDBGQlR6dExRVU4yUWl4RFFVRkRMRU5CUVVNN1FVRkRVQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eFpRVUZaTEVOQlFVTXNTVUZCV1R0SlFVTTVRaXhKUVVGSkxFbEJRVk1zUTBGQlF6dEpRVVZrTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTJwRUxFbEJRVWtzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dExRVU4wUXp0VFFVRk5PMUZCUTBnc1NVRkJTU3hIUVVGSExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03UzBGRE1VTTdTVUZEUkN4SlFVRkpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNVVUZCVXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8wbEJSVFZETEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4SlFVRkpMRXRCUVVzc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMUZCUTJwRExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTTdXVUZEVUN4SFFVRkhMRVZCUVVVc2QwSkJRV01zUTBGQlF5eE5RVUZOTEVOQlFVTXNaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eERRVUZETzFsQlEzQkVMRWxCUVVrc1RVRkJRVHRaUVVOS0xFMUJRVTBzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGTkxFbEJRVWtzUzBGQlN6dFpRVU0xUXl4UFFVRlBMRmxCUVVNc1IwRkJiME03WjBKQlEzaERMRWxCUVVrc1IwRkJSeXhEUVVGRExGVkJRVlVzUzBGQlN5eEhRVUZITEVWQlFVVTdiMEpCUlhoQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1RVRkJUU3hGUVVGRk8zZENRVU0zUWl4SlFVRkpMRWRCUVVjc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPM2RDUVVNdlFpd3dRa0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFdEJRVXNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUVR0eFFrRkRia1U3YjBKQlJVUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8yOUNRVU5ZTEVsQlFVazdkMEpCUTBFc1EwRkJReXhIUVVGSExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdjVUpCUXpsRE8yOUNRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPM0ZDUVVOWU8yOUNRVVZFTEVsQlFVa3NRMEZCUXl4RlFVRkZPM2RDUVVOSUxHZENRVUZOTEVOQlFVTXNUMEZCVHl4SFFVRkhMRU5CUVVNc1EwRkJRenQzUWtGRmJrSXNaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4SlFVRkpMRU5CUVVNN2QwSkJSV2hETEVsQlFVa3NaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4blFrRkJUU3hEUVVGRExHZENRVUZuUWl4RlFVRkZPelJDUVVOeVJDeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNN05FSkJRM1pGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNN1owTkJRMVlzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTzJkRFFVTTFRaXhKUVVGSkxFVkJRVVVzVFVGQlRTeERRVUZETEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRE96WkNRVU55UXl4RFFVRkRMRU5CUVVFN2VVSkJRMHc3ZDBKQlEwUXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJRenMwUWtGRFZpeEhRVUZITEVWQlFVVXNaMEpCUVUwc1EwRkJReXhYUVVGWE96UkNRVU4yUWl4SlFVRkpMRVZCUVVVc1owSkJRVTBzUTBGQlF5eFBRVUZQTzNsQ1FVTjJRaXhEUVVGRExFTkJRVU03ZDBKQlEwZ3NUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenR4UWtGRGNFSTdlVUpCUVUwN2QwSkJRMGdzVDBGQlR5eE5RVUZOTEVOQlFVTXNjMEpCUVZrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0eFFrRkRhRVE3YVVKQlEwbzdjVUpCUVUwN2IwSkJRMGdzVDBGQlR5eE5RVUZOTEVOQlFVTXNSVUZCUXl4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxGTkJRVk1zUlVGQlJTeFBRVUZQTEVWQlFVTXNRMEZCUXl4RFFVRkRPMmxDUVVOMFJEdFpRVU5NTEVOQlFVTTdXVUZEUkN4UlFVRlJPMWxCUTFJc1EwRkJRenRaUVVORUxFbEJRVWtzUlVGQlJUdG5Ra0ZEUml4UFFVRlBMRTFCUVUwc1EwRkJReXhGUVVGRExFdEJRVXNzUlVGQlJTeE5RVUZOTEVWQlFVVXNVMEZCVXl4RlFVRkZMRTlCUVU4c1JVRkJReXhEUVVGRExFTkJRVU03V1VGRGRrUXNRMEZCUXp0VFFVTktMRU5CUVVNc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVZEVMRk5CUVZNc1ZVRkJWVHRKUVVObUxHZENRVUZOTEVOQlFVTXNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOd1FpeEZRVUZGTEVOQlFVTXNZVUZCWVN4RFFVRkRPMUZCUTJJc1IwRkJSeXhGUVVGRkxHZENRVUZOTEVOQlFVTXNWMEZCY1VJN1MwRkRjRU1zUTBGQlF5eERRVUZETzBsQlEwZ3NTVUZCU1N4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVN1VVRkRja1FzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRWRCUVVjc1VVRkJVU3hEUVVGRE8xRkJRMmhETEVWQlFVVXNRMEZCUXl4aFFVRmhMRU5CUVVNN1dVRkRZaXhIUVVGSExFVkJRVVVzWjBKQlFVMHNRMEZCUXl4blFrRkJaMEk3VTBGREwwSXNRMEZCUXl4RFFVRkJPMHRCUTB3N1FVRkRUQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eEpRVUZKTzBsQlExUXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlF5OUNMRTlCUVU4c1ZVRkJWU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETzFsQlEzSkNMRTlCUVU4c1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlFUdFJRVU40UlN4RFFVRkRMRVZCUVVVc1ZVRkJReXhGUVVGblFqdG5Ra0ZCWml4blFrRkJTeXhGUVVGRkxHOUNRVUZQTzFsQlEyWXNjMEpCUVZrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMWxCUTNKRExFOUJRVThzVFVGQlRTeERRVUZETEVWQlFVTXNTMEZCU3l4UFFVRkJMRVZCUVVVc1QwRkJUeXhUUVVGQkxFVkJRVU1zUTBGQlF5eERRVUZETzFGQlEzQkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dFpRVU5LTEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNN1VVRkRja0lzUTBGQlF5eEZRVUZGTEZWQlFVTXNSVUZCWjBJN1owSkJRV1lzWjBKQlFVc3NSVUZCUlN4dlFrRkJUenRaUVVObUxITkNRVUZaTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dFpRVU55UXl4UFFVRlBMRTFCUVUwc1EwRkJReXhGUVVGRExFdEJRVXNzVDBGQlFTeEZRVUZGTEU5QlFVOHNVMEZCUVN4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVOd1F5eERRVUZETEVOQlFVTXNRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1NVRkJTU3hOUVVGQk8wbEJRMG9zVlVGQlZTeFpRVUZCTzBsQlExWXNWVUZCVlN4WlFVRkJPME5CUTJJc1EwRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0J6ZEdGMGRYTWdabkp2YlNBbkxpNHZjM1J2Y21VdmMzUmhkSFZ6SjF4eVhHNXBiWEJ2Y25RZ1kyOXVabWxuSUdaeWIyMGdKeTR1TDNOMGIzSmxMMk52Ym1acFp5ZGNjbHh1YVcxd2IzSjBJR1Z5Y205eVNHRnVaR3hsY2lCbWNtOXRJQ2N1TDJWeWNtOXlTR0Z1Wkd4bGNpZGNjbHh1YVcxd2IzSjBJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSWdabkp2YlNBbkxpOWtkWEpoZEdsdmJsSmxjRzl5ZEdWeUoxeHlYRzVwYlhCdmNuUWdjbVZ4ZFdWemRFaGhibVJzWlhJZ1puSnZiU0FuTGk5eVpYRjFaWE4wU0dGdVpHeGxjaWRjY2x4dVhISmNiaThxSU9lVW4rV1J2ZVdScU9hY24rV0doZVdQcXVXQm11UzRnT2Fzb2VlYWhHTm9aV05yVTJWemMybHZiaUFxTDF4eVhHNXNaWFFnWTJobFkydFRaWE56YVc5dVVISnZiV2x6WlRvZ1lXNTVJRDBnYm5Wc2JEdGNjbHh1WEhKY2JtWjFibU4wYVc5dUlHTm9aV05yVTJWemMybHZiaWdwSUh0Y2NseHVJQ0FnSUdsbUlDZ2hZMmhsWTJ0VFpYTnphVzl1VUhKdmJXbHpaU2tnZTF4eVhHNGdJQ0FnSUNBZ0lHTm9aV05yVTJWemMybHZibEJ5YjIxcGMyVWdQU0J1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk52YkdVdWJHOW5LRndpZDNndVkyaGxZMnRUWlhOemFXOXVLQ2xjSWlrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSE4wWVhKMElEMGdibVYzSUVSaGRHVW9LUzVuWlhSVWFXMWxLQ2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSGQ0TG1Ob1pXTnJVMlZ6YzJsdmJpaDdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6ZFdOalpYTnpLQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SU9lWnUrVzlsZWFBZ2VhY2llYVZpTys4ak9TNGxPV2NxT2Fjck9lVW4rV1J2ZVdScU9hY24rV0doZWFYb09taHUrV0dqZWFqZ09tcWpPUzZobHh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0NrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlMRnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1GcGJDZ3BJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeURubWJ2bHZaWG1nSUhvdjRmbW5KOWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1pXeFRaWE56YVc5dUtDazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdSdlRHOW5hVzRvS1M1MGFHVnVLQ2dwSUQwK0lIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUxDQW9jbVZ6T2lCaGJua3BQVDU3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9jbVZ6S1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHNYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjIxd2JHVjBaU2dwSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmxibVFnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2RYSmhkR2x2YmxKbGNHOXlkR1Z5TG5KbGNHOXlkQ2duZDNoZlkyaGxZMnRUWlhOemFXOXVKeXdnYzNSaGNuUXNJR1Z1WkNrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBYSEpjYmlBZ0lDQWdJQ0FnZlNsY2NseHVJQ0FnSUgxY2NseHVJQ0FnSUhKbGRIVnliaUJqYUdWamExTmxjM05wYjI1UWNtOXRhWE5sTzF4eVhHNTlYSEpjYmx4eVhHNHZLaURsaUtUbWxxMXpaWE56YVc5dTVwaXY1WkNtNUxpNjU2bTY1b2lXNWJleTZMK0g1cHlmSUNvdlhISmNibVoxYm1OMGFXOXVJR2x6VTJWemMybHZia1Y0Y0dseVpVOXlSVzF3ZEhrb0tTQjdYSEpjYmlBZ0lDQnBaaUFvSVhOMFlYUjFjeTV6WlhOemFXOXVLU0I3WEhKY2JpQWdJQ0FnSUNBZ0x5OGc1YWFDNXA2YzU3eVQ1YTJZNUxpdDVyS2g1cHlKYzJWemMybHZibHh5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwY25WbFhISmNiaUFnSUNCOVhISmNiaUFnSUNCcFppQW9ZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZVYVcxbElDWW1JRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwSUQ0Z2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVXBJSHRjY2x4dUlDQWdJQ0FnSUNBdkx5RGxwb0xtbnB6bW5Jbm9ycjdudmE3bW5LemxuTEJ6WlhOemFXOXU1N3lUNWEyWTVwZTI2WmUwNzd5TTVMaVU1N3lUNWEyWTVwZTI2WmUwNWJleTVZaXdYSEpjYmlBZ0lDQWdJQ0FnWkdWc1UyVnpjMmx2YmlncE8xeHlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBjblZsWEhKY2JpQWdJQ0I5WEhKY2JpQWdJQ0J5WlhSMWNtNGdabUZzYzJWY2NseHVmVnh5WEc1Y2NseHVablZ1WTNScGIyNGdZMmhsWTJ0TWIyZHBiaWdwSUh0Y2NseHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYSEpjYmlBZ0lDQWdJQ0FnYVdZZ0tHbHpVMlZ6YzJsdmJrVjRjR2x5WlU5eVJXMXdkSGtvS1NrZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5RG1zcUhtbklubm1idnBtWWJtZ0lIdnZJemt1STNwbklEb3BvSGxobzFqYUdWamExTmxjM05wYjI1Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dVptbG5MbVJ2VG05MFEyaGxZMnRUWlhOemFXOXVJRDBnZEhKMVpUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdSdlRHOW5hVzRvS1M1MGFHVnVLQ2dwSUQwK0lIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNJQ2h5WlhNNklHRnVlU2s5UG50Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvY21WektUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTbGNjbHh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeURudkpQbHJaamt1SzNtbklselpYTnphVzl1NUxpVTVweXE2TCtINXB5ZlhISmNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLQ2s3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ2ZTbGNjbHh1ZlZ4eVhHNWNjbHh1THlvZzU1bTc2Wm1HNXJXQjU2aUw1NXFFY0hKdmJXbHpaU0FxTDF4eVhHNXNaWFFnYkc5bmFXNVFjbTl0YVhObE9pQmhibmtnUFNCdWRXeHNPMXh5WEc1Y2NseHVablZ1WTNScGIyNGdaRzlNYjJkcGJpZ3BJSHRjY2x4dUlDQWdJR2xtSUNnaGJHOW5hVzVRY205dGFYTmxLU0I3WEhKY2JpQWdJQ0FnSUNBZ2JHOW5hVzVRY205dGFYTmxJRDBnYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNiMmRwYmlncExuUm9aVzRvS0NrZ1BUNGdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkc5bmFXNVFjbTl0YVhObElEMGdiblZzYkR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0NrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUgwcExtTmhkR05vS0NoeVpYTXBJRDArSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeHZaMmx1VUhKdmJXbHpaU0E5SUc1MWJHdzdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtISmxjeWs3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4eVhHNGdJQ0FnSUNBZ0lIMHBYSEpjYmlBZ0lDQjlYSEpjYmlBZ0lDQnlaWFIxY200Z2JHOW5hVzVRY205dGFYTmxPMXh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCc2IyZHBiaWdwSUh0Y2NseHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYSEpjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVzYjJjb0ozZDRMbXh2WjJsdUp5azdYSEpjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjM1JoY25RZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjY2x4dUlDQWdJQ0FnSUNCM2VDNXNiMmRwYmloN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhOMVkyTmxjM01vY21WektTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NtVnpMbU52WkdVcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyUmxNbE5sYzNOcGIyNG9jbVZ6TG1OdlpHVXBMblJvWlc0b0tDa2dQVDRnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2dwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTG1OaGRHTm9LQ2h5WlhNcElEMCtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaHlaWE1wTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwWEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2UzUnBkR3hsT2lCY0l1ZVp1K1c5bGVXa3NlaTBwVndpTENCY0ltTnZiblJsYm5SY0lqb2dYQ0xvcjdmbnFJM2xrSTdwaDQzb3I1VmJZMjlrWlNEb2pyZmxqNWJscExIb3RLVmRYQ0o5S1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXRjR3hsZEdVb0tTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmxibVFnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSXVjbVZ3YjNKMEtDZDNlRjlzYjJkcGJpY3NJSE4wWVhKMExDQmxibVFwTzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc0tISmxjeWtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2g3ZEdsMGJHVTZJRndpNTVtNzViMlY1YVN4NkxTbFhDSXNJRndpWTI5dWRHVnVkRndpT2lCeVpYTXVaWEp5VFhObmZTazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0I5S1Z4eVhHNGdJQ0FnZlNsY2NseHVmVnh5WEc1Y2NseHVablZ1WTNScGIyNGdjMlYwVTJWemMybHZiaWh6WlhOemFXOXVPaUJ6ZEhKcGJtY3BJSHRjY2x4dUlDQWdJSE4wWVhSMWN5NXpaWE56YVc5dUlEMGdjMlZ6YzJsdmJqdGNjbHh1SUNBZ0lDOHZJT2FOb3VXYm51YWRwZWVhaEhObGMzTnBiMjd2dkl6a3VJM3BuSURvcG9IbGhvMWphR1ZqYTFObGMzTnBiMjVjY2x4dUlDQWdJR052Ym1acFp5NWtiMDV2ZEVOb1pXTnJVMlZ6YzJsdmJpQTlJSFJ5ZFdVN1hISmNiaUFnSUNBdkx5RGxwb0xtbnB6bW5Jbm9ycjdudmE3bW5LemxuTEJ6WlhOemFXOXU2TCtINXB5ZjVwZTI2WmUwWEhKY2JpQWdJQ0JwWmlBb1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVlVhVzFsSUNZbUlHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxTMlY1S1NCN1hISmNiaUFnSUNBZ0lDQWdjM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVVnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tTQXJJR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsVkdsdFpUdGNjbHh1SUNBZ0lDQWdJQ0IzZUM1elpYUlRkRzl5WVdkbEtIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2EyVjVPaUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlV0bGVTeGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZVG9nVTNSeWFXNW5LSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsS1Z4eVhHNGdJQ0FnSUNBZ0lIMHBYSEpjYmlBZ0lDQjlYSEpjYmlBZ0lDQjNlQzV6WlhSVGRHOXlZV2RsS0h0Y2NseHVJQ0FnSUNBZ0lDQnJaWGs2SUdOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlNCaGN5QnpkSEpwYm1jc1hISmNiaUFnSUNBZ0lDQWdaR0YwWVRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjVjY2x4dUlDQWdJSDBwTzF4eVhHNTlYSEpjYmx4eVhHNW1kVzVqZEdsdmJpQmpiMlJsTWxObGMzTnBiMjRvWTI5a1pUb2djM1J5YVc1bktTQjdYSEpjYmlBZ0lDQnNaWFFnWkdGMFlUb2dZVzU1TzF4eVhHNGdJQ0FnTHk4Z1kyOWtaVlJ2VTJWemMybHZiaTVrWVhSaDVwU3Y1b3lCNVllOTVwV3dYSEpjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWpiMlJsVkc5VFpYTnphVzl1TG1SaGRHRWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh5WEc0Z0lDQWdJQ0FnSUdSaGRHRWdQU0JqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1a1lYUmhLQ2s3WEhKY2JpQWdJQ0I5SUdWc2MyVWdlMXh5WEc0Z0lDQWdJQ0FnSUdSaGRHRWdQU0JqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1a1lYUmhJSHg4SUh0OU8xeHlYRzRnSUNBZ2ZWeHlYRzRnSUNBZ1pHRjBZVnRqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1amIyUmxUbUZ0WlNGZElEMGdZMjlrWlR0Y2NseHVYSEpjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4eVhHNGdJQ0FnSUNBZ0lHeGxkQ0J6ZEdGeWRDQTlJRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwTzF4eVhHNGdJQ0FnSUNBZ0lIZDRMbkpsY1hWbGMzUW9lMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjFjbXc2SUhKbGNYVmxjM1JJWVc1a2JHVnlMbVp2Y20xaGRDaGpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTUxY213cExGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhMRnh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnRaWFJvYjJRNklHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMbTFsZEdodlpDQjhmQ0FuUjBWVUp5eGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2MzVmpZMlZ6Y3loeVpYTTZJSGQ0TGxKbGNYVmxjM1JUZFdOalpYTnpRMkZzYkdKaFkydFNaWE4xYkhRcElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoeVpYTXVjM1JoZEhWelEyOWtaU0E5UFQwZ01qQXdLU0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnNklDWDVwZTI1TGlLNW9xbFhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMbkpsY0c5eWRDa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1pXNWtJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUjFjbUYwYVc5dVVtVndiM0owWlhJdWNtVndiM0owS0dOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxuSmxjRzl5ZEN3Z2MzUmhjblFzSUdWdVpDbGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0J6SUQwZ1hDSmNJanRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBjbmtnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeklEMGdZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1YzNWalkyVnpjeWh5WlhNdVpHRjBZU2s3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tITXBJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNSaGRIVnpMbk5sYzNOcGIyNGdQU0J6TzF4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RG1qYUxsbTU3bW5hWG5tb1J6WlhOemFXOXU3N3lNNUxpTjZaeUE2S2FCNVlhTlkyaGxZMnRUWlhOemFXOXVYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym1acFp5NWtiMDV2ZEVOb1pXTnJVMlZ6YzJsdmJpQTlJSFJ5ZFdVN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZWl1dnVlOXJ1YWNyT1djc0hObGMzTnBiMjdvdjRmbW5KL21sN2JwbDdSY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsVkdsdFpTQW1KaUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlV0bGVTa2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1NBcklHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlR0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGQ0TG5ObGRGTjBiM0poWjJVb2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa3NYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ1UzUnlhVzVuS0hOMFlYUjFjeTV6WlhOemFXOXVSWGh3YVhKbEtWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNsY2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjNlQzV6WlhSVGRHOXlZV2RsS0h0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3RsZVRvZ1kyOXVabWxuTG5ObGMzTnBiMjVPWVcxbExGeHlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlUb2djM1JoZEhWekxuTmxjM05wYjI1Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2hsY25KdmNraGhibVJzWlhJdVoyVjBSWEp5YjNKTmMyY29jbVZ6S1NrN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtIdDBhWFJzWlRvZ1hDTG5tYnZsdlpYbHBMSG90S1ZjSWl3Z1hDSmpiMjUwWlc1MFhDSTZJRndpNksrMzU2aU41WkNPNlllTjZLK1ZYQ0o5S1R0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXRjR3hsZEdVb0tTQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHWmhhV3c2SUNncElEMCtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9lM1JwZEd4bE9pQmNJdWVadStXOWxlV2tzZWkwcFZ3aUxDQmNJbU52Ym5SbGJuUmNJam9nWENMb3I3Zm5xSTNsa0k3cGg0M29yNVZjSW4wcE8xeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdmU2xjY2x4dUlDQWdJSDBwWEhKY2JuMWNjbHh1WEhKY2JpOHFJT2E0aGVlcHVuTmxjM05wYjI0Z0tpOWNjbHh1Wm5WdVkzUnBiMjRnWkdWc1UyVnpjMmx2YmlncElIdGNjbHh1SUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ0p5YzdYSEpjYmlBZ0lDQjNlQzV5WlcxdmRtVlRkRzl5WVdkbEtIdGNjbHh1SUNBZ0lDQWdJQ0JyWlhrNklHTnZibVpwWnk1elpYTnphVzl1VG1GdFpTQmhjeUJ6ZEhKcGJtZGNjbHh1SUNBZ0lIMHBPMXh5WEc0Z0lDQWdhV1lnS0dOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaU0FtSmlCamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpVdGxlU2tnZTF4eVhHNGdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxJRDBnU1c1bWFXNXBkSGs3WEhKY2JpQWdJQ0FnSUNBZ2QzZ3VjbVZ0YjNabFUzUnZjbUZuWlNoN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUd0bGVUb2dZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZMWlhsY2NseHVJQ0FnSUNBZ0lDQjlLVnh5WEc0Z0lDQWdmVnh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCdFlXbHVLQ2tnZTF4eVhHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNjbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZMmhsWTJ0TWIyZHBiaWdwTG5Sb1pXNG9LQ2tnUFQ0Z2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWTI5dVptbG5MbVJ2VG05MFEyaGxZMnRUWlhOemFXOXVJRDhnVUhKdmJXbHpaUzV5WlhOdmJIWmxLQ2tnT2lCamFHVmphMU5sYzNOcGIyNG9LVnh5WEc0Z0lDQWdJQ0FnSUgwc0lDaDdkR2wwYkdVc0lHTnZiblJsYm5SOUtTQTlQaUI3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR1Z5Y205eVNHRnVaR3hsY2k1a2IwVnljbTl5S0hScGRHeGxMQ0JqYjI1MFpXNTBLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoN2RHbDBiR1VzSUdOdmJuUmxiblI5S1R0Y2NseHVJQ0FnSUNBZ0lDQjlLUzUwYUdWdUtDZ3BJRDArSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjY2x4dUlDQWdJQ0FnSUNCOUxDQW9lM1JwZEd4bExDQmpiMjUwWlc1MGZTazlQaUI3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR1Z5Y205eVNHRnVaR3hsY2k1a2IwVnljbTl5S0hScGRHeGxMQ0JqYjI1MFpXNTBLVHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoN2RHbDBiR1VzSUdOdmJuUmxiblI5S1R0Y2NseHVJQ0FnSUNBZ0lDQjlLVnh5WEc0Z0lDQWdmU2xjY2x4dWZWeHlYRzVjY2x4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4eVhHNGdJQ0FnYldGcGJpeGNjbHh1SUNBZ0lITmxkRk5sYzNOcGIyNHNYSEpjYmlBZ0lDQmtaV3hUWlhOemFXOXVYSEpjYm4xY2NseHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGRlZmF1bHRDb25maWcgPSB7XHJcbiAgICBzZXNzaW9uTmFtZTogXCJzZXNzaW9uXCIsXHJcbiAgICBsb2dpblRyaWdnZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG4gICAgY29kZVRvU2Vzc2lvbjoge1xyXG4gICAgICAgIHVybDogXCJcIixcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7IH1cclxuICAgIH0sXHJcbiAgICBzdWNjZXNzVHJpZ2dlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuICAgIHVybFBlcmZpeDogXCJcIixcclxuICAgIHN1Y2Nlc3NEYXRhOiBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH0sXHJcbiAgICBkb05vdENoZWNrU2Vzc2lvbjogZmFsc2UsXHJcbiAgICBlcnJvclRpdGxlOiBcIuaTjeS9nOWksei0pVwiLFxyXG4gICAgZXJyb3JDb250ZW50OiBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH0sXHJcbiAgICByZUxvZ2luTGltaXQ6IDMsXHJcbiAgICBlcnJvckNhbGxiYWNrOiBudWxsLFxyXG4gICAgcmVwb3J0Q0dJOiBmYWxzZSxcclxuICAgIG1vY2tKc29uOiBmYWxzZSxcclxuICAgIGdsb2JhbERhdGE6IGZhbHNlLFxyXG4gICAgc2Vzc2lvbkV4cGlyZUtleTogXCJzZXNzaW9uRXhwaXJlS2V5XCJcclxufTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gZGVmYXVsdENvbmZpZztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5dVptbG5MbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwzTjBiM0psTDJOdmJtWnBaeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVVkJMRWxCUVUwc1lVRkJZU3hIUVVGblFqdEpRVU12UWl4WFFVRlhMRVZCUVVVc1UwRkJVenRKUVVOMFFpeFpRVUZaTzFGQlExSXNUMEZCVHl4TFFVRkxMRU5CUVVFN1NVRkRhRUlzUTBGQlF6dEpRVU5FTEdGQlFXRXNSVUZCUlR0UlFVTllMRWRCUVVjc1JVRkJSU3hGUVVGRk8xRkJRMUFzVDBGQlR5eEZRVUZGTEdOQlFVMHNRMEZCUXp0TFFVTnVRanRKUVVORUxHTkJRV003VVVGRFZpeFBRVUZQTEVsQlFVa3NRMEZCUVR0SlFVTm1MRU5CUVVNN1NVRkRSQ3hUUVVGVExFVkJRVVVzUlVGQlJUdEpRVU5pTEZkQlFWY3NXVUZCUXl4SFFVRlJPMUZCUTJoQ0xFOUJRVThzUjBGQlJ5eERRVUZCTzBsQlEyUXNRMEZCUXp0SlFVTkVMR2xDUVVGcFFpeEZRVUZGTEV0QlFVczdTVUZEZUVJc1ZVRkJWU3hGUVVGRkxFMUJRVTA3U1VGRGJFSXNXVUZCV1N4WlFVRkRMRWRCUVZFN1VVRkRha0lzVDBGQlR5eEhRVUZITEVOQlFVRTdTVUZEWkN4RFFVRkRPMGxCUTBRc1dVRkJXU3hGUVVGRkxFTkJRVU03U1VGRFppeGhRVUZoTEVWQlFVVXNTVUZCU1R0SlFVTnVRaXhUUVVGVExFVkJRVVVzUzBGQlN6dEpRVU5vUWl4UlFVRlJMRVZCUVVVc1MwRkJTenRKUVVObUxGVkJRVlVzUlVGQlJTeExRVUZMTzBsQlJXcENMR2RDUVVGblFpeEZRVUZGTEd0Q1FVRnJRanREUVVOMlF5eERRVUZETzBGQlJVWXNhMEpCUVdVc1lVRkJZU3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dTVWx1YVhSUGNIUnBiMjRnZlNCbWNtOXRJQ2N1TGk5cGJuUmxjbVpoWTJVblhISmNibHh5WEc1amIyNXpkQ0JrWldaaGRXeDBRMjl1Wm1sbk9pQkpTVzVwZEU5d2RHbHZiaUE5SUh0Y2NseHVJQ0FnSUhObGMzTnBiMjVPWVcxbE9pQmNJbk5sYzNOcGIyNWNJaXhjY2x4dUlDQWdJR3h2WjJsdVZISnBaMmRsY2lncElIdGNjbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJWY2NseHVJQ0FnSUgwc1hISmNiaUFnSUNCamIyUmxWRzlUWlhOemFXOXVPaUI3WEhKY2JpQWdJQ0FnSUNBZ2RYSnNPaUJjSWx3aUxGeHlYRzRnSUNBZ0lDQWdJSE4xWTJObGMzTTZJQ2dwUFQ0Z2UzMWNjbHh1SUNBZ0lIMHNYSEpjYmlBZ0lDQnpkV05qWlhOelZISnBaMmRsY2lncElIdGNjbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlZ4eVhHNGdJQ0FnZlN4Y2NseHVJQ0FnSUhWeWJGQmxjbVpwZURvZ1hDSmNJaXhjY2x4dUlDQWdJSE4xWTJObGMzTkVZWFJoS0hKbGN6b2dZVzU1S1NCN1hISmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMXh5WEc0Z0lDQWdmU3hjY2x4dUlDQWdJR1J2VG05MFEyaGxZMnRUWlhOemFXOXVPaUJtWVd4elpTeGNjbHh1SUNBZ0lHVnljbTl5VkdsMGJHVTZJRndpNXBPTjVMMmM1YVN4NkxTbFhDSXNYSEpjYmlBZ0lDQmxjbkp2Y2tOdmJuUmxiblFvY21Wek9pQmhibmtwSUh0Y2NseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpYSEpjYmlBZ0lDQjlMRnh5WEc0Z0lDQWdjbVZNYjJkcGJreHBiV2wwT2lBekxGeHlYRzRnSUNBZ1pYSnliM0pEWVd4c1ltRmphem9nYm5Wc2JDeGNjbHh1SUNBZ0lISmxjRzl5ZEVOSFNUb2dabUZzYzJVc1hISmNiaUFnSUNCdGIyTnJTbk52YmpvZ1ptRnNjMlVzWEhKY2JpQWdJQ0JuYkc5aVlXeEVZWFJoT2lCbVlXeHpaU3hjY2x4dUlDQWdJQzh2SUhObGMzTnBiMjdsbktqbW5LemxuTERudkpQbHJaam5tb1JyWlhsY2NseHVJQ0FnSUhObGMzTnBiMjVGZUhCcGNtVkxaWGs2SUZ3aWMyVnpjMmx2YmtWNGNHbHlaVXRsZVZ3aVhISmNibjA3WEhKY2JseHlYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmtaV1poZFd4MFEyOXVabWxuTzF4eVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZXhwb3J0cy5kZWZhdWx0ID0ge1xyXG4gICAgc2Vzc2lvbjogJycsXHJcbiAgICBzZXNzaW9uRXhwaXJlOiBJbmZpbml0eVxyXG59O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljM1JoZEhWekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNOMGIzSmxMM04wWVhSMWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxHdENRVUZsTzBsQlExZ3NUMEZCVHl4RlFVRkZMRVZCUVZrN1NVRkZja0lzWVVGQllTeEZRVUZGTEZGQlFXdENPME5CUXpkQ0xFTkJRVUVpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKbGVIQnZjblFnWkdWbVlYVnNkQ0I3WEhKY2JpQWdJQ0J6WlhOemFXOXVPaUFuSnlCaGN5QnpkSEpwYm1jc1hISmNiaUFnSUNBdkx5QnpaWE56YVc5dTZMK0g1cHlmNTVxRTVwZTI2WmUwNTRLNVhISmNiaUFnSUNCelpYTnphVzl1Ulhod2FYSmxPaUJKYm1acGJtbDBlU0JoY3lCdWRXMWlaWEpjY2x4dWZTQmhjeUJoYm5sY2NseHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZnVuY3Rpb24gc2hvdyh0eHQpIHtcclxuICAgIHd4LnNob3dUb2FzdCh7XHJcbiAgICAgICAgdGl0bGU6IHR5cGVvZiB0eHQgPT09ICdib29sZWFuJyA/ICfliqDovb3kuK0nIDogdHh0LFxyXG4gICAgICAgIGljb246ICdsb2FkaW5nJyxcclxuICAgICAgICBtYXNrOiB0cnVlLFxyXG4gICAgICAgIGR1cmF0aW9uOiA2MDAwMFxyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gaGlkZSgpIHtcclxuICAgIHd4LmhpZGVUb2FzdCh7fSk7XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0ge1xyXG4gICAgc2hvdzogc2hvdyxcclxuICAgIGhpZGU6IGhpZGVcclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYkc5aFpHbHVaeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OTFkR2xzTDJ4dllXUnBibWN1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3hUUVVGVExFbEJRVWtzUTBGQlF5eEhRVUZ4UWp0SlFVTXZRaXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETzFGQlExUXNTMEZCU3l4RlFVRkZMRTlCUVU4c1IwRkJSeXhMUVVGTExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSE8xRkJRemRETEVsQlFVa3NSVUZCUlN4VFFVRlRPMUZCUTJZc1NVRkJTU3hGUVVGRkxFbEJRVWs3VVVGRFZpeFJRVUZSTEVWQlFVVXNTMEZCU3p0TFFVTnNRaXhEUVVGRExFTkJRVUU3UVVGRFRpeERRVUZETzBGQlJVUXNVMEZCVXl4SlFVRkpPMGxCUTFRc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTnlRaXhEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4SlFVRkpMRTFCUVVFN1NVRkRTaXhKUVVGSkxFMUJRVUU3UTBGRFVDeERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpuVnVZM1JwYjI0Z2MyaHZkeWgwZUhRNklHSnZiMnhsWVc0Z2ZDQnpkSEpwYm1jcElIdGNjbHh1SUNBZ0lIZDRMbk5vYjNkVWIyRnpkQ2g3WEhKY2JpQWdJQ0FnSUNBZ2RHbDBiR1U2SUhSNWNHVnZaaUIwZUhRZ1BUMDlJQ2RpYjI5c1pXRnVKeUEvSUNmbGlxRG92YjNrdUswbklEb2dkSGgwTEZ4eVhHNGdJQ0FnSUNBZ0lHbGpiMjQ2SUNkc2IyRmthVzVuSnl4Y2NseHVJQ0FnSUNBZ0lDQnRZWE5yT2lCMGNuVmxMRnh5WEc0Z0lDQWdJQ0FnSUdSMWNtRjBhVzl1T2lBMk1EQXdNRnh5WEc0Z0lDQWdmU2xjY2x4dWZWeHlYRzVjY2x4dVpuVnVZM1JwYjI0Z2FHbGtaU2dwSUh0Y2NseHVJQ0FnSUhkNExtaHBaR1ZVYjJGemRDaDdmU2s3WEhKY2JuMWNjbHh1WEhKY2JtVjRjRzl5ZENCa1pXWmhkV3gwSUh0Y2NseHVJQ0FnSUhOb2IzY3NYSEpjYmlBZ0lDQm9hV1JsWEhKY2JuMWNjbHh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xyXG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXHJcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuZnVuY3Rpb24gc2V0UGFyYW1zKHVybCwgcGFyYW1zKSB7XHJcbiAgICBpZiAodXJsID09PSB2b2lkIDApIHsgdXJsID0gXCJcIjsgfVxyXG4gICAgdmFyIHF1ZXJ5U3RyaW5nSW5kZXggPSB1cmwuaW5kZXhPZihcIj9cIik7XHJcbiAgICB2YXIga3ZwID0ge307XHJcbiAgICBpZiAocXVlcnlTdHJpbmdJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgdmFyIG9sZFF1ZXJ5U3RyaW5nXzEgPSB1cmwuc3Vic3RyKHF1ZXJ5U3RyaW5nSW5kZXggKyAxKS5zcGxpdChcIiZcIik7XHJcbiAgICAgICAgb2xkUXVlcnlTdHJpbmdfMS5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgIHZhciBrdiA9IG9sZFF1ZXJ5U3RyaW5nXzFbaV0uc3BsaXQoXCI9XCIpO1xyXG4gICAgICAgICAgICBrdnBba3ZbMF1dID0ga3ZbMV07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBrdnAgPSBfX2Fzc2lnbih7fSwga3ZwLCBwYXJhbXMpO1xyXG4gICAgdmFyIHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmtleXMoa3ZwKVxyXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiBrZXkgKyBcIj1cIiArIGVuY29kZVVSSShrdnBba2V5XSk7XHJcbiAgICB9KVxyXG4gICAgICAgIC5qb2luKFwiJlwiKTtcclxuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcclxuICAgICAgICByZXR1cm4gdXJsLnN1YnN0cmluZygwLCBxdWVyeVN0cmluZ0luZGV4ICsgMSkgKyBxdWVyeVN0cmluZztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB1cmwgKyBcIj9cIiArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IHtcclxuICAgIHNldFBhcmFtczogc2V0UGFyYW1zXHJcbn07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRYSnNMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwzVjBhV3d2ZFhKc0xuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN096czdPenM3UVVGQlFTeFRRVUZUTEZOQlFWTXNRMEZCUXl4SFFVRm5RaXhGUVVGRkxFMUJRV003U1VGQmFFTXNiMEpCUVVFc1JVRkJRU3hSUVVGblFqdEpRVU12UWl4SlFVRk5MR2RDUVVGblFpeEhRVUZYTEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGJFUXNTVUZCU1N4SFFVRkhMRWRCUVZFc1JVRkJSU3hEUVVGRE8wbEJRMnhDTEVsQlFVa3NaMEpCUVdkQ0xFbEJRVWtzUTBGQlF5eEZRVUZGTzFGQlEzWkNMRWxCUVUwc1owSkJRV01zUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVVZ1UlN4blFrRkJZeXhEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPMWxCUTNoQ0xFbEJRVTBzUlVGQlJTeEhRVUZoTEdkQ1FVRmpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJ4RUxFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZGtJc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRFRqdEpRVVZFTEVkQlFVY3NaMEpCUVU4c1IwRkJSeXhGUVVGTExFMUJRVTBzUTBGQlF5eERRVUZETzBsQlJURkNMRWxCUVUwc1YwRkJWeXhIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRPMU5CUXk5Q0xFZEJRVWNzUTBGQlF5eFZRVUZCTEVkQlFVYzdVVUZEU2l4UFFVRlZMRWRCUVVjc1UwRkJTU3hUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkhMRU5CUVVNN1NVRkRNME1zUTBGQlF5eERRVUZETzFOQlEwUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSV1lzU1VGQlNTeG5Ra0ZCWjBJc1NVRkJTU3hEUVVGRExFVkJRVVU3VVVGRGRrSXNUMEZCVHl4SFFVRkhMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUlVGQlJTeG5Ra0ZCWjBJc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eFhRVUZYTEVOQlFVTTdTMEZETDBRN1UwRkJUVHRSUVVOSUxFOUJRVThzUjBGQlJ5eEhRVUZITEVkQlFVY3NSMEZCUnl4WFFVRlhMRU5CUVVNN1MwRkRiRU03UVVGRFRDeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hUUVVGVExGZEJRVUU3UTBGRFdpeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpuVnVZM1JwYjI0Z2MyVjBVR0Z5WVcxektIVnliRG9nYzNSeWFXNW5JRDBnWENKY0lpd2djR0Z5WVcxek9pQnZZbXBsWTNRcElIdGNjbHh1SUNBZ0lHTnZibk4wSUhGMVpYSjVVM1J5YVc1blNXNWtaWGc2SUc1MWJXSmxjaUE5SUhWeWJDNXBibVJsZUU5bUtGd2lQMXdpS1R0Y2NseHVJQ0FnSUd4bGRDQnJkbkE2SUdGdWVTQTlJSHQ5TzF4eVhHNGdJQ0FnYVdZZ0tIRjFaWEo1VTNSeWFXNW5TVzVrWlhnZ1BqMGdNQ2tnZTF4eVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUc5c1pGRjFaWEo1VTNSeWFXNW5JRDBnZFhKc0xuTjFZbk4wY2loeGRXVnllVk4wY21sdVowbHVaR1Y0SUNzZ01Ta3VjM0JzYVhRb1hDSW1YQ0lwTzF4eVhHNGdJQ0FnSUNBZ0lDOHZJRUIwY3kxcFoyNXZjbVZjY2x4dUlDQWdJQ0FnSUNCdmJHUlJkV1Z5ZVZOMGNtbHVaeTVtYjNKRllXTm9LQ2g0TENCcEtTQTlQaUI3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHdDJPaUJ6ZEhKcGJtZGJYU0E5SUc5c1pGRjFaWEo1VTNSeWFXNW5XMmxkTG5Od2JHbDBLRndpUFZ3aUtUdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2EzWndXMnQyV3pCZFhTQTlJR3QyV3pGZE8xeHlYRzRnSUNBZ0lDQWdJSDBwTzF4eVhHNGdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lHdDJjQ0E5SUhzdUxpNXJkbkFzSUM0dUxuQmhjbUZ0YzMwN1hISmNibHh5WEc0Z0lDQWdZMjl1YzNRZ2NYVmxjbmxUZEhKcGJtY2dQU0JQWW1wbFkzUXVhMlY1Y3locmRuQXBYSEpjYmlBZ0lDQWdJQ0FnTG0xaGNDaHJaWGtnUFQ0Z2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWUNSN2EyVjVmVDBrZTJWdVkyOWtaVlZTU1NocmRuQmJhMlY1WFNsOVlEdGNjbHh1SUNBZ0lDQWdJQ0I5S1Z4eVhHNGdJQ0FnSUNBZ0lDNXFiMmx1S0Z3aUpsd2lLVHRjY2x4dVhISmNiaUFnSUNCcFppQW9jWFZsY25sVGRISnBibWRKYm1SbGVDQStQU0F3S1NCN1hISmNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVnliQzV6ZFdKemRISnBibWNvTUN3Z2NYVmxjbmxUZEhKcGJtZEpibVJsZUNBcklERXBJQ3NnY1hWbGNubFRkSEpwYm1jN1hISmNiaUFnSUNCOUlHVnNjMlVnZTF4eVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMWNtd2dLeUJjSWo5Y0lpQXJJSEYxWlhKNVUzUnlhVzVuTzF4eVhHNGdJQ0FnZlZ4eVhHNTlYSEpjYmx4eVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCN1hISmNiaUFnSUNCelpYUlFZWEpoYlhOY2NseHVmVHRjY2x4dUlsMTkiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/build/weRequest.min.js b/build/weRequest.min.js index 4047d6d..e888f8c 100644 --- a/build/weRequest.min.js +++ b/build/weRequest.min.js @@ -1,5 +1,5 @@ /*! - * weRequest 1.2.3 + * weRequest 1.2.4 * https://github.com/IvinWu/weRequest */ -module.exports=function(e){var t={};function n(u){if(t[u])return t[u].exports;var o=t[u]={i:u,l:!1,exports:{}};return e[u].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,u){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:u})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var u=Object.create(null);if(n.r(u),Object.defineProperty(u,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(u,o,function(t){return e[t]}.bind(null,o));return u},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={sessionName:"session",loginTrigger:function(){return!1},codeToSession:{url:"",success:function(){}},successTrigger:function(){return!0},urlPerfix:"",successData:function(e){return e},doNotCheckSession:!1,errorTitle:"操作失败",errorContent:function(e){return e},reLoginLimit:3,errorCallback:null,reportCGI:!1,mockJson:!1,globalData:!1,sessionExpireKey:"sessionExpireKey"}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={session:"",sessionExpire:1/0}},function(e,t,n){"use strict";var u=this&&this.__assign||function(){return(u=Object.assign||function(e){for(var t,n=1,u=arguments.length;nu.default.sessionExpire&&(d(),1)?(o.default.doNotCheckSession=!0,a().then(function(){return e()},function(e){return t(e)})):e()})}var c=null;function a(){return c||(c=new Promise(function(e,t){new Promise(function(e,t){console.log("wx.login");var n=(new Date).getTime();wx.login({success:function(n){if(!n.code)return t({title:"登录失败",content:"请稍后重试[code 获取失败]"});var f,l;(f=n.code,(l="function"==typeof o.default.codeToSession.data?o.default.codeToSession.data():o.default.codeToSession.data||{})[o.default.codeToSession.codeName]=f,new Promise(function(e,t){var n=(new Date).getTime();wx.request({url:s.default.format(o.default.codeToSession.url),data:l,method:o.default.codeToSession.method||"GET",success:function(s){if(200===s.statusCode){if(o.default.codeToSession.report){var f=(new Date).getTime();i.default.report(o.default.codeToSession.report,n,f)}var l="";try{l=o.default.codeToSession.success(s.data)}catch(e){}return l?(u.default.session=l,o.default.doNotCheckSession=!0,o.default.sessionExpireTime&&o.default.sessionExpireKey&&(u.default.sessionExpire=(new Date).getTime()+o.default.sessionExpireTime,wx.setStorage({key:o.default.sessionExpireKey,data:String(u.default.sessionExpire)})),wx.setStorage({key:o.default.sessionName,data:u.default.session}),e()):t(r.default.getErrorMsg(s))}return t({title:"登录失败",content:"请稍后重试"})},complete:function(){},fail:function(){return t({title:"登录失败",content:"请稍后重试"})}})})).then(function(){return e()}).catch(function(e){return t(e)})},complete:function(){var e=(new Date).getTime();i.default.report("wx_login",n,e)},fail:function(e){return t({title:"登录失败",content:e.errMsg})}})}).then(function(){return c=null,e()}).catch(function(e){return c=null,t(e)})})),c}function d(){u.default.session="",wx.removeStorage({key:o.default.sessionName}),o.default.sessionExpireTime&&o.default.sessionExpireKey&&(u.default.sessionExpire=1/0,wx.removeStorage({key:o.default.sessionExpireKey}))}t.default={main:function(){return new Promise(function(e,t){return l().then(function(){return o.default.doNotCheckSession?Promise.resolve():(f||(f=new Promise(function(e,t){console.log("wx.checkSession()");var n=(new Date).getTime();wx.checkSession({success:function(){return e()},fail:function(){return d(),a().then(function(){return e()},function(e){return t(e)})},complete:function(){var e=(new Date).getTime();i.default.report("wx_checkSession",n,e)}})})),f)},function(e){var n=e.title,u=e.content;return r.default.doError(n,u),t({title:n,content:u})}).then(function(){return e()},function(e){var n=e.title,u=e.content;return r.default.doError(n,u),t({title:n,content:u})})})},setSession:function(e){u.default.session=e,o.default.doNotCheckSession=!0,o.default.sessionExpireTime&&o.default.sessionExpireKey&&(u.default.sessionExpire=(new Date).getTime()+o.default.sessionExpireTime,wx.setStorage({key:o.default.sessionExpireKey,data:String(u.default.sessionExpire)})),wx.setStorage({key:o.default.sessionName,data:u.default.session})},delSession:d}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(0);function o(e){var t="";if("function"==typeof u.default.errorTitle)try{t=u.default.errorTitle(e.data)}catch(e){}else"string"==typeof u.default.errorTitle&&(t=u.default.errorTitle);var n="";if("function"==typeof u.default.errorContent)try{n=u.default.errorContent(e.data)}catch(e){}else"string"==typeof u.default.errorContent&&(n=u.default.errorContent);return{title:t,content:n}}function r(e,t){wx.showModal({title:e,content:t||"网络或服务异常,请稍后重试",showCancel:!1})}t.default={systemError:function(e,t){"function"==typeof e.fail?e.fail(t):r("",t.errMsg)},logicError:function(e,t){if("function"==typeof e.fail)e.fail(t);else{var n=o(t);r(n.title,n.content)}"function"==typeof u.default.errorCallback&&u.default.errorCallback(e,t),console.error(t)},doError:r,getErrorMsg:o}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(0),o=n(6);function r(e,t,n){"function"==typeof u.default.reportCGI&&u.default.reportCGI(e,t,n,o.default)}t.default={start:function(e){e._reportStartTime=(new Date).getTime()},end:function(e){e._reportEndTime=(new Date).getTime(),e.report&&e._reportStartTime&&r(e.report,e._reportStartTime,e._reportEndTime)},report:r}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(2);t.default=function(e){return u.default.request(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={show:function(e){wx.showToast({title:"boolean"==typeof e?"加载中":e,icon:"loading",mask:!0,duration:6e4})},hide:function(){wx.hideToast({})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(0),o=n(2),r=n(4),i=n(9),s=n(5),f=n(3);t.default=function(e,t,n){if(200===e.statusCode){if("string"==typeof e.data)try{e.data=JSON.parse(e.data)}catch(n){if(t.catchError)throw new Error(n);return void r.default.logicError(t,e)}if(s.default.end(t),u.default.loginTrigger(e.data)&&void 0!==t.reLoginCount&&t.reLoginCount=0){var r=e.substr(n+1).split("&");r.forEach(function(e,t){var n=r[t].split("=");o[n[0]]=n[1]})}o=u({},o,t);var i=Object.keys(o).map(function(e){return e+"="+encodeURI(o[e])}).join("&");return n>=0?e.substring(0,n+1)+i:e+"?"+i}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(2);t.default=function(e){return u.default.uploadFile(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(3);t.default=function(e){u.default.setSession(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(3);t.default=function(){return u.default.main()}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(1);t.default=function(){return u.default.session}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(0),o=n(1);t.default=function(){return{urlPerfix:u.default.urlPerfix,sessionExpireTime:u.default.sessionExpireTime,sessionExpireKey:u.default.sessionExpireKey,sessionExpire:o.default.sessionExpire}}}]).default; \ No newline at end of file +module.exports=function(e){var t={};function n(u){if(t[u])return t[u].exports;var r=t[u]={i:u,l:!1,exports:{}};return e[u].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,u){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:u})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var u=Object.create(null);if(n.r(u),Object.defineProperty(u,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(u,r,function(t){return e[t]}.bind(null,r));return u},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=9)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={sessionName:"session",loginTrigger:function(){return!1},codeToSession:{url:"",success:function(){}},successTrigger:function(){return!0},urlPerfix:"",successData:function(e){return e},doNotCheckSession:!1,errorTitle:"操作失败",errorContent:function(e){return e},reLoginLimit:3,errorCallback:null,reportCGI:!1,mockJson:!1,globalData:!1,sessionExpireKey:"sessionExpireKey"}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={session:"",sessionExpire:1/0}},function(e,t,n){"use strict";var u=this&&this.__assign||function(){return(u=Object.assign||function(e){for(var t,n=1,u=arguments.length;nu.default.sessionExpire&&(d(),1)?(r.default.doNotCheckSession=!0,a().then(function(){return e()},function(e){return t(e)})):e()})}var c=null;function a(){return c||(c=new Promise(function(e,t){new Promise(function(e,t){console.log("wx.login");var n=(new Date).getTime();wx.login({success:function(n){if(!n.code)return t({title:"登录失败",content:"请稍后重试[code 获取失败]"});var f,l;(f=n.code,(l="function"==typeof r.default.codeToSession.data?r.default.codeToSession.data():r.default.codeToSession.data||{})[r.default.codeToSession.codeName]=f,new Promise(function(e,t){var n=(new Date).getTime();wx.request({url:s.default.format(r.default.codeToSession.url),data:l,method:r.default.codeToSession.method||"GET",success:function(s){if(200===s.statusCode){if(r.default.codeToSession.report){var f=(new Date).getTime();i.default.report(r.default.codeToSession.report,n,f)}var l="";try{l=r.default.codeToSession.success(s.data)}catch(e){}return l?(u.default.session=l,r.default.doNotCheckSession=!0,r.default.sessionExpireTime&&r.default.sessionExpireKey&&(u.default.sessionExpire=(new Date).getTime()+r.default.sessionExpireTime,wx.setStorage({key:r.default.sessionExpireKey,data:String(u.default.sessionExpire)})),wx.setStorage({key:r.default.sessionName,data:u.default.session}),e()):t(o.default.getErrorMsg(s))}return t({title:"登录失败",content:"请稍后重试"})},complete:function(){},fail:function(){return t({title:"登录失败",content:"请稍后重试"})}})})).then(function(){return e()}).catch(function(e){return t(e)})},complete:function(){var e=(new Date).getTime();i.default.report("wx_login",n,e)},fail:function(e){return t({title:"登录失败",content:e.errMsg})}})}).then(function(){return c=null,e()}).catch(function(e){return c=null,t(e)})})),c}function d(){u.default.session="",wx.removeStorage({key:r.default.sessionName}),r.default.sessionExpireTime&&r.default.sessionExpireKey&&(u.default.sessionExpire=1/0,wx.removeStorage({key:r.default.sessionExpireKey}))}t.default={main:function(){return new Promise(function(e,t){return l().then(function(){return r.default.doNotCheckSession?Promise.resolve():(f||(f=new Promise(function(e,t){console.log("wx.checkSession()");var n=(new Date).getTime();wx.checkSession({success:function(){return e()},fail:function(){return d(),a().then(function(){return e()},function(e){return t(e)})},complete:function(){var e=(new Date).getTime();i.default.report("wx_checkSession",n,e)}})})),f)},function(e){var n=e.title,u=e.content;return o.default.doError(n,u),t({title:n,content:u})}).then(function(){return e()},function(e){var n=e.title,u=e.content;return o.default.doError(n,u),t({title:n,content:u})})})},setSession:function(e){u.default.session=e,r.default.doNotCheckSession=!0,r.default.sessionExpireTime&&r.default.sessionExpireKey&&(u.default.sessionExpire=(new Date).getTime()+r.default.sessionExpireTime,wx.setStorage({key:r.default.sessionExpireKey,data:String(u.default.sessionExpire)})),wx.setStorage({key:r.default.sessionName,data:u.default.session})},delSession:d}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(0);function r(e){var t="";if("function"==typeof u.default.errorTitle)try{t=u.default.errorTitle(e.data)}catch(e){}else"string"==typeof u.default.errorTitle&&(t=u.default.errorTitle);var n="";if("function"==typeof u.default.errorContent)try{n=u.default.errorContent(e.data)}catch(e){}else"string"==typeof u.default.errorContent&&(n=u.default.errorContent);return{title:t,content:n}}function o(e,t){wx.showModal({title:e,content:t||"网络或服务异常,请稍后重试",showCancel:!1})}t.default={systemError:function(e,t){"function"==typeof e.fail?e.fail(t):o("",t.errMsg)},logicError:function(e,t){if("function"==typeof e.fail)e.fail(t);else{var n=r(t);o(n.title,n.content)}"function"==typeof u.default.errorCallback&&u.default.errorCallback(e,t),console.error(t)},doError:o,getErrorMsg:r}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(0),r=n(6);function o(e,t,n){"function"==typeof u.default.reportCGI&&u.default.reportCGI(e,t,n,r.default)}t.default={start:function(e){e._reportStartTime=(new Date).getTime()},end:function(e){e._reportEndTime=(new Date).getTime(),e.report&&e._reportStartTime&&o(e.report,e._reportStartTime,e._reportEndTime)},report:o}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(2);t.default=function(e){return u.default.request(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={show:function(e){wx.showToast({title:"boolean"==typeof e?"加载中":e,icon:"loading",mask:!0,duration:6e4})},hide:function(){wx.hideToast({})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={get:function(e){e.originUrl&&wx.getStorage({key:e.originUrl,success:function(t){(!0===e.cache||"function"==typeof e.cache&&e.cache(t.data))&&"function"==typeof e.success&&e.success(t.data,{isCache:!0}),"function"==typeof e.complete&&e.complete()}})},set:function(e,t){e.originUrl&&(!0===e.cache||"function"==typeof e.cache&&e.cache(t))&&wx.setStorage({key:e.originUrl,data:t})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(10),r=n(6),o=n(14),i=n(15),s=n(16),f=n(17),l=n(18),c={init:u.default,request:r.default,uploadFile:o.default,setSession:i.default,login:s.default,getSession:f.default,getConfig:l.default};t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(0),r=n(1);t.default=function(e){Object.assign(u.default,e);try{r.default.session=wx.getStorageSync(u.default.sessionName)||""}catch(e){console.error("wx.getStorageSync:fail, can not get session.")}try{r.default.sessionExpire=wx.getStorageSync(u.default.sessionExpireKey||"sessionExpireKey")||1/0}catch(e){console.error("wx.getStorageSync:fail, can not get sessionExpire.")}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(0),r=n(7);t.default={get:function(e){if(!(u.default.mockJson[e.url]||e.originUrl&&u.default.mockJson[e.originUrl]))return console.error("mock 没有对应接口的数据"),!1;var t=u.default.mockJson[e.url]||(e.originUrl?u.default.mockJson[e.originUrl]:""),n={data:t=JSON.parse(JSON.stringify(t)),statusCode:200};return r.default.hide(),n}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(0),r=n(2),o=n(4),i=n(8),s=n(5),f=n(3);t.default=function(e,t,n){if(200===e.statusCode){if("string"==typeof e.data)try{e.data=JSON.parse(e.data)}catch(n){if(t.catchError)throw new Error(n);return void o.default.logicError(t,e)}if(s.default.end(t),u.default.loginTrigger(e.data)&&void 0!==t.reLoginCount&&t.reLoginCount=0){var o=e.substr(n+1).split("&");o.forEach(function(e,t){var n=o[t].split("=");r[n[0]]=n[1]})}r=u({},r,t);var i=Object.keys(r).map(function(e){return e+"="+encodeURI(r[e])}).join("&");return n>=0?e.substring(0,n+1)+i:e+"?"+i}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(2);t.default=function(e){return u.default.uploadFile(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(3);t.default=function(e){u.default.setSession(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(3);t.default=function(){return u.default.main()}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(1);t.default=function(){return u.default.session}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=n(0),r=n(1);t.default=function(){return{urlPerfix:u.default.urlPerfix,sessionExpireTime:u.default.sessionExpireTime,sessionExpireKey:u.default.sessionExpireKey,sessionExpire:r.default.sessionExpire}}}]).default; \ No newline at end of file diff --git a/package.json b/package.json index 9da0085..d9af14c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "we-request", - "version": "1.2.3", + "version": "1.2.4", "description": "本工具通过拓展小程序的wx.request,让开发者通过简单的配置,实现自动管理登录态等功能", "keywords": [ "登录态", diff --git a/src/module/mockManager.ts b/src/module/mockManager.ts index 3fb3c43..95a5366 100644 --- a/src/module/mockManager.ts +++ b/src/module/mockManager.ts @@ -1,9 +1,8 @@ import config from '../store/config' import loading from '../util/loading' -import responseHandler from './responseHandler' import { IRequestOption, IUploadFileOption } from "../interface" -function get(obj: IRequestOption | IUploadFileOption, method: "request" | "uploadFile"): any { +function get(obj: IRequestOption | IUploadFileOption): any { if(!(config.mockJson[obj.url] || (obj.originUrl && config.mockJson[obj.originUrl]))) { // mock 没有对应接口的数据 @@ -20,7 +19,7 @@ function get(obj: IRequestOption | IUploadFileOption, method: "request" | "uploa }; loading.hide(); - return responseHandler(res, obj, method) + return res } export default { diff --git a/src/module/requestHandler.ts b/src/module/requestHandler.ts index 4c1bc4c..db5073b 100644 --- a/src/module/requestHandler.ts +++ b/src/module/requestHandler.ts @@ -174,9 +174,10 @@ function request(obj: IRequestOption): any { obj = preDo(obj); if (config.mockJson) { - let mockResponse = mockManager.get(obj, 'request'); + let mockResponse = mockManager.get(obj); if (mockResponse) { - return resolve(mockResponse); + let response = responseHandler(mockResponse, obj, 'request'); + return resolve(response); } } @@ -200,8 +201,11 @@ function uploadFile(obj: IUploadFileOption): any { obj = preDo(obj); if (config.mockJson) { - mockManager.get(obj, 'uploadFile'); - return; + let mockResponse = mockManager.get(obj); + if (mockResponse) { + let response = responseHandler(mockResponse, obj, 'uploadFile'); + return resolve(response); + } } sessionManager.main().then(() => {