|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/role/view/role_faced_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, '3d53bsaLvBAzqAuZrycMbaP', 'role_faced_panel');
|
// Scripts/mod/role/view/role_faced_panel.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// uthor: xxx@syg.com(必填, 创建模块的人员)
|
// description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-04-17 10:35:09
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var RoleController = require("role_controller");
|
|
var BackpackController = require("backpack_controller");
|
|
var CommonScrollView = require("common_scrollview");
|
|
var RoleFaceItem = require("role_face_item");
|
|
var RoleEvent = require("role_event");
|
|
var Role_facedPanel = cc.Class({
|
"extends": BasePanel,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("roleinfo", "role_face_panel");
|
},
|
// 可以初始化声明一些变量的
|
initConfig: function initConfig() {
|
this.ctrl = RoleController.getInstance();
|
this.item_list = {};
|
this.group_list = {};
|
this.have_list = {};
|
this.is_first = true;
|
this.role_vo = this.ctrl.getRoleVo();
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initPanel: function initPanel() {
|
this.scroll_con = this.root_wnd.getChildByName("scroll_con");
|
this.view = this.scroll_con.getChildByName("view");
|
this.content = this.view.getChildByName("content");
|
this.use_btn = this.root_wnd.getChildByName("ok_btn");
|
this.use_btn_label = this.use_btn.getChildByName("Label").getComponent(cc.Label);
|
this.item = this.root_wnd.getChildByName("item");
|
var setting = {
|
item_class: RoleFaceItem,
|
// 单元类
|
start_x: 5,
|
// 第一个单元的X起点
|
space_x: 4,
|
// x方向的间隔
|
start_y: 0,
|
// 第一个单元的Y起点
|
space_y: 10,
|
// y方向的间隔
|
item_width: 141,
|
// 单元的尺寸width
|
item_height: 120,
|
// 单元的尺寸height
|
row: 0,
|
// 行数,作用于水平滚动类型
|
col: 4,
|
// 列数,作用于垂直滚动类型
|
once_num: 4,
|
need_dynamic: true
|
};
|
var scroll_view_size = cc.size(604, 514);
|
this.item_scrollview = new CommonScrollView();
|
this.item_scrollview.createScroll(this.scroll_con, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting, cc.v2(0.5, 0.5));
|
this.ctrl.send21500();
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
Utils.onTouchEnd(this.use_btn, function () {
|
if (this.select_item && this.select_item.getData()) {
|
var data = this.select_item.getData();
|
|
if (data && data.base_id) {
|
var is_lock = this.select_item.getIsLock() || false;
|
|
if (is_lock == true) {
|
this.ctrl.send21503(data.base_id);
|
return;
|
}
|
|
var bid = data.base_id;
|
|
if (data.group == 110) {
|
for (var i in this.have_list) {
|
var v = this.have_list[i];
|
|
for (var i in this.have_list) {
|
if (this.isSameGroup(v.base_id, data.base_id)) {
|
bid = v.base_id;
|
}
|
|
;
|
}
|
}
|
}
|
|
this.ctrl.send21501(bid);
|
}
|
}
|
}.bind(this), 1);
|
this.addGlobalEvent(RoleEvent.GetFaceList, function (data) {
|
if (data && data.avatar_frame) {
|
for (var i in data.avatar_frame) {
|
var v = data.avatar_frame[i];
|
|
if (v && v.base_id) {
|
this.have_list[v.base_id] = v;
|
var config = Config.avatar_data.data_avatar[v.base_id];
|
|
if (config && config.group) {
|
this.group_list[config.group] = config;
|
}
|
}
|
}
|
}
|
|
this.createItemList();
|
});
|
|
if (!this.role_update_evt) {
|
this.role_update_evt = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, val) {
|
if (key == "avatar_base_id") {
|
if (this.role_vo && this.role_vo.avatar_base_id) {}
|
}
|
}, this);
|
}
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
|
onShow: function onShow(params) {},
|
createItemList: function createItemList() {
|
var num = Config.avatar_data.data_avatar_length || 0;
|
var config = Config.avatar_data.data_avatar;
|
if (!config) return;
|
var index = 1;
|
var array = [];
|
|
for (var i in config) {
|
var v = config[i];
|
|
if (v.is_show == 1) {
|
v.has = 3; //这个没激活
|
|
if (v.loss && Utils.next(v.loss || {}) != null) {
|
var loss_bid = v.loss[0][0];
|
var loss_num = v.loss[0][1];
|
|
if (!this.have_list[v.base_id]) {
|
//如果是不存在已在列表又尚未激活的
|
var has_num = BackpackController.getInstance().getModel().getBackPackItemNumByBid(loss_bid);
|
|
if (has_num >= loss_num) {
|
//可激活的
|
v.has = 0;
|
}
|
}
|
} else {
|
v.has = 1;
|
}
|
|
array.push(v);
|
}
|
}
|
|
for (var i = 0; i < array.length; i++) {
|
var v = array[i];
|
|
if (this.have_list[v.base_id]) {
|
//已经拥有的
|
v.has = 2;
|
}
|
}
|
|
array.sort(Utils.tableLowerSorter(["has", "base_id"]));
|
|
var func = function (face_item, vo) {
|
if (this.select_item) {
|
this.select_item.setSelected(false);
|
}
|
|
this.select_item = face_item;
|
this.select_item.setSelected(true);
|
var is_lock = this.select_item.getIsLock() || false;
|
|
if (is_lock == true) {
|
this.use_btn_label.string = Utils.TI18N("激 活");
|
} else {
|
this.use_btn_label.string = Utils.TI18N("更 换");
|
}
|
|
if (this.is_first == false) {// TipsManager:getInstance():showFaceTips(2,face_item:getData(),self.scroll_view:convertToWorldSpace(cc.p(self.select_item:getPositionX(),343)))
|
} else {
|
this.is_first = false;
|
}
|
}.bind(this);
|
|
this.item_scrollview.setData(array);
|
},
|
//是否是同组的
|
isSameGroup: function isSameGroup(bid1, bid2) {
|
var config_1 = Config.avatar_data.data_avatar[bid1];
|
if (!config_1) return false;
|
var config_2 = Config.avatar_data.data_avatar[bid2];
|
if (!config_2) return false;
|
|
if (config_1.group && config_1.group == config_2.group) {
|
return true;
|
}
|
|
return false;
|
},
|
//根据bid获取该组id
|
getGroupByBid: function getGroupByBid(bid) {
|
var config = Config.avatar_data.data_avatar[bid];
|
if (!config) return 0;
|
return config.group || 0;
|
},
|
setVisibleStatus: function setVisibleStatus(bool) {
|
this.setVisible(bool);
|
},
|
createTimer: function createTimer(value) {},
|
// 面板设置不可见的回调,这里做一些不可见的屏蔽处理
|
onHide: function onHide() {},
|
// 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
|
onDelete: function onDelete() {
|
if (this.item_scrollview) {
|
this.item_scrollview.deleteMe();
|
this.item_scrollview = null;
|
}
|
|
if (this.role_update_evt) {
|
this.role_vo.unbind(this.role_update_evt);
|
}
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyb2xlXFx2aWV3XFxyb2xlX2ZhY2VkX3BhbmVsLmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIlJvbGVDb250cm9sbGVyIiwiQmFja3BhY2tDb250cm9sbGVyIiwiQ29tbW9uU2Nyb2xsVmlldyIsIlJvbGVGYWNlSXRlbSIsIlJvbGVFdmVudCIsIlJvbGVfZmFjZWRQYW5lbCIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJpbml0Q29uZmlnIiwiY3RybCIsImdldEluc3RhbmNlIiwiaXRlbV9saXN0IiwiZ3JvdXBfbGlzdCIsImhhdmVfbGlzdCIsImlzX2ZpcnN0Iiwicm9sZV92byIsImdldFJvbGVWbyIsImluaXRQYW5lbCIsInNjcm9sbF9jb24iLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwidmlldyIsImNvbnRlbnQiLCJ1c2VfYnRuIiwidXNlX2J0bl9sYWJlbCIsImdldENvbXBvbmVudCIsIkxhYmVsIiwiaXRlbSIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsIm9uY2VfbnVtIiwibmVlZF9keW5hbWljIiwic2Nyb2xsX3ZpZXdfc2l6ZSIsInNpemUiLCJpdGVtX3Njcm9sbHZpZXciLCJjcmVhdGVTY3JvbGwiLCJ2MiIsIlNjcm9sbFZpZXdEaXIiLCJ2ZXJ0aWNhbCIsIlNjcm9sbFZpZXdTdGFydFBvcyIsInRvcCIsInNlbmQyMTUwMCIsInJlZ2lzdGVyRXZlbnQiLCJVdGlscyIsIm9uVG91Y2hFbmQiLCJzZWxlY3RfaXRlbSIsImdldERhdGEiLCJkYXRhIiwiYmFzZV9pZCIsImlzX2xvY2siLCJnZXRJc0xvY2siLCJzZW5kMjE1MDMiLCJiaWQiLCJncm91cCIsImkiLCJ2IiwiaXNTYW1lR3JvdXAiLCJzZW5kMjE1MDEiLCJiaW5kIiwiYWRkR2xvYmFsRXZlbnQiLCJHZXRGYWNlTGlzdCIsImF2YXRhcl9mcmFtZSIsImNvbmZpZyIsIkNvbmZpZyIsImF2YXRhcl9kYXRhIiwiZGF0YV9hdmF0YXIiLCJjcmVhdGVJdGVtTGlzdCIsInJvbGVfdXBkYXRlX2V2dCIsIkV2ZW50SWQiLCJVUERBVEVfUk9MRV9BVFRSSUJVVEUiLCJrZXkiLCJ2YWwiLCJhdmF0YXJfYmFzZV9pZCIsIm9uU2hvdyIsInBhcmFtcyIsIm51bSIsImRhdGFfYXZhdGFyX2xlbmd0aCIsImluZGV4IiwiYXJyYXkiLCJpc19zaG93IiwiaGFzIiwibG9zcyIsIm5leHQiLCJsb3NzX2JpZCIsImxvc3NfbnVtIiwiaGFzX251bSIsImdldE1vZGVsIiwiZ2V0QmFja1BhY2tJdGVtTnVtQnlCaWQiLCJwdXNoIiwibGVuZ3RoIiwic29ydCIsInRhYmxlTG93ZXJTb3J0ZXIiLCJmdW5jIiwiZmFjZV9pdGVtIiwidm8iLCJzZXRTZWxlY3RlZCIsInN0cmluZyIsIlRJMThOIiwic2V0RGF0YSIsImJpZDEiLCJiaWQyIiwiY29uZmlnXzEiLCJjb25maWdfMiIsImdldEdyb3VwQnlCaWQiLCJzZXRWaXNpYmxlU3RhdHVzIiwiYm9vbCIsInNldFZpc2libGUiLCJjcmVhdGVUaW1lciIsInZhbHVlIiwib25IaWRlIiwib25EZWxldGUiLCJkZWxldGVNZSIsInVuYmluZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGNBQWMsR0FBR0QsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNBLElBQUlFLGtCQUFrQixHQUFHRixPQUFPLENBQUMscUJBQUQsQ0FBaEM7O0FBQ0EsSUFBSUcsZ0JBQWdCLEdBQUdILE9BQU8sQ0FBQyxtQkFBRCxDQUE5Qjs7QUFDQSxJQUFJSSxZQUFZLEdB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LENBRW5CLENBL0wwQjtBQWlNM0I7QUFDQUMsRUFBQUEsUUFBUSxFQUFFLG9CQUFZO0FBQ2xCLFFBQUcsS0FBSzVFLGVBQVIsRUFBd0I7QUFDcEIsV0FBS0EsZUFBTCxDQUFxQjZFLFFBQXJCO0FBQ0EsV0FBSzdFLGVBQUwsR0FBdUIsSUFBdkI7QUFDSDs7QUFDRCxRQUFHLEtBQUtpQyxlQUFSLEVBQXdCO0FBQ3BCLFdBQUs1RCxPQUFMLENBQWF5RyxNQUFiLENBQW9CLEtBQUs3QyxlQUF6QjtBQUNIO0FBQ0o7QUExTTBCLENBQVQsQ0FBdEIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIHV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcclxuLy8gZGVzY3JpcHRpb246XHJcbi8vICAgICDov5nph4zmmK/mj4/ov7Dov5nkuKrnqpfkvZPnmoTkvZznlKjnmoRcclxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDQtMTcgMTA6MzU6MDlcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xyXG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xyXG52YXIgQmFja3BhY2tDb250cm9sbGVyID0gcmVxdWlyZShcImJhY2twYWNrX2NvbnRyb2xsZXJcIik7XHJcbnZhciBDb21tb25TY3JvbGxWaWV3ID0gcmVxdWlyZShcImNvbW1vbl9zY3JvbGx2aWV3XCIpO1xyXG52YXIgUm9sZUZhY2VJdGVtID0gcmVxdWlyZShcInJvbGVfZmFjZV9pdGVtXCIpXHJcbnZhciBSb2xlRXZlbnQgPSByZXF1aXJlKFwicm9sZV9ldmVudFwiKTtcclxuXHJcbnZhciBSb2xlX2ZhY2VkUGFuZWwgPSBjYy5DbGFzcyh7XHJcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXHJcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcInJvbGVpbmZvXCIsIFwicm9sZV9mYWNlX3BhbmVsXCIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyDlj6/ku6XliJ3lp4vljJblo7DmmI7kuIDkupvlj5jph4/nmoRcclxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmN0cmwgPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpO1xyXG4gICAgICAgIHRoaXMuaXRlbV9saXN0ID0ge307XHJcbiAgICAgICAgdGhpcy5ncm91cF9saXN0ID0ge307XHJcbiAgICAgICAgdGhpcy5oYXZlX2xpc3QgPSB7fTtcclxuICAgICAgICB0aGlzLmlzX2ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJvbGVfdm8gPSB0aGlzLmN0cmwuZ2V0Um9sZVZvKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcclxuICAgIGluaXRQYW5lbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsX2NvbiA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJzY3JvbGxfY29uXCIpO1xyXG4gICAgICAgIHRoaXMudmlldyA9IHRoaXMuc2Nyb2xsX2Nvbi5nZXRDaGlsZEJ5TmFtZShcInZpZXdcIik7XHJcbiAgICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy52aWV3LmdldENoaWxkQnlOYW1lKFwiY29udGVudFwiKTtcclxuICAgICAgICB0aGlzLnVzZV9idG4gPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwib2tfYnRuXCIpO1xyXG4gICAgICAgIHRoaXMudXNlX2J0bl9sYWJlbCA9IHRoaXMudXNlX2J0bi5nZXRDaGlsZEJ5TmFtZShcIkxhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbSA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJpdGVtXCIpO1xyXG5cclxuICAgICAgICB2YXIgc2V0dGluZyA9IHtcclxuICAgICAgICAgICAgaXRlbV9jbGFzczogUm9sZUZhY2VJdGVtLCAgICAgIC8vIOWNleWFg+exu1xyXG4gICAgICAgICAgICBzdGFydF94OiA1LCAgICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWOi1t+eCuVxyXG4gICAgICAgICAgICBzcGFjZV94OiA0LCAgICAgICAgICAgICAgICAgICAgLy8geOaWueWQkeeahOmXtOmalFxyXG4gICAgICAgICAgICBzdGFydF95OiAwLCAgICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWei1t+eCuVxyXG4gICAgICAgICAgICBzcGFjZV95OiAxMCwgICAgICAgICAgICAgICAgICAgLy8geeaWueWQkeeahOmXtOmalFxyXG4gICAgICAgICAgICBpdGVtX3dpZHRoOiAxNDEsICAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4d2lkdGhcclxuICAgICAgICAgICAgaXRlbV9oZWlnaHQ6IDEyMCwgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuGhlaWdodFxyXG4gICAgICAgICAgICByb3c6IDAsICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGM5pWw77yM5L2c55So5LqO5rC05bmz5rua5Yqo57G75Z6LXHJcbiAgICAgICAgICAgIGNvbDogNCwgICAgICAgICAgICAgICAgICAgICAgICAvLyDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcclxuICAgICAgICAgICAgb25jZV9udW06IDQsXHJcbiAgICAgICAgICAgIG5lZWRfZHluYW1pYzogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHNjcm9sbF92aWV3X3NpemUgPSBjYy5zaXplKDYwNCwgNTE0KTtcclxuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldyA9IG5ldyBDb21tb25TY3JvbGxWaWV3KClcclxuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5jcmVhdGVTY3JvbGwodGhpcy5zY3JvbGxfY29uLCBjYy52MigwLCAwKSwgU2Nyb2xsVmlld0Rpci52ZXJ0aWNhbCwgU2Nyb2xsVmlld1N0YXJ0UG9zLnRvcCwgc2Nyb2xsX3ZpZXdfc2l6ZSwgc2V0dGluZywgY2MudjIoMC41LCAwLjUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jdHJsLnNlbmQyMTUwMCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XHJcbiAgICByZWdpc3RlckV2ZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLnVzZV9idG4sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0X2l0ZW0gJiYgdGhpcy5zZWxlY3RfaXRlbS5nZXREYXRhKCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5zZWxlY3RfaXRlbS5nZXREYXRhKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmJhc2VfaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNfbG9jayA9IHRoaXMuc2VsZWN0X2l0ZW0uZ2V0SXNMb2NrKCkgfHwgZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2xvY2sgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuc2VuZDIxNTAzKGRhdGEuYmFzZV9pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgYmlkID0gZGF0YS5iYXNlX2lkO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmdyb3VwID09IDExMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuaGF2ZV9saXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IHRoaXMuaGF2ZV9saXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLmhhdmVfbGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2FtZUdyb3VwKHYuYmFzZV9pZCwgZGF0YS5iYXNlX2lkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWQgPSB2LmJhc2VfaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kMjE1MDEoYmlkKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoUm9sZUV2ZW50LkdldEZhY2VMaXN0LCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmF2YXRhcl9mcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBkYXRhLmF2YXRhcl9mcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2ID0gZGF0YS5hdmF0YXJfZnJhbWVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgJiYgdi5iYXNlX2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGF2ZV9saXN0W3YuYmFzZV9pZF0gPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnID0gQ29uZmlnLmF2YXRhcl9kYXRhLmRhdGFfYXZhdGFyW3YuYmFzZV9pZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwX2xpc3RbY29uZmlnLmdyb3VwXSA9IGNvbmZpZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUl0ZW1MaXN0KCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yb2xlX3VwZGF0ZV9ldnQpIHtcclxuICAgICAgICAgICAgdGhpcy5yb2xlX3VwZGF0ZV9ldnQgPSB0aGlzLnJvbGVfdm8uYmluZChFdmVudElkLlVQREFURV9ST0xFX0FUVFJJQlVURSwgKGZ1bmN0aW9uIChrZXksIHZhbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PSBcImF2YXRhcl9iYXNlX2lkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnJvbGVfdm8gJiYgdGhpcy5yb2xlX3ZvLmF2YXRhcl9iYXNlX2lkKXtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCD5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXHJcbiAgICBvblNob3c6IGZ1bmN0aW9uIChwYXJhbXMpIHtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGNyZWF0ZUl0ZW1MaXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG51bSA9IENvbmZpZy5hdmF0YXJfZGF0YS5kYXRhX2F2YXRhcl9sZW5ndGggfHwgMDtcclxuICAgICAgICB2YXIgY29uZmlnID0gQ29uZmlnLmF2YXRhcl9kYXRhLmRhdGFfYXZhdGFyO1xyXG4gICAgICAgIGlmICghY29uZmlnKSByZXR1cm5cclxuICAgICAgICB2YXIgaW5kZXggPSAxO1xyXG5cclxuICAgICAgICB2YXIgYXJyYXkgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpIGluIGNvbmZpZykge1xyXG4gICAgICAgICAgICB2YXIgdiA9IGNvbmZpZ1tpXTtcclxuICAgICAgICAgICAgaWYgKHYuaXNfc2hvdyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB2LmhhcyA9IDM7ICAgICAgLy/ov5nkuKrmsqHmv4DmtLtcclxuICAgICAgICAgICAgICAgIGlmICh2Lmxvc3MgJiYgVXRpbHMubmV4dCh2Lmxvc3MgfHwge30pICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbG9zc19iaWQgPSB2Lmxvc3NbMF1bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvc3NfbnVtID0gdi5sb3NzWzBdWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXZlX2xpc3Rbdi5iYXNlX2lkXSkgeyAgICAgICAgICAgLy/lpoLmnpzmmK/kuI3lrZjlnKjlt7LlnKjliJfooajlj4jlsJrmnKrmv4DmtLvnmoRcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc19udW0gPSBCYWNrcGFja0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldEJhY2tQYWNrSXRlbU51bUJ5QmlkKGxvc3NfYmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc19udW0gPj0gbG9zc19udW0pIHsgICAgICAgICAgLy/lj6/mv4DmtLvnmoRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuaGFzID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdi5oYXMgPSAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHYpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHYgPSBhcnJheVtpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaGF2ZV9saXN0W3YuYmFzZV9pZF0pIHsgICAgICAvL+W3sue7j+aLpeacieeahFxyXG4gICAgICAgICAgICAgICAgdi5oYXMgPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFycmF5LnNvcnQoVXRpbHMudGFibGVMb3dlclNvcnRlcihbXCJoYXNcIixcImJhc2VfaWRcIl0pKTtcclxuXHJcbiAgICAgICAgdmFyIGZ1bmMgPSBmdW5jdGlvbihmYWNlX2l0ZW0sdm8pe1xyXG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdF9pdGVtKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0X2l0ZW0uc2V0U2VsZWN0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0X2l0ZW0gPSBmYWNlX2l0ZW07XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0X2l0ZW0uc2V0U2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHZhciBpc19sb2NrID0gdGhpcy5zZWxlY3RfaXRlbS5nZXRJc0xvY2soKSB8fCBmYWxzZTtcclxuICAgICAgICAgICAgaWYoaXNfbG9jayA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlX2J0bl9sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIua/gCDmtLtcIik7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VfYnRuX2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5pu0IOaNolwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLmlzX2ZpcnN0ID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgIC8vIFRpcHNNYW5hZ2VyOmdldEluc3RhbmNlKCk6c2hvd0ZhY2VUaXBzKDIsZmFjZV9pdGVtOmdldERhdGEoKSxzZWxmLnNjcm9sbF92aWV3OmNvbnZlcnRUb1dvcmxkU3BhY2UoY2MucChzZWxmLnNlbGVjdF9pdGVtOmdldFBvc2l0aW9uWCgpLDM0MykpKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNfZmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0uYmluZCh0aGlzKVxyXG5cclxuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5zZXREYXRhKGFycmF5KVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+aYr+WQpuaYr+WQjOe7hOeahFxyXG4gICAgaXNTYW1lR3JvdXA6ZnVuY3Rpb24oYmlkMSxiaWQyKXtcclxuICAgICAgICB2YXIgY29uZmlnXzEgPSBDb25maWcuYXZhdGFyX2RhdGEuZGF0YV9hdmF0YXJbYmlkMV07XHJcbiAgICAgICAgaWYoIWNvbmZpZ18xKXJldHVybiBmYWxzZVxyXG4gICAgICAgIHZhciBjb25maWdfMiA9IENvbmZpZy5hdmF0YXJfZGF0YS5kYXRhX2F2YXRhcltiaWQyXTtcclxuICAgICAgICBpZighY29uZmlnXzIpcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgaWYoY29uZmlnXzEuZ3JvdXAgJiYgY29uZmlnXzEuZ3JvdXAgPT0gY29uZmlnXzIuZ3JvdXApe1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgIH0sXHJcblxyXG4gICAgLy/moLnmja5iaWTojrflj5bor6Xnu4RpZFxyXG4gICAgZ2V0R3JvdXBCeUJpZDpmdW5jdGlvbihiaWQpe1xyXG4gICAgICAgIHZhciBjb25maWcgPSBDb25maWcuYXZhdGFyX2RhdGEuZGF0YV9hdmF0YXJbYmlkXTtcclxuICAgICAgICBpZighY29uZmlnKXJldHVybiAwXHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5ncm91cCB8fCAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRWaXNpYmxlU3RhdHVzOmZ1bmN0aW9uKGJvb2wpe1xyXG4gICAgICAgIHRoaXMuc2V0VmlzaWJsZShib29sKVxyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVUaW1lcjpmdW5jdGlvbih2YWx1ZSl7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyDpnaLmnb/orr7nva7kuI3lj6/op4HnmoTlm57osIMs6L+Z6YeM5YGa5LiA5Lqb5LiN5Y+v6KeB55qE5bGP6JS95aSE55CGXHJcbiAgICBvbkhpZGU6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIOW9k+mdouadv+S7juS4u+iKgueCuemHiuaUvuaOieeahOiwg+eUqOaOpeWPoyzpnIDopoHmiYvliqjosIPnlKgs6ICM5LiU5Lmf5LiA5a6a6KaB6LCD55SoXHJcbiAgICBvbkRlbGV0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmKHRoaXMuaXRlbV9zY3JvbGx2aWV3KXtcclxuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuZGVsZXRlTWUoKTtcclxuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnJvbGVfdXBkYXRlX2V2dCl7XHJcbiAgICAgICAgICAgIHRoaXMucm9sZV92by51bmJpbmQodGhpcy5yb2xlX3VwZGF0ZV9ldnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbn0pIl19
|