HttpSystem.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/assets/script/mk/system/HttpSystem.js';
  5. var __require = nodeEnv ? function (request) {
  6. return cc.require(request);
  7. } : function (request) {
  8. return __quick_compile_project__.require(request, __filename);
  9. };
  10. function __define (exports, require, module) {
  11. if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
  12. cc._RF.push(module, 'fe015tjuNVJ1rKouaAn8VvC', 'HttpSystem');
  13. // script/mk/system/HttpSystem.ts
  14. "use strict";
  15. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  16. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  17. return new (P || (P = Promise))(function (resolve, reject) {
  18. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  19. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  20. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  21. step((generator = generator.apply(thisArg, _arguments || [])).next());
  22. });
  23. };
  24. var __generator = (this && this.__generator) || function (thisArg, body) {
  25. var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
  26. return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
  27. function verb(n) { return function (v) { return step([n, v]); }; }
  28. function step(op) {
  29. if (f) throw new TypeError("Generator is already executing.");
  30. while (_) try {
  31. 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;
  32. if (y = 0, t) op = [op[0] & 2, t.value];
  33. switch (op[0]) {
  34. case 0: case 1: t = op; break;
  35. case 4: _.label++; return { value: op[1], done: false };
  36. case 5: _.label++; y = op[1]; op = [0]; continue;
  37. case 7: op = _.ops.pop(); _.trys.pop(); continue;
  38. default:
  39. if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
  40. if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
  41. if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
  42. if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
  43. if (t[2]) _.ops.pop();
  44. _.trys.pop(); continue;
  45. }
  46. op = body.call(thisArg, _);
  47. } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
  48. if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
  49. }
  50. };
  51. Object.defineProperty(exports, "__esModule", { value: true });
  52. /**
  53. * @description http请求管理类
  54. * @author 邹勇
  55. */
  56. var HttpSystem = /** @class */ (function () {
  57. function HttpSystem() {
  58. }
  59. /**
  60. * 游戏接口,通用
  61. * @param url 接口完整地址
  62. * @param data 加密前数据
  63. * @param async 是否异步请求(后端要求防阻塞)
  64. */
  65. HttpSystem.prototype.sendData = function (url, data, async) {
  66. if (async === void 0) { async = true; }
  67. return __awaiter(this, void 0, void 0, function () {
  68. var encode, dataN, result;
  69. return __generator(this, function (_a) {
  70. switch (_a.label) {
  71. case 0:
  72. encode = '';
  73. dataN = null;
  74. data.timestamp = Math.floor(new Date().getTime() / 1000);
  75. data.appVersion = g.appData.appVersion;
  76. data.tfChannel = g.appData.tfChannel;
  77. data.versioncfg = g.appData.version;
  78. encode = mk.encrypt.encrypt(JSON.stringify(data), g.loginData.sessionKey, g.appData.appId);
  79. dataN = {
  80. "uin": g.loginData.uin,
  81. "encrypt": encode
  82. };
  83. return [4 /*yield*/, this.sendRequest(url, 'POST', JSON.stringify(dataN), false, async)];
  84. case 1:
  85. result = _a.sent();
  86. return [2 /*return*/, this.checkData(result)];
  87. }
  88. });
  89. });
  90. };
  91. /**
  92. * http请求 登录用
  93. * @param url 请求头
  94. * @param method 'GET' || 'POST'
  95. * @param data 数据
  96. * @param isRsa 是否加密
  97. * @param async 是否异步请求
  98. */
  99. HttpSystem.prototype.sendRequest = function (url, method, data, isRsa, async) {
  100. if (method === void 0) { method = 'POST'; }
  101. if (data === void 0) { data = null; }
  102. if (isRsa === void 0) { isRsa = true; }
  103. if (async === void 0) { async = true; }
  104. url = g.httpData.getServerUrl() + url;
  105. return new Promise(function (resolve, reject) {
  106. var requesttimes = 0;
  107. var httpRequest = new XMLHttpRequest();
  108. var send = function () {
  109. httpRequest.open(method, url, async);
  110. httpRequest.setRequestHeader("Content-Type", 'application/json;charset=UTF-8');
  111. if (isRsa && data != null) {
  112. data = mk.encrypt.rsaEncrypt(data);
  113. }
  114. httpRequest.send(data);
  115. };
  116. // httpRequest.timeout = 30000;
  117. httpRequest.onreadystatechange = function () {
  118. if (httpRequest.readyState === 4) {
  119. if (httpRequest.status === 200) {
  120. var responseStr = httpRequest.responseText;
  121. var response = JSON.parse(responseStr);
  122. mk.console.log('httpResponse', url, response);
  123. resolve(response);
  124. }
  125. else {
  126. mk.console.error("httpRequest.status", httpRequest.status);
  127. reject({ errcode: 1, errmsg: "status..." + httpRequest.status });
  128. }
  129. }
  130. };
  131. httpRequest.ontimeout = function (e) {
  132. requesttimes++;
  133. if (requesttimes >= 3) {
  134. mk.console.error("http.ontimeout", url);
  135. reject({ errcode: 1, errmsg: "ontimeout" });
  136. }
  137. else {
  138. send();
  139. }
  140. };
  141. httpRequest.onerror = function (e) {
  142. mk.console.error("http.onerror", url);
  143. reject({ errcode: 1, errmsg: "onerror" });
  144. };
  145. send();
  146. });
  147. };
  148. /**
  149. * 检测用明文还是密文
  150. * @param response 返回消息
  151. * @param forceData true 明文 false 有密文优先密文,没密文情况下用明文
  152. */
  153. HttpSystem.prototype.checkData = function (response, forceData) {
  154. if (forceData === void 0) { forceData = false; }
  155. var data = null;
  156. if (forceData) {
  157. data = response.data;
  158. }
  159. else {
  160. if (response.encrypt) {
  161. data = mk.encrypt.decrypt(response.encrypt, g.loginData.sessionKey, g.appData.appId);
  162. data = JSON.parse(data);
  163. }
  164. else if (response.data) {
  165. data = response.data;
  166. }
  167. }
  168. response.data = data;
  169. return response;
  170. };
  171. return HttpSystem;
  172. }());
  173. exports.default = HttpSystem;
  174. cc._RF.pop();
  175. }
  176. if (nodeEnv) {
  177. __define(__module.exports, __require, __module);
  178. }
  179. else {
  180. __quick_compile_project__.registerModuleFunc(__filename, function () {
  181. __define(__module.exports, __require, __module);
  182. });
  183. }
  184. })();
  185. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcc2NyaXB0XFxta1xcc3lzdGVtXFxIdHRwU3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7OztHQUdHO0FBQ0g7SUFDSTtJQUNBLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNVLDZCQUFRLEdBQXJCLFVBQXNCLEdBQUcsRUFBRSxJQUFTLEVBQUUsS0FBWTtRQUFaLHNCQUFBLEVBQUEsWUFBWTs7Ozs7O3dCQUMxQyxNQUFNLEdBQUcsRUFBRSxDQUFDO3dCQUNaLEtBQUssR0FBRyxJQUFJLENBQUM7d0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO3dCQUN6RCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO3dCQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO3dCQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO3dCQUNwQyxNQUFNLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMzRixLQUFLLEdBQUc7NEJBQ0osS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRzs0QkFDdEIsU0FBUyxFQUFFLE1BQU07eUJBQ3BCLENBQUE7d0JBQ1kscUJBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FB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LENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw4QkFBUyxHQUFULFVBQVUsUUFBUSxFQUFFLFNBQWlCO1FBQWpCLDBCQUFBLEVBQUEsaUJBQWlCO1FBQ2pDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNmLElBQUksU0FBUyxFQUFFO1lBQ1gsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7U0FDeEI7YUFDSTtZQUNELElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDbEIsSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckYsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0I7aUJBQ0ksSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO2dCQUNwQixJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQzthQUN4QjtTQUNKO1FBQ0QsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDckIsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUNMLGlCQUFDO0FBQUQsQ0F4R0EsQUF3R0MsSUFBQSIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gaHR0cOivt+axgueuoeeQhuexu1xyXG4gKiBAYXV0aG9yIOmCueWLh1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cFN5c3RlbSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOa4uOaIj+aOpeWPo++8jOmAmueUqFxyXG4gICAgICogQHBhcmFtIHVybCDmjqXlj6PlrozmlbTlnLDlnYBcclxuICAgICAqIEBwYXJhbSBkYXRhIOWKoOWvhuWJjeaVsOaNrlxyXG4gICAgICogQHBhcmFtIGFzeW5jIOaYr+WQpuW8guatpeivt+axgu+8iOWQjuerr+imgeaxgumYsumYu+Whnu+8iVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgc2VuZERhdGEodXJsLCBkYXRhOiBhbnksIGFzeW5jID0gdHJ1ZSkge1xyXG4gICAgICAgIGxldCBlbmNvZGUgPSAnJztcclxuICAgICAgICBsZXQgZGF0YU4gPSBudWxsO1xyXG4gICAgICAgIGRhdGEudGltZXN0YW1wID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApO1xyXG4gICAgICAgIGRhdGEuYXBwVmVyc2lvbiA9IGcuYXBwRGF0YS5hcHBWZXJzaW9uO1xyXG4gICAgICAgIGRhdGEudGZDaGFubmVsID0gZy5hcHBEYXRhLnRmQ2hhbm5lbDtcclxuICAgICAgICBkYXRhLnZlcnNpb25jZmcgPSBnLmFwcERhdGEudmVyc2lvbjtcclxuICAgICAgICBlbmNvZGUgPSBtay5lbmNyeXB0LmVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YSksIGcubG9naW5EYXRhLnNlc3Npb25LZXksIGcuYXBwRGF0YS5hcHBJZCk7XHJcbiAgICAgICAgZGF0YU4gPSB7XHJcbiAgICAgICAgICAgIFwidWluXCI6IGcubG9naW5EYXRhLnVpbixcclxuICAgICAgICAgICAgXCJlbmNyeXB0XCI6IGVuY29kZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh1cmwsICdQT1NUJywgSlNPTi5zdHJpbmdpZnkoZGF0YU4pLCBmYWxzZSwgYXN5bmMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrRGF0YShyZXN1bHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogaHR0cOivt+axgiDnmbvlvZXnlKhcclxuICAgICAqIEBwYXJhbSB1cmwg6K+35rGC5aS0XHJcbiAgICAgKiBAcGFyYW0gbWV0aG9kICdHRVQnIHx8ICdQT1NUJyBcclxuICAgICAqIEBwYXJhbSBkYXRhIOaVsOaNrlxyXG4gICAgICogQHBhcmFtIGlzUnNhIOaYr+WQpuWKoOWvhlxyXG4gICAgICogQHBhcmFtIGFzeW5jIOaYr+WQpuW8guatpeivt+axglxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VuZFJlcXVlc3QodXJsLCBtZXRob2Q6IHN0cmluZyA9ICdQT1NUJywgZGF0YTogc3RyaW5nID0gbnVsbCwgaXNSc2E6IGJvb2xlYW4gPSB0cnVlLCBhc3luYyA9IHRydWUpIHtcclxuICAgICAgICB1cmwgPSBnLmh0dHBEYXRhLmdldFNlcnZlclVybCgpICsgdXJsO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlOiAoZGF0YTogYW55KSA9PiB2b2lkLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlcXVlc3R0aW1lcyA9IDA7XHJcbiAgICAgICAgICAgIGxldCBodHRwUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgICAgICBsZXQgc2VuZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGh0dHBSZXF1ZXN0Lm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jKTtcclxuICAgICAgICAgICAgICAgIGh0dHBSZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUnNhICYmIGRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBtay5lbmNyeXB0LnJzYUVuY3J5cHQoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBodHRwUmVxdWVzdC5zZW5kKGRhdGEpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLy8gaHR0cFJlcXVlc3QudGltZW91dCA9IDMwMDAwO1xyXG4gICAgICAgICAgICBodHRwUmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaHR0cFJlcXVlc3QucmVhZHlTdGF0ZSA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChodHRwUmVxdWVzdC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2VTdHIgPSBodHRwUmVxdWVzdC5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZSA9IEpTT04ucGFyc2UocmVzcG9uc2VTdHIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtay5jb25zb2xlLmxvZygnaHR0cFJlc3BvbnNlJywgdXJsLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWsuY29uc29sZS5lcnJvcihcImh0dHBSZXF1ZXN0LnN0YXR1c1wiLCBodHRwUmVxdWVzdC5zdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoeyBlcnJjb2RlOiAxLCBlcnJtc2c6IFwic3RhdHVzLi4uXCIgKyBodHRwUmVxdWVzdC5zdGF0dXMgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBodHRwUmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdHRpbWVzKys7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdHRpbWVzID49IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBtay5jb25zb2xlLmVycm9yKFwiaHR0cC5vbnRpbWVvdXRcIiwgdXJsKTtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoeyBlcnJjb2RlOiAxLCBlcnJtc2c6IFwib250aW1lb3V0XCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzZW5kKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGh0dHBSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgbWsuY29uc29sZS5lcnJvcihcImh0dHAub25lcnJvclwiLCB1cmwpO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KHsgZXJyY29kZTogMSwgZXJybXNnOiBcIm9uZXJyb3JcIiB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgc2VuZCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIOajgOa1i+eUqOaYjuaWh+i/mOaYr+WvhuaWh1xyXG4gICAgICogQHBhcmFtIHJlc3BvbnNlIOi/lOWbnua2iOaBr1xyXG4gICAgICogQHBhcmFtIGZvcmNlRGF0YSB0cnVlIOaYjuaWhyAgZmFsc2Ug5pyJ5a+G5paH5LyY5YWI5a+G5paH77yM5rKh5a+G5paH5oOF5Ya15LiL55So5piO5paHXHJcbiAgICAgKi9cclxuICAgIGNoZWNrRGF0YShyZXNwb25zZSwgZm9yY2VEYXRhID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IG51bGxcclxuICAgICAgICBpZiAoZm9yY2VEYXRhKSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVuY3J5cHQpIHtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSBtay5lbmNyeXB0LmRlY3J5cHQocmVzcG9uc2UuZW5jcnlwdCwgZy5sb2dpbkRhdGEuc2Vzc2lvbktleSwgZy5hcHBEYXRhLmFwcElkKTtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxufVxyXG4iXX0=