(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/startower/startower_controller.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, '2c1e7feMMhAvpohtfoZsaA6', 'startower_controller'); // Scripts/mod/startower/startower_controller.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 星命塔 //
Create: 2019-02-27 11:03:16 // -------------------------------------------------------------------- var MainuiController = require("mainui_controller"); var BattleEvent = require("battle_event"); var BattleController = require("battle_controller"); var BattleConst = require("battle_const"); var StartowerEvent = require("startower_event"); var LevupgradeController = require("levupgrade_controller"); var StartowerController = cc.Class({ "extends": BaseController, ctor: function ctor() {}, // 初始化配置数据 initConfig: function initConfig() { var StartowerModel = require("startower_model"); this.model = new StartowerModel(); this.model.initConfig(); }, // 返回当前的model getModel: function getModel() { return this.model; }, // 注册监听事件 registerEvents: function registerEvents() {}, // 注册协议接受事件 registerProtocals: function registerProtocals() { this.RegisterProtocal(11320, this.handle11320); //星命塔信息 this.RegisterProtocal(11321, this.handle11321); //购买挑战次数 this.RegisterProtocal(11322, this.handle11322); //挑战星命塔 this.RegisterProtocal(11323, this.handle11323); //推送星命塔结算 this.RegisterProtocal(11324, this.handle11324); //扫荡星命塔 this.RegisterProtocal(11325, this.handle11325); //请求星命塔通关录像 this.RegisterProtocal(11326, this.handle11326); //推送星命塔有解锁 this.RegisterProtocal(11333, this.handle11333); //分享通关录像 this.RegisterProtocal(11327, this.handle11327); // 星命塔排行榜 this.RegisterProtocal(11328, this.handle11328); //通关奖励 this.RegisterProtocal(11329, this.handle11329); }, checkIsOpen: function checkIsOpen(show_desc) { var open_config = Config.star_tower_data.data_tower_const.open_floor; if (open_config == null) return false; var is_open = MainuiController.getInstance().checkIsOpenByActivate(open_config.val); if (is_open == false && show_desc == true) { message(open_config.desc); } return is_open; }, //打开主界面 openMainView: function openMainView(bool) { if (!bool) { if (this.main_view) { this.main_view.close(); this.main_view = null; } } else { if (!this.checkIsOpen(true)) return; if (!this.main_view) { this.main_view = Utils.createClass("star_tower_window_window", this); } if (this.main_view && this.main_view.isOpen() == false) { this.main_view.open(); } } }, //打开挑战主界面 openStarTowerMainView: function openStarTowerMainView(bool, data) { if (bool) { if (!this.star_tower_window) { this.star_tower_window = Utils.createClass("star_tower_main_window", this); } if (this.star_tower_window && this.star_tower_window.isOpen() == false) { this.star_tower_window.open(data); } } else { if (this.star_tower_window) { this.star_tower_window.close(); this.star_tower_window = null; } } }, //打开奖励总览 openAwardWindow: function openAwardWindow(bool) { if (bool) { if (!this.award_window) { this.award_window = Utils.createClass("star_tower_award_window", this); } if (this.award_window && this.award_window.isOpen() == false) { this.award_window.open(); } } else { if (this.award_window) { this.award_window.close(); this.award_window = null; } } }, //打开录像界面 openVideoWindow: function openVideoWindow(bool, data, tower) { if (bool) { if (!this.video_window) { this.video_window = Utils.createClass("star_tower_video_window", this); } if (this.video_window && this.video_window.isOpen() == false) { this.video_window.open([data, tower]); } } else { if (this.video_window) { this.video_window.close(); this.video_window = null; } } }, //星命塔结算 getResultWindow: function getResultWindow() { return this.result_window; }, //打开结算界面 openResultWindow: function openResultWindow(bool, data) { if (bool == true) { // -- 不能直接出剧情或者引导 LevupgradeController.getInstance().waitForOpenLevUpgrade(true); if (!this.result_window) { this.result_window = Utils.createClass("star_tower_result_window", this); } if (this.result_window && this.result_window.isOpen() == false) { this.result_window.open(data, BattleConst.Fight_Type.StarTower); } } else { if (this.result_window) { this.result_window.close(); this.result_window = null; } if (this.is_show_lock == true && this.show_data) {// --this.openGetWindow(true,this.show_data.tower) } else { gcore.GlobalEvent.fire(BattleEvent.CLOSE_RESULT_VIEW); } this.is_show_lock = false; this.show_data = null; } }, //打开结算界面 openGetWindow: function openGetWindow(bool, data) { if (bool == true) { if (!this.get_window) { this.get_window = Utils.createClass("star_tower_get_window", this); } if (this.get_window && this.get_window.isOpen() == false) { this.get_window.open(data); } } else { if (this.get_window) { this.get_window.close(); this.get_window = null; } } }, //请求星命塔数据 sender11320: function sender11320() { this.SendProtocal(11320, {}); }, handle11320: function handle11320(data) { this.model.setStarTowerData(data); }, //购买挑战次数 sender11321: function sender11321() { var protocal = {}; this.SendProtocal(11321, protocal); }, handle11321: function handle11321(data) { message(data.msg); this.model.updateLessCount(data); }, //挑战星命塔 sender11322: function sender11322(tower) { var protocal = {}; protocal.tower = tower; this.SendProtocal(11322, protocal); }, handle11322: function handle11322(data) { message(data.msg); this.openStarTowerMainView(false); }, //推送星命塔结算 handle11323: function handle11323(data) { if (data.result == 1) { BattleController.getInstance().openFinishView(true, BattleConst.Fight_Type.StarTower, data); this.model.updateMaxTower(data); this.model.updateLessCount(data); } else { BattleController.getInstance().openFailFinishView(true, BattleConst.Fight_Type.StarTower, data.result, data); } }, //扫荡星命塔 sender11324: function sender11324(tower) { var protocal = {}; protocal.tower = tower; this.SendProtocal(11324, protocal); }, handle11324: function handle11324(data) { message(data.msg); this.model.updateLessCount(data); }, //请求星命塔通关录像 sender11325: function sender11325(tower) { var protocal = {}; protocal.tower = tower; this.SendProtocal(11325, protocal); }, handle11325: function handle11325(data) { message(data.msg); gcore.GlobalEvent.fire(StartowerEvent.Video_Data_Event, data); }, handle11326: function handle11326(data) { this.show_data = data; this.is_show_lock = true; // --self:openGetWindow(true,data.tower) }, //分享通关录像 sender11333: function sender11333(replay_id, channel, tower) { var protocal = {}; protocal.replay_id = replay_id; protocal.channel = channel; protocal.tower = tower; this.SendProtocal(11333, protocal); }, handle11333: function handle11333(data) { message(data.msg); if (data.result == 1) { this.openVideoWindow(false); } }, requestStarTowerRank: function requestStarTowerRank() { this.SendProtocal(11327, {}); }, handle11327: function handle11327(data) { gcore.GlobalEvent.fire(StartowerEvent.Update_Top3_rank, data.rank_lists); }, //领取通关奖励 sender11328: function sender11328(id) { var proto = {}; proto.id = id; this.SendProtocal(11328, proto); }, handle11328: function handle11328(data) { message(data.msg); if (data.result == 1) { gcore.GlobalEvent.fire(StartowerEvent.Update_Reward_Event); } }, handle11329: function handle11329(data) { this.model.setRewardData(data.award_list); gcore.GlobalEvent.fire(StartowerEvent.Update_First_Reward_Msg); }, __delete: function __delete() { if (this.model != null) { this.model.DeleteMe(); this.model = null; } }, getStarTowerRoot: function getStarTowerRoot() { if (this.main_view) return this.main_view.root_wnd; }, getStarTowerChallengeRoot: function getStarTowerChallengeRoot() { if (this.star_tower_window) return this.star_tower_window.root_wnd; } }); module.exports = StartowerController; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxzdGFydG93ZXJcXHN0YXJ0b3dlcl9jb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbIk1haW51aUNvbnRyb2xsZXIiLCJyZXF1aXJlIiwiQmF0dGxlRXZlbnQiLCJCYXR0bGVDb250cm9sbGVyIiwiQmF0dGxlQ29uc3QiLCJTdGFydG93ZXJFdmVudCIsIkxldnVwZ3JhZGVDb250cm9sbGVyIiwiU3RhcnRvd2VyQ29udHJvbGxlciIsImNjIiwiQ2xhc3MiLCJCYXNlQ29udHJvbGxlciIsImN0b3IiLCJpbml0Q29uZmlnIiwiU3RhcnRvd2VyTW9kZWwiLCJtb2RlbCIsImdldE1vZGVsIiwicmVnaXN0ZXJFdmVudHMiLCJyZWdpc3RlclByb3RvY2FscyIsIlJlZ2lzdGVyUHJvdG9jYWwiLCJoYW5kbGUxMTMyMCIsImhhbmRsZTExMzIxIiwiaGFuZGxlMTEzMjIiLCJoYW5kbGUxMTMyMyIsImhhbmRsZTExMzI0IiwiaGFuZGxlMTEzMjUiLCJoYW5kbGUxMTMyNiIsImhhbmRsZTExMzMzIiwiaGFuZGxlMTEzMjciLCJoYW5kbGUxMTMyOCIsImhhbmRsZTExMzI5IiwiY2hlY2tJc09wZW4iLCJzaG93X2Rlc2MiLCJvcGVuX2NvbmZpZyIsIkNvbmZpZyIsInN0YXJfdG93ZXJfZGF0YSIsImRhdGFfdG93ZXJfY29uc3QiLCJvcGVuX2Zsb29yIiwiaXNfb3BlbiIsImdldEluc3RhbmNlIiwiY2hlY2tJc09wZW5CeUFjdGl2YXRlIiwidmFsIiwibWVzc2FnZSIsImRlc2MiLCJvcGVuTWFpblZpZXciLCJib29sIiwibWFpbl92aWV3IiwiY2xvc2UiLCJVdGlscyIsImNyZWF0ZUNsYXNzIiwiaXNPcGVuIiwib3BlbiIsIm9wZW5TdGFyVG93ZXJNYWluVmlldyIsImRhdGEiLCJzdGFyX3Rvd2VyX3dpbmRvdyIsIm9wZW5Bd2FyZFdpbmRvdyIsImF3YXJkX3dpbmRvdyIsIm9wZW5WaWRlb1dpbmRvdyIsInRvd2VyIiwidmlkZW9fd2luZG93IiwiZ2V0UmVzdWx0V2luZG93IiwicmVzdWx0X3dpbmRvdyIsIm9wZW5SZXN1bHRXaW5kb3ciLCJ3YWl0Rm9yT3BlbkxldlVwZ3JhZGUiLCJGaWdodF9UeXBlIiwiU3RhclRvd2VyIiwiaXNfc2hvd19sb2NrIiwic2hvd19kYXRhIiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJDTE9TRV9SRVNVTFRfVklFVyIsIm9wZW5HZXRXaW5kb3ciLCJnZXRfd2luZG93Iiwic2VuZGVyMTEzMjAiLCJTZW5kUHJvdG9jYWwiLCJzZXRTdGFyVG93ZXJEYXRhIiwic2VuZGVyMTEzMjEiLCJwcm90b2NhbCIsIm1zZyIsInVwZGF0ZUxlc3NDb3VudCIsInNlbmRlcjExMzIyIiwicmVzdWx0Iiwib3BlbkZpbmlzaFZpZXciLCJ1cGRhdGVNYXhUb3dlciIsIm9wZW5GYWlsRmluaXNoVmlldyIsInNlbmRlcjExMzI0Iiwic2VuZGVyMTEzMjUiLCJWaWRlb19EYXRhX0V2ZW50Iiwic2VuZGVyMTEzMzMiLCJyZXBsYXlfaWQiLCJjaGFubmVsIiwicmVxdWVzdFN0YXJUb3dlclJhbmsiLCJVcGRhdGVfVG9wM19yYW5rIiwicmFua19saXN0cyIsInNlbmRlcjExMzI4IiwiaWQiLCJwcm90byIsIlVwZGF0ZV9SZXdhcmRfRXZlbnQiLCJzZXRSZXdhcmREYXRhIiwiYXdhcmRfbGlzdCIsIlVwZGF0ZV9GaXJzdF9SZXdhcmRfTXNnIiwiX19kZWxldGUiLCJEZWxldGVNZSIsImdldFN0YXJUb3dlclJvb3QiLCJyb290X3duZCIsImdldFN0YXJUb3dlckNoYWxsZW5nZVJvb3QiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLGdCQUFnQixHQUFHQyxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUMsV0FBVyxHQUFHRCxPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQSxJQUFJRSxnQkFBZ0IsR0FBR0Ys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O0FBQ3pCLFFBQUksS0FBSzFELFNBQVQsRUFDSSxPQUFPLEtBQUtBLFNBQUwsQ0FBZTJELFFBQXRCO0FBQ1AsR0E1UzhCO0FBOFMvQkMsRUFBQUEseUJBQXlCLEVBQUUscUNBQVc7QUFDbEMsUUFBSSxLQUFLcEQsaUJBQVQsRUFDSSxPQUFPLEtBQUtBLGlCQUFMLENBQXVCbUQsUUFBOUI7QUFDUDtBQWpUOEIsQ0FBVCxDQUExQjtBQXNUQUUsTUFBTSxDQUFDQyxPQUFQLEdBQWlCcEcsbUJBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAgIOaYn+WRveWhlFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDItMjcgMTE6MDM6MTZcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgTWFpbnVpQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcbnZhciBCYXR0bGVFdmVudCA9IHJlcXVpcmUoXCJiYXR0bGVfZXZlbnRcIik7XG52YXIgQmF0dGxlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJiYXR0bGVfY29udHJvbGxlclwiKTtcbnZhciBCYXR0bGVDb25zdCA9IHJlcXVpcmUoXCJiYXR0bGVfY29uc3RcIik7XG52YXIgU3RhcnRvd2VyRXZlbnQgPSByZXF1aXJlKFwic3RhcnRvd2VyX2V2ZW50XCIpO1xudmFyIExldnVwZ3JhZGVDb250cm9sbGVyID0gcmVxdWlyZShcImxldnVwZ3JhZGVfY29udHJvbGxlclwiKVxuXG5cbnZhciBTdGFydG93ZXJDb250cm9sbGVyID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VDb250cm9sbGVyLFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW6YWN572u5pWw5o2uXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgU3RhcnRvd2VyTW9kZWwgPSByZXF1aXJlKFwic3RhcnRvd2VyX21vZGVsXCIpO1xuXG4gICAgICAgIHRoaXMubW9kZWwgPSBuZXcgU3RhcnRvd2VyTW9kZWwoKTtcbiAgICAgICAgdGhpcy5tb2RlbC5pbml0Q29uZmlnKCk7XG4gICAgfSxcblxuICAgIC8vIOi/lOWbnuW9k+WJjeeahG1vZGVsXG4gICAgZ2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOebkeWQrOS6i+S7tlxuICAgIHJlZ2lzdGVyRXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOWNj+iuruaOpeWPl+S6i+S7tlxuICAgIHJlZ2lzdGVyUHJvdG9jYWxzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMTMyMCwgdGhpcy5oYW5kbGUxMTMyMCkgICAgIC8v5pif5ZG95aGU5L+h5oGvXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMTMyMSwgdGhpcy5oYW5kbGUxMTMyMSkgICAgIC8v6LSt5Lmw5oyR5oiY5qyh5pWwXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMTMyMiwgdGhpcy5oYW5kbGUxMTMyMikgICAgIC8v5oyR5oiY5pif5ZG95aGUXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMTMyMywgdGhpcy5oYW5kbGUxMTMyMykgICAgIC8v5o6o6YCB5pif5ZG95aGU57uT566XXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMTMyNCwgdGhpcy5oYW5kbGUxMTMyNCkgICAgIC8v5omr6I2h5pif5ZG95aGUXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMTMyNSwgdGhpcy5oYW5kbGUxMTMyNSkgICAgIC8v6K+35rGC5pif5ZG95aGU6YCa5YWz5b2V5YOPXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMTMyNiwgdGhpcy5oYW5kbGUxMTMyNikgICAgIC8v5o6o6YCB5pif5ZG95aGU5pyJ6Kej6ZSBXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMTMzMywgdGhpcy5oYW5kbGUxMTMzMykgICAgIC8v5YiG5Lqr6YCa5YWz5b2V5YOPXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMTMyNywgdGhpcy5oYW5kbGUxMTMyNykgICAgIC8vIOaYn+WRveWhlOaOkuihjOamnFxuXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMTMyOCwgdGhpcy5oYW5kbGUxMTMyOCkgICAgIC8v6YCa5YWz5aWW5YqxXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMTMyOSwgdGhpcy5oYW5kbGUxMTMyOSlcbiAgICB9LFxuXG4gICAgY2hlY2tJc09wZW46ZnVuY3Rpb24oc2hvd19kZXNjKXtcbiAgICAgICAgdmFyIG9wZW5fY29uZmlnID0gQ29uZmlnLnN0YXJfdG93ZXJfZGF0YS5kYXRhX3Rvd2VyX2NvbnN0Lm9wZW5fZmxvb3I7XG4gICAgICAgIGlmKG9wZW5fY29uZmlnID09IG51bGwpcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgaXNfb3BlbiA9IE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGVja0lzT3BlbkJ5QWN0aXZhdGUob3Blbl9jb25maWcudmFsKTtcbiAgICAgICAgaWYoaXNfb3BlbiA9PSBmYWxzZSAmJiBzaG93X2Rlc2MgPT0gdHJ1ZSl7XG4gICAgICAgICAgICBtZXNzYWdlKG9wZW5fY29uZmlnLmRlc2MpICAgIFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc19vcGVuO1xuICAgIH0sXG4gICAgXG4gICAgLy/miZPlvIDkuLvnlYzpnaJcbiAgICBvcGVuTWFpblZpZXc6ZnVuY3Rpb24oYm9vbCl7XG4gICAgICAgIGlmKCFib29sKXtcbiAgICAgICAgICAgIGlmKHRoaXMubWFpbl92aWV3KXtcbiAgICAgICAgICAgICAgICB0aGlzLm1haW5fdmlldy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMubWFpbl92aWV3ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZighdGhpcy5jaGVja0lzT3Blbih0cnVlKSlyZXR1cm47XG4gICAgICAgICAgICBpZighdGhpcy5tYWluX3ZpZXcpe1xuICAgICAgICAgICAgICAgIHRoaXMubWFpbl92aWV3ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJzdGFyX3Rvd2VyX3dpbmRvd193aW5kb3dcIix0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMubWFpbl92aWV3ICYmIHRoaXMubWFpbl92aWV3LmlzT3BlbigpID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICB0aGlzLm1haW5fdmlldy5vcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+aJk+W8gOaMkeaImOS4u+eVjOmdolxuICAgIG9wZW5TdGFyVG93ZXJNYWluVmlldzpmdW5jdGlvbihib29sLGRhdGEpe1xuICAgICAgICBpZihib29sKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLnN0YXJfdG93ZXJfd2luZG93KXtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJfdG93ZXJfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJzdGFyX3Rvd2VyX21haW5fd2luZG93XCIsdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLnN0YXJfdG93ZXJfd2luZG93ICYmIHRoaXMuc3Rhcl90b3dlcl93aW5kb3cuaXNPcGVuKCkgPT0gZmFsc2Upe1xuICAgICAgICAgICAgICAgIHRoaXMuc3Rhcl90b3dlcl93aW5kb3cub3BlbihkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKHRoaXMuc3Rhcl90b3dlcl93aW5kb3cpe1xuICAgICAgICAgICAgICAgIHRoaXMuc3Rhcl90b3dlcl93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJfdG93ZXJfd2luZG93ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+aJk+W8gOWlluWKseaAu+iniFxuICAgIG9wZW5Bd2FyZFdpbmRvdzpmdW5jdGlvbihib29sKXtcbiAgICAgICAgaWYoYm9vbCl7XG4gICAgICAgICAgICBpZighdGhpcy5hd2FyZF93aW5kb3cpe1xuICAgICAgICAgICAgICAgIHRoaXMuYXdhcmRfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJzdGFyX3Rvd2VyX2F3YXJkX3dpbmRvd1wiLHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5hd2FyZF93aW5kb3cgJiYgdGhpcy5hd2FyZF93aW5kb3cuaXNPcGVuKCkgPT0gZmFsc2Upe1xuICAgICAgICAgICAgICAgIHRoaXMuYXdhcmRfd2luZG93Lm9wZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKHRoaXMuYXdhcmRfd2luZG93KXtcbiAgICAgICAgICAgICAgICB0aGlzLmF3YXJkX3dpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXdhcmRfd2luZG93ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+aJk+W8gOW9leWDj+eVjOmdolxuICAgIG9wZW5WaWRlb1dpbmRvdzpmdW5jdGlvbihib29sLGRhdGEsdG93ZXIpe1xuICAgICAgICBpZihib29sKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLnZpZGVvX3dpbmRvdyl7XG4gICAgICAgICAgICAgICAgdGhpcy52aWRlb193aW5kb3cgPSBVdGlscy5jcmVhdGVDbGFzcyhcInN0YXJfdG93ZXJfdmlkZW9fd2luZG93XCIsdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLnZpZGVvX3dpbmRvdyAmJiB0aGlzLnZpZGVvX3dpbmRvdy5pc09wZW4oKSA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgdGhpcy52aWRlb193aW5kb3cub3BlbihbZGF0YSx0b3dlcl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYodGhpcy52aWRlb193aW5kb3cpe1xuICAgICAgICAgICAgICAgIHRoaXMudmlkZW9fd2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy52aWRlb193aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5pif5ZG95aGU57uT566XXG4gICAgZ2V0UmVzdWx0V2luZG93OmZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdF93aW5kb3c7XG4gICAgfSxcblxuICAgIFxuXG4gICAgLy/miZPlvIDnu5PnrpfnlYzpnaJcbiAgICBvcGVuUmVzdWx0V2luZG93OmZ1bmN0aW9uKGJvb2wsZGF0YSl7XG4gICAgICAgIGlmKGJvb2wgPT0gdHJ1ZSl7XG4gICAgICAgICAgICAvLyAtLSDkuI3og73nm7TmjqXlh7rliafmg4XmiJbogIXlvJXlr7xcbiAgICAgICAgICAgIExldnVwZ3JhZGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkud2FpdEZvck9wZW5MZXZVcGdyYWRlKHRydWUpIFxuICAgICAgICAgICAgaWYoIXRoaXMucmVzdWx0X3dpbmRvdyl7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJzdGFyX3Rvd2VyX3Jlc3VsdF93aW5kb3dcIix0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMucmVzdWx0X3dpbmRvdyAmJiB0aGlzLnJlc3VsdF93aW5kb3cuaXNPcGVuKCkgPT0gZmFsc2Upe1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0X3dpbmRvdy5vcGVuKGRhdGEsIEJhdHRsZUNvbnN0LkZpZ2h0X1R5cGUuU3RhclRvd2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKHRoaXMucmVzdWx0X3dpbmRvdyl7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRfd2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRfd2luZG93ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMuaXNfc2hvd19sb2NrID09IHRydWUgJiYgdGhpcy5zaG93X2RhdGEpe1xuICAgICAgICAgICAgICAgIC8vICAtLXRoaXMub3BlbkdldFdpbmRvdyh0cnVlLHRoaXMuc2hvd19kYXRhLnRvd2VyKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShCYXR0bGVFdmVudC5DTE9TRV9SRVNVTFRfVklFVyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzX3Nob3dfbG9jayA9ZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dfZGF0YSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/miZPlvIDnu5PnrpfnlYzpnaJcbiAgICBvcGVuR2V0V2luZG93OmZ1bmN0aW9uKGJvb2wsZGF0YSl7XG4gICAgICAgIGlmKGJvb2wgPT0gdHJ1ZSl7XG4gICAgICAgICAgICBpZighdGhpcy5nZXRfd2luZG93KXtcbiAgICAgICAgICAgICAgICB0aGlzLmdldF93aW5kb3cgPSBVdGlscy5jcmVhdGVDbGFzcyhcInN0YXJfdG93ZXJfZ2V0X3dpbmRvd1wiLHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5nZXRfd2luZG93ICYmIHRoaXMuZ2V0X3dpbmRvdy5pc09wZW4oKSA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRfd2luZG93Lm9wZW4oZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZih0aGlzLmdldF93aW5kb3cpe1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0X3dpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0X3dpbmRvdyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG5cbiAgICAvL+ivt+axguaYn+WRveWhlOaVsOaNrlxuICAgIHNlbmRlcjExMzIwOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDExMzIwLHt9KVxuICAgIH0sXG5cbiAgICBoYW5kbGUxMTMyMDpmdW5jdGlvbiggZGF0YSApe1xuICAgICAgICB0aGlzLm1vZGVsLnNldFN0YXJUb3dlckRhdGEoZGF0YSk7XG4gICAgfSxcblxuICAgIC8v6LSt5Lmw5oyR5oiY5qyh5pWwXG4gICAgc2VuZGVyMTEzMjE6ZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHByb3RvY2FsID17fTtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTEzMjEscHJvdG9jYWwpO1xuICAgIH0sXG4gICAgICAgIFxuICAgIGhhbmRsZTExMzIxOmZ1bmN0aW9uKCBkYXRhICl7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgICAgICB0aGlzLm1vZGVsLnVwZGF0ZUxlc3NDb3VudChkYXRhKTtcbiAgICB9LFxuXG4gICAgLy/mjJHmiJjmmJ/lkb3loZRcbiAgICBzZW5kZXIxMTMyMjpmdW5jdGlvbih0b3dlcil7XG4gICAgICAgIHZhciBwcm90b2NhbCA9e307XG4gICAgICAgIHByb3RvY2FsLnRvd2VyID0gdG93ZXI7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDExMzIyLHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMTEzMjI6ZnVuY3Rpb24oIGRhdGEgKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIHRoaXMub3BlblN0YXJUb3dlck1haW5WaWV3KGZhbHNlKTtcbiAgICB9LFxuXG4gICAgLy/mjqjpgIHmmJ/lkb3loZTnu5PnrpdcbiAgICBoYW5kbGUxMTMyMzpmdW5jdGlvbiggZGF0YSApe1xuICAgICAgICBpZihkYXRhLnJlc3VsdCA9PSAxKXtcbiAgICAgICAgICAgIEJhdHRsZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuRmluaXNoVmlldyh0cnVlLCBCYXR0bGVDb25zdC5GaWdodF9UeXBlLlN0YXJUb3dlciwgZGF0YSk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnVwZGF0ZU1heFRvd2VyKGRhdGEpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVMZXNzQ291bnQoZGF0YSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgQmF0dGxlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5GYWlsRmluaXNoVmlldyh0cnVlLCBCYXR0bGVDb25zdC5GaWdodF9UeXBlLlN0YXJUb3dlciwgZGF0YS5yZXN1bHQsIGRhdGEpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/miavojaHmmJ/lkb3loZRcbiAgICBzZW5kZXIxMTMyNDpmdW5jdGlvbih0b3dlcil7XG4gICAgICAgIHZhciBwcm90b2NhbCA9e307XG4gICAgICAgIHByb3RvY2FsLnRvd2VyID0gdG93ZXI7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDExMzI0LHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMTEzMjQ6ZnVuY3Rpb24oIGRhdGEgKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIHRoaXMubW9kZWwudXBkYXRlTGVzc0NvdW50KGRhdGEpO1xuICAgIH0sXG5cbiAgICAvL+ivt+axguaYn+WRveWhlOmAmuWFs+W9leWDj1xuICAgIHNlbmRlcjExMzI1OmZ1bmN0aW9uKHRvd2VyKXtcbiAgICAgICAgdmFyIHByb3RvY2FsID17fTtcbiAgICAgICAgcHJvdG9jYWwudG93ZXIgPSB0b3dlcjtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTEzMjUscHJvdG9jYWwpO1xuICAgIH0sXG4gICAgXG4gICAgaGFuZGxlMTEzMjU6ZnVuY3Rpb24oIGRhdGEgKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoU3RhcnRvd2VyRXZlbnQuVmlkZW9fRGF0YV9FdmVudCxkYXRhKVxuICAgIH0sXG5cbiAgICBoYW5kbGUxMTMyNjpmdW5jdGlvbiggZGF0YSApe1xuICAgICAgICB0aGlzLnNob3dfZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuaXNfc2hvd19sb2NrID0gdHJ1ZTtcbiAgICAgICAgLy8gLS1zZWxmOm9wZW5HZXRXaW5kb3codHJ1ZSxkYXRhLnRvd2VyKVxuICAgIH0sXG5cbiAgICAvL+WIhuS6q+mAmuWFs+W9leWDj1xuICAgIHNlbmRlcjExMzMzOmZ1bmN0aW9uKHJlcGxheV9pZCxjaGFubmVsLHRvd2VyKXtcbiAgICAgICAgdmFyIHByb3RvY2FsID17fTtcbiAgICAgICAgcHJvdG9jYWwucmVwbGF5X2lkID0gcmVwbGF5X2lkO1xuICAgICAgICBwcm90b2NhbC5jaGFubmVsID0gY2hhbm5lbDtcbiAgICAgICAgcHJvdG9jYWwudG93ZXIgPSB0b3dlcjtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTEzMzMscHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICBoYW5kbGUxMTMzMzpmdW5jdGlvbiggZGF0YSApe1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYoZGF0YS5yZXN1bHQgPT0gMSl7XG4gICAgICAgICAgICB0aGlzLm9wZW5WaWRlb1dpbmRvdyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVxdWVzdFN0YXJUb3dlclJhbms6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTEzMjcse30pO1xuICAgIH0sXG5cbiAgICBoYW5kbGUxMTMyNzpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShTdGFydG93ZXJFdmVudC5VcGRhdGVfVG9wM19yYW5rLCBkYXRhLnJhbmtfbGlzdHMpO1xuICAgIH0sXG5cbiAgICAvL+mihuWPlumAmuWFs+WlluWKsVxuICAgIHNlbmRlcjExMzI4OmZ1bmN0aW9uKGlkKXtcbiAgICAgICAgdmFyIHByb3RvID0ge307XG4gICAgICAgIHByb3RvLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDExMzI4LCBwcm90byk7XG4gICAgfSxcblxuICAgIGhhbmRsZTExMzI4OmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYoZGF0YS5yZXN1bHQgPT0gMSl7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFN0YXJ0b3dlckV2ZW50LlVwZGF0ZV9SZXdhcmRfRXZlbnQpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGhhbmRsZTExMzI5OmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICB0aGlzLm1vZGVsLnNldFJld2FyZERhdGEoZGF0YS5hd2FyZF9saXN0KTtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShTdGFydG93ZXJFdmVudC5VcGRhdGVfRmlyc3RfUmV3YXJkX01zZyk7XG4gICAgfSxcblxuICAgIF9fZGVsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuRGVsZXRlTWUoKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldFN0YXJUb3dlclJvb3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5tYWluX3ZpZXcpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYWluX3ZpZXcucm9vdF93bmQ7XG4gICAgfSxcblxuICAgIGdldFN0YXJUb3dlckNoYWxsZW5nZVJvb3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFyX3Rvd2VyX3dpbmRvdylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXJfdG93ZXJfd2luZG93LnJvb3Rfd25kO1xuICAgIH0sXG5cblxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhcnRvd2VyQ29udHJvbGxlcjsiXX0=