|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/battle/view/battle_result_window.js';
|
var __require = nodeEnv ? function (request) {
|
return cc.require(request);
|
} : function (request) {
|
return __quick_compile_project__.require(request, __filename);
|
};
|
function __define (exports, require, module) {
|
if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
|
cc._RF.push(module, '2b0b8TWOGVK0Is/Vu+yHGPS', 'battle_result_window');
|
// Scripts/mod/battle/view/battle_result_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 战斗结算主界面
|
// <br/>Create: 2019-05-23 10:12:24
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var BattleEvent = require("battle_event");
|
|
var BattleConst = require("battle_const");
|
|
var Battle_resultWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("battle", "battle_result_view");
|
this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Mini; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.result = arguments[0];
|
this.fight_type = arguments[1];
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {
|
this.ctrl = require("battle_controller").getInstance();
|
this.item_list = {};
|
this.model = this.ctrl.getModel();
|
},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
// playOtherSound("b_win", AudioManager.AUDIO_TYPE.BATTLE)
|
this.background = this.seekChild("background");
|
this.background.scale = FIT_SCALE;
|
this.source_container = this.seekChild("container");
|
this.title_container = this.seekChild("title_container");
|
this.title_width = this.title_container.getContentSize().width;
|
this.title_height = this.title_container.getContentSize().height;
|
this.handleEffect(true);
|
this.time_lb = this.seekChild("time_lb", cc.Label);
|
this.comfirm_btn = this.seekChild("comfirm_btn");
|
this.harm_btn = this.seekChild("harm_btn");
|
this.harm_btn.active = false;
|
this.scroll_view = this.seekChild("scroll_view");
|
this.scroll_content_nd = this.seekChild(this.scroll_view, "content");
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
Utils.onTouchEnd(this.harm_btn, function () {
|
if (this.data && Utils.next(this.data) != null) {
|
this.ctrl.openBattleHarmInfoView(true, this.data);
|
}
|
}.bind(this), 1);
|
Utils.onTouchEnd(this.comfirm_btn, function () {
|
this.ctrl.openFinishView(false, this.fight_type);
|
}.bind(this), 1);
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(params) {
|
this.setData(params.data, params.fight_type);
|
},
|
//剧情:{章节id,难度,副本id}
|
setData: function setData(data, fight_type) {
|
if (data) {
|
this.data = data || {};
|
this.fight_type = fight_type;
|
this.reward_list = this.data.item_rewards;
|
this.result = this.data.result;
|
this.is_guide = this.data.is_guide;
|
this.rewardViewUI();
|
|
if (this.data && this.data.hurt_statistics) {
|
this.harm_btn.active = true;
|
} else {
|
this.harm_btn.active = false;
|
}
|
}
|
},
|
handleEffect: function handleEffect(status) {
|
if (status == false) {
|
if (this.play_effect) {
|
this.play_effect.setToSetupPose();
|
this.play_effect.clearTracks();
|
}
|
} else {
|
if (this.play_effect == null) {
|
this.play_effect = this.title_container.getComponent(sp.Skeleton);
|
var res = cc.js.formatStr("spine/%s/action.atlas", PathTool.getEffectRes(103));
|
this.loadRes(res, function (res_object) {
|
this.play_effect.skeletonData = res_object;
|
this.play_effect.setAnimation(1, PlayerAction.action_2, false);
|
}.bind(this));
|
}
|
}
|
},
|
//奖励界面
|
rewardViewUI: function rewardViewUI() {
|
var sum = this.reward_list.length;
|
var col = 4; //算出最多多少行
|
|
this.row = Math.ceil(sum / col);
|
this.space = 30;
|
var max_height = this.space + (this.space + 119) * this.row;
|
this.max_height = Math.max(max_height, 210);
|
this.scroll_content_nd.setContentSize(720, this.max_height);
|
|
if (sum >= col) {
|
sum = col;
|
}
|
|
var total_width = sum * 119 + (sum - 1) * this.space;
|
this.start_x = (720 - total_width) * 0.5;
|
|
if (this.row == 1) {
|
this.start_y = this.max_height * 0.5;
|
} else {
|
this.start_y = this.max_height - this.space - 119 * 0.5;
|
}
|
|
for (var i in this.reward_list) {
|
var v = this.reward_list[i];
|
|
if (v.bid != null && v.num != null) {
|
var item = ItemsPool.getInstance().getItem("backpack_item");
|
item.initConfig(false, 1, false, true, true);
|
item.setData({
|
bid: v.bid,
|
num: v.num
|
});
|
|
var _x = this.start_x + 119 * 0.5 + i % col * (119 + this.space);
|
|
var _y = this.start_y - Math.floor(i / col) * (119 + this.space);
|
|
cc.log(_x, _y);
|
item.setPosition(_x, _y);
|
item.show();
|
item.setParent(this.scroll_content_nd);
|
this.item_list[i] = item;
|
}
|
}
|
|
this.ItemAciton();
|
},
|
ItemAciton: function ItemAciton() {
|
Utils.delayRun(this.source_container, 0.5, function () {
|
this.updateTimer();
|
}.bind(this));
|
},
|
updateTimer: function updateTimer() {
|
var time = 5;
|
|
var call_back = function () {
|
time = time - 1;
|
var new_time = Math.ceil(time);
|
var str = new_time + Utils.TI18N("秒后关闭");
|
|
if (this.time_lb) {
|
this.time_lb.string = str;
|
}
|
|
if (new_time <= 0) {
|
gcore.Timer.del("result_timer");
|
this.ctrl.openFinishView(false, this.fight_type);
|
}
|
}.bind(this);
|
|
gcore.Timer.set(call_back, 1000, -1, "result_timer");
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
this.root_wnd.stopAllActions();
|
this.source_container.stopAllActions();
|
gcore.Timer.del("result_timer");
|
|
require("hero_controller").getInstance().openEquipTips(false);
|
|
require("tips_controller").getInstance().closeAllTips();
|
|
this.handleEffect(false);
|
|
if (this.model.getBattleScene() && this.ctrl.getIsSameBattleType(this.fight_type)) {
|
this.model.result(this.data, null);
|
}
|
|
if (this.fight_type == BattleConst.Fight_Type.Darma) {
|
gcore.GlobalEvent.fire(BattleEvent.MOVE_DRAMA_EVENT, this.fight_type);
|
}
|
|
if (this.item_list) {
|
for (var i in this.item_list) {
|
var v = this.item_list[i];
|
|
if (v) {
|
v.deleteMe();
|
v = null;
|
}
|
}
|
|
this.item_list = null;
|
}
|
|
this.ctrl.openFinishView(false, this.fight_type);
|
gcore.GlobalEvent.fire(BattleEvent.CLOSE_RESULT_VIEW, this.fight_type);
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxiYXR0bGVcXHZpZXdcXGJhdHRsZV9yZXN1bHRfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIkJhdHRsZUV2ZW50IiwiQmF0dGxlQ29uc3QiLCJCYXR0bGVfcmVzdWx0V2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwidmlld1RhZyIsIlNDRU5FX1RBRyIsImRpYWxvZ3VlIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiTWluaSIsInJlc3VsdCIsImFyZ3VtZW50cyIsImZpZ2h0X3R5cGUiLCJpbml0Q29uZmlnIiwiY3RybCIsImdldEluc3RhbmNlIiwiaXRlbV9saXN0IiwibW9kZWwiLCJnZXRNb2RlbCIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJzZWVrQ2hpbGQiLCJzY2FsZSIsIkZJVF9TQ0FMRSIsInNvdXJjZV9jb250YWluZXIiLCJ0aXRsZV9jb250YWluZXIiLCJ0aXRsZV93aWR0aCIsImdldENvbnRlbnRTaXplIiwid2lkdGgiLCJ0aXRsZV9oZWlnaHQiLCJoZWlnaHQiLCJoYW5kbGVFZmZlY3QiLCJ0aW1lX2xiIiwiTGFiZWwiLCJjb21maXJtX2J0biIsImhhcm1fYnRuIiwiYWN0aXZlIiwic2Nyb2xsX3ZpZXciLCJzY3JvbGxfY29udGVudF9uZCIsInJlZ2lzdGVyRXZlbnQiLCJVdGlscyIsIm9uVG91Y2hFbmQiLCJkYXRhIiwibmV4dCIsIm9wZW5CYXR0bGVIYXJtSW5mb1ZpZXciLCJiaW5kIiwib3BlbkZpbmlzaFZpZXciLCJvcGVuUm9vdFduZCIsInBhcmFtcyIsInNldERhdGEiLCJyZXdhcmRfbGlzdCIsIml0ZW1fcmV3YXJkcyIsImlzX2d1aWRlIiwicmV3YXJkVmlld1VJIiwiaHVydF9zdGF0aXN0aWNzIiwic3RhdHVzIiwicGxheV9lZmZlY3QiLCJzZXRUb1NldHVwUG9zZSIsImNsZWFyVHJhY2tzIiwiZ2V0Q29tcG9uZW50Iiwic3AiLCJTa2VsZXRvbiIsInJlcyIsImpzIiwiZm9ybWF0U3RyIiwiZ2V0RWZmZWN0UmVzIiwibG9hZFJlcyIsInJlc19vYmplY3QiLCJza2VsZXRvbkRhdGEiLCJzZXRBbmltYXRpb24iLCJQbGF5ZXJBY3Rpb24iLCJhY3Rpb25fMiIsInN1bSIsImxlbmd0aCIsImNvbCIsInJvdyIsIk1hdGgiLCJjZWlsIiwic3BhY2UiLCJtYXhfaGVpZ2h0IiwibWF4Iiwic2V0Q29udGVudFNpemUiLCJ0b3RhbF93aWR0aCIsInN0YXJ0X3giLCJzdGFydF95IiwiaSIsInYiLCJiaWQiLCJudW0iLCJpdGVtIiwiSXRlbXNQb29sIiwiZ2V0SXRlbSIsIl94IiwiX3kiLCJmbG9vciIsImxvZyIsInNldFBvc2l0aW9uIiwic2hvdyIsInNldFBhcmVudCIsIkl0ZW1BY2l0b24iLCJkZWxheVJ1biIsInVwZGF0ZVRpbWVyIiwidGltZSIsImNhbGxfYmFjayIsIm5ld190aW1lIiwic3RyIiwiVEkxOE4iLCJzdHJpbmciLCJnY29yZSIsIlRpbWVyIiwiZGVsIiwic2V0IiwiY2xvc2VDYWxsQmFjayIsInJvb3Rfd25kIiwic3RvcEFsbEFjdGlvbnMiLCJvcGVuRXF1aXBUaXBzIiwiY2xvc2VBbGxUaXBzIiwiZ2V0QmF0dGxlU2NlbmUiLCJnZXRJc1NhbWVCYXR0bGVUeXBlIiwiRmlnaHRfVHlwZSIsIkRhcm1hIiwiR2xvYmFsRXZlbnQiLCJmaXJlIiwiTU9WRV9EUkFNQV9FVkVOVCIsImRlbGV0ZU1lIiwiQ0xPU0VfUkVTVUxUX1ZJRVciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxXQUFXLEdBQUdELE9BQU8sQ0FBQyxjQUFELENBQXpCOztBQUNBLElBQUlFLFdBQVcsR0FBR0YsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FB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QUEsQ0FBQyxDQUFDc0MsUUFBRjtBQUNBdEMsVUFBQUEsQ0FBQyxHQUFHLElBQUo7QUFDSDtBQUNKOztBQUNELFdBQUt0RSxTQUFMLEdBQWlCLElBQWpCO0FBQ0g7O0FBQ0QsU0FBS0YsSUFBTCxDQUFVZ0MsY0FBVixDQUF5QixLQUF6QixFQUFnQyxLQUFLbEMsVUFBckM7QUFDQWdHLElBQUFBLEtBQUssQ0FBQ2EsV0FBTixDQUFrQkMsSUFBbEIsQ0FBdUIvSCxXQUFXLENBQUNrSSxpQkFBbkMsRUFBc0QsS0FBS2pILFVBQTNEO0FBQ0g7QUFwTDhCLENBQVQsQ0FBMUIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDmiJjmlpfnu5PnrpfkuLvnlYzpnaJcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA1LTIzIDEwOjEyOjI0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIEJhdHRsZUV2ZW50ID0gcmVxdWlyZShcImJhdHRsZV9ldmVudFwiKTtcbnZhciBCYXR0bGVDb25zdCA9IHJlcXVpcmUoXCJiYXR0bGVfY29uc3RcIik7XG5cbnZhciBCYXR0bGVfcmVzdWx0V2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImJhdHRsZVwiLCBcImJhdHRsZV9yZXN1bHRfdmlld1wiKTtcbiAgICAgICAgdGhpcy52aWV3VGFnID0gU0NFTkVfVEFHLmRpYWxvZ3VlOyAgICAgICAgICAgICAgICAvL+ivpeeql+S9k+aJgOWxnnVp5bGC57qnLOWFqOWxj3Vp6ZyA6KaB5ZyodWnlsYIs6Z2e5YWo5bGPdWnlnKhkaWFsb2d1ZeWxgizov5nkuKropoHms6jmhI9cbiAgICAgICAgdGhpcy53aW5fdHlwZSA9IFdpblR5cGUuTWluaTsgICAgICAgICAgICAgICAvL+aYr+WQpuaYr+WFqOWxj+eql+S9kyAgV2luVHlwZS5GdWxsLCBXaW5UeXBlLkJpZywgV2luVHlwZS5NaW5pLCBXaW5UeXBlLlRpcHNcbiAgICAgICAgdGhpcy5yZXN1bHQgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIHRoaXMuZmlnaHRfdHlwZSA9IGFyZ3VtZW50c1sxXTtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jdHJsID0gcmVxdWlyZShcImJhdHRsZV9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCk7XG4gICAgICAgIHRoaXMuaXRlbV9saXN0ID0ge307XG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKTtcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCO55qE5Zue6LCDLOWPr+S7peWcqOi/memHjOaNleiOt+ebuOWFs+iKgueCueaIluiAhee7hOS7tlxuICAgIG9wZW5DYWxsQmFjazogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBwbGF5T3RoZXJTb3VuZChcImJfd2luXCIsIEF1ZGlvTWFuYWdlci5BVURJT19UWVBFLkJBVFRMRSlcblxuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLnNlZWtDaGlsZChcImJhY2tncm91bmRcIik7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5zY2FsZSA9IEZJVF9TQ0FMRTtcblxuICAgICAgICB0aGlzLnNvdXJjZV9jb250YWluZXIgPSB0aGlzLnNlZWtDaGlsZChcImNvbnRhaW5lclwiKTtcbiAgICAgICAgdGhpcy50aXRsZV9jb250YWluZXIgPSB0aGlzLnNlZWtDaGlsZChcInRpdGxlX2NvbnRhaW5lclwiKTtcbiAgICAgICAgdGhpcy50aXRsZV93aWR0aCA9IHRoaXMudGl0bGVfY29udGFpbmVyLmdldENvbnRlbnRTaXplKCkud2lkdGg7XG4gICAgICAgIHRoaXMudGl0bGVfaGVpZ2h0ID0gdGhpcy50aXRsZV9jb250YWluZXIuZ2V0Q29udGVudFNpemUoKS5oZWlnaHQ7XG4gICAgICAgIHRoaXMuaGFuZGxlRWZmZWN0KHRydWUpO1xuXG4gICAgICAgIHRoaXMudGltZV9sYiA9IHRoaXMuc2Vla0NoaWxkKFwidGltZV9sYlwiLCBjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMuY29tZmlybV9idG4gPSB0aGlzLnNlZWtDaGlsZChcImNvbWZpcm1fYnRuXCIpO1xuICAgICAgICB0aGlzLmhhcm1fYnRuID0gdGhpcy5zZWVrQ2hpbGQoXCJoYXJtX2J0blwiKTtcbiAgICAgICAgdGhpcy5oYXJtX2J0bi5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zY3JvbGxfdmlldyA9IHRoaXMuc2Vla0NoaWxkKFwic2Nyb2xsX3ZpZXdcIik7XG4gICAgICAgIHRoaXMuc2Nyb2xsX2NvbnRlbnRfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnNjcm9sbF92aWV3LCBcImNvbnRlbnRcIik7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5oYXJtX2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiBVdGlscy5uZXh0KHRoaXMuZGF0YSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuQmF0dGxlSGFybUluZm9WaWV3KHRydWUsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSlcbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmNvbWZpcm1fYnRuLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlbkZpbmlzaFZpZXcoZmFsc2UsIHRoaXMuZmlnaHRfdHlwZSk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSlcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwgyzkuZ/lsLHmmK/kuIDkuKrnqpfkvZPnmoTmraPlvI/lhaXlj6Ms5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb3BlblJvb3RXbmQ6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdGhpcy5zZXREYXRhKHBhcmFtcy5kYXRhLCBwYXJhbXMuZmlnaHRfdHlwZSk7XG4gICAgfSxcblxuICAgIC8v5Ymn5oOF77yae+eroOiKgmlkLOmavuW6pu+8jOWJr+acrGlkfVxuICAgIHNldERhdGE6IGZ1bmN0aW9uIChkYXRhLCBmaWdodF90eXBlKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5maWdodF90eXBlID0gZmlnaHRfdHlwZTtcbiAgICAgICAgICAgIHRoaXMucmV3YXJkX2xpc3QgPSB0aGlzLmRhdGEuaXRlbV9yZXdhcmRzO1xuICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSB0aGlzLmRhdGEucmVzdWx0O1xuICAgICAgICAgICAgdGhpcy5pc19ndWlkZSA9IHRoaXMuZGF0YS5pc19ndWlkZTtcbiAgICAgICAgICAgIHRoaXMucmV3YXJkVmlld1VJKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5odXJ0X3N0YXRpc3RpY3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhcm1fYnRuLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFybV9idG4uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaGFuZGxlRWZmZWN0OiBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYXlfZWZmZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5X2VmZmVjdC5zZXRUb1NldHVwUG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucGxheV9lZmZlY3QuY2xlYXJUcmFja3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYXlfZWZmZWN0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXlfZWZmZWN0ID0gdGhpcy50aXRsZV9jb250YWluZXIuZ2V0Q29tcG9uZW50KHNwLlNrZWxldG9uKTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gY2MuanMuZm9ybWF0U3RyKFwic3BpbmUvJXMvYWN0aW9uLmF0bGFzXCIsIFBhdGhUb29sLmdldEVmZmVjdFJlcygxMDMpKVxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyhyZXMsIGZ1bmN0aW9uIChyZXNfb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxheV9lZmZlY3Quc2tlbGV0b25EYXRhID0gcmVzX29iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5X2VmZmVjdC5zZXRBbmltYXRpb24oMSwgUGxheWVyQWN0aW9uLmFjdGlvbl8yLCBmYWxzZSlcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/lpZblirHnlYzpnaJcbiAgICByZXdhcmRWaWV3VUk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN1bSA9IHRoaXMucmV3YXJkX2xpc3QubGVuZ3RoO1xuICAgICAgICB2YXIgY29sID0gNDtcbiAgICAgICAgLy/nrpflh7rmnIDlpJrlpJrlsJHooYxcbiAgICAgICAgdGhpcy5yb3cgPSBNYXRoLmNlaWwoc3VtIC8gY29sKTtcbiAgICAgICAgdGhpcy5zcGFjZSA9IDMwO1xuICAgICAgICB2YXIgbWF4X2hlaWdodCA9IHRoaXMuc3BhY2UgKyAodGhpcy5zcGFjZSArIDExOSkgKiB0aGlzLnJvdztcbiAgICAgICAgdGhpcy5tYXhfaGVpZ2h0ID0gTWF0aC5tYXgobWF4X2hlaWdodCwgMjEwKTtcbiAgICAgICAgdGhpcy5zY3JvbGxfY29udGVudF9uZC5zZXRDb250ZW50U2l6ZSg3MjAsIHRoaXMubWF4X2hlaWdodCk7XG5cbiAgICAgICAgaWYgKHN1bSA+PSBjb2wpIHtcbiAgICAgICAgICAgIHN1bSA9IGNvbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG90YWxfd2lkdGggPSBzdW0gKiAxMTkgKyAoc3VtIC0gMSkgKiB0aGlzLnNwYWNlO1xuICAgICAgICB0aGlzLnN0YXJ0X3ggPSAoNzIwIC0gdG90YWxfd2lkdGgpICogMC41O1xuICAgICAgICBpZiAodGhpcy5yb3cgPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydF95ID0gdGhpcy5tYXhfaGVpZ2h0ICogMC41O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGFydF95ID0gdGhpcy5tYXhfaGVpZ2h0IC0gdGhpcy5zcGFjZSAtIDExOSAqIDAuNTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMucmV3YXJkX2xpc3QpIHtcbiAgICAgICAgICAgIHZhciB2ID0gdGhpcy5yZXdhcmRfbGlzdFtpXTtcbiAgICAgICAgICAgIGlmICh2LmJpZCAhPSBudWxsICYmIHYubnVtICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IEl0ZW1zUG9vbC5nZXRJbnN0YW5jZSgpLmdldEl0ZW0oXCJiYWNrcGFja19pdGVtXCIpO1xuICAgICAgICAgICAgICAgIGl0ZW0uaW5pdENvbmZpZyhmYWxzZSwgMSwgZmFsc2UsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0RGF0YSh7IGJpZDogdi5iaWQsIG51bTogdi5udW0gfSk7XG4gICAgICAgICAgICAgICAgdmFyIF94ID0gdGhpcy5zdGFydF94ICsgMTE5ICogMC41ICsgKGkgJSBjb2wpICogKDExOSArIHRoaXMuc3BhY2UpO1xuICAgICAgICAgICAgICAgIHZhciBfeSA9IHRoaXMuc3RhcnRfeSAtIE1hdGguZmxvb3IoaSAvIGNvbCkgKiAoMTE5ICsgdGhpcy5zcGFjZSk7XG4gICAgICAgICAgICAgICAgY2MubG9nKF94LCBfeSlcbiAgICAgICAgICAgICAgICBpdGVtLnNldFBvc2l0aW9uKF94LCBfeSk7XG4gICAgICAgICAgICAgICAgaXRlbS5zaG93KCk7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRQYXJlbnQodGhpcy5zY3JvbGxfY29udGVudF9uZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RbaV0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5JdGVtQWNpdG9uKCk7XG4gICAgfSxcblxuICAgIEl0ZW1BY2l0b246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgVXRpbHMuZGVsYXlSdW4odGhpcy5zb3VyY2VfY29udGFpbmVyLCAwLjUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGltZXIoKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICB1cGRhdGVUaW1lcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdGltZSA9IDU7XG4gICAgICAgIHZhciBjYWxsX2JhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aW1lID0gdGltZSAtIDFcbiAgICAgICAgICAgIHZhciBuZXdfdGltZSA9IE1hdGguY2VpbCh0aW1lKTtcbiAgICAgICAgICAgIHZhciBzdHIgPSBuZXdfdGltZSArIFV0aWxzLlRJMThOKFwi56eS5ZCO5YWz6ZetXCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZV9sYikge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZV9sYi5zdHJpbmcgPSBzdHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV3X3RpbWUgPD0gMCkge1xuICAgICAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbChcInJlc3VsdF90aW1lclwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3BlbkZpbmlzaFZpZXcoZmFsc2UsIHRoaXMuZmlnaHRfdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKVxuICAgICAgICBnY29yZS5UaW1lci5zZXQoY2FsbF9iYWNrLCAxMDAwLCAtMSwgXCJyZXN1bHRfdGltZXJcIik7XG4gICAgfSxcblxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucm9vdF93bmQuc3RvcEFsbEFjdGlvbnMoKTtcbiAgICAgICAgdGhpcy5zb3VyY2VfY29udGFpbmVyLnN0b3BBbGxBY3Rpb25zKCk7XG4gICAgICAgIGdjb3JlLlRpbWVyLmRlbChcInJlc3VsdF90aW1lclwiKTtcbiAgICAgICAgcmVxdWlyZShcImhlcm9fY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpLm9wZW5FcXVpcFRpcHMoZmFsc2UpXG4gICAgICAgIHJlcXVpcmUoXCJ0aXBzX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKS5jbG9zZUFsbFRpcHMoKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUVmZmVjdChmYWxzZSlcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZ2V0QmF0dGxlU2NlbmUoKSAmJiB0aGlzLmN0cmwuZ2V0SXNTYW1lQmF0dGxlVHlwZSh0aGlzLmZpZ2h0X3R5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnJlc3VsdCh0aGlzLmRhdGEsIG51bGwpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlnaHRfdHlwZSA9PSBCYXR0bGVDb25zdC5GaWdodF9UeXBlLkRhcm1hKSB7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEJhdHRsZUV2ZW50Lk1PVkVfRFJBTUFfRVZFTlQsIHRoaXMuZmlnaHRfdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXRlbV9saXN0KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuaXRlbV9saXN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHYgPSB0aGlzLml0ZW1fbGlzdFtpXTtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICB2LmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICAgICAgICAgIHYgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0cmwub3BlbkZpbmlzaFZpZXcoZmFsc2UsIHRoaXMuZmlnaHRfdHlwZSlcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShCYXR0bGVFdmVudC5DTE9TRV9SRVNVTFRfVklFVywgdGhpcy5maWdodF90eXBlKTtcbiAgICB9LFxufSkiXX0=
|