1435 lines
325 KiB
JavaScript
1435 lines
325 KiB
JavaScript
/*!
|
|
* weRequest 1.8.1
|
|
* https://github.com/IvinWu/weRequest
|
|
*/
|
|
module.exports =
|
|
/******/ (function(modules) { // webpackBootstrap
|
|
/******/ // The module cache
|
|
/******/ var installedModules = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/
|
|
/******/ // Check if module is in cache
|
|
/******/ if(installedModules[moduleId]) {
|
|
/******/ return installedModules[moduleId].exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = installedModules[moduleId] = {
|
|
/******/ i: moduleId,
|
|
/******/ l: false,
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Flag the module as loaded
|
|
/******/ module.l = true;
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/******/
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
/******/ __webpack_require__.m = modules;
|
|
/******/
|
|
/******/ // expose the module cache
|
|
/******/ __webpack_require__.c = installedModules;
|
|
/******/
|
|
/******/ // define getter function for harmony exports
|
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
/******/ }
|
|
/******/ };
|
|
/******/
|
|
/******/ // define __esModule on exports
|
|
/******/ __webpack_require__.r = function(exports) {
|
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
/******/ }
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
/******/ };
|
|
/******/
|
|
/******/ // create a fake namespace object
|
|
/******/ // mode & 1: value is a module id, require it
|
|
/******/ // mode & 2: merge all properties of value into the ns
|
|
/******/ // mode & 4: return value when already ns object
|
|
/******/ // mode & 8|1: behave like require
|
|
/******/ __webpack_require__.t = function(value, mode) {
|
|
/******/ if(mode & 1) value = __webpack_require__(value);
|
|
/******/ if(mode & 8) return value;
|
|
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|
/******/ var ns = Object.create(null);
|
|
/******/ __webpack_require__.r(ns);
|
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|
/******/ return ns;
|
|
/******/ };
|
|
/******/
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
/******/ __webpack_require__.n = function(module) {
|
|
/******/ var getter = module && module.__esModule ?
|
|
/******/ function getDefault() { return module['default']; } :
|
|
/******/ function getModuleExports() { return module; };
|
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
/******/ return getter;
|
|
/******/ };
|
|
/******/
|
|
/******/ // Object.prototype.hasOwnProperty.call
|
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
/******/
|
|
/******/ // __webpack_public_path__
|
|
/******/ __webpack_require__.p = "";
|
|
/******/
|
|
/******/
|
|
/******/ // Load entry module and return exports
|
|
/******/ return __webpack_require__(__webpack_require__.s = "./src/index.ts");
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ({
|
|
|
|
/***/ "./src/api/getConfig.ts":
|
|
/*!******************************!*\
|
|
!*** ./src/api/getConfig.ts ***!
|
|
\******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
|
|
var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts");
|
|
exports.default = (function () {
|
|
return {
|
|
urlPerfix: config_1.default.urlPerfix,
|
|
sessionExpireTime: config_1.default.sessionExpireTime,
|
|
sessionExpireKey: config_1.default.sessionExpireKey,
|
|
sessionExpire: status_1.default.sessionExpire
|
|
};
|
|
});
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Q29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9nZXRDb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQW9DO0FBRXBDLG1CQUFlO0lBQ1gsT0FBTztRQUNILFNBQVMsRUFBRSxnQkFBTSxDQUFDLFNBQVM7UUFDM0IsaUJBQWlCLEVBQUUsZ0JBQU0sQ0FBQyxpQkFBaUI7UUFDM0MsZ0JBQWdCLEVBQUUsZ0JBQU0sQ0FBQyxnQkFBZ0I7UUFDekMsYUFBYSxFQUFFLGdCQUFNLENBQUMsYUFBYTtLQUN0QyxDQUFBO0FBQ0wsQ0FBQyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgc3RhdHVzIGZyb20gJy4uL3N0b3JlL3N0YXR1cydcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHVybFBlcmZpeDogY29uZmlnLnVybFBlcmZpeCxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZVRpbWU6IGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZSxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZUtleTogY29uZmlnLnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgIHNlc3Npb25FeHBpcmU6IHN0YXR1cy5zZXNzaW9uRXhwaXJlXG4gICAgfVxufTtcbiJdfQ==
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/api/getSession.ts":
|
|
/*!*******************************!*\
|
|
!*** ./src/api/getSession.ts ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts");
|
|
exports.default = (function () {
|
|
return status_1.default.session;
|
|
});
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvZ2V0U2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBDQUFvQztBQUVwQyxtQkFBZTtJQUNYLE9BQU8sZ0JBQU0sQ0FBQyxPQUFPLENBQUE7QUFDekIsQ0FBQyxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0YXR1cyBmcm9tICcuLi9zdG9yZS9zdGF0dXMnXG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgICByZXR1cm4gc3RhdHVzLnNlc3Npb25cbn1cbiJdfQ==
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/api/init.ts":
|
|
/*!*************************!*\
|
|
!*** ./src/api/init.ts ***!
|
|
\*************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
|
|
var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts");
|
|
exports.default = (function (params) {
|
|
Object.assign(config_1.default, params);
|
|
try {
|
|
status_1.default.session = wx.getStorageSync(config_1.default.sessionName) || '';
|
|
}
|
|
catch (e) { }
|
|
try {
|
|
status_1.default.sessionExpire = wx.getStorageSync(config_1.default.sessionExpireKey || "sessionExpireKey") || Infinity;
|
|
}
|
|
catch (e) { }
|
|
});
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBDQUFvQztBQUNwQywwQ0FBb0M7QUFHcEMsbUJBQWUsVUFBQyxNQUFtQjtJQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUIsSUFBSTtRQUNBLGdCQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsZ0JBQU0sQ0FBQyxXQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDakU7SUFBQyxPQUFPLENBQUMsRUFBRSxHQUFFO0lBQ2QsSUFBSTtRQUNBLGdCQUFNLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsZ0JBQU0sQ0FBQyxnQkFBZ0IsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLFFBQVEsQ0FBQztLQUN2RztJQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUU7QUFDbEIsQ0FBQyxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgc3RhdHVzIGZyb20gJy4uL3N0b3JlL3N0YXR1cydcbmltcG9ydCB7IElJbml0T3B0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlJ1xuXG5leHBvcnQgZGVmYXVsdCAocGFyYW1zOiBJSW5pdE9wdGlvbikgPT4ge1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCBwYXJhbXMpO1xuICAgIHRyeSB7XG4gICAgICAgIHN0YXR1cy5zZXNzaW9uID0gd3guZ2V0U3RvcmFnZVN5bmMoY29uZmlnLnNlc3Npb25OYW1lISkgfHwgJyc7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgICBzdGF0dXMuc2Vzc2lvbkV4cGlyZSA9IHd4LmdldFN0b3JhZ2VTeW5jKGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5IHx8IFwic2Vzc2lvbkV4cGlyZUtleVwiKSB8fCBJbmZpbml0eTtcbiAgICB9IGNhdGNoIChlKSB7fVxufVxuIl19
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/api/login.ts":
|
|
/*!**************************!*\
|
|
!*** ./src/api/login.ts ***!
|
|
\**************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var sessionManager_1 = __webpack_require__(/*! ../module/sessionManager */ "./src/module/sessionManager.ts");
|
|
exports.default = (function () {
|
|
return sessionManager_1.default.main();
|
|
});
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2xvZ2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkRBQXFEO0FBRXJELG1CQUFlO0lBQ1gsT0FBTyx3QkFBYyxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ2hDLENBQUMsRUFBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzZXNzaW9uTWFuYWdlciBmcm9tICcuLi9tb2R1bGUvc2Vzc2lvbk1hbmFnZXInXG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgICByZXR1cm4gc2Vzc2lvbk1hbmFnZXIubWFpbigpXG59XG4iXX0=
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/api/request.ts":
|
|
/*!****************************!*\
|
|
!*** ./src/api/request.ts ***!
|
|
\****************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var requestHandler_1 = __webpack_require__(/*! ../module/requestHandler */ "./src/module/requestHandler.ts");
|
|
exports.default = (function (obj) {
|
|
return requestHandler_1.default.request(obj);
|
|
});
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJEQUFxRDtBQUdyRCxtQkFBZSxVQUFRLEdBQW1CO0lBQ3RDLE9BQU8sd0JBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDdEMsQ0FBQyxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlcXVlc3RIYW5kbGVyIGZyb20gJy4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlcidcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlJ1xuXG5leHBvcnQgZGVmYXVsdCA8VFJlc3A+KG9iajogSVJlcXVlc3RPcHRpb24pOiBQcm9taXNlPFRSZXNwPiA9PiB7XG4gICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyLnJlcXVlc3Qob2JqKVxufVxuIl19
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/api/setSession.ts":
|
|
/*!*******************************!*\
|
|
!*** ./src/api/setSession.ts ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var sessionManager_1 = __webpack_require__(/*! ../module/sessionManager */ "./src/module/sessionManager.ts");
|
|
exports.default = (function (session) {
|
|
sessionManager_1.default.setSession(session);
|
|
});
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0U2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvc2V0U2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJEQUFxRDtBQUVyRCxtQkFBZSxVQUFDLE9BQWU7SUFDM0Isd0JBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNlc3Npb25NYW5hZ2VyIGZyb20gJy4uL21vZHVsZS9zZXNzaW9uTWFuYWdlcidcblxuZXhwb3J0IGRlZmF1bHQgKHNlc3Npb246IHN0cmluZykgPT4ge1xuICAgIHNlc3Npb25NYW5hZ2VyLnNldFNlc3Npb24oc2Vzc2lvbik7XG59XG4iXX0=
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/api/uploadFile.ts":
|
|
/*!*******************************!*\
|
|
!*** ./src/api/uploadFile.ts ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var requestHandler_1 = __webpack_require__(/*! ../module/requestHandler */ "./src/module/requestHandler.ts");
|
|
exports.default = (function (obj) {
|
|
return requestHandler_1.default.uploadFile(obj);
|
|
});
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkRmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvdXBsb2FkRmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJEQUFxRDtBQUdyRCxtQkFBZSxVQUFDLEdBQXNCO0lBQ2xDLE9BQU8sd0JBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDekMsQ0FBQyxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlcXVlc3RIYW5kbGVyIGZyb20gJy4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlcidcbmltcG9ydCB7IElVcGxvYWRGaWxlT3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCAob2JqOiBJVXBsb2FkRmlsZU9wdGlvbikgPT4ge1xuICAgIHJldHVybiByZXF1ZXN0SGFuZGxlci51cGxvYWRGaWxlKG9iailcbn1cbiJdfQ==
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/index.ts":
|
|
/*!**********************!*\
|
|
!*** ./src/index.ts ***!
|
|
\**********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var init_1 = __webpack_require__(/*! ./api/init */ "./src/api/init.ts");
|
|
var request_1 = __webpack_require__(/*! ./api/request */ "./src/api/request.ts");
|
|
var uploadFile_1 = __webpack_require__(/*! ./api/uploadFile */ "./src/api/uploadFile.ts");
|
|
var setSession_1 = __webpack_require__(/*! ./api/setSession */ "./src/api/setSession.ts");
|
|
var login_1 = __webpack_require__(/*! ./api/login */ "./src/api/login.ts");
|
|
var getSession_1 = __webpack_require__(/*! ./api/getSession */ "./src/api/getSession.ts");
|
|
var getConfig_1 = __webpack_require__(/*! ./api/getConfig */ "./src/api/getConfig.ts");
|
|
var version_1 = __webpack_require__(/*! ./version */ "./src/version.ts");
|
|
var weRequestObject = {
|
|
init: init_1.default,
|
|
request: request_1.default,
|
|
uploadFile: uploadFile_1.default,
|
|
setSession: setSession_1.default,
|
|
login: login_1.default,
|
|
getSession: getSession_1.default,
|
|
getConfig: getConfig_1.default,
|
|
version: version_1.version
|
|
};
|
|
exports.default = weRequestObject;
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtQ0FBNkI7QUFDN0IseUNBQW1DO0FBQ25DLCtDQUF5QztBQUN6QywrQ0FBeUM7QUFDekMscUNBQStCO0FBQy9CLCtDQUF5QztBQUN6Qyw2Q0FBdUM7QUFFdkMscUNBQW1DO0FBRW5DLElBQU0sZUFBZSxHQUFjO0lBQ2pDLElBQUksZ0JBQUE7SUFDSixPQUFPLG1CQUFBO0lBQ1AsVUFBVSxzQkFBQTtJQUNWLFVBQVUsc0JBQUE7SUFDVixLQUFLLGlCQUFBO0lBQ0wsVUFBVSxzQkFBQTtJQUNWLFNBQVMscUJBQUE7SUFDVCxPQUFPLG1CQUFBO0NBQ1IsQ0FBQztBQUVGLGtCQUFlLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbml0IGZyb20gXCIuL2FwaS9pbml0XCJcbmltcG9ydCByZXF1ZXN0IGZyb20gXCIuL2FwaS9yZXF1ZXN0XCJcbmltcG9ydCB1cGxvYWRGaWxlIGZyb20gXCIuL2FwaS91cGxvYWRGaWxlXCJcbmltcG9ydCBzZXRTZXNzaW9uIGZyb20gXCIuL2FwaS9zZXRTZXNzaW9uXCJcbmltcG9ydCBsb2dpbiBmcm9tIFwiLi9hcGkvbG9naW5cIlxuaW1wb3J0IGdldFNlc3Npb24gZnJvbSBcIi4vYXBpL2dldFNlc3Npb25cIlxuaW1wb3J0IGdldENvbmZpZyBmcm9tIFwiLi9hcGkvZ2V0Q29uZmlnXCJcbmltcG9ydCB7IHdlUmVxdWVzdCB9IGZyb20gXCIuL2ludGVyZmFjZVwiXG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uJ1xuXG5jb25zdCB3ZVJlcXVlc3RPYmplY3Q6IHdlUmVxdWVzdCA9IHtcbiAgaW5pdCxcbiAgcmVxdWVzdCxcbiAgdXBsb2FkRmlsZSxcbiAgc2V0U2Vzc2lvbixcbiAgbG9naW4sXG4gIGdldFNlc3Npb24sXG4gIGdldENvbmZpZyxcbiAgdmVyc2lvblxufTtcblxuZXhwb3J0IGRlZmF1bHQgd2VSZXF1ZXN0T2JqZWN0O1xuIl19
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/module/cacheManager.ts":
|
|
/*!************************************!*\
|
|
!*** ./src/module/cacheManager.ts ***!
|
|
\************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
function get(obj) {
|
|
if (!obj.originUrl) {
|
|
return;
|
|
}
|
|
wx.getStorage({
|
|
key: obj.originUrl,
|
|
success: function (res) {
|
|
if (obj.cache === true ||
|
|
(typeof obj.cache === "function" && obj.cache(res.data))) {
|
|
if (typeof obj.success === "function") {
|
|
obj.success(res.data, { isCache: true });
|
|
}
|
|
}
|
|
if (typeof obj.complete === "function") {
|
|
obj.complete();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
function set(obj, realData) {
|
|
if (!obj.originUrl) {
|
|
return;
|
|
}
|
|
if (obj.cache === true ||
|
|
(typeof obj.cache === "function" && obj.cache(realData))) {
|
|
wx.setStorage({
|
|
key: obj.originUrl,
|
|
data: realData
|
|
});
|
|
}
|
|
}
|
|
exports.default = {
|
|
get: get,
|
|
set: set
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9jYWNoZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxTQUFTLEdBQUcsQ0FBQyxHQUFtQjtJQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRTtRQUNoQixPQUFPO0tBQ1Y7SUFDRCxFQUFFLENBQUMsVUFBVSxDQUFDO1FBQ1YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQ2xCLE9BQU8sWUFBRSxHQUFHO1lBQ1IsSUFDSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUk7Z0JBQ2xCLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUMxRDtnQkFDRSxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7b0JBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO2lCQUN6QzthQUNKO1lBQ0QsSUFBRyxPQUFPLEdBQUcsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFO2dCQUNuQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbEI7UUFDTCxDQUFDO0tBQ0osQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLEdBQW1CLEVBQUcsUUFBeUI7SUFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUU7UUFDaEIsT0FBTztLQUNWO0lBQ0QsSUFDSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUk7UUFDbEIsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDMUQ7UUFDRSxFQUFFLENBQUMsVUFBVSxDQUFDO1lBQ1YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1lBQ2xCLElBQUksRUFBRSxRQUFRO1NBQ2pCLENBQUMsQ0FBQTtLQUNMO0FBQ0wsQ0FBQztBQUVELGtCQUFlO0lBQ1gsR0FBRyxLQUFBO0lBQ0gsR0FBRyxLQUFBO0NBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZXF1ZXN0T3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiXG5cbmZ1bmN0aW9uIGdldChvYmo6IElSZXF1ZXN0T3B0aW9uKSB7XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd3guZ2V0U3RvcmFnZSh7XG4gICAgICAgIGtleTogb2JqLm9yaWdpblVybCxcbiAgICAgICAgc3VjY2VzcyAocmVzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgb2JqLmNhY2hlID09PSB0cnVlIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiBvYmouY2FjaGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY2FjaGUocmVzLmRhdGEpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlcy5kYXRhLCB7aXNDYWNoZTogdHJ1ZX0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5mdW5jdGlvbiBzZXQob2JqOiBJUmVxdWVzdE9wdGlvbiAsIHJlYWxEYXRhOiBzdHJpbmcgfCBvYmplY3QpIHtcbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIG9iai5jYWNoZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAodHlwZW9mIG9iai5jYWNoZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jYWNoZShyZWFsRGF0YSkpXG4gICAgKSB7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBvYmoub3JpZ2luVXJsLFxuICAgICAgICAgICAgZGF0YTogcmVhbERhdGFcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBnZXQsXG4gICAgc2V0XG59O1xuIl19
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/module/catchHandler.ts":
|
|
/*!************************************!*\
|
|
!*** ./src/module/catchHandler.ts ***!
|
|
\************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
var __extends = (this && this.__extends) || (function () {
|
|
var extendStatics = function (d, b) {
|
|
extendStatics = Object.setPrototypeOf ||
|
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
return extendStatics(d, b);
|
|
};
|
|
return function (d, b) {
|
|
if (typeof b !== "function" && b !== null)
|
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
extendStatics(d, b);
|
|
function __() { this.constructor = d; }
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
})();
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.catchHandler = void 0;
|
|
var errorHandler_1 = __webpack_require__(/*! ./errorHandler */ "./src/module/errorHandler.ts");
|
|
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
|
|
var ErrorWithData = (function (_super) {
|
|
__extends(ErrorWithData, _super);
|
|
function ErrorWithData(msg, data) {
|
|
if (data === void 0) { data = {}; }
|
|
var _this = _super.call(this, msg) || this;
|
|
_this.data = data;
|
|
return _this;
|
|
}
|
|
return ErrorWithData;
|
|
}(Error));
|
|
function catchHandler(e, obj, reject) {
|
|
var type = e.type, res = e.res;
|
|
if (typeof config_1.default.errorCallback === "function") {
|
|
config_1.default.errorCallback(obj, res);
|
|
}
|
|
if (obj.catchError) {
|
|
if (type === 'http-error') {
|
|
return reject(new Error(res.statusCode.toString()));
|
|
}
|
|
else if (type === 'logic-error') {
|
|
var msg = errorHandler_1.default.getErrorMsg(res);
|
|
return reject(new ErrorWithData(msg.content, res.data));
|
|
}
|
|
else if (type === 'system-error') {
|
|
return reject(new Error(res.errMsg));
|
|
}
|
|
else {
|
|
return reject(e);
|
|
}
|
|
}
|
|
else {
|
|
if (type === 'http-error' || type === 'logic-error') {
|
|
return errorHandler_1.default.logicError(obj, res);
|
|
}
|
|
else if (type === 'system-error') {
|
|
return errorHandler_1.default.systemError(obj, res);
|
|
}
|
|
else {
|
|
return reject(e);
|
|
}
|
|
}
|
|
}
|
|
exports.catchHandler = catchHandler;
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0Y2hIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9jYXRjaEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsK0NBQTBDO0FBQzFDLDBDQUFvQztBQUVwQztJQUE0QixpQ0FBSztJQUc3Qix1QkFBWSxHQUFXLEVBQUUsSUFBYztRQUFkLHFCQUFBLEVBQUEsU0FBYztRQUF2QyxZQUNJLGtCQUFNLEdBQUcsQ0FBQyxTQUViO1FBREcsS0FBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7O0lBQ3JCLENBQUM7SUFDTCxvQkFBQztBQUFELENBQUMsQUFQRCxDQUE0QixLQUFLLEdBT2hDO0FBRUQsU0FBUyxZQUFZLENBQUMsQ0FBZSxFQUFFLEdBQXVDLEVBQUUsTUFBOEI7SUFDbEcsSUFBQSxJQUFJLEdBQVUsQ0FBQyxLQUFYLEVBQUUsR0FBRyxHQUFLLENBQUMsSUFBTixDQUFPO0lBR3hCLElBQUksT0FBTyxnQkFBTSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUU7UUFDNUMsZ0JBQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ2xDO0lBRUQsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFO1FBQ2hCLElBQUksSUFBSSxLQUFLLFlBQVksRUFBRTtZQUN2QixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBRSxHQUFzRCxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDM0c7YUFBTSxJQUFJLElBQUksS0FBSyxhQUFhLEVBQUU7WUFDL0IsSUFBSSxHQUFHLEdBQUcsc0JBQVksQ0FBQyxXQUFXLENBQUMsR0FBcUQsQ0FBQyxDQUFDO1lBQzFGLE9BQU8sTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUcsR0FBc0QsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQy9HO2FBQU0sSUFBSSxJQUFJLEtBQUssY0FBYyxFQUFFO1lBQ2hDLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3hDO2FBQU07WUFFSCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQjtLQUNKO1NBQU07UUFDSCxJQUFJLElBQUksS0FBSyxZQUFZLElBQUksSUFBSSxLQUFLLGFBQWEsRUFBRTtZQUNqRCxPQUFPLHNCQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFxRCxDQUFDLENBQUM7U0FDOUY7YUFBTSxJQUFHLElBQUksS0FBSyxjQUFjLEVBQUU7WUFDL0IsT0FBTyxzQkFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBOEMsQ0FBQyxDQUFDO1NBQ3hGO2FBQU07WUFFSCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQjtLQUNKO0FBQ0wsQ0FBQztBQUVRLG9DQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uLCBJRXJyb3JPYmplY3QgfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XG5pbXBvcnQgZXJyb3JIYW5kbGVyIGZyb20gXCIuL2Vycm9ySGFuZGxlclwiO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5cbmNsYXNzIEVycm9yV2l0aERhdGEgZXh0ZW5kcyBFcnJvciB7XG4gICAgZGF0YTogYW55O1xuXG4gICAgY29uc3RydWN0b3IobXNnOiBzdHJpbmcsIGRhdGE6IGFueSA9IHt9KSB7XG4gICAgICAgIHN1cGVyKG1zZyk7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYXRjaEhhbmRsZXIoZTogSUVycm9yT2JqZWN0LCBvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24sIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuICAgIGNvbnN0IHsgdHlwZSwgcmVzIH0gPSBlO1xuXG4gICAgLy8g5aaC5p6c5pyJ6YWN572u57uf5LiA6ZSZ6K+v5Zue6LCD5Ye95pWw77yM5YiZ5omn6KGM5a6DXG4gICAgaWYgKHR5cGVvZiBjb25maWcuZXJyb3JDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbmZpZy5lcnJvckNhbGxiYWNrKG9iaiwgcmVzKTtcbiAgICB9XG5cbiAgICBpZiAob2JqLmNhdGNoRXJyb3IpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdodHRwLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoKHJlcyBhcyBXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0KS5zdGF0dXNDb2RlLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbG9naWMtZXJyb3InKSB7XG4gICAgICAgICAgICBsZXQgbXNnID0gZXJyb3JIYW5kbGVyLmdldEVycm9yTXNnKHJlcyBhcyBXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yV2l0aERhdGEobXNnLmNvbnRlbnQsIChyZXMgYXMgV2VjaGF0TWluaXByb2dyYW0uUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkuZGF0YSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzeXN0ZW0tZXJyb3InKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihyZXMuZXJyTXNnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDlhbbku5Zqc+mUmeivr1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnaHR0cC1lcnJvcicgfHwgdHlwZSA9PT0gJ2xvZ2ljLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9ySGFuZGxlci5sb2dpY0Vycm9yKG9iaiwgcmVzIGFzIFdlY2hhdE1pbmlwcm9ncmFtLlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpO1xuICAgICAgICB9IGVsc2UgaWYodHlwZSA9PT0gJ3N5c3RlbS1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvckhhbmRsZXIuc3lzdGVtRXJyb3Iob2JqLCByZXMgYXMgV2VjaGF0TWluaXByb2dyYW0uR2VuZXJhbENhbGxiYWNrUmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOWFtuS7lmpz6ZSZ6K+vXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgeyBjYXRjaEhhbmRsZXIgfSJdfQ==
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/module/durationReporter.ts":
|
|
/*!****************************************!*\
|
|
!*** ./src/module/durationReporter.ts ***!
|
|
\****************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
|
|
var request_1 = __webpack_require__(/*! ../api/request */ "./src/api/request.ts");
|
|
function start(obj) {
|
|
obj._reportStartTime = new Date().getTime();
|
|
}
|
|
function end(obj) {
|
|
obj._reportEndTime = new Date().getTime();
|
|
if (obj.report && obj._reportStartTime) {
|
|
report(obj.report, obj._reportStartTime, obj._reportEndTime);
|
|
}
|
|
}
|
|
function report(name, startTime, endTime) {
|
|
if (typeof config_1.default.reportCGI === "function") {
|
|
config_1.default.reportCGI(name, startTime, endTime, request_1.default);
|
|
}
|
|
}
|
|
exports.default = {
|
|
start: start,
|
|
end: end,
|
|
report: report
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb25SZXBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2R1bGUvZHVyYXRpb25SZXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBDQUFvQztBQUNwQywwQ0FBb0M7QUFHcEMsU0FBUyxLQUFLLENBQUMsR0FBdUM7SUFDbEQsR0FBRyxDQUFDLGdCQUFnQixHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLEdBQXVDO0lBQ2hELEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxQyxJQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLGdCQUFnQixFQUFFO1FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBZ0IsRUFBRSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQzFFO0FBQ0wsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLElBQVksRUFBRSxTQUFpQixFQUFFLE9BQWU7SUFDNUQsSUFBSSxPQUFPLGdCQUFNLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtRQUN4QyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxpQkFBTyxDQUFDLENBQUM7S0FDdkQ7QUFDTCxDQUFDO0FBRUQsa0JBQWU7SUFDWCxLQUFLLE9BQUE7SUFDTCxHQUFHLEtBQUE7SUFDSCxNQUFNLFFBQUE7Q0FDVCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi9hcGkvcmVxdWVzdCdcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcblxuZnVuY3Rpb24gc3RhcnQob2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uKSB7XG4gICAgb2JqLl9yZXBvcnRTdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn1cblxuZnVuY3Rpb24gZW5kKG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIG9iai5fcmVwb3J0RW5kVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGlmKG9iai5yZXBvcnQgJiYgb2JqLl9yZXBvcnRTdGFydFRpbWUpIHtcbiAgICAgICAgcmVwb3J0KG9iai5yZXBvcnQgYXMgc3RyaW5nLCBvYmouX3JlcG9ydFN0YXJ0VGltZSwgb2JqLl9yZXBvcnRFbmRUaW1lKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlcG9ydChuYW1lOiBzdHJpbmcsIHN0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXIpIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZXBvcnRDR0kgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWcucmVwb3J0Q0dJKG5hbWUsIHN0YXJ0VGltZSwgZW5kVGltZSwgcmVxdWVzdCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgc3RhcnQsXG4gICAgZW5kLFxuICAgIHJlcG9ydFxufVxuIl19
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/module/errorHandler.ts":
|
|
/*!************************************!*\
|
|
!*** ./src/module/errorHandler.ts ***!
|
|
\************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
|
|
var request_1 = __webpack_require__(/*! ../api/request */ "./src/api/request.ts");
|
|
function systemError(obj, res) {
|
|
if (typeof obj.fail === "function") {
|
|
obj.fail(res);
|
|
}
|
|
else if (typeof config_1.default.systemErrorHandler === 'function') {
|
|
config_1.default.systemErrorHandler(res);
|
|
}
|
|
else {
|
|
var retry = function () { return (0, request_1.default)(obj).then(obj._resolve).catch(obj._reject); };
|
|
doError("", "", retry);
|
|
}
|
|
}
|
|
function logicError(obj, res) {
|
|
if (typeof obj.fail === "function") {
|
|
obj.fail(res);
|
|
}
|
|
else if (typeof config_1.default.errorHandler === 'function') {
|
|
config_1.default.errorHandler(res.data);
|
|
}
|
|
else {
|
|
var _a = getErrorMsg(res), title = _a.title, content = _a.content;
|
|
var retry = function () { return (0, request_1.default)(obj).then(obj._resolve).catch(obj._reject); };
|
|
doError(title, content, retry);
|
|
}
|
|
}
|
|
function getErrorMsg(res) {
|
|
var title = "";
|
|
if (typeof config_1.default.errorTitle === "function") {
|
|
try {
|
|
title = config_1.default.errorTitle(res.data);
|
|
}
|
|
catch (e) {
|
|
}
|
|
}
|
|
else if (typeof config_1.default.errorTitle === "string") {
|
|
title = config_1.default.errorTitle;
|
|
}
|
|
var content = "";
|
|
if (typeof config_1.default.errorContent === "function") {
|
|
try {
|
|
content = config_1.default.errorContent(res.data);
|
|
}
|
|
catch (e) {
|
|
}
|
|
}
|
|
else if (typeof config_1.default.errorContent === "string") {
|
|
content = config_1.default.errorContent;
|
|
}
|
|
return { title: title, content: content };
|
|
}
|
|
function doError(title, content, retry) {
|
|
var showErrorRetryBtn = config_1.default.errorRetryBtn && typeof retry === "function";
|
|
wx.showModal(Object.assign({
|
|
title: title || "",
|
|
content: content || "网络或服务异常,请稍后重试",
|
|
}, !showErrorRetryBtn ? {
|
|
showCancel: false
|
|
} : {
|
|
showCancel: true,
|
|
confirmText: '重试',
|
|
success: function (res) {
|
|
if (res.confirm && typeof retry === "function")
|
|
retry();
|
|
}
|
|
}));
|
|
}
|
|
exports.default = {
|
|
systemError: systemError,
|
|
logicError: logicError,
|
|
doError: doError,
|
|
getErrorMsg: getErrorMsg
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQXFDO0FBR3JDLFNBQVMsV0FBVyxDQUFDLEdBQXVDLEVBQUUsR0FBNEM7SUFDdEcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDakI7U0FBTSxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxrQkFBa0IsS0FBSyxVQUFVLEVBQUU7UUFDeEQsZ0JBQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQztTQUFNO1FBQ0gsSUFBTSxLQUFLLEdBQUcsY0FBTSxPQUFBLElBQUEsaUJBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQWxELENBQWtELENBQUM7UUFDdkUsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDMUI7QUFDTCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBdUMsRUFBRSxHQUF1RztJQUNoSyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNqQjtTQUFNLElBQUksT0FBTyxnQkFBTSxDQUFDLFlBQVksS0FBSyxVQUFVLEVBQUU7UUFDbEQsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2pDO1NBQU07UUFDRyxJQUFBLEtBQW1CLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBbEMsS0FBSyxXQUFBLEVBQUUsT0FBTyxhQUFvQixDQUFDO1FBQzFDLElBQU0sS0FBSyxHQUFHLGNBQU0sT0FBQSxJQUFBLGlCQUFPLEVBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFsRCxDQUFrRCxDQUFDO1FBQ3ZFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ2xDO0FBQ0wsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQXVHO0lBQ3hILElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNmLElBQUksT0FBTyxnQkFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDekMsSUFBSTtZQUNBLEtBQUssR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDdEM7UUFBQyxPQUFPLENBQUMsRUFBRTtTQUNYO0tBQ0o7U0FBTSxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO1FBQzlDLEtBQUssR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQztLQUM3QjtJQUVELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFO1FBQzNDLElBQUk7WUFDQSxPQUFPLEdBQUcsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzFDO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FDWDtLQUNKO1NBQU0sSUFBSSxPQUFPLGdCQUFNLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUNoRCxPQUFPLEdBQUcsZ0JBQU0sQ0FBQyxZQUFZLENBQUM7S0FDakM7SUFFRCxPQUFPLEVBQUMsS0FBSyxPQUFBLEVBQUUsT0FBTyxTQUFBLEVBQUMsQ0FBQTtBQUMzQixDQUFDO0FBR0QsU0FBUyxPQUFPLENBQUMsS0FBYSxFQUFFLE9BQWUsRUFBRSxLQUFpQjtJQUU5RCxJQUFNLGlCQUFpQixHQUFHLGdCQUFNLENBQUMsYUFBYSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztJQUM5RSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdkIsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2xCLE9BQU8sRUFBRSxPQUFPLElBQUksZUFBZTtLQUN0QyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLFVBQVUsRUFBRSxLQUFLO0tBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBQ0EsVUFBVSxFQUFFLElBQUk7UUFDaEIsV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxZQUFDLEdBQXFEO1lBQ3pELElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVO2dCQUFFLEtBQUssRUFBRSxDQUFDO1FBQzVELENBQUM7S0FDSixDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUFFRCxrQkFBZTtJQUNYLFdBQVcsYUFBQTtJQUNYLFVBQVUsWUFBQTtJQUNWLE9BQU8sU0FBQTtJQUNQLFdBQVcsYUFBQTtDQUNkLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL2FwaS9yZXF1ZXN0JztcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcblxuZnVuY3Rpb24gc3lzdGVtRXJyb3Iob2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uLCByZXM6IFdlY2hhdE1pbmlwcm9ncmFtLkdlbmVyYWxDYWxsYmFja1Jlc3VsdCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZy5zeXN0ZW1FcnJvckhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uZmlnLnN5c3RlbUVycm9ySGFuZGxlcihyZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJldHJ5ID0gKCkgPT4gcmVxdWVzdChvYmopLnRoZW4ob2JqLl9yZXNvbHZlKS5jYXRjaChvYmouX3JlamVjdCk7XG4gICAgICAgIGRvRXJyb3IoXCJcIiwgXCJcIiwgcmV0cnkpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9naWNFcnJvcihvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24sIHJlczogV2VjaGF0TWluaXByb2dyYW0uUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCB8IFdlY2hhdE1pbmlwcm9ncmFtLlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwocmVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZXJyb3JIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbmZpZy5lcnJvckhhbmRsZXIocmVzLmRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHt0aXRsZSwgY29udGVudH0gPSBnZXRFcnJvck1zZyhyZXMpO1xuICAgICAgICBjb25zdCByZXRyeSA9ICgpID0+IHJlcXVlc3Qob2JqKS50aGVuKG9iai5fcmVzb2x2ZSkuY2F0Y2gob2JqLl9yZWplY3QpO1xuICAgICAgICBkb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRFcnJvck1zZyhyZXM6IFdlY2hhdE1pbmlwcm9ncmFtLlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQgfCBXZWNoYXRNaW5pcHJvZ3JhbS5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgbGV0IHRpdGxlID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5lcnJvclRpdGxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRpdGxlID0gY29uZmlnLmVycm9yVGl0bGUocmVzLmRhdGEpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZy5lcnJvclRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRpdGxlID0gY29uZmlnLmVycm9yVGl0bGU7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnQgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ29udGVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29uZmlnLmVycm9yQ29udGVudChyZXMuZGF0YSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb250ZW50ID0gY29uZmlnLmVycm9yQ29udGVudDtcbiAgICB9XG5cbiAgICByZXR1cm4ge3RpdGxlLCBjb250ZW50fVxufVxuXG4vLyDpu5jorqTplJnor6/lpITnkIbmmK/lvLnnqpdcbmZ1bmN0aW9uIGRvRXJyb3IodGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCByZXRyeT86ICgpID0+IGFueSkge1xuICAgIC8vIOaYr+WQpuaYvuekuumHjeivleaMiemSrlxuICAgIGNvbnN0IHNob3dFcnJvclJldHJ5QnRuID0gY29uZmlnLmVycm9yUmV0cnlCdG4gJiYgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgd3guc2hvd01vZGFsKE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB0aXRsZTogdGl0bGUgfHwgXCJcIixcbiAgICAgICAgY29udGVudDogY29udGVudCB8fCBcIue9kee7nOaIluacjeWKoeW8guW4uO+8jOivt+eojeWQjumHjeivlVwiLFxuICAgIH0sICFzaG93RXJyb3JSZXRyeUJ0biA/IHtcbiAgICAgICAgc2hvd0NhbmNlbDogZmFsc2VcbiAgICB9IDoge1xuICAgICAgICBzaG93Q2FuY2VsOiB0cnVlLFxuICAgICAgICBjb25maXJtVGV4dDogJ+mHjeivlScsXG4gICAgICAgIHN1Y2Nlc3MocmVzOiBXZWNoYXRNaW5pcHJvZ3JhbS5TaG93TW9kYWxTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXMuY29uZmlybSAmJiB0eXBlb2YgcmV0cnkgPT09IFwiZnVuY3Rpb25cIikgcmV0cnkoKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHN5c3RlbUVycm9yLFxuICAgIGxvZ2ljRXJyb3IsXG4gICAgZG9FcnJvcixcbiAgICBnZXRFcnJvck1zZ1xufVxuIl19
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/module/mockManager.ts":
|
|
/*!***********************************!*\
|
|
!*** ./src/module/mockManager.ts ***!
|
|
\***********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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");
|
|
function get(obj) {
|
|
if (!(config_1.default.mockJson[obj.url] || (obj.originUrl && config_1.default.mockJson[obj.originUrl]))) {
|
|
return false;
|
|
}
|
|
var data = config_1.default.mockJson[obj.url] || (obj.originUrl ? config_1.default.mockJson[obj.originUrl] : '');
|
|
data = JSON.parse(JSON.stringify(data));
|
|
var res = {
|
|
data: data,
|
|
statusCode: 200
|
|
};
|
|
loading_1.default.hide();
|
|
return res;
|
|
}
|
|
exports.default = {
|
|
get: get
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL21vY2tNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMENBQW9DO0FBQ3BDLDJDQUFxQztBQUdyQyxTQUFTLEdBQUcsQ0FBQyxHQUF1QztJQUVoRCxJQUFHLENBQUMsQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLGdCQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFFakYsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxJQUFJLElBQUksR0FBRyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTdGLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4QyxJQUFNLEdBQUcsR0FBRztRQUNSLElBQUksTUFBQTtRQUNKLFVBQVUsRUFBRSxHQUFHO0tBQ2xCLENBQUM7SUFFRixpQkFBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2YsT0FBTyxHQUFHLENBQUE7QUFDZCxDQUFDO0FBRUQsa0JBQWU7SUFDWCxHQUFHLEtBQUE7Q0FDTixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgbG9hZGluZyBmcm9tICcuLi91dGlsL2xvYWRpbmcnXG5pbXBvcnQgeyBJUmVxdWVzdE9wdGlvbiwgSVVwbG9hZEZpbGVPcHRpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCJcblxuZnVuY3Rpb24gZ2V0KG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbik6IGFueSB7XG5cbiAgICBpZighKGNvbmZpZy5tb2NrSnNvbltvYmoudXJsXSB8fCAob2JqLm9yaWdpblVybCAmJiBjb25maWcubW9ja0pzb25bb2JqLm9yaWdpblVybF0pKSkge1xuICAgICAgICAvLyBtb2NrIOayoeacieWvueW6lOaOpeWPo+eahOaVsOaNrlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGRhdGEgPSBjb25maWcubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgPyBjb25maWcubW9ja0pzb25bb2JqLm9yaWdpblVybF0gOiAnJyk7XG4gICAgLy8gZGVlcCBjb3B5XG4gICAgZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwXG4gICAgfTtcblxuICAgIGxvYWRpbmcuaGlkZSgpO1xuICAgIHJldHVybiByZXNcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGdldFxufVxuIl19
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/module/requestHandler.ts":
|
|
/*!**************************************!*\
|
|
!*** ./src/module/requestHandler.ts ***!
|
|
\**************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
var __assign = (this && this.__assign) || function () {
|
|
__assign = Object.assign || function(t) {
|
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
s = arguments[i];
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
t[p] = s[p];
|
|
}
|
|
return t;
|
|
};
|
|
return __assign.apply(this, arguments);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var loading_1 = __webpack_require__(/*! ../util/loading */ "./src/util/loading.ts");
|
|
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
|
|
var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts");
|
|
var mockManager_1 = __webpack_require__(/*! ./mockManager */ "./src/module/mockManager.ts");
|
|
var cacheManager_1 = __webpack_require__(/*! ./cacheManager */ "./src/module/cacheManager.ts");
|
|
var sessionManager_1 = __webpack_require__(/*! ./sessionManager */ "./src/module/sessionManager.ts");
|
|
var responseHandler_1 = __webpack_require__(/*! ./responseHandler */ "./src/module/responseHandler.ts");
|
|
var durationReporter_1 = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.ts");
|
|
var url_1 = __webpack_require__(/*! ../util/url */ "./src/util/url.ts");
|
|
var catchHandler_1 = __webpack_require__(/*! ./catchHandler */ "./src/module/catchHandler.ts");
|
|
function format(originUrl) {
|
|
if (originUrl.startsWith('http')) {
|
|
return originUrl;
|
|
}
|
|
else {
|
|
var urlPerfix = config_1.default.urlPerfix;
|
|
if (typeof config_1.default.urlPerfix === "function") {
|
|
urlPerfix = config_1.default.urlPerfix();
|
|
}
|
|
return urlPerfix + originUrl;
|
|
}
|
|
}
|
|
function preDo(obj, resolve, reject) {
|
|
if (typeof obj.reLoginCount === "undefined") {
|
|
obj.reLoginCount = 0;
|
|
}
|
|
else {
|
|
obj.reLoginCount++;
|
|
}
|
|
if (obj.reLoginCount === 0 && typeof obj.beforeSend === "function") {
|
|
obj.beforeSend();
|
|
}
|
|
if (obj.showLoading) {
|
|
loading_1.default.show(obj.showLoading);
|
|
}
|
|
if (!obj.originUrl) {
|
|
obj.originUrl = obj.url;
|
|
obj.url = format(obj.url);
|
|
}
|
|
obj._resolve = resolve;
|
|
obj._reject = reject;
|
|
return obj;
|
|
}
|
|
function initializeRequestObj(obj) {
|
|
var _a, _b;
|
|
if (!obj.data) {
|
|
obj.data = {};
|
|
}
|
|
obj.header = obj.header ? obj.header : {};
|
|
if (typeof config_1.default.setHeader === 'function') {
|
|
var header = config_1.default.setHeader();
|
|
if (typeof header === 'object') {
|
|
obj.header = __assign(__assign({}, obj.header), header);
|
|
}
|
|
}
|
|
else if (typeof config_1.default.setHeader === 'object') {
|
|
obj.header = __assign(__assign({}, obj.header), config_1.default.setHeader);
|
|
}
|
|
if (obj.originUrl !== config_1.default.codeToSession.url && status_1.default.session) {
|
|
obj.data = __assign(__assign({}, obj.data), (_a = {}, _a[config_1.default.sessionName] = status_1.default.session, _a));
|
|
}
|
|
var gd = getGlobalData();
|
|
obj.data = __assign(__assign({}, gd), obj.data);
|
|
obj.method = obj.method || 'GET';
|
|
obj.dataType = obj.dataType || 'json';
|
|
if (!config_1.default.doNotUseQueryString && obj.method !== "GET") {
|
|
if (status_1.default.session) {
|
|
obj.url = url_1.default.setParams(obj.url, (_b = {}, _b[config_1.default.sessionName] = status_1.default.session, _b));
|
|
}
|
|
obj.url = url_1.default.setParams(obj.url, gd);
|
|
}
|
|
obj.url = url_1.default.replaceDomain(obj.url);
|
|
durationReporter_1.default.start(obj);
|
|
return obj;
|
|
}
|
|
function initializeUploadFileObj(obj) {
|
|
var _a, _b;
|
|
if (!obj.formData) {
|
|
obj.formData = {};
|
|
}
|
|
obj.header = obj.header ? obj.header : {};
|
|
if (typeof config_1.default.setHeader === 'function') {
|
|
var header = config_1.default.setHeader();
|
|
if (typeof header === 'object') {
|
|
obj.header = __assign(__assign({}, obj.header), header);
|
|
}
|
|
}
|
|
else if (typeof config_1.default.setHeader === 'object') {
|
|
obj.header = __assign(__assign({}, obj.header), config_1.default.setHeader);
|
|
}
|
|
if (obj.originUrl !== config_1.default.codeToSession.url && status_1.default.session) {
|
|
obj.formData = __assign(__assign({}, obj.formData), (_a = {}, _a[config_1.default.sessionName] = status_1.default.session, _a));
|
|
}
|
|
var gd = getGlobalData();
|
|
obj.formData = __assign(__assign({}, gd), obj.formData);
|
|
if (!config_1.default.doNotUseQueryString) {
|
|
if (status_1.default.session) {
|
|
obj.url = url_1.default.setParams(obj.url, (_b = {}, _b[config_1.default.sessionName] = status_1.default.session, _b));
|
|
}
|
|
obj.url = url_1.default.setParams(obj.url, gd);
|
|
}
|
|
obj.url = url_1.default.replaceDomain(obj.url);
|
|
durationReporter_1.default.start(obj);
|
|
return obj;
|
|
}
|
|
function getGlobalData() {
|
|
var gd = {};
|
|
if (typeof config_1.default.globalData === "function") {
|
|
gd = config_1.default.globalData();
|
|
}
|
|
else if (typeof config_1.default.globalData === "object") {
|
|
gd = config_1.default.globalData;
|
|
}
|
|
return gd;
|
|
}
|
|
function doRequest(obj) {
|
|
if (!status_1.default.session) {
|
|
return request(obj);
|
|
}
|
|
obj = initializeRequestObj(obj);
|
|
if (obj.reLoginCount === 0 && typeof config_1.default.beforeSend === "function") {
|
|
obj = config_1.default.beforeSend(obj, status_1.default.session);
|
|
}
|
|
return new Promise(function (resolve, reject) {
|
|
wx.request(__assign(__assign({}, obj), { success: function (res) {
|
|
return resolve(res);
|
|
}, fail: function (res) {
|
|
if ((config_1.default.domainChangeTrigger && config_1.default.domainChangeTrigger(res)) && url_1.default.isInBackupDomainList(obj.url)) {
|
|
enableBackupDomain(obj.url);
|
|
return doRequest(obj).then(function (res) { return resolve(res); });
|
|
}
|
|
return reject({ type: 'system-error', res: res });
|
|
}, complete: function () {
|
|
if (config_1.default.isFixSuccessCompleteTiming) {
|
|
setTimeout(function () {
|
|
if (typeof obj.complete === "function") {
|
|
obj.complete();
|
|
}
|
|
if (obj.showLoading) {
|
|
loading_1.default.hide();
|
|
}
|
|
}, 0);
|
|
}
|
|
else {
|
|
if (typeof obj.complete === "function") {
|
|
obj.complete();
|
|
}
|
|
if (obj.showLoading) {
|
|
loading_1.default.hide();
|
|
}
|
|
}
|
|
} }));
|
|
});
|
|
}
|
|
function doUploadFile(obj) {
|
|
if (!status_1.default.session) {
|
|
return uploadFile(obj);
|
|
}
|
|
obj = initializeUploadFileObj(obj);
|
|
if (obj.reLoginCount === 0 && typeof config_1.default.beforeSend === "function") {
|
|
obj = config_1.default.beforeSend(obj, status_1.default.session);
|
|
}
|
|
return new Promise(function (resolve, reject) {
|
|
wx.uploadFile(__assign(__assign({}, obj), { success: function (res) {
|
|
return resolve(res);
|
|
}, fail: function (res) {
|
|
if ((config_1.default.domainChangeTrigger && config_1.default.domainChangeTrigger(res)) && url_1.default.isInBackupDomainList(obj.url)) {
|
|
enableBackupDomain(obj.url);
|
|
return doUploadFile(obj).then(function (res) { return resolve(res); });
|
|
}
|
|
return reject({ type: 'system-error', res: res });
|
|
}, complete: function () {
|
|
if (config_1.default.isFixSuccessCompleteTiming) {
|
|
setTimeout(function () {
|
|
if (typeof obj.complete === "function") {
|
|
obj.complete();
|
|
}
|
|
if (obj.showLoading) {
|
|
loading_1.default.hide();
|
|
}
|
|
}, 0);
|
|
}
|
|
else {
|
|
if (typeof obj.complete === "function") {
|
|
obj.complete();
|
|
}
|
|
if (obj.showLoading) {
|
|
loading_1.default.hide();
|
|
}
|
|
}
|
|
} }));
|
|
});
|
|
}
|
|
function request(obj) {
|
|
return new Promise(function (resolve, reject) {
|
|
obj = preDo(obj, resolve, reject);
|
|
if (config_1.default.mockJson) {
|
|
var mockResponse = mockManager_1.default.get(obj);
|
|
if (mockResponse) {
|
|
var response = responseHandler_1.default.responseForRequest(mockResponse, obj);
|
|
return resolve(response);
|
|
}
|
|
}
|
|
if (obj.cache) {
|
|
cacheManager_1.default.get(obj);
|
|
}
|
|
sessionManager_1.default.main().then(function () {
|
|
return doRequest(obj);
|
|
}).then(function (res) {
|
|
var response = responseHandler_1.default.responseForRequest(res, obj);
|
|
if (response != null) {
|
|
return resolve(response);
|
|
}
|
|
}).catch(function (e) {
|
|
return (0, catchHandler_1.catchHandler)(e, obj, reject);
|
|
});
|
|
});
|
|
}
|
|
function uploadFile(obj) {
|
|
return new Promise(function (resolve, reject) {
|
|
obj = preDo(obj, resolve, reject);
|
|
if (config_1.default.mockJson) {
|
|
var mockResponse = mockManager_1.default.get(obj);
|
|
if (mockResponse) {
|
|
var response = responseHandler_1.default.responseForUploadFile(mockResponse, obj);
|
|
return resolve(response);
|
|
}
|
|
}
|
|
sessionManager_1.default.main().then(function () {
|
|
return doUploadFile(obj);
|
|
}).then(function (res) {
|
|
var response = responseHandler_1.default.responseForUploadFile(res, obj);
|
|
if (response != null) {
|
|
return resolve(response);
|
|
}
|
|
}).catch(function (e) {
|
|
(0, catchHandler_1.catchHandler)(e, obj, reject);
|
|
});
|
|
});
|
|
}
|
|
function enableBackupDomain(url) {
|
|
if (url === void 0) { url = ""; }
|
|
if (!status_1.default.isEnableBackupDomain) {
|
|
status_1.default.isEnableBackupDomain = true;
|
|
if (typeof config_1.default.backupDomainEnableCallback === 'function') {
|
|
config_1.default.backupDomainEnableCallback(url);
|
|
}
|
|
}
|
|
}
|
|
exports.default = {
|
|
format: format,
|
|
request: request,
|
|
uploadFile: uploadFile,
|
|
enableBackupDomain: enableBackupDomain
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQyw2Q0FBdUM7QUFDdkMsK0NBQXlDO0FBQ3pDLG1EQUE2QztBQUM3QyxxREFBK0M7QUFDL0MsdURBQWlEO0FBQ2pELG1DQUE2QjtBQUU3QiwrQ0FBOEM7QUFHOUMsU0FBUyxNQUFNLENBQUMsU0FBaUI7SUFDN0IsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzlCLE9BQU8sU0FBUyxDQUFBO0tBQ25CO1NBQU07UUFDSCxJQUFJLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQ3hDLFNBQVMsR0FBRyxnQkFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO1NBQ2pDO1FBQ0QsT0FBTyxTQUFTLEdBQUcsU0FBUyxDQUFDO0tBQ2hDO0FBQ0wsQ0FBQztBQUdELFNBQVMsS0FBSyxDQUErQyxHQUFNLEVBQUUsT0FBOEIsRUFBRSxNQUErQjtJQUVoSSxJQUFJLE9BQU8sR0FBRyxDQUFDLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDekMsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7S0FDeEI7U0FBTTtRQUNILEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUN0QjtJQUVELElBQUksR0FBRyxDQUFDLFlBQVksS0FBSyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUNoRSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7S0FDcEI7SUFFRCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7UUFDakIsaUJBQU8sQ0FBQyxJQUFJLENB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LEVBQUU7Z0JBQ2xCLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzVCO1FBQ0wsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQUMsQ0FBZTtZQUNyQixJQUFBLDJCQUFZLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNoQyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsR0FBZ0I7SUFBaEIsb0JBQUEsRUFBQSxRQUFnQjtJQUN4QyxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxvQkFBb0IsRUFBRTtRQUM5QixnQkFBTSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLE9BQU8sZ0JBQU0sQ0FBQywwQkFBMEIsS0FBSyxVQUFVLEVBQUU7WUFDekQsZ0JBQU0sQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMxQztLQUNKO0FBQ0wsQ0FBQztBQUVELGtCQUFlO0lBQ1gsTUFBTSxRQUFBO0lBQ04sT0FBTyxTQUFBO0lBQ1AsVUFBVSxZQUFBO0lBQ1Ysa0JBQWtCLG9CQUFBO0NBQ3JCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9hZGluZyBmcm9tICcuLi91dGlsL2xvYWRpbmcnXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCBzdGF0dXMgZnJvbSAnLi4vc3RvcmUvc3RhdHVzJ1xuaW1wb3J0IG1vY2tNYW5hZ2VyIGZyb20gJy4vbW9ja01hbmFnZXInXG5pbXBvcnQgY2FjaGVNYW5hZ2VyIGZyb20gJy4vY2FjaGVNYW5hZ2VyJ1xuaW1wb3J0IHNlc3Npb25NYW5hZ2VyIGZyb20gJy4vc2Vzc2lvbk1hbmFnZXInXG5pbXBvcnQgcmVzcG9uc2VIYW5kbGVyIGZyb20gJy4vcmVzcG9uc2VIYW5kbGVyJ1xuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSBcIi4vZHVyYXRpb25SZXBvcnRlclwiXG5pbXBvcnQgdXJsIGZyb20gJy4uL3V0aWwvdXJsJ1xuaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uLCBJRXJyb3JPYmplY3QgfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCJcbmltcG9ydCB7IGNhdGNoSGFuZGxlciB9IGZyb20gJy4vY2F0Y2hIYW5kbGVyJztcblxuLy8g5qC85byP5YyWdXJsXG5mdW5jdGlvbiBmb3JtYXQob3JpZ2luVXJsOiBzdHJpbmcpIHtcbiAgICBpZiAob3JpZ2luVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICByZXR1cm4gb3JpZ2luVXJsXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHVybFBlcmZpeCA9IGNvbmZpZy51cmxQZXJmaXg7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLnVybFBlcmZpeCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB1cmxQZXJmaXggPSBjb25maWcudXJsUGVyZml4KClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsUGVyZml4ICsgb3JpZ2luVXJsO1xuICAgIH1cbn1cblxuLy8g5omA5pyJ6K+35rGC5Y+R5Ye65YmN6ZyA6KaB5YGa55qE5LqL5oOFXG5mdW5jdGlvbiBwcmVEbzxUIGV4dGVuZHMgSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbj4ob2JqOiBULCByZXNvbHZlOiAodmFsdWU/OiBhbnkpID0+IHZvaWQsIHJlamVjdD86IChyZWFzb24/OiBhbnkpID0+IHZvaWQpOiBUIHtcbiAgICAvLyDnmbvlvZXmgIHlpLHmlYjvvIzph43lpI3nmbvlvZXorqHmlbBcbiAgICBpZiAodHlwZW9mIG9iai5yZUxvZ2luQ291bnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cblxuICAgIGlmIChvYmoucmVMb2dpbkNvdW50ID09PSAwICYmIHR5cGVvZiBvYmouYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5iZWZvcmVTZW5kKCk7XG4gICAgfVxuXG4gICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICBsb2FkaW5nLnNob3cob2JqLnNob3dMb2FkaW5nKTtcbiAgICB9XG5cbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgb2JqLm9yaWdpblVybCA9IG9iai51cmw7XG4gICAgICAgIG9iai51cmwgPSBmb3JtYXQob2JqLnVybCk7XG4gICAgfVxuXG4gICAgb2JqLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICBvYmouX3JlamVjdCA9IHJlamVjdDtcblxuICAgIHJldHVybiBvYmo7XG59XG5cbi8vIOagvOW8j+WMluWkhOeQhuivt+axgueahG9iauWGheWuuVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqOiBJUmVxdWVzdE9wdGlvbikge1xuXG4gICAgaWYgKCFvYmouZGF0YSkge1xuICAgICAgICBvYmouZGF0YSA9IHt9O1xuICAgIH1cbiAgICBcbiAgICBvYmouaGVhZGVyID0gb2JqLmhlYWRlciA/IG9iai5oZWFkZXIgOiB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5zZXRIZWFkZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbGV0IGhlYWRlciA9IGNvbmZpZy5zZXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvYmouaGVhZGVyID0gey4uLm9iai5oZWFkZXIsIC4uLmhlYWRlcn07XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuc2V0SGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvYmouaGVhZGVyID0gey4uLm9iai5oZWFkZXIsIC4uLmNvbmZpZy5zZXRIZWFkZXJ9O1xuICAgIH1cblxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWcuY29kZVRvU2Vzc2lvbi51cmwgJiYgc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7IC4uLm9iai5kYXRhIGFzIG9iamVjdCwgW2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9uIH07XG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5pyJ5YWo5bGA5Y+C5pWw77yM5YiZ5re75YqgXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmRhdGEgPSB7IC4uLmdkLCAuLi5vYmouZGF0YSBhcyBvYmplY3QgfTtcblxuICAgIG9iai5tZXRob2QgPSBvYmoubWV0aG9kIHx8ICdHRVQnO1xuICAgIG9iai5kYXRhVHlwZSA9IG9iai5kYXRhVHlwZSB8fCAnanNvbic7XG5cbiAgICAvLyDlpoLmnpzor7fmsYLkuI3mmK9HRVTvvIzliJnlnKhVUkzkuK3oh6rliqjliqDkuIrnmbvlvZXmgIHlkozlhajlsYDlj4LmlbBcbiAgICBpZiAoIWNvbmZpZy5kb05vdFVzZVF1ZXJ5U3RyaW5nICYmIG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaWYgKHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCB7IFtjb25maWcuc2Vzc2lvbk5hbWVdOiBzdGF0dXMuc2Vzc2lvbiB9KTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuXG4gICAgLy8g5aSH55So5Z+f5ZCN6YC76L6RXG4gICAgb2JqLnVybCA9IHVybC5yZXBsYWNlRG9tYWluKG9iai51cmwpO1xuXG4gICAgZHVyYXRpb25SZXBvcnRlci5zdGFydChvYmopO1xuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuLy8g5qC85byP5YyW5aSE55CG5LiK5Lyg5paH5Lu255qEb2Jq5YaF5a65XG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmo6IElVcGxvYWRGaWxlT3B0aW9uKSB7XG4gICAgaWYgKCFvYmouZm9ybURhdGEpIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0ge307XG4gICAgfVxuXG4gICAgb2JqLmhlYWRlciA9IG9iai5oZWFkZXIgPyBvYmouaGVhZGVyIDoge307XG4gICAgaWYgKHR5cGVvZiBjb25maWcuc2V0SGVhZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxldCBoZWFkZXIgPSBjb25maWcuc2V0SGVhZGVyKCk7XG4gICAgICAgIGlmICh0eXBlb2YgaGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb2JqLmhlYWRlciA9IHsuLi5vYmouaGVhZGVyLCAuLi5oZWFkZXJ9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLnNldEhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLmhlYWRlciA9IHsuLi5vYmouaGVhZGVyLCAuLi5jb25maWcuc2V0SGVhZGVyfTtcbiAgICB9XG5cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHsgLi4ub2JqLmZvcm1EYXRhIGFzIG9iamVjdCwgW2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9uIH07XG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5pyJ5YWo5bGA5Y+C5pWw77yM5YiZ5re75YqgXG4gICAgY29uc3QgZ2QgPSBnZXRHbG9iYWxEYXRhKCk7XG4gICAgb2JqLmZvcm1EYXRhID0geyAuLi5nZCwgLi4ub2JqLmZvcm1EYXRhIH07XG5cbiAgICBpZiAoIWNvbmZpZy5kb05vdFVzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIC8vIOWwhueZu+mZhuaAgeS5n+W4puWcqHVybOS4ilxuICAgICAgICBpZiAoc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIHsgW2NvbmZpZy5zZXNzaW9uTmFtZV06IHN0YXR1cy5zZXNzaW9uIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIOWFqOWxgOWPguaVsOWQjOaXtuaUvuWcqHVybOS4ilxuICAgICAgICBvYmoudXJsID0gdXJsLnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuXG4gICAgLy8g5aSH55So5Z+f5ZCN6YC76L6RXG4gICAgb2JqLnVybCA9IHVybC5yZXBsYWNlRG9tYWluKG9iai51cmwpO1xuXG4gICAgZHVyYXRpb25SZXBvcnRlci5zdGFydChvYmopO1xuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gZ2V0R2xvYmFsRGF0YSgpIHtcbiAgICBsZXQgZ2Q6IGFueSA9IHt9O1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmdsb2JhbERhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBnZCA9IGNvbmZpZy5nbG9iYWxEYXRhKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmdsb2JhbERhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWcuZ2xvYmFsRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIGdkO1xufVxuXG5mdW5jdGlvbiBkb1JlcXVlc3Qob2JqOiBJUmVxdWVzdE9wdGlvbikge1xuICAgIC8vIOecn+ato+WPkeivt+axguaXtu+8jOWGjeasoeWIpOaWreS4gOasoeaYr+WQpuacieeZu+mZhuaAgVxuICAgIGlmKCFzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICByZXR1cm4gcmVxdWVzdChvYmopIGFzIFByb21pc2U8V2VjaGF0TWluaXByb2dyYW0uUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdD47XG4gICAgfVxuICAgIG9iaiA9IGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iaik7XG4gICAgaWYgKG9iai5yZUxvZ2luQ291bnQgPT09IDAgJiYgdHlwZW9mIGNvbmZpZy5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqID0gY29uZmlnLmJlZm9yZVNlbmQob2JqLCBzdGF0dXMuc2Vzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHd4LnJlcXVlc3Qoe1xuICAgICAgICAgICAgLi4ub2JqLFxuICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWwocmVzKSB7XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5Li75Z+f5ZCN5LiN5Y+v55So77yM5LiU6YWN572u5LqG5aSH5Lu95Z+f5ZCN77yM5LiU5pys5qyh6K+35rGC5pyq5L2/55So5aSH5Lu95Z+f5ZCNXG4gICAgICAgICAgICAgICAgaWYgKChjb25maWcuZG9tYWluQ2hhbmdlVHJpZ2dlciAmJiBjb25maWcuZG9tYWluQ2hhbmdlVHJpZ2dlcihyZXMpKSAmJiB1cmwuaXNJbkJhY2t1cERvbWFpbkxpc3Qob2JqLnVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g5byA5ZCv5aSH5Lu95Z+f5ZCNXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZUJhY2t1cERvbWFpbihvYmoudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgLy8g6YeN6K+V5LiA5qyhXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb1JlcXVlc3Qob2JqKS50aGVuKChyZXMpPT4gcmVzb2x2ZShyZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHR5cGU6ICdzeXN0ZW0tZXJyb3InLCByZXMgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5pc0ZpeFN1Y2Nlc3NDb21wbGV0ZVRpbWluZykge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gZG9VcGxvYWRGaWxlKG9iajogSVVwbG9hZEZpbGVPcHRpb24pIHtcbiAgICAvLyDnnJ/mraPlj5Hor7fmsYLml7bvvIzlho3mrKHliKTmlq3kuIDmrKHmmK/lkKbmnInnmbvpmYbmgIFcbiAgICBpZighc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHVwbG9hZEZpbGUob2JqKSBhcyBQcm9taXNlPFdlY2hhdE1pbmlwcm9ncmFtLlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQ+O1xuICAgIH1cbiAgICBvYmogPSBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopO1xuICAgIGlmIChvYmoucmVMb2dpbkNvdW50ID09PSAwICYmIHR5cGVvZiBjb25maWcuYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iaiA9IGNvbmZpZy5iZWZvcmVTZW5kKG9iaiwgc3RhdHVzLnNlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2U8V2VjaGF0TWluaXByb2dyYW0uVXBsb2FkRmlsZVN1Y2Nlc3NDYWxsYmFja1Jlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB3eC51cGxvYWRGaWxlKHtcbiAgICAgICAgICAgIC4uLm9iaixcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsKHJlcykge1xuICAgICAgICAgICAgICAgIC8vIOWmguaenOS4u+Wfn+WQjeS4jeWPr+eUqO+8jOS4lOmFjee9ruS6huWkh+S7veWfn+WQje+8jOS4lOacrOasoeivt+axguacquS9v+eUqOWkh+S7veWfn+WQjVxuICAgICAgICAgICAgICAgIGlmICgoY29uZmlnLmRvbWFpbkNoYW5nZVRyaWdnZXIgJiYgY29uZmlnLmRvbWFpbkNoYW5nZVRyaWdnZXIocmVzKSkgJiYgdXJsLmlzSW5CYWNrdXBEb21haW5MaXN0KG9iai51cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOW8gOWQr+Wkh+S7veWfn+WQjVxuICAgICAgICAgICAgICAgICAgICBlbmFibGVCYWNrdXBEb21haW4ob2JqLnVybCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIOmHjeivleS4gOasoVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9VcGxvYWRGaWxlKG9iaikudGhlbigocmVzKT0+IHJlc29sdmUocmVzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiAnc3lzdGVtLWVycm9yJywgcmVzIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuaXNGaXhTdWNjZXNzQ29tcGxldGVUaW1pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmcuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCAwKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmcuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHJlcXVlc3Q8VFJlc3A+KG9iajogSVJlcXVlc3RPcHRpb24pOiBQcm9taXNlPFRSZXNwPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChjb25maWcubW9ja0pzb24pIHtcbiAgICAgICAgICAgIGxldCBtb2NrUmVzcG9uc2UgPSBtb2NrTWFuYWdlci5nZXQob2JqKTtcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIucmVzcG9uc2VGb3JSZXF1ZXN0KG1vY2tSZXNwb25zZSwgb2JqKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqLmNhY2hlKSB7XG4gICAgICAgICAgICBjYWNoZU1hbmFnZXIuZ2V0KG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICBzZXNzaW9uTWFuYWdlci5tYWluKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZG9SZXF1ZXN0KG9iailcbiAgICAgICAgfSkudGhlbigocmVzOiBXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIucmVzcG9uc2VGb3JSZXF1ZXN0KHJlcywgb2JqKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoZTogSUVycm9yT2JqZWN0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHVwbG9hZEZpbGUob2JqOiBJVXBsb2FkRmlsZU9wdGlvbik6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChjb25maWcubW9ja0pzb24pIHtcbiAgICAgICAgICAgIGxldCBtb2NrUmVzcG9uc2UgPSBtb2NrTWFuYWdlci5nZXQob2JqKTtcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIucmVzcG9uc2VGb3JVcGxvYWRGaWxlKG1vY2tSZXNwb25zZSwgb2JqKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXNzaW9uTWFuYWdlci5tYWluKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZG9VcGxvYWRGaWxlKG9iailcbiAgICAgICAgfSkudGhlbigocmVzOiBXZWNoYXRNaW5pcHJvZ3JhbS5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIucmVzcG9uc2VGb3JVcGxvYWRGaWxlKHJlcywgb2JqKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoZTogSUVycm9yT2JqZWN0KSA9PiB7XG4gICAgICAgICAgICBjYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gZW5hYmxlQmFja3VwRG9tYWluKHVybDogc3RyaW5nID0gXCJcIikge1xuICAgIGlmICghc3RhdHVzLmlzRW5hYmxlQmFja3VwRG9tYWluKSB7XG4gICAgICAgIHN0YXR1cy5pc0VuYWJsZUJhY2t1cERvbWFpbiA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmJhY2t1cERvbWFpbkVuYWJsZUNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25maWcuYmFja3VwRG9tYWluRW5hYmxlQ2FsbGJhY2sodXJsKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGZvcm1hdCxcbiAgICByZXF1ZXN0LFxuICAgIHVwbG9hZEZpbGUsXG4gICAgZW5hYmxlQmFja3VwRG9tYWluXG59XG4iXX0=
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/module/responseHandler.ts":
|
|
/*!***************************************!*\
|
|
!*** ./src/module/responseHandler.ts ***!
|
|
\***************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
|
|
var requestHandler_1 = __webpack_require__(/*! ./requestHandler */ "./src/module/requestHandler.ts");
|
|
var cacheManager_1 = __webpack_require__(/*! ./cacheManager */ "./src/module/cacheManager.ts");
|
|
var durationReporter_1 = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.ts");
|
|
var sessionManager_1 = __webpack_require__(/*! ./sessionManager */ "./src/module/sessionManager.ts");
|
|
var jsonSuperset_1 = __webpack_require__(/*! ../util/jsonSuperset */ "./src/util/jsonSuperset.ts");
|
|
function responseForRequest(res, obj) {
|
|
if (res.statusCode === 200) {
|
|
durationReporter_1.default.end(obj);
|
|
if (obj.dataType === 'json' && typeof res.data === 'string') {
|
|
res.data = (0, jsonSuperset_1.default)(res.data);
|
|
try {
|
|
res.data = JSON.parse(res.data);
|
|
}
|
|
catch (e) {
|
|
throw { type: 'logic-error', res: res };
|
|
}
|
|
}
|
|
if (config_1.default.loginTrigger(res.data) && obj.reLoginCount !== undefined && obj.reLoginCount < config_1.default.reLoginLimit) {
|
|
sessionManager_1.default.delSession();
|
|
return requestHandler_1.default.request(obj);
|
|
}
|
|
else if (config_1.default.successTrigger(res.data)) {
|
|
var realData = "";
|
|
try {
|
|
if (typeof config_1.default.successData === 'function') {
|
|
realData = config_1.default.successData(res.data);
|
|
}
|
|
else {
|
|
realData = res.data;
|
|
}
|
|
}
|
|
catch (e) { }
|
|
cacheManager_1.default.set(obj, realData);
|
|
if (!obj.noCacheFlash) {
|
|
if (typeof obj.success === "function") {
|
|
obj.success(realData);
|
|
}
|
|
else {
|
|
return realData;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
throw { type: 'logic-error', res: res };
|
|
}
|
|
}
|
|
else {
|
|
throw { type: 'http-error', res: res };
|
|
}
|
|
}
|
|
function responseForUploadFile(res, obj) {
|
|
if (res.statusCode === 200) {
|
|
durationReporter_1.default.end(obj);
|
|
if (typeof res.data === 'string') {
|
|
res.data = (0, jsonSuperset_1.default)(res.data);
|
|
try {
|
|
res.data = JSON.parse(res.data);
|
|
}
|
|
catch (e) {
|
|
throw { type: 'logic-error', res: res };
|
|
}
|
|
}
|
|
if (config_1.default.loginTrigger(res.data) && obj.reLoginCount !== undefined && obj.reLoginCount < config_1.default.reLoginLimit) {
|
|
sessionManager_1.default.delSession();
|
|
return requestHandler_1.default.uploadFile(obj);
|
|
}
|
|
else if (config_1.default.successTrigger(res.data)) {
|
|
var realData = "";
|
|
try {
|
|
if (typeof config_1.default.successData === 'function') {
|
|
realData = config_1.default.successData(res.data);
|
|
}
|
|
else {
|
|
realData = res.data;
|
|
}
|
|
}
|
|
catch (e) { }
|
|
if (typeof obj.success === "function") {
|
|
obj.success(realData);
|
|
}
|
|
else {
|
|
return realData;
|
|
}
|
|
}
|
|
else {
|
|
throw { type: 'logic-error', res: res };
|
|
}
|
|
}
|
|
else {
|
|
throw { type: 'http-error', res: res };
|
|
}
|
|
}
|
|
exports.default = {
|
|
responseForRequest: responseForRequest,
|
|
responseForUploadFile: responseForUploadFile
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2VIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9yZXNwb25zZUhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsbURBQTZDO0FBQzdDLCtDQUF5QztBQUN6Qyx1REFBaUQ7QUFDakQsbURBQTZDO0FBRTdDLHFEQUErQztBQUUvQyxTQUFTLGtCQUFrQixDQUN2QixHQUFtRCxFQUNuRCxHQUFtQjtJQUVuQixJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO1FBRXhCLDBCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUcxQixJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDekQsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFBLHNCQUFZLEVBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUk7Z0JBQ0EsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBQSxFQUFFLENBQUE7YUFDckM7U0FDSjtRQUVELElBQUksZ0JBQU0sQ0FBQyxZQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEdBQUcsZ0JBQU0sQ0FBQyxZQUFhLEVBQUU7WUFFN0csd0JBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QixPQUFPLHdCQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RDO2FBQU0sSUFBSSxnQkFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFH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LEtBQUEsRUFBRSxDQUFBO0tBQ3BDO0FBQ0wsQ0FBQztBQUVELGtCQUFlO0lBQ1gsa0JBQWtCLG9CQUFBO0lBQ2xCLHFCQUFxQix1QkFBQTtDQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgcmVxdWVzdEhhbmRsZXIgZnJvbSAnLi9yZXF1ZXN0SGFuZGxlcidcbmltcG9ydCBjYWNoZU1hbmFnZXIgZnJvbSAnLi9jYWNoZU1hbmFnZXInXG5pbXBvcnQgZHVyYXRpb25SZXBvcnRlciBmcm9tICcuL2R1cmF0aW9uUmVwb3J0ZXInXG5pbXBvcnQgc2Vzc2lvbk1hbmFnZXIgZnJvbSAnLi9zZXNzaW9uTWFuYWdlcidcbmltcG9ydCB7IElSZXF1ZXN0T3B0aW9uLCBJVXBsb2FkRmlsZU9wdGlvbiwgSUFueU9iamVjdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VcIjtcbmltcG9ydCBqc29uU3VwZXJzZXQgZnJvbSAnLi4vdXRpbC9qc29uU3VwZXJzZXQnXG5cbmZ1bmN0aW9uIHJlc3BvbnNlRm9yUmVxdWVzdChcbiAgICByZXM6IFdlY2hhdE1pbmlwcm9ncmFtLlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQsXG4gICAgb2JqOiBJUmVxdWVzdE9wdGlvblxuKTogYW55IHtcbiAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuXG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXIuZW5kKG9iaik7XG4gICAgICAgIFxuICAgICAgICAvLyDor7fmsYLmoLzlvI/kuLpqc29u77yM5L2G6L+U5Zue5LqGc3RyaW5n77yM6K+05piO5YaF5a655Lit5Y+v6IO95a2Y5Zyo5a+86Ie05L2/5b6XSmF2YVNjcmlwdOW8guW4uOeahOWtl+esplxuICAgICAgICBpZiAob2JqLmRhdGFUeXBlID09PSAnanNvbicgJiYgdHlwZW9mIHJlcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzLmRhdGEgPSBqc29uU3VwZXJzZXQocmVzLmRhdGEpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IEpTT04ucGFyc2UocmVzLmRhdGEpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ2xvZ2ljLWVycm9yJywgcmVzIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcubG9naW5UcmlnZ2VyIShyZXMuZGF0YSkgJiYgb2JqLnJlTG9naW5Db3VudCAhPT0gdW5kZWZpbmVkICYmIG9iai5yZUxvZ2luQ291bnQgPCBjb25maWcucmVMb2dpbkxpbWl0ISkge1xuICAgICAgICAgICAgLy8g55m75b2V5oCB5aSx5pWI77yM5LiU6YeN6K+V5qyh5pWw5LiN6LaF6L+H6YWN572uXG4gICAgICAgICAgICBzZXNzaW9uTWFuYWdlci5kZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXIucmVxdWVzdChvYmopO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5zdWNjZXNzVHJpZ2dlcihyZXMuZGF0YSkpIHtcbiAgICAgICAgICAgIC8vIOaOpeWPo+i/lOWbnuaIkOWKn+eggVxuICAgICAgICAgICAgbGV0IHJlYWxEYXRhOiBzdHJpbmcgfCBJQW55T2JqZWN0IHwgQXJyYXlCdWZmZXIgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5zdWNjZXNzRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IGNvbmZpZy5zdWNjZXNzRGF0YShyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgLy8g57yT5a2Y5a2Y5YKoXG4gICAgICAgICAgICBjYWNoZU1hbmFnZXIuc2V0KG9iaiwgcmVhbERhdGEpO1xuICAgICAgICAgICAgaWYgKCFvYmoubm9DYWNoZUZsYXNoKSB7XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5Li65LqG5L+d6K+B6aG16Z2i5LiN6Zeq54OB77yM5YiZ5LiN5Zue6LCD77yM5Y+q5piv57yT5a2Y5pyA5paw5pWw5o2u77yM5b6F5LiL5qyh6L+b5YWl5YaN55SoXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlYWxEYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhbERhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g5o6l5Y+j6L+U5Zue5aSx6LSl56CBXG4gICAgICAgICAgICB0aHJvdyB7IHR5cGU6ICdsb2dpYy1lcnJvcicsIHJlcyB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBodHRwc+i/lOWbnueKtuaAgeeggemdnjIwMFxuICAgICAgICB0aHJvdyB7IHR5cGU6ICdodHRwLWVycm9yJywgcmVzIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlc3BvbnNlRm9yVXBsb2FkRmlsZShcbiAgICByZXM6IFdlY2hhdE1pbmlwcm9ncmFtLlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQsXG4gICAgb2JqOiBJVXBsb2FkRmlsZU9wdGlvblxuKTogYW55IHtcbiAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuXG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXIuZW5kKG9iaik7XG5cbiAgICAgICAgLy8g5YaF5a655Lit5Y+v6IO95a2Y5Zyo5a+86Ie05L2/5b6XSmF2YVNjcmlwdOW8guW4uOeahOWtl+esplxuICAgICAgICBpZiAodHlwZW9mIHJlcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzLmRhdGEgPSBqc29uU3VwZXJzZXQocmVzLmRhdGEpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IEpTT04ucGFyc2UocmVzLmRhdGEpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ2xvZ2ljLWVycm9yJywgcmVzIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcubG9naW5UcmlnZ2VyIShyZXMuZGF0YSkgJiYgb2JqLnJlTG9naW5Db3VudCAhPT0gdW5kZWZpbmVkICYmIG9iai5yZUxvZ2luQ291bnQgPCBjb25maWcucmVMb2dpbkxpbWl0ISkge1xuICAgICAgICAgICAgLy8g55m75b2V5oCB5aSx5pWI77yM5LiU6YeN6K+V5qyh5pWw5LiN6LaF6L+H6YWN572uXG4gICAgICAgICAgICBzZXNzaW9uTWFuYWdlci5kZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXIudXBsb2FkRmlsZShvYmopO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5zdWNjZXNzVHJpZ2dlcihyZXMuZGF0YSkpIHtcbiAgICAgICAgICAgIC8vIOaOpeWPo+i/lOWbnuaIkOWKn+eggVxuICAgICAgICAgICAgbGV0IHJlYWxEYXRhOiBzdHJpbmcgfCBJQW55T2JqZWN0IHwgQXJyYXlCdWZmZXIgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5zdWNjZXNzRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IGNvbmZpZy5zdWNjZXNzRGF0YShyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZWFsRGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWFsRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOaOpeWPo+i/lOWbnuWksei0peeggVxuICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAnbG9naWMtZXJyb3InLCByZXMgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaHR0cHPov5Tlm57nirbmgIHnoIHpnZ4yMDBcbiAgICAgICAgdGhyb3cgeyB0eXBlOiAnaHR0cC1lcnJvcicsIHJlcyB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcmVzcG9uc2VGb3JSZXF1ZXN0LFxuICAgIHJlc3BvbnNlRm9yVXBsb2FkRmlsZVxufTtcbiJdfQ==
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/module/sessionManager.ts":
|
|
/*!**************************************!*\
|
|
!*** ./src/module/sessionManager.ts ***!
|
|
\**************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
var __assign = (this && this.__assign) || function () {
|
|
__assign = Object.assign || function(t) {
|
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
s = arguments[i];
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
t[p] = s[p];
|
|
}
|
|
return t;
|
|
};
|
|
return __assign.apply(this, arguments);
|
|
};
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
function step(op) {
|
|
if (f) throw new TypeError("Generator is already executing.");
|
|
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
switch (op[0]) {
|
|
case 0: case 1: t = op; break;
|
|
case 4: _.label++; return { value: op[1], done: false };
|
|
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
default:
|
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
if (t[2]) _.ops.pop();
|
|
_.trys.pop(); continue;
|
|
}
|
|
op = body.call(thisArg, _);
|
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
}
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts");
|
|
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
|
|
var durationReporter_1 = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.ts");
|
|
var requestHandler_1 = __webpack_require__(/*! ./requestHandler */ "./src/module/requestHandler.ts");
|
|
var loading_1 = __webpack_require__(/*! ../util/loading */ "./src/util/loading.ts");
|
|
var url_1 = __webpack_require__(/*! ../util/url */ "./src/util/url.ts");
|
|
var checkSessionPromise = null;
|
|
function checkSession() {
|
|
if (!checkSessionPromise) {
|
|
checkSessionPromise = new Promise(function (resolve, reject) {
|
|
var start = new Date().getTime();
|
|
wx.checkSession({
|
|
success: function () {
|
|
return resolve();
|
|
},
|
|
fail: function () {
|
|
delSession();
|
|
return doLogin().then(function () {
|
|
return resolve();
|
|
}, function (res) {
|
|
return reject(res);
|
|
});
|
|
},
|
|
complete: function () {
|
|
var end = new Date().getTime();
|
|
durationReporter_1.default.report('wx_checkSession', start, end);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
return checkSessionPromise;
|
|
}
|
|
function isSessionExpireOrEmpty() {
|
|
if (!status_1.default.session) {
|
|
return true;
|
|
}
|
|
if (config_1.default.sessionExpireTime && new Date().getTime() > status_1.default.sessionExpire) {
|
|
delSession();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function checkLogin() {
|
|
return new Promise(function (resolve, reject) {
|
|
if (isSessionExpireOrEmpty()) {
|
|
config_1.default.doNotCheckSession = true;
|
|
return doLogin().then(function () {
|
|
return resolve();
|
|
}, function (res) {
|
|
return reject(res);
|
|
});
|
|
}
|
|
else {
|
|
return resolve();
|
|
}
|
|
});
|
|
}
|
|
var loginPromise = null;
|
|
function doLogin() {
|
|
if (!loginPromise) {
|
|
loginPromise = new Promise(function (resolve, reject) {
|
|
login().then(function () {
|
|
loginPromise = null;
|
|
return resolve();
|
|
}).catch(function (res) {
|
|
loginPromise = null;
|
|
loading_1.default.hide();
|
|
return reject(res);
|
|
});
|
|
});
|
|
}
|
|
return loginPromise;
|
|
}
|
|
function login() {
|
|
return new Promise(function (resolve, reject) {
|
|
var start = new Date().getTime();
|
|
wx.login({
|
|
success: function (res) {
|
|
if (res.code) {
|
|
code2Session(res.code).then(function () {
|
|
return resolve();
|
|
}).catch(function (res) {
|
|
return reject(res);
|
|
});
|
|
}
|
|
else {
|
|
return reject({ type: "system-error", res: res });
|
|
}
|
|
},
|
|
complete: function () {
|
|
var end = new Date().getTime();
|
|
durationReporter_1.default.report('wx_login', start, end);
|
|
},
|
|
fail: function (res) {
|
|
return reject({ type: "system-error", res: res });
|
|
}
|
|
});
|
|
});
|
|
}
|
|
function setSession(session) {
|
|
status_1.default.session = session;
|
|
config_1.default.doNotCheckSession = true;
|
|
if (config_1.default.sessionExpireTime && config_1.default.sessionExpireKey) {
|
|
status_1.default.sessionExpire = new Date().getTime() + config_1.default.sessionExpireTime;
|
|
wx.setStorage({
|
|
key: config_1.default.sessionExpireKey,
|
|
data: String(status_1.default.sessionExpire)
|
|
});
|
|
}
|
|
wx.setStorage({
|
|
key: config_1.default.sessionName,
|
|
data: status_1.default.session
|
|
});
|
|
}
|
|
function code2Session(code) {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var data, obj;
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
if (!(typeof config_1.default.codeToSession.data === "function")) return [3, 2];
|
|
return [4, config_1.default.codeToSession.data(code)];
|
|
case 1:
|
|
data = _a.sent();
|
|
return [3, 3];
|
|
case 2:
|
|
data = config_1.default.codeToSession.data || {};
|
|
_a.label = 3;
|
|
case 3:
|
|
if (config_1.default.codeToSession.codeName) {
|
|
data[config_1.default.codeToSession.codeName] = code;
|
|
}
|
|
else {
|
|
data.code = code;
|
|
}
|
|
obj = {
|
|
url: requestHandler_1.default.format(config_1.default.codeToSession.url),
|
|
data: data,
|
|
method: config_1.default.codeToSession.method || 'GET',
|
|
header: typeof config_1.default.setHeader === 'function' ? config_1.default.setHeader() : config_1.default.setHeader,
|
|
};
|
|
if (typeof config_1.default.beforeSend === "function") {
|
|
obj = config_1.default.beforeSend(obj);
|
|
}
|
|
obj.url = url_1.default.replaceDomain(obj.url);
|
|
return [2, new Promise(function (resolve, reject) {
|
|
var start = new Date().getTime();
|
|
wx.request(__assign(__assign({}, obj), { success: function (res) {
|
|
if (res.statusCode === 200) {
|
|
if (config_1.default.codeToSession.report) {
|
|
var end = new Date().getTime();
|
|
durationReporter_1.default.report(config_1.default.codeToSession.report, start, end);
|
|
}
|
|
var s = void 0;
|
|
try {
|
|
s = config_1.default.codeToSession.success(res.data, res);
|
|
}
|
|
catch (e) {
|
|
}
|
|
if (typeof s === 'string' && s) {
|
|
setSession(s);
|
|
return resolve(s);
|
|
}
|
|
else {
|
|
return reject({ type: "logic-error", res: res });
|
|
}
|
|
}
|
|
else {
|
|
return reject({ type: "http-error", res: res });
|
|
}
|
|
}, fail: function (res) {
|
|
if ((config_1.default.domainChangeTrigger && config_1.default.domainChangeTrigger(res)) && url_1.default.isInBackupDomainList(obj.url)) {
|
|
requestHandler_1.default.enableBackupDomain(obj.url);
|
|
return code2Session(code).then(function (res) { return resolve(res); });
|
|
}
|
|
return reject({ type: "system-error", res: res });
|
|
} }));
|
|
})];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
function delSession() {
|
|
status_1.default.session = '';
|
|
wx.removeStorage({
|
|
key: config_1.default.sessionName
|
|
});
|
|
if (config_1.default.sessionExpireTime && config_1.default.sessionExpireKey) {
|
|
status_1.default.sessionExpire = Infinity;
|
|
wx.removeStorage({
|
|
key: config_1.default.sessionExpireKey
|
|
});
|
|
}
|
|
}
|
|
function main() {
|
|
return new Promise(function (resolve, reject) {
|
|
return checkLogin().then(function () {
|
|
return config_1.default.doNotCheckSession ? Promise.resolve() : checkSession();
|
|
}).then(function () {
|
|
return resolve();
|
|
}).catch(function (e) {
|
|
return reject(e);
|
|
});
|
|
});
|
|
}
|
|
exports.default = {
|
|
main: main,
|
|
setSession: setSession,
|
|
delSession: delSession
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbk1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3Nlc3Npb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQW9DO0FBQ3BDLHVEQUFpRDtBQUNqRCxtREFBNkM7QUFDN0MsMkNBQXFDO0FBQ3JDLG1DQUE2QjtBQUk3QixJQUFJLG1CQUFtQixHQUFRLElBQUksQ0FBQztBQUVwQyxTQUFTLFlBQVk7SUFDakIsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1FBQ3RCLG1CQUFtQixHQUFHLElBQUksT0FBTyxDQUFPLFVBQUMsT0FBTyxFQUFFLE1BQU07WUFDcEQsSUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxFQUFFLENBQUMsWUFBWSxDQUFDO2dCQUNaLE9BQU87b0JBRUgsT0FBTyxPQUFPLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxJQUFJO29CQUVBLFVBQVUsRUFBRSxDQUFDO29CQUNiLE9BQU8sT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUNsQixPQUFPLE9BQU8sRUFBRSxDQUFDO29CQUNyQixDQUFDLEVBQUUsVUFBQyxHQUFRO3dCQUNSLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN2QixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUNELFFBQVE7b0JBQ0osSUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDakMsMEJBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDM0QsQ0FBQzthQUNKLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0tBQ0w7SUFDRCxPQUFP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QUUsQ0FBQyxhQUFhLENBQUM7UUFDYixHQUFHLEVBQUUsZ0JBQU0sQ0FBQyxXQUFxQjtLQUNwQyxDQUFDLENBQUM7SUFDSCxJQUFJLGdCQUFNLENBQUMsaUJBQWlCLElBQUksZ0JBQU0sQ0FBQyxnQkFBZ0IsRUFBRTtRQUNyRCxnQkFBTSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7UUFDaEMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUNiLEdBQUcsRUFBRSxnQkFBTSxDQUFDLGdCQUFnQjtTQUMvQixDQUFDLENBQUE7S0FDTDtBQUNMLENBQUM7QUFFRCxTQUFTLElBQUk7SUFDVCxPQUFPLElBQUksT0FBTyxDQUFPLFVBQUMsT0FBTyxFQUFFLE1BQU07UUFDckMsT0FBTyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDckIsT0FBTyxnQkFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ3hFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNKLE9BQU8sT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQUMsQ0FBZTtZQUNyQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELGtCQUFlO0lBQ1gsSUFBSSxNQUFBO0lBQ0osVUFBVSxZQUFBO0lBQ1YsVUFBVSxZQUFBO0NBQ2IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdGF0dXMgZnJvbSAnLi4vc3RvcmUvc3RhdHVzJ1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9zdG9yZS9jb25maWcnXG5pbXBvcnQgZHVyYXRpb25SZXBvcnRlciBmcm9tICcuL2R1cmF0aW9uUmVwb3J0ZXInXG5pbXBvcnQgcmVxdWVzdEhhbmRsZXIgZnJvbSAnLi9yZXF1ZXN0SGFuZGxlcidcbmltcG9ydCBsb2FkaW5nIGZyb20gJy4uL3V0aWwvbG9hZGluZydcbmltcG9ydCB1cmwgZnJvbSAnLi4vdXRpbC91cmwnXG5pbXBvcnQgeyBJRXJyb3JPYmplY3QgfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCJcblxuLyog55Sf5ZG95ZGo5pyf5YaF5Y+q5YGa5LiA5qyh55qEY2hlY2tTZXNzaW9uICovXG5sZXQgY2hlY2tTZXNzaW9uUHJvbWlzZTogYW55ID0gbnVsbDtcblxuZnVuY3Rpb24gY2hlY2tTZXNzaW9uKCkge1xuICAgIGlmICghY2hlY2tTZXNzaW9uUHJvbWlzZSkge1xuICAgICAgICBjaGVja1Nlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHd4LmNoZWNrU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgc3VjY2VzcygpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g55m75b2V5oCB5pyJ5pWI77yM5LiU5Zyo5pys55Sf5ZG95ZGo5pyf5YaF5peg6aG75YaN5qOA6aqM5LqGXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmYWlsKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyDnmbvlvZXmgIHov4fmnJ9cbiAgICAgICAgICAgICAgICAgICAgZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgKHJlczogYW55KT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2NoZWNrU2Vzc2lvbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjaGVja1Nlc3Npb25Qcm9taXNlO1xufVxuXG4vKiDliKTmlq1zZXNzaW9u5piv5ZCm5Li656m65oiW5bey6L+H5pyfICovXG5mdW5jdGlvbiBpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkge1xuICAgIGlmICghc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgLy8g5aaC5p6c57yT5a2Y5Lit5rKh5pyJc2Vzc2lvblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzLnNlc3Npb25FeHBpcmUpIHtcbiAgICAgICAgLy8g5aaC5p6c5pyJ6K6+572u5pys5Zywc2Vzc2lvbue8k+WtmOaXtumXtO+8jOS4lOe8k+WtmOaXtumXtOW3suWIsFxuICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjaGVja0xvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkpIHtcbiAgICAgICAgICAgIC8vIOayoeacieeZu+mZhuaAge+8jOS4jemcgOimgeWGjWNoZWNrU2Vzc2lvblxuICAgICAgICAgICAgY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIChyZXM6IGFueSk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g57yT5a2Y5Lit5pyJc2Vzc2lvbuS4lOacqui/h+acn1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cbi8qIOeZu+mZhua1geeoi+eahHByb21pc2UgKi9cbmxldCBsb2dpblByb21pc2U6IGFueSA9IG51bGw7XG5cbmZ1bmN0aW9uIGRvTG9naW4oKSB7XG4gICAgaWYgKCFsb2dpblByb21pc2UpIHtcbiAgICAgICAgbG9naW5Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbG9naW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGxvZ2luUHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTJTZXNzaW9uKHJlcy5jb2RlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXN9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2xvZ2luJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXN9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiBzZXRTZXNzaW9uKHNlc3Npb246IHN0cmluZykge1xuICAgIHN0YXR1cy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICAvLyDmjaLlm57mnaXnmoRzZXNzaW9u77yM5LiN6ZyA6KaB5YaNY2hlY2tTZXNzaW9uXG4gICAgY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAvLyDlpoLmnpzmnInorr7nva7mnKzlnLBzZXNzaW9u6L+H5pyf5pe26Ze0XG4gICAgaWYgKGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXMuc2Vzc2lvbkV4cGlyZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnLnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzLnNlc3Npb25FeHBpcmUpXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uTmFtZSBhcyBzdHJpbmcsXG4gICAgICAgIGRhdGE6IHN0YXR1cy5zZXNzaW9uXG4gICAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvZGUyU2Vzc2lvbihjb2RlOiBzdHJpbmcpIHtcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIC8vIGNvZGVUb1Nlc3Npb24uZGF0YeaUr+aMgeWHveaVsFxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNvZGVUb1Nlc3Npb24uZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhKGNvZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhIHx8IHt9O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNvZGVUb1Nlc3Npb24uY29kZU5hbWUpIHtcbiAgICAgICAgZGF0YVtjb25maWcuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZV0gPSBjb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuY29kZSA9IGNvZGU7XG4gICAgfVxuXG4gICAgbGV0IG9iaiA9IHtcbiAgICAgICAgdXJsOiByZXF1ZXN0SGFuZGxlci5mb3JtYXQoY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsKSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgbWV0aG9kOiBjb25maWcuY29kZVRvU2Vzc2lvbi5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgIGhlYWRlcjogdHlwZW9mIGNvbmZpZy5zZXRIZWFkZXIgPT09ICdmdW5jdGlvbicgPyBjb25maWcuc2V0SGVhZGVyKCk6IGNvbmZpZy5zZXRIZWFkZXIsXG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmogPSBjb25maWcuYmVmb3JlU2VuZChvYmopO1xuICAgIH1cblxuICAgIC8vIOWkh+eUqOWfn+WQjemAu+i+kVxuICAgIG9iai51cmwgPSB1cmwucmVwbGFjZURvbWFpbihvYmoudXJsKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIC4uLm9iaixcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzOiBXZWNoYXRNaW5pcHJvZ3JhbS5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g6ICX5pe25LiK5oqlXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuY29kZVRvU2Vzc2lvbi5yZXBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXIucmVwb3J0KGNvbmZpZy5jb2RlVG9TZXNzaW9uLnJlcG9ydCwgc3RhcnQsIGVuZClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGNvbmZpZy5jb2RlVG9TZXNzaW9uLnN1Y2Nlc3MocmVzLmRhdGEsIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycgJiYgcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2Vzc2lvbihzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dHlwZTogXCJsb2dpYy1lcnJvclwiLCByZXN9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qoe3R5cGU6IFwiaHR0cC1lcnJvclwiLCByZXN9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIOWmguaenOS4u+Wfn+WQjeS4jeWPr+eUqO+8jOS4lOmFjee9ruS6huWkh+S7veWfn+WQje+8jOS4lOacrOasoeivt+axguacquS9v+eUqOWkh+S7veWfn+WQjVxuICAgICAgICAgICAgICAgIGlmICgoY29uZmlnLmRvbWFpbkNoYW5nZVRyaWdnZXIgJiYgY29uZmlnLmRvbWFpbkNoYW5nZVRyaWdnZXIocmVzKSkgJiYgdXJsLmlzSW5CYWNrdXBEb21haW5MaXN0KG9iai51cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOW8gOWQr+Wkh+S7veWfn+WQjVxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGFuZGxlci5lbmFibGVCYWNrdXBEb21haW4ob2JqLnVybCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIOmHjeivleS4gOasoVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZTJTZXNzaW9uKGNvZGUpLnRoZW4oKHJlcyk9PiByZXNvbHZlKHJlcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXN9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG4vKiDmuIXnqbpzZXNzaW9uICovXG5mdW5jdGlvbiBkZWxTZXNzaW9uKCkge1xuICAgIHN0YXR1cy5zZXNzaW9uID0gJyc7XG4gICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnLnNlc3Npb25OYW1lIGFzIHN0cmluZ1xuICAgIH0pO1xuICAgIGlmIChjb25maWcuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnLnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgc3RhdHVzLnNlc3Npb25FeHBpcmUgPSBJbmZpbml0eTtcbiAgICAgICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5XG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYWluKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJldHVybiBjaGVja0xvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBjaGVja1Nlc3Npb24oKVxuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0pLmNhdGNoKChlOiBJRXJyb3JPYmplY3QpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG1haW4sXG4gICAgc2V0U2Vzc2lvbixcbiAgICBkZWxTZXNzaW9uXG59XG4iXX0=
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/store/config.ts":
|
|
/*!*****************************!*\
|
|
!*** ./src/store/config.ts ***!
|
|
\*****************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var defaultConfig = {
|
|
sessionName: "session",
|
|
loginTrigger: function () {
|
|
return false;
|
|
},
|
|
codeToSession: {
|
|
url: "",
|
|
success: function () { }
|
|
},
|
|
successTrigger: function () {
|
|
return true;
|
|
},
|
|
setHeader: {},
|
|
urlPerfix: "",
|
|
doNotCheckSession: false,
|
|
errorTitle: "操作失败",
|
|
errorContent: function (res) {
|
|
return res;
|
|
},
|
|
errorRetryBtn: false,
|
|
reLoginLimit: 3,
|
|
errorCallback: null,
|
|
reportCGI: false,
|
|
mockJson: false,
|
|
globalData: false,
|
|
sessionExpireKey: "sessionExpireKey",
|
|
errorHandler: null,
|
|
beforeSend: null,
|
|
systemErrorHandler: null,
|
|
domainChangeTrigger: function (res) {
|
|
var _a, _b;
|
|
if ((((_a = res === null || res === void 0 ? void 0 : res.errMsg) === null || _a === void 0 ? void 0 : _a.indexOf('CONNECTION_REFUSED')) >= 0 || ((_b = res === null || res === void 0 ? void 0 : res.errMsg) === null || _b === void 0 ? void 0 : _b.indexOf('ERR_CONNECTION_RESET')) >= 0)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
isFixSuccessCompleteTiming: false
|
|
};
|
|
exports.default = defaultConfig;
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JlL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLElBQU0sYUFBYSxHQUFnQjtJQUMvQixXQUFXLEVBQUUsU0FBUztJQUN0QixZQUFZO1FBQ1IsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUNELGFBQWEsRUFBRTtRQUNYLEdBQUcsRUFBRSxFQUFFO1FBQ1AsT0FBTyxFQUFFLGNBQU0sQ0FBQztLQUNuQjtJQUNELGNBQWM7UUFDVixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFDRCxTQUFTLEVBQUUsRUFBRTtJQUNiLFNBQVMsRUFBRSxFQUFFO0lBQ2IsaUJBQWlCLEVBQUUsS0FBSztJQUN4QixVQUFVLEVBQUUsTUFBTTtJQUNsQixZQUFZLFlBQUMsR0FBUTtRQUNqQixPQUFPLEdBQUcsQ0FBQTtJQUNkLENBQUM7SUFDRCxhQUFhLEVBQUUsS0FBSztJQUNwQixZQUFZLEVBQUUsQ0FBQztJQUNmLGFBQWEsRUFBRSxJQUFJO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsVUFBVSxFQUFFLEtBQUs7SUFFakIsZ0JBQWdCLEVBQUUsa0JBQWtCO0lBRXBDLFlBQVksRUFBRSxJQUFJO0lBRWxCLFVBQVUsRUFBRSxJQUFJO0lBRWhCLGtCQUFrQixFQUFFLElBQUk7SUFFeEIsbUJBQW1CLEVBQUUsVUFBQyxHQUE0Qzs7UUFFOUQsSUFBSSxDQUFDLENBQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsTUFBTSwwQ0FBRSxPQUFPLENBQUMsb0JBQW9CLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQSxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxNQUFNLDBDQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ3hHLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsMEJBQTBCLEVBQUUsS0FBSztDQUNwQyxDQUFDO0FBRUYsa0JBQWUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUluaXRPcHRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2UnXG5cbmNvbnN0IGRlZmF1bHRDb25maWc6IElJbml0T3B0aW9uID0ge1xuICAgIHNlc3Npb25OYW1lOiBcInNlc3Npb25cIixcbiAgICBsb2dpblRyaWdnZXIoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG4gICAgY29kZVRvU2Vzc2lvbjoge1xuICAgICAgICB1cmw6IFwiXCIsXG4gICAgICAgIHN1Y2Nlc3M6ICgpPT4ge31cbiAgICB9LFxuICAgIHN1Y2Nlc3NUcmlnZ2VyKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG4gICAgc2V0SGVhZGVyOiB7fSxcbiAgICB1cmxQZXJmaXg6IFwiXCIsXG4gICAgZG9Ob3RDaGVja1Nlc3Npb246IGZhbHNlLFxuICAgIGVycm9yVGl0bGU6IFwi5pON5L2c5aSx6LSlXCIsXG4gICAgZXJyb3JDb250ZW50KHJlczogYW55KSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICB9LFxuICAgIGVycm9yUmV0cnlCdG46IGZhbHNlLFxuICAgIHJlTG9naW5MaW1pdDogMyxcbiAgICBlcnJvckNhbGxiYWNrOiBudWxsLFxuICAgIHJlcG9ydENHSTogZmFsc2UsXG4gICAgbW9ja0pzb246IGZhbHNlLFxuICAgIGdsb2JhbERhdGE6IGZhbHNlLFxuICAgIC8vIHNlc3Npb27lnKjmnKzlnLDnvJPlrZjnmoRrZXlcbiAgICBzZXNzaW9uRXhwaXJlS2V5OiBcInNlc3Npb25FeHBpcmVLZXlcIixcbiAgICAvLyDoh6rlrprkuYnplJnor6/lpITnkIblh73mlbBcbiAgICBlcnJvckhhbmRsZXI6IG51bGwsXG4gICAgLy8g6K+35rGC5Y+R6YCB5YmN77yM5o+Q5L6baG9va+e7meW8gOWPkeiAheiHquWumuS5ieS/ruaUueWPkemAgeWGheWuuVxuICAgIGJlZm9yZVNlbmQ6IG51bGwsXG4gICAgLy8g6Ieq5a6a5LmJ57O757uf6ZSZ6K+v5aSE55CG5Ye95pWw77yI572R57uc6ZSZ6K+v77yJXG4gICAgc3lzdGVtRXJyb3JIYW5kbGVyOiBudWxsLFxuICAgIC8vIOm7mOiupOmZjee6p+WkhOeQhuWHveaVsFxuICAgIGRvbWFpbkNoYW5nZVRyaWdnZXI6IChyZXM6IFdlY2hhdE1pbmlwcm9ncmFtLkdlbmVyYWxDYWxsYmFja1Jlc3VsdCkgPT4ge1xuICAgICAgICAvLyAtMTAxIOWSjCAtMTAyIOm7mOiupOiHquWKqOmZjee6p1xuICAgICAgICBpZiAoKHJlcz8uZXJyTXNnPy5pbmRleE9mKCdDT05ORUNUSU9OX1JFRlVTRUQnKSA+PSAwIHx8IHJlcz8uZXJyTXNnPy5pbmRleE9mKCdFUlJfQ09OTkVDVElPTl9SRVNFVCcpID49IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAvLyDmmK/lkKbkv67lpI3or7fmsYLnmoRzdWNjZXNzL2NvbXBsZXRl55qE5pe25bqP6Zeu6aKY77yM6K+m6KeBUkVBRE1F55qEUUHpg6jliIZcbiAgICBpc0ZpeFN1Y2Nlc3NDb21wbGV0ZVRpbWluZzogZmFsc2Vcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRDb25maWc7XG4iXX0=
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/store/status.ts":
|
|
/*!*****************************!*\
|
|
!*** ./src/store/status.ts ***!
|
|
\*****************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.default = {
|
|
session: '',
|
|
sessionExpire: Infinity,
|
|
isEnableBackupDomain: false
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JlL3N0YXR1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFlO0lBQ1gsT0FBTyxFQUFFLEVBQVk7SUFFckIsYUFBYSxFQUFFLFFBQWtCO0lBRWpDLG9CQUFvQixFQUFFLEtBQUs7Q0FDdkIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgICBzZXNzaW9uOiAnJyBhcyBzdHJpbmcsXG4gICAgLy8gc2Vzc2lvbui/h+acn+eahOaXtumXtOeCuVxuICAgIHNlc3Npb25FeHBpcmU6IEluZmluaXR5IGFzIG51bWJlcixcbiAgICAvLyDmmK/lkKblkK/nlKjlpIfnlKjln5/lkI1cbiAgICBpc0VuYWJsZUJhY2t1cERvbWFpbjogZmFsc2Vcbn0gYXMgYW55XG4iXX0=
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/util/jsonSuperset.ts":
|
|
/*!**********************************!*\
|
|
!*** ./src/util/jsonSuperset.ts ***!
|
|
\**********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var LINEFEED = /\u000A/g;
|
|
var CARRIAGERETURN = /\u000D/g;
|
|
var LINE_SEPARATOR = /\u2028/g;
|
|
var PARAGRAPH_SEPARATOR = /\u2029/g;
|
|
function replace(res) {
|
|
res = res.replace(LINEFEED, "");
|
|
res = res.replace(CARRIAGERETURN, "");
|
|
res = res.replace(LINE_SEPARATOR, "");
|
|
res = res.replace(PARAGRAPH_SEPARATOR, "");
|
|
return res;
|
|
}
|
|
exports.default = replace;
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvblN1cGVyc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvanNvblN1cGVyc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBV0EsSUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQzNCLElBQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUNqQyxJQUFNLGNBQWMsR0FBRyxTQUFTLENBQUM7QUFDakMsSUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUM7QUFFdEMsU0FBd0IsT0FBTyxDQUFDLEdBQVc7SUFDekMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0MsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBTkQsMEJBTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiAgVSsyMDI4IGFuZCBVKzIwMjkgYXJlIGFsbG93ZWQgaW5zaWRlIHN0cmluZ3MgaW4gSlNPTiAoYXMgYWxsIGxpdGVyYWxcbiAgICBVbmljb2RlIGNoYXJhY3RlcnMpIGJ1dCBKYXZhU2NyaXB0IGRlZmluZXMgdGhlbSBhcyBuZXdsaW5lXG4gICAgc2VwZXJhdG9ycy4gQmVjYXVzZSBubyBsaXRlcmFsIG5ld2xpbmVzIGFyZSBhbGxvd2VkIGluIGEgc3RyaW5nLCB0aGlzXG4gICAgY2F1c2VzIGEgUGFyc2VFcnJvciBpbiB0aGUgYnJvd3Nlci4gV2Ugd29yayBhcm91bmQgdGhpcyBpc3N1ZSBieVxuICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGhlIGVzY2FwZWQgdmVyc2lvbi4gVGhpcyBzaG91bGQgYmUgc2FmZSBiZWNhdXNlXG4gICAgYWNjb3JkaW5nIHRvIHRoZSBKU09OIHNwZWMsIHRoZXNlIGNoYXJhY3RlcnMgYXJlICpvbmx5KiB2YWxpZCBpbnNpZGVcbiAgICBhIHN0cmluZyBhbmQgc2hvdWxkIHRoZXJlZm9yZSBub3QgYmUgcHJlc2VudCBhbnkgb3RoZXIgcGxhY2VzLlxuXG4gICAgbW9yZSBpbmZvcm1hdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtanNvbi1zdXBlcnNldFxuKi9cblxuY29uc3QgTElORUZFRUQgPSAvXFx1MDAwQS9nO1xuY29uc3QgQ0FSUklBR0VSRVRVUk4gPSAvXFx1MDAwRC9nO1xuY29uc3QgTElORV9TRVBBUkFUT1IgPSAvXFx1MjAyOC9nO1xuY29uc3QgUEFSQUdSQVBIX1NFUEFSQVRPUiA9IC9cXHUyMDI5L2c7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcGxhY2UocmVzOiBzdHJpbmcpIHtcbiAgcmVzID0gcmVzLnJlcGxhY2UoTElORUZFRUQsIFwiXCIpO1xuICByZXMgPSByZXMucmVwbGFjZShDQVJSSUFHRVJFVFVSTiwgXCJcIik7XG4gIHJlcyA9IHJlcy5yZXBsYWNlKExJTkVfU0VQQVJBVE9SLCBcIlwiKTtcbiAgcmVzID0gcmVzLnJlcGxhY2UoUEFSQUdSQVBIX1NFUEFSQVRPUiwgXCJcIik7XG4gIHJldHVybiByZXNcbn1cbiJdfQ==
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/util/loading.ts":
|
|
/*!*****************************!*\
|
|
!*** ./src/util/loading.ts ***!
|
|
\*****************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
function show(txt) {
|
|
wx.showToast({
|
|
title: typeof txt === 'boolean' ? '加载中' : txt,
|
|
icon: 'loading',
|
|
mask: true,
|
|
duration: 60000
|
|
});
|
|
}
|
|
function hide() {
|
|
wx.hideToast({});
|
|
}
|
|
exports.default = {
|
|
show: show,
|
|
hide: hide
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2xvYWRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUFTLElBQUksQ0FBQyxHQUFxQjtJQUMvQixFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ1QsS0FBSyxFQUFFLE9BQU8sR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHO1FBQzdDLElBQUksRUFBRSxTQUFTO1FBQ2YsSUFBSSxFQUFFLElBQUk7UUFDVixRQUFRLEVBQUUsS0FBSztLQUNsQixDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsU0FBUyxJQUFJO0lBQ1QsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixDQUFDO0FBRUQsa0JBQWU7SUFDWCxJQUFJLE1BQUE7SUFDSixJQUFJLE1BQUE7Q0FDUCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gc2hvdyh0eHQ6IGJvb2xlYW4gfCBzdHJpbmcpIHtcbiAgICB3eC5zaG93VG9hc3Qoe1xuICAgICAgICB0aXRsZTogdHlwZW9mIHR4dCA9PT0gJ2Jvb2xlYW4nID8gJ+WKoOi9veS4rScgOiB0eHQsXG4gICAgICAgIGljb246ICdsb2FkaW5nJyxcbiAgICAgICAgbWFzazogdHJ1ZSxcbiAgICAgICAgZHVyYXRpb246IDYwMDAwXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gaGlkZSgpIHtcbiAgICB3eC5oaWRlVG9hc3Qoe30pO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgc2hvdyxcbiAgICBoaWRlXG59XG4iXX0=
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/util/url.ts":
|
|
/*!*************************!*\
|
|
!*** ./src/util/url.ts ***!
|
|
\*************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
var __assign = (this && this.__assign) || function () {
|
|
__assign = Object.assign || function(t) {
|
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
s = arguments[i];
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
t[p] = s[p];
|
|
}
|
|
return t;
|
|
};
|
|
return __assign.apply(this, arguments);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts");
|
|
var status_1 = __webpack_require__(/*! ../store/status */ "./src/store/status.ts");
|
|
function setParams(url, params) {
|
|
if (url === void 0) { url = ""; }
|
|
var queryStringIndex = url.indexOf("?");
|
|
var kvp = {};
|
|
if (queryStringIndex >= 0) {
|
|
var oldQueryString_1 = url.substr(queryStringIndex + 1).split("&");
|
|
oldQueryString_1.forEach(function (x, i) {
|
|
var kv = oldQueryString_1[i].split("=");
|
|
kvp[kv[0]] = kv[1];
|
|
});
|
|
}
|
|
kvp = __assign(__assign({}, kvp), params);
|
|
var queryString = Object.keys(kvp)
|
|
.map(function (key) {
|
|
return "".concat(key, "=").concat(encodeURI(kvp[key]));
|
|
})
|
|
.join("&");
|
|
if (queryStringIndex >= 0) {
|
|
return url.substring(0, queryStringIndex + 1) + queryString;
|
|
}
|
|
else {
|
|
return url + "?" + queryString;
|
|
}
|
|
}
|
|
function replaceDomain(url) {
|
|
if (url === void 0) { url = ""; }
|
|
if (status_1.default.isEnableBackupDomain && config_1.default.backupDomainList && typeof config_1.default.backupDomainList === 'object') {
|
|
for (var origin in config_1.default.backupDomainList) {
|
|
if (url.indexOf(origin) >= 0) {
|
|
url = url.replace(origin, config_1.default.backupDomainList[origin]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return url;
|
|
}
|
|
function isInBackupDomainList(url) {
|
|
if (url === void 0) { url = ""; }
|
|
var res = false;
|
|
if (config_1.default.backupDomainList && typeof config_1.default.backupDomainList === 'object') {
|
|
for (var origin in config_1.default.backupDomainList) {
|
|
if (url.indexOf(origin) >= 0) {
|
|
res = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
exports.default = {
|
|
setParams: setParams,
|
|
replaceDomain: replaceDomain,
|
|
isInBackupDomainList: isInBackupDomainList
|
|
};
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQW9DO0FBRXBDLFNBQVMsU0FBUyxDQUFDLEdBQWdCLEVBQUUsTUFBYztJQUFoQyxvQkFBQSxFQUFBLFFBQWdCO0lBQy9CLElBQU0sZ0JBQWdCLEdBQVcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxJQUFJLEdBQUcsR0FBUSxFQUFFLENBQUM7SUFDbEIsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7UUFDdkIsSUFBTSxnQkFBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRW5FLGdCQUFjLENBQUMsT0FBTyxDQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBTSxFQUFFLEdBQWEsZ0JBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztLQUNOO0lBRUQsR0FBRyx5QkFBTyxHQUFHLEdBQUssTUFBTSxDQUFDLENBQUM7SUFFMUIsSUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDL0IsR0FBRyxDQUFDLFVBQUEsR0FBRztRQUNKLE9BQU8sVUFBRyxHQUFHLGNBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFFLENBQUM7SUFDM0MsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWYsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7UUFDdkIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7S0FDL0Q7U0FBTTtRQUNILE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUM7S0FDbEM7QUFDTCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsR0FBZ0I7SUFBaEIsb0JBQUEsRUFBQSxRQUFnQjtJQUNuQyxJQUFJLGdCQUFNLENBQUMsb0JBQW9CLElBQUksZ0JBQU0sQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLGdCQUFNLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxFQUFFO1FBQ3ZHLEtBQUksSUFBTSxNQUFNLElBQUksZ0JBQU0sQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMxQixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxNQUFNO2FBQ1Q7U0FDSjtLQUNKO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxHQUFnQjtJQUFoQixvQkFBQSxFQUFBLFFBQWdCO0lBQzFDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztJQUNoQixJQUFJLGdCQUFNLENBQUMsZ0JBQWdCLElBQUksT0FBTyxnQkFBTSxDQUFDLGdCQUFnQixLQUFLLFFBQVEsRUFBRTtRQUN4RSxLQUFJLElBQU0sTUFBTSxJQUFJLGdCQUFNLENBQUMsZ0JBQWdCLEVBQUU7WUFDekMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDMUIsR0FBRyxHQUFHLElBQUksQ0FBQztnQkFDWCxNQUFNO2FBQ1Q7U0FDSjtLQUNKO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBRUQsa0JBQWU7SUFDWCxTQUFTLFdBQUE7SUFDVCxhQUFhLGVBQUE7SUFDYixvQkFBb0Isc0JBQUE7Q0FDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuaW1wb3J0IHN0YXR1cyBmcm9tICcuLi9zdG9yZS9zdGF0dXMnXG5cbmZ1bmN0aW9uIHNldFBhcmFtcyh1cmw6IHN0cmluZyA9IFwiXCIsIHBhcmFtczogb2JqZWN0KSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmdJbmRleDogbnVtYmVyID0gdXJsLmluZGV4T2YoXCI/XCIpO1xuICAgIGxldCBrdnA6IGFueSA9IHt9O1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgY29uc3Qgb2xkUXVlcnlTdHJpbmcgPSB1cmwuc3Vic3RyKHF1ZXJ5U3RyaW5nSW5kZXggKyAxKS5zcGxpdChcIiZcIik7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb2xkUXVlcnlTdHJpbmcuZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga3Y6IHN0cmluZ1tdID0gb2xkUXVlcnlTdHJpbmdbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICAgICAga3ZwW2t2WzBdXSA9IGt2WzFdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBrdnAgPSB7Li4ua3ZwLCAuLi5wYXJhbXN9O1xuXG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3Qua2V5cyhrdnApXG4gICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PSR7ZW5jb2RlVVJJKGt2cFtrZXldKX1gO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIiZcIik7XG5cbiAgICBpZiAocXVlcnlTdHJpbmdJbmRleCA+PSAwKSB7XG4gICAgICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RyaW5nSW5kZXggKyAxKSArIHF1ZXJ5U3RyaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1cmwgKyBcIj9cIiArIHF1ZXJ5U3RyaW5nO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZURvbWFpbih1cmw6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBpZiAoc3RhdHVzLmlzRW5hYmxlQmFja3VwRG9tYWluICYmIGNvbmZpZy5iYWNrdXBEb21haW5MaXN0ICYmIHR5cGVvZiBjb25maWcuYmFja3VwRG9tYWluTGlzdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yKGNvbnN0IG9yaWdpbiBpbiBjb25maWcuYmFja3VwRG9tYWluTGlzdCkge1xuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKG9yaWdpbikgPj0gMCkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKG9yaWdpbiwgY29uZmlnLmJhY2t1cERvbWFpbkxpc3Rbb3JpZ2luXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn1cblxuZnVuY3Rpb24gaXNJbkJhY2t1cERvbWFpbkxpc3QodXJsOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgbGV0IHJlcyA9IGZhbHNlO1xuICAgIGlmIChjb25maWcuYmFja3VwRG9tYWluTGlzdCAmJiB0eXBlb2YgY29uZmlnLmJhY2t1cERvbWFpbkxpc3QgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvcihjb25zdCBvcmlnaW4gaW4gY29uZmlnLmJhY2t1cERvbWFpbkxpc3QpIHtcbiAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZihvcmlnaW4pID49IDApIHtcbiAgICAgICAgICAgICAgICByZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBzZXRQYXJhbXMsXG4gICAgcmVwbGFjZURvbWFpbixcbiAgICBpc0luQmFja3VwRG9tYWluTGlzdFxufTtcbiJdfQ==
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/version.ts":
|
|
/*!************************!*\
|
|
!*** ./src/version.ts ***!
|
|
\************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.version = void 0;
|
|
var version = "1.8.1";
|
|
exports.version = version;
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLElBQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQztBQUVuQiwwQkFBTyIsInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgY29uc3QgX19WRVJTSU9OX186IHN0cmluZztcblxuY29uc3QgdmVyc2lvbiA9IF9fVkVSU0lPTl9fO1xuXG5leHBvcnQgeyB2ZXJzaW9uIH07XG4iXX0=
|
|
|
|
/***/ })
|
|
|
|
/******/ })["default"];
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhdGNoSGFuZGxlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2pzb25TdXBlcnNldC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdXRpbC9sb2FkaW5nLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL3VybC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRmE7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLCszQjs7Ozs7Ozs7Ozs7O0FDWjlCO0FBQ2IsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxtQkFBTyxD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QTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLG1nQzs7Ozs7Ozs7Ozs7O0FDakI5QjtBQUNiO0FBQ0E7QUFDQSxnREFBZ0QsT0FBTztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4QyxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDO0FBQ0EseUJBQXlCLFVBQVU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixVQUFVO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsVUFBVTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQywydUo7Ozs7Ozs7Ozs7OztBQ3JFOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBLGNBQWMsT0FBVztBQUN6QjtBQUNBLDJDQUEyQyx1VyIsImZpbGUiOiJ3ZVJlcXVlc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pbmRleC50c1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHVybFBlcmZpeDogY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXgsXG4gICAgICAgIHNlc3Npb25FeHBpcmVUaW1lOiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lLFxuICAgICAgICBzZXNzaW9uRXhwaXJlS2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgIHNlc3Npb25FeHBpcmU6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVxuICAgIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBRMjl1Wm1sbkxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDJGd2FTOW5aWFJEYjI1bWFXY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFXOURPMEZCUlhCRExHMUNRVUZsTzBsQlExZ3NUMEZCVHp0UlFVTklMRk5CUVZNc1JVRkJSU3huUWtGQlRTeERRVUZETEZOQlFWTTdVVUZETTBJc2FVSkJRV2xDTEVWQlFVVXNaMEpCUVUwc1EwRkJReXhwUWtGQmFVSTdVVUZETTBNc1owSkJRV2RDTEVWQlFVVXNaMEpCUVUwc1EwRkJReXhuUWtGQlowSTdVVUZEZWtNc1lVRkJZU3hGUVVGRkxHZENRVUZOTEVOQlFVTXNZVUZCWVR0TFFVTjBReXhEUVVGQk8wRkJRMHdzUTBGQlF5eEZRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2MzUmhkSFZ6SUdaeWIyMGdKeTR1TDNOMGIzSmxMM04wWVhSMWN5ZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLQ2tnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUhWeWJGQmxjbVpwZURvZ1kyOXVabWxuTG5WeWJGQmxjbVpwZUN4Y2JpQWdJQ0FnSUNBZ2MyVnpjMmx2YmtWNGNHbHlaVlJwYldVNklHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlN4Y2JpQWdJQ0FnSUNBZ2MyVnpjMmx2YmtWNGNHbHlaVXRsZVRvZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVkxaWGtzWEc0Z0lDQWdJQ0FnSUhObGMzTnBiMjVGZUhCcGNtVTZJSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsWEc0Z0lDQWdmVnh1ZlR0Y2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laMlYwVTJWemMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2WjJWMFUyVnpjMmx2Ymk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVWd1F5eHRRa0ZCWlR0SlFVTllMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVRTdRVUZEZWtJc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElITjBZWFIxY3lCbWNtOXRJQ2N1TGk5emRHOXlaUzl6ZEdGMGRYTW5YRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJQ2dwSUQwK0lIdGNiaUFnSUNCeVpYUjFjbTRnYzNSaGRIVnpMbk5sYzNOcGIyNWNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICBPYmplY3QuYXNzaWduKGNvbmZpZ18xLmRlZmF1bHQsIHBhcmFtcyk7XG4gICAgdHJ5IHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gd3guZ2V0U3RvcmFnZVN5bmMoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZSkgfHwgJyc7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7IH1cbiAgICB0cnkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSB3eC5nZXRTdG9yYWdlU3luYyhjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkgfHwgXCJzZXNzaW9uRXhwaXJlS2V5XCIpIHx8IEluZmluaXR5O1xuICAgIH1cbiAgICBjYXRjaCAoZSkgeyB9XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNXBkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2YVc1cGRDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVTndReXd3UTBGQmIwTTdRVUZIY0VNc2JVSkJRV1VzVlVGQlF5eE5RVUZ0UWp0SlFVTXZRaXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRE9VSXNTVUZCU1R0UlFVTkJMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXl4alFVRmpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eFhRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1MwRkRha1U3U1VGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlN4SFFVRkZPMGxCUTJRc1NVRkJTVHRSUVVOQkxHZENRVUZOTEVOQlFVTXNZVUZCWVN4SFFVRkhMRVZCUVVVc1EwRkJReXhqUVVGakxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4blFrRkJaMElzU1VGQlNTeHJRa0ZCYTBJc1EwRkJReXhKUVVGSkxGRkJRVkVzUTBGQlF6dExRVU4yUnp0SlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFZEJRVVU3UVVGRGJFSXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnYzNSaGRIVnpJR1p5YjIwZ0p5NHVMM04wYjNKbEwzTjBZWFIxY3lkY2JtbHRjRzl5ZENCN0lFbEpibWwwVDNCMGFXOXVJSDBnWm5KdmJTQW5MaTR2YVc1MFpYSm1ZV05sSjF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENBb2NHRnlZVzF6T2lCSlNXNXBkRTl3ZEdsdmJpa2dQVDRnZTF4dUlDQWdJRTlpYW1WamRDNWhjM05wWjI0b1kyOXVabWxuTENCd1lYSmhiWE1wTzF4dUlDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ2QzZ3VaMlYwVTNSdmNtRm5aVk41Ym1Nb1kyOXVabWxuTG5ObGMzTnBiMjVPWVcxbElTa2dmSHdnSnljN1hHNGdJQ0FnZlNCallYUmphQ0FvWlNrZ2UzMWNiaUFnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0J6ZEdGMGRYTXVjMlZ6YzJsdmJrVjRjR2x5WlNBOUlIZDRMbWRsZEZOMGIzSmhaMlZUZVc1aktHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxTMlY1SUh4OElGd2ljMlZ6YzJsdmJrVjRjR2x5WlV0bGVWd2lLU0I4ZkNCSmJtWnBibWwwZVR0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN2ZWeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3Nlc3Npb25NYW5hZ2VyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4oKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYkc5bmFXNHVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdllYQnBMMnh2WjJsdUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01rUkJRWEZFTzBGQlJYSkVMRzFDUVVGbE8wbEJRMWdzVDBGQlR5eDNRa0ZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGQk8wRkJRMmhETEVOQlFVTXNSVUZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCelpYTnphVzl1VFdGdVlXZGxjaUJtY205dElDY3VMaTl0YjJSMWJHVXZjMlZ6YzJsdmJrMWhibUZuWlhJblhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElDZ3BJRDArSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjMlZ6YzJsdmJrMWhibUZuWlhJdWJXRnBiaWdwWEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvcmVxdWVzdEhhbmRsZXJcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQucmVxdWVzdChvYmopO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ4ZFdWemRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZjbVZ4ZFdWemRDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxESkVRVUZ4UkR0QlFVZHlSQ3h0UWtGQlpTeFZRVUZSTEVkQlFXMUNPMGxCUTNSRExFOUJRVThzZDBKQlFXTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVUU3UVVGRGRFTXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSEpsY1hWbGMzUklZVzVrYkdWeUlHWnliMjBnSnk0dUwyMXZaSFZzWlM5eVpYRjFaWE4wU0dGdVpHeGxjaWRjYm1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVJSDBnWm5KdmJTQW5MaTR2YVc1MFpYSm1ZV05sSjF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENBOFZGSmxjM0ErS0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0cE9pQlFjbTl0YVhObFBGUlNaWE53UGlBOVBpQjdYRzRnSUNBZ2NtVjBkWEp1SUhKbGNYVmxjM1JJWVc1a2JHVnlMbkpsY1hWbGMzUW9iMkpxS1Z4dWZWeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvc2Vzc2lvbk1hbmFnZXJcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuc2V0U2Vzc2lvbihzZXNzaW9uKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJWMFUyVnpjMmx2Ymk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmMyVjBVMlZ6YzJsdmJpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxESkVRVUZ4UkR0QlFVVnlSQ3h0UWtGQlpTeFZRVUZETEU5QlFXVTdTVUZETTBJc2QwSkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkRka01zUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhObGMzTnBiMjVOWVc1aFoyVnlJR1p5YjIwZ0p5NHVMMjF2WkhWc1pTOXpaWE56YVc5dVRXRnVZV2RsY2lkY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tITmxjM05wYjI0NklITjBjbWx1WnlrZ1BUNGdlMXh1SUNBZ0lITmxjM05wYjI1TllXNWhaMlZ5TG5ObGRGTmxjM05wYjI0b2MyVnpjMmx2YmlrN1hHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3JlcXVlc3RIYW5kbGVyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LnVwbG9hZEZpbGUob2JqKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhCc2IyRmtSbWxzWlM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmRYQnNiMkZrUm1sc1pTNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxESkVRVUZ4UkR0QlFVZHlSQ3h0UWtGQlpTeFZRVUZETEVkQlFYTkNPMGxCUTJ4RExFOUJRVThzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVUU3UVVGRGVrTXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSEpsY1hWbGMzUklZVzVrYkdWeUlHWnliMjBnSnk0dUwyMXZaSFZzWlM5eVpYRjFaWE4wU0dGdVpHeGxjaWRjYm1sdGNHOXlkQ0I3SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0FvYjJKcU9pQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpa2dQVDRnZTF4dUlDQWdJSEpsZEhWeWJpQnlaWEYxWlhOMFNHRnVaR3hsY2k1MWNHeHZZV1JHYVd4bEtHOWlhaWxjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgaW5pdF8xID0gcmVxdWlyZShcIi4vYXBpL2luaXRcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4vYXBpL3JlcXVlc3RcIik7XG52YXIgdXBsb2FkRmlsZV8xID0gcmVxdWlyZShcIi4vYXBpL3VwbG9hZEZpbGVcIik7XG52YXIgc2V0U2Vzc2lvbl8xID0gcmVxdWlyZShcIi4vYXBpL3NldFNlc3Npb25cIik7XG52YXIgbG9naW5fMSA9IHJlcXVpcmUoXCIuL2FwaS9sb2dpblwiKTtcbnZhciBnZXRTZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9hcGkvZ2V0U2Vzc2lvblwiKTtcbnZhciBnZXRDb25maWdfMSA9IHJlcXVpcmUoXCIuL2FwaS9nZXRDb25maWdcIik7XG52YXIgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbnZhciB3ZVJlcXVlc3RPYmplY3QgPSB7XG4gICAgaW5pdDogaW5pdF8xLmRlZmF1bHQsXG4gICAgcmVxdWVzdDogcmVxdWVzdF8xLmRlZmF1bHQsXG4gICAgdXBsb2FkRmlsZTogdXBsb2FkRmlsZV8xLmRlZmF1bHQsXG4gICAgc2V0U2Vzc2lvbjogc2V0U2Vzc2lvbl8xLmRlZmF1bHQsXG4gICAgbG9naW46IGxvZ2luXzEuZGVmYXVsdCxcbiAgICBnZXRTZXNzaW9uOiBnZXRTZXNzaW9uXzEuZGVmYXVsdCxcbiAgICBnZXRDb25maWc6IGdldENvbmZpZ18xLmRlZmF1bHQsXG4gICAgdmVyc2lvbjogdmVyc2lvbl8xLnZlcnNpb25cbn07XG5leHBvcnRzLmRlZmF1bHQgPSB3ZVJlcXVlc3RPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4dFEwRkJOa0k3UVVGRE4wSXNlVU5CUVcxRE8wRkJRMjVETEN0RFFVRjVRenRCUVVONlF5d3JRMEZCZVVNN1FVRkRla01zY1VOQlFTdENPMEZCUXk5Q0xDdERRVUY1UXp0QlFVTjZReXcyUTBGQmRVTTdRVUZGZGtNc2NVTkJRVzFETzBGQlJXNURMRWxCUVUwc1pVRkJaU3hIUVVGak8wbEJRMnBETEVsQlFVa3NaMEpCUVVFN1NVRkRTaXhQUVVGUExHMUNRVUZCTzBsQlExQXNWVUZCVlN4elFrRkJRVHRKUVVOV0xGVkJRVlVzYzBKQlFVRTdTVUZEVml4TFFVRkxMR2xDUVVGQk8wbEJRMHdzVlVGQlZTeHpRa0ZCUVR0SlFVTldMRk5CUVZNc2NVSkJRVUU3U1VGRFZDeFBRVUZQTEcxQ1FVRkJPME5CUTFJc1EwRkJRenRCUVVWR0xHdENRVUZsTEdWQlFXVXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCcGJtbDBJR1p5YjIwZ1hDSXVMMkZ3YVM5cGJtbDBYQ0pjYm1sdGNHOXlkQ0J5WlhGMVpYTjBJR1p5YjIwZ1hDSXVMMkZ3YVM5eVpYRjFaWE4wWENKY2JtbHRjRzl5ZENCMWNHeHZZV1JHYVd4bElHWnliMjBnWENJdUwyRndhUzkxY0d4dllXUkdhV3hsWENKY2JtbHRjRzl5ZENCelpYUlRaWE56YVc5dUlHWnliMjBnWENJdUwyRndhUzl6WlhSVFpYTnphVzl1WENKY2JtbHRjRzl5ZENCc2IyZHBiaUJtY205dElGd2lMaTloY0drdmJHOW5hVzVjSWx4dWFXMXdiM0owSUdkbGRGTmxjM05wYjI0Z1puSnZiU0JjSWk0dllYQnBMMmRsZEZObGMzTnBiMjVjSWx4dWFXMXdiM0owSUdkbGRFTnZibVpwWnlCbWNtOXRJRndpTGk5aGNHa3ZaMlYwUTI5dVptbG5YQ0pjYm1sdGNHOXlkQ0I3SUhkbFVtVnhkV1Z6ZENCOUlHWnliMjBnWENJdUwybHVkR1Z5Wm1GalpWd2lYRzVwYlhCdmNuUWdleUIyWlhKemFXOXVJSDBnWm5KdmJTQW5MaTkyWlhKemFXOXVKMXh1WEc1amIyNXpkQ0IzWlZKbGNYVmxjM1JQWW1wbFkzUTZJSGRsVW1WeGRXVnpkQ0E5SUh0Y2JpQWdhVzVwZEN4Y2JpQWdjbVZ4ZFdWemRDeGNiaUFnZFhCc2IyRmtSbWxzWlN4Y2JpQWdjMlYwVTJWemMybHZiaXhjYmlBZ2JHOW5hVzRzWEc0Z0lHZGxkRk5sYzNOcGIyNHNYRzRnSUdkbGRFTnZibVpwWnl4Y2JpQWdkbVZ5YzJsdmJseHVmVHRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZDJWU1pYRjFaWE4wVDJKcVpXTjBPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gZ2V0KG9iaikge1xuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHd4LmdldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IG9iai5vcmlnaW5VcmwsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGlmIChvYmouY2FjaGUgPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIG9iai5jYWNoZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jYWNoZShyZXMuZGF0YSkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5zdWNjZXNzKHJlcy5kYXRhLCB7IGlzQ2FjaGU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXQob2JqLCByZWFsRGF0YSkge1xuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvYmouY2FjaGUgPT09IHRydWUgfHxcbiAgICAgICAgKHR5cGVvZiBvYmouY2FjaGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY2FjaGUocmVhbERhdGEpKSkge1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogb2JqLm9yaWdpblVybCxcbiAgICAgICAgICAgIGRhdGE6IHJlYWxEYXRhXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBnZXQ6IGdldCxcbiAgICBzZXQ6IHNldFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyRmphR1ZOWVc1aFoyVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5allXTm9aVTFoYm1GblpYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGRlFTeFRRVUZUTEVkQlFVY3NRMEZCUXl4SFFVRnRRanRKUVVNMVFpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1JVRkJSVHRSUVVOb1FpeFBRVUZQTzB0QlExWTdTVUZEUkN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xRkJRMVlzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4VFFVRlRPMUZCUTJ4Q0xFOUJRVThzV1VGQlJTeEhRVUZITzFsQlExSXNTVUZEU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExFbEJRVWs3WjBKQlEyeENMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEZWQlFWVXNTVUZCU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVTXhSRHRuUWtGRFJTeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRTlCUVU4c1MwRkJTeXhWUVVGVkxFVkJRVVU3YjBKQlEyNURMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkRMRTlCUVU4c1JVRkJSU3hKUVVGSkxFVkJRVU1zUTBGQlF5eERRVUZCTzJsQ1FVTjZRenRoUVVOS08xbEJRMFFzU1VGQlJ5eFBRVUZQTEVkQlFVY3NRMEZCUXl4UlFVRlJMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yZENRVU51UXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03WVVGRGJFSTdVVUZEVEN4RFFVRkRPMHRCUTBvc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNSMEZCUnl4RFFVRkRMRWRCUVcxQ0xFVkJRVWNzVVVGQmVVSTdTVUZEZUVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVWQlFVVTdVVUZEYUVJc1QwRkJUenRMUVVOV08wbEJRMFFzU1VGRFNTeEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRWxCUVVrN1VVRkRiRUlzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4TFFVRkxMRXRCUVVzc1ZVRkJWU3hKUVVGSkxFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1JVRkRNVVE3VVVGRFJTeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMWxCUTFZc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eFRRVUZUTzFsQlEyeENMRWxCUVVrc1JVRkJSU3hSUVVGUk8xTkJRMnBDTEVOQlFVTXNRMEZCUVR0TFFVTk1PMEZCUTB3c1EwRkJRenRCUVVWRUxHdENRVUZsTzBsQlExZ3NSMEZCUnl4TFFVRkJPMGxCUTBnc1IwRkJSeXhMUVVGQk8wTkJRMDRzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpWEc1Y2JtWjFibU4wYVc5dUlHZGxkQ2h2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1S1NCN1hHNGdJQ0FnYVdZZ0tDRnZZbW91YjNKcFoybHVWWEpzS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0I5WEc0Z0lDQWdkM2d1WjJWMFUzUnZjbUZuWlNoN1hHNGdJQ0FnSUNBZ0lHdGxlVG9nYjJKcUxtOXlhV2RwYmxWeWJDeGNiaUFnSUNBZ0lDQWdjM1ZqWTJWemN5QW9jbVZ6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbU5oWTJobElEMDlQU0IwY25WbElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdLSFI1Y0dWdlppQnZZbW91WTJGamFHVWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpQW1KaUJ2WW1vdVkyRmphR1VvY21WekxtUmhkR0VwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VjM1ZqWTJWemN5QTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5aWFpNXpkV05qWlhOektISmxjeTVrWVhSaExDQjdhWE5EWVdOb1pUb2dkSEoxWlgwcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lvZEhsd1pXOW1JRzlpYWk1amIyMXdiR1YwWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbU52YlhCc1pYUmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlLVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnpaWFFvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlBc0lISmxZV3hFWVhSaE9pQnpkSEpwYm1jZ2ZDQnZZbXBsWTNRcElIdGNiaUFnSUNCcFppQW9JVzlpYWk1dmNtbG5hVzVWY213cElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb1hHNGdJQ0FnSUNBZ0lHOWlhaTVqWVdOb1pTQTlQVDBnZEhKMVpTQjhmRnh1SUNBZ0lDQWdJQ0FvZEhsd1pXOW1JRzlpYWk1allXTm9aU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lJQ1ltSUc5aWFpNWpZV05vWlNoeVpXRnNSR0YwWVNrcFhHNGdJQ0FnS1NCN1hHNGdJQ0FnSUNBZ0lIZDRMbk5sZEZOMGIzSmhaMlVvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhMlY1T2lCdlltb3ViM0pwWjJsdVZYSnNMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZVG9nY21WaGJFUmhkR0ZjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCblpYUXNYRzRnSUNBZ2MyVjBYRzU5TzF4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhdGNoSGFuZGxlciA9IHZvaWQgMDtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgRXJyb3JXaXRoRGF0YSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEVycm9yV2l0aERhdGEsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRXJyb3JXaXRoRGF0YShtc2csIGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEgPT09IHZvaWQgMCkgeyBkYXRhID0ge307IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbXNnKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gRXJyb3JXaXRoRGF0YTtcbn0oRXJyb3IpKTtcbmZ1bmN0aW9uIGNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdCkge1xuICAgIHZhciB0eXBlID0gZS50eXBlLCByZXMgPSBlLnJlcztcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayhvYmosIHJlcyk7XG4gICAgfVxuICAgIGlmIChvYmouY2F0Y2hFcnJvcikge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2h0dHAtZXJyb3InKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihyZXMuc3RhdHVzQ29kZS50b1N0cmluZygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2xvZ2ljLWVycm9yJykge1xuICAgICAgICAgICAgdmFyIG1zZyA9IGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZ2V0RXJyb3JNc2cocmVzKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yV2l0aERhdGEobXNnLmNvbnRlbnQsIHJlcy5kYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3N5c3RlbS1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKHJlcy5lcnJNc2cpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnaHR0cC1lcnJvcicgfHwgdHlwZSA9PT0gJ2xvZ2ljLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3N5c3RlbS1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmNhdGNoSGFuZGxlciA9IGNhdGNoSGFuZGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyRjBZMmhJWVc1a2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5allYUmphRWhoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdPenM3T3pzN096czdPMEZCUTBFc0swTkJRVEJETzBGQlF6RkRMREJEUVVGdlF6dEJRVVZ3UXp0SlFVRTBRaXhwUTBGQlN6dEpRVWMzUWl4MVFrRkJXU3hIUVVGWExFVkJRVVVzU1VGQll6dFJRVUZrTEhGQ1FVRkJMRVZCUVVFc1UwRkJZenRSUVVGMlF5eFpRVU5KTEd0Q1FVRk5MRWRCUVVjc1EwRkJReXhUUVVWaU8xRkJSRWNzUzBGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNN08wbEJRM0pDTEVOQlFVTTdTVUZEVEN4dlFrRkJRenRCUVVGRUxFTkJRVU1zUVVGUVJDeERRVUUwUWl4TFFVRkxMRWRCVDJoRE8wRkJSVVFzVTBGQlV5eFpRVUZaTEVOQlFVTXNRMEZCWlN4RlFVRkZMRWRCUVhWRExFVkJRVVVzVFVGQk9FSTdTVUZEYkVjc1NVRkJRU3hKUVVGSkxFZEJRVlVzUTBGQlF5eExRVUZZTEVWQlFVVXNSMEZCUnl4SFFVRkxMRU5CUVVNc1NVRkJUaXhEUVVGUE8wbEJSM2hDTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExHRkJRV0VzUzBGQlN5eFZRVUZWTEVWQlFVVTdVVUZETlVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wdEJRMnhETzBsQlJVUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1ZVRkJWU3hGUVVGRk8xRkJRMmhDTEVsQlFVa3NTVUZCU1N4TFFVRkxMRmxCUVZrc1JVRkJSVHRaUVVOMlFpeFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMRXRCUVVzc1EwRkJSU3hIUVVGelJDeERRVUZETEZWQlFWVXNRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRE0wYzdZVUZCVFN4SlFVRkpMRWxCUVVrc1MwRkJTeXhoUVVGaExFVkJRVVU3V1VGREwwSXNTVUZCU1N4SFFVRkhMRWRCUVVjc2MwSkJRVmtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCY1VRc1EwRkJReXhEUVVGRE8xbEJRekZHTEU5QlFVOHNUVUZCVFN4RFFVRkRMRWxCUVVrc1lVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVWQlFVY3NSMEZCYzBRc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFOQlF5OUhPMkZCUVUwc1NVRkJTU3hKUVVGSkxFdEJRVXNzWTBGQll5eEZRVUZGTzFsQlEyaERMRTlCUVU4c1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM2hETzJGQlFVMDdXVUZGU0N4UFFVRlBMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU53UWp0TFFVTktPMU5CUVUwN1VVRkRTQ3hKUVVGSkxFbEJRVWtzUzBGQlN5eFpRVUZaTEVsQlFVa3NTVUZCU1N4TFFVRkxMR0ZCUVdFc1JVRkJSVHRaUVVOcVJDeFBRVUZQTEhOQ1FVRlpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZ4UkN4RFFVRkRMRU5CUVVNN1UwRkRPVVk3WVVGQlRTeEpRVUZITEVsQlFVa3NTMEZCU3l4alFVRmpMRVZCUVVVN1dVRkRMMElzVDBGQlR5eHpRa0ZCV1N4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQk9FTXNRMEZCUXl4RFFVRkRPMU5CUTNoR08yRkJRVTA3V1VGRlNDeFBRVUZQTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOd1FqdExRVU5LTzBGQlEwd3NRMEZCUXp0QlFVVlJMRzlEUVVGWklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dTVkpsY1hWbGMzUlBjSFJwYjI0c0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUxDQkpSWEp5YjNKUFltcGxZM1FnZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSTdYRzVwYlhCdmNuUWdaWEp5YjNKSVlXNWtiR1Z5SUdaeWIyMGdYQ0l1TDJWeWNtOXlTR0Z1Wkd4bGNsd2lPMXh1YVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1Y2JtTnNZWE56SUVWeWNtOXlWMmwwYUVSaGRHRWdaWGgwWlc1a2N5QkZjbkp2Y2lCN1hHNGdJQ0FnWkdGMFlUb2dZVzU1TzF4dVhHNGdJQ0FnWTI5dWMzUnlkV04wYjNJb2JYTm5PaUJ6ZEhKcGJtY3NJR1JoZEdFNklHRnVlU0E5SUh0OUtTQjdYRzRnSUNBZ0lDQWdJSE4xY0dWeUtHMXpaeWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaR0YwWVNBOUlHUmhkR0U3WEc0Z0lDQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmpZWFJqYUVoaGJtUnNaWElvWlRvZ1NVVnljbTl5VDJKcVpXTjBMQ0J2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1SUh3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0c0lISmxhbVZqZERvZ0tISmxZWE52Ymo4NklHRnVlU2tnUFQ0Z2RtOXBaQ2tnZTF4dUlDQWdJR052Ym5OMElIc2dkSGx3WlN3Z2NtVnpJSDBnUFNCbE8xeHVYRzRnSUNBZ0x5OGc1YWFDNXA2YzVweUo2WVdONTcydTU3dWY1TGlBNlpTWjZLK3Y1WnVlNkxDRDVZZTk1cFd3Nzd5TTVZaVo1b21uNktHTTVhNkRYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdVpYSnliM0pEWVd4c1ltRmpheUE5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJtWnBaeTVsY25KdmNrTmhiR3hpWVdOcktHOWlhaXdnY21WektUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9iMkpxTG1OaGRHTm9SWEp5YjNJcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVWdQVDA5SUNkb2RIUndMV1Z5Y205eUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2h1WlhjZ1JYSnliM0lvS0hKbGN5QmhjeUJYWldOb1lYUk5hVzVwY0hKdlozSmhiUzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1M1emRHRjBkWE5EYjJSbExuUnZVM1J5YVc1bktDa3BLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxJRDA5UFNBbmJHOW5hV010WlhKeWIzSW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYlhObklEMGdaWEp5YjNKSVlXNWtiR1Z5TG1kbGRFVnljbTl5VFhObktISmxjeUJoY3lCWFpXTm9ZWFJOYVc1cGNISnZaM0poYlM1U1pYRjFaWE4wVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9ibVYzSUVWeWNtOXlWMmwwYUVSaGRHRW9iWE5uTG1OdmJuUmxiblFzSUNoeVpYTWdZWE1nVjJWamFHRjBUV2x1YVhCeWIyZHlZVzB1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENrdVpHRjBZU2twTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1VnUFQwOUlDZHplWE4wWlcwdFpYSnliM0luS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtHNWxkeUJGY25KdmNpaHlaWE11WlhKeVRYTm5LU2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeURsaGJia3U1WnFjK21VbWVpdnIxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaGxLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxJRDA5UFNBbmFIUjBjQzFsY25KdmNpY2dmSHdnZEhsd1pTQTlQVDBnSjJ4dloybGpMV1Z5Y205eUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdWeWNtOXlTR0Z1Wkd4bGNpNXNiMmRwWTBWeWNtOXlLRzlpYWl3Z2NtVnpJR0Z6SUZkbFkyaGhkRTFwYm1sd2NtOW5jbUZ0TGxKbGNYVmxjM1JUZFdOalpYTnpRMkZzYkdKaFkydFNaWE4xYkhRcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWW9kSGx3WlNBOVBUMGdKM041YzNSbGJTMWxjbkp2Y2ljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJsY25KdmNraGhibVJzWlhJdWMzbHpkR1Z0UlhKeWIzSW9iMkpxTENCeVpYTWdZWE1nVjJWamFHRjBUV2x1YVhCeWIyZHlZVzB1UjJWdVpYSmhiRU5oYkd4aVlXTnJVbVZ6ZFd4MEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPV0Z0dVM3bG1wejZaU1o2Syt2WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0dVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnZXlCallYUmphRWhoYm1Sc1pYSWdmU0pkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi4vYXBpL3JlcXVlc3RcIik7XG5mdW5jdGlvbiBzdGFydChvYmopIHtcbiAgICBvYmouX3JlcG9ydFN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xufVxuZnVuY3Rpb24gZW5kKG9iaikge1xuICAgIG9iai5fcmVwb3J0RW5kVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGlmIChvYmoucmVwb3J0ICYmIG9iai5fcmVwb3J0U3RhcnRUaW1lKSB7XG4gICAgICAgIHJlcG9ydChvYmoucmVwb3J0LCBvYmouX3JlcG9ydFN0YXJ0VGltZSwgb2JqLl9yZXBvcnRFbmRUaW1lKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXBvcnQobmFtZSwgc3RhcnRUaW1lLCBlbmRUaW1lKSB7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnJlcG9ydENHSSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbmZpZ18xLmRlZmF1bHQucmVwb3J0Q0dJKG5hbWUsIHN0YXJ0VGltZSwgZW5kVGltZSwgcmVxdWVzdF8xLmRlZmF1bHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBlbmQsXG4gICAgcmVwb3J0OiByZXBvcnRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5dGIyUjFiR1V2WkhWeVlYUnBiMjVTWlhCdmNuUmxjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVU53UXl3d1EwRkJiME03UVVGSGNFTXNVMEZCVXl4TFFVRkxMRU5CUVVNc1IwRkJkVU03U1VGRGJFUXNSMEZCUnl4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03UVVGRGFFUXNRMEZCUXp0QlFVVkVMRk5CUVZNc1IwRkJSeXhEUVVGRExFZEJRWFZETzBsQlEyaEVMRWRCUVVjc1EwRkJReXhqUVVGakxFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRKUVVNeFF5eEpRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhEUVVGRExHZENRVUZuUWl4RlFVRkZPMUZCUTI1RExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCWjBJc1JVRkJSU3hIUVVGSExFTkJRVU1zWjBKQlFXZENMRVZCUVVVc1IwRkJSeXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETzB0QlF6RkZPMEZCUTB3c1EwRkJRenRCUVVWRUxGTkJRVk1zVFVGQlRTeERRVUZETEVsQlFWa3NSVUZCUlN4VFFVRnBRaXhGUVVGRkxFOUJRV1U3U1VGRE5VUXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTjRReXhuUWtGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1UwRkJVeXhGUVVGRkxFOUJRVThzUlVGQlJTeHBRa0ZCVHl4RFFVRkRMRU5CUVVNN1MwRkRka1E3UVVGRFRDeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hMUVVGTExFOUJRVUU3U1VGRFRDeEhRVUZITEV0QlFVRTdTVUZEU0N4TlFVRk5MRkZCUVVFN1EwRkRWQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdjbVZ4ZFdWemRDQm1jbTl0SUNjdUxpOWhjR2t2Y21WeGRXVnpkQ2RjYm1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVMQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaUI5SUdaeWIyMGdYQ0l1TGk5cGJuUmxjbVpoWTJWY0lqdGNibHh1Wm5WdVkzUnBiMjRnYzNSaGNuUW9iMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaUI4SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1S1NCN1hHNGdJQ0FnYjJKcUxsOXlaWEJ2Y25SVGRHRnlkRlJwYldVZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYm4xY2JseHVablZ1WTNScGIyNGdaVzVrS0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0Z2ZDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpa2dlMXh1SUNBZ0lHOWlhaTVmY21Wd2IzSjBSVzVrVkdsdFpTQTlJRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwTzF4dUlDQWdJR2xtS0c5aWFpNXlaWEJ2Y25RZ0ppWWdiMkpxTGw5eVpYQnZjblJUZEdGeWRGUnBiV1VwSUh0Y2JpQWdJQ0FnSUNBZ2NtVndiM0owS0c5aWFpNXlaWEJ2Y25RZ1lYTWdjM1J5YVc1bkxDQnZZbW91WDNKbGNHOXlkRk4wWVhKMFZHbHRaU3dnYjJKcUxsOXlaWEJ2Y25SRmJtUlVhVzFsS1R0Y2JpQWdJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJSEpsY0c5eWRDaHVZVzFsT2lCemRISnBibWNzSUhOMFlYSjBWR2x0WlRvZ2JuVnRZbVZ5TENCbGJtUlVhVzFsT2lCdWRXMWlaWElwSUh0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTV5WlhCdmNuUkRSMGtnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCamIyNW1hV2N1Y21Wd2IzSjBRMGRKS0c1aGJXVXNJSE4wWVhKMFZHbHRaU3dnWlc1a1ZHbHRaU3dnY21WeGRXVnpkQ2s3WEc0Z0lDQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCN1hHNGdJQ0FnYzNSaGNuUXNYRzRnSUNBZ1pXNWtMRnh1SUNBZ0lISmxjRzl5ZEZ4dWZWeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuLi9hcGkvcmVxdWVzdFwiKTtcbmZ1bmN0aW9uIHN5c3RlbUVycm9yKG9iaiwgcmVzKSB7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKHJlcyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnN5c3RlbUVycm9ySGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25maWdfMS5kZWZhdWx0LnN5c3RlbUVycm9ySGFuZGxlcihyZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHJldHJ5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKDAsIHJlcXVlc3RfMS5kZWZhdWx0KShvYmopLnRoZW4ob2JqLl9yZXNvbHZlKS5jYXRjaChvYmouX3JlamVjdCk7IH07XG4gICAgICAgIGRvRXJyb3IoXCJcIiwgXCJcIiwgcmV0cnkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGxvZ2ljRXJyb3Iob2JqLCByZXMpIHtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwocmVzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JIYW5kbGVyKHJlcy5kYXRhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBfYSA9IGdldEVycm9yTXNnKHJlcyksIHRpdGxlID0gX2EudGl0bGUsIGNvbnRlbnQgPSBfYS5jb250ZW50O1xuICAgICAgICB2YXIgcmV0cnkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoMCwgcmVxdWVzdF8xLmRlZmF1bHQpKG9iaikudGhlbihvYmouX3Jlc29sdmUpLmNhdGNoKG9iai5fcmVqZWN0KTsgfTtcbiAgICAgICAgZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEVycm9yTXNnKHJlcykge1xuICAgIHZhciB0aXRsZSA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGl0bGUgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUocmVzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aXRsZSA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZTtcbiAgICB9XG4gICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50KHJlcy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb250ZW50ID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQ7XG4gICAgfVxuICAgIHJldHVybiB7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9O1xufVxuZnVuY3Rpb24gZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpIHtcbiAgICB2YXIgc2hvd0Vycm9yUmV0cnlCdG4gPSBjb25maWdfMS5kZWZhdWx0LmVycm9yUmV0cnlCdG4gJiYgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgd3guc2hvd01vZGFsKE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB0aXRsZTogdGl0bGUgfHwgXCJcIixcbiAgICAgICAgY29udGVudDogY29udGVudCB8fCBcIue9kee7nOaIluacjeWKoeW8guW4uO+8jOivt+eojeWQjumHjeivlVwiLFxuICAgIH0sICFzaG93RXJyb3JSZXRyeUJ0biA/IHtcbiAgICAgICAgc2hvd0NhbmNlbDogZmFsc2VcbiAgICB9IDoge1xuICAgICAgICBzaG93Q2FuY2VsOiB0cnVlLFxuICAgICAgICBjb25maXJtVGV4dDogJ+mHjeivlScsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGlmIChyZXMuY29uZmlybSAmJiB0eXBlb2YgcmV0cnkgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICByZXRyeSgpO1xuICAgICAgICB9XG4gICAgfSkpO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHN5c3RlbUVycm9yOiBzeXN0ZW1FcnJvcixcbiAgICBsb2dpY0Vycm9yOiBsb2dpY0Vycm9yLFxuICAgIGRvRXJyb3I6IGRvRXJyb3IsXG4gICAgZ2V0RXJyb3JNc2c6IGdldEVycm9yTXNnXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWlhKeWIzSklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlsY25KdmNraGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNNRU5CUVhGRE8wRkJSM0pETEZOQlFWTXNWMEZCVnl4RFFVRkRMRWRCUVhWRExFVkJRVVVzUjBGQk5FTTdTVUZEZEVjc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eEpRVUZKTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTJoRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRha0k3VTBGQlRTeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhyUWtGQmEwSXNTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRlRVFzWjBKQlFVMHNRMEZCUXl4clFrRkJhMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTnNRenRUUVVGTk8xRkJRMGdzU1VGQlRTeExRVUZMTEVkQlFVY3NZMEZCVFN4UFFVRkJMRWxCUVVFc2FVSkJRVThzUlVGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRV3hFTEVOQlFXdEVMRU5CUVVNN1VVRkRka1VzVDBGQlR5eERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03UzBGRE1VSTdRVUZEVEN4RFFVRkRPMEZCUlVRc1UwRkJVeXhWUVVGVkxFTkJRVU1zUjBGQmRVTXNSVUZCUlN4SFFVRjFSenRKUVVOb1N5eEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRWxCUVVrc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGFFTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU5xUWp0VFFVRk5MRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZsQlFWa3NTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRiRVFzWjBKQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzB0QlEycERPMU5CUVUwN1VVRkRSeXhKUVVGQkxFdEJRVzFDTEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJiRU1zUzBGQlN5eFhRVUZCTEVWQlFVVXNUMEZCVHl4aFFVRnZRaXhEUVVGRE8xRkJRekZETEVsQlFVMHNTMEZCU3l4SFFVRkhMR05CUVUwc1QwRkJRU3hKUVVGQkxHbENRVUZQTEVWQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eEZRVUZzUkN4RFFVRnJSQ3hEUVVGRE8xRkJRM1pGTEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzB0QlEyeERPMEZCUTB3c1EwRkJRenRCUVVWRUxGTkJRVk1zVjBGQlZ5eERRVUZETEVkQlFYVkhPMGxCUTNoSUxFbEJRVWtzUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTm1MRWxCUVVrc1QwRkJUeXhuUWtGQlRTeERRVUZETEZWQlFWVXNTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRla01zU1VGQlNUdFpRVU5CTEV0QlFVc3NSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVFN1UwRkRkRU03VVVGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0VFFVTllPMHRCUTBvN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRXRCUVVzc1VVRkJVU3hGUVVGRk8xRkJRemxETEV0QlFVc3NSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dExRVU0zUWp0SlFVVkVMRWxCUVVrc1QwRkJUeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5xUWl4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFpRVUZaTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUXpORExFbEJRVWs3V1VGRFFTeFBRVUZQTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkJPMU5CUXpGRE8xRkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdVMEZEV0R0TFFVTktPMU5CUVUwc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNXVUZCV1N4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVOb1JDeFBRVUZQTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU03UzBGRGFrTTdTVUZGUkN4UFFVRlBMRVZCUVVNc1MwRkJTeXhQUVVGQkxFVkJRVVVzVDBGQlR5eFRRVUZCTEVWQlFVTXNRMEZCUVR0QlFVTXpRaXhEUVVGRE8wRkJSMFFzVTBGQlV5eFBRVUZQTEVOQlFVTXNTMEZCWVN4RlFVRkZMRTlCUVdVc1JVRkJSU3hMUVVGcFFqdEpRVVU1UkN4SlFVRk5MR2xDUVVGcFFpeEhRVUZITEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hKUVVGSkxFOUJRVThzUzBGQlN5eExRVUZMTEZWQlFWVXNRMEZCUXp0SlFVTTVSU3hGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRka0lzUzBGQlN5eEZRVUZGTEV0QlFVc3NTVUZCU1N4RlFVRkZPMUZCUTJ4Q0xFOUJRVThzUlVGQlJTeFBRVUZQTEVsQlFVa3NaVUZCWlR0TFFVTjBReXhGUVVGRkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0JDTEZWQlFWVXNSVUZCUlN4TFFVRkxPMHRCUTNCQ0xFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwRXNWVUZCVlN4RlFVRkZMRWxCUVVrN1VVRkRhRUlzVjBGQlZ5eEZRVUZGTEVsQlFVazdVVUZEYWtJc1QwRkJUeXhaUVVGRExFZEJRWEZFTzFsQlEzcEVMRWxCUVVrc1IwRkJSeXhEUVVGRExFOUJRVThzU1VGQlNTeFBRVUZQTEV0QlFVc3NTMEZCU3l4VlFVRlZPMmRDUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETzFGQlF6VkVMRU5CUVVNN1MwRkRTaXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5TTEVOQlFVTTdRVUZGUkN4clFrRkJaVHRKUVVOWUxGZEJRVmNzWVVGQlFUdEpRVU5ZTEZWQlFWVXNXVUZCUVR0SlFVTldMRTlCUVU4c1UwRkJRVHRKUVVOUUxGZEJRVmNzWVVGQlFUdERRVU5rTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdZMjl1Wm1sbklHWnliMjBnSnk0dUwzTjBiM0psTDJOdmJtWnBaeWRjYm1sdGNHOXlkQ0J5WlhGMVpYTjBJR1p5YjIwZ0p5NHVMMkZ3YVM5eVpYRjFaWE4wSnp0Y2JtbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1TENCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlCOUlHWnliMjBnWENJdUxpOXBiblJsY21aaFkyVmNJanRjYmx4dVpuVnVZM1JwYjI0Z2MzbHpkR1Z0UlhKeWIzSW9iMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaUI4SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1TENCeVpYTTZJRmRsWTJoaGRFMXBibWx3Y205bmNtRnRMa2RsYm1WeVlXeERZV3hzWW1GamExSmxjM1ZzZENrZ2UxeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2IySnFMbVpoYVd3Z1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91Wm1GcGJDaHlaWE1wTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NXplWE4wWlcxRmNuSnZja2hoYm1Sc1pYSWdQVDA5SUNkbWRXNWpkR2x2YmljcElIdGNiaUFnSUNBZ0lDQWdZMjl1Wm1sbkxuTjVjM1JsYlVWeWNtOXlTR0Z1Wkd4bGNpaHlaWE1wTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElISmxkSEo1SUQwZ0tDa2dQVDRnY21WeGRXVnpkQ2h2WW1vcExuUm9aVzRvYjJKcUxsOXlaWE52YkhabEtTNWpZWFJqYUNodlltb3VYM0psYW1WamRDazdYRzRnSUNBZ0lDQWdJR1J2UlhKeWIzSW9YQ0pjSWl3Z1hDSmNJaXdnY21WMGNua3BPMXh1SUNBZ0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z2JHOW5hV05GY25KdmNpaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRzSUhKbGN6b2dWMlZqYUdGMFRXbHVhWEJ5YjJkeVlXMHVVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ0I4SUZkbFkyaGhkRTFwYm1sd2NtOW5jbUZ0TGxWd2JHOWhaRVpwYkdWVGRXTmpaWE56UTJGc2JHSmhZMnRTWlhOMWJIUXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1bVlXbHNJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtWmhhV3dvY21WektUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1WlhKeWIzSklZVzVrYkdWeUlEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibVpwWnk1bGNuSnZja2hoYm1Sc1pYSW9jbVZ6TG1SaGRHRXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUh0MGFYUnNaU3dnWTI5dWRHVnVkSDBnUFNCblpYUkZjbkp2Y2sxelp5aHlaWE1wTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J5WlhSeWVTQTlJQ2dwSUQwK0lISmxjWFZsYzNRb2IySnFLUzUwYUdWdUtHOWlhaTVmY21WemIyeDJaU2t1WTJGMFkyZ29iMkpxTGw5eVpXcGxZM1FwTzF4dUlDQWdJQ0FnSUNCa2IwVnljbTl5S0hScGRHeGxMQ0JqYjI1MFpXNTBMQ0J5WlhSeWVTazdYRzRnSUNBZ2ZWeHVmVnh1WEc1bWRXNWpkR2x2YmlCblpYUkZjbkp2Y2sxelp5aHlaWE02SUZkbFkyaGhkRTFwYm1sd2NtOW5jbUZ0TGxKbGNYVmxjM1JUZFdOalpYTnpRMkZzYkdKaFkydFNaWE4xYkhRZ2ZDQlhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnYkdWMElIUnBkR3hsSUQwZ1hDSmNJanRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWxjbkp2Y2xScGRHeGxJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhScGRHeGxJRDBnWTI5dVptbG5MbVZ5Y205eVZHbDBiR1VvY21WekxtUmhkR0VwWEc0Z0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1bGNuSnZjbFJwZEd4bElEMDlQU0JjSW5OMGNtbHVaMXdpS1NCN1hHNGdJQ0FnSUNBZ0lIUnBkR3hsSUQwZ1kyOXVabWxuTG1WeWNtOXlWR2wwYkdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYkdWMElHTnZiblJsYm5RZ1BTQmNJbHdpTzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVEyOXVkR1Z1ZENBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjUwWlc1MElEMGdZMjl1Wm1sbkxtVnljbTl5UTI5dWRHVnVkQ2h5WlhNdVpHRjBZU2xjYmlBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1WeWNtOXlRMjl1ZEdWdWRDQTlQVDBnWENKemRISnBibWRjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjUwWlc1MElEMGdZMjl1Wm1sbkxtVnljbTl5UTI5dWRHVnVkRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2UzUnBkR3hsTENCamIyNTBaVzUwZlZ4dWZWeHVYRzR2THlEcHU1am9ycVRwbEpub3I2L2xwSVRua0libW1LL2x2TG5ucXBkY2JtWjFibU4wYVc5dUlHUnZSWEp5YjNJb2RHbDBiR1U2SUhOMGNtbHVaeXdnWTI5dWRHVnVkRG9nYzNSeWFXNW5MQ0J5WlhSeWVUODZJQ2dwSUQwK0lHRnVlU2tnZTF4dUlDQWdJQzh2SU9hWXIrV1FwdWFZdnVla3V1bUhqZWl2bGVhTWllbVNybHh1SUNBZ0lHTnZibk4wSUhOb2IzZEZjbkp2Y2xKbGRISjVRblJ1SUQwZ1kyOXVabWxuTG1WeWNtOXlVbVYwY25sQ2RHNGdKaVlnZEhsd1pXOW1JSEpsZEhKNUlEMDlQU0JjSW1aMWJtTjBhVzl1WENJN1hHNGdJQ0FnZDNndWMyaHZkMDF2WkdGc0tFOWlhbVZqZEM1aGMzTnBaMjRvZTF4dUlDQWdJQ0FnSUNCMGFYUnNaVG9nZEdsMGJHVWdmSHdnWENKY0lpeGNiaUFnSUNBZ0lDQWdZMjl1ZEdWdWREb2dZMjl1ZEdWdWRDQjhmQ0JjSXVlOWtlZTduT2FJbHVhY2plV0tvZVc4Z3VXNHVPKzhqT2l2dCtlb2plV1FqdW1IamVpdmxWd2lMRnh1SUNBZ0lIMHNJQ0Z6YUc5M1JYSnliM0pTWlhSeWVVSjBiaUEvSUh0Y2JpQWdJQ0FnSUNBZ2MyaHZkME5oYm1ObGJEb2dabUZzYzJWY2JpQWdJQ0I5SURvZ2UxeHVJQ0FnSUNBZ0lDQnphRzkzUTJGdVkyVnNPaUIwY25WbExGeHVJQ0FnSUNBZ0lDQmpiMjVtYVhKdFZHVjRkRG9nSittSGplaXZsU2NzWEc0Z0lDQWdJQ0FnSUhOMVkyTmxjM01vY21Wek9pQlhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNVRhRzkzVFc5a1lXeFRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoeVpYTXVZMjl1Wm1seWJTQW1KaUIwZVhCbGIyWWdjbVYwY25rZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2NtVjBjbmtvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwcEtUdGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4dUlDQWdJSE41YzNSbGJVVnljbTl5TEZ4dUlDQWdJR3h2WjJsalJYSnliM0lzWEc0Z0lDQWdaRzlGY25KdmNpeGNiaUFnSUNCblpYUkZjbkp2Y2sxeloxeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xuZnVuY3Rpb24gZ2V0KG9iaikge1xuICAgIGlmICghKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgJiYgY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai51cmxdIHx8IChvYmoub3JpZ2luVXJsID8gY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSA6ICcnKTtcbiAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwXG4gICAgfTtcbiAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBnZXQ6IGdldFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJXOWphMDFoYm1GblpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDIxdlkydE5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01FTkJRVzlETzBGQlEzQkRMREpEUVVGeFF6dEJRVWR5UXl4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGMVF6dEpRVVZvUkN4SlFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3VVVGRmFrWXNUMEZCVHl4TFFVRkxMRU5CUVVNN1MwRkRhRUk3U1VGRlJDeEpRVUZKTEVsQlFVa3NSMEZCUnl4blFrRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4blFrRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzBsQlJUZEdMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU40UXl4SlFVRk5MRWRCUVVjc1IwRkJSenRSUVVOU0xFbEJRVWtzVFVGQlFUdFJRVU5LTEZWQlFWVXNSVUZCUlN4SFFVRkhPMHRCUTJ4Q0xFTkJRVU03U1VGRlJpeHBRa0ZCVHl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wbEJRMllzVDBGQlR5eEhRVUZITEVOQlFVRTdRVUZEWkN4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeEhRVUZITEV0QlFVRTdRMEZEVGl4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnYkc5aFpHbHVaeUJtY205dElDY3VMaTkxZEdsc0wyeHZZV1JwYm1jblhHNXBiWEJ2Y25RZ2V5QkpVbVZ4ZFdWemRFOXdkR2x2Yml3Z1NWVndiRzloWkVacGJHVlBjSFJwYjI0Z2ZTQm1jbTl0SUZ3aUxpNHZhVzUwWlhKbVlXTmxYQ0pjYmx4dVpuVnVZM1JwYjI0Z1oyVjBLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrNklHRnVlU0I3WEc1Y2JpQWdJQ0JwWmlnaEtHTnZibVpwWnk1dGIyTnJTbk52Ymx0dlltb3VkWEpzWFNCOGZDQW9iMkpxTG05eWFXZHBibFZ5YkNBbUppQmpiMjVtYVdjdWJXOWphMHB6YjI1YmIySnFMbTl5YVdkcGJsVnliRjBwS1NrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJ0YjJOcklPYXlvZWFjaWVXdnVlVzZsT2FPcGVXUG8rZWFoT2FWc09hTnJseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUdSaGRHRWdQU0JqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG5WeWJGMGdmSHdnS0c5aWFpNXZjbWxuYVc1VmNtd2dQeUJqYjI1bWFXY3ViVzlqYTBwemIyNWJiMkpxTG05eWFXZHBibFZ5YkYwZ09pQW5KeWs3WEc0Z0lDQWdMeThnWkdWbGNDQmpiM0I1WEc0Z0lDQWdaR0YwWVNBOUlFcFRUMDR1Y0dGeWMyVW9TbE5QVGk1emRISnBibWRwWm5rb1pHRjBZU2twTzF4dUlDQWdJR052Ym5OMElISmxjeUE5SUh0Y2JpQWdJQ0FnSUNBZ1pHRjBZU3hjYmlBZ0lDQWdJQ0FnYzNSaGRIVnpRMjlrWlRvZ01qQXdYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lHeHZZV1JwYm1jdWFHbGtaU2dwTzF4dUlDQWdJSEpsZEhWeWJpQnlaWE5jYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2UxeHVJQ0FnSUdkbGRGeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG52YXIgbW9ja01hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL21vY2tNYW5hZ2VyXCIpO1xudmFyIGNhY2hlTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vY2FjaGVNYW5hZ2VyXCIpO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcbnZhciByZXNwb25zZUhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3Jlc3BvbnNlSGFuZGxlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHVybF8xID0gcmVxdWlyZShcIi4uL3V0aWwvdXJsXCIpO1xudmFyIGNhdGNoSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vY2F0Y2hIYW5kbGVyXCIpO1xuZnVuY3Rpb24gZm9ybWF0KG9yaWdpblVybCkge1xuICAgIGlmIChvcmlnaW5Vcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5Vcmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgdXJsUGVyZml4ID0gY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXg7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdXJsUGVyZml4ID0gY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsUGVyZml4ICsgb3JpZ2luVXJsO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByZURvKG9iaiwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkNvdW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cbiAgICBpZiAob2JqLnJlTG9naW5Db3VudCA9PT0gMCAmJiB0eXBlb2Ygb2JqLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouYmVmb3JlU2VuZCgpO1xuICAgIH1cbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LnNob3cob2JqLnNob3dMb2FkaW5nKTtcbiAgICB9XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cbiAgICBvYmouX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIG9iai5fcmVqZWN0ID0gcmVqZWN0O1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghb2JqLmRhdGEpIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcbiAgICB9XG4gICAgb2JqLmhlYWRlciA9IG9iai5oZWFkZXIgPyBvYmouaGVhZGVyIDoge307XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaGVhZGVyID0gY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvYmouaGVhZGVyID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5oZWFkZXIpLCBoZWFkZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLmhlYWRlciA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmouaGVhZGVyKSwgY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIpO1xuICAgIH1cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmRhdGEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmRhdGEpLCAoX2EgPSB7fSwgX2FbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9hKSk7XG4gICAgfVxuICAgIHZhciBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZCksIG9iai5kYXRhKTtcbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuICAgIGlmICghY29uZmlnXzEuZGVmYXVsdC5kb05vdFVzZVF1ZXJ5U3RyaW5nICYmIG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cbiAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5yZXBsYWNlRG9tYWluKG9iai51cmwpO1xuICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnN0YXJ0KG9iaik7XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iaikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCFvYmouZm9ybURhdGEpIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0ge307XG4gICAgfVxuICAgIG9iai5oZWFkZXIgPSBvYmouaGVhZGVyID8gb2JqLmhlYWRlciA6IHt9O1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGhlYWRlciA9IGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyKCk7XG4gICAgICAgIGlmICh0eXBlb2YgaGVhZGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb2JqLmhlYWRlciA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmouaGVhZGVyKSwgaGVhZGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5zZXRIZWFkZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9iai5oZWFkZXIgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmhlYWRlciksIGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyKTtcbiAgICB9XG4gICAgaWYgKG9iai5vcmlnaW5VcmwgIT09IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi51cmwgJiYgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBvYmouZm9ybURhdGEpLCAoX2EgPSB7fSwgX2FbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9hKSk7XG4gICAgfVxuICAgIHZhciBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZm9ybURhdGEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZ2QpLCBvYmouZm9ybURhdGEpO1xuICAgIGlmICghY29uZmlnXzEuZGVmYXVsdC5kb05vdFVzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIGlmIChzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCAoX2IgPSB7fSwgX2JbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9iKSk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcbiAgICB9XG4gICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQucmVwbGFjZURvbWFpbihvYmoudXJsKTtcbiAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5zdGFydChvYmopO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBnZXRHbG9iYWxEYXRhKCkge1xuICAgIHZhciBnZCA9IHt9O1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBnZCA9IGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIGdkO1xufVxuZnVuY3Rpb24gZG9SZXF1ZXN0KG9iaikge1xuICAgIGlmICghc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiByZXF1ZXN0KG9iaik7XG4gICAgfVxuICAgIG9iaiA9IGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iaik7XG4gICAgaWYgKG9iai5yZUxvZ2luQ291bnQgPT09IDAgJiYgdHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iaiA9IGNvbmZpZ18xLmRlZmF1bHQuYmVmb3JlU2VuZChvYmosIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHd4LnJlcXVlc3QoX19hc3NpZ24oX19hc3NpZ24oe30sIG9iaiksIHsgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICB9LCBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKChjb25maWdfMS5kZWZhdWx0LmRvbWFpbkNoYW5nZVRyaWdnZXIgJiYgY29uZmlnXzEuZGVmYXVsdC5kb21haW5DaGFuZ2VUcmlnZ2VyKHJlcykpICYmIHVybF8xLmRlZmF1bHQuaXNJbkJhY2t1cERvbWFpbkxpc3Qob2JqLnVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlQmFja3VwRG9tYWluKG9iai51cmwpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9SZXF1ZXN0KG9iaikudGhlbihmdW5jdGlvbiAocmVzKSB7IHJldHVybiByZXNvbHZlKHJlcyk7IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdHlwZTogJ3N5c3RlbS1lcnJvcicsIHJlczogcmVzIH0pO1xuICAgICAgICAgICAgfSwgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5pc0ZpeFN1Y2Nlc3NDb21wbGV0ZVRpbWluZykge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB9KSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBkb1VwbG9hZEZpbGUob2JqKSB7XG4gICAgaWYgKCFzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHVwbG9hZEZpbGUob2JqKTtcbiAgICB9XG4gICAgb2JqID0gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqKTtcbiAgICBpZiAob2JqLnJlTG9naW5Db3VudCA9PT0gMCAmJiB0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqID0gY29uZmlnXzEuZGVmYXVsdC5iZWZvcmVTZW5kKG9iaiwgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgd3gudXBsb2FkRmlsZShfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqKSwgeyBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoKGNvbmZpZ18xLmRlZmF1bHQuZG9tYWluQ2hhbmdlVHJpZ2dlciAmJiBjb25maWdfMS5kZWZhdWx0LmRvbWFpbkNoYW5nZVRyaWdnZXIocmVzKSkgJiYgdXJsXzEuZGVmYXVsdC5pc0luQmFja3VwRG9tYWluTGlzdChvYmoudXJsKSkge1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVCYWNrdXBEb21haW4ob2JqLnVybCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb1VwbG9hZEZpbGUob2JqKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsgcmV0dXJuIHJlc29sdmUocmVzKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiAnc3lzdGVtLWVycm9yJywgcmVzOiByZXMgfSk7XG4gICAgICAgICAgICB9LCBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LmlzRml4U3VjY2Vzc0NvbXBsZXRlVGltaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3Qob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbikge1xuICAgICAgICAgICAgdmFyIG1vY2tSZXNwb25zZSA9IG1vY2tNYW5hZ2VyXzEuZGVmYXVsdC5nZXQob2JqKTtcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0LnJlc3BvbnNlRm9yUmVxdWVzdChtb2NrUmVzcG9uc2UsIG9iaik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvYmouY2FjaGUpIHtcbiAgICAgICAgICAgIGNhY2hlTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBkb1JlcXVlc3Qob2JqKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0LnJlc3BvbnNlRm9yUmVxdWVzdChyZXMsIG9iaik7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgY2F0Y2hIYW5kbGVyXzEuY2F0Y2hIYW5kbGVyKShlLCBvYmosIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdXBsb2FkRmlsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBvYmogPSBwcmVEbyhvYmosIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uKSB7XG4gICAgICAgICAgICB2YXIgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQucmVzcG9uc2VGb3JVcGxvYWRGaWxlKG1vY2tSZXNwb25zZSwgb2JqKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBkb1VwbG9hZEZpbGUob2JqKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0LnJlc3BvbnNlRm9yVXBsb2FkRmlsZShyZXMsIG9iaik7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICgwLCBjYXRjaEhhbmRsZXJfMS5jYXRjaEhhbmRsZXIpKGUsIG9iaiwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBlbmFibGVCYWNrdXBEb21haW4odXJsKSB7XG4gICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9IFwiXCI7IH1cbiAgICBpZiAoIXN0YXR1c18xLmRlZmF1bHQuaXNFbmFibGVCYWNrdXBEb21haW4pIHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5pc0VuYWJsZUJhY2t1cERvbWFpbiA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW5FbmFibGVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW5FbmFibGVDYWxsYmFjayh1cmwpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGZvcm1hdDogZm9ybWF0LFxuICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgdXBsb2FkRmlsZTogdXBsb2FkRmlsZSxcbiAgICBlbmFibGVCYWNrdXBEb21haW46IGVuYWJsZUJhY2t1cERvbWFpblxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnhkV1Z6ZEVoaGJtUnNaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZiVzlrZFd4bEwzSmxjWFZsYzNSSVlXNWtiR1Z5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdRVUZCUVN3eVEwRkJjVU03UVVGRGNrTXNNRU5CUVc5RE8wRkJRM0JETERCRFFVRnZRenRCUVVOd1F5dzJRMEZCZFVNN1FVRkRka01zSzBOQlFYbERPMEZCUTNwRExHMUVRVUUyUXp0QlFVTTNReXh4UkVGQkswTTdRVUZETDBNc2RVUkJRV2xFTzBGQlEycEVMRzFEUVVFMlFqdEJRVVUzUWl3clEwRkJPRU03UVVGSE9VTXNVMEZCVXl4TlFVRk5MRU5CUVVNc1UwRkJhVUk3U1VGRE4wSXNTVUZCU1N4VFFVRlRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTzFGQlF6bENMRTlCUVU4c1UwRkJVeXhEUVVGQk8wdEJRMjVDTzFOQlFVMDdVVUZEU0N4SlFVRkpMRk5CUVZNc1IwRkJSeXhuUWtGQlRTeERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTnFReXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xbEJRM2hETEZOQlFWTXNSMEZCUnl4blFrRkJUU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZCTzFOQlEycERPMUZCUTBRc1QwRkJUeXhUUVVGVExFZEJRVWNzVTBGQlV5eERRVUZETzB0QlEyaERPMEZCUTB3c1EwRkJRenRCUVVkRUxGTkJRVk1zUzBGQlN5eERRVUVyUXl4SFFVRk5MRVZCUVVVc1QwRkJPRUlzUlVGQlJTeE5RVUVyUWp0SlFVVm9TU3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEZsQlFWa3NTMEZCU3l4WFFVRlhMRVZCUVVVN1VVRkRla01zUjBGQlJ5eERRVUZETEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRlRUk3VTBGQlRUdFJRVU5JTEVkQlFVY3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRMUVVOMFFqdEpRVVZFTEVsQlFVa3NSMEZCUnl4RFFVRkRMRmxCUVZrc1MwRkJTeXhEUVVGRExFbEJRVWtzVDBGQlR5eEhRVUZITEVOQlFVTXNWVUZCVlN4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVOb1JTeEhRVUZITEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNN1MwRkRjRUk3U1VGRlJDeEpRVUZKTEVkQlFVY3NRMEZCUXl4WFFVRlhMRVZCUVVVN1VVRkRha0lzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzB0QlEycERPMGxCUlVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVWQlFVVTdVVUZEYUVJc1IwRkJSeXhEUVVGRExGTkJRVk1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRPMUZCUTNoQ0xFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU0zUWp0SlFVVkVMRWRCUVVjc1EwRkJReXhSUVVGUkxFZEJRVWNzVDBGQlR5eERRVUZETzBsQlEzWkNMRWRCUVVjc1EwRkJReXhQUVVGUExFZEJRVWNzVFVGQlRTeERRVUZETzBsQlJYSkNMRTlCUVU4c1IwRkJSeXhEUVVGRE8wRkJRMllzUTBGQlF6dEJRVWRFTEZOQlFWTXNiMEpCUVc5Q0xFTkJRVU1zUjBGQmJVSTdPMGxCUlRkRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RlFVRkZPMUZCUTFnc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTTdTMEZEYWtJN1NVRkZSQ3hIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNeFF5eEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhUUVVGVExFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEzaERMRWxCUVVrc1RVRkJUU3hIUVVGSExHZENRVUZOTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1VVRkRhRU1zU1VGQlNTeFBRVUZQTEUxQlFVMHNTMEZCU3l4UlFVRlJMRVZCUVVVN1dVRkROVUlzUjBGQlJ5eERRVUZETEUxQlFVMHNlVUpCUVU4c1IwRkJSeXhEUVVGRExFMUJRVTBzUjBGQlN5eE5RVUZOTEVOQlFVTXNRMEZCUXp0VFFVTXpRenRMUVVOS08xTkJRVTBzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1UwRkJVeXhMUVVGTExGRkJRVkVzUlVGQlJUdFJRVU0zUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3g1UWtGQlR5eEhRVUZITEVOQlFVTXNUVUZCVFN4SFFVRkxMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdTMEZEY2tRN1NVRkZSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eFRRVUZUTEV0QlFVc3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xRkJRemxFTEVkQlFVY3NRMEZCUXl4SlFVRkpMSGxDUVVGUkxFZEJRVWNzUTBGQlF5eEpRVUZqTEdkQ1FVRkhMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eEpRVUZITEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhOUVVGRkxFTkJRVU03UzBGRE9VVTdTVUZIUkN4SlFVRk5MRVZCUVVVc1IwRkJSeXhoUVVGaExFVkJRVVVzUTBGQlF6dEpRVU16UWl4SFFVRkhMRU5CUVVNc1NVRkJTU3g1UWtGQlVTeEZRVUZGTEVkQlFVc3NSMEZCUnl4RFFVRkRMRWxCUVdNc1EwRkJSU3hEUVVGRE8wbEJSVFZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTTdTVUZEYWtNc1IwRkJSeXhEUVVGRExGRkJRVkVzUjBGQlJ5eEhRVUZITEVOQlFVTXNVVUZCVVN4SlFVRkpMRTFCUVUwc1EwRkJRenRKUVVkMFF5eEpRVUZKTEVOQlFVTXNaMEpCUVUwc1EwRkJReXh0UWtGQmJVSXNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hMUVVGTExFdEJRVXNzUlVGQlJUdFJRVU55UkN4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFsQlEyaENMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzWVVGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhaUVVGSkxFZEJRVU1zWjBKQlFVMHNRMEZCUXl4WFFVRlhMRWxCUVVjc1owSkJRVTBzUTBGQlF5eFBRVUZQTEUxQlFVY3NRMEZCUXp0VFFVTTVSVHRSUVVORUxFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NZVUZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMHRCUTNoRE8wbEJSMFFzUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4aFFVRkhMRU5CUVVNc1lVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVVnlReXd3UWtGQlowSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRk5VSXNUMEZCVHl4SFFVRkhMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSMFFzVTBGQlV5eDFRa0ZCZFVJc1EwRkJReXhIUVVGelFqczdTVUZEYmtRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVTdVVUZEWml4SFFVRkhMRU5CUVVNc1VVRkJVU3hIUVVGSExFVkJRVVVzUTBGQlF6dExRVU55UWp0SlFVVkVMRWRCUVVjc1EwRkJReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpGRExFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRk5CUVZNc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGVFTXNTVUZCU1N4TlFVRk5MRWRCUVVjc1owSkJRVTBzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0UlFVTm9ReXhKUVVGSkxFOUJRVThzVFVGQlRTeExRVUZMTEZGQlFWRXNSVUZCUlR0WlFVTTFRaXhIUVVGSExFTkJRVU1zVFVGQlRTeDVRa0ZCVHl4SFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGTExFMUJRVTBzUTBGQlF5eERRVUZETzFOQlF6TkRPMHRCUTBvN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRXRCUVVzc1VVRkJVU3hGUVVGRk8xRkJRemRETEVkQlFVY3NRMEZCUXl4TlFVRk5MSGxDUVVGUExFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVc3NaMEpCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dExRVU55UkR0SlFVVkVMRWxCUVVrc1IwRkJSeXhEUVVGRExGTkJRVk1zUzBGQlN5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVN1VVRkRPVVFzUjBGQlJ5eERRVUZETEZGQlFWRXNlVUpCUVZFc1IwRkJSeXhEUVVGRExGRkJRV3RDTEdkQ1FVRkhMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eEpRVUZITEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhOUVVGRkxFTkJRVU03UzBGRGRFWTdTVUZIUkN4SlFVRk5MRVZCUVVVc1IwRkJSeXhoUVVGaExFVkJRVVVzUTBGQlF6dEpRVU16UWl4SFFVRkhMRU5CUVVNc1VVRkJVU3g1UWtGQlVTeEZRVUZGTEVkQlFVc3NSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJSU3hEUVVGRE8wbEJSVEZETEVsQlFVa3NRMEZCUXl4blFrRkJUU3hEUVVGRExHMUNRVUZ0UWl4RlFVRkZPMUZCUlRkQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVN1dVRkRhRUlzUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4aFFVRkhMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEZsQlFVa3NSMEZCUXl4blFrRkJUU3hEUVVGRExGZEJRVmNzU1VGQlJ5eG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1RVRkJSeXhEUVVGRE8xTkJRemxGTzFGQlJVUXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhoUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03UzBGRGVFTTdTVUZIUkN4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExHRkJRVWNzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSWEpETERCQ1FVRm5RaXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVVTFRaXhQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZGUkN4VFFVRlRMR0ZCUVdFN1NVRkRiRUlzU1VGQlNTeEZRVUZGTEVkQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJwQ0xFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGVrTXNSVUZCUlN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTTdTMEZETlVJN1UwRkJUU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRXRCUVVzc1VVRkJVU3hGUVVGRk8xRkJRemxETEVWQlFVVXNSMEZCUnl4blFrRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6dExRVU14UWp0SlFVTkVMRTlCUVU4c1JVRkJSU3hEUVVGRE8wRkJRMlFzUTBGQlF6dEJRVVZFTEZOQlFWTXNVMEZCVXl4RFFVRkRMRWRCUVcxQ08wbEJSV3hETEVsQlFVY3NRMEZCUXl4blFrRkJUU3hEUVVGRExFOUJRVThzUlVGQlJUdFJRVU5vUWl4UFFVRlBMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVFJFTEVOQlFVTTdTMEZEYkVZN1NVRkRSQ3hIUVVGSExFZEJRVWNzYjBKQlFXOUNMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGFFTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1dVRkJXU3hMUVVGTExFTkJRVU1zU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU51UlN4SFFVRkhMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RlFVRkZMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdTMEZEYUVRN1NVRkRSQ3hQUVVGUExFbEJRVWtzVDBGQlR5eERRVUZwUkN4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xRkJReTlGTEVWQlFVVXNRMEZCUXl4UFFVRlBMSFZDUVVOSUxFZEJRVWNzUzBGRFRpeFBRVUZQTEZsQlFVTXNSMEZCUnp0blFrRkRVQ3hQUVVGUExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTjRRaXhEUVVGRExFVkJRMFFzU1VGQlNTeFpRVUZETEVkQlFVYzdaMEpCUlVvc1NVRkJTU3hEUVVGRExHZENRVUZOTEVOQlFVTXNiVUpCUVcxQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMR0ZCUVVjc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVU3YjBKQlJYUkhMR3RDUVVGclFpeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRk5VSXNUMEZCVHl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFVTXNSMEZCUnl4SlFVRkpMRTlCUVVFc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZhTEVOQlFWa3NRMEZCUXl4RFFVRkRPMmxDUVVOd1JEdG5Ra0ZEUkN4UFFVRlBMRTFCUVUwc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeGpRVUZqTEVWQlFVVXNSMEZCUnl4TFFVRkJMRVZCUVVVc1EwRkJReXhEUVVGRE8xbEJRMnBFTEVOQlFVTXNSVUZEUkN4UlFVRlJPMmRDUVVOS0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl3d1FrRkJNRUlzUlVGQlJUdHZRa0ZEYmtNc1ZVRkJWU3hEUVVGRE8zZENRVU5RTEVsQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1VVRkJVU3hMUVVGTExGVkJRVlVzUlVGQlJUczBRa0ZEY0VNc1IwRkJSeXhEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETzNsQ1FVTnNRanQzUWtGRFJDeEpRVUZKTEVkQlFVY3NRMEZCUXl4WFFVRlhMRVZCUVVVN05FSkJRMnBDTEdsQ1FVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03ZVVKQlEyeENPMjlDUVVOTUxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUVR0cFFrRkRVanR4UWtGQlRUdHZRa0ZEU0N4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExGRkJRVkVzUzBGQlN5eFZRVUZWTEVWQlFVVTdkMEpCUTNCRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0eFFrRkRiRUk3YjBKQlEwUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1YwRkJWeXhGUVVGRk8zZENRVU5xUWl4cFFrRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzNGQ1FVTnNRanRwUWtGRFNqdFpRVU5NTEVOQlFVTXNTVUZEU0N4RFFVRkJPMGxCUTA0c1EwRkJReXhEUVVGRExFTkJRVUU3UVVGRFRpeERRVUZETzBGQlJVUXNVMEZCVXl4WlFVRlpMRU5CUVVNc1IwRkJjMEk3U1VGRmVFTXNTVUZCUnl4RFFVRkRMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFGQlEyaENMRTlCUVU4c1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQkswUXNRMEZCUXp0TFFVTjRSanRKUVVORUxFZEJRVWNzUjBGQlJ5eDFRa0ZCZFVJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU51UXl4SlFVRkpMRWRCUVVjc1EwRkJReXhaUVVGWkxFdEJRVXNzUTBGQlF5eEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhWUVVGVkxFdEJRVXNzVlVGQlZTeEZRVUZGTzFGQlEyNUZMRWRCUVVjc1IwRkJSeXhuUWtGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1owSkJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0TFFVTm9SRHRKUVVORUxFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFXOUVMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3VVVGRGJFWXNSVUZCUlN4RFFVRkRMRlZCUVZVc2RVSkJRMDRzUjBGQlJ5eExRVU5PTEU5QlFVOHNXVUZCUXl4SFFVRkhPMmRDUVVOUUxFOUJRVThzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoQ0xFTkJRVU1zUlVGRFJDeEpRVUZKTEZsQlFVTXNSMEZCUnp0blFrRkZTaXhKUVVGSkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4dFFrRkJiVUlzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1lVRkJSeXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJUdHZRa0ZGZEVjc2EwSkJRV3RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yOUNRVVUxUWl4UFFVRlBMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCUXl4SFFVRkhMRWxCUVVrc1QwRkJRU3hQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFWb3NRMEZCV1N4RFFVRkRMRU5CUVVNN2FVSkJRM1pFTzJkQ1FVTkVMRTlCUVU4c1RVRkJUU3hEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEdOQlFXTXNSVUZCUlN4SFFVRkhMRXRCUVVFc1JVRkJSU3hEUVVGRExFTkJRVU03V1VGRGFrUXNRMEZCUXl4RlFVTkVMRkZCUVZFN1owSkJRMG9zU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMREJDUVVFd1FpeEZRVUZGTzI5Q1FVTnVReXhWUVVGVkxFTkJRVU03ZDBKQlExQXNTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhSUVVGUkxFdEJRVXNzVlVGQlZTeEZRVUZGT3pSQ1FVTndReXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdlVUpCUTJ4Q08zZENRVU5FTEVsQlFVa3NSMEZCUnl4RFFVRkRMRmRCUVZjc1JVRkJSVHMwUWtGRGFrSXNhVUpCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dDVRa0ZEYkVJN2IwSkJRMHdzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkJPMmxDUVVOU08zRkNRVUZOTzI5Q1FVTklMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVVVGQlVTeExRVUZMTEZWQlFWVXNSVUZCUlR0M1FrRkRjRU1zUjBGQlJ5eERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPM0ZDUVVOc1FqdHZRa0ZEUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhYUVVGWExFVkJRVVU3ZDBKQlEycENMR2xDUVVGUExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdjVUpCUTJ4Q08ybENRVU5LTzFsQlEwd3NRMEZCUXl4SlFVTklMRU5CUVVFN1NVRkRUaXhEUVVGRExFTkJRVU1zUTBGQlFUdEJRVU5PTEVOQlFVTTdRVUZGUkN4VFFVRlRMRTlCUVU4c1EwRkJVU3hIUVVGdFFqdEpRVU4yUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZETDBJc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF5eEhRVUZITEVWQlFVVXNUMEZCVHl4RlFVRkZMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJSV3hETEVsQlFVa3NaMEpCUVUwc1EwRkJReXhSUVVGUkxFVkJRVVU3V1VGRGFrSXNTVUZCU1N4WlFVRlpMRWRCUVVjc2NVSkJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRlRU1zU1VGQlNTeFpRVUZaTEVWQlFVVTdaMEpCUTJRc1NVRkJTU3hSUVVGUkxFZEJRVWNzZVVKQlFXVXNRMEZCUXl4clFrRkJhMElzUTBGQlF5eFpRVUZaTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRM0pGTEU5QlFVOHNUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8yRkJRelZDTzFOQlEwbzdVVUZGUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhMUVVGTExFVkJRVVU3V1VGRFdDeHpRa0ZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU42UWp0UlFVVkVMSGRDUVVGakxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNaQ0xFOUJRVThzVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkJPMUZCUTNwQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRkRMRWRCUVcxRU8xbEJRM2hFTEVsQlFVa3NVVUZCVVN4SFFVRkhMSGxDUVVGbExFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFsQlF6VkVMRWxCUVVrc1VVRkJVU3hKUVVGSkxFbEJRVWtzUlVGQlJUdG5Ra0ZEYkVJc1QwRkJUeXhQUVVGUExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdZVUZETlVJN1VVRkRUQ3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNWVUZCUXl4RFFVRmxPMWxCUTNKQ0xFOUJRVThzU1VGQlFTd3lRa0ZCV1N4RlFVRkRMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVRTdVVUZEZGtNc1EwRkJReXhEUVVGRExFTkJRVUU3U1VGRFRpeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkZSQ3hUUVVGVExGVkJRVlVzUTBGQlF5eEhRVUZ6UWp0SlFVTjBReXhQUVVGUExFbEJRVWtzVDBGQlR5eERRVUZETEZWQlFVTXNUMEZCVHl4RlFVRkZMRTFCUVUwN1VVRkRMMElzUjBGQlJ5eEhRVUZITEV0QlFVc3NRMEZCUXl4SFFVRkhMRVZCUVVVc1QwRkJUeXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzFGQlJXeERMRWxCUVVrc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVWQlFVVTdXVUZEYWtJc1NVRkJTU3haUVVGWkxFZEJRVWNzY1VKQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVFTXNTVUZCU1N4WlFVRlpMRVZCUVVVN1owSkJRMlFzU1VGQlNTeFJRVUZSTEVkQlFVY3NlVUpCUVdVc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4WlFVRlpMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03WjBKQlEzaEZMRTlCUVU4c1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJGQlF6VkNPMU5CUTBvN1VVRkZSQ3gzUWtGQll5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJRenRaUVVOMlFpeFBRVUZQTEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRVHRSUVVNMVFpeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJReXhIUVVGelJEdFpRVU16UkN4SlFVRkpMRkZCUVZFc1IwRkJSeXg1UWtGQlpTeERRVUZETEhGQ1FVRnhRaXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTXZSQ3hKUVVGSkxGRkJRVkVzU1VGQlNTeEpRVUZKTEVWQlFVVTdaMEpCUTJ4Q0xFOUJRVThzVDBGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMkZCUXpWQ08xRkJRMHdzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVVNc1EwRkJaVHRaUVVOeVFpeEpRVUZCTERKQ1FVRlpMRVZCUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUVR0UlFVTm9ReXhEUVVGRExFTkJRVU1zUTBGQlFUdEpRVU5PTEVOQlFVTXNRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVWRUxGTkJRVk1zYTBKQlFXdENMRU5CUVVNc1IwRkJaMEk3U1VGQmFFSXNiMEpCUVVFc1JVRkJRU3hSUVVGblFqdEpRVU40UXl4SlFVRkpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eHZRa0ZCYjBJc1JVRkJSVHRSUVVNNVFpeG5Ra0ZCVFN4RFFVRkRMRzlDUVVGdlFpeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTnVReXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl3d1FrRkJNRUlzUzBGQlN5eFZRVUZWTEVWQlFVVTdXVUZEZWtRc1owSkJRVTBzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU14UXp0TFFVTktPMEZCUTB3c1EwRkJRenRCUVVWRUxHdENRVUZsTzBsQlExZ3NUVUZCVFN4UlFVRkJPMGxCUTA0c1QwRkJUeXhUUVVGQk8wbEJRMUFzVlVGQlZTeFpRVUZCTzBsQlExWXNhMEpCUVd0Q0xHOUNRVUZCTzBOQlEzSkNMRU5CUVVFaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2JHOWhaR2x1WnlCbWNtOXRJQ2N1TGk5MWRHbHNMMnh2WVdScGJtY25YRzVwYlhCdmNuUWdZMjl1Wm1sbklHWnliMjBnSnk0dUwzTjBiM0psTDJOdmJtWnBaeWRjYm1sdGNHOXlkQ0J6ZEdGMGRYTWdabkp2YlNBbkxpNHZjM1J2Y21VdmMzUmhkSFZ6SjF4dWFXMXdiM0owSUcxdlkydE5ZVzVoWjJWeUlHWnliMjBnSnk0dmJXOWphMDFoYm1GblpYSW5YRzVwYlhCdmNuUWdZMkZqYUdWTllXNWhaMlZ5SUdaeWIyMGdKeTR2WTJGamFHVk5ZVzVoWjJWeUoxeHVhVzF3YjNKMElITmxjM05wYjI1TllXNWhaMlZ5SUdaeWIyMGdKeTR2YzJWemMybHZiazFoYm1GblpYSW5YRzVwYlhCdmNuUWdjbVZ6Y0c5dWMyVklZVzVrYkdWeUlHWnliMjBnSnk0dmNtVnpjRzl1YzJWSVlXNWtiR1Z5SjF4dWFXMXdiM0owSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWElnWm5KdmJTQmNJaTR2WkhWeVlYUnBiMjVTWlhCdmNuUmxjbHdpWEc1cGJYQnZjblFnZFhKc0lHWnliMjBnSnk0dUwzVjBhV3d2ZFhKc0oxeHVhVzF3YjNKMElIc2dTVkpsY1hWbGMzUlBjSFJwYjI0c0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUxDQkpSWEp5YjNKUFltcGxZM1FnZlNCbWNtOXRJRndpTGk0dmFXNTBaWEptWVdObFhDSmNibWx0Y0c5eWRDQjdJR05oZEdOb1NHRnVaR3hsY2lCOUlHWnliMjBnSnk0dlkyRjBZMmhJWVc1a2JHVnlKenRjYmx4dUx5OGc1cUM4NWJ5UDVZeVdkWEpzWEc1bWRXNWpkR2x2YmlCbWIzSnRZWFFvYjNKcFoybHVWWEpzT2lCemRISnBibWNwSUh0Y2JpQWdJQ0JwWmlBb2IzSnBaMmx1VlhKc0xuTjBZWEowYzFkcGRHZ29KMmgwZEhBbktTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiM0pwWjJsdVZYSnNYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJSFZ5YkZCbGNtWnBlQ0E5SUdOdmJtWnBaeTUxY214UVpYSm1hWGc3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG5WeWJGQmxjbVpwZUNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IxY214UVpYSm1hWGdnUFNCamIyNW1hV2N1ZFhKc1VHVnlabWw0S0NsY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RYSnNVR1Z5Wm1sNElDc2diM0pwWjJsdVZYSnNPMXh1SUNBZ0lIMWNibjFjYmx4dUx5OGc1b21BNXB5SjZLKzM1ckdDNVkrUjVZZTY1WW1ONlp5QTZLYUI1WUdhNTVxRTVMcUw1b09GWEc1bWRXNWpkR2x2YmlCd2NtVkVienhVSUdWNGRHVnVaSE1nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiajRvYjJKcU9pQlVMQ0J5WlhOdmJIWmxPaUFvZG1Gc2RXVS9PaUJoYm5rcElEMCtJSFp2YVdRc0lISmxhbVZqZEQ4NklDaHlaV0Z6YjI0L09pQmhibmtwSUQwK0lIWnZhV1FwT2lCVUlIdGNiaUFnSUNBdkx5RG5tYnZsdlpYbWdJSGxwTEhtbFlqdnZJenBoNDNscEkzbm1idmx2WlhvcnFIbWxiQmNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHOWlhaTV5WlV4dloybHVRMjkxYm5RZ1BUMDlJRndpZFc1a1pXWnBibVZrWENJcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDQTlJREE3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDc3JPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h2WW1vdWNtVk1iMmRwYmtOdmRXNTBJRDA5UFNBd0lDWW1JSFI1Y0dWdlppQnZZbW91WW1WbWIzSmxVMlZ1WkNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVpWldadmNtVlRaVzVrS0NrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHOWlhaTV6YUc5M1RHOWhaR2x1WnlrZ2UxeHVJQ0FnSUNBZ0lDQnNiMkZrYVc1bkxuTm9iM2NvYjJKcUxuTm9iM2RNYjJGa2FXNW5LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvSVc5aWFpNXZjbWxuYVc1VmNtd3BJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtOXlhV2RwYmxWeWJDQTlJRzlpYWk1MWNtdzdYRzRnSUNBZ0lDQWdJRzlpYWk1MWNtd2dQU0JtYjNKdFlYUW9iMkpxTG5WeWJDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2IySnFMbDl5WlhOdmJIWmxJRDBnY21WemIyeDJaVHRjYmlBZ0lDQnZZbW91WDNKbGFtVmpkQ0E5SUhKbGFtVmpkRHRjYmx4dUlDQWdJSEpsZEhWeWJpQnZZbW83WEc1OVhHNWNiaTh2SU9hZ3ZPVzhqK1dNbHVXa2hPZVFodWl2dCtheGd1ZWFoRzlpYXVXR2hlV3V1Vnh1Wm5WdVkzUnBiMjRnYVc1cGRHbGhiR2w2WlZKbGNYVmxjM1JQWW1vb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpa2dlMXh1WEc0Z0lDQWdhV1lnS0NGdlltb3VaR0YwWVNrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91WkdGMFlTQTlJSHQ5TzF4dUlDQWdJSDFjYmlBZ0lDQmNiaUFnSUNCdlltb3VhR1ZoWkdWeUlEMGdiMkpxTG1obFlXUmxjaUEvSUc5aWFpNW9aV0ZrWlhJZ09pQjdmVHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NXpaWFJJWldGa1pYSWdQVDA5SUNkbWRXNWpkR2x2YmljcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUdobFlXUmxjaUE5SUdOdmJtWnBaeTV6WlhSSVpXRmtaWElvS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQm9aV0ZrWlhJZ1BUMDlJQ2R2WW1wbFkzUW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnZZbW91YUdWaFpHVnlJRDBnZXk0dUxtOWlhaTVvWldGa1pYSXNJQzR1TG1obFlXUmxjbjA3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VjMlYwU0dWaFpHVnlJRDA5UFNBbmIySnFaV04wSnlrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91YUdWaFpHVnlJRDBnZXk0dUxtOWlhaTVvWldGa1pYSXNJQzR1TG1OdmJtWnBaeTV6WlhSSVpXRmtaWEo5TzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNodlltb3ViM0pwWjJsdVZYSnNJQ0U5UFNCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNTFjbXdnSmlZZ2MzUmhkSFZ6TG5ObGMzTnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbVJoZEdFZ1BTQjdJQzR1TG05aWFpNWtZWFJoSUdGeklHOWlhbVZqZEN3Z1cyTnZibVpwWnk1elpYTnphVzl1VG1GdFpWMDZJSE4wWVhSMWN5NXpaWE56YVc5dUlIMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGc1YWFDNXA2YzVweUo1WVdvNWJHQTVZK0M1cFd3Nzd5TTVZaVo1cmU3NVlxZ1hHNGdJQ0FnWTI5dWMzUWdaMlFnUFNCblpYUkhiRzlpWVd4RVlYUmhLQ2s3WEc0Z0lDQWdiMkpxTG1SaGRHRWdQU0I3SUM0dUxtZGtMQ0F1TGk1dlltb3VaR0YwWVNCaGN5QnZZbXBsWTNRZ2ZUdGNibHh1SUNBZ0lHOWlhaTV0WlhSb2IyUWdQU0J2WW1vdWJXVjBhRzlrSUh4OElDZEhSVlFuTzF4dUlDQWdJRzlpYWk1a1lYUmhWSGx3WlNBOUlHOWlhaTVrWVhSaFZIbHdaU0I4ZkNBbmFuTnZiaWM3WEc1Y2JpQWdJQ0F2THlEbHBvTG1ucHpvcjdmbXNZTGt1STNtbUs5SFJWVHZ2SXpsaUpubG5LaFZVa3prdUszb2g2cmxpcWpsaXFEa3VJcm5tYnZsdlpYbWdJSGxrb3psaGFqbHNZRGxqNExtbGJCY2JpQWdJQ0JwWmlBb0lXTnZibVpwWnk1a2IwNXZkRlZ6WlZGMVpYSjVVM1J5YVc1bklDWW1JRzlpYWk1dFpYUm9iMlFnSVQwOUlGd2lSMFZVWENJcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0hOMFlYUjFjeTV6WlhOemFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnZZbW91ZFhKc0lEMGdkWEpzTG5ObGRGQmhjbUZ0Y3lodlltb3VkWEpzTENCN0lGdGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVmRPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJpQjlLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCdlltb3VkWEpzSUQwZ2RYSnNMbk5sZEZCaGNtRnRjeWh2WW1vdWRYSnNMQ0JuWkNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4ZzVhU0g1NVNvNVorZjVaQ042WUM3Nkw2UlhHNGdJQ0FnYjJKcUxuVnliQ0E5SUhWeWJDNXlaWEJzWVdObFJHOXRZV2x1S0c5aWFpNTFjbXdwTzF4dVhHNGdJQ0FnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTV6ZEdGeWRDaHZZbW9wTzF4dVhHNGdJQ0FnY21WMGRYSnVJRzlpYWp0Y2JuMWNibHh1THk4ZzVxQzg1YnlQNVl5VzVhU0U1NUNHNUxpSzVMeWc1cGFINUx1MjU1cUViMkpxNVlhRjVhNjVYRzVtZFc1amRHbHZiaUJwYm1sMGFXRnNhWHBsVlhCc2IyRmtSbWxzWlU5aWFpaHZZbW82SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1S1NCN1hHNGdJQ0FnYVdZZ0tDRnZZbW91Wm05eWJVUmhkR0VwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbVp2Y20xRVlYUmhJRDBnZTMwN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYjJKcUxtaGxZV1JsY2lBOUlHOWlhaTVvWldGa1pYSWdQeUJ2WW1vdWFHVmhaR1Z5SURvZ2UzMDdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdWMyVjBTR1ZoWkdWeUlEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JvWldGa1pYSWdQU0JqYjI1bWFXY3VjMlYwU0dWaFpHVnlLQ2s3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2FHVmhaR1Z5SUQwOVBTQW5iMkpxWldOMEp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2IySnFMbWhsWVdSbGNpQTlJSHN1TGk1dlltb3VhR1ZoWkdWeUxDQXVMaTVvWldGa1pYSjlPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxuTmxkRWhsWVdSbGNpQTlQVDBnSjI5aWFtVmpkQ2NwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbWhsWVdSbGNpQTlJSHN1TGk1dlltb3VhR1ZoWkdWeUxDQXVMaTVqYjI1bWFXY3VjMlYwU0dWaFpHVnlmVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYjJKcUxtOXlhV2RwYmxWeWJDQWhQVDBnWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dWRYSnNJQ1ltSUhOMFlYUjFjeTV6WlhOemFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpNW1iM0p0UkdGMFlTQTlJSHNnTGk0dWIySnFMbVp2Y20xRVlYUmhJR0Z6SUc5aWFtVmpkQ3dnVzJOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlYwNklITjBZWFIxY3k1elpYTnphVzl1SUgwN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4ZzVhYUM1cDZjNXB5SjVZV281YkdBNVkrQzVwV3c3N3lNNVlpWjVyZTc1WXFnWEc0Z0lDQWdZMjl1YzNRZ1oyUWdQU0JuWlhSSGJHOWlZV3hFWVhSaEtDazdYRzRnSUNBZ2IySnFMbVp2Y20xRVlYUmhJRDBnZXlBdUxpNW5aQ3dnTGk0dWIySnFMbVp2Y20xRVlYUmhJSDA3WEc1Y2JpQWdJQ0JwWmlBb0lXTnZibVpwWnk1a2IwNXZkRlZ6WlZGMVpYSjVVM1J5YVc1bktTQjdYRzRnSUNBZ0lDQWdJQzh2SU9Xd2h1ZVp1K21aaHVhQWdlUzVuK1c0cHVXY3FIVnliT1M0aWx4dUlDQWdJQ0FnSUNCcFppQW9jM1JoZEhWekxuTmxjM05wYjI0cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUc5aWFpNTFjbXdnUFNCMWNtd3VjMlYwVUdGeVlXMXpLRzlpYWk1MWNtd3NJSHNnVzJOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlYwNklITjBZWFIxY3k1elpYTnphVzl1SUgwcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQzh2SU9XRnFPV3hnT1dQZ3VhVnNPV1FqT2FYdHVhVXZ1V2NxSFZ5Yk9TNGlseHVJQ0FnSUNBZ0lDQnZZbW91ZFhKc0lEMGdkWEpzTG5ObGRGQmhjbUZ0Y3lodlltb3VkWEpzTENCblpDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGc1YVNINTVTbzVaK2Y1WkNONllDNzZMNlJYRzRnSUNBZ2IySnFMblZ5YkNBOUlIVnliQzV5WlhCc1lXTmxSRzl0WVdsdUtHOWlhaTUxY213cE8xeHVYRzRnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1emRHRnlkQ2h2WW1vcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUc5aWFqdGNibjFjYmx4dVpuVnVZM1JwYjI0Z1oyVjBSMnh2WW1Gc1JHRjBZU2dwSUh0Y2JpQWdJQ0JzWlhRZ1oyUTZJR0Z1ZVNBOUlIdDlPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtZHNiMkpoYkVSaGRHRWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0JuWkNBOUlHTnZibVpwWnk1bmJHOWlZV3hFWVhSaEtDazdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1kc2IySmhiRVJoZEdFZ1BUMDlJRndpYjJKcVpXTjBYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ1oyUWdQU0JqYjI1bWFXY3VaMnh2WW1Gc1JHRjBZVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdka08xeHVmVnh1WEc1bWRXNWpkR2x2YmlCa2IxSmxjWFZsYzNRb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpa2dlMXh1SUNBZ0lDOHZJT2VjbithdG8rV1BrZWl2dCtheGd1YVh0dSs4ak9XR2plYXNvZVdJcE9hV3JlUzRnT2Fzb2VhWXIrV1FwdWFjaWVlWnUrbVpodWFBZ1Z4dUlDQWdJR2xtS0NGemRHRjBkWE11YzJWemMybHZiaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21WeGRXVnpkQ2h2WW1vcElHRnpJRkJ5YjIxcGMyVThWMlZqYUdGMFRXbHVhWEJ5YjJkeVlXMHVVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkRDQ3WEc0Z0lDQWdmVnh1SUNBZ0lHOWlhaUE5SUdsdWFYUnBZV3hwZW1WU1pYRjFaWE4wVDJKcUtHOWlhaWs3WEc0Z0lDQWdhV1lnS0c5aWFpNXlaVXh2WjJsdVEyOTFiblFnUFQwOUlEQWdKaVlnZEhsd1pXOW1JR052Ym1acFp5NWlaV1p2Y21WVFpXNWtJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUlEMGdZMjl1Wm1sbkxtSmxabTl5WlZObGJtUW9iMkpxTENCemRHRjBkWE11YzJWemMybHZiaWs3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpUeFhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNVNaWEYxWlhOMFUzVmpZMlZ6YzBOaGJHeGlZV05yVW1WemRXeDBQaWdvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lIZDRMbkpsY1hWbGMzUW9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ0xpNHViMkpxTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM1ZqWTJWemN5aHlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2h5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1poYVd3b2NtVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVhYUM1cDZjNUxpNzVaK2Y1WkNONUxpTjVZK3Y1NVNvNzd5TTVMaVU2WVdONTcydTVMcUc1YVNINUx1OTVaK2Y1WkNONzd5TTVMaVU1cHlzNXF5aDZLKzM1ckdDNXB5cTVMMi81NVNvNWFTSDVMdTk1WitmNVpDTlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLQ2hqYjI1bWFXY3VaRzl0WVdsdVEyaGhibWRsVkhKcFoyZGxjaUFtSmlCamIyNW1hV2N1Wkc5dFlXbHVRMmhoYm1kbFZISnBaMmRsY2loeVpYTXBLU0FtSmlCMWNtd3VhWE5KYmtKaFkydDFjRVJ2YldGcGJreHBjM1FvYjJKcUxuVnliQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnNWJ5QTVaQ3Y1YVNINUx1OTVaK2Y1WkNOWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnVZV0pzWlVKaFkydDFjRVJ2YldGcGJpaHZZbW91ZFhKc0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzZZZU42SytWNUxpQTVxeWhYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJrYjFKbGNYVmxjM1FvYjJKcUtTNTBhR1Z1S0NoeVpYTXBQVDRnY21WemIyeDJaU2h5WlhNcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoN0lIUjVjR1U2SUNkemVYTjBaVzB0WlhKeWIzSW5MQ0J5WlhNZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dGNHeGxkR1VvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR052Ym1acFp5NXBjMFpwZUZOMVkyTmxjM05EYjIxd2JHVjBaVlJwYldsdVp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpYUlVhVzFsYjNWMEtDZ3BQVDU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNWpiMjF3YkdWMFpTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTnZiWEJzWlhSbEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYjJKcUxuTm9iM2RNYjJGa2FXNW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHOWhaR2x1Wnk1b2FXUmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHNJREFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91WTI5dGNHeGxkR1VnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTnZiWEJzWlhSbEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0c5aWFpNXphRzkzVEc5aFpHbHVaeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkc5aFpHbHVaeTVvYVdSbEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlNsY2JuMWNibHh1Wm5WdVkzUnBiMjRnWkc5VmNHeHZZV1JHYVd4bEtHOWlham9nU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRwSUh0Y2JpQWdJQ0F2THlEbm5KL21yYVBsajVIb3I3Zm1zWUxtbDdidnZJemxobzNtcktIbGlLVG1scTNrdUlEbXJLSG1tSy9sa0tibW5Jbm5tYnZwbVlibWdJRmNiaUFnSUNCcFppZ2hjM1JoZEhWekxuTmxjM05wYjI0cElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVndiRzloWkVacGJHVW9iMkpxS1NCaGN5QlFjbTl0YVhObFBGZGxZMmhoZEUxcGJtbHdjbTluY21GdExsVndiRzloWkVacGJHVlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFErTzF4dUlDQWdJSDFjYmlBZ0lDQnZZbW9nUFNCcGJtbDBhV0ZzYVhwbFZYQnNiMkZrUm1sc1pVOWlhaWh2WW1vcE8xeHVJQ0FnSUdsbUlDaHZZbW91Y21WTWIyZHBia052ZFc1MElEMDlQU0F3SUNZbUlIUjVjR1Z2WmlCamIyNW1hV2N1WW1WbWIzSmxVMlZ1WkNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaUE5SUdOdmJtWnBaeTVpWldadmNtVlRaVzVrS0c5aWFpd2djM1JoZEhWekxuTmxjM05wYjI0cE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlU4VjJWamFHRjBUV2x1YVhCeWIyZHlZVzB1VlhCc2IyRmtSbWxzWlZOMVkyTmxjM05EWVd4c1ltRmphMUpsYzNWc2RENG9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCM2VDNTFjR3h2WVdSR2FXeGxLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDNHVMbTlpYWl4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE4xWTJObGMzTW9jbVZ6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvY21WektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc0tISmxjeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklPV21ndWFlbk9TNHUrV2ZuK1dRamVTNGplV1ByK2VVcU8rOGpPUzRsT21GamVlOXJ1UzZodVdraCtTN3ZlV2ZuK1dRamUrOGpPUzRsT2Fjck9hc29laXZ0K2F4Z3VhY3F1Uzl2K2VVcU9Xa2grUzd2ZVdmbitXUWpWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2dvWTI5dVptbG5MbVJ2YldGcGJrTm9ZVzVuWlZSeWFXZG5aWElnSmlZZ1kyOXVabWxuTG1SdmJXRnBia05vWVc1blpWUnlhV2RuWlhJb2NtVnpLU2tnSmlZZ2RYSnNMbWx6U1c1Q1lXTnJkWEJFYjIxaGFXNU1hWE4wS0c5aWFpNTFjbXdwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SU9XOGdPV1FyK1draCtTN3ZlV2ZuK1dRalZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxibUZpYkdWQ1lXTnJkWEJFYjIxaGFXNG9iMkpxTG5WeWJDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklPbUhqZWl2bGVTNGdPYXNvVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWkc5VmNHeHZZV1JHYVd4bEtHOWlhaWt1ZEdobGJpZ29jbVZ6S1QwK0lISmxjMjlzZG1Vb2NtVnpLU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9leUIwZVhCbE9pQW5jM2x6ZEdWdExXVnljbTl5Snl3Z2NtVnpJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiWEJzWlhSbEtDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoamIyNW1hV2N1YVhOR2FYaFRkV05qWlhOelEyOXRjR3hsZEdWVWFXMXBibWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlYwVkdsdFpXOTFkQ2dvS1QwK2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91WTI5dGNHeGxkR1VnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOWlhaTVqYjIxd2JHVjBaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHOWlhaTV6YUc5M1RHOWhaR2x1WnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3h2WVdScGJtY3VhR2xrWlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5TENBd0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxtTnZiWEJzWlhSbElEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOWlhaTVqYjIxd2JHVjBaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHZZbW91YzJodmQweHZZV1JwYm1jcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeHZZV1JwYm1jdWFHbGtaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lIMHBYRzU5WEc1Y2JtWjFibU4wYVc5dUlISmxjWFZsYzNROFZGSmxjM0ErS0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0cE9pQlFjbTl0YVhObFBGUlNaWE53UGlCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdiMkpxSUQwZ2NISmxSRzhvYjJKcUxDQnlaWE52YkhabExDQnlaV3BsWTNRcE8xeHVYRzRnSUNBZ0lDQWdJR2xtSUNoamIyNW1hV2N1Ylc5amEwcHpiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCdGIyTnJVbVZ6Y0c5dWMyVWdQU0J0YjJOclRXRnVZV2RsY2k1blpYUW9iMkpxS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodGIyTnJVbVZ6Y0c5dWMyVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVnpjRzl1YzJVZ1BTQnlaWE53YjI1elpVaGhibVJzWlhJdWNtVnpjRzl1YzJWR2IzSlNaWEYxWlhOMEtHMXZZMnRTWlhOd2IyNXpaU3dnYjJKcUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNoeVpYTndiMjV6WlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnBaaUFvYjJKcUxtTmhZMmhsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVdOb1pVMWhibUZuWlhJdVoyVjBLRzlpYWlrN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0J6WlhOemFXOXVUV0Z1WVdkbGNpNXRZV2x1S0NrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWkc5U1pYRjFaWE4wS0c5aWFpbGNiaUFnSUNBZ0lDQWdmU2t1ZEdobGJpZ29jbVZ6T2lCWFpXTm9ZWFJOYVc1cGNISnZaM0poYlM1U1pYRjFaWE4wVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnY21WemNHOXVjMlVnUFNCeVpYTndiMjV6WlVoaGJtUnNaWEl1Y21WemNHOXVjMlZHYjNKU1pYRjFaWE4wS0hKbGN5d2diMkpxS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoeVpYTndiMjV6WlNBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvY21WemNHOXVjMlVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1M1allYUmphQ2dvWlRvZ1NVVnljbTl5VDJKcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZMkYwWTJoSVlXNWtiR1Z5S0dVc0lHOWlhaXdnY21WcVpXTjBLVnh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDBwWEc1OVhHNWNibVoxYm1OMGFXOXVJSFZ3Ykc5aFpFWnBiR1VvYjJKcU9pQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpazZJR0Z1ZVNCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdiMkpxSUQwZ2NISmxSRzhvYjJKcUxDQnlaWE52YkhabExDQnlaV3BsWTNRcE8xeHVYRzRnSUNBZ0lDQWdJR2xtSUNoamIyNW1hV2N1Ylc5amEwcHpiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCdGIyTnJVbVZ6Y0c5dWMyVWdQU0J0YjJOclRXRnVZV2RsY2k1blpYUW9iMkpxS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodGIyTnJVbVZ6Y0c5dWMyVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVnpjRzl1YzJVZ1BTQnlaWE53YjI1elpVaGhibVJzWlhJdWNtVnpjRzl1YzJWR2IzSlZjR3h2WVdSR2FXeGxLRzF2WTJ0U1pYTndiMjV6WlN3Z2IySnFLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHlaWE53YjI1elpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0J6WlhOemFXOXVUV0Z1WVdkbGNpNXRZV2x1S0NrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWkc5VmNHeHZZV1JHYVd4bEtHOWlhaWxjYmlBZ0lDQWdJQ0FnZlNrdWRHaGxiaWdvY21Wek9pQlhaV05vWVhSTmFXNXBjSEp2WjNKaGJTNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZ6Y0c5dWMyVWdQU0J5WlhOd2IyNXpaVWhoYm1Sc1pYSXVjbVZ6Y0c5dWMyVkdiM0pWY0d4dllXUkdhV3hsS0hKbGN5d2diMkpxS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoeVpYTndiMjV6WlNBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvY21WemNHOXVjMlVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1M1allYUmphQ2dvWlRvZ1NVVnljbTl5VDJKcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhSamFFaGhibVJzWlhJb1pTd2diMkpxTENCeVpXcGxZM1FwWEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlNsY2JuMWNibHh1Wm5WdVkzUnBiMjRnWlc1aFlteGxRbUZqYTNWd1JHOXRZV2x1S0hWeWJEb2djM1J5YVc1bklEMGdYQ0pjSWlrZ2UxeHVJQ0FnSUdsbUlDZ2hjM1JoZEhWekxtbHpSVzVoWW14bFFtRmphM1Z3Ukc5dFlXbHVLU0I3WEc0Z0lDQWdJQ0FnSUhOMFlYUjFjeTVwYzBWdVlXSnNaVUpoWTJ0MWNFUnZiV0ZwYmlBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1KaFkydDFjRVJ2YldGcGJrVnVZV0pzWlVOaGJHeGlZV05ySUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjVtYVdjdVltRmphM1Z3Ukc5dFlXbHVSVzVoWW14bFEyRnNiR0poWTJzb2RYSnNLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDFjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2UxeHVJQ0FnSUdadmNtMWhkQ3hjYmlBZ0lDQnlaWEYxWlhOMExGeHVJQ0FnSUhWd2JHOWhaRVpwYkdVc1hHNGdJQ0FnWlc1aFlteGxRbUZqYTNWd1JHOXRZV2x1WEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcbnZhciBqc29uU3VwZXJzZXRfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2pzb25TdXBlcnNldFwiKTtcbmZ1bmN0aW9uIHJlc3BvbnNlRm9yUmVxdWVzdChyZXMsIG9iaikge1xuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LmVuZChvYmopO1xuICAgICAgICBpZiAob2JqLmRhdGFUeXBlID09PSAnanNvbicgJiYgdHlwZW9mIHJlcy5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzLmRhdGEgPSAoMCwganNvblN1cGVyc2V0XzEuZGVmYXVsdCkocmVzLmRhdGEpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IEpTT04ucGFyc2UocmVzLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyB7IHR5cGU6ICdsb2dpYy1lcnJvcicsIHJlczogcmVzIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubG9naW5UcmlnZ2VyKHJlcy5kYXRhKSAmJiBvYmoucmVMb2dpbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgb2JqLnJlTG9naW5Db3VudCA8IGNvbmZpZ18xLmRlZmF1bHQucmVMb2dpbkxpbWl0KSB7XG4gICAgICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5yZXF1ZXN0KG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzVHJpZ2dlcihyZXMuZGF0YSkpIHtcbiAgICAgICAgICAgIHZhciByZWFsRGF0YSA9IFwiXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5zdWNjZXNzRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZWFsRGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkgeyB9XG4gICAgICAgICAgICBjYWNoZU1hbmFnZXJfMS5kZWZhdWx0LnNldChvYmosIHJlYWxEYXRhKTtcbiAgICAgICAgICAgIGlmICghb2JqLm5vQ2FjaGVGbGFzaCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZWFsRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhbERhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAnbG9naWMtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyB7IHR5cGU6ICdodHRwLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXNwb25zZUZvclVwbG9hZEZpbGUocmVzLCBvYmopIHtcbiAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5lbmQob2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXMuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlcy5kYXRhID0gKDAsIGpzb25TdXBlcnNldF8xLmRlZmF1bHQpKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAnbG9naWMtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LmxvZ2luVHJpZ2dlcihyZXMuZGF0YSkgJiYgb2JqLnJlTG9naW5Db3VudCAhPT0gdW5kZWZpbmVkICYmIG9iai5yZUxvZ2luQ291bnQgPCBjb25maWdfMS5kZWZhdWx0LnJlTG9naW5MaW1pdCkge1xuICAgICAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0LmRlbFNlc3Npb24oKTtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQudXBsb2FkRmlsZShvYmopO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc1RyaWdnZXIocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICB2YXIgcmVhbERhdGEgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSBjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NEYXRhKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVhbERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAnbG9naWMtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyB7IHR5cGU6ICdodHRwLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgcmVzcG9uc2VGb3JSZXF1ZXN0OiByZXNwb25zZUZvclJlcXVlc3QsXG4gICAgcmVzcG9uc2VGb3JVcGxvYWRGaWxlOiByZXNwb25zZUZvclVwbG9hZEZpbGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ6Y0c5dWMyVklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzl5WlhOd2IyNXpaVWhoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zYlVSQlFUWkRPMEZCUXpkRExDdERRVUY1UXp0QlFVTjZReXgxUkVGQmFVUTdRVUZEYWtRc2JVUkJRVFpETzBGQlJUZERMSEZFUVVFclF6dEJRVVV2UXl4VFFVRlRMR3RDUVVGclFpeERRVU4yUWl4SFFVRnRSQ3hGUVVOdVJDeEhRVUZ0UWp0SlFVVnVRaXhKUVVGSkxFZEJRVWNzUTBGQlF5eFZRVUZWTEV0QlFVc3NSMEZCUnl4RlFVRkZPMUZCUlhoQ0xEQkNRVUZuUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVWN4UWl4SlFVRkpMRWRCUVVjc1EwRkJReXhSUVVGUkxFdEJRVXNzVFVGQlRTeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRWxCUVVrc1MwRkJTeXhSUVVGUkxFVkJRVVU3V1VGRGVrUXNSMEZCUnl4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGQkxITkNRVUZaTEVWQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRMnhETEVsQlFVazdaMEpCUTBFc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dGhRVU51UXp0WlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8yZENRVU5TTEUxQlFVMHNSVUZCUlN4SlFVRkpMRVZCUVVVc1lVRkJZU3hGUVVGRkxFZEJRVWNzUzBGQlFTeEZRVUZGTEVOQlFVRTdZVUZEY2tNN1UwRkRTanRSUVVWRUxFbEJRVWtzWjBKQlFVMHNRMEZCUXl4WlFVRmhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4WlFVRlpMRXRCUVVzc1UwRkJVeXhKUVVGSkxFZEJRVWNzUTBGQlF5eFpRVUZaTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGaExFVkJRVVU3V1VGRk4wY3NkMEpCUVdNc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFpRVU0xUWl4UFFVRlBMSGRDUVVGakxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMU5CUTNSRE8yRkJRVTBzU1VGQlNTeG5Ra0ZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdXVUZGZUVNc1NVRkJTU3hSUVVGUkxFZEJRWE5ETEVWQlFVVXNRMEZCUXp0WlFVTnlSQ3hKUVVGSk8yZENRVU5CTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGZEJRVmNzUzBGQlN5eFZRVUZWTEVWQlFVVTdiMEpCUXpGRExGRkJRVkVzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdhVUpCUXpORE8zRkNRVUZOTzI5Q1FVTklMRkZCUVZFc1IwRkJSeXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETzJsQ1FVTjJRanRoUVVOS08xbEJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNSMEZCUlR0WlFVVmtMSE5DUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJRenRaUVVOb1F5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1JVRkJSVHRuUWtGRmJrSXNTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhQUVVGUExFdEJRVXNzVlVGQlZTeEZRVUZGTzI5Q1FVTnVReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMmxDUVVONlFqdHhRa0ZCVFR0dlFrRkRTQ3hQUVVGUExGRkJRVkVzUTBGQlF6dHBRa0ZEYmtJN1lVRkRTanRUUVVOS08yRkJRVTA3V1VGRlNDeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMR0ZCUVdFc1JVRkJSU3hIUVVGSExFdEJRVUVzUlVGQlJTeERRVUZCTzFOQlEzSkRPMHRCUTBvN1UwRkJUVHRSUVVWSUxFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVXNXVUZCV1N4RlFVRkZMRWRCUVVjc1MwRkJRU3hGUVVGRkxFTkJRVUU3UzBGRGNFTTdRVUZEVEN4RFFVRkRPMEZCUlVRc1UwRkJVeXh4UWtGQmNVSXNRMEZETVVJc1IwRkJjMFFzUlVGRGRFUXNSMEZCYzBJN1NVRkZkRUlzU1VGQlNTeEhRVUZITEVOQlFVTXNWVUZCVlN4TFFVRkxMRWRCUVVjc1JVRkJSVHRSUVVWNFFpd3dRa0ZCWjBJc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZITVVJc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eEpRVUZKTEV0QlFVc3NVVUZCVVN4RlFVRkZPMWxCUXpsQ0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCUVN4elFrRkJXU3hGUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVTnNReXhKUVVGSk8yZENRVU5CTEVkQlFVY3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1lVRkRia003V1VGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0blFrRkRVaXhOUVVGTkxFVkJRVVVzU1VGQlNTeEZRVUZGTEdGQlFXRXNSVUZCUlN4SFFVRkhMRXRCUVVFc1JVRkJSU3hEUVVGQk8yRkJRM0pETzFOQlEwbzdVVUZGUkN4SlFVRkpMR2RDUVVGTkxFTkJRVU1zV1VGQllTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zV1VGQldTeExRVUZMTEZOQlFWTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1dVRkJXU3hIUVVGSExHZENRVUZOTEVOQlFVTXNXVUZCWVN4RlFVRkZPMWxCUlRkSExIZENRVUZqTEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNN1dVRkROVUlzVDBGQlR5eDNRa0ZCWXl4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU42UXp0aFFVRk5MRWxCUVVrc1owSkJRVTBzUTBGQlF5eGpRVUZqTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRk8xbEJSWGhETEVsQlFVa3NVVUZCVVN4SFFVRnpReXhGUVVGRkxFTkJRVU03V1VGRGNrUXNTVUZCU1R0blFrRkRRU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4WFFVRlhMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yOUNRVU14UXl4UlFVRlJMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8ybENRVU16UXp0eFFrRkJUVHR2UWtGRFNDeFJRVUZSTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJRenRwUWtGRGRrSTdZVUZEU2p0WlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFZEJRVVU3V1VGRlpDeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRTlCUVU4c1MwRkJTeXhWUVVGVkxFVkJRVVU3WjBKQlEyNURMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdZVUZEZWtJN2FVSkJRVTA3WjBKQlEwZ3NUMEZCVHl4UlFVRlJMRU5CUVVNN1lVRkRia0k3VTBGRFNqdGhRVUZOTzFsQlJVZ3NUVUZCVFN4RlFVRkZMRWxCUVVrc1JVRkJSU3hoUVVGaExFVkJRVVVzUjBGQlJ5eExRVUZCTEVWQlFVVXNRMEZCUVR0VFFVTnlRenRMUVVOS08xTkJRVTA3VVVGRlNDeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMRmxCUVZrc1JVRkJSU3hIUVVGSExFdEJRVUVzUlVGQlJTeERRVUZCTzB0QlEzQkRPMEZCUTB3c1EwRkJRenRCUVVWRUxHdENRVUZsTzBsQlExZ3NhMEpCUVd0Q0xHOUNRVUZCTzBsQlEyeENMSEZDUVVGeFFpeDFRa0ZCUVR0RFFVTjRRaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdjbVZ4ZFdWemRFaGhibVJzWlhJZ1puSnZiU0FuTGk5eVpYRjFaWE4wU0dGdVpHeGxjaWRjYm1sdGNHOXlkQ0JqWVdOb1pVMWhibUZuWlhJZ1puSnZiU0FuTGk5allXTm9aVTFoYm1GblpYSW5YRzVwYlhCdmNuUWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpQm1jbTl0SUNjdUwyUjFjbUYwYVc5dVVtVndiM0owWlhJblhHNXBiWEJ2Y25RZ2MyVnpjMmx2YmsxaGJtRm5aWElnWm5KdmJTQW5MaTl6WlhOemFXOXVUV0Z1WVdkbGNpZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUxDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpd2dTVUZ1ZVU5aWFtVmpkQ0I5SUdaeWIyMGdYQ0l1TGk5cGJuUmxjbVpoWTJWY0lqdGNibWx0Y0c5eWRDQnFjMjl1VTNWd1pYSnpaWFFnWm5KdmJTQW5MaTR2ZFhScGJDOXFjMjl1VTNWd1pYSnpaWFFuWEc1Y2JtWjFibU4wYVc5dUlISmxjM0J2Ym5ObFJtOXlVbVZ4ZFdWemRDaGNiaUFnSUNCeVpYTTZJRmRsWTJoaGRFMXBibWx3Y205bmNtRnRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFzWEc0Z0lDQWdiMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZibHh1S1RvZ1lXNTVJSHRjYmlBZ0lDQnBaaUFvY21WekxuTjBZWFIxYzBOdlpHVWdQVDA5SURJd01Da2dlMXh1WEc0Z0lDQWdJQ0FnSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWEl1Wlc1a0tHOWlhaWs3WEc0Z0lDQWdJQ0FnSUZ4dUlDQWdJQ0FnSUNBdkx5RG9yN2Ztc1lMbW9Memx2SS9rdUxwcWMyOXU3N3lNNUwyRzZMK1U1WnVlNUxxR2MzUnlhVzVuNzd5TTZLKzA1cGlPNVlhRjVhNjU1TGl0NVkrdjZJTzk1YTJZNVp5bzVhKzg2SWUwNUwyLzViNlhTbUYyWVZOamNtbHdkT1c4Z3VXNHVPZWFoT1d0bCtlc3BseHVJQ0FnSUNBZ0lDQnBaaUFvYjJKcUxtUmhkR0ZVZVhCbElEMDlQU0FuYW5OdmJpY2dKaVlnZEhsd1pXOW1JSEpsY3k1a1lYUmhJRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WekxtUmhkR0VnUFNCcWMyOXVVM1Z3WlhKelpYUW9jbVZ6TG1SaGRHRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhNdVpHRjBZU0E5SUVwVFQwNHVjR0Z5YzJVb2NtVnpMbVJoZEdFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUhzZ2RIbHdaVG9nSjJ4dloybGpMV1Z5Y205eUp5d2djbVZ6SUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY3ViRzluYVc1VWNtbG5aMlZ5SVNoeVpYTXVaR0YwWVNrZ0ppWWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDQWhQVDBnZFc1a1pXWnBibVZrSUNZbUlHOWlhaTV5WlV4dloybHVRMjkxYm5RZ1BDQmpiMjVtYVdjdWNtVk1iMmRwYmt4cGJXbDBJU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNTVtNzViMlY1b0NCNWFTeDVwV0k3N3lNNUxpVTZZZU42SytWNXF5aDVwV3c1TGlONkxhRjZMK0g2WVdONTcydVhHNGdJQ0FnSUNBZ0lDQWdJQ0J6WlhOemFXOXVUV0Z1WVdkbGNpNWtaV3hUWlhOemFXOXVLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnhkV1Z6ZEVoaGJtUnNaWEl1Y21WeGRXVnpkQ2h2WW1vcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLR052Ym1acFp5NXpkV05qWlhOelZISnBaMmRsY2loeVpYTXVaR0YwWVNrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPYU9wZVdQbytpL2xPV2JudWFJa09XS24rZWdnVnh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEpsWVd4RVlYUmhPaUJ6ZEhKcGJtY2dmQ0JKUVc1NVQySnFaV04wSUh3Z1FYSnlZWGxDZFdabVpYSWdQU0JjSWx3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NXpkV05qWlhOelJHRjBZU0E5UFQwZ0oyWjFibU4wYVc5dUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpXRnNSR0YwWVNBOUlHTnZibVpwWnk1emRXTmpaWE56UkdGMFlTaHlaWE11WkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WaGJFUmhkR0VnUFNCeVpYTXVaR0YwWVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzU3eVQ1YTJZNWEyWTVZS29YRzRnSUNBZ0lDQWdJQ0FnSUNCallXTm9aVTFoYm1GblpYSXVjMlYwS0c5aWFpd2djbVZoYkVSaGRHRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLQ0Z2WW1vdWJtOURZV05vWlVac1lYTm9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVhYUM1cDZjNUxpNjVMcUc1TCtkNksrQjZhRzE2WjJpNUxpTjZaZXE1NE9CNzd5TTVZaVo1TGlONVp1ZTZMQ0Q3N3lNNVkrcTVwaXY1N3lUNWEyWTVweUE1cGF3NXBXdzVvMnU3N3lNNWI2RjVMaUw1cXloNkwrYjVZV2w1WWFONTVTb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91YzNWalkyVnpjeUE5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOWlhaTV6ZFdOalpYTnpLSEpsWVd4RVlYUmhLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WaGJFUmhkR0U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1bzZsNVkrajZMK1U1WnVlNWFTeDZMU2w1NkNCWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCN0lIUjVjR1U2SUNkc2IyZHBZeTFsY25KdmNpY3NJSEpsY3lCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBdkx5Qm9kSFJ3YytpL2xPV2JudWVLdHVhQWdlZWdnZW1kbmpJd01GeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCN0lIUjVjR1U2SUNkb2RIUndMV1Z5Y205eUp5d2djbVZ6SUgxY2JpQWdJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJSEpsYzNCdmJuTmxSbTl5VlhCc2IyRmtSbWxzWlNoY2JpQWdJQ0J5WlhNNklGZGxZMmhoZEUxcGJtbHdjbTluY21GdExsVndiRzloWkVacGJHVlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFzWEc0Z0lDQWdiMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2Ymx4dUtUb2dZVzU1SUh0Y2JpQWdJQ0JwWmlBb2NtVnpMbk4wWVhSMWMwTnZaR1VnUFQwOUlESXdNQ2tnZTF4dVhHNGdJQ0FnSUNBZ0lHUjFjbUYwYVc5dVVtVndiM0owWlhJdVpXNWtLRzlpYWlrN1hHNWNiaUFnSUNBZ0lDQWdMeThnNVlhRjVhNjU1TGl0NVkrdjZJTzk1YTJZNVp5bzVhKzg2SWUwNUwyLzViNlhTbUYyWVZOamNtbHdkT1c4Z3VXNHVPZWFoT1d0bCtlc3BseHVJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JSEpsY3k1a1lYUmhJRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WekxtUmhkR0VnUFNCcWMyOXVVM1Z3WlhKelpYUW9jbVZ6TG1SaGRHRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhNdVpHRjBZU0E5SUVwVFQwNHVjR0Z5YzJVb2NtVnpMbVJoZEdFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUhzZ2RIbHdaVG9nSjJ4dloybGpMV1Z5Y205eUp5d2djbVZ6SUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY3ViRzluYVc1VWNtbG5aMlZ5SVNoeVpYTXVaR0YwWVNrZ0ppWWdiMkpxTG5KbFRHOW5hVzVEYjNWdWRDQWhQVDBnZFc1a1pXWnBibVZrSUNZbUlHOWlhaTV5WlV4dloybHVRMjkxYm5RZ1BDQmpiMjVtYVdjdWNtVk1iMmRwYmt4cGJXbDBJU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNTVtNzViMlY1b0NCNWFTeDVwV0k3N3lNNUxpVTZZZU42SytWNXF5aDVwV3c1TGlONkxhRjZMK0g2WVdONTcydVhHNGdJQ0FnSUNBZ0lDQWdJQ0J6WlhOemFXOXVUV0Z1WVdkbGNpNWtaV3hUWlhOemFXOXVLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnhkV1Z6ZEVoaGJtUnNaWEl1ZFhCc2IyRmtSbWxzWlNodlltb3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOdmJtWnBaeTV6ZFdOalpYTnpWSEpwWjJkbGNpaHlaWE11WkdGMFlTa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJT2FPcGVXUG8raS9sT1dibnVhSWtPV0tuK2VnZ1Z4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhKbFlXeEVZWFJoT2lCemRISnBibWNnZkNCSlFXNTVUMkpxWldOMElId2dRWEp5WVhsQ2RXWm1aWElnUFNCY0lsd2lPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTV6ZFdOalpYTnpSR0YwWVNBOVBUMGdKMloxYm1OMGFXOXVKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaV0ZzUkdGMFlTQTlJR052Ym1acFp5NXpkV05qWlhOelJHRjBZU2h5WlhNdVpHRjBZU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVmhiRVJoZEdFZ1BTQnlaWE11WkdGMFlUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOUlHTmhkR05vSUNobEtTQjdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1emRXTmpaWE56SUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlltb3VjM1ZqWTJWemN5aHlaV0ZzUkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldGc1JHRjBZVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPYU9wZVdQbytpL2xPV2JudVdrc2VpMHBlZWdnVnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnZXlCMGVYQmxPaUFuYkc5bmFXTXRaWEp5YjNJbkxDQnlaWE1nZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2FIUjBjSFBvdjVUbG01N25pcmJtZ0lIbm9JSHBuWjR5TURCY2JpQWdJQ0FnSUNBZ2RHaHliM2NnZXlCMGVYQmxPaUFuYUhSMGNDMWxjbkp2Y2ljc0lISmxjeUI5WEc0Z0lDQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCN1hHNGdJQ0FnY21WemNHOXVjMlZHYjNKU1pYRjFaWE4wTEZ4dUlDQWdJSEpsYzNCdmJuTmxSbTl5VlhCc2IyRmtSbWxzWlZ4dWZUdGNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL3JlcXVlc3RIYW5kbGVyXCIpO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG52YXIgdXJsXzEgPSByZXF1aXJlKFwiLi4vdXRpbC91cmxcIik7XG52YXIgY2hlY2tTZXNzaW9uUHJvbWlzZSA9IG51bGw7XG5mdW5jdGlvbiBjaGVja1Nlc3Npb24oKSB7XG4gICAgaWYgKCFjaGVja1Nlc3Npb25Qcm9taXNlKSB7XG4gICAgICAgIGNoZWNrU2Vzc2lvblByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHd4LmNoZWNrU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoJ3d4X2NoZWNrU2Vzc2lvbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrU2Vzc2lvblByb21pc2U7XG59XG5mdW5jdGlvbiBpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkge1xuICAgIGlmICghc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBuZXcgRGF0ZSgpLmdldFRpbWUoKSA+IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSkge1xuICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjaGVja0xvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGlmIChpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRvTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxudmFyIGxvZ2luUHJvbWlzZSA9IG51bGw7XG5mdW5jdGlvbiBkb0xvZ2luKCkge1xuICAgIGlmICghbG9naW5Qcm9taXNlKSB7XG4gICAgICAgIGxvZ2luUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGxvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGxvZ2luUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxvZ2luUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGxvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5sb2dpbih7XG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUyU2Vzc2lvbihyZXMuY29kZSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHR5cGU6IFwic3lzdGVtLWVycm9yXCIsIHJlczogcmVzIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoJ3d4X2xvZ2luJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXM6IHJlcyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXRTZXNzaW9uKHNlc3Npb24pIHtcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZSxcbiAgICAgICAgZGF0YTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjb2RlMlNlc3Npb24oY29kZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEsIG9iajtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhID09PSBcImZ1bmN0aW9uXCIpKSByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhKGNvZGUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgM107XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEgfHwge307XG4gICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uY29kZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmNvZGVOYW1lXSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LmZvcm1hdChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlciA9PT0gJ2Z1bmN0aW9uJyA/IGNvbmZpZ18xLmRlZmF1bHQuc2V0SGVhZGVyKCkgOiBjb25maWdfMS5kZWZhdWx0LnNldEhlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gY29uZmlnXzEuZGVmYXVsdC5iZWZvcmVTZW5kKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQucmVwbGFjZURvbWFpbihvYmoudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3gucmVxdWVzdChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqKSwgeyBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ucmVwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5yZXBvcnQsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnN1Y2Nlc3MocmVzLmRhdGEsIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycgJiYgcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZXNzaW9uKHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiBcImxvZ2ljLWVycm9yXCIsIHJlczogcmVzIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiBcImh0dHAtZXJyb3JcIiwgcmVzOiByZXMgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZhaWw6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY29uZmlnXzEuZGVmYXVsdC5kb21haW5DaGFuZ2VUcmlnZ2VyICYmIGNvbmZpZ18xLmRlZmF1bHQuZG9tYWluQ2hhbmdlVHJpZ2dlcihyZXMpKSAmJiB1cmxfMS5kZWZhdWx0LmlzSW5CYWNrdXBEb21haW5MaXN0KG9iai51cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhhbmRsZXJfMS5kZWZhdWx0LmVuYWJsZUJhY2t1cERvbWFpbihvYmoudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZTJTZXNzaW9uKGNvZGUpLnRoZW4oZnVuY3Rpb24gKHJlcykgeyByZXR1cm4gcmVzb2x2ZShyZXMpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0eXBlOiBcInN5c3RlbS1lcnJvclwiLCByZXM6IHJlcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZGVsU2Vzc2lvbigpIHtcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSAnJztcbiAgICB3eC5yZW1vdmVTdG9yYWdlKHtcbiAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXG4gICAgfSk7XG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IEluZmluaXR5O1xuICAgICAgICB3eC5yZW1vdmVTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1haW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcmV0dXJuIGNoZWNrTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgbWFpbjogbWFpbixcbiAgICBzZXRTZXNzaW9uOiBzZXRTZXNzaW9uLFxuICAgIGRlbFNlc3Npb246IGRlbFNlc3Npb25cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMlZ6YzJsdmJrMWhibUZuWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMM05sYzNOcGIyNU5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFXOURPMEZCUTNCRExIVkVRVUZwUkR0QlFVTnFSQ3h0UkVGQk5rTTdRVUZETjBNc01rTkJRWEZETzBGQlEzSkRMRzFEUVVFMlFqdEJRVWszUWl4SlFVRkpMRzFDUVVGdFFpeEhRVUZSTEVsQlFVa3NRMEZCUXp0QlFVVndReXhUUVVGVExGbEJRVms3U1VGRGFrSXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeEZRVUZGTzFGQlEzUkNMRzFDUVVGdFFpeEhRVUZITEVsQlFVa3NUMEZCVHl4RFFVRlBMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3V1VGRGNFUXNTVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0WlFVTnVReXhGUVVGRkxFTkJRVU1zV1VGQldTeERRVUZETzJkQ1FVTmFMRTlCUVU4N2IwSkJSVWdzVDBGQlR5eFBRVUZQTEVWQlFVVXNRMEZCUXp0blFrRkRja0lzUTBGQlF6dG5Ra0ZEUkN4SlFVRkpPMjlDUVVWQkxGVkJRVlVzUlVGQlJTeERRVUZETzI5Q1FVTmlMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETzNkQ1FVTnNRaXhQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETzI5Q1FVTnlRaXhEUVVGRExFVkJRVVVzVlVGQlF5eEhRVUZSTzNkQ1FVTlNMRTlCUVU4c1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzI5Q1FVTjJRaXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEVUN4RFFVRkRPMmRDUVVORUxGRkJRVkU3YjBKQlEwb3NTVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0dlFrRkRha01zTUVKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExHbENRVUZwUWl4RlFVRkZMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZETTBRc1EwRkJRenRoUVVOS0xFTkJRVU1zUTBGQlFUdFJRVU5PTEVOQlFVTXNRMEZCUXl4RFFVRkJPMHRCUTB3N1NVRkRSQ3hQUVVGUExHMUNRVUZ0UWl4RFFVRkRPMEZCUXk5Q0xFTkJRVU03UVVGSFJDeFRRVUZUTEhOQ1FVRnpRanRKUVVNelFpeEpRVUZKTEVOQlFVTXNaMEpCUVUwc1EwRkJReXhQUVVGUExFVkJRVVU3VVVGRmFrSXNUMEZCVHl4SlFVRkpMRU5CUVVFN1MwRkRaRHRKUVVORUxFbEJRVWtzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzU1VGQlNTeEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RlFVRkZPMUZCUlhwRkxGVkJRVlVzUlVGQlJTeERRVUZETzFGQlEySXNUMEZCVHl4SlFVRkpMRU5CUVVFN1MwRkRaRHRKUVVORUxFOUJRVThzUzBGQlN5eERRVUZCTzBGQlEyaENMRU5CUVVNN1FVRkZSQ3hUUVVGVExGVkJRVlU3U1VGRFppeFBRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRlBMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3VVVGRGNrTXNTVUZCU1N4elFrRkJjMElzUlVGQlJTeEZRVUZGTzFsQlJURkNMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRMmhETEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU5zUWl4UFFVRlBMRTlCUVU4c1JVRkJSU3hEUVVGRE8xbEJRM0pDTEVOQlFVTXNSVUZCUlN4VlFVRkRMRWRCUVZFN1owSkJRMUlzVDBGQlR5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRka0lzUTBGQlF5eERRVUZETEVOQlFVRTdVMEZEVER0aFFVRk5PMWxCUlVnc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dFRRVU53UWp0SlFVTk1MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVWRFTEVsQlFVa3NXVUZCV1N4SFFVRlJMRWxCUVVrc1EwRkJRenRCUVVVM1FpeFRRVUZUTEU5QlFVODdTVUZEV2l4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVGRk8xRkJRMllzV1VGQldTeEhRVUZITEVsQlFVa3NUMEZCVHl4RFFVRlBMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3V1VGRE4wTXNTMEZCU3l4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU5VTEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNN1owSkJRM0JDTEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNN1dVRkRja0lzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVVNc1IwRkJSenRuUWtGRFZDeFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRPMmRDUVVOd1FpeHBRa0ZCVHl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8yZENRVU5tTEU5QlFVOHNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM1pDTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTFBc1EwRkJReXhEUVVGRExFTkJRVUU3UzBGRFREdEpRVU5FTEU5QlFVOHNXVUZCV1N4RFFVRkRPMEZCUTNoQ0xFTkJRVU03UVVGRlJDeFRRVUZUTEV0QlFVczdTVUZEVml4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGUExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZEY2tNc1NVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRSUVVOdVF5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRPMWxCUTB3c1QwRkJUeXhaUVVGRExFZEJRVWM3WjBKQlExQXNTVUZCU1N4SFFVRkhMRU5CUVVNc1NVRkJTU3hGUVVGRk8yOUNRVU5XTEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzNkQ1FVTjRRaXhQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETzI5Q1FVTnlRaXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNWVUZCUXl4SFFVRkhPM2RDUVVOVUxFOUJRVThzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMjlDUVVOMlFpeERRVUZETEVOQlFVTXNRMEZCUVR0cFFrRkRURHR4UWtGQlRUdHZRa0ZEU0N4UFFVRlBMRTFCUVUwc1EwRkJReXhGUVVGRExFbEJRVWtzUlVGQlJTeGpRVUZqTEVWQlFVVXNSMEZCUnl4TFFVRkJMRVZCUVVNc1EwRkJReXhEUVVGRE8ybENRVU01UXp0WlFVTk1MRU5CUVVNN1dVRkRSQ3hSUVVGUk8yZENRVU5LTEVsQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdaMEpCUTJwRExEQkNRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNCRUxFTkJRVU03V1VGRFJDeEpRVUZKTEZsQlFVTXNSMEZCUnp0blFrRkRTaXhQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEVsQlFVa3NSVUZCUlN4alFVRmpMRVZCUVVVc1IwRkJSeXhMUVVGQkxFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF5OURMRU5CUVVNN1UwRkRTaXhEUVVGRExFTkJRVUU3U1VGRFRpeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkZSQ3hUUVVGVExGVkJRVlVzUTBGQlF5eFBRVUZsTzBsQlF5OUNMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXp0SlFVVjZRaXhuUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhIUVVGSExFbEJRVWtzUTBGQlF6dEpRVVZvUXl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRWxCUVVrc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSVHRSUVVOeVJDeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNN1VVRkRka1VzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXp0WlFVTldMRWRCUVVjc1JVRkJSU3huUWtGQlRTeERRVUZETEdkQ1FVRm5RanRaUVVNMVFpeEpRVUZKTEVWQlFVVXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETzFOQlEzSkRMRU5CUVVNc1EwRkJRVHRMUVVOTU8wbEJRMFFzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXp0UlFVTldMRWRCUVVjc1JVRkJSU3huUWtGQlRTeERRVUZETEZkQlFYRkNPMUZCUTJwRExFbEJRVWtzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRTlCUVU4N1MwRkRka0lzUTBGQlF5eERRVUZETzBGQlExQXNRMEZCUXp0QlFVVkVMRk5CUVdVc1dVRkJXU3hEUVVGRExFbEJRVms3T3pzN096dDVRa0ZIYUVNc1EwRkJRU3hQUVVGUExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1MwRkJTeXhWUVVGVkxFTkJRVUVzUlVGQkwwTXNZMEZCSzBNN2IwSkJRM2hETEZkQlFVMHNaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkJPenR2UWtGQk5VTXNTVUZCU1N4SFFVRkhMRk5CUVhGRExFTkJRVU03T3p0dlFrRkZOME1zU1VGQlNTeEhRVUZITEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTTdPenR2UWtGRk0wTXNTVUZCU1N4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZSTEVWQlFVVTdkMEpCUXk5Q0xFbEJRVWtzUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTTdjVUpCUXpsRE8zbENRVUZOTzNkQ1FVTklMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzNGQ1FVTndRanR2UWtGRlJ5eEhRVUZITEVkQlFVYzdkMEpCUTA0c1IwRkJSeXhGUVVGRkxIZENRVUZqTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NRMEZCUXp0M1FrRkRjRVFzU1VGQlNTeE5RVUZCTzNkQ1FVTktMRTFCUVUwc1JVRkJSU3huUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4TlFVRk5MRWxCUVVrc1MwRkJTenQzUWtGRE5VTXNUVUZCVFN4RlFVRkZMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFRRVUZUTEV0QlFVc3NWVUZCVlN4RFFVRkRMRU5CUVVNc1EwRkJReXhuUWtGQlRTeERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkJMRU5CUVVNc1EwRkJReXhuUWtGQlRTeERRVUZETEZOQlFWTTdjVUpCUTNoR0xFTkJRVUU3YjBKQlEwUXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeExRVUZMTEZWQlFWVXNSVUZCUlR0M1FrRkRla01zUjBGQlJ5eEhRVUZITEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzNGQ1FVTm9RenR2UWtGSFJDeEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMR0ZCUVVjc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMjlDUVVWeVF5eFhRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3TkVKQlF5OUNMRWxCUVVrc1MwRkJTeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN05FSkJRMnBETEVWQlFVVXNRMEZCUXl4UFFVRlBMSFZDUVVOSUxFZEJRVWNzUzBGRFRpeFBRVUZQTEZsQlFVTXNSMEZCYlVRN2IwTkJRM1pFTEVsQlFVa3NSMEZCUnl4RFFVRkRMRlZCUVZVc1MwRkJTeXhIUVVGSExFVkJRVVU3ZDBOQlJYaENMRWxCUVVrc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RlFVRkZPelJEUVVNM1FpeEpRVUZKTEVkQlFVY3NSMEZCUnl4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZET3pSRFFVTXZRaXd3UWtGQlowSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RlFVRkZMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlFUdDVRMEZEYmtVN2QwTkJSVVFzU1VGQlNTeERRVUZETEZOQlFVRXNRMEZCUXp0M1EwRkRUaXhKUVVGSk96UkRRVU5CTEVOQlFVTXNSMEZCUnl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dDVRMEZEYmtRN2QwTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdlVU5CUTFnN2QwTkJSVVFzU1VGQlNTeFBRVUZQTEVOQlFVTXNTMEZCU3l4UlFVRlJMRWxCUVVrc1EwRkJReXhGUVVGRk96UkRRVU0xUWl4VlFVRlZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03TkVOQlEyUXNUMEZCVHl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03ZVVOQlEzSkNPelpEUVVGTk96UkRRVU5JTEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVNc1NVRkJTU3hGUVVGRkxHRkJRV0VzUlVGQlJTeEhRVUZITEV0QlFVRXNSVUZCUXl4RFFVRkRMRU5CUVVNN2VVTkJRemRETzNGRFFVTktPM2xEUVVGTk8zZERRVU5JTEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVNc1NVRkJTU3hGUVVGRkxGbEJRVmtzUlVGQlJTeEhRVUZITEV0QlFVRXNSVUZCUXl4RFFVRkRMRU5CUVVNN2NVTkJRelZETzJkRFFVTk1MRU5CUVVNc1JVRkRSQ3hKUVVGSkxFVkJRVVVzVlVGQlF5eEhRVUZITzI5RFFVVk9MRWxCUVVrc1EwRkJReXhuUWtGQlRTeERRVUZETEcxQ1FVRnRRaXhKUVVGSkxHZENRVUZOTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4aFFVRkhMRU5CUVVNc2IwSkJRVzlDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRk8zZERRVVYwUnl4M1FrRkJZeXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dDNRMEZGTTBNc1QwRkJUeXhaUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVVNc1IwRkJSeXhKUVVGSkxFOUJRVUVzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRmFMRU5CUVZrc1EwRkJReXhEUVVGRE8zRkRRVU40UkR0dlEwRkRSQ3hQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEVsQlFVa3NSVUZCUlN4alFVRmpMRVZCUVVVc1IwRkJSeXhMUVVGQkxFVkJRVU1zUTBGQlF5eERRVUZETzJkRFFVTXZReXhEUVVGRExFbEJRMGdzUTBGQlFUdDNRa0ZEVGl4RFFVRkRMRU5CUVVNc1JVRkJRVHM3T3p0RFFVTk1PMEZCUjBRc1UwRkJVeXhWUVVGVk8wbEJRMllzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRM0JDTEVWQlFVVXNRMEZCUXl4aFFVRmhMRU5CUVVNN1VVRkRZaXhIUVVGSExFVkJRVVVzWjBKQlFVMHNRMEZCUXl4WFFVRnhRanRMUVVOd1F5eERRVUZETEVOQlFVTTdTVUZEU0N4SlFVRkpMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRWxCUVVrc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSVHRSUVVOeVJDeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhSUVVGUkxFTkJRVU03VVVGRGFFTXNSVUZCUlN4RFFVRkRMR0ZCUVdFc1EwRkJRenRaUVVOaUxFZEJRVWNzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMR2RDUVVGblFqdFRRVU12UWl4RFFVRkRMRU5CUVVFN1MwRkRURHRCUVVOTUxFTkJRVU03UVVGRlJDeFRRVUZUTEVsQlFVazdTVUZEVkN4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGUExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZEY2tNc1QwRkJUeXhWUVVGVkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdXVUZEY2tJc1QwRkJUeXhuUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZCTzFGQlEzaEZMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dFpRVU5LTEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNN1VVRkRja0lzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVVNc1EwRkJaVHRaUVVOeVFpeFBRVUZQTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOeVFpeERRVUZETEVOQlFVTXNRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1NVRkJTU3hOUVVGQk8wbEJRMG9zVlVGQlZTeFpRVUZCTzBsQlExWXNWVUZCVlN4WlFVRkJPME5CUTJJc1EwRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0J6ZEdGMGRYTWdabkp2YlNBbkxpNHZjM1J2Y21VdmMzUmhkSFZ6SjF4dWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2lCbWNtOXRJQ2N1TDJSMWNtRjBhVzl1VW1Wd2IzSjBaWEluWEc1cGJYQnZjblFnY21WeGRXVnpkRWhoYm1Sc1pYSWdabkp2YlNBbkxpOXlaWEYxWlhOMFNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCc2IyRmthVzVuSUdaeWIyMGdKeTR1TDNWMGFXd3ZiRzloWkdsdVp5ZGNibWx0Y0c5eWRDQjFjbXdnWm5KdmJTQW5MaTR2ZFhScGJDOTFjbXduWEc1cGJYQnZjblFnZXlCSlJYSnliM0pQWW1wbFkzUWdmU0JtY205dElGd2lMaTR2YVc1MFpYSm1ZV05sWENKY2JseHVMeW9nNTVTZjVaRzk1WkdvNXB5ZjVZYUY1WStxNVlHYTVMaUE1cXloNTVxRVkyaGxZMnRUWlhOemFXOXVJQ292WEc1c1pYUWdZMmhsWTJ0VFpYTnphVzl1VUhKdmJXbHpaVG9nWVc1NUlEMGdiblZzYkR0Y2JseHVablZ1WTNScGIyNGdZMmhsWTJ0VFpYTnphVzl1S0NrZ2UxeHVJQ0FnSUdsbUlDZ2hZMmhsWTJ0VFpYTnphVzl1VUhKdmJXbHpaU2tnZTF4dUlDQWdJQ0FnSUNCamFHVmphMU5sYzNOcGIyNVFjbTl0YVhObElEMGdibVYzSUZCeWIyMXBjMlU4ZG05cFpENG9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MzUmhjblFnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhkNExtTm9aV05yVTJWemMybHZiaWg3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNWalkyVnpjeWdwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnNTVtNzViMlY1b0NCNXB5SjVwV0k3N3lNNUxpVTVaeW81cHlzNTVTZjVaRzk1WkdvNXB5ZjVZYUY1cGVnNmFHNzVZYU41cU9BNmFxTTVMcUdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbVlXbHNLQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeURubWJ2bHZaWG1nSUhvdjRmbW5KOWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkdWc1UyVnpjMmx2YmlncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdaRzlNYjJkcGJpZ3BMblJvWlc0b0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTd2dLSEpsY3pvZ1lXNTVLVDArZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaHlaWE1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJYQnNaWFJsS0NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmxibVFnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTV5WlhCdmNuUW9KM2Q0WDJOb1pXTnJVMlZ6YzJsdmJpY3NJSE4wWVhKMExDQmxibVFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmphR1ZqYTFObGMzTnBiMjVRY205dGFYTmxPMXh1ZlZ4dVhHNHZLaURsaUtUbWxxMXpaWE56YVc5dTVwaXY1WkNtNUxpNjU2bTY1b2lXNWJleTZMK0g1cHlmSUNvdlhHNW1kVzVqZEdsdmJpQnBjMU5sYzNOcGIyNUZlSEJwY21WUGNrVnRjSFI1S0NrZ2UxeHVJQ0FnSUdsbUlDZ2hjM1JoZEhWekxuTmxjM05wYjI0cElIdGNiaUFnSUNBZ0lDQWdMeThnNWFhQzVwNmM1N3lUNWEyWTVMaXQ1cktoNXB5SmMyVnpjMmx2Ymx4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpWeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVlVhVzFsSUNZbUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BJRDRnYzNSaGRIVnpMbk5sYzNOcGIyNUZlSEJwY21VcElIdGNiaUFnSUNBZ0lDQWdMeThnNWFhQzVwNmM1cHlKNks2KzU3MnU1cHlzNVp5d2MyVnpjMmx2YnVlOGsrV3RtT2FYdHVtWHRPKzhqT1M0bE9lOGsrV3RtT2FYdHVtWHRPVzNzdVdJc0Z4dUlDQWdJQ0FnSUNCa1pXeFRaWE56YVc5dUtDazdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBjblZsWEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCbVlXeHpaVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmphR1ZqYTB4dloybHVLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaVHgyYjJsa1BpZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaHBjMU5sYzNOcGIyNUZlSEJwY21WUGNrVnRjSFI1S0NrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPYXlvZWFjaWVlWnUrbVpodWFBZ2UrOGpPUzRqZW1jZ09pbWdlV0dqV05vWldOclUyVnpjMmx2Ymx4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1Wm1sbkxtUnZUbTkwUTJobFkydFRaWE56YVc5dUlEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmtiMHh2WjJsdUtDa3VkR2hsYmlnb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNJQ2h5WlhNNklHRnVlU2s5UG50Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNTd5VDVhMlk1TGl0NXB5SmMyVnpjMmx2YnVTNGxPYWNxdWkvaCthY24xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDBwWEc1OVhHNWNiaThxSU9lWnUrbVpodWExZ2Vlb2krZWFoSEJ5YjIxcGMyVWdLaTljYm14bGRDQnNiMmRwYmxCeWIyMXBjMlU2SUdGdWVTQTlJRzUxYkd3N1hHNWNibVoxYm1OMGFXOXVJR1J2VEc5bmFXNG9LU0I3WEc0Z0lDQWdhV1lnS0NGc2IyZHBibEJ5YjIxcGMyVXBJSHRjYmlBZ0lDQWdJQ0FnYkc5bmFXNVFjbTl0YVhObElEMGdibVYzSUZCeWIyMXBjMlU4ZG05cFpENG9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiRzluYVc0b0tTNTBhR1Z1S0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYjJkcGJsQnliMjFwYzJVZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLUzVqWVhSamFDZ29jbVZ6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiRzluYVc1UWNtOXRhWE5sSUQwZ2JuVnNiRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYjJGa2FXNW5MbWhwWkdVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0hKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUd4dloybHVVSEp2YldselpUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2JHOW5hVzRvS1NCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sUEhadmFXUStLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYzNSaGNuUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ2QzZ3ViRzluYVc0b2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNWalkyVnpjeWh5WlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY21WekxtTnZaR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjlrWlRKVFpYTnphVzl1S0hKbGN5NWpiMlJsS1M1MGFHVnVLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTG1OaGRHTm9LQ2h5WlhNcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtIdDBlWEJsT2lCY0luTjVjM1JsYlMxbGNuSnZjbHdpTENCeVpYTjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXRjR3hsZEdVb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1pXNWtJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1eVpYQnZjblFvSjNkNFgyeHZaMmx1Snl3Z2MzUmhjblFzSUdWdVpDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWm1GcGJDaHlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSHQwZVhCbE9pQmNJbk41YzNSbGJTMWxjbkp2Y2x3aUxDQnlaWE45S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJ6WlhSVFpYTnphVzl1S0hObGMzTnBiMjQ2SUhOMGNtbHVaeWtnZTF4dUlDQWdJSE4wWVhSMWN5NXpaWE56YVc5dUlEMGdjMlZ6YzJsdmJqdGNiaUFnSUNBdkx5RG1qYUxsbTU3bW5hWG5tb1J6WlhOemFXOXU3N3lNNUxpTjZaeUE2S2FCNVlhTlkyaGxZMnRUWlhOemFXOXVYRzRnSUNBZ1kyOXVabWxuTG1SdlRtOTBRMmhsWTJ0VFpYTnphVzl1SUQwZ2RISjFaVHRjYmlBZ0lDQXZMeURscG9MbW5wem1uSW5vcnI3bnZhN21uS3psbkxCelpYTnphVzl1NkwrSDVweWY1cGUyNlplMFhHNGdJQ0FnYVdZZ0tHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlNBbUppQmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVXRsZVNrZ2UxeHVJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmtWNGNHbHlaU0E5SUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncElDc2dZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZVYVcxbE8xeHVJQ0FnSUNBZ0lDQjNlQzV6WlhSVGRHOXlZV2RsS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3RsZVRvZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVkxaWGtzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmtZWFJoT2lCVGRISnBibWNvYzNSaGRIVnpMbk5sYzNOcGIyNUZlSEJwY21VcFhHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZWeHVJQ0FnSUhkNExuTmxkRk4wYjNKaFoyVW9lMXh1SUNBZ0lDQWdJQ0JyWlhrNklHTnZibVpwWnk1elpYTnphVzl1VG1GdFpTQmhjeUJ6ZEhKcGJtY3NYRzRnSUNBZ0lDQWdJR1JoZEdFNklITjBZWFIxY3k1elpYTnphVzl1WEc0Z0lDQWdmU2s3WEc1OVhHNWNibUZ6ZVc1aklHWjFibU4wYVc5dUlHTnZaR1V5VTJWemMybHZiaWhqYjJSbE9pQnpkSEpwYm1jcElIdGNiaUFnSUNCc1pYUWdaR0YwWVRvZ1lXNTVPMXh1SUNBZ0lDOHZJR052WkdWVWIxTmxjM05wYjI0dVpHRjBZZWFVcithTWdlV0h2ZWFWc0Z4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dVpHRjBZU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUdSaGRHRWdQU0JoZDJGcGRDQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTVrWVhSaEtHTnZaR1VwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFZ1BTQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTVrWVhSaElIeDhJSHQ5TzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dVkyOWtaVTVoYldVcElIdGNiaUFnSUNBZ0lDQWdaR0YwWVZ0amIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNWpiMlJsVG1GdFpWMGdQU0JqYjJSbE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUdSaGRHRXVZMjlrWlNBOUlHTnZaR1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUc5aWFpQTlJSHRjYmlBZ0lDQWdJQ0FnZFhKc09pQnlaWEYxWlhOMFNHRnVaR3hsY2k1bWIzSnRZWFFvWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dWRYSnNLU3hjYmlBZ0lDQWdJQ0FnWkdGMFlTeGNiaUFnSUNBZ0lDQWdiV1YwYUc5a09pQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTV0WlhSb2IyUWdmSHdnSjBkRlZDY3NYRzRnSUNBZ0lDQWdJR2hsWVdSbGNqb2dkSGx3Wlc5bUlHTnZibVpwWnk1elpYUklaV0ZrWlhJZ1BUMDlJQ2RtZFc1amRHbHZiaWNnUHlCamIyNW1hV2N1YzJWMFNHVmhaR1Z5S0NrNklHTnZibVpwWnk1elpYUklaV0ZrWlhJc1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbUpsWm05eVpWTmxibVFnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCdlltb2dQU0JqYjI1bWFXY3VZbVZtYjNKbFUyVnVaQ2h2WW1vcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklPV2toK2VVcU9XZm4rV1FqZW1BdStpK2tWeHVJQ0FnSUc5aWFpNTFjbXdnUFNCMWNtd3VjbVZ3YkdGalpVUnZiV0ZwYmlodlltb3VkWEpzS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR3hsZENCemRHRnlkQ0E5SUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncE8xeHVJQ0FnSUNBZ0lDQjNlQzV5WlhGMVpYTjBLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDNHVMbTlpYWl4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE4xWTJObGMzTW9jbVZ6T2lCWFpXTm9ZWFJOYVc1cGNISnZaM0poYlM1U1pYRjFaWE4wVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hKbGN5NXpkR0YwZFhORGIyUmxJRDA5UFNBeU1EQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGc2SUNYNXBlMjVMaUs1b3FsWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1eVpYQnZjblFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQmxibVFnUFNCdVpYY2dSR0YwWlNncExtZGxkRlJwYldVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUjFjbUYwYVc5dVVtVndiM0owWlhJdWNtVndiM0owS0dOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxuSmxjRzl5ZEN3Z2MzUmhjblFzSUdWdVpDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCek8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2N5QTlJR052Ym1acFp5NWpiMlJsVkc5VFpYTnphVzl1TG5OMVkyTmxjM01vY21WekxtUmhkR0VzSUhKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnY3lBOVBUMGdKM04wY21sdVp5Y2dKaVlnY3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVjBVMlZ6YzJsdmJpaHpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtITXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaDdkSGx3WlRvZ1hDSnNiMmRwWXkxbGNuSnZjbHdpTENCeVpYTjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2UzUjVjR1U2SUZ3aWFIUjBjQzFsY25KdmNsd2lMQ0J5WlhOOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWm1GcGJEb2dLSEpsY3lrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SU9XbWd1YWVuT1M0dStXZm4rV1FqZVM0amVXUHIrZVVxTys4ak9TNGxPbUZqZWU5cnVTNmh1V2toK1M3dmVXZm4rV1FqZSs4ak9TNGxPYWNyT2Fzb2VpdnQrYXhndWFjcXVTOXYrZVVxT1draCtTN3ZlV2ZuK1dRalZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDZ29ZMjl1Wm1sbkxtUnZiV0ZwYmtOb1lXNW5aVlJ5YVdkblpYSWdKaVlnWTI5dVptbG5MbVJ2YldGcGJrTm9ZVzVuWlZSeWFXZG5aWElvY21WektTa2dKaVlnZFhKc0xtbHpTVzVDWVdOcmRYQkViMjFoYVc1TWFYTjBLRzlpYWk1MWNtd3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT1c4Z09XUXIrV2toK1M3dmVXZm4rV1FqVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYRjFaWE4wU0dGdVpHeGxjaTVsYm1GaWJHVkNZV05yZFhCRWIyMWhhVzRvYjJKcUxuVnliQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJT21IamVpdmxlUzRnT2Fzb1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyOWtaVEpUWlhOemFXOXVLR052WkdVcExuUm9aVzRvS0hKbGN5azlQaUJ5WlhOdmJIWmxLSEpsY3lrcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0h0MGVYQmxPaUJjSW5ONWMzUmxiUzFsY25KdmNsd2lMQ0J5WlhOOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOUtWeHVmVnh1WEc0dktpRG11SVhucWJwelpYTnphVzl1SUNvdlhHNW1kVzVqZEdsdmJpQmtaV3hUWlhOemFXOXVLQ2tnZTF4dUlDQWdJSE4wWVhSMWN5NXpaWE56YVc5dUlEMGdKeWM3WEc0Z0lDQWdkM2d1Y21WdGIzWmxVM1J2Y21GblpTaDdYRzRnSUNBZ0lDQWdJR3RsZVRvZ1kyOXVabWxuTG5ObGMzTnBiMjVPWVcxbElHRnpJSE4wY21sdVoxeHVJQ0FnSUgwcE8xeHVJQ0FnSUdsbUlDaGpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVlJwYldVZ0ppWWdZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZMWlhrcElIdGNiaUFnSUNBZ0lDQWdjM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVVnUFNCSmJtWnBibWwwZVR0Y2JpQWdJQ0FnSUNBZ2QzZ3VjbVZ0YjNabFUzUnZjbUZuWlNoN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JyWlhrNklHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxTMlY1WEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlZ4dWZWeHVYRzVtZFc1amRHbHZiaUJ0WVdsdUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpUeDJiMmxrUGlnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmphR1ZqYTB4dloybHVLQ2t1ZEdobGJpZ29LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZMjl1Wm1sbkxtUnZUbTkwUTJobFkydFRaWE56YVc5dUlEOGdVSEp2YldselpTNXlaWE52YkhabEtDa2dPaUJqYUdWamExTmxjM05wYjI0b0tWeHVJQ0FnSUNBZ0lDQjlLUzUwYUdWdUtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJSDBwTG1OaGRHTm9LQ2hsT2lCSlJYSnliM0pQWW1wbFkzUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb1pTazdYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmU2xjYm4xY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2UxeHVJQ0FnSUcxaGFXNHNYRzRnSUNBZ2MyVjBVMlZ6YzJsdmJpeGNiaUFnSUNCa1pXeFRaWE56YVc5dVhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGRlZmF1bHRDb25maWcgPSB7XG4gICAgc2Vzc2lvbk5hbWU6IFwic2Vzc2lvblwiLFxuICAgIGxvZ2luVHJpZ2dlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBjb2RlVG9TZXNzaW9uOiB7XG4gICAgICAgIHVybDogXCJcIixcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkgeyB9XG4gICAgfSxcbiAgICBzdWNjZXNzVHJpZ2dlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHNldEhlYWRlcjoge30sXG4gICAgdXJsUGVyZml4OiBcIlwiLFxuICAgIGRvTm90Q2hlY2tTZXNzaW9uOiBmYWxzZSxcbiAgICBlcnJvclRpdGxlOiBcIuaTjeS9nOWksei0pVwiLFxuICAgIGVycm9yQ29udGVudDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgZXJyb3JSZXRyeUJ0bjogZmFsc2UsXG4gICAgcmVMb2dpbkxpbWl0OiAzLFxuICAgIGVycm9yQ2FsbGJhY2s6IG51bGwsXG4gICAgcmVwb3J0Q0dJOiBmYWxzZSxcbiAgICBtb2NrSnNvbjogZmFsc2UsXG4gICAgZ2xvYmFsRGF0YTogZmFsc2UsXG4gICAgc2Vzc2lvbkV4cGlyZUtleTogXCJzZXNzaW9uRXhwaXJlS2V5XCIsXG4gICAgZXJyb3JIYW5kbGVyOiBudWxsLFxuICAgIGJlZm9yZVNlbmQ6IG51bGwsXG4gICAgc3lzdGVtRXJyb3JIYW5kbGVyOiBudWxsLFxuICAgIGRvbWFpbkNoYW5nZVRyaWdnZXI6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKCgoKF9hID0gcmVzID09PSBudWxsIHx8IHJlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzLmVyck1zZykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluZGV4T2YoJ0NPTk5FQ1RJT05fUkVGVVNFRCcpKSA+PSAwIHx8ICgoX2IgPSByZXMgPT09IG51bGwgfHwgcmVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXMuZXJyTXNnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaW5kZXhPZignRVJSX0NPTk5FQ1RJT05fUkVTRVQnKSkgPj0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGlzRml4U3VjY2Vzc0NvbXBsZXRlVGltaW5nOiBmYWxzZVxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZmF1bHRDb25maWc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMjl1Wm1sbkxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNOMGIzSmxMMk52Ym1acFp5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVWQkxFbEJRVTBzWVVGQllTeEhRVUZuUWp0SlFVTXZRaXhYUVVGWExFVkJRVVVzVTBGQlV6dEpRVU4wUWl4WlFVRlpPMUZCUTFJc1QwRkJUeXhMUVVGTExFTkJRVUU3U1VGRGFFSXNRMEZCUXp0SlFVTkVMR0ZCUVdFc1JVRkJSVHRSUVVOWUxFZEJRVWNzUlVGQlJTeEZRVUZGTzFGQlExQXNUMEZCVHl4RlFVRkZMR05CUVUwc1EwRkJRenRMUVVOdVFqdEpRVU5FTEdOQlFXTTdVVUZEVml4UFFVRlBMRWxCUVVrc1EwRkJRVHRKUVVObUxFTkJRVU03U1VGRFJDeFRRVUZUTEVWQlFVVXNSVUZCUlR0SlFVTmlMRk5CUVZNc1JVRkJSU3hGUVVGRk8wbEJRMklzYVVKQlFXbENMRVZCUVVVc1MwRkJTenRKUVVONFFpeFZRVUZWTEVWQlFVVXNUVUZCVFR0SlFVTnNRaXhaUVVGWkxGbEJRVU1zUjBGQlVUdFJRVU5xUWl4UFFVRlBMRWRCUVVjc1EwRkJRVHRKUVVOa0xFTkJRVU03U1VGRFJDeGhRVUZoTEVWQlFVVXNTMEZCU3p0SlFVTndRaXhaUVVGWkxFVkJRVVVzUTBGQlF6dEpRVU5tTEdGQlFXRXNSVUZCUlN4SlFVRkpPMGxCUTI1Q0xGTkJRVk1zUlVGQlJTeExRVUZMTzBsQlEyaENMRkZCUVZFc1JVRkJSU3hMUVVGTE8wbEJRMllzVlVGQlZTeEZRVUZGTEV0QlFVczdTVUZGYWtJc1owSkJRV2RDTEVWQlFVVXNhMEpCUVd0Q08wbEJSWEJETEZsQlFWa3NSVUZCUlN4SlFVRkpPMGxCUld4Q0xGVkJRVlVzUlVGQlJTeEpRVUZKTzBsQlJXaENMR3RDUVVGclFpeEZRVUZGTEVsQlFVazdTVUZGZUVJc2JVSkJRVzFDTEVWQlFVVXNWVUZCUXl4SFFVRTBRenM3VVVGRk9VUXNTVUZCU1N4RFFVRkRMRU5CUVVFc1RVRkJRU3hIUVVGSExHRkJRVWdzUjBGQlJ5eDFRa0ZCU0N4SFFVRkhMRU5CUVVVc1RVRkJUU3d3UTBGQlJTeFBRVUZQTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zUzBGQlNTeERRVUZETEVsQlFVa3NRMEZCUVN4TlFVRkJMRWRCUVVjc1lVRkJTQ3hIUVVGSExIVkNRVUZJTEVkQlFVY3NRMEZCUlN4TlFVRk5MREJEUVVGRkxFOUJRVThzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhMUVVGSkxFTkJRVU1zUTBGQlF5eEZRVUZGTzFsQlEzaEhMRTlCUVU4c1NVRkJTU3hEUVVGRE8xTkJRMlk3VVVGRFJDeFBRVUZQTEV0QlFVc3NRMEZCUXp0SlFVTnFRaXhEUVVGRE8wbEJSVVFzTUVKQlFUQkNMRVZCUVVVc1MwRkJTenREUVVOd1F5eERRVUZETzBGQlJVWXNhMEpCUVdVc1lVRkJZU3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dTVWx1YVhSUGNIUnBiMjRnZlNCbWNtOXRJQ2N1TGk5cGJuUmxjbVpoWTJVblhHNWNibU52Ym5OMElHUmxabUYxYkhSRGIyNW1hV2M2SUVsSmJtbDBUM0IwYVc5dUlEMGdlMXh1SUNBZ0lITmxjM05wYjI1T1lXMWxPaUJjSW5ObGMzTnBiMjVjSWl4Y2JpQWdJQ0JzYjJkcGJsUnlhV2RuWlhJb0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlZ4dUlDQWdJSDBzWEc0Z0lDQWdZMjlrWlZSdlUyVnpjMmx2YmpvZ2UxeHVJQ0FnSUNBZ0lDQjFjbXc2SUZ3aVhDSXNYRzRnSUNBZ0lDQWdJSE4xWTJObGMzTTZJQ2dwUFQ0Z2UzMWNiaUFnSUNCOUxGeHVJQ0FnSUhOMVkyTmxjM05VY21sbloyVnlLQ2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpWeHVJQ0FnSUgwc1hHNGdJQ0FnYzJWMFNHVmhaR1Z5T2lCN2ZTeGNiaUFnSUNCMWNteFFaWEptYVhnNklGd2lYQ0lzWEc0Z0lDQWdaRzlPYjNSRGFHVmphMU5sYzNOcGIyNDZJR1poYkhObExGeHVJQ0FnSUdWeWNtOXlWR2wwYkdVNklGd2k1cE9ONUwyYzVhU3g2TFNsWENJc1hHNGdJQ0FnWlhKeWIzSkRiMjUwWlc1MEtISmxjem9nWVc1NUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE5jYmlBZ0lDQjlMRnh1SUNBZ0lHVnljbTl5VW1WMGNubENkRzQ2SUdaaGJITmxMRnh1SUNBZ0lISmxURzluYVc1TWFXMXBkRG9nTXl4Y2JpQWdJQ0JsY25KdmNrTmhiR3hpWVdOck9pQnVkV3hzTEZ4dUlDQWdJSEpsY0c5eWRFTkhTVG9nWm1Gc2MyVXNYRzRnSUNBZ2JXOWphMHB6YjI0NklHWmhiSE5sTEZ4dUlDQWdJR2RzYjJKaGJFUmhkR0U2SUdaaGJITmxMRnh1SUNBZ0lDOHZJSE5sYzNOcGIyN2xuS2ptbkt6bG5MRG52SlBsclpqbm1vUnJaWGxjYmlBZ0lDQnpaWE56YVc5dVJYaHdhWEpsUzJWNU9pQmNJbk5sYzNOcGIyNUZlSEJwY21WTFpYbGNJaXhjYmlBZ0lDQXZMeURvaDZybHJwcmt1WW5wbEpub3I2L2xwSVRua0libGg3M21sYkJjYmlBZ0lDQmxjbkp2Y2toaGJtUnNaWEk2SUc1MWJHd3NYRzRnSUNBZ0x5OGc2SyszNXJHQzVZK1I2WUNCNVltTjc3eU01bytRNUw2YmFHOXZhK2U3bWVXOGdPV1BrZWlBaGVpSHF1V3VtdVM1aWVTL3J1YVV1ZVdQa2VtQWdlV0doZVd1dVZ4dUlDQWdJR0psWm05eVpWTmxibVE2SUc1MWJHd3NYRzRnSUNBZ0x5OGc2SWVxNWE2YTVMbUo1N083NTd1ZjZaU1o2Syt2NWFTRTU1Q0c1WWU5NXBXdzc3eUk1NzJSNTd1YzZaU1o2Syt2Nzd5SlhHNGdJQ0FnYzNsemRHVnRSWEp5YjNKSVlXNWtiR1Z5T2lCdWRXeHNMRnh1SUNBZ0lDOHZJT203bU9pdXBPbVpqZWU2cCtXa2hPZVFodVdIdmVhVnNGeHVJQ0FnSUdSdmJXRnBia05vWVc1blpWUnlhV2RuWlhJNklDaHlaWE02SUZkbFkyaGhkRTFwYm1sd2NtOW5jbUZ0TGtkbGJtVnlZV3hEWVd4c1ltRmphMUpsYzNWc2RDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBdkx5QXRNVEF4SU9XU2pDQXRNVEF5SU9tN21PaXVwT2lIcXVXS3FPbVpqZWU2cDF4dUlDQWdJQ0FnSUNCcFppQW9LSEpsY3o4dVpYSnlUWE5uUHk1cGJtUmxlRTltS0NkRFQwNU9SVU5VU1U5T1gxSkZSbFZUUlVRbktTQStQU0F3SUh4OElISmxjejh1WlhKeVRYTm5QeTVwYm1SbGVFOW1LQ2RGVWxKZlEwOU9Ua1ZEVkVsUFRsOVNSVk5GVkNjcElENDlJREFwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdmU3hjYmlBZ0lDQXZMeURtbUsvbGtLYmt2NjdscEkzb3I3Zm1zWUxubW9SemRXTmpaWE56TDJOdmJYQnNaWFJsNTVxRTVwZTI1YnFQNlpldTZhS1k3N3lNNksrbTZLZUJVa1ZCUkUxRjU1cUVVVUhwZzZqbGlJWmNiaUFnSUNCcGMwWnBlRk4xWTJObGMzTkRiMjF3YkdWMFpWUnBiV2x1WnpvZ1ptRnNjMlZjYm4wN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHUmxabUYxYkhSRGIyNW1hV2M3WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzZXNzaW9uOiAnJyxcbiAgICBzZXNzaW9uRXhwaXJlOiBJbmZpbml0eSxcbiAgICBpc0VuYWJsZUJhY2t1cERvbWFpbjogZmFsc2Vcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljM1JoZEhWekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNOMGIzSmxMM04wWVhSMWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxHdENRVUZsTzBsQlExZ3NUMEZCVHl4RlFVRkZMRVZCUVZrN1NVRkZja0lzWVVGQllTeEZRVUZGTEZGQlFXdENPMGxCUldwRExHOUNRVUZ2UWl4RlFVRkZMRXRCUVVzN1EwRkRka0lzUTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCelpYTnphVzl1T2lBbkp5QmhjeUJ6ZEhKcGJtY3NYRzRnSUNBZ0x5OGdjMlZ6YzJsdmJ1aS9oK2FjbitlYWhPYVh0dW1YdE9lQ3VWeHVJQ0FnSUhObGMzTnBiMjVGZUhCcGNtVTZJRWx1Wm1sdWFYUjVJR0Z6SUc1MWJXSmxjaXhjYmlBZ0lDQXZMeURtbUsvbGtLYmxrSy9ubEtqbHBJZm5sS2psbjUvbGtJMWNiaUFnSUNCcGMwVnVZV0pzWlVKaFkydDFjRVJ2YldGcGJqb2dabUZzYzJWY2JuMGdZWE1nWVc1NVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgTElORUZFRUQgPSAvXFx1MDAwQS9nO1xudmFyIENBUlJJQUdFUkVUVVJOID0gL1xcdTAwMEQvZztcbnZhciBMSU5FX1NFUEFSQVRPUiA9IC9cXHUyMDI4L2c7XG52YXIgUEFSQUdSQVBIX1NFUEFSQVRPUiA9IC9cXHUyMDI5L2c7XG5mdW5jdGlvbiByZXBsYWNlKHJlcykge1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKExJTkVGRUVELCBcIlwiKTtcbiAgICByZXMgPSByZXMucmVwbGFjZShDQVJSSUFHRVJFVFVSTiwgXCJcIik7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoTElORV9TRVBBUkFUT1IsIFwiXCIpO1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKFBBUkFHUkFQSF9TRVBBUkFUT1IsIFwiXCIpO1xuICAgIHJldHVybiByZXM7XG59XG5leHBvcnRzLmRlZmF1bHQgPSByZXBsYWNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYW5OdmJsTjFjR1Z5YzJWMExtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNWMGFXd3Zhbk52YmxOMWNHVnljMlYwTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJWMEVzU1VGQlRTeFJRVUZSTEVkQlFVY3NVMEZCVXl4RFFVRkRPMEZCUXpOQ0xFbEJRVTBzWTBGQll5eEhRVUZITEZOQlFWTXNRMEZCUXp0QlFVTnFReXhKUVVGTkxHTkJRV01zUjBGQlJ5eFRRVUZUTEVOQlFVTTdRVUZEYWtNc1NVRkJUU3h0UWtGQmJVSXNSMEZCUnl4VFFVRlRMRU5CUVVNN1FVRkZkRU1zVTBGQmQwSXNUMEZCVHl4RFFVRkRMRWRCUVZjN1NVRkRla01zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzBsQlEyaERMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEdOQlFXTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVOMFF5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhqUVVGakxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdTVUZEZEVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdTVUZETTBNc1QwRkJUeXhIUVVGSExFTkJRVUU3UVVGRFdpeERRVUZETzBGQlRrUXNNRUpCVFVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaUFnVlNzeU1ESTRJR0Z1WkNCVkt6SXdNamtnWVhKbElHRnNiRzkzWldRZ2FXNXphV1JsSUhOMGNtbHVaM01nYVc0Z1NsTlBUaUFvWVhNZ1lXeHNJR3hwZEdWeVlXeGNiaUFnSUNCVmJtbGpiMlJsSUdOb1lYSmhZM1JsY25NcElHSjFkQ0JLWVhaaFUyTnlhWEIwSUdSbFptbHVaWE1nZEdobGJTQmhjeUJ1Wlhkc2FXNWxYRzRnSUNBZ2MyVndaWEpoZEc5eWN5NGdRbVZqWVhWelpTQnVieUJzYVhSbGNtRnNJRzVsZDJ4cGJtVnpJR0Z5WlNCaGJHeHZkMlZrSUdsdUlHRWdjM1J5YVc1bkxDQjBhR2x6WEc0Z0lDQWdZMkYxYzJWeklHRWdVR0Z5YzJWRmNuSnZjaUJwYmlCMGFHVWdZbkp2ZDNObGNpNGdWMlVnZDI5eWF5QmhjbTkxYm1RZ2RHaHBjeUJwYzNOMVpTQmllVnh1SUNBZ0lISmxjR3hoWTJsdVp5QjBhR1Z0SUhkcGRHZ2dkR2hsSUdWelkyRndaV1FnZG1WeWMybHZiaTRnVkdocGN5QnphRzkxYkdRZ1ltVWdjMkZtWlNCaVpXTmhkWE5sWEc0Z0lDQWdZV05qYjNKa2FXNW5JSFJ2SUhSb1pTQktVMDlPSUhOd1pXTXNJSFJvWlhObElHTm9ZWEpoWTNSbGNuTWdZWEpsSUNwdmJteDVLaUIyWVd4cFpDQnBibk5wWkdWY2JpQWdJQ0JoSUhOMGNtbHVaeUJoYm1RZ2MyaHZkV3hrSUhSb1pYSmxabTl5WlNCdWIzUWdZbVVnY0hKbGMyVnVkQ0JoYm5rZ2IzUm9aWElnY0d4aFkyVnpMbHh1WEc0Z0lDQWdiVzl5WlNCcGJtWnZjbTFoZEdsdmJqb2dhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMM1JqTXprdmNISnZjRzl6WVd3dGFuTnZiaTF6ZFhCbGNuTmxkRnh1S2k5Y2JseHVZMjl1YzNRZ1RFbE9SVVpGUlVRZ1BTQXZYRngxTURBd1FTOW5PMXh1WTI5dWMzUWdRMEZTVWtsQlIwVlNSVlJWVWs0Z1BTQXZYRngxTURBd1JDOW5PMXh1WTI5dWMzUWdURWxPUlY5VFJWQkJVa0ZVVDFJZ1BTQXZYRngxTWpBeU9DOW5PMXh1WTI5dWMzUWdVRUZTUVVkU1FWQklYMU5GVUVGU1FWUlBVaUE5SUM5Y1hIVXlNREk1TDJjN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHWjFibU4wYVc5dUlISmxjR3hoWTJVb2NtVnpPaUJ6ZEhKcGJtY3BJSHRjYmlBZ2NtVnpJRDBnY21WekxuSmxjR3hoWTJVb1RFbE9SVVpGUlVRc0lGd2lYQ0lwTzF4dUlDQnlaWE1nUFNCeVpYTXVjbVZ3YkdGalpTaERRVkpTU1VGSFJWSkZWRlZTVGl3Z1hDSmNJaWs3WEc0Z0lISmxjeUE5SUhKbGN5NXlaWEJzWVdObEtFeEpUa1ZmVTBWUVFWSkJWRTlTTENCY0lsd2lLVHRjYmlBZ2NtVnpJRDBnY21WekxuSmxjR3hoWTJVb1VFRlNRVWRTUVZCSVgxTkZVRUZTUVZSUFVpd2dYQ0pjSWlrN1hHNGdJSEpsZEhWeWJpQnlaWE5jYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBzaG93KHR4dCkge1xuICAgIHd4LnNob3dUb2FzdCh7XG4gICAgICAgIHRpdGxlOiB0eXBlb2YgdHh0ID09PSAnYm9vbGVhbicgPyAn5Yqg6L295LitJyA6IHR4dCxcbiAgICAgICAgaWNvbjogJ2xvYWRpbmcnLFxuICAgICAgICBtYXNrOiB0cnVlLFxuICAgICAgICBkdXJhdGlvbjogNjAwMDBcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgd3guaGlkZVRvYXN0KHt9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzaG93OiBzaG93LFxuICAgIGhpZGU6IGhpZGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzloWkdsdVp5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MWRHbHNMMnh2WVdScGJtY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeFRRVUZUTEVsQlFVa3NRMEZCUXl4SFFVRnhRanRKUVVNdlFpeEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTFRc1MwRkJTeXhGUVVGRkxFOUJRVThzUjBGQlJ5eExRVUZMTEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITzFGQlF6ZERMRWxCUVVrc1JVRkJSU3hUUVVGVE8xRkJRMllzU1VGQlNTeEZRVUZGTEVsQlFVazdVVUZEVml4UlFVRlJMRVZCUVVVc1MwRkJTenRMUVVOc1FpeERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc1UwRkJVeXhKUVVGSk8wbEJRMVFzUlVGQlJTeERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVOeVFpeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hKUVVGSkxFMUJRVUU3U1VGRFNpeEpRVUZKTEUxQlFVRTdRMEZEVUN4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWm5WdVkzUnBiMjRnYzJodmR5aDBlSFE2SUdKdmIyeGxZVzRnZkNCemRISnBibWNwSUh0Y2JpQWdJQ0IzZUM1emFHOTNWRzloYzNRb2UxeHVJQ0FnSUNBZ0lDQjBhWFJzWlRvZ2RIbHdaVzltSUhSNGRDQTlQVDBnSjJKdmIyeGxZVzRuSUQ4Z0orV0tvT2k5dmVTNHJTY2dPaUIwZUhRc1hHNGdJQ0FnSUNBZ0lHbGpiMjQ2SUNkc2IyRmthVzVuSnl4Y2JpQWdJQ0FnSUNBZ2JXRnphem9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdaSFZ5WVhScGIyNDZJRFl3TURBd1hHNGdJQ0FnZlNsY2JuMWNibHh1Wm5WdVkzUnBiMjRnYUdsa1pTZ3BJSHRjYmlBZ0lDQjNlQzVvYVdSbFZHOWhjM1FvZTMwcE8xeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjMmh2ZHl4Y2JpQWdJQ0JvYVdSbFhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZnVuY3Rpb24gc2V0UGFyYW1zKHVybCwgcGFyYW1zKSB7XG4gICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9IFwiXCI7IH1cbiAgICB2YXIgcXVlcnlTdHJpbmdJbmRleCA9IHVybC5pbmRleE9mKFwiP1wiKTtcbiAgICB2YXIga3ZwID0ge307XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICB2YXIgb2xkUXVlcnlTdHJpbmdfMSA9IHVybC5zdWJzdHIocXVlcnlTdHJpbmdJbmRleCArIDEpLnNwbGl0KFwiJlwiKTtcbiAgICAgICAgb2xkUXVlcnlTdHJpbmdfMS5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICB2YXIga3YgPSBvbGRRdWVyeVN0cmluZ18xW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgIGt2cFtrdlswXV0gPSBrdlsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGt2cCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBrdnApLCBwYXJhbXMpO1xuICAgIHZhciBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChrZXksIFwiPVwiKS5jb25jYXQoZW5jb2RlVVJJKGt2cFtrZXldKSk7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdHJpbmdJbmRleCArIDEpICsgcXVlcnlTdHJpbmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdXJsICsgXCI/XCIgKyBxdWVyeVN0cmluZztcbiAgICB9XG59XG5mdW5jdGlvbiByZXBsYWNlRG9tYWluKHVybCkge1xuICAgIGlmICh1cmwgPT09IHZvaWQgMCkgeyB1cmwgPSBcIlwiOyB9XG4gICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuaXNFbmFibGVCYWNrdXBEb21haW4gJiYgY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW5MaXN0ICYmIHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmJhY2t1cERvbWFpbkxpc3QgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIG9yaWdpbiBpbiBjb25maWdfMS5kZWZhdWx0LmJhY2t1cERvbWFpbkxpc3QpIHtcbiAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZihvcmlnaW4pID49IDApIHtcbiAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShvcmlnaW4sIGNvbmZpZ18xLmRlZmF1bHQuYmFja3VwRG9tYWluTGlzdFtvcmlnaW5dKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufVxuZnVuY3Rpb24gaXNJbkJhY2t1cERvbWFpbkxpc3QodXJsKSB7XG4gICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9IFwiXCI7IH1cbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuYmFja3VwRG9tYWluTGlzdCAmJiB0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW5MaXN0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKHZhciBvcmlnaW4gaW4gY29uZmlnXzEuZGVmYXVsdC5iYWNrdXBEb21haW5MaXN0KSB7XG4gICAgICAgICAgICBpZiAodXJsLmluZGV4T2Yob3JpZ2luKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHNldFBhcmFtczogc2V0UGFyYW1zLFxuICAgIHJlcGxhY2VEb21haW46IHJlcGxhY2VEb21haW4sXG4gICAgaXNJbkJhY2t1cERvbWFpbkxpc3Q6IGlzSW5CYWNrdXBEb21haW5MaXN0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhKc0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNWMGFXd3ZkWEpzTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096czdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNNRU5CUVc5RE8wRkJSWEJETEZOQlFWTXNVMEZCVXl4RFFVRkRMRWRCUVdkQ0xFVkJRVVVzVFVGQll6dEpRVUZvUXl4dlFrRkJRU3hGUVVGQkxGRkJRV2RDTzBsQlF5OUNMRWxCUVUwc1owSkJRV2RDTEVkQlFWY3NSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU5zUkN4SlFVRkpMRWRCUVVjc1IwRkJVU3hGUVVGRkxFTkJRVU03U1VGRGJFSXNTVUZCU1N4blFrRkJaMElzU1VGQlNTeERRVUZETEVWQlFVVTdVVUZEZGtJc1NVRkJUU3huUWtGQll5eEhRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1owSkJRV2RDTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJXNUZMR2RDUVVGakxFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNN1dVRkRlRUlzU1VGQlRTeEZRVUZGTEVkQlFXRXNaMEpCUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRiRVFzUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjJRaXhEUVVGRExFTkJRVU1zUTBGQlF6dExRVU5PTzBsQlJVUXNSMEZCUnl4NVFrRkJUeXhIUVVGSExFZEJRVXNzVFVGQlRTeERRVUZETEVOQlFVTTdTVUZGTVVJc1NVRkJUU3hYUVVGWExFZEJRVWNzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNN1UwRkRMMElzUjBGQlJ5eERRVUZETEZWQlFVRXNSMEZCUnp0UlFVTktMRTlCUVU4c1ZVRkJSeXhIUVVGSExHTkJRVWtzVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRkxFTkJRVU03U1VGRE0wTXNRMEZCUXl4RFFVRkRPMU5CUTBRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlJXWXNTVUZCU1N4blFrRkJaMElzU1VGQlNTeERRVUZETEVWQlFVVTdVVUZEZGtJc1QwRkJUeXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNSVUZCUlN4blFrRkJaMElzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4WFFVRlhMRU5CUVVNN1MwRkRMMFE3VTBGQlRUdFJRVU5JTEU5QlFVOHNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhYUVVGWExFTkJRVU03UzBGRGJFTTdRVUZEVEN4RFFVRkRPMEZCUlVRc1UwRkJVeXhoUVVGaExFTkJRVU1zUjBGQlowSTdTVUZCYUVJc2IwSkJRVUVzUlVGQlFTeFJRVUZuUWp0SlFVTnVReXhKUVVGSkxHZENRVUZOTEVOQlFVTXNiMEpCUVc5Q0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4blFrRkJaMElzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTEV0QlFVc3NVVUZCVVN4RlFVRkZPMUZCUTNaSExFdEJRVWtzU1VGQlRTeE5RVUZOTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhuUWtGQlowSXNSVUZCUlR0WlFVTjZReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRk8yZENRVU14UWl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVXNaMEpCUVUwc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU16UkN4TlFVRk5PMkZCUTFRN1UwRkRTanRMUVVOS08wbEJRMFFzVDBGQlR5eEhRVUZITEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUlVRc1UwRkJVeXh2UWtGQmIwSXNRMEZCUXl4SFFVRm5RanRKUVVGb1FpeHZRa0ZCUVN4RlFVRkJMRkZCUVdkQ08wbEJRekZETEVsQlFVa3NSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJRenRKUVVOb1FpeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExHZENRVUZuUWl4TFFVRkxMRkZCUVZFc1JVRkJSVHRSUVVONFJTeExRVUZKTEVsQlFVMHNUVUZCVFN4SlFVRkpMR2RDUVVGTkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVN1dVRkRla01zU1VGQlNTeEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdG5Ra0ZETVVJc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF6dG5Ra0ZEV0N4TlFVRk5PMkZCUTFRN1UwRkRTanRMUVVOS08wbEJRMFFzVDBGQlR5eEhRVUZITEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeFRRVUZUTEZkQlFVRTdTVUZEVkN4aFFVRmhMR1ZCUVVFN1NVRkRZaXh2UWtGQmIwSXNjMEpCUVVFN1EwRkRka0lzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1YVcxd2IzSjBJSE4wWVhSMWN5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5emRHRjBkWE1uWEc1Y2JtWjFibU4wYVc5dUlITmxkRkJoY21GdGN5aDFjbXc2SUhOMGNtbHVaeUE5SUZ3aVhDSXNJSEJoY21GdGN6b2diMkpxWldOMEtTQjdYRzRnSUNBZ1kyOXVjM1FnY1hWbGNubFRkSEpwYm1kSmJtUmxlRG9nYm5WdFltVnlJRDBnZFhKc0xtbHVaR1Y0VDJZb1hDSS9YQ0lwTzF4dUlDQWdJR3hsZENCcmRuQTZJR0Z1ZVNBOUlIdDlPMXh1SUNBZ0lHbG1JQ2h4ZFdWeWVWTjBjbWx1WjBsdVpHVjRJRDQ5SURBcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2IyeGtVWFZsY25sVGRISnBibWNnUFNCMWNtd3VjM1ZpYzNSeUtIRjFaWEo1VTNSeWFXNW5TVzVrWlhnZ0t5QXhLUzV6Y0d4cGRDaGNJaVpjSWlrN1hHNGdJQ0FnSUNBZ0lDOHZJRUIwY3kxcFoyNXZjbVZjYmlBZ0lDQWdJQ0FnYjJ4a1VYVmxjbmxUZEhKcGJtY3VabTl5UldGamFDZ29lQ3dnYVNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYTNZNklITjBjbWx1WjF0ZElEMGdiMnhrVVhWbGNubFRkSEpwYm1kYmFWMHVjM0JzYVhRb1hDSTlYQ0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhM1p3VzJ0Mld6QmRYU0E5SUd0Mld6RmRPMXh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JyZG5BZ1BTQjdMaTR1YTNad0xDQXVMaTV3WVhKaGJYTjlPMXh1WEc0Z0lDQWdZMjl1YzNRZ2NYVmxjbmxUZEhKcGJtY2dQU0JQWW1wbFkzUXVhMlY1Y3locmRuQXBYRzRnSUNBZ0lDQWdJQzV0WVhBb2EyVjVJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmdKSHRyWlhsOVBTUjdaVzVqYjJSbFZWSkpLR3QyY0Z0clpYbGRLWDFnTzF4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUNBZ0lDQXVhbTlwYmloY0lpWmNJaWs3WEc1Y2JpQWdJQ0JwWmlBb2NYVmxjbmxUZEhKcGJtZEpibVJsZUNBK1BTQXdLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIxY213dWMzVmljM1J5YVc1bktEQXNJSEYxWlhKNVUzUnlhVzVuU1c1a1pYZ2dLeUF4S1NBcklIRjFaWEo1VTNSeWFXNW5PMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMWNtd2dLeUJjSWo5Y0lpQXJJSEYxWlhKNVUzUnlhVzVuTzF4dUlDQWdJSDFjYm4xY2JseHVablZ1WTNScGIyNGdjbVZ3YkdGalpVUnZiV0ZwYmloMWNtdzZJSE4wY21sdVp5QTlJRndpWENJcElIdGNiaUFnSUNCcFppQW9jM1JoZEhWekxtbHpSVzVoWW14bFFtRmphM1Z3Ukc5dFlXbHVJQ1ltSUdOdmJtWnBaeTVpWVdOcmRYQkViMjFoYVc1TWFYTjBJQ1ltSUhSNWNHVnZaaUJqYjI1bWFXY3VZbUZqYTNWd1JHOXRZV2x1VEdsemRDQTlQVDBnSjI5aWFtVmpkQ2NwSUh0Y2JpQWdJQ0FnSUNBZ1ptOXlLR052Ym5OMElHOXlhV2RwYmlCcGJpQmpiMjVtYVdjdVltRmphM1Z3Ukc5dFlXbHVUR2x6ZENrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIVnliQzVwYm1SbGVFOW1LRzl5YVdkcGJpa2dQajBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIVnliQ0E5SUhWeWJDNXlaWEJzWVdObEtHOXlhV2RwYml3Z1kyOXVabWxuTG1KaFkydDFjRVJ2YldGcGJreHBjM1JiYjNKcFoybHVYU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSFZ5YkR0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYVhOSmJrSmhZMnQxY0VSdmJXRnBia3hwYzNRb2RYSnNPaUJ6ZEhKcGJtY2dQU0JjSWx3aUtTQjdYRzRnSUNBZ2JHVjBJSEpsY3lBOUlHWmhiSE5sTzF4dUlDQWdJR2xtSUNoamIyNW1hV2N1WW1GamEzVndSRzl0WVdsdVRHbHpkQ0FtSmlCMGVYQmxiMllnWTI5dVptbG5MbUpoWTJ0MWNFUnZiV0ZwYmt4cGMzUWdQVDA5SUNkdlltcGxZM1FuS1NCN1hHNGdJQ0FnSUNBZ0lHWnZjaWhqYjI1emRDQnZjbWxuYVc0Z2FXNGdZMjl1Wm1sbkxtSmhZMnQxY0VSdmJXRnBia3hwYzNRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDFjbXd1YVc1a1pYaFBaaWh2Y21sbmFXNHBJRDQ5SURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWE1nUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnlaWE03WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCelpYUlFZWEpoYlhNc1hHNGdJQ0FnY21Wd2JHRmpaVVJ2YldGcGJpeGNiaUFnSUNCcGMwbHVRbUZqYTNWd1JHOXRZV2x1VEdsemRGeHVmVHRjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmVyc2lvbiA9IHZvaWQgMDtcbnZhciB2ZXJzaW9uID0gX19WRVJTSU9OX187XG5leHBvcnRzLnZlcnNpb24gPSB2ZXJzaW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZG1WeWMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5MlpYSnphVzl1TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096dEJRVVZCTEVsQlFVMHNUMEZCVHl4SFFVRkhMRmRCUVZjc1EwRkJRenRCUVVWdVFpd3dRa0ZCVHlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltUmxZMnhoY21VZ1kyOXVjM1FnWDE5V1JWSlRTVTlPWDE4NklITjBjbWx1Wnp0Y2JseHVZMjl1YzNRZ2RtVnljMmx2YmlBOUlGOWZWa1ZTVTBsUFRsOWZPMXh1WEc1bGVIQnZjblFnZXlCMlpYSnphVzl1SUgwN1hHNGlYWDA9Il0sInNvdXJjZVJvb3QiOiIifQ==
|