|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/seerpalace/view/seerpalace_summon_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, '914bc0au5JForoMCyNYI0tk', 'seerpalace_summon_panel');
|
// Scripts/mod/seerpalace/view/seerpalace_summon_panel.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的 (先知圣殿)
|
// <br/>Create: 2019-03-22 15:05:34
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var SeerpalaceSummonItem = require("seerpalace_summon_Item");
|
|
var SeerpalaceController = require("seerpalace_controller");
|
|
var BackpackController = require("backpack_controller");
|
|
var SeerpalaceConst = require("seerpalace_const");
|
|
var Seerpalace_summonPanel = cc.Class({
|
"extends": BasePanel,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("seerpalace", "seerpalace_summon_panel");
|
this.is_playing = false; // 是否正在播放召唤特效
|
|
this.summon_list = {};
|
this.summon_pos = {};
|
this.ctrl = SeerpalaceController.getInstance();
|
},
|
// 可以初始化声明一些变量的
|
initConfig: function initConfig() {},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initPanel: function initPanel() {
|
var _this = this;
|
|
var self = this;
|
this.npc_sk = this.seekChild("npcAni", sp.Skeleton); //npc动画
|
|
this.ball_effect_sk = this.seekChild("pos_ball").getChildByName("action").getComponent(sp.Skeleton); //水晶球动画
|
//-- NPC
|
|
this.handleNPCEffect(true); //-- 水晶球(常驻)
|
|
this.handleBallEffect(true);
|
|
var _loop = function _loop(i) {
|
var pos_node = _this.seekChild("main_container").getChildByName("image_stage").getChildByName("pos_node_" + i);
|
|
if (pos_node) {
|
Utils.delayRun(pos_node, i * 3 / 60, function () {
|
var summon_icon = self.summon_list[i];
|
|
if (!summon_icon) {
|
summon_icon = new SeerpalaceSummonItem({
|
parent: self,
|
index: i
|
});
|
summon_icon.setParent(pos_node);
|
summon_icon.show();
|
self.summon_list[i] = summon_icon;
|
}
|
});
|
self.summon_pos[i] = pos_node;
|
}
|
};
|
|
for (var i = 1; i < 5; ++i) {
|
_loop(i);
|
}
|
|
self.btn_summon_nd = this.seekChild("btn_summon");
|
self.btn_summon_lb = this.seekChild("btn_summon_label", cc.Label);
|
self.btn_summon_sp = this.seekChild("icon", cc.Sprite);
|
var path = PathTool.getIconPath("item", SeerpalaceConst.Good_ZhiHui);
|
this.loadRes(path, function (SpriteFrame) {
|
this.btn_summon_sp.spriteFrame = SpriteFrame;
|
}.bind(this));
|
this.btn_summon_sp.node.active = false;
|
var desk_sp = this.seekChild("desk", cc.Sprite);
|
this.loadRes(PathTool.getBigBg("bigbg_77"), function (res) {
|
desk_sp.spriteFrame = res;
|
});
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
this.btn_summon_nd.on("touchend", this._onClickSummonBtn, this);
|
this.ball_effect_sk.setCompleteListener(function () {
|
if (this.is_playing == false) return;
|
|
this._onSummonAniCallBack();
|
|
this.handleBallEffect();
|
}.bind(this));
|
this.npc_sk.setCompleteListener(function () {
|
if (this.npc_ani_status == 1) return;
|
|
this._onNPCAniCallBack();
|
}.bind(this));
|
},
|
addToParent: function addToParent(status) {
|
status = status || false;
|
|
if (status) {
|
this.show();
|
} else {
|
this.hide();
|
}
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
|
onShow: function onShow(params) {},
|
// 面板设置不可见的回调,这里做一些不可见的屏蔽处理
|
onHide: function onHide() {},
|
// 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
|
onDelete: function onDelete() {
|
this.ball_effect_sk.skeletonData = null;
|
this.npc_sk.skeletonData = null;
|
},
|
handleNPCEffect: function handleNPCEffect(status) {
|
var self = this;
|
self.npc_ani_status = 1; // 标识当前npc的动作类型
|
|
var sketon_path = PathTool.getSpinePath("E24110", "action");
|
this.loadRes(sketon_path, function (skeleton_data) {
|
this.npc_sk.skeletonData = skeleton_data;
|
this.npc_sk.setAnimation(0, "action1", true);
|
}.bind(this));
|
},
|
handleBallEffect: function handleBallEffect() {
|
var self = this;
|
var sketon_path = PathTool.getSpinePath("E24111", "action");
|
this.loadRes(sketon_path, function (skeleton_data) {
|
this.ball_effect_sk.skeletonData = skeleton_data;
|
this.ball_effect_sk.setAnimation(0, "action", true);
|
}.bind(this));
|
},
|
// -- 水晶球召唤特效
|
handleSummonEffect: function handleSummonEffect() {
|
var self = this;
|
|
if (this.ball_effect_sk) {
|
var sketon_path = PathTool.getSpinePath("E24112", "action");
|
this.loadRes(sketon_path, function (skeleton_data) {
|
this.ball_effect_sk.skeletonData = skeleton_data;
|
this.ball_effect_sk.setAnimation(0, "action", false);
|
}.bind(this));
|
}
|
},
|
// -- 水晶球召唤特效完毕再请求召唤协议
|
_onSummonAniCallBack: function _onSummonAniCallBack() {
|
var group_id = this.select_card.getSummonGroupId();
|
this.ctrl.requestSeerpalaceSummon(group_id);
|
this.is_playing = false;
|
},
|
// -- npc的召唤特效播放完再请求召唤协议
|
_onNPCAniCallBack: function _onNPCAniCallBack() {
|
var self = this;
|
|
if (self.npc_sk && self.npc_ani_status == 2) {
|
this.npc_sk.setAnimation(0, "action1", true);
|
self.npc_ani_status = 1;
|
}
|
},
|
//-- 点击了卡牌
|
_onClickSummonCard: function _onClickSummonCard(card) {
|
var self = this;
|
if (self.is_playing) return; // -- 播放召唤特效中不让切换选择卡牌
|
|
if (self.select_card) {
|
self.select_card.setSelectStatus(false);
|
}
|
|
if (card) {
|
self.select_card = card;
|
self.select_card.setSelectStatus(true);
|
}
|
|
self.updateSummonBtnLabel();
|
this.btn_summon_sp.node.active = true;
|
},
|
updateSummonBtnLabel: function updateSummonBtnLabel() {
|
var self = this;
|
|
if (self.select_card) {
|
var summon_cost = self.select_card.getSummonCostItem();
|
|
if (summon_cost) {
|
var bid = summon_cost[0][0];
|
var num = summon_cost[0][1];
|
var item_config = Utils.getItemConfig(bid);
|
|
if (item_config) {
|
this.loadRes(PathTool.getItemRes(bid), function (SpriteFrame) {
|
this.btn_summon_lb.spriteFrame = SpriteFrame;
|
}.bind(this));
|
self.btn_summon_lb.string = num + " 召唤";
|
}
|
}
|
} else {// self.btn_summon_label.setString(TI18N("<div outline=2,#4a2606>召唤</div>"))
|
}
|
},
|
_onClickSummonBtn: function _onClickSummonBtn() {
|
Utils.playButtonSound(1);
|
var self = this;
|
if (self.is_playing) return;
|
|
if (self.select_card) {
|
var summon_cost = self.select_card.getSummonCostItem();
|
|
if (summon_cost) {
|
var bid = summon_cost[0][0];
|
var num = summon_cost[0][1];
|
var have_num = BackpackController.getInstance().getModel().getItemNumByBid(bid); // -- 背包物品足够则先播放召唤特效再请求召唤协议,不足则直接请求协议(弹出物品来源和提示)
|
|
if (have_num >= num && self.npc_sk) {
|
self.npc_ani_status = 2;
|
self.is_playing = true;
|
this.npc_sk.setAnimation(0, "action2", false);
|
self.handleSummonEffect();
|
} else {
|
var group_id = self.select_card.getSummonGroupId();
|
this.ctrl.requestSeerpalaceSummon(group_id);
|
}
|
}
|
} else {
|
message("请先选择一种卡牌");
|
}
|
}
|
});
|
module.exports = Seerpalace_summonPanel;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxzZWVycGFsYWNlXFx2aWV3XFxzZWVycGFsYWNlX3N1bW1vbl9wYW5lbC5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJTZWVycGFsYWNlU3VtbW9uSXRlbSIsIlNlZXJwYWxhY2VDb250cm9sbGVyIiwiQmFja3BhY2tDb250cm9sbGVyIiwiU2VlcnBhbGFjZUNvbnN0IiwiU2VlcnBhbGFjZV9zdW1tb25QYW5lbCIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJpc19wbGF5aW5nIiwic3VtbW9uX2xpc3QiLCJzdW1tb25fcG9zIiwiY3RybCIsImdldEluc3RhbmNlIiwiaW5pdENvbmZpZyIsImluaXRQYW5lbCIsInNlbGYiLCJucGNfc2siLCJzZWVrQ2hpbGQiLCJzcCIsIlNrZWxldG9uIiwiYmFsbF9lZmZlY3Rfc2siLCJnZXRDaGlsZEJ5TmFtZSIsImdldENvbXBvbmVudCIsImhhbmRsZU5QQ0VmZmVjdCIsImhhbmRsZUJhbGxFZmZlY3QiLCJpIiwicG9zX25vZGUiLCJVdGlscyIsImRlbGF5UnVuIiwic3VtbW9uX2ljb24iLCJwYXJlbnQiLCJpbmRleCIsInNldFBhcmVudCIsInNob3ciLCJidG5fc3VtbW9uX25kIiwiYnRuX3N1bW1vbl9sYiIsIkxhYmVsIiwiYnRuX3N1bW1vbl9zcCIsIlNwcml0ZSIsInBhdGgiLCJnZXRJY29uUGF0aCIsIkdvb2RfWmhpSHVpIiwibG9hZFJlcyIsIlNwcml0ZUZyYW1lIiwic3ByaXRlRnJhbWUiLCJiaW5kIiwibm9kZSIsImFjdGl2ZSIsImRlc2tfc3AiLCJnZXRCaWdCZyIsInJlcyIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsIl9vbkNsaWNrU3VtbW9uQnRuIiwic2V0Q29tcGxldGVMaXN0ZW5lciIsIl9vblN1bW1vbkFuaUNhbGxCYWNrIiwibnBjX2FuaV9zdGF0dXMiLCJfb25OUENBbmlDYWxsQmFjayIsImFkZFRvUGFyZW50Iiwic3RhdHVzIiwiaGlkZSIsIm9uU2hvdyIsInBhcmFtcyIsIm9uSGlkZSIsIm9uRGVsZXRlIiwic2tlbGV0b25EYXRhIiwic2tldG9uX3BhdGgiLCJnZXRTcGluZVBhdGgiLCJza2VsZXRvbl9kYXRhIiwic2V0QW5pbWF0aW9uIiwiaGFuZGxlU3VtbW9uRWZmZWN0IiwiZ3JvdXBfaWQiLCJzZWxlY3RfY2FyZCIsImdldFN1bW1vbkdyb3VwSWQiLCJyZXF1ZXN0U2VlcnBhbGFjZVN1bW1vbiIsIl9vbkNsaWNrU3VtbW9uQ2FyZCIsImNhcmQiLCJzZXRTZWxlY3RTdGF0dXMiLCJ1cGRhdGVTdW1tb25CdG5MYWJlbCIsInN1bW1vbl9jb3N0IiwiZ2V0U3VtbW9uQ29zdEl0ZW0iLCJiaWQiLCJudW0iLCJpdGVtX2NvbmZpZyIsImdldEl0ZW1Db25maWciLCJnZXRJdGVtUmVzIiwic3RyaW5nIiwicGxheUJ1dHRvblNvdW5kIiwiaGF2ZV9udW0iLCJnZXRNb2RlbCIsImdldEl0ZW1OdW1CeUJpZCIsIm1lc3NhZ2UiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsb0JBQW9CLEdBQUdELE9BQU8sQ0FBQyx3QkFBRCxDQUFsQzs7QUFDQSxJQUFJRSxvQkFBb0IsR0FBR0YsT0FBTyxDQUFDLHVCQUFELENBQWxDOztBQUNBLElBQUlHLGtCQUFrQixHQUFHSCxPQUFPLENBQUMscUJBQUQsQ0FBaEM7O0FBQ0EsSUFBSUksZUFBZSxHQUFHSixPQUFPLENBQUMsa0JBQUQsQ0FBN0I7O0FBQ0EsSUFBSUssc0JBQXNCLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQ2xDLGFBQVNDLFNBRHlCO0FBRWxDQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCWCxRQUFRLENBQUNZLGFBQVQsQ0FBdUIsWUFBdkIsRUFBcUMseUJBQXJDLENBQWxCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixLQUFsQixDQUZjLENBRVU7O0FBQ3hCLFNBQUtDLFdBQUwsR0FBbUIsRUFBbkI7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLEVBQWxCO0FBQ0EsU0FBS0MsSUFBTCxHQUFZYixvQkFBb0IsQ0FBQ2MsV0FBckIsRUFBWjtBQUNILEdBUmlDO0FBVWxDO0FBQ0FDLEVBQUFBLFVBQVUsRUFBQyxzQkFBVSxDQUVwQixDQWJpQztBQWVsQztBQUNBQyxFQUFBQSxTQUFTLEVBQUMscUJBQVU7QUFBQTs7QUFDaEIsUUFBSUMsSUFBSSxHQUFHLElBQVg7QUFDQSxTQUFLQyxNQUFMLEdBQWMsS0FBS0MsU0FBTCxDQUFlLFFBQWYsRUFBd0JDLEVBQUUsQ0FBQ0MsUUFBM0IsQ0FBZCxDQUZnQixDQUVtQzs7QUFDbkQsU0FBS0MsY0FBTCxHQUFzQixLQUFLSCxTQUFMLENBQWUsVUFBZixFQUEyQkksY0FBM0IsQ0FBMEMsUUFBMUMsRUFBb0RDLFlBQXBELENBQWlFSixFQUFFLENBQUNDLFFBQXBFLENBQXRCLENBSGdCLENBR29GO0FBQ3BHOztBQUNBLFNBQUtJLGVBQUwsQ0FBcUIsSUFBckIsRUFMZ0IsQ0FNaEI7O0FBQ0EsU0FBS0MsZ0JBQUwsQ0FBc0IsSUFBdEI7O0FBUGdCLCtCQVFSQyxDQVJRO0FBU1osVUFBSUMsUUFBUSxHQUFHLEtBQUksQ0FBQ1QsU0FBTCxDQUFlLGdCQUFmLEVBQWlDSSxjQUFqQyxDQUFnRCxhQUFoRCxFQUErREEsY0FBL0QsQ0FBOEUsY0FBY0ksQ0FBNUYsQ0FBZjs7QUFDQSxVQUFJQyxRQUFKLEVBQWE7QUFDVEMsUUFBQUEsS0FBSyxDQUFDQyxRQUFOLENBQWVGLFFBQWYsRUFBeUJELENBQUMsR0FBQyxDQUFGLEdBQUksRUFBN0IsRUFBaUMsWUFBWTtBQUN6QyxjQUFJSSxXQUFXLEdBQUdkLElBQUksQ0FBQ04sV0FBTCxDQUFpQmdCLENBQWpCLENBQWxCOztBQUNJLGNBQUksQ0FBQ0ksV0FBTCxFQUFpQjtBQUNiQSxZQUFBQSxXQUFXLEdBQUcsSUFBSWhDLG9CQUFKLENBQXlCO0FBQ25DaUMsY0FBQUEsTUFBTSxFQUFDZixJQUQ0QjtBQUVuQ2dCLGNBQUFBLEtBQUssRUFBQ047QUFGNkIsYUFBekIsQ0FBZDtBQUlBSSxZQUFBQSxXQUFXLENBQUNHLFNBQVosQ0FBc0JOLFFBQXRCO0FBQ0FHLFlBQUFBLFdBQVcsQ0FBQ0ksSUFBWjtBQUNBbEIsWUFBQUEsSUFBSSxDQUFDTixXQUFMLENBQWlCZ0IsQ0FBakIsSUFBc0JJLFdBQXRCO0FBQ0g7QUFDSixTQVhMO0FBWUlkLFFBQUFBLElBQUksQ0FBQ0wsVUFBTCxDQUFnQmUsQ0FBaEIsSUFBcUJDLFFBQXJCO0FBQ1A7QUF4Qlc7O0FBUWhCLFNBQUksSUFBSUQsQ0FBQyxHQUFDLENBQVYsRUFBWUEsQ0FBQyxHQUFDLENBQWQsRUFBZ0IsRUFBRUEsQ0FBbEIsRUFBb0I7QUFBQSxZQUFaQSxDQUFZO0FBaUJuQjs7QUFDRFYsSUFBQUEsSUFBSSxDQUFDbUIsYUFBTCxHQUFxQixLQUFLakIsU0FBTCxDQUFlLFlBQWYsQ0FBckI7QUFDQUYsSUFBQUEsSUFBSSxDQUFDb0IsYUFBTCxHQUFxQixLQUFLbEIsU0FBTCxDQUFlLGtCQUFmLEVBQWtDZixFQUFFLENBQUNrQyxLQUFyQyxDQUFyQjtBQUNBckIsSUFBQUEsSUFBSSxDQUFDc0IsYUFBTCxHQUFxQixLQUFLcEIsU0FBTCxDQUFlLE1BQWYsRUFBc0JmLEVBQUUsQ0FBQ29DLE1BQXpCLENBQXJCO0FBQ0EsUUFBSUMsSUFBSSxHQUFHNUMsUUFBUSxDQUFDNkMsV0FBVCxDQUFxQixNQUFyQixFQUE0QnhDLGVBQWUsQ0FBQ3lDLFdBQTVDLENBQVg7QUFDQSxTQUFLQyxPQUFMLENBQWFILElBQWIsRUFBa0IsVUFBU0ksV0FBVCxFQUFxQjtBQUNuQyxXQUFLTixhQUFMLENBQW1CTyxXQUFuQixHQUFrQ0QsV0FBbEM7QUFDSCxLQUZpQixDQUVoQkUsSUFGZ0IsQ0FFWCxJQUZXLENBQWxCO0FBR0EsU0FBS1IsYUFBTCxDQUFtQlMsSUFBbkIsQ0FBd0JDLE1BQXhCLEdBQWlDLEtBQWpDO0FBQ0EsUUFBSUMsT0FBTyxHQUFHLEtBQUsvQixTQUFMLENBQWUsTUFBZixFQUFzQmYsRUFBRSxDQUFDb0MsTUFBekIsQ0FBZDtBQUNBLFNBQUtJLE9BQUwsQ0FBYS9DLFFBQVEsQ0FBQ3NELFFBQVQsQ0FBa0IsVUFBbEIsQ0FBYixFQUEyQyxVQUFTQyxHQUFULEVBQWE7QUFDcERGLE1BQUFBLE9BQU8sQ0FBQ0osV0FBUixHQUFzQk0sR0FBdEI7QUFDSCxLQUZEO0FBR0gsR0F0RGlDO0FBd0RsQztBQUNBQyxFQUFBQSxhQUFhLEVBQUMseUJBQVU7QUFDcEIsU0FBS2pCLGFBQUwsQ0FBbUJrQixFQUFuQixDQUFzQixVQUF0QixFQUFpQyxLQUFLQyxpQkFBdEMsRUFBd0QsSUFBeEQ7QUFDQSxTQUFLakMsY0FBTCxDQUFvQmtDLG1CQUFwQixDQUF5QyxZQUFVO0FBQy9DLFVBQUcsS0FBSzlDLFVBQUwsSUFBbUIsS0FBdEIsRUFBNkI7O0FBQzdCLFdBQUsrQyxvQkFBTDs7QUFDQSxXQUFLL0IsZ0JBQUw7QUFDSCxLQUp3QyxDQUl2Q3FCLElBSnVDLENBSWxDLElBSmtDLENBQXpDO0FBS0EsU0FBSzdCLE1BQUwsQ0FBWXNDLG1CQUFaLENBQWlDLFlBQVU7QUFDdkMsVUFBRyxLQUFLRSxjQUFMLElBQXVCLENBQTFCLEVBQTZCOztBQUM3QixXQUFLQyxpQkFBTDtBQUNILEtBSGdDLENBRy9CWixJQUgrQixDQUcxQixJQUgwQixDQUFqQztBQUlILEdBcEVpQztBQXNFbENhLEVBQUFBLFdBdEVrQyx1QkFzRXJCQyxNQXRFcUIsRUFzRWI7QUFDakJBLElBQUFBLE1BQU0sR0FBR0EsTUFBTSxJQUFJLEtBQW5COztBQUNBLFFBQUdBLE1BQUgsRUFBVTtBQUNOLFdBQUsxQixJQUFMO0FBQ0gsS0FGRCxNQUVLO0FBQ0QsV0FBSzJCLElBQUw7QUFDSDtBQUNKLEdBN0VpQztBQThFbEM7QUFDQUMsRUFBQUEsTUFBTSxFQUFDLGdCQUFTQyxNQUFULEVBQWdCLENBRXRCLENBakZpQztBQW1GbEM7QUFDQUMsRUFBQUEsTUFBTSxFQUFDLGtCQUFVLENBRWhCLENBdEZpQztBQXdGbEM7QUFDQUMsRUFBQUEsUUFBUSxFQUFDLG9CQUFVO0FBQ2YsU0FBSzVDLGNBQUwsQ0FBb0I2QyxZQUFwQixHQUFtQyxJQUFuQztBQUNBLFNBQUtqRCxNQUFMLENBQVlpRCxZQUFaLEdBQTJCLElBQTNCO0FBQ0gsR0E1RmlDO0FBNkZsQzFDLEVBQUFBLGVBN0ZrQywyQkE2RmxCb0MsTUE3RmtCLEVBNkZYO0FBQ25CLFFBQUk1QyxJQUFJLEdBQUcsSUFBWDtBQUNBQSxJQUFBQSxJQUFJLENBQUN5QyxjQUFMLEdBQXNCLENBQXRCLENBRm1CLENBRUs7O0FBQ3hCLFFBQUlVLFdBQVcsR0FBR3ZFLFFBQVEsQ0FBQ3dFLFlBQVQsQ0FBc0IsUUFBdEIsRUFBZ0MsUUFBaEMsQ0FBbEI7QUFDQSxTQUFLekIsT0FBTCxDQUFhd0IsV0FBYixFQUEwQixVQUFTRSxhQUFULEVBQXVCO0FBQzdDLFdBQUtwRCxNQUFMLENBQVlpRCxZQUFaLEdBQTJCRyxhQUEzQjtBQUNBLFdBQUtwRCxNQUFMLENBQVlxRCxZQUFaLENBQXlCLENBQXpCLEVBQTRCLFNBQTVCLEVBQXVDLElBQXZDO0FBQ0gsS0FIeUIsQ0FHeEJ4QixJQUh3QixDQUduQixJQUhtQixDQUExQjtBQUtILEdBdEdpQztBQXVHbENyQixFQUFBQSxnQkF2R2tDLDhCQXVHaEI7QUFDZCxRQUFJVCxJQUFJLEdBQUcsSUFBWDtBQUNBLFFBQUltRCxXQUFXLEdBQUd2RSxRQUFRLENBQUN3RSxZQUFULENBQXNCLFFBQXRCLEVBQWdDLFFBQWhDLENBQWxCO0FBQ0EsU0FBS3pCLE9BQUwsQ0FBYXdCLFdBQWIsRUFBMEIsVUFBU0UsYUFBVCxFQUF1QjtBQUM3QyxXQUFLaEQsY0FBTCxDQUFvQjZDLFlBQXBCLEdBQW1DRyxhQUFuQztBQUNBLFdBQUtoRCxjQUFMLENBQW9CaUQsWUFBcEIsQ0FBaUMsQ0FBakMsRUFBb0MsUUFBcEMsRUFBOEMsSUFBOUM7QUFDSCxLQUh5QixDQUd4QnhCLElBSHdCLENBR25CLElBSG1CLENBQTFCO0FBSUgsR0E5R2lDO0FBK0dsQztBQUNBeUIsRUFBQUEsa0JBaEhrQyxnQ0FnSFo7QUFDbEIsUUFBSXZELElBQUksR0FBRyxJQUFYOztBQUNBLFFBQUcsS0FBS0ssY0FBUixFQUF1QjtBQUNuQixVQUFJOEMsV0FBVyxHQUFHdkUsUUFBUSxDQUFDd0UsWUFBVCxDQUFzQixRQUF0QixFQUFnQyxRQUFoQyxDQUFsQjtBQUNBLFdBQUt6QixPQUFMLENBQWF3QixXQUFiLEVBQTBCLFVBQVNFLGFBQVQsRUFBdUI7QUFDN0MsYUFBS2hELGNBQUwsQ0FBb0I2QyxZQUFwQixHQUFtQ0csYUFBbkM7QUFDQSxhQUFLaEQsY0FBTCxDQUFvQmlELFlBQXBCLENBQWlDLENBQWpDLEVBQW9DLFFBQXBDLEVBQThDLEtBQTlDO0FBQ0gsT0FIeUIsQ0FHeEJ4QixJQUh3QixDQUduQixJQUhtQixDQUExQjtBQUlIO0FBQ0osR0F6SGlDO0FBMEhsQztBQUNBVSxFQUFBQSxvQkEzSGtDLGtDQTJIVjtBQUNwQixRQUFJZ0IsUUFBUSxHQUFHLEtBQUtDLFdBQUwsQ0FBaUJDLGdCQUFqQixFQUFmO0FBQ0EsU0FBSzlELElBQUwsQ0FBVStELHVCQUFWLENBQWtDSCxRQUFsQztBQUNBLFNBQUsvRCxVQUFMLEdBQWtCLEtBQWxCO0FBQ0gsR0EvSGlDO0FBZ0lsQztBQUNBaUQsRUFBQUEsaUJBaklrQywrQkFpSWI7QUFDakIsUUFBSTFDLElBQUksR0FBRyxJQUFYOztBQUNBLFFBQUlBLElBQUksQ0FBQ0MsTUFBTCxJQUFlRCxJQUFJLENBQUN5QyxjQUFMLElBQXVCLENBQTFDLEVBQTZDO0FBQ3pDLFdBQUt4QyxNQUFMLENBQVlxRCxZQUFaLENBQXlCLENBQXpCLEVBQTRCLFNBQTVCLEVBQXVDLElBQXZDO0FBQ0F0RCxNQUFBQSxJQUFJLENBQUN5QyxjQUFMLEdBQXNCLENBQXRCO0FBQ0g7QUFDSixHQXZJaUM7QUF3SWxDO0FBQ0FtQixFQUFBQSxrQkF6SWtDLDhCQXlJZEMsSUF6SWMsRUF5SVI7QUFDdEIsUUFBSTdELElBQUksR0FBRyxJQUFYO0FBQ0EsUUFBSUEsSUFBSSxDQUFDUCxVQUFULEVBQXNCLE9BRkEsQ0FFTzs7QUFDN0IsUUFBSU8sSUFBSSxDQUFDeUQsV0FBVCxFQUFxQjtBQUNqQnpELE1BQUFBLElBQUksQ0FBQ3lELFdBQUwsQ0FBaUJLLGVBQWpCLENBQWlDLEtBQWpDO0FBQ0g7O0FBQ0QsUUFBSUQsSUFBSixFQUFTO0FBQ0w3RCxNQUFBQSxJQUFJLENBQUN5RCxXQUFMLEdBQW1CSSxJQUFuQjtBQUNBN0QsTUFBQUEsSUFBSSxDQUFDeUQsV0FBTCxDQUFpQkssZUFBakIsQ0FBaUMsSUFBakM7QUFDSDs7QUFDRDlELElBQUFBLElBQUksQ0FBQytELG9CQUFMO0FBQ0EsU0FBS3pDLGFBQUwsQ0FBbUJTLElBQW5CLENBQXdCQyxNQUF4QixHQUFpQyxJQUFqQztBQUNILEdBckppQztBQXNKbEMrQixFQUFBQSxvQkF0SmtDLGtDQXNKWjtBQUNsQixRQUFJL0QsSUFBSSxHQUFHLElBQVg7O0FBQ0EsUUFBSUEsSUFBSSxDQUFDeUQsV0FBVCxFQUFxQjtBQUNqQixVQUFJTyxXQUFXLEdBQUdoRSxJQUFJLENBQUN5RCxXQUFMLENBQWlCUSxpQkFBakIsRUFBbEI7O0FBQ0EsVUFBSUQsV0FBSixFQUFpQjtBQUNiLFlBQUlFLEdBQUcsR0FBR0YsV0FBVyxDQUFDLENBQUQsQ0FBWCxDQUFlLENBQWYsQ0FBVjtBQUNBLFlBQUlHLEdBQUcsR0FBR0gsV0FBVyxDQUFDLENBQUQsQ0FBWCxDQUFlLENBQWYsQ0FBVjtBQUNBLFlBQUlJLFdBQVcsR0FBR3hELEtBQUssQ0FBQ3lELGFBQU4sQ0FBb0JILEdBQXBCLENBQWxCOztBQUNBLFlBQUlFLFdBQUosRUFBaUI7QUFDYixlQUFLekMsT0FBTCxDQUFhL0MsUUFBUSxDQUFDMEYsVUFBVCxDQUFvQkosR0FBcEIsQ0FBYixFQUF1QyxVQUFTdEMsV0FBVCxFQUFzQjtBQUN6RCxpQkFBS1IsYUFBTCxDQUFtQlMsV0FBbkIsR0FBaUNELFdBQWpDO0FBQ0gsV0FGc0MsQ0FFckNFLElBRnFDLENBRWhDLElBRmdDLENBQXZDO0FBR0E5QixVQUFBQSxJQUFJLENBQUNvQixhQUFMLENBQW1CbUQsTUFBbkIsR0FBNEJKLEdBQUcsR0FBRyxLQUFsQztBQUNIO0FBQ0o7QUFDSixLQWJELE1BYUssQ0FDRDtBQUNIO0FBQ0osR0F4S2lDO0FBeUtsQzdCLEVBQUFBLGlCQXpLa0MsK0JBeUtmO0FBQ2YxQixJQUFBQSxLQUFLLENBQUM0RCxlQUFOLENBQXNCLENBQXRCO0FBQ0EsUUFBSXhFLElBQUksR0FBRyxJQUFYO0FBQ0EsUUFBSUEsSUFBSSxDQUFDUCxVQUFULEVBQXNCOztBQUN0QixRQUFJTyxJQUFJLENBQUN5RCxXQUFULEVBQXFCO0FBQ2pCLFVBQUlPLFdBQVcsR0FBR2hFLElBQUksQ0FBQ3lELFdBQUwsQ0FBaUJRLGlCQUFqQixFQUFsQjs7QUFDQSxVQUFJRCxXQUFKLEVBQWdCO0FBQ1osWUFBSUUsR0FBRyxHQUFHRixXQUFXLENBQUMsQ0FBRCxDQUFYLENBQWUsQ0FBZixDQUFWO0FBQ0EsWUFBSUcsR0FBRyxHQUFHSCxXQUFXLENBQUMsQ0FBRCxDQUFYLENBQWUsQ0FBZixDQUFWO0FBQ0EsWUFBSVMsUUFBUSxHQUFHekYsa0JBQWtCLENBQUNhLFdBQW5CLEdBQWlDNkUsUUFBakMsR0FBNENDLGVBQTVDLENBQTREVCxHQUE1RCxDQUFmLENBSFksQ0FJWjs7QUFDQSxZQUFJTyxRQUFRLElBQUlOLEdBQVosSUFBbUJuRSxJQUFJLENBQUNDLE1BQTVCLEVBQW9DO0FBQ2hDRCxVQUFBQSxJQUFJLENBQUN5QyxjQUFMLEdBQXNCLENBQXRCO0FBQ0F6QyxVQUFBQSxJQUFJLENBQUNQLFVBQUwsR0FBa0IsSUFBbEI7QUFDQSxlQUFLUSxNQUFMLENBQVlxRCxZQUFaLENBQXlCLENBQXpCLEVBQTRCLFNBQTVCLEVBQXVDLEtBQXZDO0FBQ0F0RCxVQUFBQSxJQUFJLENBQUN1RCxrQkFBTDtBQUNILFNBTEQsTUFLSztBQUNELGNBQUlDLFFBQVEsR0FBR3hELElBQUksQ0FBQ3lELFdBQUwsQ0FBaUJDLGdCQUFqQixFQUFmO0FBQ0EsZUFBSzlELElBQUwsQ0FBVStELHVCQUFWLENBQWtDSCxRQUFsQztBQUNIO0FBQ0o7QUFDSixLQWpCRCxNQWlCSztBQUNEb0IsTUFBQUEsT0FBTyxDQUFDLFVBQUQsQ0FBUDtBQUNIO0FBQ0o7QUFqTWlDLENBQVQsQ0FBN0I7QUFvTUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjVGLHNCQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahCAo5YWI55+l5Zyj5q6/KVxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDMtMjIgMTU6MDU6MzRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgU2VlcnBhbGFjZVN1bW1vbkl0ZW0gPSByZXF1aXJlKFwic2VlcnBhbGFjZV9zdW1tb25fSXRlbVwiKSBcbnZhciBTZWVycGFsYWNlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJzZWVycGFsYWNlX2NvbnRyb2xsZXJcIilcbnZhciBCYWNrcGFja0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiYmFja3BhY2tfY29udHJvbGxlclwiKVxudmFyIFNlZXJwYWxhY2VDb25zdCA9IHJlcXVpcmUoXCJzZWVycGFsYWNlX2NvbnN0XCIpXG52YXIgU2VlcnBhbGFjZV9zdW1tb25QYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwic2VlcnBhbGFjZVwiLCBcInNlZXJwYWxhY2Vfc3VtbW9uX3BhbmVsXCIpO1xuICAgICAgICB0aGlzLmlzX3BsYXlpbmcgPSBmYWxzZSAvLyDmmK/lkKbmraPlnKjmkq3mlL7lj6zllKTnibnmlYhcbiAgICAgICAgdGhpcy5zdW1tb25fbGlzdCA9IHt9XG4gICAgICAgIHRoaXMuc3VtbW9uX3BvcyA9IHt9XG4gICAgICAgIHRoaXMuY3RybCA9IFNlZXJwYWxhY2VDb250cm9sbGVyLmdldEluc3RhbmNlKCk7XG4gICAgfSxcblxuICAgIC8vIOWPr+S7peWIneWni+WMluWjsOaYjuS4gOS6m+WPmOmHj+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcblxuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdFBhbmVsOmZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICB0aGlzLm5wY19zayA9IHRoaXMuc2Vla0NoaWxkKFwibnBjQW5pXCIsc3AuU2tlbGV0b24pIC8vbnBj5Yqo55S7XG4gICAgICAgIHRoaXMuYmFsbF9lZmZlY3Rfc2sgPSB0aGlzLnNlZWtDaGlsZChcInBvc19iYWxsXCIpLmdldENoaWxkQnlOYW1lKFwiYWN0aW9uXCIpLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbikgLy/msLTmmbbnkIPliqjnlLtcbiAgICAgICAgLy8tLSBOUENcbiAgICAgICAgdGhpcy5oYW5kbGVOUENFZmZlY3QodHJ1ZSlcbiAgICAgICAgLy8tLSDmsLTmmbbnkIPvvIjluLjpqbvvvIlcbiAgICAgICAgdGhpcy5oYW5kbGVCYWxsRWZmZWN0KHRydWUpXG4gICAgICAgIGZvcihsZXQgaT0xO2k8NTsrK2kpe1xuICAgICAgICAgICAgbGV0IHBvc19ub2RlID0gdGhpcy5zZWVrQ2hpbGQoXCJtYWluX2NvbnRhaW5lclwiKS5nZXRDaGlsZEJ5TmFtZShcImltYWdlX3N0YWdlXCIpLmdldENoaWxkQnlOYW1lKFwicG9zX25vZGVfXCIgKyBpKVxuICAgICAgICAgICAgaWYgKHBvc19ub2RlKXtcbiAgICAgICAgICAgICAgICBVdGlscy5kZWxheVJ1bihwb3Nfbm9kZSwgaSozLzYwLCBmdW5jdGlvbiAoICl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdW1tb25faWNvbiA9IHNlbGYuc3VtbW9uX2xpc3RbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VtbW9uX2ljb24pe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1vbl9pY29uID0gbmV3IFNlZXJwYWxhY2VTdW1tb25JdGVtKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OnNlbGYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tb25faWNvbi5zZXRQYXJlbnQocG9zX25vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1vbl9pY29uLnNob3coKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3VtbW9uX2xpc3RbaV0gPSBzdW1tb25faWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnN1bW1vbl9wb3NbaV0gPSBwb3Nfbm9kZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbGYuYnRuX3N1bW1vbl9uZCA9IHRoaXMuc2Vla0NoaWxkKFwiYnRuX3N1bW1vblwiKVxuICAgICAgICBzZWxmLmJ0bl9zdW1tb25fbGIgPSB0aGlzLnNlZWtDaGlsZChcImJ0bl9zdW1tb25fbGFiZWxcIixjYy5MYWJlbClcbiAgICAgICAgc2VsZi5idG5fc3VtbW9uX3NwID0gdGhpcy5zZWVrQ2hpbGQoXCJpY29uXCIsY2MuU3ByaXRlKVxuICAgICAgICBsZXQgcGF0aCA9IFBhdGhUb29sLmdldEljb25QYXRoKFwiaXRlbVwiLFNlZXJwYWxhY2VDb25zdC5Hb29kX1poaUh1aSlcbiAgICAgICAgdGhpcy5sb2FkUmVzKHBhdGgsZnVuY3Rpb24oU3ByaXRlRnJhbWUpe1xuICAgICAgICAgICAgdGhpcy5idG5fc3VtbW9uX3NwLnNwcml0ZUZyYW1lICA9IFNwcml0ZUZyYW1lXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgdGhpcy5idG5fc3VtbW9uX3NwLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGxldCBkZXNrX3NwID0gdGhpcy5zZWVrQ2hpbGQoXCJkZXNrXCIsY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEJpZ0JnKFwiYmlnYmdfNzdcIiksZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgIGRlc2tfc3Auc3ByaXRlRnJhbWUgPSByZXNcbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5idG5fc3VtbW9uX25kLm9uKFwidG91Y2hlbmRcIix0aGlzLl9vbkNsaWNrU3VtbW9uQnRuLHRoaXMpXG4gICAgICAgIHRoaXMuYmFsbF9lZmZlY3Rfc2suc2V0Q29tcGxldGVMaXN0ZW5lcigoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKHRoaXMuaXNfcGxheWluZyA9PSBmYWxzZSkgcmV0dXJuXG4gICAgICAgICAgICB0aGlzLl9vblN1bW1vbkFuaUNhbGxCYWNrKClcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFsbEVmZmVjdCgpXG4gICAgICAgIH0uYmluZCh0aGlzKSkpXG4gICAgICAgIHRoaXMubnBjX3NrLnNldENvbXBsZXRlTGlzdGVuZXIoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBpZih0aGlzLm5wY19hbmlfc3RhdHVzID09IDEpIHJldHVyblxuICAgICAgICAgICAgdGhpcy5fb25OUENBbmlDYWxsQmFjaygpXG4gICAgICAgIH0uYmluZCh0aGlzKSkpXG4gICAgfSxcblxuICAgIGFkZFRvUGFyZW50KCBzdGF0dXMgKXtcbiAgICAgICAgc3RhdHVzID0gc3RhdHVzIHx8IGZhbHNlXG4gICAgICAgIGlmKHN0YXR1cyl7XG4gICAgICAgICAgICB0aGlzLnNob3coKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjizmt7vliqDliLDlr7nlupTkuLvoioLngrnkuYvlkI7nmoTlm57osIPlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvblNob3c6ZnVuY3Rpb24ocGFyYW1zKXtcblxuICAgIH0sXG5cbiAgICAvLyDpnaLmnb/orr7nva7kuI3lj6/op4HnmoTlm57osIMs6L+Z6YeM5YGa5LiA5Lqb5LiN5Y+v6KeB55qE5bGP6JS95aSE55CGXG4gICAgb25IaWRlOmZ1bmN0aW9uKCl7XG5cbiAgICB9LFxuXG4gICAgLy8g5b2T6Z2i5p2/5LuO5Li76IqC54K56YeK5pS+5o6J55qE6LCD55So5o6l5Y+jLOmcgOimgeaJi+WKqOiwg+eUqCzogIzkuJTkuZ/kuIDlrpropoHosIPnlKhcbiAgICBvbkRlbGV0ZTpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJhbGxfZWZmZWN0X3NrLnNrZWxldG9uRGF0YSA9IG51bGw7XG4gICAgICAgIHRoaXMubnBjX3NrLnNrZWxldG9uRGF0YSA9IG51bGw7XG4gICAgfSxcbiAgICBoYW5kbGVOUENFZmZlY3Qoc3RhdHVzKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIHNlbGYubnBjX2FuaV9zdGF0dXMgPSAxIC8vIOagh+ivhuW9k+WJjW5wY+eahOWKqOS9nOexu+Wei1xuICAgICAgICB2YXIgc2tldG9uX3BhdGggPSBQYXRoVG9vbC5nZXRTcGluZVBhdGgoXCJFMjQxMTBcIiwgXCJhY3Rpb25cIik7XG4gICAgICAgIHRoaXMubG9hZFJlcyhza2V0b25fcGF0aCwgZnVuY3Rpb24oc2tlbGV0b25fZGF0YSl7XG4gICAgICAgICAgICB0aGlzLm5wY19zay5za2VsZXRvbkRhdGEgPSBza2VsZXRvbl9kYXRhO1xuICAgICAgICAgICAgdGhpcy5ucGNfc2suc2V0QW5pbWF0aW9uKDAsIFwiYWN0aW9uMVwiLCB0cnVlKTsgICAgICAgICAgIFxuICAgICAgICB9LmJpbmQodGhpcykpOyAgICBcbiAgICAgICAgXG4gICAgfSxcbiAgICBoYW5kbGVCYWxsRWZmZWN0KCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICB2YXIgc2tldG9uX3BhdGggPSBQYXRoVG9vbC5nZXRTcGluZVBhdGgoXCJFMjQxMTFcIiwgXCJhY3Rpb25cIik7XG4gICAgICAgIHRoaXMubG9hZFJlcyhza2V0b25fcGF0aCwgZnVuY3Rpb24oc2tlbGV0b25fZGF0YSl7XG4gICAgICAgICAgICB0aGlzLmJhbGxfZWZmZWN0X3NrLnNrZWxldG9uRGF0YSA9IHNrZWxldG9uX2RhdGE7XG4gICAgICAgICAgICB0aGlzLmJhbGxfZWZmZWN0X3NrLnNldEFuaW1hdGlvbigwLCBcImFjdGlvblwiLCB0cnVlKTsgICAgICAgICAgIFxuICAgICAgICB9LmJpbmQodGhpcykpOyAgICAgICAgIFxuICAgIH0sXG4gICAgLy8gLS0g5rC05pm255CD5Y+s5ZSk54m55pWIXG4gICAgaGFuZGxlU3VtbW9uRWZmZWN0KCAgKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmKHRoaXMuYmFsbF9lZmZlY3Rfc2spe1xuICAgICAgICAgICAgbGV0IHNrZXRvbl9wYXRoID0gUGF0aFRvb2wuZ2V0U3BpbmVQYXRoKFwiRTI0MTEyXCIsIFwiYWN0aW9uXCIpO1xuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHNrZXRvbl9wYXRoLCBmdW5jdGlvbihza2VsZXRvbl9kYXRhKXtcbiAgICAgICAgICAgICAgICB0aGlzLmJhbGxfZWZmZWN0X3NrLnNrZWxldG9uRGF0YSA9IHNrZWxldG9uX2RhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5iYWxsX2VmZmVjdF9zay5zZXRBbmltYXRpb24oMCwgXCJhY3Rpb25cIiwgZmFsc2UpOyAgICAgICAgICAgXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpOyAgXG4gICAgICAgIH1cbiAgICB9LCAgICBcbiAgICAvLyAtLSDmsLTmmbbnkIPlj6zllKTnibnmlYjlrozmr5Xlho3or7fmsYLlj6zllKTljY/orq5cbiAgICBfb25TdW1tb25BbmlDYWxsQmFjayggICl7XG4gICAgICAgIGxldCBncm91cF9pZCA9IHRoaXMuc2VsZWN0X2NhcmQuZ2V0U3VtbW9uR3JvdXBJZCgpXG4gICAgICAgIHRoaXMuY3RybC5yZXF1ZXN0U2VlcnBhbGFjZVN1bW1vbihncm91cF9pZClcbiAgICAgICAgdGhpcy5pc19wbGF5aW5nID0gZmFsc2VcbiAgICB9LFxuICAgIC8vIC0tIG5wY+eahOWPrOWUpOeJueaViOaSreaUvuWujOWGjeivt+axguWPrOWUpOWNj+iurlxuICAgIF9vbk5QQ0FuaUNhbGxCYWNrKCAgKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmIChzZWxmLm5wY19zayAmJiBzZWxmLm5wY19hbmlfc3RhdHVzID09IDIpIHtcbiAgICAgICAgICAgIHRoaXMubnBjX3NrLnNldEFuaW1hdGlvbigwLCBcImFjdGlvbjFcIiwgdHJ1ZSk7IFxuICAgICAgICAgICAgc2VsZi5ucGNfYW5pX3N0YXR1cyA9IDFcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy8tLSDngrnlh7vkuobljaHniYxcbiAgICBfb25DbGlja1N1bW1vbkNhcmQoIGNhcmQgKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmIChzZWxmLmlzX3BsYXlpbmcpICByZXR1cm4gLy8gLS0g5pKt5pS+5Y+s5ZSk54m55pWI5Lit5LiN6K6p5YiH5o2i6YCJ5oup5Y2h54mMXG4gICAgICAgIGlmIChzZWxmLnNlbGVjdF9jYXJkKXtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0X2NhcmQuc2V0U2VsZWN0U3RhdHVzKGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIGlmIChjYXJkKXtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0X2NhcmQgPSBjYXJkXG4gICAgICAgICAgICBzZWxmLnNlbGVjdF9jYXJkLnNldFNlbGVjdFN0YXR1cyh0cnVlKVxuICAgICAgICB9IFxuICAgICAgICBzZWxmLnVwZGF0ZVN1bW1vbkJ0bkxhYmVsKCkgICBcbiAgICAgICAgdGhpcy5idG5fc3VtbW9uX3NwLm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICB9LFxuICAgIHVwZGF0ZVN1bW1vbkJ0bkxhYmVsKCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBpZiAoc2VsZi5zZWxlY3RfY2FyZCl7XG4gICAgICAgICAgICBsZXQgc3VtbW9uX2Nvc3QgPSBzZWxmLnNlbGVjdF9jYXJkLmdldFN1bW1vbkNvc3RJdGVtKClcbiAgICAgICAgICAgIGlmIChzdW1tb25fY29zdCkge1xuICAgICAgICAgICAgICAgIGxldCBiaWQgPSBzdW1tb25fY29zdFswXVswXVxuICAgICAgICAgICAgICAgIGxldCBudW0gPSBzdW1tb25fY29zdFswXVsxXVxuICAgICAgICAgICAgICAgIGxldCBpdGVtX2NvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcoYmlkKVxuICAgICAgICAgICAgICAgIGlmIChpdGVtX2NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0SXRlbVJlcyhiaWQpLCBmdW5jdGlvbihTcHJpdGVGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idG5fc3VtbW9uX2xiLnNwcml0ZUZyYW1lID0gU3ByaXRlRnJhbWU7XG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYnRuX3N1bW1vbl9sYi5zdHJpbmcgPSBudW0gKyBcIiDlj6zllKRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAvLyBzZWxmLmJ0bl9zdW1tb25fbGFiZWwuc2V0U3RyaW5nKFRJMThOKFwiPGRpdiBvdXRsaW5lPTIsIzRhMjYwNj7lj6zllKQ8L2Rpdj5cIikpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIF9vbkNsaWNrU3VtbW9uQnRuKCl7XG4gICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgxKVxuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgaWYgKHNlbGYuaXNfcGxheWluZykgIHJldHVybiBcbiAgICAgICAgaWYgKHNlbGYuc2VsZWN0X2NhcmQpe1xuICAgICAgICAgICAgbGV0IHN1bW1vbl9jb3N0ID0gc2VsZi5zZWxlY3RfY2FyZC5nZXRTdW1tb25Db3N0SXRlbSgpXG4gICAgICAgICAgICBpZiAoc3VtbW9uX2Nvc3Qpe1xuICAgICAgICAgICAgICAgIGxldCBiaWQgPSBzdW1tb25fY29zdFswXVswXVxuICAgICAgICAgICAgICAgIGxldCBudW0gPSBzdW1tb25fY29zdFswXVsxXVxuICAgICAgICAgICAgICAgIGxldCBoYXZlX251bSA9IEJhY2twYWNrQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0SXRlbU51bUJ5QmlkKGJpZClcbiAgICAgICAgICAgICAgICAvLyAtLSDog4zljIXnianlk4HotrPlpJ/liJnlhYjmkq3mlL7lj6zllKTnibnmlYjlho3or7fmsYLlj6zllKTljY/orq7vvIzkuI3otrPliJnnm7TmjqXor7fmsYLljY/orq7vvIjlvLnlh7rnianlk4HmnaXmupDlkozmj5DnpLrvvIlcbiAgICAgICAgICAgICAgICBpZiAoaGF2ZV9udW0gPj0gbnVtICYmIHNlbGYubnBjX3NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubnBjX2FuaV9zdGF0dXMgPSAyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaXNfcGxheWluZyA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ucGNfc2suc2V0QW5pbWF0aW9uKDAsIFwiYWN0aW9uMlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlU3VtbW9uRWZmZWN0KClcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdyb3VwX2lkID0gc2VsZi5zZWxlY3RfY2FyZC5nZXRTdW1tb25Hcm91cElkKClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHJsLnJlcXVlc3RTZWVycGFsYWNlU3VtbW9uKGdyb3VwX2lkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBtZXNzYWdlKFwi6K+35YWI6YCJ5oup5LiA56eN5Y2h54mMXCIpXG4gICAgICAgIH1cbiAgICB9LCAgICBcbiAgICBcbn0pXG5tb2R1bGUuZXhwb3J0cyA9IFNlZXJwYWxhY2Vfc3VtbW9uUGFuZWw7Il19
|