|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/action/view/action_common_panel.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, 'a8e01LASa1EWb750z0bL5Dv', 'action_common_panel');
|
// Scripts/mod/action/view/action_common_panel.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 排行通用界面
|
// <br/>Create: 2019-04-22 19:09:12
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var ActionConst = require("action_const");
|
|
var ActionCommonItem = require("action_common_Item");
|
|
var CommonScrollView = require("common_scrollview");
|
|
var ActionController = require("action_controller");
|
|
var ActionEvent = require("action_event");
|
|
var TimeTool = require("timetool");
|
|
var RankConstant = require("rank_constant");
|
|
var RankController = require("rank_controller");
|
|
var ActionCommonPanel = cc.Class({
|
"extends": BasePanel,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("action", "action_hero_expedit_panel");
|
this.ctrl = ActionController.getInstance();
|
this.holiday_bid = arguments[0];
|
},
|
// 可以初始化声明一些变量的
|
initConfig: function initConfig() {
|
var a = new cc.Color(108, 210, 40);
|
var b = new cc.Color(255, 0, 0);
|
var c = new cc.color(0xff, 0x00, 0x00);
|
this.colorText = [a, b, c];
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initPanel: function initPanel() {
|
var self = this;
|
self.main_container = self.root_wnd.getChildByName("main_container");
|
this.title_con = self.main_container.getChildByName("title_con");
|
self.time_label = this.title_con.getChildByName("label_time_key");
|
self.time_text = this.title_con.getChildByName("label_time").getComponent(cc.Label);
|
self.time_text.node.color = new cc.Color(0x80, 0xf7, 0x31, 0xff);
|
self.rank_btn = this.title_con.getChildByName("rank_btn");
|
self.rank_btn.getChildByName("label").getComponent(cc.Label).string = "详细排行";
|
self.reward_btn = this.title_con.getChildByName("reward_btn");
|
self.reward_btn.getChildByName("label").getComponent(cc.Label).string = "奖励预览";
|
self.btn_rule = this.title_con.getChildByName("btn_rule");
|
self.btn_rule.active = false;
|
this.loadBannerImage();
|
self.goods_con = self.main_container.getChildByName("charge_con");
|
var bgSize = self.goods_con.getContentSize();
|
var scroll_view_size = cc.size(bgSize.width, bgSize.height);
|
var setting = {
|
item_class: ActionCommonItem,
|
// -- 单元类
|
start_x: 0,
|
//-- 第一个单元的X起点
|
space_x: 0,
|
//-- x方向的间隔
|
start_y: 0,
|
//-- 第一个单元的Y起点
|
space_y: 0,
|
//-- y方向的间隔
|
item_width: 688,
|
//-- 单元的尺寸width
|
item_height: 150,
|
//-- 单元的尺寸height
|
row: 0,
|
//-- 行数,作用于水平滚动类型
|
col: 1,
|
//-- 列数,作用于垂直滚动类型
|
need_dynamic: true
|
};
|
self.item_scrollview = new CommonScrollView();
|
self.item_scrollview.createScroll(self.goods_con, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting);
|
},
|
// 加载banner图片
|
loadBannerImage: function loadBannerImage() {
|
if (this.holiday_bid == ActionConst.ActionRankCommonType.hero_expedit || this.holiday_bid == ActionConst.ActionRankCommonType.adventure) {
|
this.btn_rule.active = true;
|
} else if (this.holiday_bid == ActionConst.ActionRankCommonType.longin_gift || this.holiday_bid == ActionConst.ActionRankCommonType.luckly_egg) {
|
this.reward_btn.active = false;
|
this.rank_btn.active = false;
|
} else if (this.holiday_bid == ActionConst.ActionRankCommonType.acc_luxury || this.holiday_bid == ActionConst.ActionRankCommonType.totle_charge || this.holiday_bid == ActionConst.ActionRankCommonType.totle_consume || this.holiday_bid == ActionConst.ActionRankCommonType.fusion_blessing || this.holiday_bid == ActionConst.ActionRankCommonType.updata_star || this.holiday_bid == ActionConst.ActionRankCommonType.hero_awake || this.holiday_bid == ActionConst.ActionRankCommonType.limit_charge) {
|
//倒计时在右边的时候(本来在左边的)
|
if (this.holiday_bid == ActionConst.ActionRankCommonType.acc_luxury) {
|
this.btn_rule.active = true;
|
}
|
|
this.btn_rule.x = 318;
|
this.time_label.setPosition(cc.v2(141, -133)); // self.time_text:setAnchorPoint(cc.p(0, 0.5))
|
|
this.time_text.node.setPosition(cc.v2(234, -133));
|
this.reward_btn.active = false;
|
this.rank_btn.active = false;
|
} // 横幅图片
|
|
|
var title_img = this.title_con.getChildByName("title_img").getComponent(cc.Sprite);
|
var str_banner = "txt_cn_welfare_banner11";
|
var tab_vo = this.ctrl.getActionSubTabVo(this.holiday_bid);
|
|
if (tab_vo && tab_vo.reward_title != "" && tab_vo.reward_title) {
|
str_banner = tab_vo.reward_title;
|
}
|
|
var path = PathTool.getWelfareBannerRes(str_banner);
|
this.loadRes(path, function (res) {
|
title_img.spriteFrame = res;
|
}.bind(this));
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
this.addGlobalEvent(ActionEvent.UPDATE_HOLIDAY_SIGNLE, function (data) {
|
if (!data) return;
|
|
if (data.bid == this.holiday_bid) {
|
this.setPanelData(data);
|
}
|
}.bind(this));
|
this.rank_btn.on('click', function () {
|
Utils.playButtonSound(1);
|
this.jumpRankView();
|
}, this);
|
this.reward_btn.on('click', function () {
|
Utils.playButtonSound(1);
|
RankController.getInstance().openRankRewardPanel(true, this.holiday_bid);
|
}, this);
|
this.btn_rule.on('click', function () {
|
Utils.playButtonSound(1);
|
var config = Config.holiday_client_data.data_constant.expedit_rules;
|
|
if (this.holiday_bid == ActionConst.ActionRankCommonType.adventure) {
|
config = Config.holiday_client_data.data_constant.adventure_rules;
|
} else if (this.holiday_bid == ActionConst.ActionRankCommonType.acc_luxury) {
|
config = Config.holiday_client_data.data_constant.luxury_rules;
|
}
|
|
var p = this.btn_rule.convertToWorldSpace(cc.v2(0, 0));
|
|
require("tips_controller").getInstance().showCommonTips(config.desc, p, null, null, 500); // TipsManager.getInstance().showCommonTips(config.desc, sender.getTouchBeganPosition(),nil,nil,500)
|
|
}, this);
|
this.ctrl.cs16603(this.holiday_bid);
|
},
|
setPanelData: function setPanelData(data) {
|
var self = this; // -- 活动剩余时间
|
|
var is_time_end = false;
|
var time = data.remain_sec || 0;
|
|
if (self.holiday_bid == ActionConst.ActionRankCommonType.epoint_gold || self.holiday_bid == ActionConst.ActionRankCommonType.speed_fight || self.holiday_bid == ActionConst.ActionRankCommonType.voyage || self.holiday_bid == ActionConst.ActionRankCommonType.hero_expedit || self.holiday_bid == ActionConst.ActionRankCommonType.adventure) {
|
time = time - 24 * 60 * 60; //--提前一天显示已结束,然后一天过后,活动就会消失
|
|
if (time <= 0) {
|
time = 0;
|
is_time_end = true;
|
}
|
}
|
|
if (this.item_scrollview) {
|
this.ctrl.getModel().sortItemList(data.aim_list);
|
var tab = {};
|
tab.bid = this.holiday_bid;
|
tab.time_end = is_time_end; //--排行活动用到,用来判断时间是否结束
|
|
tab.finish = data.finish; //--登录\累计充值
|
|
this.item_scrollview.setData(data.aim_list, null, tab);
|
} //积天豪礼特殊处理
|
|
|
if (this.holiday_bid == ActionConst.ActionRankCommonType.acc_luxury) {
|
this.time_text.node.active = false;
|
this.time_label.active = false;
|
} else {
|
this.time_text.node.active = true;
|
this.time_label.active = true;
|
this.ctrl.getModel().setCountDownTime(this.time_text, time);
|
} // this.setLessTime(time)
|
|
},
|
jumpRankView: function jumpRankView() {
|
var jump_rank = RankConstant.RankType.hero_expedit;
|
|
if (this.holiday_bid == ActionConst.ActionRankCommonType.speed_fight) {
|
jump_rank = RankConstant.RankType.speed_fight;
|
} else if (this.holiday_bid == ActionConst.ActionRankCommonType.voyage) {
|
jump_rank = RankConstant.RankType.voyage;
|
} else if (this.holiday_bid == ActionConst.ActionRankCommonType.epoint_gold) {
|
jump_rank = RankConstant.RankType.pointglod;
|
} else if (this.holiday_bid == ActionConst.ActionRankCommonType.adventure) {
|
jump_rank = RankConstant.RankType.adventure_muster;
|
}
|
|
RankController.getInstance().openRankView(true, jump_rank);
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
|
onShow: function onShow(params) {},
|
// 面板设置不可见的回调,这里做一些不可见的屏蔽处理
|
onHide: function onHide() {},
|
setLessTime: function setLessTime(less_time) {
|
if (!this.time_text) {
|
return;
|
}
|
|
less_time = less_time || 0;
|
|
if (less_time > 0) {
|
this.setTimeFormatString(less_time);
|
|
if (this.time_tichet == null) {
|
this.time_tichet = gcore.Timer.set(function () {
|
less_time--;
|
|
if (less_time < 0) {
|
gcore.Timer.del(this.time_tichet);
|
this.time_tichet = null;
|
this.time_text.string = "已结束";
|
this.time_text.node.color = this.colorText[2];
|
|
if (this.holiday_item_data && this.item_scrollview) {
|
this.ctrl.getModel().sortItemList(this.holiday_item_data.aim_list);
|
var tab = {};
|
tab.bid = this.holiday_bid;
|
tab.time_end = true;
|
this.item_scrollview.setData(this.holiday_item_data.aim_list, null, tab);
|
}
|
} else {
|
this.setTimeFormatString(less_time);
|
}
|
}.bind(this), 1000, -1);
|
}
|
} else {
|
this.setTimeFormatString(less_time);
|
}
|
},
|
setTimeFormatString: function setTimeFormatString(time) {
|
var self = this;
|
|
if (time > 0) {
|
self.time_text.string = TimeTool.getTimeFormatDayIIIIIIII(time);
|
self.time_text.node.color = this.colorText[0]; //new cc.Color(108,210,40);
|
} else {
|
self.time_text.string = "已结束";
|
self.time_text.node.color = this.colorText[1]; //new cc.Color(255,0,0)
|
}
|
},
|
// 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
|
onDelete: function onDelete() {
|
if (this.item_scrollview) {
|
this.item_scrollview.deleteMe();
|
this.item_scrollview = null;
|
}
|
|
if (this.time_tichet) {
|
gcore.Timer.del(this.time_tichet);
|
this.time_tichet = null;
|
}
|
|
if (this.time_text.node) {
|
this.time_text.node.stopAllActions();
|
}
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxhY3Rpb25cXHZpZXdcXGFjdGlvbl9jb21tb25fcGFuZWwuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiQWN0aW9uQ29uc3QiLCJBY3Rpb25Db21tb25JdGVtIiwiQ29tbW9uU2Nyb2xsVmlldyIsIkFjdGlvbkNvbnRyb2xsZXIiLCJBY3Rpb25FdmVudCIsIlRpbWVUb29sIiwiUmFua0NvbnN0YW50IiwiUmFua0NvbnRyb2xsZXIiLCJBY3Rpb25Db21tb25QYW5lbCIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJob2xpZGF5X2JpZCIsImFyZ3VtZW50cyIsImluaXRDb25maWciLCJhIiwiQ29sb3IiLCJiIiwiYyIsImNvbG9yIiwiY29sb3JUZXh0IiwiaW5pdFBhbmVsIiwic2VsZiIsIm1haW5fY29udGFpbmVyIiwicm9vdF93bmQiLCJnZXRDaGlsZEJ5TmFtZSIsInRpdGxlX2NvbiIsInRpbWVfbGFiZWwiLCJ0aW1lX3RleHQiLCJnZXRDb21wb25lbnQiLCJMYWJlbCIsIm5vZGUiLCJyYW5rX2J0biIsInN0cmluZyIsInJld2FyZF9idG4iLCJidG5fcnVsZSIsImFjdGl2ZSIsImxvYWRCYW5uZXJJbWFnZSIsImdvb2RzX2NvbiIsImJnU2l6ZSIsImdldENvbnRlbnRTaXplIiwic2Nyb2xsX3ZpZXdfc2l6ZSIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsIm5lZWRfZHluYW1pYyIsIml0ZW1fc2Nyb2xsdmlldyIsImNyZWF0ZVNjcm9sbCIsInYyIiwiU2Nyb2xsVmlld0RpciIsInZlcnRpY2FsIiwiU2Nyb2xsVmlld1N0YXJ0UG9zIiwidG9wIiwiQWN0aW9uUmFua0NvbW1vblR5cGUiLCJoZXJvX2V4cGVkaXQiLCJhZHZlbnR1cmUiLCJsb25naW5fZ2lmdCIsImx1Y2tseV9lZ2ciLCJhY2NfbHV4dXJ5IiwidG90bGVfY2hhcmdlIiwidG90bGVfY29uc3VtZSIsImZ1c2lvbl9ibGVzc2luZyIsInVwZGF0YV9zdGFyIiwiaGVyb19hd2FrZSIsImxpbWl0X2NoYXJnZSIsIngiLCJzZXRQb3NpdGlvbiIsInRpdGxlX2ltZyIsIlNwcml0ZSIsInN0cl9iYW5uZXIiLCJ0YWJfdm8iLCJnZXRBY3Rpb25TdWJUYWJWbyIsInJld2FyZF90aXRsZSIsInBhdGgiLCJnZXRXZWxmYXJlQmFubmVyUmVzIiwibG9hZFJlcyIsInJlcyIsInNwcml0ZUZyYW1lIiwiYmluZCIsInJlZ2lzdGVyRXZlbnQiLCJhZGRHbG9iYWxFdmVudCIsIlVQREFURV9IT0xJREFZX1NJR05MRSIsImRhdGEiLCJiaWQiLCJzZXRQYW5lbERhdGEiLCJvbiIsIlV0aWxzIiwicGxheUJ1dHRvblNvdW5kIiwianVtcFJhbmtWaWV3Iiwib3BlblJhbmtSZXdhcmRQYW5lbCIsImNvbmZpZyIsIkNvbmZpZyIsImhvbGlkYXlfY2xpZW50X2RhdGEiLCJkYXRhX2NvbnN0YW50IiwiZXhwZWRpdF9ydWxlcyIsImFkdmVudHVyZV9ydWxlcyIsImx1eHVyeV9ydWxlcyIsInAiLCJjb252ZXJ0VG9Xb3JsZFNwYWNlIiwic2hvd0NvbW1vblRpcHMiLCJkZXNjIiwiY3MxNjYwMyIsImlzX3RpbWVfZW5kIiwidGltZSIsInJlbWFpbl9zZWMiLCJlcG9pbnRfZ29sZCIsInNwZWVkX2ZpZ2h0Iiwidm95YWdlIiwiZ2V0TW9kZWwiLCJzb3J0SXRlbUxpc3QiLCJhaW1fbGlzdCIsInRhYiIsInRpbWVfZW5kIiwiZmluaXNoIiwic2V0RGF0YSIsInNldENvdW50RG93blRpbWUiLCJqdW1wX3JhbmsiLCJSYW5rVHlwZSIsInBvaW50Z2xvZCIsImFkdmVudHVyZV9tdXN0ZXIiLCJvcGVuUmFua1ZpZXciLCJvblNob3ciLCJwYXJhbXMiLCJvbkhpZGUiLCJzZXRMZXNzVGltZSIsImxlc3NfdGltZSIsInNldFRpbWVGb3JtYXRTdHJpbmciLCJ0aW1lX3RpY2hldCIsImdjb3JlIiwiVGltZXIiLCJzZXQiLCJkZWwiLCJob2xpZGF5X2l0ZW1fZGF0YSIsImdldFRpbWVGb3JtYXREYXlJSUlJSUlJSSIsIm9uRGVsZXRlIiwiZGVsZXRlTWUiLCJzdG9wQWxsQWN0aW9ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLFdBQVcsR0FBR0QsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBQ0EsSUFBSUUsZ0JBQWdCLEdBQUdGLE9BQU8sQ0FBQyxvQkFBRCxDQUE5Qjs7QUFDQSxJQUFJRyxnQkFBZ0IsR0FBR0gsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlJLGdCQUFnQixHQUFHSixPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUssV0FBVyxHQUFHTCxPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQSxJQUFJTSxRQUFRLEdBQUdOLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlPLFlBQVksR0FBR1AsT0FBTyxDQUFDLGVBQUQsQ0FBMUI7O0FBQ0EsSUFBSVEsY0FBYyxHQUFHUixPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSVMsaUJBQWlCLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQzdCLGFBQVNDLFNBRG9CO0FBRTdCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCZixRQUFRLENBQUNnQixhQUFULENBQXVCLFFBQXZCLEVBQWlDLDJCQUFqQyxDQUFsQjtBQUNBLFNBQUtDLElBQUwsR0FBYVosZ0JBQWdCLENBQUNhLFdBQWpCLEVBQWI7QUFDQSxTQUFLQyxX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QUksQ0FBQ00sU0FBTCxDQUFlRyxJQUFmLENBQW9CWixLQUFwQixHQUE0QixLQUFLQyxTQUFMLENBQWUsQ0FBZixDQUE1QixDQUZTLENBRW9DO0FBQ2hELEtBSEQsTUFHSztBQUNERSxNQUFBQSxJQUFJLENBQUNNLFNBQUwsQ0FBZUssTUFBZixHQUF3QixLQUF4QjtBQUNBWCxNQUFBQSxJQUFJLENBQUNNLFNBQUwsQ0FBZUcsSUFBZixDQUFvQlosS0FBcEIsR0FBNEIsS0FBS0MsU0FBTCxDQUFlLENBQWYsQ0FBNUIsQ0FGQyxDQUU0QztBQUNoRDtBQUNKLEdBdE40QjtBQXVON0I7QUFDQTRILEVBQUFBLFFBQVEsRUFBQyxvQkFBVTtBQUNmLFFBQUksS0FBS3hGLGVBQVQsRUFBeUI7QUFDckIsV0FBS0EsZUFBTCxDQUFxQnlGLFFBQXJCO0FBQ0EsV0FBS3pGLGVBQUwsR0FBdUIsSUFBdkI7QUFDSDs7QUFDRCxRQUFHLEtBQUtpRixXQUFSLEVBQW9CO0FBQ2hCQyxNQUFBQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUUsR0FBWixDQUFnQixLQUFLSixXQUFyQjtBQUNBLFdBQUtBLFdBQUwsR0FBbUIsSUFBbkI7QUFDSDs7QUFDRCxRQUFHLEtBQUs3RyxTQUFMLENBQWVHLElBQWxCLEVBQXVCO0FBQ25CLFdBQUtILFNBQUwsQ0FBZUcsSUFBZixDQUFvQm1ILGNBQXBCO0FBQ0g7QUFDSjtBQXBPNEIsQ0FBVCxDQUF4QiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOaOkuihjOmAmueUqOeVjOmdolxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDQtMjIgMTk6MDk6MTJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQWN0aW9uQ29uc3QgPSByZXF1aXJlKFwiYWN0aW9uX2NvbnN0XCIpO1xudmFyIEFjdGlvbkNvbW1vbkl0ZW0gPSByZXF1aXJlKFwiYWN0aW9uX2NvbW1vbl9JdGVtXCIpXG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcbnZhciBBY3Rpb25Db250cm9sbGVyID0gcmVxdWlyZShcImFjdGlvbl9jb250cm9sbGVyXCIpXG52YXIgQWN0aW9uRXZlbnQgPSByZXF1aXJlKFwiYWN0aW9uX2V2ZW50XCIpO1xudmFyIFRpbWVUb29sID0gcmVxdWlyZShcInRpbWV0b29sXCIpXG52YXIgUmFua0NvbnN0YW50ID0gcmVxdWlyZShcInJhbmtfY29uc3RhbnRcIilcbnZhciBSYW5rQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyYW5rX2NvbnRyb2xsZXJcIilcbnZhciBBY3Rpb25Db21tb25QYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiYWN0aW9uXCIsIFwiYWN0aW9uX2hlcm9fZXhwZWRpdF9wYW5lbFwiKTtcbiAgICAgICAgdGhpcy5jdHJsID0gIEFjdGlvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKVxuICAgICAgICB0aGlzLmhvbGlkYXlfYmlkID0gYXJndW1lbnRzWzBdXG4gICAgfSxcblxuICAgIC8vIOWPr+S7peWIneWni+WMluWjsOaYjuS4gOS6m+WPmOmHj+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcbiAgICAgICAgbGV0IGEgPSBuZXcgY2MuQ29sb3IoMTA4LDIxMCw0MCk7XG4gICAgICAgIGxldCBiID0gbmV3IGNjLkNvbG9yKDI1NSwwLDApO1xuICAgICAgICBsZXQgYyA9IG5ldyBjYy5jb2xvcigweGZmLDB4MDAsMHgwMCk7XG4gICAgICAgIHRoaXMuY29sb3JUZXh0ID0gW2EsYixjXVxuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdFBhbmVsOmZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5tYWluX2NvbnRhaW5lciA9IHNlbGYucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKTtcbiAgICAgICAgdGhpcy50aXRsZV9jb24gPSBzZWxmLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwidGl0bGVfY29uXCIpO1xuICAgICAgICBzZWxmLnRpbWVfbGFiZWwgPSB0aGlzLnRpdGxlX2Nvbi5nZXRDaGlsZEJ5TmFtZShcImxhYmVsX3RpbWVfa2V5XCIpXG4gICAgICAgIHNlbGYudGltZV90ZXh0ID0gdGhpcy50aXRsZV9jb24uZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbF90aW1lXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIHNlbGYudGltZV90ZXh0Lm5vZGUuY29sb3IgPSBuZXcgY2MuQ29sb3IoMHg4MCwweGY3LDB4MzEsMHhmZilcbiAgICAgICAgc2VsZi5yYW5rX2J0biA9IHRoaXMudGl0bGVfY29uLmdldENoaWxkQnlOYW1lKFwicmFua19idG5cIik7XG4gICAgICAgIHNlbGYucmFua19idG4uZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFwi6K+m57uG5o6S6KGMXCI7XG4gICAgICAgIHNlbGYucmV3YXJkX2J0biA9IHRoaXMudGl0bGVfY29uLmdldENoaWxkQnlOYW1lKFwicmV3YXJkX2J0blwiKTtcbiAgICAgICAgc2VsZi5yZXdhcmRfYnRuLmdldENoaWxkQnlOYW1lKFwibGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBcIuWlluWKsemihOiniFwiO1xuICAgICAgICBzZWxmLmJ0bl9ydWxlID0gdGhpcy50aXRsZV9jb24uZ2V0Q2hpbGRCeU5hbWUoXCJidG5fcnVsZVwiKVxuICAgICAgICBzZWxmLmJ0bl9ydWxlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5sb2FkQmFubmVySW1hZ2UoKTtcblxuICAgICAgICBzZWxmLmdvb2RzX2NvbiA9IHNlbGYubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJjaGFyZ2VfY29uXCIpXG4gICAgICAgIGxldCBiZ1NpemUgPSBzZWxmLmdvb2RzX2Nvbi5nZXRDb250ZW50U2l6ZSgpXG4gICAgICAgIGxldCBzY3JvbGxfdmlld19zaXplID0gY2Muc2l6ZShiZ1NpemUud2lkdGgsIGJnU2l6ZS5oZWlnaHQpXG4gICAgICAgIGxldCBzZXR0aW5nID0ge1xuICAgICAgICAgICAgaXRlbV9jbGFzcyA6IEFjdGlvbkNvbW1vbkl0ZW0sICAgICAvLyAtLSDljZXlhYPnsbtcbiAgICAgICAgICAgIHN0YXJ0X3ggOiAwLCAgICAgICAgICAgICAgICAgIC8vLS0g56ys5LiA5Liq5Y2V5YWD55qEWOi1t+eCuVxuICAgICAgICAgICAgc3BhY2VfeCA6IDAsICAgICAgICAgICAgICAgICAgLy8tLSB45pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBzdGFydF95IDogMCwgICAgICAgICAgICAgICAgICAvLy0tIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3kgOiAwLCAgICAgICAgICAgICAgICAgIC8vLS0geeaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgaXRlbV93aWR0aCA6IDY4OCwgICAgICAgICAgICAgLy8tLSDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQgOiAxNTAsICAgICAgICAgICAgLy8tLSDljZXlhYPnmoTlsLrlr7hoZWlnaHRcbiAgICAgICAgICAgIHJvdyA6IDAsICAgICAgICAgICAgICAgICAgICAgIC8vLS0g6KGM5pWw77yM5L2c55So5LqO5rC05bmz5rua5Yqo57G75Z6LXG4gICAgICAgICAgICBjb2wgOiAxLCAgICAgICAgICAgICAgICAgICAgICAvLy0tIOWIl+aVsO+8jOS9nOeUqOS6juWeguebtOa7muWKqOexu+Wei1xuICAgICAgICAgICAgbmVlZF9keW5hbWljIDogdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHNlbGYuaXRlbV9zY3JvbGx2aWV3ID0gbmV3IENvbW1vblNjcm9sbFZpZXcoKVxuICAgICAgICBzZWxmLml0ZW1fc2Nyb2xsdmlldy5jcmVhdGVTY3JvbGwoc2VsZi5nb29kc19jb24sIGNjLnYyKDAsMCkgLCBTY3JvbGxWaWV3RGlyLnZlcnRpY2FsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCBzY3JvbGxfdmlld19zaXplLCBzZXR0aW5nKVxuICAgIH0sXG5cbiAgICAvLyDliqDovb1iYW5uZXLlm77niYdcbiAgICBsb2FkQmFubmVySW1hZ2U6ZnVuY3Rpb24oKXtcbiAgICAgICAgaWYodGhpcy5ob2xpZGF5X2JpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS5oZXJvX2V4cGVkaXQgfHwgdGhpcy5ob2xpZGF5X2JpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS5hZHZlbnR1cmUpe1xuICAgICAgICAgICAgdGhpcy5idG5fcnVsZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9ZWxzZSBpZih0aGlzLmhvbGlkYXlfYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmxvbmdpbl9naWZ0IHx8IHRoaXMuaG9saWRheV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUubHVja2x5X2VnZyl7XG4gICAgICAgICAgICB0aGlzLnJld2FyZF9idG4uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJhbmtfYnRuLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9ZWxzZSBpZih0aGlzLmhvbGlkYXlfYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmFjY19sdXh1cnkgfHwgdGhpcy5ob2xpZGF5X2JpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS50b3RsZV9jaGFyZ2UgfHxcbiAgICAgICAgICAgIHRoaXMuaG9saWRheV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUudG90bGVfY29uc3VtZSB8fCB0aGlzLmhvbGlkYXlfYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmZ1c2lvbl9ibGVzc2luZyB8fCBcbiAgICAgICAgICAgIHRoaXMuaG9saWRheV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUudXBkYXRhX3N0YXIgfHwgdGhpcy5ob2xpZGF5X2JpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS5oZXJvX2F3YWtlIHx8XG4gICAgICAgICAgICB0aGlzLmhvbGlkYXlfYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmxpbWl0X2NoYXJnZSl7Ly/lgJLorqHml7blnKjlj7PovrnnmoTml7blgJnvvIjmnKzmnaXlnKjlt6bovrnnmoTvvIlcbiAgICAgICAgICAgICAgICBpZih0aGlzLmhvbGlkYXlfYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmFjY19sdXh1cnkpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ0bl9ydWxlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYnRuX3J1bGUueCA9IDMxODtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVfbGFiZWwuc2V0UG9zaXRpb24oY2MudjIoMTQxLCAtMTMzKSk7XG4gICAgICAgICAgICAgICAgLy8gc2VsZi50aW1lX3RleHQ6c2V0QW5jaG9yUG9pbnQoY2MucCgwLCAwLjUpKVxuICAgICAgICAgICAgICAgIHRoaXMudGltZV90ZXh0Lm5vZGUuc2V0UG9zaXRpb24oY2MudjIoMjM0LCAtMTMzKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRfYnRuLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucmFua19idG4uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8g5qiq5bmF5Zu+54mHXG4gICAgICAgIHZhciB0aXRsZV9pbWcgPSB0aGlzLnRpdGxlX2Nvbi5nZXRDaGlsZEJ5TmFtZShcInRpdGxlX2ltZ1wiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKTtcbiAgICAgICAgdmFyIHN0cl9iYW5uZXIgPSBcInR4dF9jbl93ZWxmYXJlX2Jhbm5lcjExXCI7XG4gICAgICAgIHZhciB0YWJfdm8gPSB0aGlzLmN0cmwuZ2V0QWN0aW9uU3ViVGFiVm8odGhpcy5ob2xpZGF5X2JpZCk7XG5cbiAgICAgICAgaWYodGFiX3ZvICYmIHRhYl92by5yZXdhcmRfdGl0bGUgIT0gXCJcIiAmJiB0YWJfdm8ucmV3YXJkX3RpdGxlKXtcbiAgICAgICAgICAgIHN0cl9iYW5uZXIgPSB0YWJfdm8ucmV3YXJkX3RpdGxlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBhdGggPSBQYXRoVG9vbC5nZXRXZWxmYXJlQmFubmVyUmVzKHN0cl9iYW5uZXIpO1xuICAgICAgICB0aGlzLmxvYWRSZXMocGF0aCxmdW5jdGlvbihyZXMpe1xuICAgICAgICAgICAgdGl0bGVfaW1nLnNwcml0ZUZyYW1lID0gcmVzO1xuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoQWN0aW9uRXZlbnQuVVBEQVRFX0hPTElEQVlfU0lHTkxFLGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICAgICAgaWYgKCFkYXRhKSByZXR1cm5cbiAgICAgICAgICAgIGlmIChkYXRhLmJpZCA9PSB0aGlzLmhvbGlkYXlfYmlkKXtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhbmVsRGF0YShkYXRhKVxuICAgICAgICAgICAgfSAgXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgdGhpcy5yYW5rX2J0bi5vbignY2xpY2snLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSlcbiAgICAgICAgICAgIHRoaXMuanVtcFJhbmtWaWV3KClcbiAgICAgICAgfSx0aGlzKVxuXG4gICAgICAgIHRoaXMucmV3YXJkX2J0bi5vbignY2xpY2snLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSlcbiAgICAgICAgICAgIFJhbmtDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlblJhbmtSZXdhcmRQYW5lbCh0cnVlLCB0aGlzLmhvbGlkYXlfYmlkKVxuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuYnRuX3J1bGUub24oJ2NsaWNrJyxmdW5jdGlvbigpe1xuICAgICAgICAgICAgVXRpbHMucGxheUJ1dHRvblNvdW5kKDEpXG4gICAgICAgICAgICBsZXQgY29uZmlnID0gQ29uZmlnLmhvbGlkYXlfY2xpZW50X2RhdGEuZGF0YV9jb25zdGFudC5leHBlZGl0X3J1bGVzXG4gICAgICAgICAgICBpZih0aGlzLmhvbGlkYXlfYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmFkdmVudHVyZSl7XG4gICAgICAgICAgICAgICAgY29uZmlnID0gQ29uZmlnLmhvbGlkYXlfY2xpZW50X2RhdGEuZGF0YV9jb25zdGFudC5hZHZlbnR1cmVfcnVsZXNcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuaG9saWRheV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUuYWNjX2x1eHVyeSl7XG4gICAgICAgICAgICAgICAgY29uZmlnID0gQ29uZmlnLmhvbGlkYXlfY2xpZW50X2RhdGEuZGF0YV9jb25zdGFudC5sdXh1cnlfcnVsZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwID0gdGhpcy5idG5fcnVsZS5jb252ZXJ0VG9Xb3JsZFNwYWNlKGNjLnYyKDAsMCkpXG4gICAgICAgICAgICByZXF1aXJlKFwidGlwc19jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkuc2hvd0NvbW1vblRpcHMoY29uZmlnLmRlc2MscCxudWxsLG51bGwsNTAwKVxuICAgICAgICAgICAgLy8gVGlwc01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zaG93Q29tbW9uVGlwcyhjb25maWcuZGVzYywgc2VuZGVyLmdldFRvdWNoQmVnYW5Qb3NpdGlvbigpLG5pbCxuaWwsNTAwKVxuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuY3RybC5jczE2NjAzKHRoaXMuaG9saWRheV9iaWQpXG4gICAgfSxcbiAgICBzZXRQYW5lbERhdGEoZGF0YSl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICAvLyAtLSDmtLvliqjliankvZnml7bpl7RcbiAgICAgICAgbGV0IGlzX3RpbWVfZW5kID0gZmFsc2VcbiAgICAgICAgbGV0IHRpbWUgPSBkYXRhLnJlbWFpbl9zZWMgfHwgMFxuICAgICAgICBpZiAoc2VsZi5ob2xpZGF5X2JpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS5lcG9pbnRfZ29sZCB8fCBzZWxmLmhvbGlkYXlfYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLnNwZWVkX2ZpZ2h0IHx8XG4gICAgICAgICAgICBzZWxmLmhvbGlkYXlfYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLnZveWFnZSB8fCBzZWxmLmhvbGlkYXlfYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmhlcm9fZXhwZWRpdCB8fCBcbiAgICAgICAgICAgIHNlbGYuaG9saWRheV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUuYWR2ZW50dXJlKXtcbiAgICAgICAgICAgIHRpbWUgPSB0aW1lIC0gMjQqNjAqNjAgLy8tLeaPkOWJjeS4gOWkqeaYvuekuuW3sue7k+adn++8jOeEtuWQjuS4gOWkqei/h+WQju+8jOa0u+WKqOWwseS8mua2iOWksVxuICAgICAgICAgICAgaWYgKHRpbWUgPD0gMCl7XG4gICAgICAgICAgICAgICAgdGltZSA9IDBcbiAgICAgICAgICAgICAgICBpc190aW1lX2VuZCA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pdGVtX3Njcm9sbHZpZXcpe1xuICAgICAgICAgICAgdGhpcy5jdHJsLmdldE1vZGVsKCkuc29ydEl0ZW1MaXN0KGRhdGEuYWltX2xpc3QpXG4gICAgICAgICAgICBsZXQgdGFiID0ge31cbiAgICAgICAgICAgIHRhYi5iaWQgPSB0aGlzLmhvbGlkYXlfYmlkXG4gICAgICAgICAgICB0YWIudGltZV9lbmQgPSBpc190aW1lX2VuZCAvLy0t5o6S6KGM5rS75Yqo55So5Yiw77yM55So5p2l5Yik5pat5pe26Ze05piv5ZCm57uT5p2fXG4gICAgICAgICAgICB0YWIuZmluaXNoID0gZGF0YS5maW5pc2ggLy8tLeeZu+W9lVxc57Sv6K6h5YWF5YC8XG4gICAgICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5zZXREYXRhKGRhdGEuYWltX2xpc3QsbnVsbCx0YWIpXG4gICAgICAgIH1cbiAgICAgICAgLy/np6/lpKnosarnpLznibnmrorlpITnkIZcbiAgICAgICAgaWYodGhpcy5ob2xpZGF5X2JpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS5hY2NfbHV4dXJ5KXtcbiAgICAgICAgICAgIHRoaXMudGltZV90ZXh0Lm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRpbWVfbGFiZWwuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy50aW1lX3RleHQubm9kZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50aW1lX2xhYmVsLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5zZXRDb3VudERvd25UaW1lKHRoaXMudGltZV90ZXh0LHRpbWUpXG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5zZXRMZXNzVGltZSh0aW1lKVxuICAgIH0sXG4gICAganVtcFJhbmtWaWV3KCl7XG4gICAgICAgIGxldCBqdW1wX3JhbmsgPSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuaGVyb19leHBlZGl0XG4gICAgICAgIGlmKHRoaXMuaG9saWRheV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUuc3BlZWRfZmlnaHQpe1xuICAgICAgICAgICAganVtcF9yYW5rID0gUmFua0NvbnN0YW50LlJhbmtUeXBlLnNwZWVkX2ZpZ2h0XG4gICAgICAgIH1lbHNlIGlmKHRoaXMuaG9saWRheV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUudm95YWdlKXtcbiAgICAgICAgICAgIGp1bXBfcmFuayA9IFJhbmtDb25zdGFudC5SYW5rVHlwZS52b3lhZ2VcbiAgICAgICAgfWVsc2UgaWYodGhpcy5ob2xpZGF5X2JpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS5lcG9pbnRfZ29sZCl7XG4gICAgICAgICAgICBqdW1wX3JhbmsgPSBSYW5rQ29uc3RhbnQuUmFua1R5cGUucG9pbnRnbG9kXG4gICAgICAgIH1lbHNlIGlmKHRoaXMuaG9saWRheV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUuYWR2ZW50dXJlKXtcbiAgICAgICAgICAgIGp1bXBfcmFuayA9IFJhbmtDb25zdGFudC5SYW5rVHlwZS5hZHZlbnR1cmVfbXVzdGVyXG4gICAgICAgIH1cbiAgICAgICAgUmFua0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuUmFua1ZpZXcodHJ1ZSwganVtcF9yYW5rKVxuICAgIH0sXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwg+WPr+S7peiuvue9ruS4gOS6m+aVsOaNruS6hlxuICAgIG9uU2hvdzpmdW5jdGlvbihwYXJhbXMpe1xuXG4gICAgfSxcblxuICAgIC8vIOmdouadv+iuvue9ruS4jeWPr+ingeeahOWbnuiwgyzov5nph4zlgZrkuIDkupvkuI3lj6/op4HnmoTlsY/olL3lpITnkIZcbiAgICBvbkhpZGU6ZnVuY3Rpb24oKXtcblxuICAgIH0sXG4gICAgc2V0TGVzc1RpbWUobGVzc190aW1lKXtcbiAgICAgICAgaWYoIXRoaXMudGltZV90ZXh0KXtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGxlc3NfdGltZSA9ICBsZXNzX3RpbWUgfHwgMDtcbiAgICAgICAgaWYgKGxlc3NfdGltZSA+IDApe1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lRm9ybWF0U3RyaW5nKGxlc3NfdGltZSlcbiAgICAgICAgICAgIGlmKHRoaXMudGltZV90aWNoZXQgPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lX3RpY2hldCA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICBsZXNzX3RpbWUtLSBcbiAgICAgICAgICAgICAgICAgICAgaWYobGVzc190aW1lIDwgMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy50aW1lX3RpY2hldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVfdGljaGV0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGltZV90ZXh0LnN0cmluZyA9IFwi5bey57uT5p2fXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVfdGV4dC5ub2RlLmNvbG9yID0gdGhpcy5jb2xvclRleHRbMl1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhvbGlkYXlfaXRlbV9kYXRhICYmIHRoaXMuaXRlbV9zY3JvbGx2aWV3KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5zb3J0SXRlbUxpc3QodGhpcy5ob2xpZGF5X2l0ZW1fZGF0YS5haW1fbGlzdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGFiID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWIuYmlkID0gdGhpcy5ob2xpZGF5X2JpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYi50aW1lX2VuZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5zZXREYXRhKHRoaXMuaG9saWRheV9pdGVtX2RhdGEuYWltX2xpc3QsbnVsbCx0YWIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lRm9ybWF0U3RyaW5nKGxlc3NfdGltZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwxMDAwLC0xKVxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZUZvcm1hdFN0cmluZyhsZXNzX3RpbWUpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNldFRpbWVGb3JtYXRTdHJpbmcodGltZSl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHRpbWUgPiAwKXtcbiAgICAgICAgICAgIHNlbGYudGltZV90ZXh0LnN0cmluZyA9IFRpbWVUb29sLmdldFRpbWVGb3JtYXREYXlJSUlJSUlJSSh0aW1lKTtcbiAgICAgICAgICAgIHNlbGYudGltZV90ZXh0Lm5vZGUuY29sb3IgPSB0aGlzLmNvbG9yVGV4dFswXS8vbmV3IGNjLkNvbG9yKDEwOCwyMTAsNDApO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHNlbGYudGltZV90ZXh0LnN0cmluZyA9IFwi5bey57uT5p2fXCI7XG4gICAgICAgICAgICBzZWxmLnRpbWVfdGV4dC5ub2RlLmNvbG9yID0gdGhpcy5jb2xvclRleHRbMV0vL25ldyBjYy5Db2xvcigyNTUsMCwwKVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyDlvZPpnaLmnb/ku47kuLvoioLngrnph4rmlL7mjonnmoTosIPnlKjmjqXlj6Ms6ZyA6KaB5omL5Yqo6LCD55SoLOiAjOS4lOS5n+S4gOWumuimgeiwg+eUqFxuICAgIG9uRGVsZXRlOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmICh0aGlzLml0ZW1fc2Nyb2xsdmlldyl7XG4gICAgICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5kZWxldGVNZSgpO1xuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMudGltZV90aWNoZXQpe1xuICAgICAgICAgICAgZ2NvcmUuVGltZXIuZGVsKHRoaXMudGltZV90aWNoZXQpO1xuICAgICAgICAgICAgdGhpcy50aW1lX3RpY2hldCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy50aW1lX3RleHQubm9kZSl7XG4gICAgICAgICAgICB0aGlzLnRpbWVfdGV4dC5ub2RlLnN0b3BBbGxBY3Rpb25zKClcbiAgICAgICAgfVxuICAgIH0sXG59KSJdfQ==
|