PlatformWan17.js 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/assets/script/plat/PlatformWan17.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, '2114e99uJhL9p9wz94O1Atj', 'PlatformWan17');
  13. // script/plat/PlatformWan17.ts
  14. "use strict";
  15. /**
  16. 17玩 SDK
  17. */
  18. var __extends = (this && this.__extends) || (function () {
  19. var extendStatics = function (d, b) {
  20. extendStatics = Object.setPrototypeOf ||
  21. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  22. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  23. return extendStatics(d, b);
  24. };
  25. return function (d, b) {
  26. extendStatics(d, b);
  27. function __() { this.constructor = d; }
  28. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  29. };
  30. })();
  31. Object.defineProperty(exports, "__esModule", { value: true });
  32. var gameCfg_1 = require("../common/gameCfg");
  33. var gameMethod_1 = require("../common/gameMethod");
  34. var Xyc_1 = require("../common/Xyc");
  35. var Config_1 = require("../Config");
  36. var EventConst_1 = require("../data/const/EventConst");
  37. var TypeConst_1 = require("../data/const/TypeConst");
  38. var GameDataCenter_1 = require("../data/GameDataCenter");
  39. var GameController_1 = require("../GameController");
  40. var EventMng_1 = require("../manager/EventMng");
  41. var NativeManager_1 = require("../utils/NativeManager");
  42. var PlatformBase_1 = require("./PlatformBase");
  43. var PlatformWan17 = /** @class */ (function (_super) {
  44. __extends(PlatformWan17, _super);
  45. function PlatformWan17() {
  46. var _this = _super.call(this) || this;
  47. window["NativeNotify"] = {
  48. //native平台回调
  49. OnNativeNotify: function (eventType, eventDataString) {
  50. try {
  51. console.log("NativeNotify OnNativeNotify eventType:" + eventType + ",eventDataString:" + eventDataString);
  52. var dataDict = JSON.parse(eventDataString);
  53. if (eventType == "17WanLogin") { //17登录
  54. if (dataDict.status == "0") {
  55. EventMng_1.default.emit(EventConst_1.LoadEvent.LOAD_PROGRESS, 0.75, "login");
  56. var params_1 = {
  57. pid: Config_1.default.pid,
  58. param: [dataDict.accountid, dataDict.sessionid]
  59. };
  60. // if (dataDict.status != 0) {
  61. // GameDataCenter.plat.showErrDialog(GameErrCode.errPlatLogin)
  62. // return
  63. // }
  64. setTimeout(function () {
  65. GameController_1.default.network.send(Xyc_1.PlayerLogin.url, params_1, function (result) {
  66. console.log("后段验证返回", JSON.stringify(result));
  67. if (result.type != 1) {
  68. if (gameMethod_1.gameMethod.isEmpty(result.win) || gameMethod_1.gameMethod.isEmpty(result.win.msgOut)) {
  69. GameDataCenter_1.default.plat.showErrDialog(TypeConst_1.GameErrCode.errGamePlatLogin);
  70. }
  71. return;
  72. }
  73. EventMng_1.default.emit(EventConst_1.LoadEvent.LOAD_PROGRESS, 1, "login");
  74. if (result.type == 1 && result.platBack) {
  75. GameDataCenter_1.default.plat.instance.openId = result.platBack.openid;
  76. GameDataCenter_1.default.plat.instance.loginParams = [result.platBack.token];
  77. console.log("后端验证成功", GameDataCenter_1.default.plat.instance.openId);
  78. // // 加载广告组件
  79. //GameDataCenter.plat.instance.initRewardedVideoAd(AD_VIDEO_KEY.welChest)
  80. // 获取邀请者uuid
  81. var inviter = "";
  82. GameDataCenter_1.default.plat.instance.login(inviter);
  83. }
  84. else {
  85. console.log("PlayerLogin.url 返回数据异常");
  86. if (gameMethod_1.gameMethod.isEmpty(result.win) || gameMethod_1.gameMethod.isEmpty(result.win.msgOut)) {
  87. GameDataCenter_1.default.plat.showErrDialog(TypeConst_1.GameErrCode.errGamePlatLogin);
  88. }
  89. }
  90. });
  91. }, 1000);
  92. }
  93. else if (dataDict.status == "1") {
  94. //玩家取消登录,显示登录按钮
  95. EventMng_1.default.emit(EventConst_1.LoadEvent.SHOW_LOGIN_BTN);
  96. }
  97. else if (dataDict.status == "2") {
  98. //玩家注销,退出游戏
  99. GameDataCenter_1.default.plat.instance.restart();
  100. }
  101. else {
  102. GameDataCenter_1.default.plat.showErrDialog(TypeConst_1.GameErrCode.errPlatLogin);
  103. }
  104. }
  105. else if (eventType == "17WanPay") { //17支付
  106. if (dataDict.status == 0) {
  107. //充值成功
  108. if (Config_1.default.paySuccAdokId != null) {
  109. clearInterval(Config_1.default.paySuccAdokId);
  110. Config_1.default.paySuccAdokId = null;
  111. }
  112. Config_1.default.paySuccAdokIndex = 0;
  113. Config_1.default.paySuccAdokId = setInterval(function () {
  114. Config_1.default.paySuccAdokIndex++;
  115. if (Config_1.default.paySuccAdokIndex >= 5) {
  116. clearInterval(Config_1.default.paySuccAdokId);
  117. Config_1.default.paySuccAdokId = null;
  118. }
  119. GameDataCenter_1.default.time.sendAdok();
  120. }, 1000);
  121. }
  122. else if (dataDict.status == 1) {
  123. //充值失败
  124. }
  125. else {
  126. //待审核中
  127. }
  128. }
  129. else if (eventType == "17WanShare") { //17分享
  130. }
  131. else if (eventType == "17WanAdReward") { //广告
  132. GameDataCenter_1.default.adVideo.onXiadanSucc(); // 改成直接调用,不回调了
  133. }
  134. else if (eventType == "17WanAdLoad") { //广告加载完成
  135. console.log("17WanAdLoad adUnitId:", this.adId);
  136. if (!gameMethod_1.gameMethod.isEmpty(this.adId)) {
  137. NativeManager_1.default.CallToNative("On17ShowAd", [{ "Name": "sceneId", "Value": this.adId }], "");
  138. }
  139. }
  140. else if (eventType == "17WanChannel") { //获取渠道名称
  141. //GameDataCenter.plat.instance.channel = dataDict.channel
  142. }
  143. else if (eventType == "getClipboardText") {
  144. //EventMng.emit(duihuanEvent.GetText, dataDict.msg);
  145. }
  146. else {
  147. console.log("NativeNotify OnNativeNotify not find eventType: " + eventType);
  148. }
  149. }
  150. catch (error) {
  151. console.log("NativeNotify OnNativeNotify error: " + error.stack);
  152. }
  153. },
  154. };
  155. return _this;
  156. }
  157. PlatformWan17.prototype.showLoginView = function () {
  158. console.log("平台sdk初始化...");
  159. EventMng_1.default.emit(EventConst_1.LoadEvent.LOAD_PROGRESS, 0.25, "login");
  160. var packageInfo = gameCfg_1.default.packageInfo.getItem(Config_1.default.pid);
  161. NativeManager_1.default.CallToNative("On17WanInit", {}, "");
  162. };
  163. // 上报用户信息
  164. PlatformWan17.prototype.reportUserInfo = function (res) {
  165. console.log("上报用户信息", res);
  166. };
  167. // 上报角色数据
  168. PlatformWan17.prototype.reportRole = function (event) {
  169. var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
  170. if (GameDataCenter_1.default.sevBack == null) {
  171. return;
  172. }
  173. if (GameDataCenter_1.default.sevBack.userInfo == null) {
  174. return;
  175. }
  176. console.log("上报角色数据:", event);
  177. var onlineTime = 0;
  178. if (GameDataCenter_1.default.time.onlineTime > 0) {
  179. onlineTime = GameDataCenter_1.default.time.sevTime - GameDataCenter_1.default.time.onlineTime;
  180. }
  181. var sceneValue = 0;
  182. if (event == TypeConst_1.ReportRoleType.create) {
  183. sceneValue = 1;
  184. }
  185. else if (event == TypeConst_1.ReportRoleType.levelup) {
  186. sceneValue = 2;
  187. }
  188. var power = GameDataCenter_1.default.zhanLi.getTotalZhanLi(GameDataCenter_1.default.sevBack);
  189. var clubName = (_d = (_c = (_b = (_a = GameDataCenter_1.default.sevBack) === null || _a === void 0 ? void 0 : _a.club) === null || _b === void 0 ? void 0 : _b.a) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : "";
  190. var level = (_h = (_g = (_f = (_e = GameDataCenter_1.default.sevBack) === null || _e === void 0 ? void 0 : _e.userInfo) === null || _f === void 0 ? void 0 : _f.a) === null || _g === void 0 ? void 0 : _g.level) !== null && _h !== void 0 ? _h : 1;
  191. var sid = (_l = (_k = (_j = GameDataCenter_1.default.sevBack) === null || _j === void 0 ? void 0 : _j.userInfo) === null || _k === void 0 ? void 0 : _k.a) === null || _l === void 0 ? void 0 : _l.sid;
  192. var itemNum = GameDataCenter_1.default.item.getItemCount(TypeConst_1.ConstItem.gem);
  193. var sex = (_o = (_m = GameDataCenter_1.default.sevBack.userInfo) === null || _m === void 0 ? void 0 : _m.a) === null || _o === void 0 ? void 0 : _o.sex;
  194. var exp = (_q = (_p = GameDataCenter_1.default.sevBack.actJingJie) === null || _p === void 0 ? void 0 : _p.a) === null || _q === void 0 ? void 0 : _q.exp;
  195. var iscz = (_t = (_s = (_r = GameDataCenter_1.default.sevBack.userInfo) === null || _r === void 0 ? void 0 : _r.a) === null || _s === void 0 ? void 0 : _s.iscz) !== null && _t !== void 0 ? _t : 0;
  196. var regtime = (_v = (_u = GameDataCenter_1.default.sevBack.userInfo) === null || _u === void 0 ? void 0 : _u.a) === null || _v === void 0 ? void 0 : _v.regtime;
  197. var userInfo17 = {
  198. ingot: "",
  199. playerId: GameDataCenter_1.default.user.uuid,
  200. factionName: clubName,
  201. vipLevel: "0",
  202. serverName: GameDataCenter_1.default.user.serverName,
  203. playerLevel: level,
  204. serverId: sid,
  205. playerName: GameDataCenter_1.default.user.nickName,
  206. campId: "",
  207. roleSex: sex,
  208. careerId: "",
  209. experience: exp,
  210. coin: itemNum,
  211. payment: iscz,
  212. roleCTime: regtime,
  213. sceneValue: sceneValue,
  214. };
  215. NativeManager_1.default.CallToNative("On17WanOutInGame", [{ "Name": "userInfo", "Value": JSON.stringify(userInfo17) }], "");
  216. };
  217. PlatformWan17.prototype.pay = function (orderId, order10cs, param) {
  218. var packageInfo = gameCfg_1.default.packageInfo.getItem(Config_1.default.pid);
  219. var feePoint = order10cs;
  220. var payUrl = packageInfo.wayhttp + "player/pay/" + Config_1.default.pid;
  221. NativeManager_1.default.CallToNative("On17WanPay", [{ "Name": "orderId", "Value": orderId }, { "Name": "url", "Value": payUrl }, { "Name": "sum", "Value": param.price.toString() }, { "Name": "feePoint", "Value": feePoint }, { "Name": "desc", "Value": param.productDesc }], "");
  222. //17玩 xiao7特殊处理,调支付就开始轮询,降低支付到账延迟
  223. // if (Config.paySuccAdokId != null) {
  224. // clearInterval(Config.paySuccAdokId)
  225. // Config.paySuccAdokId = null
  226. // }
  227. // Config.paySuccAdokIndex = 0
  228. // Config.paySuccAdokId = setInterval(() => {
  229. // Config.paySuccAdokIndex++
  230. // if (Config.paySuccAdokIndex >= 20) {
  231. // clearInterval(Config.paySuccAdokId)
  232. // Config.paySuccAdokId = null
  233. // }
  234. // GameDataCenter.time.sendAdok()
  235. // }, 1000)
  236. };
  237. PlatformWan17.prototype.initRewardedVideoAd = function (adkey) {
  238. // GameDataCenter.plat.instance.adUnitId = GameDataCenter.adVideo.getAdUnitID(adkey)
  239. // NativeManager.CallToNative("On17LoadAd",[{"Name":"sceneId", "Value":GameDataCenter.plat.instance.adUnitId}],"")
  240. };
  241. PlatformWan17.prototype.showRewardAd = function (adId, kid, order11Id) {
  242. this.adId = adId;
  243. NativeManager_1.default.CallToNative("On17ShowAd", [{ "Name": "sceneId", "Value": this.adId }], "");
  244. };
  245. //打开浏览器打开链接
  246. PlatformWan17.prototype.openUrl = function (url) {
  247. NativeManager_1.default.CallToNative("OnOpenBrowser", [{ "Name": "url", "Value": url }], "");
  248. };
  249. //看运营提供什么 提供手Q链接就用这个 , 提供网址链接就用浏览器打开
  250. PlatformWan17.prototype.addQQ = function (url) {
  251. NativeManager_1.default.CallToNative("OnAddQQ", [{ "Name": "url", "Value": url }], "");
  252. };
  253. PlatformWan17.prototype.joinQQGroup = function (url, cb) {
  254. NativeManager_1.default.CallToNative("OnJoinQQGroup", [{ "Name": "url", "Value": url }], "");
  255. if (cb) {
  256. cb();
  257. }
  258. };
  259. PlatformWan17.prototype.getChannel = function () {
  260. NativeManager_1.default.CallToNative("OnGetChannel", [], "");
  261. };
  262. PlatformWan17.prototype.share = function (title, imageUrl, query, contents, hashtag_ids, app_id, group_label_id) {
  263. var data = {
  264. "title": title,
  265. "imageUrl": imageUrl,
  266. "query": query,
  267. "contents": contents,
  268. "hashtag_ids": hashtag_ids,
  269. "app_id": app_id,
  270. "group_label_id": group_label_id,
  271. };
  272. //NativeManager.CallToNative("OnShare2Tap",[{"Name":"data", "Value":JSON.stringify(data)}],"")//直接分享 (不存网图到本地)
  273. NativeManager_1.default.CallToNative("OnSaveUrlImg", [{ "Name": "data", "Value": JSON.stringify(data) }], ""); // 存图并分享 (存图到本地再拉起分享)
  274. };
  275. PlatformWan17.prototype.getClipboardText = function () {
  276. NativeManager_1.default.CallToNative("getClipboardText", {}, "");
  277. };
  278. PlatformWan17.prototype.reShowLogInView = function () {
  279. NativeManager_1.default.CallToNative("On17WanLogin", {}, "");
  280. };
  281. return PlatformWan17;
  282. }(PlatformBase_1.default));
  283. exports.default = PlatformWan17;
  284. cc._RF.pop();
  285. }
  286. if (nodeEnv) {
  287. __define(__module.exports, __require, __module);
  288. }
  289. else {
  290. __quick_compile_project__.registerModuleFunc(__filename, function () {
  291. __define(__module.exports, __require, __module);
  292. });
  293. }
  294. })();
  295. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9zY3JpcHQvcGxhdC9QbGF0Zm9ybVdhbjE3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7O0dBR0c7Ozs7Ozs7Ozs7Ozs7OztBQUVILDZDQUF3QztBQUN4QyxtREFBa0Q7QUFDbEQscUNBQTZEO0FBRTdELG9DQUErQjtBQUMvQix1REFBMkU7QUFDM0UscURBQWdIO0FBQ2hILHlEQUFvRDtBQUNwRCxvREFBK0M7QUFFL0MsZ0RBQTJDO0FBQzNDLHdEQUFtRDtBQUNuRCwrQ0FBMEM7QUFDMUM7SUFBMkMsaUNBQVk7SUFHbkQ7UUFBQSxZQUNJLGlCQUFPLFNBeUdWO1FBeEdHLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRztZQUNyQixZQUFZO1lBQ1osY0FBYyxFQUFFLFVBQVUsU0FBUyxFQUFFLGVBQWU7Z0JBQ2hELElBQUk7b0JBQ0EsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3Q0FBd0MsR0FBRyxTQUFTLEdBQUcsbUJBQW1CLEdBQUcsZUFBZSxDQUFDLENBQUM7b0JBQzFHLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQzNDLElBQUksU0FBUyxJQUFJLFlBQVksRUFBRSxFQUFFLE1BQU07d0JBQ25DLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7NEJBQ3hCLGtCQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFTLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTs0QkFDckQsSUFBSSxRQUFNLEdBQW9CO2dDQUMxQixHQUFHLEVBQUUsZ0JBQU0sQ0FBQyxHQUFHO2dDQUNmLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQzs2QkFDbEQsQ0FBQTs0QkFDRCw4QkFBOEI7NEJBQzlCLGtFQUFrRTs0QkFDbEUsYUFBYTs0QkFDYixJQUFJOzRCQUNKLFVBQVUsQ0FBQztnQ0FDUCx3QkFB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QUFDLENBQUEsQ0FBQSxxQkFBcUI7SUFDNUgsQ0FBQztJQUNELHdDQUFnQixHQUFoQjtRQUNJLHVCQUFhLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsdUNBQWUsR0FBZjtRQUNJLHVCQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVMLG9CQUFDO0FBQUQsQ0F4T0EsQUF3T0MsQ0F4TzBDLHNCQUFZLEdBd090RCIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuMTfnjqkgU0RLXG5cbiAqL1xuXG5pbXBvcnQgR2FtZWNmZyBmcm9tIFwiLi4vY29tbW9uL2dhbWVDZmdcIjtcbmltcG9ydCB7IGdhbWVNZXRob2QgfSBmcm9tIFwiLi4vY29tbW9uL2dhbWVNZXRob2RcIjtcbmltcG9ydCB7IFBsYXllckxvZ2luLCBQbGF5ZXJMb2dpblByYW0gfSBmcm9tIFwiLi4vY29tbW9uL1h5Y1wiO1xuaW1wb3J0IHsgU2V2QmFjayB9IGZyb20gXCIuLi9jb21tb24vWHlzXCI7XG5pbXBvcnQgQ29uZmlnIGZyb20gXCIuLi9Db25maWdcIjtcbmltcG9ydCB7IEdhbWVFdmVudCwgTG9hZEV2ZW50LCBQbGF0RXZlbnQgfSBmcm9tIFwiLi4vZGF0YS9jb25zdC9FdmVudENvbnN0XCI7XG5pbXBvcnQgeyBBRF9WSURFT19LRVksIENvbnN0SXRlbSwgR2FtZUVyckNvZGUsIFBheVByb2R1Y3RQYXJhbSwgUmVwb3J0Um9sZVR5cGUgfSBmcm9tIFwiLi4vZGF0YS9jb25zdC9UeXBlQ29uc3RcIjtcbmltcG9ydCBHYW1lRGF0YUNlbnRlciBmcm9tIFwiLi4vZGF0YS9HYW1lRGF0YUNlbnRlclwiO1xuaW1wb3J0IEdhbWVDb250cm9sbGVyIGZyb20gXCIuLi9HYW1lQ29udHJvbGxlclwiO1xuaW1wb3J0IFVJSGVscCBmcm9tIFwiLi4vbG9naWMvdWkvVUlIZWxwXCI7XG5pbXBvcnQgRXZlbnRNbmcgZnJvbSBcIi4uL21hbmFnZXIvRXZlbnRNbmdcIjtcbmltcG9ydCBOYXRpdmVNYW5hZ2VyIGZyb20gXCIuLi91dGlscy9OYXRpdmVNYW5hZ2VyXCI7XG5pbXBvcnQgUGxhdGZvcm1CYXNlIGZyb20gXCIuL1BsYXRmb3JtQmFzZVwiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhdGZvcm1XYW4xNyBleHRlbmRzIFBsYXRmb3JtQmFzZSB7XG4gICAgcmV3YXJkVmlkZW86IGFueVxuICAgIGFkSWQ6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKVxuICAgICAgICB3aW5kb3dbXCJOYXRpdmVOb3RpZnlcIl0gPSB7XG4gICAgICAgICAgICAvL25hdGl2ZeW5s+WPsOWbnuiwg1xuICAgICAgICAgICAgT25OYXRpdmVOb3RpZnk6IGZ1bmN0aW9uIChldmVudFR5cGUsIGV2ZW50RGF0YVN0cmluZykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTmF0aXZlTm90aWZ5IE9uTmF0aXZlTm90aWZ5IGV2ZW50VHlwZTpcIiArIGV2ZW50VHlwZSArIFwiLGV2ZW50RGF0YVN0cmluZzpcIiArIGV2ZW50RGF0YVN0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhRGljdCA9IEpTT04ucGFyc2UoZXZlbnREYXRhU3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcIjE3V2FuTG9naW5cIikgeyAvLzE355m75b2VXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YURpY3Quc3RhdHVzID09IFwiMFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRNbmcuZW1pdChMb2FkRXZlbnQuTE9BRF9QUk9HUkVTUywgMC43NSwgXCJsb2dpblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXM6IFBsYXllckxvZ2luUHJhbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkOiBDb25maWcucGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbTogW2RhdGFEaWN0LmFjY291bnRpZCwgZGF0YURpY3Quc2Vzc2lvbmlkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoZGF0YURpY3Quc3RhdHVzICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgR2FtZURhdGFDZW50ZXIucGxhdC5zaG93RXJyRGlhbG9nKEdhbWVFcnJDb2RlLmVyclBsYXRMb2dpbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYW1lQ29udHJvbGxlci5uZXR3b3JrLnNlbmQoUGxheWVyTG9naW4udXJsLCBwYXJhbXMsIChyZXN1bHQ6IFNldkJhY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5ZCO5q616aqM6K+B6L+U5ZueXCIsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnR5cGUgIT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnYW1lTWV0aG9kLmlzRW1wdHkocmVzdWx0LndpbikgfHwgZ2FtZU1ldGhvZC5pc0VtcHR5KHJlc3VsdC53aW4ubXNnT3V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0LnNob3dFcnJEaWFsb2coR2FtZUVyckNvZGUuZXJyR2FtZVBsYXRMb2dpbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudE1uZy5lbWl0KExvYWRFdmVudC5MT0FEX1BST0dSRVNTLCAxLCBcImxvZ2luXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gMSAmJiByZXN1bHQucGxhdEJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0Lmluc3RhbmNlLm9wZW5JZCA9IHJlc3VsdC5wbGF0QmFjay5vcGVuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0Lmluc3RhbmNlLmxvZ2luUGFyYW1zID0gW3Jlc3VsdC5wbGF0QmFjay50b2tlbl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuWQjuerr+mqjOivgeaIkOWKn1wiLCBHYW1lRGF0YUNlbnRlci5wbGF0Lmluc3RhbmNlLm9wZW5JZClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC8vIOWKoOi9veW5v+WRiue7hOS7tlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vR2FtZURhdGFDZW50ZXIucGxhdC5pbnN0YW5jZS5pbml0UmV3YXJkZWRWaWRlb0FkKEFEX1ZJREVPX0tFWS53ZWxDaGVzdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDojrflj5bpgoDor7fogIV1dWlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGludml0ZXIgPSBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FtZURhdGFDZW50ZXIucGxhdC5pbnN0YW5jZS5sb2dpbihpbnZpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlBsYXllckxvZ2luLnVybCDov5Tlm57mlbDmja7lvILluLhcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2FtZU1ldGhvZC5pc0VtcHR5KHJlc3VsdC53aW4pIHx8IGdhbWVNZXRob2QuaXNFbXB0eShyZXN1bHQud2luLm1zZ091dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FtZURhdGFDZW50ZXIucGxhdC5zaG93RXJyRGlhbG9nKEdhbWVFcnJDb2RlLmVyckdhbWVQbGF0TG9naW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMDApXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFEaWN0LnN0YXR1cyA9PSBcIjFcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v546p5a625Y+W5raI55m75b2V77yM5pi+56S655m75b2V5oyJ6ZKuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRNbmcuZW1pdChMb2FkRXZlbnQuU0hPV19MT0dJTl9CVE4pXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFEaWN0LnN0YXR1cyA9PSBcIjJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v546p5a625rOo6ZSA77yM6YCA5Ye65ri45oiPXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FtZURhdGFDZW50ZXIucGxhdC5pbnN0YW5jZS5yZXN0YXJ0KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLnBsYXQuc2hvd0VyckRpYWxvZyhHYW1lRXJyQ29kZS5lcnJQbGF0TG9naW4pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gXCIxN1dhblBheVwiKSB7ICAvLzE35pSv5LuYXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YURpY3Quc3RhdHVzID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL+WFheWAvOaIkOWKn1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDb25maWcucGF5U3VjY0Fkb2tJZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoQ29uZmlnLnBheVN1Y2NBZG9rSWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZy5wYXlTdWNjQWRva0lkID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJbmRleCA9IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnLnBheVN1Y2NBZG9rSW5kZXgrK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQ29uZmlnLnBheVN1Y2NBZG9rSW5kZXggPj0gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChDb25maWcucGF5U3VjY0Fkb2tJZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZy5wYXlTdWNjQWRva0lkID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLnRpbWUuc2VuZEFkb2soKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMDApXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFEaWN0LnN0YXR1cyA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy/lhYXlgLzlpLHotKVcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL+W+heWuoeaguOS4rVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IFwiMTdXYW5TaGFyZVwiKSB7ICAvLzE35YiG5LqrXG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gXCIxN1dhbkFkUmV3YXJkXCIpIHsgIC8v5bm/5ZGKXG4gICAgICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5hZFZpZGVvLm9uWGlhZGFuU3VjYygpIC8vIOaUueaIkOebtOaOpeiwg+eUqCzkuI3lm57osIPkuoZcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gXCIxN1dhbkFkTG9hZFwiKSB7ICAvL+W5v+WRiuWKoOi9veWujOaIkFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCIxN1dhbkFkTG9hZCBhZFVuaXRJZDpcIiwgdGhpcy5hZElkKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnYW1lTWV0aG9kLmlzRW1wdHkodGhpcy5hZElkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZU1hbmFnZXIuQ2FsbFRvTmF0aXZlKFwiT24xN1Nob3dBZFwiLCBbeyBcIk5hbWVcIjogXCJzY2VuZUlkXCIsIFwiVmFsdWVcIjogdGhpcy5hZElkIH1dLCBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBcIjE3V2FuQ2hhbm5lbFwiKSB7ICAvL+iOt+WPlua4oOmBk+WQjeensFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9HYW1lRGF0YUNlbnRlci5wbGF0Lmluc3RhbmNlLmNoYW5uZWwgPSBkYXRhRGljdC5jaGFubmVsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IFwiZ2V0Q2xpcGJvYXJkVGV4dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL0V2ZW50TW5nLmVtaXQoZHVpaHVhbkV2ZW50LkdldFRleHQsIGRhdGFEaWN0Lm1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk5hdGl2ZU5vdGlmeSBPbk5hdGl2ZU5vdGlmeSBub3QgZmluZCBldmVudFR5cGU6IFwiICsgZXZlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOYXRpdmVOb3RpZnkgT25OYXRpdmVOb3RpZnkgZXJyb3I6IFwiICsgZXJyb3Iuc3RhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93TG9naW5WaWV3KCk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmxvZyhcIuW5s+WPsHNka+WIneWni+WMli4uLlwiKVxuICAgICAgICBFdmVudE1uZy5lbWl0KExvYWRFdmVudC5MT0FEX1BST0dSRVNTLCAwLjI1LCBcImxvZ2luXCIpXG4gICAgICAgIGxldCBwYWNrYWdlSW5mbyA9IEdhbWVjZmcucGFja2FnZUluZm8uZ2V0SXRlbShDb25maWcucGlkKVxuICAgICAgICBOYXRpdmVNYW5hZ2VyLkNhbGxUb05hdGl2ZShcIk9uMTdXYW5Jbml0XCIsIHt9LCBcIlwiKVxuICAgIH1cbiAgICAvLyDkuIrmiqXnlKjmiLfkv6Hmga9cbiAgICByZXBvcnRVc2VySW5mbyhyZXMpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCLkuIrmiqXnlKjmiLfkv6Hmga9cIiwgcmVzKVxuICAgIH1cbiAgICAvLyDkuIrmiqXop5LoibLmlbDmja5cbiAgICByZXBvcnRSb2xlKGV2ZW50OiBSZXBvcnRSb2xlVHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAoR2FtZURhdGFDZW50ZXIuc2V2QmFjayA9PSBudWxsKSB7IHJldHVybiB9XG4gICAgICAgIGlmIChHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvID09IG51bGwpIHsgcmV0dXJuIH1cbiAgICAgICAgY29uc29sZS5sb2coXCLkuIrmiqXop5LoibLmlbDmja46XCIsIGV2ZW50KVxuICAgICAgICBsZXQgb25saW5lVGltZSA9IDBcbiAgICAgICAgaWYgKEdhbWVEYXRhQ2VudGVyLnRpbWUub25saW5lVGltZSA+IDApIHtcbiAgICAgICAgICAgIG9ubGluZVRpbWUgPSBHYW1lRGF0YUNlbnRlci50aW1lLnNldlRpbWUgLSBHYW1lRGF0YUNlbnRlci50aW1lLm9ubGluZVRpbWVcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2NlbmVWYWx1ZSA9IDA7XG4gICAgICAgIGlmIChldmVudCA9PSBSZXBvcnRSb2xlVHlwZS5jcmVhdGUpIHtcbiAgICAgICAgICAgIHNjZW5lVmFsdWUgPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IFJlcG9ydFJvbGVUeXBlLmxldmVsdXApIHtcbiAgICAgICAgICAgIHNjZW5lVmFsdWUgPSAyO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwb3dlciA9IEdhbWVEYXRhQ2VudGVyLnpoYW5MaS5nZXRUb3RhbFpoYW5MaShHYW1lRGF0YUNlbnRlci5zZXZCYWNrKTtcbiAgICAgICAgbGV0IGNsdWJOYW1lID0gR2FtZURhdGFDZW50ZXIuc2V2QmFjaz8uY2x1Yj8uYT8ubmFtZSA/PyBcIlwiO1xuICAgICAgICBsZXQgbGV2ZWwgPSBHYW1lRGF0YUNlbnRlci5zZXZCYWNrPy51c2VySW5mbz8uYT8ubGV2ZWwgPz8gMTtcbiAgICAgICAgbGV0IHNpZCA9IEdhbWVEYXRhQ2VudGVyLnNldkJhY2s/LnVzZXJJbmZvPy5hPy5zaWQ7XG4gICAgICAgIGxldCBpdGVtTnVtID0gR2FtZURhdGFDZW50ZXIuaXRlbS5nZXRJdGVtQ291bnQoQ29uc3RJdGVtLmdlbSk7XG4gICAgICAgIGxldCBzZXggPSBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy5zZXg7XG4gICAgICAgIGxldCBleHAgPSBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLmFjdEppbmdKaWU/LmE/LmV4cDtcbiAgICAgICAgbGV0IGlzY3ogPSBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy5pc2N6ID8/IDA7XG4gICAgICAgIGxldCByZWd0aW1lID0gR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8ucmVndGltZTtcbiAgICAgICAgbGV0IHVzZXJJbmZvMTcgPSB7XG4gICAgICAgICAgICBpbmdvdDogXCJcIiwvL+a4uOaIj+S9meminVxuICAgICAgICAgICAgcGxheWVySWQ6IEdhbWVEYXRhQ2VudGVyLnVzZXIudXVpZCwvL+inkuiJsklEXG4gICAgICAgICAgICBmYWN0aW9uTmFtZTogY2x1Yk5hbWUsLy/luK7mtL5cbiAgICAgICAgICAgIHZpcExldmVsOiBcIjBcIixcbiAgICAgICAgICAgIHNlcnZlck5hbWU6IEdhbWVEYXRhQ2VudGVyLnVzZXIuc2VydmVyTmFtZSxcbiAgICAgICAgICAgIHBsYXllckxldmVsOiBsZXZlbCxcbiAgICAgICAgICAgIHNlcnZlcklkOiBzaWQsXG4gICAgICAgICAgICBwbGF5ZXJOYW1lOiBHYW1lRGF0YUNlbnRlci51c2VyLm5pY2tOYW1lLFxuICAgICAgICAgICAgY2FtcElkOiBcIlwiLC8v6Zi16JClXG4gICAgICAgICAgICByb2xlU2V4OiBzZXgsXG4gICAgICAgICAgICBjYXJlZXJJZDogXCJcIixcbiAgICAgICAgICAgIGV4cGVyaWVuY2U6IGV4cCxcbiAgICAgICAgICAgIGNvaW46IGl0ZW1OdW0sXG4gICAgICAgICAgICBwYXltZW50OiBpc2N6LFxuICAgICAgICAgICAgcm9sZUNUaW1lOiByZWd0aW1lLFxuICAgICAgICAgICAgc2NlbmVWYWx1ZTogc2NlbmVWYWx1ZSxcbiAgICAgICAgfVxuICAgICAgICBOYXRpdmVNYW5hZ2VyLkNhbGxUb05hdGl2ZShcIk9uMTdXYW5PdXRJbkdhbWVcIiwgW3sgXCJOYW1lXCI6IFwidXNlckluZm9cIiwgXCJWYWx1ZVwiOiBKU09OLnN0cmluZ2lmeSh1c2VySW5mbzE3KSB9XSwgXCJcIilcbiAgICB9XG4gICAgcGF5KG9yZGVySWQ6IHN0cmluZywgb3JkZXIxMGNzOiBzdHJpbmcsIHBhcmFtOiBQYXlQcm9kdWN0UGFyYW0pOiB2b2lkIHtcbiAgICAgICAgbGV0IHBhY2thZ2VJbmZvID0gR2FtZWNmZy5wYWNrYWdlSW5mby5nZXRJdGVtKENvbmZpZy5waWQpXG4gICAgICAgIGxldCBmZWVQb2ludCA9IG9yZGVyMTBjcztcbiAgICAgICAgbGV0IHBheVVybDogc3RyaW5nID0gcGFja2FnZUluZm8ud2F5aHR0cCArIFwicGxheWVyL3BheS9cIiArIENvbmZpZy5waWRcbiAgICAgICAgTmF0aXZlTWFuYWdlci5DYWxsVG9OYXRpdmUoXCJPbjE3V2FuUGF5XCIsIFt7IFwiTmFtZVwiOiBcIm9yZGVySWRcIiwgXCJWYWx1ZVwiOiBvcmRlcklkIH0sIHsgXCJOYW1lXCI6IFwidXJsXCIsIFwiVmFsdWVcIjogcGF5VXJsIH0sIHsgXCJOYW1lXCI6IFwic3VtXCIsIFwiVmFsdWVcIjogcGFyYW0ucHJpY2UudG9TdHJpbmcoKSB9LCB7IFwiTmFtZVwiOiBcImZlZVBvaW50XCIsIFwiVmFsdWVcIjogZmVlUG9pbnQgfSwgeyBcIk5hbWVcIjogXCJkZXNjXCIsIFwiVmFsdWVcIjogcGFyYW0ucHJvZHVjdERlc2MgfV0sIFwiXCIpXG4gICAgICAgIC8vMTfnjqkgeGlhbzfnibnmrorlpITnkIbvvIzosIPmlK/ku5jlsLHlvIDlp4vova7or6LvvIzpmY3kvY7mlK/ku5jliLDotKblu7bov59cbiAgICAgICAgLy8gaWYgKENvbmZpZy5wYXlTdWNjQWRva0lkICE9IG51bGwpIHtcbiAgICAgICAgLy8gICAgIGNsZWFySW50ZXJ2YWwoQ29uZmlnLnBheVN1Y2NBZG9rSWQpXG4gICAgICAgIC8vICAgICBDb25maWcucGF5U3VjY0Fkb2tJZCA9IG51bGxcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBDb25maWcucGF5U3VjY0Fkb2tJbmRleCA9IDBcbiAgICAgICAgLy8gQ29uZmlnLnBheVN1Y2NBZG9rSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIC8vICAgICBDb25maWcucGF5U3VjY0Fkb2tJbmRleCsrXG4gICAgICAgIC8vICAgICBpZiAoQ29uZmlnLnBheVN1Y2NBZG9rSW5kZXggPj0gMjApIHtcbiAgICAgICAgLy8gICAgICAgICBjbGVhckludGVydmFsKENvbmZpZy5wYXlTdWNjQWRva0lkKVxuICAgICAgICAvLyAgICAgICAgIENvbmZpZy5wYXlTdWNjQWRva0lkID0gbnVsbFxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgR2FtZURhdGFDZW50ZXIudGltZS5zZW5kQWRvaygpXG4gICAgICAgIC8vIH0sIDEwMDApXG5cbiAgICB9XG5cbiAgICBpbml0UmV3YXJkZWRWaWRlb0FkKGFka2V5OiBBRF9WSURFT19LRVkpIHtcbiAgICAgICAgLy8gR2FtZURhdGFDZW50ZXIucGxhdC5pbnN0YW5jZS5hZFVuaXRJZCA9IEdhbWVEYXRhQ2VudGVyLmFkVmlkZW8uZ2V0QWRVbml0SUQoYWRrZXkpXG4gICAgICAgIC8vIE5hdGl2ZU1hbmFnZXIuQ2FsbFRvTmF0aXZlKFwiT24xN0xvYWRBZFwiLFt7XCJOYW1lXCI6XCJzY2VuZUlkXCIsIFwiVmFsdWVcIjpHYW1lRGF0YUNlbnRlci5wbGF0Lmluc3RhbmNlLmFkVW5pdElkfV0sXCJcIilcbiAgICB9XG4gICAgc2hvd1Jld2FyZEFkKGFkSWQ6IHN0cmluZywga2lkOiBzdHJpbmcsIG9yZGVyMTFJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRJZCA9IGFkSWQ7XG4gICAgICAgIE5hdGl2ZU1hbmFnZXIuQ2FsbFRvTmF0aXZlKFwiT24xN1Nob3dBZFwiLCBbeyBcIk5hbWVcIjogXCJzY2VuZUlkXCIsIFwiVmFsdWVcIjogdGhpcy5hZElkIH1dLCBcIlwiKVxuICAgIH1cbiAgICAvL+aJk+W8gOa1j+iniOWZqOaJk+W8gOmTvuaOpVxuICAgIG9wZW5VcmwodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgTmF0aXZlTWFuYWdlci5DYWxsVG9OYXRpdmUoXCJPbk9wZW5Ccm93c2VyXCIsIFt7IFwiTmFtZVwiOiBcInVybFwiLCBcIlZhbHVlXCI6IHVybCB9XSwgXCJcIilcbiAgICB9XG4gICAgLy/nnIvov5DokKXmj5Dkvpvku4DkuYgg5o+Q5L6b5omLUemTvuaOpeWwseeUqOi/meS4qiDvvIwg5o+Q5L6b572R5Z2A6ZO+5o6l5bCx55So5rWP6KeI5Zmo5omT5byAXG4gICAgYWRkUVEodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgTmF0aXZlTWFuYWdlci5DYWxsVG9OYXRpdmUoXCJPbkFkZFFRXCIsIFt7IFwiTmFtZVwiOiBcInVybFwiLCBcIlZhbHVlXCI6IHVybCB9XSwgXCJcIilcbiAgICB9XG4gICAgam9pblFRR3JvdXAodXJsOiBzdHJpbmcsIGNiPzogRnVuY3Rpb24pIHtcbiAgICAgICAgTmF0aXZlTWFuYWdlci5DYWxsVG9OYXRpdmUoXCJPbkpvaW5RUUdyb3VwXCIsIFt7IFwiTmFtZVwiOiBcInVybFwiLCBcIlZhbHVlXCI6IHVybCB9XSwgXCJcIilcbiAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENoYW5uZWwoKSB7XG4gICAgICAgIE5hdGl2ZU1hbmFnZXIuQ2FsbFRvTmF0aXZlKFwiT25HZXRDaGFubmVsXCIsIFtdLCBcIlwiKVxuICAgIH1cbiAgICBzaGFyZSh0aXRsZTogc3RyaW5nLCBpbWFnZVVybDogc3RyaW5nLCBxdWVyeTogc3RyaW5nLCBjb250ZW50cz86IHN0cmluZywgaGFzaHRhZ19pZHM/OiBzdHJpbmcsIGFwcF9pZD86IHN0cmluZywgZ3JvdXBfbGFiZWxfaWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGRhdGEgPSB7XG4gICAgICAgICAgICBcInRpdGxlXCI6IHRpdGxlLFxuICAgICAgICAgICAgXCJpbWFnZVVybFwiOiBpbWFnZVVybCxcbiAgICAgICAgICAgIFwicXVlcnlcIjogcXVlcnksXG4gICAgICAgICAgICBcImNvbnRlbnRzXCI6IGNvbnRlbnRzLFxuICAgICAgICAgICAgXCJoYXNodGFnX2lkc1wiOiBoYXNodGFnX2lkcyxcbiAgICAgICAgICAgIFwiYXBwX2lkXCI6IGFwcF9pZCxcbiAgICAgICAgICAgIFwiZ3JvdXBfbGFiZWxfaWRcIjogZ3JvdXBfbGFiZWxfaWQsXG4gICAgICAgIH1cbiAgICAgICAgLy9OYXRpdmVNYW5hZ2VyLkNhbGxUb05hdGl2ZShcIk9uU2hhcmUyVGFwXCIsW3tcIk5hbWVcIjpcImRhdGFcIiwgXCJWYWx1ZVwiOkpTT04uc3RyaW5naWZ5KGRhdGEpfV0sXCJcIikvL+ebtOaOpeWIhuS6qyAo5LiN5a2Y572R5Zu+5Yiw5pys5ZywKVxuICAgICAgICBOYXRpdmVNYW5hZ2VyLkNhbGxUb05hdGl2ZShcIk9uU2F2ZVVybEltZ1wiLCBbeyBcIk5hbWVcIjogXCJkYXRhXCIsIFwiVmFsdWVcIjogSlNPTi5zdHJpbmdpZnkoZGF0YSkgfV0sIFwiXCIpLy8g5a2Y5Zu+5bm25YiG5LqrICjlrZjlm77liLDmnKzlnLDlho3mi4notbfliIbkuqspXG4gICAgfVxuICAgIGdldENsaXBib2FyZFRleHQoKTogdm9pZCB7XG4gICAgICAgIE5hdGl2ZU1hbmFnZXIuQ2FsbFRvTmF0aXZlKFwiZ2V0Q2xpcGJvYXJkVGV4dFwiLCB7fSwgXCJcIik7XG4gICAgfVxuICAgIHJlU2hvd0xvZ0luVmlldygpOiB2b2lkIHtcbiAgICAgICAgTmF0aXZlTWFuYWdlci5DYWxsVG9OYXRpdmUoXCJPbjE3V2FuTG9naW5cIiwge30sIFwiXCIpO1xuICAgIH1cblxufSJdfQ==