|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/activity/view/activity_item_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, 'cb705YL5LFHF6D9qaJoi8H3', 'activity_item_panel');
|
// Scripts/mod/activity/view/activity_item_panel.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 活动 Item 项
|
// <br/>Create: 2019-05-06 14:34:33
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var ActivityConst = require("activity_const");
|
|
var GuildBossController = require("guildboss_controller");
|
|
var ActivityController = require("activity_controller");
|
|
var MainuiController = require("mainui_controller");
|
|
var Activity_itemPanel = cc.Class({
|
"extends": BasePanel,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("activity", "activity_item");
|
this.ctrl = ActivityController.getInstance();
|
},
|
// 可以初始化声明一些变量的
|
initConfig: function initConfig() {
|
this.is_double = false;
|
this.list_item = [];
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initPanel: function initPanel() {
|
this.mainContainer = this.root_wnd.getChildByName("main_container");
|
this.itemMask = this.mainContainer.getChildByName("itemMask");
|
this.textLimit = this.itemMask.getChildByName("textLimit").getComponent(cc.Label);
|
this.textLimit.string = Utils.TI18N("敬请期待");
|
this.itemMask.zIndex = 11;
|
this.btnRule = this.mainContainer.getChildByName("btnRule");
|
this.btnRule.active = false;
|
this.textTimeStart = this.mainContainer.getChildByName("textTimeStart").getComponent(cc.Label);
|
this.textTimeStart.string = "";
|
this.textTimeStart.node.active = false;
|
this.itemBG = this.mainContainer.getChildByName("itemBG");
|
this.redPoint = this.mainContainer.getChildByName("redPoint");
|
this.redPoint.active = false;
|
},
|
changeEscortCount: function changeEscortCount() {
|
if (this.activityData.id == ActivityConst.limit_index.escort) {
|
// var totle = EscortController.getInstance().getModel().getMyMaxCount(EscortConst.times_type.escort);
|
// var current = EscortController.getInstance().getModel().getMyCount(EscortConst.times_type.escort);
|
var num = totle - current;
|
|
if (num < 0) {
|
num = 0;
|
}
|
|
var str = cc.js.formatStr(Utils.TI18N("护送次数:%d/%d"), num, totle);
|
|
if (!this.count) {
|
this.count = Utils.createLabel(20, new cc.Color(0xff, 0xff, 0xff, 0xff), new cc.Color(0x74, 0x35, 0x0b, 0xff), 582, 65, str, this.mainContainer, 2, cc.v2(1, 0.5));
|
} else {
|
this.count.string = str;
|
}
|
}
|
},
|
setData: function setData(data) {
|
this.activityData = data; // 只对萌受夺宝列表做判断
|
|
if (this.activityData.id == ActivityConst.limit_index.escort) {
|
// this.is_double = EscortController.getInstance().getModel().isDoubleTimes();
|
this.changeEscortCount();
|
}
|
|
this.changeItemData(data); // 引导使用,不要删
|
// if(data && data.id){
|
// this.setName("guide_activity_item_"+data.id)
|
// }
|
},
|
getData: function getData() {
|
return this.activityData;
|
},
|
addCallBack: function addCallBack(value) {
|
this.callback = value;
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
Utils.onTouchEnd(this.btnRule, function () {
|
if (this.activityData.id == ActivityConst.limit_index.escort) {
|
MainuiController.getInstance().openCommonExplainView(true, Config.EscortData.data_explain);
|
} else if (this.activityData.id == ActivityConst.limit_index.union) {
|
MainuiController.getInstance().openCommonExplainView(true, Config.GuildDunData.data_explain);
|
} else if (this.activityData.id == ActivityConst.limit_index.fightFirst) {} else if (this.activityData.id == ActivityConst.limit_index.allGod) {
|
MainuiController.getInstance().openCommonExplainView(true, Config.ZsWarData.data_explain);
|
} else if (this.activityData.id == ActivityConst.limit_index.guildwar) {
|
MainuiController.getInstance().openCommonExplainView(true, Config.GuildWarData.data_explain);
|
} else if (this.activityData.id == ActivityConst.limit_index.champion) {
|
MainuiController.getInstance().openCommonExplainView(true, Config.ArenaChampionData.data_explain);
|
} else if (this.activityData.id == ActivityConst.limit_index.ladder) {
|
MainuiController.getInstance().openCommonExplainView(true, Config.SkyLadderData.data_explain);
|
}
|
}.bind(this), 1); //当用户点击的时候记录鼠标点击状态
|
|
this.root_wnd.on(cc.Node.EventType.TOUCH_START, function (event) {
|
var touches = event.getTouches();
|
this.touch_began = touches[0].getDelta();
|
}, this); //当鼠标抬起的时候恢复状态
|
|
this.root_wnd.on(cc.Node.EventType.TOUCH_END, function (event) {
|
var touches = event.getTouches();
|
this.touch_end = touches[0].getDelta();
|
var is_click = true;
|
|
if (this.touch_began != null) {
|
is_click = Math.abs(this.touch_end.x - this.touch_began.x) <= 20 && Math.abs(this.touch_end.y - this.touch_began.y) <= 20;
|
}
|
|
if (is_click == true) {
|
Utils.playButtonSound(ButtonSound.Normal);
|
|
if (this.callback) {
|
this.callback();
|
}
|
}
|
}, this);
|
},
|
updateRedStatus: function updateRedStatus() {
|
if (this.activityData) {
|
var red_status = false;
|
|
if (this.activityData.id == ActivityConst.limit_index.escort) {// red_status = EscortController:getInstance():getModel():checkRedStatus()
|
} else if (this.activityData.id == ActivityConst.limit_index.union) {
|
if (GuildBossController.getInstance().getModel().getChangeCount() == true && this.ctrl.getBossActivityDoubleTime() == true && this.ctrl.getFirstComeGuild() == true) {
|
red_status = true;
|
}
|
} else if (this.activityData.id == ActivityConst.limit_index.guildwar) {// red_status = GuildwarController.getInstance().getModel().checkGuildGuildWarRedStatus();
|
} else if (this.activityData.id == ActivityConst.limit_index.ladder) {// red_status = LadderController.getInstance().getModel().checkLadderRedStatus();
|
}
|
|
this.redPoint.active = red_status;
|
}
|
},
|
changeItemData: function changeItemData(data) {
|
if (data.val[0]) {
|
for (var i in data.val[0]) {
|
if (!this.list_item[i]) {
|
var item = ItemsPool.getInstance().getItem("backpack_item");
|
|
if (this.mainContainer) {
|
item.setParent(this.mainContainer);
|
}
|
|
this.list_item[i] = item;
|
}
|
|
if (this.list_item[i]) {
|
this.list_item[i].initConfig(false, 0.5, false, true);
|
this.list_item[i].show();
|
this.list_item[i].setPosition(40 * i + (24 * i - 1), 67);
|
this.list_item[i].setData(data.val[0][i]); // this.list_item[i].setDoubleIcon(this.is_double);
|
}
|
}
|
}
|
|
this.limitItemData(data);
|
|
if (data.desc) {
|
if (this.textTimeStart) {
|
this.textTimeStart.string = data.desc;
|
this.textTimeStart.node.active = true;
|
}
|
}
|
},
|
// 限时活动子项
|
limitItemData: function limitItemData(data) {
|
var RoleController = require("role_controller");
|
|
var role_vo = RoleController.getInstance().getRoleVo();
|
var res = PathTool.getIconPath("activity/activity_big", "txt_cn_activity_item_" + data.id, false, false);
|
this.loadRes(res, function (resObject) {
|
this.itemBG.getComponent(cc.Sprite).spriteFrame = resObject;
|
}.bind(this));
|
|
if (data.is_open == 1) {
|
var _bool = MainuiController.getInstance().checkIsOpenByActivate(data.activate);
|
|
if (_bool == true) {
|
this.handleEffect(true);
|
this.itemMask.active = false;
|
|
if (this.btnRule) {
|
this.btnRule.active = true;
|
}
|
|
if (data.id == ActivityConst.limit_index.union) {
|
if (role_vo.gname == "") {
|
this.textLimit.string = Utils.TI18N("当前未加入公会");
|
this.handleEffect(false);
|
}
|
}
|
} else {
|
this.handleEffect(false);
|
|
if (this.btnRule) {
|
this.btnRule.active = false;
|
}
|
|
this.textLimit.string = data.lock_desc;
|
}
|
} else {
|
if (data.id == ActivityConst.limit_index.union) {
|
if (role_vo.gname != "") {
|
this.textLimit.string = Utils.TI18N("公会副本玩法暂未开启");
|
}
|
}
|
}
|
},
|
handleEffect: function handleEffect(status) {
|
if (status == false) {
|
if (this.play_effect) {
|
this.play_effect.setToSetupPose();
|
this.play_effect.clearTracks();
|
this.play_effect = null;
|
}
|
} else {
|
if (this.mainContainer && this.play_effect == null) {
|
var node = new cc.Node();
|
node.setAnchorPoint(1, 0);
|
node.setPosition(this.itemBG.getContentSize().width - 106, 28);
|
this.mainContainer.addChild(node, 1);
|
this.play_effect = node.addComponent(sp.Skeleton);
|
var anima_path = PathTool.getSpinePath(PathTool.getEffectRes(505), "action");
|
LoaderManager.getInstance().loadRes(anima_path, function (ske_data) {
|
if (this.play_effect) {
|
this.play_effect.skeletonData = ske_data;
|
this.play_effect.setAnimation(0, PlayerAction.action, true);
|
}
|
}.bind(this));
|
}
|
}
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
|
onShow: function onShow(params) {},
|
// 面板设置不可见的回调,这里做一些不可见的屏蔽处理
|
onHide: function onHide() {},
|
// 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
|
onDelete: function onDelete() {
|
if (this.list_item && Utils.next(this.list_item) != null) {
|
for (var i in this.list_item) {
|
if (this.list_item[i].deleteMe) {
|
this.list_item[i].deleteMe();
|
}
|
}
|
}
|
|
this.list_item = [];
|
this.handleEffect(false);
|
this.count = null;
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxhY3Rpdml0eVxcdmlld1xcYWN0aXZpdHlfaXRlbV9wYW5lbC5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJBY3Rpdml0eUNvbnN0IiwiR3VpbGRCb3NzQ29udHJvbGxlciIsIkFjdGl2aXR5Q29udHJvbGxlciIsIk1haW51aUNvbnRyb2xsZXIiLCJBY3Rpdml0eV9pdGVtUGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiY3RybCIsImdldEluc3RhbmNlIiwiaW5pdENvbmZpZyIsImlzX2RvdWJsZSIsImxpc3RfaXRlbSIsImluaXRQYW5lbCIsIm1haW5Db250YWluZXIiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwiaXRlbU1hc2siLCJ0ZXh0TGltaXQiLCJnZXRDb21wb25lbnQiLCJMYWJlbCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJ6SW5kZXgiLCJidG5SdWxlIiwiYWN0aXZlIiwidGV4dFRpbWVTdGFydCIsIm5vZGUiLCJpdGVtQkciLCJyZWRQb2ludCIsImNoYW5nZUVzY29ydENvdW50IiwiYWN0aXZpdHlEYXRhIiwiaWQiLCJsaW1pdF9pbmRleCIsImVzY29ydCIsIm51bSIsInRvdGxlIiwiY3VycmVudCIsInN0ciIsImpzIiwiZm9ybWF0U3RyIiwiY291bnQiLCJjcmVhdGVMYWJlbCIsIkNvbG9yIiwidjIiLCJzZXREYXRhIiwiZGF0YSIsImNoYW5nZUl0ZW1EYXRhIiwiZ2V0RGF0YSIsImFkZENhbGxCYWNrIiwidmFsdWUiLCJjYWxsYmFjayIsInJlZ2lzdGVyRXZlbnQiLCJvblRvdWNoRW5kIiwib3BlbkNvbW1vbkV4cGxhaW5WaWV3IiwiQ29uZmlnIiwiRXNjb3J0RGF0YSIsImRhdGFfZXhwbGFpbiIsInVuaW9uIiwiR3VpbGREdW5EYXRhIiwiZmlnaHRGaXJzdCIsImFsbEdvZCIsIlpzV2FyRGF0YSIsImd1aWxkd2FyIiwiR3VpbGRXYXJEYXRhIiwiY2hhbXBpb24iLCJBcmVuYUNoYW1waW9uRGF0YSIsImxhZGRlciIsIlNreUxhZGRlckRhdGEiLCJiaW5kIiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfU1RBUlQiLCJldmVudCIsInRvdWNoZXMiLCJnZXRUb3VjaGVzIiwidG91Y2hfYmVnYW4iLCJnZXREZWx0YSIsIlRPVUNIX0VORCIsInRvdWNoX2VuZCIsImlzX2NsaWNrIiwiTWF0aCIsImFicyIsIngiLCJ5IiwicGxheUJ1dHRvblNvdW5kIiwiQnV0dG9uU291bmQiLCJOb3JtYWwiLCJ1cGRhdGVSZWRTdGF0dXMiLCJyZWRfc3RhdHVzIiwiZ2V0TW9kZWwiLCJnZXRDaGFuZ2VDb3VudCIsImdldEJvc3NBY3Rpdml0eURvdWJsZVRpbWUiLCJnZXRGaXJzdENvbWVHdWlsZCIsInZhbCIsImkiLCJpdGVtIiwiSXRlbXNQb29sIiwiZ2V0SXRlbSIsInNldFBhcmVudCIsInNob3ciLCJzZXRQb3NpdGlvbiIsImxpbWl0SXRlbURhdGEiLCJkZXNjIiwiUm9sZUNvbnRyb2xsZXIiLCJyb2xlX3ZvIiwiZ2V0Um9sZVZvIiwicmVzIiwiZ2V0SWNvblBhdGgiLCJsb2FkUmVzIiwicmVzT2JqZWN0IiwiU3ByaXRlIiwic3ByaXRlRnJhbWUiLCJpc19vcGVuIiwiX2Jvb2wiLCJjaGVja0lzT3BlbkJ5QWN0aXZhdGUiLCJhY3RpdmF0ZSIsImhhbmRsZUVmZmVjdCIsImduYW1lIiwibG9ja19kZXNjIiwic3RhdHVzIiwicGxheV9lZmZlY3QiLCJzZXRUb1NldHVwUG9zZSIsImNsZWFyVHJhY2tzIiwic2V0QW5jaG9yUG9pbnQiLCJnZXRDb250ZW50U2l6ZSIsIndpZHRoIiwiYWRkQ2hpbGQiLCJhZGRDb21wb25lbnQiLCJzcCIsIlNrZWxldG9uIiwiYW5pbWFfcGF0aCIsImdldFNwaW5lUGF0aCIsImdldEVmZmVjdFJlcyIsIkxvYWRlck1hbmFnZXIiLCJza2VfZGF0YSIsInNrZWxldG9uRGF0YSIsInNldEFuaW1hdGlvbiIsIlBsYXllckFjdGlvbiIsImFjdGlvbiIsIm9uU2hvdyIsInBhcmFtcyIsIm9uSGlkZSIsIm9uRGVsZXRlIiwibmV4dCIsImRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsYUFBYSxHQUFHRCxPQUFPLENBQUMsZ0JBQUQsQ0FBM0I7O0FBQ0EsSUFBSUUsbUJBQW1CLEdBQUdGLE9BQU8sQ0FBQyxzQkFBRCxDQUFqQzs7QUFDQSxJQUFJRyxrQkFBa0IsR0FBR0gsT0FBTyxDQUFDLHFCQUFELENBQWhDOztBQUNBLElBQUlJLGdCQUFnQixHQUFHSixPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBRUEsSUFBSUssa0JBQWtCLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQzlCLGFBQVNDLFNBRHFCO0FBRTlCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCWCxRQUFRLENBQUNZLGFBQVQsQ0FBdUIsVUFBdkIsRUFBbUMsZUFBbkMsQ0FBbEI7QUFDQSxTQUFLQyxJQUFMLEdBQVlULGtCQUFrQixDQUFDVSxXQUFuQixFQUFaO0FBQ0gsR0FMNkI7QUFPOUI7QUFDQUMsRUFBQUEsVUFBVSxFQUFDLHNCQUFVO0FBQ2pCLFNBQUtDLFNBQUwsR0FBaUIsS0FBakI7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLEVBQWpCO0FBQ0gsR0FYNkI7QUFhOUI7QUFDQUMsRUFBQUEsU0FBUyxFQUFDLHFCQUFVO0FBQ2hCLFNBQUtDLGFBQUwsR0FBcUIsS0FBS0MsUUFBTCxDQUFjQyxjQUFkLENBQTZCLGdCQUE3QixDQUFyQjtBQUVBLFNBQUtDLFFBQUwsR0FBZ0IsS0FBS0gsYUFBTCxDQUFtQkUsY0FBbkIsQ0FBa0MsVUFBbEMsQ0FBaEI7QUFDQSxTQUFLRSxTQUFMLEdBQWlCLEtBQUtELFFBQUws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Q0QsUUFBaEM7QUFDQSxpQkFBS2QsV0FBTCxDQUFpQmdCLFlBQWpCLENBQThCLENBQTlCLEVBQWlDQyxZQUFZLENBQUNDLE1BQTlDLEVBQXNELElBQXREO0FBQ0g7QUFDSixTQUwrQyxDQUs5Q3ZFLElBTDhDLENBS3pDLElBTHlDLENBQWhEO0FBTUg7QUFDSjtBQUNKLEdBMU82QjtBQTRPOUI7QUFDQXdFLEVBQUFBLE1BQU0sRUFBQyxnQkFBU0MsTUFBVCxFQUFnQixDQUV0QixDQS9PNkI7QUFpUDlCO0FBQ0FDLEVBQUFBLE1BQU0sRUFBQyxrQkFBVSxDQUVoQixDQXBQNkI7QUF1UDlCO0FBQ0FDLEVBQUFBLFFBQVEsRUFBQyxvQkFBVTtBQUNmLFFBQUcsS0FBS3JJLFNBQUwsSUFBa0JVLEtBQUssQ0FBQzRILElBQU4sQ0FBVyxLQUFLdEksU0FBaEIsS0FBNEIsSUFBakQsRUFBc0Q7QUFDbEQsV0FBSSxJQUFJcUYsQ0FBUixJQUFhLEtBQUtyRixTQUFsQixFQUE0QjtBQUN4QixZQUFHLEtBQUtBLFNBQUwsQ0FBZXFGLENBQWYsRUFBa0JrRCxRQUFyQixFQUE4QjtBQUMxQixlQUFLdkksU0FBTCxDQUFlcUYsQ0FBZixFQUFrQmtELFFBQWxCO0FBQ0g7QUFDSjtBQUNKOztBQUNELFNBQUt2SSxTQUFMLEdBQWlCLEVBQWpCO0FBQ0EsU0FBSzJHLFlBQUwsQ0FBa0IsS0FBbEI7QUFDSCxTQUFLN0UsS0FBTCxHQUFhLElBQWI7QUFDQTtBQW5RNkIsQ0FBVCxDQUF6QiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOa0u+WKqCBJdGVtIOmhuVxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDUtMDYgMTQ6MzQ6MzNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQWN0aXZpdHlDb25zdCA9IHJlcXVpcmUoXCJhY3Rpdml0eV9jb25zdFwiKTtcbnZhciBHdWlsZEJvc3NDb250cm9sbGVyID0gcmVxdWlyZShcImd1aWxkYm9zc19jb250cm9sbGVyXCIpO1xudmFyIEFjdGl2aXR5Q29udHJvbGxlciA9IHJlcXVpcmUoXCJhY3Rpdml0eV9jb250cm9sbGVyXCIpO1xudmFyIE1haW51aUNvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIilcblxudmFyIEFjdGl2aXR5X2l0ZW1QYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiYWN0aXZpdHlcIiwgXCJhY3Rpdml0eV9pdGVtXCIpO1xuICAgICAgICB0aGlzLmN0cmwgPSBBY3Rpdml0eUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB9LFxuXG4gICAgLy8g5Y+v5Lul5Yid5aeL5YyW5aOw5piO5LiA5Lqb5Y+Y6YeP55qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmlzX2RvdWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxpc3RfaXRlbSA9IFtdO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdFBhbmVsOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMubWFpbkNvbnRhaW5lciA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKTtcblxuICAgICAgICB0aGlzLml0ZW1NYXNrID0gdGhpcy5tYWluQ29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaXRlbU1hc2tcIik7XG4gICAgICAgIHRoaXMudGV4dExpbWl0ID0gdGhpcy5pdGVtTWFzay5nZXRDaGlsZEJ5TmFtZShcInRleHRMaW1pdFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLnRleHRMaW1pdC5zdHJpbmcgPSBVdGlscy5USTE4TihcIuaVrOivt+acn+W+hVwiKTtcbiAgICAgICAgdGhpcy5pdGVtTWFzay56SW5kZXggPSAxMTtcbiAgICBcbiAgICAgICAgdGhpcy5idG5SdWxlID0gdGhpcy5tYWluQ29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYnRuUnVsZVwiKTtcbiAgICAgICAgdGhpcy5idG5SdWxlLmFjdGl2ZSA9IGZhbHNlO1xuICAgIFxuICAgICAgICB0aGlzLnRleHRUaW1lU3RhcnQgPSB0aGlzLm1haW5Db250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJ0ZXh0VGltZVN0YXJ0XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMudGV4dFRpbWVTdGFydC5zdHJpbmcgPSBcIlwiO1xuICAgICAgICB0aGlzLnRleHRUaW1lU3RhcnQubm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pdGVtQkcgPSB0aGlzLm1haW5Db250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJpdGVtQkdcIik7XG4gICAgICAgIHRoaXMucmVkUG9pbnQgPSB0aGlzLm1haW5Db250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJyZWRQb2ludFwiKTtcbiAgICAgICAgdGhpcy5yZWRQb2ludC5hY3RpdmUgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgY2hhbmdlRXNjb3J0Q291bnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgaWYodGhpcy5hY3Rpdml0eURhdGEuaWQgPT0gQWN0aXZpdHlDb25zdC5saW1pdF9pbmRleC5lc2NvcnQpe1xuICAgICAgICAgICAgLy8gdmFyIHRvdGxlID0gRXNjb3J0Q29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0TXlNYXhDb3VudChFc2NvcnRDb25zdC50aW1lc190eXBlLmVzY29ydCk7XG4gICAgICAgICAgICAvLyB2YXIgY3VycmVudCA9IEVzY29ydENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldE15Q291bnQoRXNjb3J0Q29uc3QudGltZXNfdHlwZS5lc2NvcnQpO1xuXG4gICAgICAgICAgICB2YXIgbnVtID0gdG90bGUgLSBjdXJyZW50O1xuICAgICAgICAgICAgaWYobnVtIDwgMCl7XG4gICAgICAgICAgICAgICAgbnVtID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN0ciA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuaKpOmAgeasoeaVsO+8miVkLyVkXCIpLG51bSx0b3RsZSk7XG4gICAgICAgICAgICBpZighdGhpcy5jb3VudCl7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudCA9IFV0aWxzLmNyZWF0ZUxhYmVsKDIwLG5ldyBjYy5Db2xvcigweGZmLDB4ZmYsMHhmZiwgMHhmZiksbmV3IGNjLkNvbG9yKDB4NzQsMHgzNSwweDBiLDB4ZmYpLDU4Miw2NSxzdHIsdGhpcy5tYWluQ29udGFpbmVyLDIsY2MudjIoMSwwLjUpKTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnQuc3RyaW5nID0gc3RyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGE6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIHRoaXMuYWN0aXZpdHlEYXRhID0gZGF0YTtcbiAgICAgICAgLy8g5Y+q5a+56JCM5Y+X5aS65a6d5YiX6KGo5YGa5Yik5patXG4gICAgICAgIGlmKHRoaXMuYWN0aXZpdHlEYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXguZXNjb3J0KXtcbiAgICAgICAgICAgIC8vIHRoaXMuaXNfZG91YmxlID0gRXNjb3J0Q29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuaXNEb3VibGVUaW1lcygpO1xuXHRcdCAgICB0aGlzLmNoYW5nZUVzY29ydENvdW50KClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZUl0ZW1EYXRhKGRhdGEpO1xuICAgICAgICAvLyDlvJXlr7zkvb/nlKgs5LiN6KaB5YigXG4gICAgICAgIC8vIGlmKGRhdGEgJiYgZGF0YS5pZCl7XG4gICAgICAgIC8vICAgICB0aGlzLnNldE5hbWUoXCJndWlkZV9hY3Rpdml0eV9pdGVtX1wiK2RhdGEuaWQpXG4gICAgICAgIC8vIH1cbiAgICB9LFxuXG4gICAgZ2V0RGF0YTpmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpdml0eURhdGE7XG4gICAgfSxcblxuICAgIGFkZENhbGxCYWNrOmZ1bmN0aW9uKCB2YWx1ZSApe1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gIHZhbHVlO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuYnRuUnVsZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYodGhpcy5hY3Rpdml0eURhdGEuaWQgPT0gQWN0aXZpdHlDb25zdC5saW1pdF9pbmRleC5lc2NvcnQpe1xuICAgICAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuQ29tbW9uRXhwbGFpblZpZXcodHJ1ZSwgQ29uZmlnLkVzY29ydERhdGEuZGF0YV9leHBsYWluKVxuICAgICAgICAgICAgfWVsc2UgaWYodGhpcy5hY3Rpdml0eURhdGEuaWQgPT0gQWN0aXZpdHlDb25zdC5saW1pdF9pbmRleC51bmlvbil7XG4gICAgICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5Db21tb25FeHBsYWluVmlldyh0cnVlLCBDb25maWcuR3VpbGREdW5EYXRhLmRhdGFfZXhwbGFpbilcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuYWN0aXZpdHlEYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXguZmlnaHRGaXJzdCl7XG5cbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuYWN0aXZpdHlEYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXguYWxsR29kKXtcbiAgICAgICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkNvbW1vbkV4cGxhaW5WaWV3KHRydWUsIENvbmZpZy5ac1dhckRhdGEuZGF0YV9leHBsYWluKVxuICAgICAgICAgICAgfWVsc2UgaWYodGhpcy5hY3Rpdml0eURhdGEuaWQgPT0gQWN0aXZpdHlDb25zdC5saW1pdF9pbmRleC5ndWlsZHdhcil7XG4gICAgICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5Db21tb25FeHBsYWluVmlldyh0cnVlLCBDb25maWcuR3VpbGRXYXJEYXRhLmRhdGFfZXhwbGFpbilcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuYWN0aXZpdHlEYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXguY2hhbXBpb24pe1xuICAgICAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuQ29tbW9uRXhwbGFpblZpZXcodHJ1ZSwgQ29uZmlnLkFyZW5hQ2hhbXBpb25EYXRhLmRhdGFfZXhwbGFpbilcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuYWN0aXZpdHlEYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXgubGFkZGVyKXtcbiAgICAgICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkNvbW1vbkV4cGxhaW5WaWV3KHRydWUsIENvbmZpZy5Ta3lMYWRkZXJEYXRhLmRhdGFfZXhwbGFpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuXG4gICAgICAgIC8v5b2T55So5oi354K55Ye755qE5pe25YCZ6K6w5b2V6byg5qCH54K55Ye754q25oCBXG4gICAgICAgIHRoaXMucm9vdF93bmQub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfU1RBUlQsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuZ2V0VG91Y2hlcygpO1xuICAgICAgICAgICAgdGhpcy50b3VjaF9iZWdhbiA9IHRvdWNoZXNbMF0uZ2V0RGVsdGEoKTtcbiAgICAgICAgfSx0aGlzKTtcblxuIFxuXG4gICAgICAgIC8v5b2T6byg5qCH5oqs6LW355qE5pe25YCZ5oGi5aSN54q25oCBXG4gICAgICAgIHRoaXMucm9vdF93bmQub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmdldFRvdWNoZXMoKTtcbiAgICAgICAgICAgIHRoaXMudG91Y2hfZW5kID0gdG91Y2hlc1swXS5nZXREZWx0YSgpO1xuICAgICAgICAgICAgdmFyIGlzX2NsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmKHRoaXMudG91Y2hfYmVnYW4hPW51bGwpe1xuICAgICAgICAgICAgICAgIGlzX2NsaWNrID0gTWF0aC5hYnModGhpcy50b3VjaF9lbmQueCAtIHRoaXMudG91Y2hfYmVnYW4ueCkgPD0gMjAgJiZcblx0XHRcdFx0TWF0aC5hYnModGhpcy50b3VjaF9lbmQueSAtIHRoaXMudG91Y2hfYmVnYW4ueSkgPD0gMjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihpc19jbGljayA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoQnV0dG9uU291bmQuTm9ybWFsKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSx0aGlzKTtcblxuICAgIH0sXG5cbiAgICB1cGRhdGVSZWRTdGF0dXM6ZnVuY3Rpb24oKXtcbiAgICAgICAgaWYodGhpcy5hY3Rpdml0eURhdGEpe1xuICAgICAgICAgICAgdmFyIHJlZF9zdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmKHRoaXMuYWN0aXZpdHlEYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXguZXNjb3J0KXtcbiAgICAgICAgICAgICAgICAvLyByZWRfc3RhdHVzID0gRXNjb3J0Q29udHJvbGxlcjpnZXRJbnN0YW5jZSgpOmdldE1vZGVsKCk6Y2hlY2tSZWRTdGF0dXMoKVxuICAgICAgICAgICAgfWVsc2UgaWYodGhpcy5hY3Rpdml0eURhdGEuaWQgPT0gQWN0aXZpdHlDb25zdC5saW1pdF9pbmRleC51bmlvbil7XG4gICAgICAgICAgICAgICAgaWYoR3VpbGRCb3NzQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0Q2hhbmdlQ291bnQoKSA9PSB0cnVlICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLmdldEJvc3NBY3Rpdml0eURvdWJsZVRpbWUoKSA9PSB0cnVlICYmXG5cdFx0XHRcdHRoaXMuY3RybC5nZXRGaXJzdENvbWVHdWlsZCgpID09IHRydWUgKXtcbiAgICAgICAgICAgICAgICAgICAgcmVkX3N0YXR1cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2UgaWYodGhpcy5hY3Rpdml0eURhdGEuaWQgPT0gQWN0aXZpdHlDb25zdC5saW1pdF9pbmRleC5ndWlsZHdhcil7XG4gICAgICAgICAgICAgICAgLy8gcmVkX3N0YXR1cyA9IEd1aWxkd2FyQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuY2hlY2tHdWlsZEd1aWxkV2FyUmVkU3RhdHVzKCk7XG4gICAgICAgICAgICB9ZWxzZSBpZih0aGlzLmFjdGl2aXR5RGF0YS5pZCA9PSBBY3Rpdml0eUNvbnN0LmxpbWl0X2luZGV4LmxhZGRlcil7XG4gICAgICAgICAgICAgICAgLy8gcmVkX3N0YXR1cyA9IExhZGRlckNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmNoZWNrTGFkZGVyUmVkU3RhdHVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlZFBvaW50LmFjdGl2ZSA9IHJlZF9zdGF0dXM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hhbmdlSXRlbURhdGE6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIGlmKGRhdGEudmFsWzBdKXtcbiAgICAgICAgICAgIGZvcih2YXIgaSBpbiBkYXRhLnZhbFswXSl7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMubGlzdF9pdGVtW2ldKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBJdGVtc1Bvb2wuZ2V0SW5zdGFuY2UoKS5nZXRJdGVtKFwiYmFja3BhY2tfaXRlbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5tYWluQ29udGFpbmVyKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0UGFyZW50KHRoaXMubWFpbkNvbnRhaW5lcilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RfaXRlbVtpXSA9IGl0ZW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHRoaXMubGlzdF9pdGVtW2ldKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0X2l0ZW1baV0uaW5pdENvbmZpZyhmYWxzZSwgMC41LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdF9pdGVtW2ldLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0X2l0ZW1baV0uc2V0UG9zaXRpb24oNDAqaSArICgyNCppLTEpLCA2Nyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdF9pdGVtW2ldLnNldERhdGEoZGF0YS52YWxbMF1baV0pO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmxpc3RfaXRlbVtpXS5zZXREb3VibGVJY29uKHRoaXMuaXNfZG91YmxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saW1pdEl0ZW1EYXRhKGRhdGEpO1xuICAgICAgICBpZihkYXRhLmRlc2Mpe1xuICAgICAgICAgICAgaWYodGhpcy50ZXh0VGltZVN0YXJ0KXtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRUaW1lU3RhcnQuc3RyaW5nID0gZGF0YS5kZXNjO1xuXHQgICAgXHQgICAgdGhpcy50ZXh0VGltZVN0YXJ0Lm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpmZDml7bmtLvliqjlrZDpoblcbiAgICBsaW1pdEl0ZW1EYXRhOmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICB2YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xuICAgICAgICB2YXIgcm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgIHZhciByZXMgPSBQYXRoVG9vbC5nZXRJY29uUGF0aChcImFjdGl2aXR5L2FjdGl2aXR5X2JpZ1wiLCBcInR4dF9jbl9hY3Rpdml0eV9pdGVtX1wiK2RhdGEuaWQsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMubG9hZFJlcyhyZXMsIChmdW5jdGlvbihyZXNPYmplY3Qpe1xuICAgICAgICAgICAgdGhpcy5pdGVtQkcuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSByZXNPYmplY3Q7XG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xuXG4gICAgICAgIGlmKGRhdGEuaXNfb3BlbiA9PSAxKXtcbiAgICAgICAgICAgIHZhciBfYm9vbCA9IE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGVja0lzT3BlbkJ5QWN0aXZhdGUoZGF0YS5hY3RpdmF0ZSk7XG4gICAgICAgICAgICBpZihfYm9vbCA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVmZmVjdCh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1NYXNrLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuYnRuUnVsZSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnRuUnVsZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihkYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXgudW5pb24pe1xuICAgICAgICAgICAgICAgICAgICBpZihyb2xlX3ZvLmduYW1lID09IFwiXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0TGltaXQuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlvZPliY3mnKrliqDlhaXlhazkvJpcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVmZmVjdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVmZmVjdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5idG5SdWxlKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idG5SdWxlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRleHRMaW1pdC5zdHJpbmcgPSBkYXRhLmxvY2tfZGVzYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZihkYXRhLmlkID09IEFjdGl2aXR5Q29uc3QubGltaXRfaW5kZXgudW5pb24pe1xuICAgICAgICAgICAgICAgIGlmKHJvbGVfdm8uZ25hbWUgIT0gXCJcIil7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dExpbWl0LnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5YWs5Lya5Ymv5pys546p5rOV5pqC5pyq5byA5ZCvXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBcblxuICAgIGhhbmRsZUVmZmVjdDpmdW5jdGlvbihzdGF0dXMpe1xuICAgICAgICBpZihzdGF0dXMgPT0gZmFsc2Upe1xuICAgICAgICAgICAgaWYodGhpcy5wbGF5X2VmZmVjdCl7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5X2VmZmVjdC5zZXRUb1NldHVwUG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucGxheV9lZmZlY3QuY2xlYXJUcmFja3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXlfZWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZih0aGlzLm1haW5Db250YWluZXIgJiYgdGhpcy5wbGF5X2VmZmVjdCA9PSBudWxsKXtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5ldyBjYy5Ob2RlKCk7XG4gICAgICAgICAgICAgICAgbm9kZS5zZXRBbmNob3JQb2ludCgxLDApXG4gICAgICAgICAgICAgICAgbm9kZS5zZXRQb3NpdGlvbih0aGlzLml0ZW1CRy5nZXRDb250ZW50U2l6ZSgpLndpZHRoLTEwNiwgMjgpO1xuICAgICAgICAgICAgICAgIHRoaXMubWFpbkNvbnRhaW5lci5hZGRDaGlsZChub2RlLDEpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5X2VmZmVjdCA9IG5vZGUuYWRkQ29tcG9uZW50KHNwLlNrZWxldG9uKTtcbiAgICAgICAgICAgICAgICB2YXIgYW5pbWFfcGF0aCA9IFBhdGhUb29sLmdldFNwaW5lUGF0aChQYXRoVG9vbC5nZXRFZmZlY3RSZXMoNTA1KSwgXCJhY3Rpb25cIik7XG4gICAgICAgICAgICAgICAgTG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvYWRSZXMoYW5pbWFfcGF0aCwgZnVuY3Rpb24oc2tlX2RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5wbGF5X2VmZmVjdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXlfZWZmZWN0LnNrZWxldG9uRGF0YSA9IHNrZV9kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5X2VmZmVjdC5zZXRBbmltYXRpb24oMCwgUGxheWVyQWN0aW9uLmFjdGlvbiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjizmt7vliqDliLDlr7nlupTkuLvoioLngrnkuYvlkI7nmoTlm57osIPlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvblNob3c6ZnVuY3Rpb24ocGFyYW1zKXtcblxuICAgIH0sXG5cbiAgICAvLyDpnaLmnb/orr7nva7kuI3lj6/op4HnmoTlm57osIMs6L+Z6YeM5YGa5LiA5Lqb5LiN5Y+v6KeB55qE5bGP6JS95aSE55CGXG4gICAgb25IaWRlOmZ1bmN0aW9uKCl7XG5cbiAgICB9LFxuICAgIFxuXG4gICAgLy8g5b2T6Z2i5p2/5LuO5Li76IqC54K56YeK5pS+5o6J55qE6LCD55So5o6l5Y+jLOmcgOimgeaJi+WKqOiwg+eUqCzogIzkuJTkuZ/kuIDlrpropoHosIPnlKhcbiAgICBvbkRlbGV0ZTpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLmxpc3RfaXRlbSAmJiBVdGlscy5uZXh0KHRoaXMubGlzdF9pdGVtKSE9bnVsbCl7XG4gICAgICAgICAgICBmb3IodmFyIGkgaW4gdGhpcy5saXN0X2l0ZW0pe1xuICAgICAgICAgICAgICAgIGlmKHRoaXMubGlzdF9pdGVtW2ldLmRlbGV0ZU1lKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0X2l0ZW1baV0uZGVsZXRlTWUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3RfaXRlbSA9IFtdO1xuICAgICAgICB0aGlzLmhhbmRsZUVmZmVjdChmYWxzZSk7XG5cdCAgICB0aGlzLmNvdW50ID0gbnVsbDtcbiAgICB9LFxufSkiXX0=
|