(function() {
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
var __module = nodeEnv ? module : {exports:{}};
var __filename = 'preview-scripts/assets/Scripts/mod/ladder/ladder_controller.js';
var __require = nodeEnv ? function (request) {
return cc.require(request);
} : function (request) {
return __quick_compile_project__.require(request, __filename);
};
function __define (exports, require, module) {
if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
cc._RF.push(module, 'af0cdKpdsRCIILDfb8oxAqH', 'ladder_controller');
// Scripts/mod/ladder/ladder_controller.js
"use strict";
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
// 跨服天梯ctrl
//
Create: 2019-07-24 10:23:54
// --------------------------------------------------------------------
var LadderEvent = require("ladder_event");
var BattleController = require("battle_controller");
var BattleConst = require("battle_const");
var CommonAlert = require("commonalert");
var RoleController = require("role_controller");
var LadderController = cc.Class({
"extends": BaseController,
ctor: function ctor() {},
// 初始化配置数据
initConfig: function initConfig() {
var LadderModel = require("ladder_model");
this.model = new LadderModel();
this.model.initConfig();
},
// 返回当前的model
getModel: function getModel() {
return this.model;
},
// 注册监听事件
registerEvents: function registerEvents() {},
// 注册协议接受事件
registerProtocals: function registerProtocals() {
// this.RegisterProtocal(1110, this.on1110);
this.RegisterProtocal(24300, this.handle24300); // 个人数据
this.RegisterProtocal(24301, this.handle24301); // 挑战对手列表
this.RegisterProtocal(24302, this.handle24302); // 对手数据
this.RegisterProtocal(24303, this.handle24303); // 挑战对手
this.RegisterProtocal(24304, this.handle24304); // 刷新对手
this.RegisterProtocal(24305, this.handle24305); // 购买挑战次数
this.RegisterProtocal(24306, this.handle24306); // 一键挑战
this.RegisterProtocal(24307, this.handle24307); // 挑战结算
this.RegisterProtocal(24308, this.handle24308); // 前三名玩家数据
this.RegisterProtocal(24309, this.handle24309); // 排行榜数据
this.RegisterProtocal(24310, this.handle24310); // 我的记录
this.RegisterProtocal(24311, this.handle24311); // 大神风采
this.RegisterProtocal(24312, this.handle24312); // 天梯是否开启
this.RegisterProtocal(24313, this.handle24313); // 英雄殿红点
this.RegisterProtocal(24314, this.handle24314); // 战报红点
this.RegisterProtocal(24315, this.handle24315); // 清除cd时间
this.RegisterProtocal(24316, this.handle24316); // 查看英雄信息
this.RegisterProtocal(24317, this.handle24317); // 挑战次数红点
this.RegisterProtocal(24318, this.handle24318); // 录像分享
},
//请求天梯个人信息
requestLadderMyBaseInfo: function requestLadderMyBaseInfo() {
this.SendProtocal(24300, {});
},
//请求挑战列表
requestLadderEnemyListData: function requestLadderEnemyListData() {
this.SendProtocal(24301, {});
},
//请求玩家信息
requestLadderEnemyData: function requestLadderEnemyData(rid, srv_id) {
var protocal = {};
protocal.rid = rid;
protocal.srv_id = srv_id;
this.SendProtocal(24302, protocal);
},
//请求挑战玩家
requestChallengeEnemy: function requestChallengeEnemy(rid, srv_id) {
var protocal = {};
protocal.rid = rid;
protocal.srv_id = srv_id;
this.SendProtocal(24303, protocal);
},
//请求刷新对手列表
requestRefreshEnemyList: function requestRefreshEnemyList() {
this.SendProtocal(24304, {});
},
//请求购买挑战次数
requestBuyChallengeCount: function requestBuyChallengeCount() {
this.SendProtocal(24305, {});
},
//请求一键挑战
requestQuickChallenge: function requestQuickChallenge() {
this.SendProtocal(24306, {});
},
//请求前三名玩家数据(英雄殿)
requestTopThreeRoleData: function requestTopThreeRoleData() {
this.SendProtocal(24308, {});
},
//请求排行榜信息
requestLadderRankData: function requestLadderRankData() {
this.SendProtocal(24309, {});
},
//请求日志记录
requestMyLogData: function requestMyLogData() {
this.SendProtocal(24310, {});
},
//请求大神风采
requestGodLogData: function requestGodLogData() {
this.SendProtocal(24311, {});
},
//请求天梯是否开启
requestLadderIsOpen: function requestLadderIsOpen() {
this.SendProtocal(24312, {});
},
//请求清除冷却时间
requestCleanCDTime: function requestCleanCDTime() {
this.SendProtocal(24315, {});
},
//请求查看英雄信息
requestCheckRoleInfo: function requestCheckRoleInfo(rid, srv_id, pos) {
var protocal = {};
protocal.rid = rid;
protocal.srv_id = srv_id;
protocal.pos = pos;
this.SendProtocal(24316, protocal);
},
//请求天梯录像分享
requestShareVideo: function requestShareVideo(replay_id, srv_id, channel, target_name) {
var protocal = {};
protocal.replay_id = replay_id;
protocal.srv_id = srv_id;
protocal.channel = channel;
protocal.target_name = target_name;
this.SendProtocal(24316, protocal);
},
//-----------------------------------------------
//个人数据
handle24300: function handle24300(data) {
if (data) {
this.model.setLadderMyBaseInfo(data);
}
gcore.GlobalEvent.fire(LadderEvent.UpdateLadderMyBaseInfo);
},
//挑战对手列表
handle24301: function handle24301(data) {
if (data) {
if (data.type == 0) {
//全部更新
this.model.setLadderEnemyListData(data.f_list);
} else {
//部分更新
this.model.updateLadderEnemyListData(data.f_list);
}
gcore.GlobalEvent.fire(LadderEvent.UpdateAllLadderEnemyList);
}
},
//对手数据
handle24302: function handle24302(data) {
if (data) {
gcore.GlobalEvent.fire(LadderEvent.GetLadderEnemyData, data);
}
},
//挑战对手
handle24303: function handle24303(data) {
message(data.msg);
this.openLadderRoleInfoWindow(false);
},
//刷新对手
handle24304: function handle24304(data) {
message(data.msg);
},
//购买挑战次数
handle24305: function handle24305(data) {
message(data.msg);
if (data.code == 1 && this._temp_rid != null && this._temp_srv_id != null) {
this.requestChallengeEnemy(this._temp_rid, this._temp_srv_id);
this._temp_rid = null;
this._temp_srv_id = null;
} else if (data.code == 1 && this._temp_quick_flag) {
this.requestQuickChallenge();
this._temp_quick_flag = null;
}
},
//一键挑战
handle24306: function handle24306(data) {
message(data.msg);
},
//挑战结算
handle24307: function handle24307(data) {
BattleController.getInstance().openFinishView(true, BattleConst.Fight_Type.LadderWar, data);
},
//前三名数据
handle24308: function handle24308(data) {
if (data && data.rank_list) {
gcore.GlobalEvent.fire(LadderEvent.UpdateLadderTopThreeRoleData, data.rank_list);
}
},
//排行榜数据
handle24309: function handle24309(data) {
if (data) {
gcore.GlobalEvent.fire(LadderEvent.UpdateLadderRankData, data);
}
},
//我的记录
handle24310: function handle24310(data) {
if (data) {
gcore.GlobalEvent.fire(LadderEvent.UpdateLadderMyLogData, data);
}
},
//大神风采
handle24311: function handle24311(data) {
if (data) {
gcore.GlobalEvent.fire(LadderEvent.UpdateLadderGodLogData, data);
}
},
//天梯是否开启
handle24312: function handle24312(data) {
if (data) {
this.model.setLadderOpenStatus(data.code);
gcore.GlobalEvent.fire(LadderEvent.UpdateLadderOpenStatus);
}
},
//英雄殿红点
handle24313: function handle24313(data) {
if (data.code != null) {
if (!this._login_flag && data.code == 1) {
this._login_flag = true;
this.model.updateLadderRedStatus(LadderConst.RedType.TopThree, true);
} else {
this.model.updateLadderRedStatus(LadderConst.RedType.TopThree, false);
}
}
},
//英雄殿红点
handle24314: function handle24314(data) {
if (data.code != null) {
gcore.GlobalEvent.fire(LadderConst.RedType.BattleLog, data.code == 1);
}
},
//清除cd时间
handle24315: function handle24315(data) {
message(data.msg);
},
//查看英雄
handle24316: function handle24316(data) {
message(data.msg);
},
//挑战次数红点
handle24317: function handle24317(data) {
if (data.code != null) {
gcore.GlobalEvent.fire(LadderConst.RedType.Challenge, data.code == 1);
}
},
//录像分享
handle24318: function handle24318(data) {
message(data.msg);
},
//检测挑战次数并且进入战斗
checkJoinLadderBattle: function checkJoinLadderBattle(rid, srv_id, is_quick) {
if (this.model.getLeftChallengeCount() > 0) {
if (is_quick) {
this.requestQuickChallenge();
} else {
this.requestChallengeEnemy(rid, srv_id);
}
} else if (this.model.getTodayLeftBuyCount() > 0) {
var buy_combat_num = this.model.getTodayBuyCount();
var cost_config = Config.sky_ladder_data.data_buy_num[buy_combat_num + 1];
if (cost_config) {
if (is_quick) {
var res = PathTool.getItemRes(3);
var str = cc.js.formatStr(Utils.TI18N("挑战次数不足,是否消耗
%d购买一次挑战次数并且进行一键挑战?"), 3, cost_config.cost);
CommonAlert.show(str, Utils.TI18N("确定"), function () {
this._temp_quick_flag = true;
this.requestBuyChallengeCount();
}.bind(this), Utils.TI18N("取消"), null, 2, null, {
resArr: [res]
});
} else {
var _res = PathTool.getItemRes(3);
var _str = string.format(TI18N("挑战次数不足,是否消耗
%d购买一次挑战次数并且进入战斗?"), 3, cost_config.cost);
CommonAlert.show(_str, Utils.TI18N("确定"), function () {
//缓存布阵数据,购买次数成功返回后直接进入战斗
this._temp_rid = rid;
this._temp_srv_id = srv_id;
this.requestBuyChallengeCount();
this.openLadderRoleInfoWindow(false);
}.bind(this), Utils.TI18N("取消"), null, 2, null, {
resArr: [_res]
});
}
}
} else {
message(Utils.TI18N("挑战次数不足"));
this.openLadderRoleInfoWindow(false);
}
},
//-----------------------打开界面------------
//天梯主界面
openMainWindow: function openMainWindow(status) {
if (status) {
var role_vo = RoleController.getInstance().getRoleVo();
var config = Config.sky_ladder_data.data["const"].join_min_lev;
if (role_vo.lev < config.val) {
message(config.desc);
return;
}
if (this.ladder_main_window == null) {
this.ladder_main_window = Utils.createClass("ladder_main_window");
}
this.ladder_main_window.open();
} else {
if (this.ladder_main_window) {
this.ladder_main_window.close();
this.ladder_main_window = null;
}
}
},
//天梯商店
openLadderShopWindow: function openLadderShopWindow(status) {
if (status) {
if (this.ladder_shop_window == null) {
this.ladder_shop_window = Utils.createClass("ladder_shop_window");
}
this.ladder_shop_window.open();
} else {
if (this.ladder_shop_window) {
this.ladder_shop_window.close();
this.ladder_shop_window = null;
}
}
},
//天梯对手信息
openLadderRoleInfoWindow: function openLadderRoleInfoWindow(status, data) {
if (status) {
if (this.ladder_role_info_window == null) {
this.ladder_role_info_window = Utils.createClass("ladder_role_info_window");
}
this.ladder_role_info_window.open(data);
} else {
if (this.ladder_role_info_window) {
this.ladder_role_info_window.close();
this.ladder_role_info_window = null;
}
}
},
//天梯战报
openLadderLogWindow: function openLadderLogWindow(status) {
if (status) {
if (this.ladder_log_window == null) {
this.ladder_log_window = Utils.createClass("ladder_log_window");
}
this.ladder_log_window.open();
} else {
if (this.ladder_log_window) {
this.ladder_log_window.close();
this.ladder_log_window = null;
}
}
},
//天梯奖励
openLadderAwardWindow: function openLadderAwardWindow(status) {
if (status) {
if (this.ladder_award_window == null) {
this.ladder_award_window = Utils.createClass("ladder_award_window");
}
this.ladder_award_window.open();
} else {
if (this.ladder_award_window) {
this.ladder_award_window.close();
this.ladder_award_window = null;
}
}
},
//天梯排行榜
openLadderRankWindow: function openLadderRankWindow(status) {
if (status) {
if (this.ladder_rank_window == null) {
this.ladder_rank_window = Utils.createClass("ladder_rank_window");
}
this.ladder_rank_window.open();
} else {
if (this.ladder_rank_window) {
this.ladder_rank_window.close();
this.ladder_rank_window = null;
}
}
},
//天梯英雄殿
openLadderTopThreeWindow: function openLadderTopThreeWindow(status) {
if (status) {
if (this.ladder_top_three_window == null) {
this.ladder_top_three_window = Utils.createClass("ladder_top_three_window");
}
this.ladder_top_three_window.open();
} else {
if (this.ladder_top_three_window) {
this.ladder_top_three_window.close();
this.ladder_top_three_window = null;
}
}
},
//天梯结算界面
openLadderBattleResultWindow: function openLadderBattleResultWindow(status, data) {
if (status) {
if (this.ladder_result_window == null) {
this.ladder_result_window = Utils.createClass("ladder_battle_result_window");
}
this.ladder_result_window.open(data);
} else {
if (this.ladder_result_window) {
this.ladder_result_window.close();
this.ladder_result_window = null;
}
}
}
});
module.exports = LadderController;
cc._RF.pop();
}
if (nodeEnv) {
__define(__module.exports, __require, __module);
}
else {
__quick_compile_project__.registerModuleFunc(__filename, function () {
__define(__module.exports, __require, __module);
});
}
})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxsYWRkZXJcXGxhZGRlcl9jb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbIkxhZGRlckV2ZW50IiwicmVxdWlyZSIsIkJhdHRsZUNvbnRyb2xsZXIiLCJCYXR0bGVDb25zdCIsIkNvbW1vbkFsZXJ0IiwiUm9sZUNvbnRyb2xsZXIiLCJMYWRkZXJDb250cm9sbGVyIiwiY2MiLCJDbGFzcyIsIkJhc2VDb250cm9sbGVyIiwiY3RvciIsImluaXRDb25maWciLCJMYWRkZXJNb2RlbCIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJyZWdpc3RlckV2ZW50cyIsInJlZ2lzdGVyUHJvdG9jYWxzIiwiUmVnaXN0ZXJQcm90b2NhbCIsImhhbmRsZTI0MzAwIiwiaGFuZGxlMjQzMDEiLCJoYW5kbGUyNDMwMiIsImhhbmRsZTI0MzAzIiwiaGFuZGxlMjQzMDQiLCJoYW5kbGUyNDMwNSIsImhhbmRsZTI0MzA2IiwiaGFuZGxlMjQzMDciLCJoYW5kbGUyNDMwOCIsImhhbmRsZTI0MzA5IiwiaGFuZGxlMjQzMTAiLCJoYW5kbGUyNDMxMSIsImhhbmRsZTI0MzEyIiwiaGFuZGxlMjQzMTMiLCJoYW5kbGUyNDMxNCIsImhhbmRsZTI0MzE1IiwiaGFuZGxlMjQzMTYiLCJoYW5kbGUyNDMxNyIsImhhbmRsZTI0MzE4IiwicmVxdWVzdExhZGRlck15QmFzZUluZm8iLCJTZW5kUHJvdG9jYWwiLCJyZXF1ZXN0TGFkZGVyRW5lbXlMaXN0RGF0YSIsInJlcXVlc3RMYWRkZXJFbmVteURhdGEiLCJyaWQiLCJzcnZfaWQiLCJwcm90b2NhbCIsInJlcXVlc3RDaGFsbGVuZ2VFbmVteSIsInJlcXVlc3RSZWZyZXNoRW5lbXlMaXN0IiwicmVxdWVzdEJ1eUNoYWxsZW5nZUNvdW50IiwicmVxdWVzdFF1aWNrQ2hhbGxlbmdlIiwicmVxdWVzdFRvcFRocmVlUm9sZURhdGEiLCJyZXF1ZXN0TGFkZGVyUmFua0RhdGEiLCJyZXF1ZXN0TXlMb2dEYXRhIiwicmVxdWVzdEdvZExvZ0RhdGEiLCJyZXF1ZXN0TGFkZGVySXNPcGVuIiwicmVxdWVzdENsZWFuQ0RUaW1lIiwicmVxdWVzdENoZWNrUm9sZUluZm8iLCJwb3MiLCJyZXF1ZXN0U2hhcmVWaWRlbyIsInJlcGxheV9pZCIsImNoYW5uZWwiLCJ0YXJnZXRfbmFtZSIsImRhdGEiLCJzZXRMYWRkZXJNeUJhc2VJbmZvIiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJVcGRhdGVMYWRkZXJNeUJhc2VJbmZvIiwidHlwZSIsInNldExhZGRlckVuZW15TGlzdERhdGEiLCJmX2xpc3QiLCJ1cGRhdGVMYWRkZXJFbmVteUxpc3REYXRhIiwiVXBkYXRlQWxsTGFkZGVyRW5lbXlMaXN0IiwiR2V0TGFkZGVyRW5lbXlEYXRhIiwibWVzc2FnZSIsIm1zZyIsIm9wZW5MYWRkZXJSb2xlSW5mb1dpbmRvdyIsImNvZGUiLCJfdGVtcF9yaWQiLCJfdGVtcF9zcnZfaWQiLCJfdGVtcF9xdWlja19mbGFnIiwiZ2V0SW5zdGFuY2UiLCJvcGVuRmluaXNoVmlldyIsIkZpZ2h0X1R5cGUiLCJMYWRkZXJXYXIiLCJyYW5rX2xpc3QiLCJVcGRhdGVMYWRkZXJUb3BUaHJlZVJvbGVEYXRhIiwiVXBkYXRlTGFkZGVyUmFua0RhdGEiLCJVcGRhdGVMYWRkZXJNeUxvZ0RhdGEiLCJVcGRhdGVMYWRkZXJHb2RMb2dEYXRhIiwic2V0TGFkZGVyT3BlblN0YXR1cyIsIlVwZGF0ZUxhZGRlck9wZW5TdGF0dXMiLCJfbG9naW5fZmxhZyIsInVwZGF0ZUxhZGRlclJlZFN0YXR1cyIsIkxhZGRlckNvbnN0IiwiUmVkVHlwZSIsIlRvcFRocmVlIiwiQmF0dGxlTG9nIiwiQ2hhbGxlbmdlIiwiY2hlY2tKb2luTGFkZGVyQmF0dGxlIiwiaXNfcXVpY2siLCJnZXRMZWZ0Q2hhbGxlbmdlQ291bnQiLCJnZXRUb2RheUxlZnRCdXlDb3VudCIsImJ1eV9jb21iYXRfbnVtIiwiZ2V0VG9kYXlCdXlDb3VudCIsImNvc3RfY29uZmlnIiwiQ29uZmlnIiwic2t5X2xhZGRlcl9kYXRhIiwiZGF0YV9idXlfbnVtIiwicmVzIiwiUGF0aFRvb2wiLCJnZXRJdGVtUmVzIiwic3RyIiwianMiLCJmb3JtYXRTdHIiLCJVdGlscyIsIlRJMThOIiwiY29zdCIsInNob3ciLCJiaW5kIiwicmVzQXJyIiwic3RyaW5nIiwiZm9ybWF0Iiwib3Blbk1haW5XaW5kb3ciLCJzdGF0dXMiLCJyb2xlX3ZvIiwiZ2V0Um9sZVZvIiwiY29uZmlnIiwiam9pbl9taW5fbGV2IiwibGV2IiwidmFsIiwiZGVzYyIsImxhZGRlcl9tYWluX3dpbmRvdyIsImNyZWF0ZUNsYXNzIiwib3BlbiIsImNsb3NlIiwib3BlbkxhZGRlclNob3BXaW5kb3ciLCJsYWRkZXJfc2hvcF93aW5kb3ciLCJsYWRkZXJfcm9sZV9pbmZvX3dpbmRvdyIsIm9wZW5MYWRkZXJMb2dXaW5kb3ciLCJsYWRkZXJfbG9nX3dpbmRvdyIsIm9wZW5MYWRkZXJBd2FyZFdpbmRvdyIsImxhZGRlcl9hd2FyZF93aW5kb3ciLCJvcGVuTGFkZGVyUmFua1dpbmRvdyIsImxhZGRlcl9yYW5rX3dpbmRvdyIsIm9wZW5MYWRkZXJUb3BUaHJlZVdpbmRvdyIsImxhZGRlcl90b3BfdGhyZWVfd2luZG93Iiwib3BlbkxhZGRlckJhdHRsZVJlc3VsdFdpbmRvdyIsImxhZGRlcl9yZXN1bHRfd2luZG93IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxXQUFXLEdBQUdDLE9BQU8sQ0FBQyxjQUFELENBQXpCOztBQUNBLElBQUlDLGdCQUFnQixHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUUsV0FBVyxHQUFHRixPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQSxJQUFJRyxXQUFXLEdBQUdILE9BQU8sQ0FBQyxhQUFELENBQXpCOztBQUNBLElBQUlJLGNBQWMsR0FBR0osT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUVBLElB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QSw0QkFBNEIsRUFBRSxzQ0FBVXZCLE1BQVYsRUFBa0I5RCxJQUFsQixFQUF3QjtBQUNsRCxRQUFJOEQsTUFBSixFQUFZO0FBQ1IsVUFBSSxLQUFLd0Isb0JBQUwsSUFBNkIsSUFBakMsRUFBdUM7QUFDbkMsYUFBS0Esb0JBQUwsR0FBNEJqQyxLQUFLLENBQUNrQixXQUFOLENBQWtCLDZCQUFsQixDQUE1QjtBQUNIOztBQUNELFdBQUtlLG9CQUFMLENBQTBCZCxJQUExQixDQUErQnhFLElBQS9CO0FBQ0gsS0FMRCxNQUtPO0FBQ0gsVUFBSSxLQUFLc0Ysb0JBQVQsRUFBK0I7QUFDM0IsYUFBS0Esb0JBQUwsQ0FBMEJiLEtBQTFCO0FBQ0EsYUFBS2Esb0JBQUwsR0FBNEIsSUFBNUI7QUFDSDtBQUNKO0FBQ0o7QUFyYjJCLENBQVQsQ0FBdkI7QUF3YkFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjlJLGdCQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDot6jmnI3lpKnmoq9jdHJsXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wNy0yNCAxMDoyMzo1NFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBMYWRkZXJFdmVudCA9IHJlcXVpcmUoXCJsYWRkZXJfZXZlbnRcIik7XG52YXIgQmF0dGxlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJiYXR0bGVfY29udHJvbGxlclwiKTtcbnZhciBCYXR0bGVDb25zdCA9IHJlcXVpcmUoXCJiYXR0bGVfY29uc3RcIik7XG52YXIgQ29tbW9uQWxlcnQgPSByZXF1aXJlKFwiY29tbW9uYWxlcnRcIik7XG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xuXG52YXIgTGFkZGVyQ29udHJvbGxlciA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ29udHJvbGxlcixcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMlumFjee9ruaVsOaNrlxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIExhZGRlck1vZGVsID0gcmVxdWlyZShcImxhZGRlcl9tb2RlbFwiKTtcblxuICAgICAgICB0aGlzLm1vZGVsID0gbmV3IExhZGRlck1vZGVsKCk7XG4gICAgICAgIHRoaXMubW9kZWwuaW5pdENvbmZpZygpO1xuICAgIH0sXG5cbiAgICAvLyDov5Tlm57lvZPliY3nmoRtb2RlbFxuICAgIGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhoznm5HlkKzkuovku7ZcbiAgICByZWdpc3RlckV2ZW50czogZnVuY3Rpb24gKCkge1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozljY/orq7mjqXlj5fkuovku7ZcbiAgICByZWdpc3RlclByb3RvY2FsczogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTExMCwgdGhpcy5vbjExMTApO1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjQzMDAsIHRoaXMuaGFuZGxlMjQzMDApICAgICAvLyDkuKrkurrmlbDmja5cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0MzAxLCB0aGlzLmhhbmRsZTI0MzAxKSAgICAgLy8g5oyR5oiY5a+55omL5YiX6KGoXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyNDMwMiwgdGhpcy5oYW5kbGUyNDMwMikgICAgIC8vIOWvueaJi+aVsOaNrlxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjQzMDMsIHRoaXMuaGFuZGxlMjQzMDMpICAgICAvLyDmjJHmiJjlr7nmiYtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0MzA0LCB0aGlzLmhhbmRsZTI0MzA0KSAgICAgLy8g5Yi35paw5a+55omLXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyNDMwNSwgdGhpcy5oYW5kbGUyNDMwNSkgICAgIC8vIOi0reS5sOaMkeaImOasoeaVsFxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjQzMDYsIHRoaXMuaGFuZGxlMjQzMDYpICAgICAvLyDkuIDplK7mjJHmiJhcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0MzA3LCB0aGlzLmhhbmRsZTI0MzA3KSAgICAgLy8g5oyR5oiY57uT566XXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyNDMwOCwgdGhpcy5oYW5kbGUyNDMwOCkgICAgIC8vIOWJjeS4ieWQjeeOqeWutuaVsOaNrlxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjQzMDksIHRoaXMuaGFuZGxlMjQzMDkpICAgICAvLyDmjpLooYzmppzmlbDmja5cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0MzEwLCB0aGlzLmhhbmRsZTI0MzEwKSAgICAgLy8g5oiR55qE6K6w5b2VXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyNDMxMSwgdGhpcy5oYW5kbGUyNDMxMSkgICAgIC8vIOWkp+elnumjjumHh1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjQzMTIsIHRoaXMuaGFuZGxlMjQzMTIpICAgICAvLyDlpKnmoq/mmK/lkKblvIDlkK9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0MzEzLCB0aGlzLmhhbmRsZTI0MzEzKSAgICAgLy8g6Iux6ZuE5q6/57qi54K5XG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyNDMxNCwgdGhpcy5oYW5kbGUyNDMxNCkgICAgIC8vIOaImOaKpee6oueCuVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjQzMTUsIHRoaXMuaGFuZGxlMjQzMTUpICAgICAvLyDmuIXpmaRjZOaXtumXtFxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjQzMTYsIHRoaXMuaGFuZGxlMjQzMTYpICAgICAvLyDmn6XnnIvoi7Hpm4Tkv6Hmga9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0MzE3LCB0aGlzLmhhbmRsZTI0MzE3KSAgICAgLy8g5oyR5oiY5qyh5pWw57qi54K5XG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyNDMxOCwgdGhpcy5oYW5kbGUyNDMxOCkgICAgIC8vIOW9leWDj+WIhuS6q1xuICAgIH0sXG5cbiAgICAvL+ivt+axguWkqeair+S4quS6uuS/oeaBr1xuICAgIHJlcXVlc3RMYWRkZXJNeUJhc2VJbmZvOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI0MzAwLCB7fSk7XG4gICAgfSxcblxuICAgIC8v6K+35rGC5oyR5oiY5YiX6KGoXG4gICAgcmVxdWVzdExhZGRlckVuZW15TGlzdERhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQzMDEsIHt9KTtcbiAgICB9LFxuXG4gICAgLy/or7fmsYLnjqnlrrbkv6Hmga9cbiAgICByZXF1ZXN0TGFkZGVyRW5lbXlEYXRhOiBmdW5jdGlvbiAocmlkLCBzcnZfaWQpIHtcbiAgICAgICAgbGV0IHByb3RvY2FsID0ge31cbiAgICAgICAgcHJvdG9jYWwucmlkID0gcmlkXG4gICAgICAgIHByb3RvY2FsLnNydl9pZCA9IHNydl9pZFxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDMwMiwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICAvL+ivt+axguaMkeaImOeOqeWutlxuICAgIHJlcXVlc3RDaGFsbGVuZ2VFbmVteTogZnVuY3Rpb24gKHJpZCwgc3J2X2lkKSB7XG4gICAgICAgIGxldCBwcm90b2NhbCA9IHt9XG4gICAgICAgIHByb3RvY2FsLnJpZCA9IHJpZFxuICAgICAgICBwcm90b2NhbC5zcnZfaWQgPSBzcnZfaWRcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQzMDMsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgLy/or7fmsYLliLfmlrDlr7nmiYvliJfooahcbiAgICByZXF1ZXN0UmVmcmVzaEVuZW15TGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDMwNCwge30pO1xuICAgIH0sXG5cbiAgICAvL+ivt+axgui0reS5sOaMkeaImOasoeaVsFxuICAgIHJlcXVlc3RCdXlDaGFsbGVuZ2VDb3VudDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDMwNSwge30pO1xuICAgIH0sXG5cbiAgICAvL+ivt+axguS4gOmUruaMkeaImFxuICAgIHJlcXVlc3RRdWlja0NoYWxsZW5nZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDMwNiwge30pO1xuICAgIH0sXG5cbiAgICAvL+ivt+axguWJjeS4ieWQjeeOqeWutuaVsOaNru+8iOiLsembhOauv++8iVxuICAgIHJlcXVlc3RUb3BUaHJlZVJvbGVEYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI0MzA4LCB7fSk7XG4gICAgfSxcblxuICAgIC8v6K+35rGC5o6S6KGM5qac5L+h5oGvXG4gICAgcmVxdWVzdExhZGRlclJhbmtEYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI0MzA5LCB7fSk7XG4gICAgfSxcblxuICAgIC8v6K+35rGC5pel5b+X6K6w5b2VXG4gICAgcmVxdWVzdE15TG9nRGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDMxMCwge30pO1xuICAgIH0sXG5cbiAgICAvL+ivt+axguWkp+elnumjjumHh1xuICAgIHJlcXVlc3RHb2RMb2dEYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI0MzExLCB7fSk7XG4gICAgfSxcblxuICAgIC8v6K+35rGC5aSp5qKv5piv5ZCm5byA5ZCvXG4gICAgcmVxdWVzdExhZGRlcklzT3BlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDMxMiwge30pO1xuICAgIH0sXG5cbiAgICAvL+ivt+axgua4hemZpOWGt+WNtOaXtumXtFxuICAgIHJlcXVlc3RDbGVhbkNEVGltZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDMxNSwge30pO1xuICAgIH0sXG5cbiAgICAvL+ivt+axguafpeeci+iLsembhOS/oeaBr1xuICAgIHJlcXVlc3RDaGVja1JvbGVJbmZvOiBmdW5jdGlvbiAocmlkLCBzcnZfaWQsIHBvcykge1xuICAgICAgICBsZXQgcHJvdG9jYWwgPSB7fVxuICAgICAgICBwcm90b2NhbC5yaWQgPSByaWRcbiAgICAgICAgcHJvdG9jYWwuc3J2X2lkID0gc3J2X2lkXG4gICAgICAgIHByb3RvY2FsLnBvcyA9IHBvc1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDMxNiwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICAvL+ivt+axguWkqeair+W9leWDj+WIhuS6q1xuICAgIHJlcXVlc3RTaGFyZVZpZGVvOiBmdW5jdGlvbiAocmVwbGF5X2lkLCBzcnZfaWQsIGNoYW5uZWwsIHRhcmdldF9uYW1lKSB7XG4gICAgICAgIGxldCBwcm90b2NhbCA9IHt9XG4gICAgICAgIHByb3RvY2FsLnJlcGxheV9pZCA9IHJlcGxheV9pZFxuICAgICAgICBwcm90b2NhbC5zcnZfaWQgPSBzcnZfaWRcbiAgICAgICAgcHJvdG9jYWwuY2hhbm5lbCA9IGNoYW5uZWxcbiAgICAgICAgcHJvdG9jYWwudGFyZ2V0X25hbWUgPSB0YXJnZXRfbmFtZVxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDMxNiwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy/kuKrkurrmlbDmja5cbiAgICBoYW5kbGUyNDMwMDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0TGFkZGVyTXlCYXNlSW5mbyhkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKExhZGRlckV2ZW50LlVwZGF0ZUxhZGRlck15QmFzZUluZm8pO1xuICAgIH0sXG5cbiAgICAvL+aMkeaImOWvueaJi+WIl+ihqFxuICAgIGhhbmRsZTI0MzAxOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PSAwKSB7ICAgICAvL+WFqOmDqOabtOaWsFxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0TGFkZGVyRW5lbXlMaXN0RGF0YShkYXRhLmZfbGlzdCk7XG4gICAgICAgICAgICB9IGVsc2UgeyAgICAgIC8v6YOo5YiG5pu05pawXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVMYWRkZXJFbmVteUxpc3REYXRhKGRhdGEuZl9saXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoTGFkZGVyRXZlbnQuVXBkYXRlQWxsTGFkZGVyRW5lbXlMaXN0KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+WvueaJi+aVsOaNrlxuICAgIGhhbmRsZTI0MzAyOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShMYWRkZXJFdmVudC5HZXRMYWRkZXJFbmVteURhdGEsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5oyR5oiY5a+55omLXG4gICAgaGFuZGxlMjQzMDM6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgICAgICB0aGlzLm9wZW5MYWRkZXJSb2xlSW5mb1dpbmRvdyhmYWxzZSk7XG4gICAgfSxcblxuICAgIC8v5Yi35paw5a+55omLXG4gICAgaGFuZGxlMjQzMDQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgIH0sXG5cbiAgICAvL+i0reS5sOaMkeaImOasoeaVsFxuICAgIGhhbmRsZTI0MzA1OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxICYmIHRoaXMuX3RlbXBfcmlkICE9IG51bGwgJiYgdGhpcy5fdGVtcF9zcnZfaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0Q2hhbGxlbmdlRW5lbXkodGhpcy5fdGVtcF9yaWQsIHRoaXMuX3RlbXBfc3J2X2lkKTtcbiAgICAgICAgICAgIHRoaXMuX3RlbXBfcmlkID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3RlbXBfc3J2X2lkID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmNvZGUgPT0gMSAmJiB0aGlzLl90ZW1wX3F1aWNrX2ZsYWcpIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFF1aWNrQ2hhbGxlbmdlKCk7XG4gICAgICAgICAgICB0aGlzLl90ZW1wX3F1aWNrX2ZsYWcgPSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5LiA6ZSu5oyR5oiYXG4gICAgaGFuZGxlMjQzMDY6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgIH0sXG5cbiAgICAvL+aMkeaImOe7k+eul1xuICAgIGhhbmRsZTI0MzA3OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBCYXR0bGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkZpbmlzaFZpZXcodHJ1ZSwgQmF0dGxlQ29uc3QuRmlnaHRfVHlwZS5MYWRkZXJXYXIsIGRhdGEpXG4gICAgfSxcblxuICAgIC8v5YmN5LiJ5ZCN5pWw5o2uXG4gICAgaGFuZGxlMjQzMDg6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEucmFua19saXN0KSB7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKExhZGRlckV2ZW50LlVwZGF0ZUxhZGRlclRvcFRocmVlUm9sZURhdGEsIGRhdGEucmFua19saXN0KVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5o6S6KGM5qac5pWw5o2uXG4gICAgaGFuZGxlMjQzMDk6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKExhZGRlckV2ZW50LlVwZGF0ZUxhZGRlclJhbmtEYXRhLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+aIkeeahOiusOW9lVxuICAgIGhhbmRsZTI0MzEwOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShMYWRkZXJFdmVudC5VcGRhdGVMYWRkZXJNeUxvZ0RhdGEsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5aSn56We6aOO6YeHXG4gICAgaGFuZGxlMjQzMTE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKExhZGRlckV2ZW50LlVwZGF0ZUxhZGRlckdvZExvZ0RhdGEsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5aSp5qKv5piv5ZCm5byA5ZCvXG4gICAgaGFuZGxlMjQzMTI6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldExhZGRlck9wZW5TdGF0dXMoZGF0YS5jb2RlKTtcbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoTGFkZGVyRXZlbnQuVXBkYXRlTGFkZGVyT3BlblN0YXR1cyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/oi7Hpm4Tmrr/nuqLngrlcbiAgICBoYW5kbGUyNDMxMzogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEuY29kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2xvZ2luX2ZsYWcgJiYgZGF0YS5jb2RlID09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dpbl9mbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnVwZGF0ZUxhZGRlclJlZFN0YXR1cyhMYWRkZXJDb25zdC5SZWRUeXBlLlRvcFRocmVlLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVMYWRkZXJSZWRTdGF0dXMoTGFkZGVyQ29uc3QuUmVkVHlwZS5Ub3BUaHJlZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v6Iux6ZuE5q6/57qi54K5XG4gICAgaGFuZGxlMjQzMTQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLmNvZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShMYWRkZXJDb25zdC5SZWRUeXBlLkJhdHRsZUxvZywgZGF0YS5jb2RlID09IDEpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5riF6ZmkY2Tml7bpl7RcbiAgICBoYW5kbGUyNDMxNTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZylcbiAgICB9LFxuXG4gICAgLy/mn6XnnIvoi7Hpm4RcbiAgICBoYW5kbGUyNDMxNjogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZylcbiAgICB9LFxuXG4gICAgLy/mjJHmiJjmrKHmlbDnuqLngrlcbiAgICBoYW5kbGUyNDMxNzogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEuY29kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKExhZGRlckNvbnN0LlJlZFR5cGUuQ2hhbGxlbmdlLCBkYXRhLmNvZGUgPT0gMSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/lvZXlg4/liIbkuqtcbiAgICBoYW5kbGUyNDMxODogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZylcbiAgICB9LFxuXG4gICAgLy/mo4DmtYvmjJHmiJjmrKHmlbDlubbkuJTov5vlhaXmiJjmlpdcbiAgICBjaGVja0pvaW5MYWRkZXJCYXR0bGU6IGZ1bmN0aW9uIChyaWQsIHNydl9pZCwgaXNfcXVpY2spIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZ2V0TGVmdENoYWxsZW5nZUNvdW50KCkgPiAwKSB7XG4gICAgICAgICAgICBpZiAoaXNfcXVpY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RRdWlja0NoYWxsZW5nZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RDaGFsbGVuZ2VFbmVteShyaWQsIHNydl9pZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGVsLmdldFRvZGF5TGVmdEJ1eUNvdW50KCkgPiAwKSB7XG4gICAgICAgICAgICBsZXQgYnV5X2NvbWJhdF9udW0gPSB0aGlzLm1vZGVsLmdldFRvZGF5QnV5Q291bnQoKTtcbiAgICAgICAgICAgIGxldCBjb3N0X2NvbmZpZyA9IENvbmZpZy5za3lfbGFkZGVyX2RhdGEuZGF0YV9idXlfbnVtW2J1eV9jb21iYXRfbnVtICsgMV07XG4gICAgICAgICAgICBpZiAoY29zdF9jb25maWcpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNfcXVpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlcyA9IFBhdGhUb29sLmdldEl0ZW1SZXMoMyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdHIgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCLmjJHmiJjmrKHmlbDkuI3otrPvvIzmmK/lkKbmtojogJc8aW1nIHNyYz0nJXMnLz4lZOi0reS5sOS4gOasoeaMkeaImOasoeaVsOW5tuS4lOi/m+ihjOS4gOmUruaMkeaImO+8n1wiKSwgMywgY29zdF9jb25maWcuY29zdCk7XG4gICAgICAgICAgICAgICAgICAgIENvbW1vbkFsZXJ0LnNob3coc3RyLCBVdGlscy5USTE4TihcIuehruWumlwiKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVtcF9xdWlja19mbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdEJ1eUNoYWxsZW5nZUNvdW50KCk7XG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgVXRpbHMuVEkxOE4oXCLlj5bmtohcIiksIG51bGwsIDIsIG51bGwsIHsgcmVzQXJyOiBbcmVzXSB9KVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXMgPSBQYXRoVG9vbC5nZXRJdGVtUmVzKDMpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0gc3RyaW5nLmZvcm1hdChUSTE4TihcIuaMkeaImOasoeaVsOS4jei2s++8jOaYr+WQpua2iOiAlzxpbWcgc3JjPSclcycvPiVk6LSt5Lmw5LiA5qyh5oyR5oiY5qyh5pWw5bm25LiU6L+b5YWl5oiY5paX77yfXCIpLCAzLCBjb3N0X2NvbmZpZy5jb3N0KTtcbiAgICAgICAgICAgICAgICAgICAgQ29tbW9uQWxlcnQuc2hvdyhzdHIsIFV0aWxzLlRJMThOKFwi56Gu5a6aXCIpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+e8k+WtmOW4g+mYteaVsOaNru+8jOi0reS5sOasoeaVsOaIkOWKn+i/lOWbnuWQjuebtOaOpei/m+WFpeaImOaWl1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVtcF9yaWQgPSByaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZW1wX3Nydl9pZCA9IHNydl9pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdEJ1eUNoYWxsZW5nZUNvdW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5MYWRkZXJSb2xlSW5mb1dpbmRvdyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgVXRpbHMuVEkxOE4oXCLlj5bmtohcIiksIG51bGwsIDIsIG51bGwsIHsgcmVzQXJyOiBbcmVzXSB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2UoVXRpbHMuVEkxOE4oXCLmjJHmiJjmrKHmlbDkuI3otrNcIikpO1xuICAgICAgICAgICAgdGhpcy5vcGVuTGFkZGVyUm9sZUluZm9XaW5kb3coZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS3miZPlvIDnlYzpnaItLS0tLS0tLS0tLS1cbiAgICAvL+Wkqeair+S4u+eVjOmdolxuICAgIG9wZW5NYWluV2luZG93OiBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgIGxldCByb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBDb25maWcuc2t5X2xhZGRlcl9kYXRhLmRhdGEuY29uc3Quam9pbl9taW5fbGV2O1xuICAgICAgICAgICAgaWYgKHJvbGVfdm8ubGV2IDwgY29uZmlnLnZhbCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UoY29uZmlnLmRlc2MpO1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubGFkZGVyX21haW5fd2luZG93ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhZGRlcl9tYWluX3dpbmRvdyA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwibGFkZGVyX21haW5fd2luZG93XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sYWRkZXJfbWFpbl93aW5kb3cub3BlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMubGFkZGVyX21haW5fd2luZG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWRkZXJfbWFpbl93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhZGRlcl9tYWluX3dpbmRvdyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/lpKnmoq/llYblupdcbiAgICBvcGVuTGFkZGVyU2hvcFdpbmRvdzogZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYWRkZXJfc2hvcF93aW5kb3cgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFkZGVyX3Nob3Bfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJsYWRkZXJfc2hvcF93aW5kb3dcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxhZGRlcl9zaG9wX3dpbmRvdy5vcGVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYWRkZXJfc2hvcF93aW5kb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhZGRlcl9zaG9wX3dpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFkZGVyX3Nob3Bfd2luZG93ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+Wkqeair+WvueaJi+S/oeaBr1xuICAgIG9wZW5MYWRkZXJSb2xlSW5mb1dpbmRvdzogZnVuY3Rpb24gKHN0YXR1cywgZGF0YSkge1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYWRkZXJfcm9sZV9pbmZvX3dpbmRvdyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWRkZXJfcm9sZV9pbmZvX3dpbmRvdyA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwibGFkZGVyX3JvbGVfaW5mb193aW5kb3dcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxhZGRlcl9yb2xlX2luZm9fd2luZG93Lm9wZW4oZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYWRkZXJfcm9sZV9pbmZvX3dpbmRvdykge1xuICAgICAgICAgICAgICAgIHRoaXMubGFkZGVyX3JvbGVfaW5mb193aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhZGRlcl9yb2xlX2luZm9fd2luZG93ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+Wkqeair+aImOaKpVxuICAgIG9wZW5MYWRkZXJMb2dXaW5kb3c6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgaWYgKHRoaXMubGFkZGVyX2xvZ193aW5kb3cgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFkZGVyX2xvZ193aW5kb3cgPSBVdGlscy5jcmVhdGVDbGFzcyhcImxhZGRlcl9sb2dfd2luZG93XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sYWRkZXJfbG9nX3dpbmRvdy5vcGVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYWRkZXJfbG9nX3dpbmRvdykge1xuICAgICAgICAgICAgICAgIHRoaXMubGFkZGVyX2xvZ193aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhZGRlcl9sb2dfd2luZG93ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+Wkqeair+WlluWKsVxuICAgIG9wZW5MYWRkZXJBd2FyZFdpbmRvdzogZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYWRkZXJfYXdhcmRfd2luZG93ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhZGRlcl9hd2FyZF93aW5kb3cgPSBVdGlscy5jcmVhdGVDbGFzcyhcImxhZGRlcl9hd2FyZF93aW5kb3dcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxhZGRlcl9hd2FyZF93aW5kb3cub3BlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMubGFkZGVyX2F3YXJkX3dpbmRvdykge1xuICAgICAgICAgICAgICAgIHRoaXMubGFkZGVyX2F3YXJkX3dpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFkZGVyX2F3YXJkX3dpbmRvdyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/lpKnmoq/mjpLooYzmppxcbiAgICBvcGVuTGFkZGVyUmFua1dpbmRvdzogZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYWRkZXJfcmFua193aW5kb3cgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFkZGVyX3Jhbmtfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJsYWRkZXJfcmFua193aW5kb3dcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxhZGRlcl9yYW5rX3dpbmRvdy5vcGVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYWRkZXJfcmFua193aW5kb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhZGRlcl9yYW5rX3dpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFkZGVyX3Jhbmtfd2luZG93ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+Wkqeair+iLsembhOauv1xuICAgIG9wZW5MYWRkZXJUb3BUaHJlZVdpbmRvdzogZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYWRkZXJfdG9wX3RocmVlX3dpbmRvdyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWRkZXJfdG9wX3RocmVlX3dpbmRvdyA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwibGFkZGVyX3RvcF90aHJlZV93aW5kb3dcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxhZGRlcl90b3BfdGhyZWVfd2luZG93Lm9wZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhZGRlcl90b3BfdGhyZWVfd2luZG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWRkZXJfdG9wX3RocmVlX3dpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFkZGVyX3RvcF90aHJlZV93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5aSp5qKv57uT566X55WM6Z2iXG4gICAgb3BlbkxhZGRlckJhdHRsZVJlc3VsdFdpbmRvdzogZnVuY3Rpb24gKHN0YXR1cywgZGF0YSkge1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYWRkZXJfcmVzdWx0X3dpbmRvdyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWRkZXJfcmVzdWx0X3dpbmRvdyA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwibGFkZGVyX2JhdHRsZV9yZXN1bHRfd2luZG93XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sYWRkZXJfcmVzdWx0X3dpbmRvdy5vcGVuKGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMubGFkZGVyX3Jlc3VsdF93aW5kb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhZGRlcl9yZXN1bHRfd2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWRkZXJfcmVzdWx0X3dpbmRvdyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBMYWRkZXJDb250cm9sbGVyOyJdfQ==