(function() {
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
var __module = nodeEnv ? module : {exports:{}};
var __filename = 'preview-scripts/assets/Scripts/mod/newfirstcharge/view/newfirstcharge_window.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, '91cf6N/J3pL3o29EawKrEAC', 'newfirstcharge_window');
// Scripts/mod/newfirstcharge/view/newfirstcharge_window.js
"use strict";
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
// 这里是描述这个窗体的作用的
//
Create: 2019-03-22 11:02:42
// --------------------------------------------------------------------
var PathTool = require("pathtool");
var VipController = require("vip_controller");
var NewFirstChargeEvent = require("newfirstcharge_event");
var NewfirstchargeWindow = cc.Class({
"extends": BaseView,
ctor: function ctor() {
this.prefabPath = PathTool.getPrefabPath("newfirstcharge", "newfirstcharge_window");
this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
this.win_type = WinType.Big; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
this.ctrl = arguments[0];
this.model = this.ctrl.getModel();
},
// 初始化一些配置数据,可以用于声明一些变量之类的
initConfig: function initConfig() {
this.cur_index = null;
this.item_list = [];
this.item_reward_list = [];
for (var i = 1; i <= 3; i++) {
this.item_reward_list[i] = {};
}
},
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
openCallBack: function openCallBack() {
this.background = this.root_wnd.getChildByName("background");
this.background.scale = FIT_SCALE;
this.main_container = this.root_wnd.getChildByName("main_container");
var container = this.main_container.getChildByName("container");
var bg_node = container.getChildByName("bg");
var bg = bg_node.getComponent(cc.Sprite);
this.loadRes(PathTool.getBigBg("txt_cn_action_bigbg_3", null, "action"), function (resObject) {
bg.spriteFrame = resObject;
}.bind(this));
this.close_btn = container.getChildByName("close_btn");
this.title_img = container.getChildByName("title_img");
this.remain_charge = container.getChildByName("remain_charge").getComponent(cc.Label);
this.remain_charge.string = Utils.TI18N("已累充: ");
this.btn_recharge = container.getChildByName("btn");
this.btn_label = this.btn_recharge.getChildByName("label").getComponent(cc.Label);
this.btn_label.string = Utils.TI18N("前往充值");
this.Sprite_2 = container.getChildByName("Sprite_2").getComponent(cc.Sprite);
this.Sprite_2_0 = container.getChildByName("Sprite_2_0").getComponent(cc.Sprite);
this.Sprite_2_1 = container.getChildByName("Sprite_2_1").getComponent(cc.Sprite);
var icon_path = PathTool.getItemRes(3);
this.loadRes(icon_path, function (res_object) {
this.Sprite_2.spriteFrame = res_object;
this.Sprite_2_0.spriteFrame = res_object;
this.Sprite_2_1.spriteFrame = res_object;
}.bind(this));
this.model.setFirstRechargeData();
for (var i = 1; i <= 3; i++) {
var item = container.getChildByName("item_" + i);
if (item) {
var object = {};
object.scroll = item.getChildByName("scroll").getChildByName("content");
object.finish_icon = item.getChildByName("finish_icon");
object.finish_icon.active = false;
object.title = item.getChildByName("title").getComponent(cc.Label);
object.title.string = Utils.TI18N("第") + i + Utils.TI18N("天免费领");
object.list = {};
this.item_list[i] = object;
}
}
this.tab_view = [];
for (var i = 1; i <= 2; i++) {
var tab = {};
tab.btn = container.getChildByName("btn_grade_" + i);
tab.normal = tab.btn.getChildByName("normal");
tab.select = tab.btn.getChildByName("select");
tab.select.active = false;
tab.title = tab.btn.getChildByName("title");
tab.title.color = new cc.Color(0xff, 0xff, 0xff, 0xff);
tab.titleOutLine = tab.btn.getChildByName("title").getComponent(cc.LabelOutline);
tab.titleOutLine.color = new cc.Color(0x71, 0x00, 0x42, 0xff);
tab.title_barner = container.getChildByName("title_img_" + i);
tab.title_barner.scale = 2;
tab.title_barner.active = false;
this.loadRes(PathTool.getUIIconPath("newfirstcharge", "txt_cn_newfirstcharge_" + i), function (title_barner, resObject) {
title_barner.getComponent(cc.Sprite).spriteFrame = resObject;
}.bind(this, tab.title_barner));
tab.index = i;
this.tab_view[i] = tab;
}
this.tab_get_hero = {};
for (var i = 1; i <= 3; i++) {
var tab = {};
tab.btn = container.getChildByName("btn_" + i);
tab.title = tab.btn.getChildByName("Text_1");
tab.get = container.getChildByName("get_" + i);
tab.get.active = false;
tab.index = i;
this.tab_get_hero[i] = tab;
}
},
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
registerEvent: function registerEvent() {
Utils.onTouchEnd(this.close_btn, function () {
this.ctrl.openNewFirstChargeView(false);
}.bind(this), 2);
Utils.onTouchEnd(this.btn_recharge, function () {
var first_data = this.model.getFirstRechargeData(this.cur_index);
if (this.get_gift_id == 0) {
this.ctrl.openNewFirstChargeView(false); //临时
VipController.getInstance().openVipMainWindow(true, VIPTABCONST.DAILY_GIFT);
} else if (this.get_gift_id == 1) {
if (first_data[this.gift_index]) {
this.ctrl.sender21013(first_data[this.gift_index].id);
}
} else {
this.ctrl.openNewFirstChargeView(false);
}
}.bind(this), 1);
for (var i in this.tab_view) {
Utils.onTouchEnd(this.tab_view[i].btn, function (v) {
this.changeTabView(v.index);
}.bind(this, this.tab_view[i]), 1);
}
for (var j in this.tab_get_hero) {
Utils.onTouchEnd(this.tab_get_hero[j].btn, function (v) {
if (v.index && this.updata_charge_data) {
if (this.updata_charge_data.choosen_status == 1) {
var list = [20501, 30506, 10505];
var role_data = Config.partner_data.data_partner_base[list[v.index - 1]];
if (role_data) {
var str = cc.js.formatStr(Utils.TI18N("是否确定选择 %s 作为奖励?\n 确定后其它英雄将不可领取"), role_data.name);
var CommonAlert = require("commonalert");
CommonAlert.show(str, Utils.TI18N("确定"), function () {
this.ctrl.sender21014(v.index);
}.bind(this), Utils.TI18N("取消"));
}
} else {
this.ctrl.sender21014(v.index);
}
}
}.bind(this, this.tab_get_hero[j]), 1);
}
this.addGlobalEvent(NewFirstChargeEvent.New_First_Charge_Event, function (data) {
this.updata_charge_data = data;
if (data.choosen_status != null && data.has_choosen_id != null) {
this.getChooseHeroStatus(data.choosen_status, data.has_choosen_id);
}
var RoleController = require("role_controller");
var role_vo = RoleController.getInstance().getRoleVo();
var totle_str = cc.js.formatStr(Utils.TI18N("已累充: %d"), Math.floor(role_vo.vip_exp * 0.1));
this.remain_charge.string = totle_str;
this.setRedPointTab();
this.updateData(data);
}.bind(this));
},
// 红点
setRedPointTab: function setRedPointTab() {
var status_1 = false;
for (var i = 1; i <= 3; i++) {
var get_data = this.model.getFirstBtnStatus(i);
if (get_data) {
if (get_data == 1) {
status_1 = true;
break;
}
}
}
Utils.addRedPointToNodeByStatus(this.tab_view[1].btn, status_1);
var status_2 = false;
for (var i = 4; i <= 6; i++) {
var get_data = this.model.getFirstBtnStatus(i);
if (get_data) {
if (get_data == 1) {
status_2 = true;
break;
}
}
}
Utils.addRedPointToNodeByStatus(this.tab_view[2].btn, status_2);
},
changeTabView: function changeTabView(index) {
index = index || 0;
if (this.cur_index == index) return;
if (this.tab_index != null) {
this.tab_index.normal.active = true;
this.tab_index.select.active = false;
this.tab_index.titleOutLine.color = new cc.Color(0x71, 0x00, 0x42, 0xff);
this.tab_index.title_barner.active = false;
}
this.tab_index = this.tab_view[index];
if (this.tab_index != null) {
this.tab_index.normal.active = false;
this.tab_index.select.active = true;
this.tab_index.titleOutLine.color = new cc.Color(0xc4, 0x5a, 0x14, 0xff);
this.tab_index.title_barner.active = true;
}
this.cur_index = index;
var first_data = this.model.getFirstRechargeData(index);
this.fillItemList(first_data);
if (this.updata_charge_data) {
this.updateData(this.updata_charge_data);
}
},
fillItemList: function fillItemList(list) {
var scale = 0.8;
var size = 119 * scale;
var create_index = 1;
for (var i = 0; i < list.length; i++) {
var object = this.item_list[i + 1];
var num = list[i].item_list.length;
object.scroll.setContentSize(cc.size(size * num, object.scroll.getContentSize().height));
for (var k = 0; k < num; k++) {
var _x = size * (k + 1) - size * 0.5;
var _y = size * 0.5;
if (!this.item_reward_list[i + 1][k]) {
this.item_reward_list[i + 1][k] = ItemsPool.getInstance().getItem("backpack_item");
this.item_reward_list[i + 1][k].setParent(object.scroll);
this.item_reward_list[i + 1][k].setExtendData({
scale: scale,
is_show_tips: true
});
this.item_reward_list[i + 1][k].show();
}
if (this.item_reward_list[i + 1][k]) {
this.item_reward_list[i + 1][k].setPosition(_x, _y);
this.item_reward_list[i + 1][k].setData({
bid: list[i].item_list[k][0],
num: list[i].item_list[k][1]
});
cc.log(list[i], "list[i]");
}
create_index = create_index + 1;
}
}
},
// 选择英雄按钮
getChooseHeroStatus: function getChooseHeroStatus(status, choose_id) {
for (var i = 1; i <= 3; i++) {
if (status == 0) {
this.tab_get_hero[i].get.active = false;
this.tab_get_hero[i].btn.active = true;
this.tab_get_hero[i].btn.getComponent(cc.Button).interactable = false;
this.tab_get_hero[i].btn.getComponent(cc.Button).enableAutoGrayEffect = true;
this.tab_get_hero[i].title.color = new cc.Color(0xff, 0xff, 0xff, 0xff);
} else if (status == 1) {
this.tab_get_hero[i].get.active = false;
this.tab_get_hero[i].btn.active = true;
this.tab_get_hero[i].btn.getComponent(cc.Button).interactable = true;
this.tab_get_hero[i].btn.getComponent(cc.Button).enableAutoGrayEffect = false;
this.tab_get_hero[i].title.color = new cc.Color(0x25, 0x55, 0x05, 0xff);
} else if (status == 2) {
this.tab_get_hero[i].btn.active = false;
if (i == choose_id) {
this.tab_get_hero[i].get.active = true;
}
}
}
},
updateData: function updateData(data) {
if (data == null) return;
var status_list = [[1, 2, 3], [4, 5, 6]];
var charge_list = [];
for (var i in status_list[this.cur_index - 1]) {
var status = this.model.getFirstBtnStatus(status_list[this.cur_index - 1][i]);
charge_list[i] = status;
this.item_list[parseInt(i) + 1].finish_icon.active = status == 2;
}
this.gift_index = 0; //领取的位置
var totle = 0;
this.get_gift_id = 10;
for (var i in charge_list) {
totle = totle + charge_list[i];
if (charge_list[i] == 1) {
this.get_gift_id = 1;
this.gift_index = i;
}
}
if (totle == 0) {
this.get_gift_id = 0;
this.btn_label.string = Utils.TI18N("前往充值");
} else if (totle == 1 || totle == 3 || totle == 5) {
this.btn_label.string = Utils.TI18N("领取奖励");
} else if (totle == 2 || totle == 4) {
this.btn_label.string = Utils.TI18N("明日再来");
} else if (totle == 6) {
this.btn_label.string = Utils.TI18N("领取完毕");
}
},
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
openRootWnd: function openRootWnd(index) {
index = index || 1;
this.changeTabView(index);
this.ctrl.sender21012();
},
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
closeCallBack: function closeCallBack() {
for (var i = 1; i <= 3; i++) {
for (var j in this.item_reward_list[i]) {
this.item_reward_list[i][j].deleteMe();
}
this.item_reward_list[i] = null;
}
this.item_reward_list = [];
this.ctrl.openNewFirstChargeView(false);
}
});
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxuZXdmaXJzdGNoYXJnZVxcdmlld1xcbmV3Zmlyc3RjaGFyZ2Vfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIlZpcENvbnRyb2xsZXIiLCJOZXdGaXJzdENoYXJnZUV2ZW50IiwiTmV3Zmlyc3RjaGFyZ2VXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJCaWciLCJjdHJsIiwiYXJndW1lbnRzIiwibW9kZWwiLCJnZXRNb2RlbCIsImluaXRDb25maWciLCJjdXJfaW5kZXgiLCJpdGVtX2xpc3QiLCJpdGVtX3Jld2FyZF9saXN0IiwiaSIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJtYWluX2NvbnRhaW5lciIsImNvbnRhaW5lciIsImJnX25vZGUiLCJiZyIsImdldENvbXBvbmVudCIsIlNwcml0ZSIsImxvYWRSZXMiLCJnZXRCaWdCZyIsInJlc09iamVjdCIsInNwcml0ZUZyYW1lIiwiYmluZCIsImNsb3NlX2J0biIsInRpdGxlX2ltZyIsInJlbWFpbl9jaGFyZ2UiLCJMYWJlbCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJidG5fcmVjaGFyZ2UiLCJidG5fbGFiZWwiLCJTcHJpdGVfMiIsIlNwcml0ZV8yXzAiLCJTcHJpdGVfMl8xIiwiaWNvbl9wYXRoIiwiZ2V0SXRlbVJlcyIsInJlc19vYmplY3QiLCJzZXRGaXJzdFJlY2hhcmdlRGF0YSIsIml0ZW0iLCJvYmplY3QiLCJzY3JvbGwiLCJmaW5pc2hfaWNvbiIsImFjdGl2ZSIsInRpdGxlIiwibGlzdCIsInRhYl92aWV3IiwidGFiIiwiYnRuIiwibm9ybWFsIiwic2VsZWN0IiwiY29sb3IiLCJDb2xvciIsInRpdGxlT3V0TGluZSIsIkxhYmVsT3V0bGluZSIsInRpdGxlX2Jhcm5lciIsImdldFVJSWNvblBhdGgiLCJpbmRleCIsInRhYl9nZXRfaGVybyIsImdldCIsInJlZ2lzdGVyRXZlbnQiLCJvblRvdWNoRW5kIiwib3Blbk5ld0ZpcnN0Q2hhcmdlVmlldyIsImZpcnN0X2RhdGEiLCJnZXRGaXJzdFJlY2hhcmdlRGF0YSIsImdldF9naWZ0X2lkIiwiZ2V0SW5zdGFuY2UiLCJvcGVuVmlwTWFpbldpbmRvdyIsIlZJUFRBQkNPTlNUIiwiREFJTFlfR0lGVCIsImdpZnRfaW5kZXgiLCJzZW5kZXIyMTAxMyIsImlkIiwidiIsImNoYW5nZVRhYlZpZXciLCJqIiwidXBkYXRhX2NoYXJnZV9kYXRhIiwiY2hvb3Nlbl9zdGF0dXMiLCJyb2xlX2RhdGEiLCJDb25maWciLCJwYXJ0bmVyX2RhdGEiLCJkYXRhX3BhcnRuZXJfYmFzZSIsInN0ciIsImpzIiwiZm9ybWF0U3RyIiwibmFtZSIsIkNvbW1vbkFsZXJ0Iiwic2hvdyIsInNlbmRlcjIxMDE0IiwiYWRkR2xvYmFsRXZlbnQiLCJOZXdfRmlyc3RfQ2hhcmdlX0V2ZW50IiwiZGF0YSIsImhhc19jaG9vc2VuX2lkIiwiZ2V0Q2hvb3NlSGVyb1N0YXR1cyIsIlJvbGVDb250cm9sbGVyIiwicm9sZV92byIsImdldFJvbGVWbyIsInRvdGxlX3N0ciIsIk1hdGgiLCJmbG9vciIsInZpcF9leHAiLCJzZXRSZWRQb2ludFRhYiIsInVwZGF0ZURhdGEiLCJzdGF0dXNfMSIsImdldF9kYXRhIiwiZ2V0Rmlyc3RCdG5TdGF0dXMiLCJhZGRSZWRQb2ludFRvTm9kZUJ5U3RhdHVzIiwic3RhdHVzXzIiLCJ0YWJfaW5kZXgiLCJmaWxsSXRlbUxpc3QiLCJzaXplIiwiY3JlYXRlX2luZGV4IiwibGVuZ3RoIiwibnVtIiwic2V0Q29udGVudFNpemUiLCJnZXRDb250ZW50U2l6ZSIsImhlaWdodCIsImsiLCJfeCIsIl95IiwiSXRlbXNQb29sIiwiZ2V0SXRlbSIsInNldFBhcmVudCIsInNldEV4dGVuZERhdGEiLCJpc19zaG93X3RpcHMiLCJzZXRQb3NpdGlvbiIsInNldERhdGEiLCJiaWQiLCJsb2ciLCJzdGF0dXMiLCJjaG9vc2VfaWQiLCJCdXR0b24iLCJpbnRlcmFjdGFibGUiLCJlbmFibGVBdXRvR3JheUVmZmVjdCIsInN0YXR1c19saXN0IiwiY2hhcmdlX2xpc3QiLCJwYXJzZUludCIsInRvdGxlIiwib3BlblJvb3RXbmQiLCJzZW5kZXIyMTAxMiIsImNsb3NlQ2FsbEJhY2siLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGFBQWEsR0FBR0QsT0FBTyxDQUFDLGdCQUFELENBQTNCOztBQUNBLElBQUlFLG1CQUFtQixHQUFHRixPQUFPLENBQUMsc0JBQUQsQ0FBakM7O0FBRUEsSUFBSUcsb0JBQW9CLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQ2hDLGFBQVNDLFFBRHVCO0FBRWhDQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCVCxRQUFRLENBQUNVLGFBQVQsQ0FBdUIsZ0JBQXZCLEVBQXlDLHVCQUF6QyxDQUFsQjtBQUNBLFNBQUtDLE9BQUwsR0FBZUMsU0FBUyxDQUFDQyxRQUF6QixDQUZjLENBRW9DOztBQUNsRCxTQUFLQyxRQUFMLEdBQWdCQyxPQUFPLENBQUNDLEdBQXhCLENBSGMsQ0FHNkI7O0FBQzNDLFNBQUtDLElBQUwsR0FBWUMsU0FBUyxDQUFDLENBQUQsQ0FBckI7QUFDQSxTQUFLQyxLQUFMLEdBQWEsS0FBS0YsSUFBTCxDQUFVRyxRQUFWLEVBQWI7QUFDSCxHQVIrQjtBQVVoQztBQUNBQyxFQUFBQSxVQUFVLEVBQUMsc0JBQVU7QUFDakIsU0FBS0MsU0FBTCxHQUFpQixJQUFqQjtBQUNBLFNBQUtDLFNB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LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDMtMjIgMTE6MDI6NDJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgVmlwQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ2aXBfY29udHJvbGxlclwiKTtcbnZhciBOZXdGaXJzdENoYXJnZUV2ZW50ID0gcmVxdWlyZShcIm5ld2ZpcnN0Y2hhcmdlX2V2ZW50XCIpO1xuXG52YXIgTmV3Zmlyc3RjaGFyZ2VXaW5kb3cgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwibmV3Zmlyc3RjaGFyZ2VcIiwgXCJuZXdmaXJzdGNoYXJnZV93aW5kb3dcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkJpZzsgICAgICAgICAgICAgICAvL+aYr+WQpuaYr+WFqOWxj+eql+S9kyAgV2luVHlwZS5GdWxsLCBXaW5UeXBlLkJpZywgV2luVHlwZS5NaW5pLCBXaW5UeXBlLlRpcHNcbiAgICAgICAgdGhpcy5jdHJsID0gYXJndW1lbnRzWzBdO1xuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5jdHJsLmdldE1vZGVsKCk7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0Q29uZmlnOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuY3VyX2luZGV4ID0gbnVsbDtcbiAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0ID0gW107XG4gICAgICAgIGZvcih2YXIgaSA9IDE7aTw9MztpKyspe1xuICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2ldID0ge307XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCO55qE5Zue6LCDLOWPr+S7peWcqOi/memHjOaNleiOt+ebuOWFs+iKgueCueaIluiAhee7hOS7tlxuICAgIG9wZW5DYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNjYWxlID0gRklUX1NDQUxFO1xuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fY29udGFpbmVyXCIpO1xuICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImNvbnRhaW5lclwiKTtcbiAgICAgICAgdmFyIGJnX25vZGUgPSBjb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJiZ1wiKTtcbiAgICAgICAgdmFyIGJnID0gYmdfbm9kZS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEJpZ0JnKFwidHh0X2NuX2FjdGlvbl9iaWdiZ18zXCIsbnVsbCxcImFjdGlvblwiKSwgKGZ1bmN0aW9uKHJlc09iamVjdCl7XG4gICAgICAgICAgICBiZy5zcHJpdGVGcmFtZSA9IHJlc09iamVjdDtcbiAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgXG4gICAgICAgIHRoaXMuY2xvc2VfYnRuID0gY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiY2xvc2VfYnRuXCIpO1xuICAgICAgICB0aGlzLnRpdGxlX2ltZyA9IGNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRpdGxlX2ltZ1wiKTtcbiAgICAgICAgdGhpcy5yZW1haW5fY2hhcmdlID0gY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwicmVtYWluX2NoYXJnZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLnJlbWFpbl9jaGFyZ2Uuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlt7LntK/lhYU6IFwiKTtcbiAgICBcbiAgICAgICAgdGhpcy5idG5fcmVjaGFyZ2UgPSBjb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJidG5cIik7XG4gICAgICAgIHRoaXMuYnRuX2xhYmVsID0gdGhpcy5idG5fcmVjaGFyZ2UuZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmJ0bl9sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIuWJjeW+gOWFheWAvFwiKTtcblxuICAgICAgICB0aGlzLlNwcml0ZV8yID0gY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiU3ByaXRlXzJcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMuU3ByaXRlXzJfMCA9IGNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlNwcml0ZV8yXzBcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMuU3ByaXRlXzJfMSA9IGNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlNwcml0ZV8yXzFcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgIHZhciBpY29uX3BhdGggPSBQYXRoVG9vbC5nZXRJdGVtUmVzKDMpO1xuICAgICAgICB0aGlzLmxvYWRSZXMoaWNvbl9wYXRoLCBmdW5jdGlvbihyZXNfb2JqZWN0KXtcbiAgICAgICAgICAgIHRoaXMuU3ByaXRlXzIuc3ByaXRlRnJhbWUgPSByZXNfb2JqZWN0O1xuICAgICAgICAgICAgdGhpcy5TcHJpdGVfMl8wLnNwcml0ZUZyYW1lID0gcmVzX29iamVjdDtcbiAgICAgICAgICAgIHRoaXMuU3ByaXRlXzJfMS5zcHJpdGVGcmFtZSA9IHJlc19vYmplY3Q7XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIFxuXG4gICAgICAgIHRoaXMubW9kZWwuc2V0Rmlyc3RSZWNoYXJnZURhdGEoKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAxO2k8PTM7aSsrKXtcbiAgICAgICAgICAgIHZhciBpdGVtID0gY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaXRlbV9cIitpKTtcbiAgICAgICAgICAgIGlmKGl0ZW0pe1xuICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fVxuICAgICAgICAgICAgICAgIG9iamVjdC5zY3JvbGwgPSBpdGVtLmdldENoaWxkQnlOYW1lKFwic2Nyb2xsXCIpLmdldENoaWxkQnlOYW1lKFwiY29udGVudFwiKTtcbiAgICAgICAgICAgICAgICBvYmplY3QuZmluaXNoX2ljb24gPSBpdGVtLmdldENoaWxkQnlOYW1lKFwiZmluaXNoX2ljb25cIilcbiAgICAgICAgICAgICAgICBvYmplY3QuZmluaXNoX2ljb24uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgb2JqZWN0LnRpdGxlID0gaXRlbS5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgICAgICAgICAgb2JqZWN0LnRpdGxlLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi56ysXCIpK2krVXRpbHMuVEkxOE4oXCLlpKnlhY3otLnpooZcIik7XG4gICAgICAgICAgICAgICAgb2JqZWN0Lmxpc3QgPSB7fVxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2ldID0gb2JqZWN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50YWJfdmlldyA9IFtdO1xuICAgICAgICBmb3IodmFyIGkgPSAxO2k8PTI7aSsrKXtcbiAgICAgICAgICAgIHZhciB0YWIgPSB7fVxuICAgICAgICAgICAgdGFiLmJ0biA9IGNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJ0bl9ncmFkZV9cIitpKTtcbiAgICAgICAgICAgIHRhYi5ub3JtYWwgPSB0YWIuYnRuLmdldENoaWxkQnlOYW1lKFwibm9ybWFsXCIpO1xuICAgICAgICAgICAgdGFiLnNlbGVjdCA9IHRhYi5idG4uZ2V0Q2hpbGRCeU5hbWUoXCJzZWxlY3RcIik7XG4gICAgICAgICAgICB0YWIuc2VsZWN0LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGFiLnRpdGxlID0gdGFiLmJ0bi5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpXG4gICAgICAgICAgICB0YWIudGl0bGUuY29sb3IgPSBuZXcgY2MuQ29sb3IoMHhmZiwweGZmLDB4ZmYsMHhmZik7XG4gICAgICAgICAgICB0YWIudGl0bGVPdXRMaW5lID0gdGFiLmJ0bi5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbE91dGxpbmUpO1xuICAgICAgICAgICAgdGFiLnRpdGxlT3V0TGluZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweDcxLDB4MDAsMHg0MiwweGZmKTtcbiAgICAgICAgICAgIHRhYi50aXRsZV9iYXJuZXIgPSBjb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXRsZV9pbWdfXCIraSk7XG4gICAgICAgICAgICB0YWIudGl0bGVfYmFybmVyLnNjYWxlID0gMjtcbiAgICAgICAgICAgIHRhYi50aXRsZV9iYXJuZXIuYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwibmV3Zmlyc3RjaGFyZ2VcIixcInR4dF9jbl9uZXdmaXJzdGNoYXJnZV9cIitpKSwgKGZ1bmN0aW9uKHRpdGxlX2Jhcm5lcixyZXNPYmplY3Qpe1xuICAgICAgICAgICAgICAgIHRpdGxlX2Jhcm5lci5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHJlc09iamVjdDtcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcyx0YWIudGl0bGVfYmFybmVyKSk7XG5cbiAgICAgICAgICAgIHRhYi5pbmRleCA9IGk7XG4gICAgICAgICAgICB0aGlzLnRhYl92aWV3W2ldID0gdGFiXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRhYl9nZXRfaGVybyA9IHt9XG4gICAgICAgIGZvcih2YXIgaSA9IDE7aTw9MztpKyspe1xuICAgICAgICAgICAgdmFyIHRhYiA9IHt9XG4gICAgICAgICAgICB0YWIuYnRuID0gY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYnRuX1wiK2kpO1xuICAgICAgICAgICAgdGFiLnRpdGxlID0gdGFiLmJ0bi5nZXRDaGlsZEJ5TmFtZShcIlRleHRfMVwiKTtcbiAgICAgICAgICAgIHRhYi5nZXQgPSBjb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJnZXRfXCIraSlcbiAgICAgICAgICAgIHRhYi5nZXQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0YWIuaW5kZXggPSBpO1xuICAgICAgICAgICAgdGhpcy50YWJfZ2V0X2hlcm9baV0gPSB0YWJcbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OmZ1bmN0aW9uKCl7XG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5jbG9zZV9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuTmV3Rmlyc3RDaGFyZ2VWaWV3KGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuYnRuX3JlY2hhcmdlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RfZGF0YSA9IHRoaXMubW9kZWwuZ2V0Rmlyc3RSZWNoYXJnZURhdGEodGhpcy5jdXJfaW5kZXgpO1xuICAgICAgICAgICAgaWYodGhpcy5nZXRfZ2lmdF9pZCA9PSAwKXtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3Blbk5ld0ZpcnN0Q2hhcmdlVmlldyhmYWxzZSk7Ly/kuLTml7ZcbiAgICAgICAgICAgICAgICBWaXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlblZpcE1haW5XaW5kb3codHJ1ZSwgVklQVEFCQ09OU1QuREFJTFlfR0lGVClcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuZ2V0X2dpZnRfaWQgPT0gMSl7XG4gICAgICAgICAgICAgICAgaWYoZmlyc3RfZGF0YVt0aGlzLmdpZnRfaW5kZXhdKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjIxMDEzKGZpcnN0X2RhdGFbdGhpcy5naWZ0X2luZGV4XS5pZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3Blbk5ld0ZpcnN0Q2hhcmdlVmlldyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSk7XG5cbiAgICAgICAgZm9yKHZhciBpIGluIHRoaXMudGFiX3ZpZXcpe1xuICAgICAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLnRhYl92aWV3W2ldLmJ0biwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVRhYlZpZXcodi5pbmRleClcbiAgICAgICAgICAgIH0uYmluZCh0aGlzLHRoaXMudGFiX3ZpZXdbaV0pLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcih2YXIgaiBpbiB0aGlzLnRhYl9nZXRfaGVybyl7XG4gICAgICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMudGFiX2dldF9oZXJvW2pdLmJ0biwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZih2LmluZGV4ICYmIHRoaXMudXBkYXRhX2NoYXJnZV9kYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy51cGRhdGFfY2hhcmdlX2RhdGEuY2hvb3Nlbl9zdGF0dXMgPT0gMSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IFsyMDUwMSwzMDUwNiwxMDUwNV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9sZV9kYXRhID0gQ29uZmlnLnBhcnRuZXJfZGF0YS5kYXRhX3BhcnRuZXJfYmFzZVtsaXN0W3YuaW5kZXgtMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocm9sZV9kYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiPGNvbG9yPSM2NDMyMjM+5piv5ZCm56Gu5a6a6YCJ5oupPC9jb2xvcj4gPGNvbG9yPSNiYzNmMGUgZm9udHNpemU9MjY+JXM8L2NvbG9yPiA8Y29sb3I9IzY0MzIyMz7kvZzkuLrlpZblirHvvJ9cXG48L2NvbG9yPiA8Y29sb3I9IzY0MzIyMz4gIOehruWumuWQjuWFtuWug+iLsembhOWwhuS4jeWPr+mihuWPljwvY29sb3I+XCIpLHJvbGVfZGF0YS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDb21tb25BbGVydCA9IHJlcXVpcmUoXCJjb21tb25hbGVydFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tb25BbGVydC5zaG93KHN0cixVdGlscy5USTE4TihcIuehruWumlwiKSxmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMjEwMTQodi5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFV0aWxzLlRJMThOKFwi5Y+W5raIXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIyMTAxNCh2LmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzLHRoaXMudGFiX2dldF9oZXJvW2pdKSwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KE5ld0ZpcnN0Q2hhcmdlRXZlbnQuTmV3X0ZpcnN0X0NoYXJnZV9FdmVudCxmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAgIHRoaXMudXBkYXRhX2NoYXJnZV9kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIGlmKGRhdGEuY2hvb3Nlbl9zdGF0dXMhPW51bGwgJiYgZGF0YS5oYXNfY2hvb3Nlbl9pZCE9bnVsbCl7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDaG9vc2VIZXJvU3RhdHVzKGRhdGEuY2hvb3Nlbl9zdGF0dXMsIGRhdGEuaGFzX2Nob29zZW5faWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIHJvbGVfdm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpO1xuICAgICAgICAgICAgdmFyIHRvdGxlX3N0ciA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuW3sue0r+WFhTogJWRcIiksTWF0aC5mbG9vcihyb2xlX3ZvLnZpcF9leHAqMC4xKSlcbiAgICAgICAgICAgIHRoaXMucmVtYWluX2NoYXJnZS5zdHJpbmcgPSB0b3RsZV9zdHI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuc2V0UmVkUG9pbnRUYWIoKVxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKGRhdGEpO1xuICAgICAgICB9LmJpbmQodGhpcykpO1xuXG4gICAgfSxcblxuICAgIC8vIOe6oueCuVxuICAgIHNldFJlZFBvaW50VGFiOmZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzdGF0dXNfMSA9IGZhbHNlO1xuICAgICAgICBmb3IodmFyIGkgPSAxO2k8PTM7aSsrKXtcbiAgICAgICAgICAgIHZhciBnZXRfZGF0YSA9IHRoaXMubW9kZWwuZ2V0Rmlyc3RCdG5TdGF0dXMoaSk7XG4gICAgICAgICAgICBpZihnZXRfZGF0YSl7XG4gICAgICAgICAgICAgICAgaWYoZ2V0X2RhdGEgPT0gMSl7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c18xID0gdHJ1ZTtcblx0XHRcdFx0ICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBVdGlscy5hZGRSZWRQb2ludFRvTm9kZUJ5U3RhdHVzKHRoaXMudGFiX3ZpZXdbMV0uYnRuLHN0YXR1c18xKVxuICAgICAgICB2YXIgc3RhdHVzXzIgPSBmYWxzZTtcbiAgICAgICAgZm9yKHZhciBpID0gNDtpPD02O2krKyl7XG4gICAgICAgICAgICB2YXIgZ2V0X2RhdGEgPSB0aGlzLm1vZGVsLmdldEZpcnN0QnRuU3RhdHVzKGkpO1xuICAgICAgICAgICAgaWYoZ2V0X2RhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGdldF9kYXRhID09IDEpe1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMiA9IHRydWU7XG5cdFx0XHRcdCAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgVXRpbHMuYWRkUmVkUG9pbnRUb05vZGVCeVN0YXR1cyh0aGlzLnRhYl92aWV3WzJdLmJ0bixzdGF0dXNfMilcbiAgICB9LFxuXG4gICAgY2hhbmdlVGFiVmlldzpmdW5jdGlvbihpbmRleCl7XG4gICAgICAgIGluZGV4ID0gaW5kZXggfHwgMDtcbiAgICAgICAgaWYodGhpcy5jdXJfaW5kZXggPT0gaW5kZXgpcmV0dXJuO1xuICAgICAgICBpZih0aGlzLnRhYl9pbmRleCE9bnVsbCl7XG4gICAgICAgICAgICB0aGlzLnRhYl9pbmRleC5ub3JtYWwuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudGFiX2luZGV4LnNlbGVjdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGFiX2luZGV4LnRpdGxlT3V0TGluZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweDcxLDB4MDAsMHg0MiwweGZmKTtcbiAgICAgICAgICAgIHRoaXMudGFiX2luZGV4LnRpdGxlX2Jhcm5lci5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYl9pbmRleCA9IHRoaXMudGFiX3ZpZXdbaW5kZXhdXG4gICAgICAgIGlmKHRoaXMudGFiX2luZGV4IT1udWxsKXtcbiAgICAgICAgICAgIHRoaXMudGFiX2luZGV4Lm5vcm1hbC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGFiX2luZGV4LnNlbGVjdC5hY3RpdmUgPSB0cnVlXG4gICAgICAgICAgICB0aGlzLnRhYl9pbmRleC50aXRsZU91dExpbmUuY29sb3IgPSBuZXcgY2MuQ29sb3IoMHhjNCwweDVhLDB4MTQsMHhmZik7XG4gICAgICAgICAgICB0aGlzLnRhYl9pbmRleC50aXRsZV9iYXJuZXIuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VyX2luZGV4ID0gaW5kZXg7XG4gICAgICAgIHZhciBmaXJzdF9kYXRhID0gdGhpcy5tb2RlbC5nZXRGaXJzdFJlY2hhcmdlRGF0YShpbmRleCk7XG4gICAgICAgIHRoaXMuZmlsbEl0ZW1MaXN0KGZpcnN0X2RhdGEpO1xuICAgICAgICBcbiAgICAgICAgaWYodGhpcy51cGRhdGFfY2hhcmdlX2RhdGEpe1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKHRoaXMudXBkYXRhX2NoYXJnZV9kYXRhKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWxsSXRlbUxpc3Q6ZnVuY3Rpb24obGlzdCl7XG4gICAgICAgIHZhciBzY2FsZSA9IDAuODtcbiAgICAgICAgdmFyIHNpemUgPSAxMTkgKiBzY2FsZTtcbiAgICAgICAgdmFyIGNyZWF0ZV9pbmRleCA9IDE7XG4gICAgICAgIGZvcih2YXIgaT0wO2k8bGlzdC5sZW5ndGg7aSsrKXtcbiAgICAgICAgICAgIHZhciBvYmplY3QgPSB0aGlzLml0ZW1fbGlzdFtpKzFdO1xuICAgICAgICAgICAgdmFyIG51bSA9IGxpc3RbaV0uaXRlbV9saXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIG9iamVjdC5zY3JvbGwuc2V0Q29udGVudFNpemUoY2Muc2l6ZShzaXplKm51bSwgb2JqZWN0LnNjcm9sbC5nZXRDb250ZW50U2l6ZSgpLmhlaWdodCkpO1xuICAgICAgICAgICAgZm9yKHZhciBrPTA7azxudW07aysrKXtcbiAgICAgICAgICAgICAgICB2YXIgX3ggPSBzaXplICogKGsrMSkgLSBzaXplICogMC41O1xuICAgICAgICAgICAgICAgIHZhciBfeSA9IHNpemUgKiAwLjU7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuaXRlbV9yZXdhcmRfbGlzdFtpKzFdW2tdKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2krMV1ba10gPSBJdGVtc1Bvb2wuZ2V0SW5zdGFuY2UoKS5nZXRJdGVtKFwiYmFja3BhY2tfaXRlbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2krMV1ba10uc2V0UGFyZW50KG9iamVjdC5zY3JvbGwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fcmV3YXJkX2xpc3RbaSsxXVtrXS5zZXRFeHRlbmREYXRhKHtzY2FsZTogc2NhbGUsaXNfc2hvd190aXBzOnRydWV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2krMV1ba10uc2hvdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih0aGlzLml0ZW1fcmV3YXJkX2xpc3RbaSsxXVtrXSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9yZXdhcmRfbGlzdFtpKzFdW2tdLnNldFBvc2l0aW9uKF94LCBfeSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2krMV1ba10uc2V0RGF0YSh7YmlkOmxpc3RbaV0uaXRlbV9saXN0W2tdWzBdLG51bTpsaXN0W2ldLml0ZW1fbGlzdFtrXVsxXX0pXG4gICAgICAgICAgICAgICAgICAgIGNjLmxvZyhsaXN0W2ldLFwibGlzdFtpXVwiKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNyZWF0ZV9pbmRleCA9IGNyZWF0ZV9pbmRleCArIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpgInmi6noi7Hpm4TmjInpkq5cbiAgICBnZXRDaG9vc2VIZXJvU3RhdHVzOmZ1bmN0aW9uKHN0YXR1cywgY2hvb3NlX2lkKXtcbiAgICAgICAgZm9yKHZhciBpID0gMTtpPD0zO2krKyl7XG4gICAgICAgICAgICBpZihzdGF0dXMgPT0gMCl7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJfZ2V0X2hlcm9baV0uZ2V0LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudGFiX2dldF9oZXJvW2ldLmJ0bi5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudGFiX2dldF9oZXJvW2ldLmJ0bi5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYl9nZXRfaGVyb1tpXS5idG4uZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuZW5hYmxlQXV0b0dyYXlFZmZlY3QgPSB0cnVlOyAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnRhYl9nZXRfaGVyb1tpXS50aXRsZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweGZmLDB4ZmYsMHhmZiwweGZmKTtcbiAgICAgICAgICAgIH1lbHNlIGlmKHN0YXR1cyA9PSAxKXtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYl9nZXRfaGVyb1tpXS5nZXQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJfZ2V0X2hlcm9baV0uYnRuLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJfZ2V0X2hlcm9baV0uYnRuLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJfZ2V0X2hlcm9baV0uYnRuLmdldENvbXBvbmVudChjYy5CdXR0b24pLmVuYWJsZUF1dG9HcmF5RWZmZWN0ID0gZmFsc2U7ICAgIFxuICAgICAgICAgICAgICAgIHRoaXMudGFiX2dldF9oZXJvW2ldLnRpdGxlLmNvbG9yID0gbmV3IGNjLkNvbG9yKDB4MjUsMHg1NSwweDA1LDB4ZmYpOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1lbHNlIGlmKHN0YXR1cyA9PSAyKXtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYl9nZXRfaGVyb1tpXS5idG4uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYoaSA9PSBjaG9vc2VfaWQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYl9nZXRfaGVyb1tpXS5nZXQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0YTpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgaWYoZGF0YSA9PSBudWxsKXJldHVybjtcbiAgICAgICAgdmFyIHN0YXR1c19saXN0ID0gW1sxLDIsM10sWzQsNSw2XV07XG4gICAgICAgIHZhciBjaGFyZ2VfbGlzdCA9IFtdO1xuICAgICAgICBmb3IodmFyIGkgaW4gc3RhdHVzX2xpc3RbdGhpcy5jdXJfaW5kZXgtMV0pe1xuICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMubW9kZWwuZ2V0Rmlyc3RCdG5TdGF0dXMoc3RhdHVzX2xpc3RbdGhpcy5jdXJfaW5kZXgtMV1baV0pO1xuICAgICAgICAgICAgY2hhcmdlX2xpc3RbaV0gPSBzdGF0dXM7XG4gICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtwYXJzZUludChpKSsxXS5maW5pc2hfaWNvbi5hY3RpdmUgPSBzdGF0dXM9PTI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdpZnRfaW5kZXggPSAwIC8v6aKG5Y+W55qE5L2N572uXG4gICAgICAgIHZhciB0b3RsZSA9IDA7XG4gICAgICAgIHRoaXMuZ2V0X2dpZnRfaWQgPSAxMDtcbiAgICAgICAgZm9yKHZhciBpIGluIGNoYXJnZV9saXN0KXtcbiAgICAgICAgICAgIHRvdGxlID0gdG90bGUgKyBjaGFyZ2VfbGlzdFtpXTtcbiAgICAgICAgICAgIGlmKGNoYXJnZV9saXN0W2ldID09IDEpe1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0X2dpZnRfaWQgPSAxO1xuXHRcdFx0ICAgIHRoaXMuZ2lmdF9pbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYodG90bGUgPT0gMCl7XG4gICAgICAgICAgICB0aGlzLmdldF9naWZ0X2lkID0gMDtcblx0XHQgICAgdGhpcy5idG5fbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLliY3lvoDlhYXlgLxcIik7XG4gICAgICAgIH1lbHNlIGlmKHRvdGxlID09IDEgfHwgdG90bGUgPT0gMyB8fCB0b3RsZSA9PSA1KXtcbiAgICAgICAgICAgIHRoaXMuYnRuX2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi6aKG5Y+W5aWW5YqxXCIpO1xuICAgICAgICB9ZWxzZSBpZih0b3RsZSA9PSAyIHx8IHRvdGxlID09IDQpe1xuICAgICAgICAgICAgdGhpcy5idG5fbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmmI7ml6Xlho3mnaVcIik7XG4gICAgICAgIH1lbHNlIGlmKHRvdGxlID09IDYpe1xuICAgICAgICAgICAgdGhpcy5idG5fbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLpooblj5blrozmr5VcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwgyzkuZ/lsLHmmK/kuIDkuKrnqpfkvZPnmoTmraPlvI/lhaXlj6Ms5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb3BlblJvb3RXbmQ6ZnVuY3Rpb24oaW5kZXgpe1xuICAgICAgICBpbmRleCA9IGluZGV4IHx8IDE7XG4gICAgICAgIHRoaXMuY2hhbmdlVGFiVmlldyhpbmRleCk7XG4gICAgICAgIHRoaXMuY3RybC5zZW5kZXIyMTAxMigpO1xuICAgIH0sXG5cbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBmb3IodmFyIGk9IDE7aTw9MztpKyspe1xuICAgICAgICAgICAgZm9yKHZhciBqIGluIHRoaXMuaXRlbV9yZXdhcmRfbGlzdFtpXSl7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2ldW2pdLmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW1fcmV3YXJkX2xpc3RbaV0gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0ID0gW107XG5cdCAgICB0aGlzLmN0cmwub3Blbk5ld0ZpcnN0Q2hhcmdlVmlldyhmYWxzZSk7XG4gICAgfSxcbn0pIl19