(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/heroexpedit/heroexpedit_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, 'f7c5aZEqeBGzoV1Dxl18Q+q', 'heroexpedit_controller'); // Scripts/mod/heroexpedit/heroexpedit_controller.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里填写详细说明,主要填写该模块的功能简要 //
Create: 2019-03-11 14:13:49 // -------------------------------------------------------------------- var LoginEvent = require("login_event"); var HeroController = require("hero_controller"); var EsecsiceConst = require("esecsice_const"); var HeroExpeditEvent = require("heroexpedit_event"); var MainuiController = require("mainui_controller"); var HeroexpeditController = cc.Class({ "extends": BaseController, ctor: function ctor() {}, // 初始化配置数据 initConfig: function initConfig() { var HeroexpeditModel = require("heroexpedit_model"); this.model = new HeroexpeditModel(); this.model.initConfig(); }, // 返回当前的model getModel: function getModel() { return this.model; }, // 注册监听事件 registerEvents: function registerEvents() { if (this.role_event == null) { this.role_event = gcore.GlobalEvent.bind(EventId.EVT_ROLE_CREATE_SUCCESS, function () { gcore.GlobalEvent.unbind(this.role_event); this.role_event = null; // this.sender24410(); // this.sender24405(); // this.sender24400(); }.bind(this)); } if (this.re_link_game_event == null) { this.re_link_game_event = gcore.GlobalEvent.bind(EventId.EVT_RE_LINK_GAME, function () { this.openHeroExpeditView(false); this.openHeroExpeditLevelView(false); this.openEmpolyPanelView(false); this.openBrowsePanelView(false); // this.sender24405(); // this.sender24410(); // this.sender24400(); }.bind(this)); } }, // 注册协议接受事件 registerProtocals: function registerProtocals() { this.RegisterProtocal(24400, this.handle24400); this.RegisterProtocal(24401, this.handle24401); this.RegisterProtocal(24402, this.handle24402); this.RegisterProtocal(24403, this.hander24403); this.RegisterProtocal(24404, this.hander24404); this.RegisterProtocal(24405, this.hander24405); this.RegisterProtocal(24406, this.hander24406); this.RegisterProtocal(24407, this.hander24407); this.RegisterProtocal(24408, this.hander24408); this.RegisterProtocal(24409, this.hander24409); this.RegisterProtocal(24410, this.hander24410); }, // 请求远征数据 sender24400: function sender24400() { this.SendProtocal(24400, {}); }, handle24400: function handle24400(data) { this.model.setExpeditData(data); this.grard_id = data.guard_id; gcore.GlobalEvent.fire(HeroExpeditEvent.HeroExpeditViewEvent, data); gcore.GlobalEvent.fire(HeroExpeditEvent.Red_Point_Event); }, // 获取关卡 getGrardID: function getGrardID() { return this.grard_id || 1; }, // 获取关卡守将信息 sender24401: function sender24401(id) { var proto = {}; proto.id = id; this.SendProtocal(24401, proto); }, handle24401: function handle24401(data) { if (!data) return; var box_pos = this.model.getExpeditBoxData(); var status = false; for (var i in box_pos) { if (box_pos[i] == data.id) { status = true; break; } } if (status == true) { this.openBrowsePanelView(true, data); } else { if (data.id <= this.grard_id) { this.openHeroExpeditLevelView(true, data); gcore.GlobalEvent.fire(HeroExpeditEvent.levelMessageEvent, data); } else { message(Utils.TI18N("先通关前置关卡")); } } }, // 领取关卡宝箱 sender24402: function sender24402(id) { var proto = {}; proto.id = id; this.SendProtocal(24402, proto); }, handle24402: function handle24402(data) { message(data.msg); if (data.code == 1) { var expedit_data = this.model.getExpeditData(); expedit_data.reward.push({ reward_id: data.id }); gcore.GlobalEvent.fire(HeroExpeditEvent.Get_Box_Event, data.id); } }, // 挑战 sender24403: function sender24403(formation_type, pos_info, hallows_id) { var proto = {}; proto.formation_type = formation_type; proto.pos_info = pos_info; proto.hallows_id = hallows_id; this.SendProtocal(24403, proto); }, hander24403: function hander24403(data) { message(data.msg); if (data.code == 1) { HeroController.getInstance().openFormGoFightPanel(false); } }, // 伙伴信息 sender24404: function sender24404() { this.SendProtocal(24404, {}); }, hander24404: function hander24404(data) { this.model.setPartnerMessage(data.list); gcore.GlobalEvent.fire(HeroExpeditEvent.EmployEvent); }, // 已派出伙伴信息 sender24405: function sender24405() { this.SendProtocal(24405, {}); }, hander24405: function hander24405(data) { this.model.setHeroSendRedPoint(data.list.length); gcore.GlobalEvent.fire(HeroExpeditEvent.EmploySendEvent, data); }, // 雇佣伙伴 sender24406: function sender24406() { this.SendProtocal(24406, {}); }, hander24406: function hander24406(data) { this.model.setEmployPartner(data.list); }, // 派出伙伴 sender24407: function sender24407(id) { var proto = {}; proto.id = id; this.SendProtocal(24407, proto); }, hander24407: function hander24407(data) { message(data.msg); if (data.code == 1) { gcore.GlobalEvent.fire(HeroExpeditEvent.EmploySendEvent_Success, data.id); } }, // 英雄出战 sender24409: function sender24409() { this.SendProtocal(24409, {}); }, hander24409: function hander24409(data) { this.model.setHeroBloodById(data); }, // 远征红点,仅限过关 sender24410: function sender24410() { this.SendProtocal(24410, {}); }, hander24410: function hander24410(data) { this.model.setLevelRedPoint(data.is_show); }, // 雇佣伙伴 sender24408: function sender24408(rid, srv_id, id) { var proto = {}; proto.rid = rid; proto.srv_id = srv_id; proto.id = id; this.SendProtocal(24408, proto); }, hander24408: function hander24408(data) { message(data.msg); }, // 打开远征界面 openHeroExpeditView: function openHeroExpeditView(bool) { if (bool == true) { var open_data = Config.dailyplay_data.data_exerciseactivity[EsecsiceConst.execsice_index.heroexpedit]; if (open_data == null) { message(Utils.TI18N("远征数据异常")); return; } var bool = MainuiController.getInstance().checkIsOpenByActivate(open_data.activate); if (bool == false) { message(open_data.lock_desc); return; } if (!this.heroExpeditView) { this.heroExpeditView = Utils.createClass("heroexpedit_window", this); } if (this.heroExpeditView && this.heroExpeditView.isOpen() == false) { this.heroExpeditView.open(); } } else { if (this.heroExpeditView) { this.heroExpeditView.close(); this.heroExpeditView = null; } } }, // 打开远征关卡信息界面 openHeroExpeditLevelView: function openHeroExpeditLevelView(bool, data) { if (bool == true) { if (!this.heroExpeditLevelView) { this.heroExpeditLevelView = Utils.createClass("heroexpedit_level_window", this); } if (this.heroExpeditLevelView && this.heroExpeditLevelView.isOpen() == false) { this.heroExpeditLevelView.open(data); } } else { if (this.heroExpeditLevelView) { this.heroExpeditLevelView.close(); this.heroExpeditLevelView = null; } } }, // 打开远征雇佣界面 openEmpolyPanelView: function openEmpolyPanelView(bool) { if (bool == true) { if (!this.empolyPanelView) { this.empolyPanelView = Utils.createClass("empoly_window", this); } if (this.empolyPanelView && this.empolyPanelView.isOpen() == false) { this.empolyPanelView.open(); } } else { if (this.empolyPanelView) { this.empolyPanelView.close(); this.empolyPanelView = null; } } }, // 打开查看宝箱奖励 openBrowsePanelView: function openBrowsePanelView(bool, data) { if (bool == true && data) { if (!this.browsePanelView) { this.browsePanelView = Utils.createClass("browse_window", this); } if (this.browsePanelView && this.browsePanelView.isOpen() == false) { this.browsePanelView.open(data); } } else { if (this.browsePanelView) { this.browsePanelView.close(); this.browsePanelView = null; } } }, __delete: function __delete() {} }); module.exports = HeroexpeditController; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxoZXJvZXhwZWRpdFxcaGVyb2V4cGVkaXRfY29udHJvbGxlci5qcyJdLCJuYW1lcyI6WyJMb2dpbkV2ZW50IiwicmVxdWlyZSIsIkhlcm9Db250cm9sbGVyIiwiRXNlY3NpY2VDb25zdCIsIkhlcm9FeHBlZGl0RXZlbnQiLCJNYWludWlDb250cm9sbGVyIiwiSGVyb2V4cGVkaXRDb250cm9sbGVyIiwiY2MiLCJDbGFzcyIsIkJhc2VDb250cm9sbGVyIiwiY3RvciIsImluaXRDb25maWciLCJIZXJvZXhwZWRpdE1vZGVsIiwibW9kZWwiLCJnZXRNb2RlbCIsInJlZ2lzdGVyRXZlbnRzIiwicm9sZV9ldmVudCIsImdjb3JlIiwiR2xvYmFsRXZlbnQiLCJiaW5kIiwiRXZlbnRJZCIsIkVWVF9ST0xFX0NSRUFURV9TVUNDRVNTIiwidW5iaW5kIiwicmVfbGlua19nYW1lX2V2ZW50IiwiRVZUX1JFX0xJTktfR0FNRSIsIm9wZW5IZXJvRXhwZWRpdFZpZXciLCJvcGVuSGVyb0V4cGVkaXRMZXZlbFZpZXciLCJvcGVuRW1wb2x5UGFuZWxWaWV3Iiwib3BlbkJyb3dzZVBhbmVsVmlldyIsInJlZ2lzdGVyUHJvdG9jYWxzIiwiUmVnaXN0ZXJQcm90b2NhbCIsImhhbmRsZTI0NDAwIiwiaGFuZGxlMjQ0MDEiLCJoYW5kbGUyNDQwMiIsImhhbmRlcjI0NDAzIiwiaGFuZGVyMjQ0MDQiLCJoYW5kZXIyNDQwNSIsImhhbmRlcjI0NDA2IiwiaGFuZGVyMjQ0MDciLCJoYW5kZXIyNDQwOCIsImhhbmRlcjI0NDA5IiwiaGFuZGVyMjQ0MTAiLCJzZW5kZXIyNDQwMCIsIlNlbmRQcm90b2NhbCIsImRhdGEiLCJzZXRFeHBlZGl0RGF0YSIsImdyYXJkX2lkIiwiZ3VhcmRfaWQiLCJmaXJlIiwiSGVyb0V4cGVkaXRWaWV3RXZlbnQiLCJSZWRfUG9pbnRfRXZlbnQiLCJnZXRHcmFyZElEIiwic2VuZGVyMjQ0MDEiLCJpZCIsInByb3RvIiwiYm94X3BvcyIsImdldEV4cGVkaXRCb3hEYXRhIiwic3RhdHVzIiwiaSIsImxldmVsTWVzc2FnZUV2ZW50IiwibWVzc2FnZSIsIlV0aWxzIiwiVEkxOE4iLCJzZW5kZXIyNDQwMiIsIm1zZyIsImNvZGUiLCJleHBlZGl0X2RhdGEiLCJnZXRFeHBlZGl0RGF0YSIsInJld2FyZCIsInB1c2giLCJyZXdhcmRfaWQiLCJHZXRfQm94X0V2ZW50Iiwic2VuZGVyMjQ0MDMiLCJmb3JtYXRpb25fdHlwZSIsInBvc19pbmZvIiwiaGFsbG93c19pZCIsImdldEluc3RhbmNlIiwib3BlbkZvcm1Hb0ZpZ2h0UGFuZWwiLCJzZW5kZXIyNDQwNCIsInNldFBhcnRuZXJNZXNzYWdlIiwibGlzdCIsIkVtcGxveUV2ZW50Iiwic2VuZGVyMjQ0MDUiLCJzZXRIZXJvU2VuZFJlZFBvaW50IiwibGVuZ3RoIiwiRW1wbG95U2VuZEV2ZW50Iiwic2VuZGVyMjQ0MDYiLCJzZXRFbXBsb3lQYXJ0bmVyIiwic2VuZGVyMjQ0MDciLCJFbXBsb3lTZW5kRXZlbnRfU3VjY2VzcyIsInNlbmRlcjI0NDA5Iiwic2V0SGVyb0Jsb29kQnlJZCIsInNlbmRlcjI0NDEwIiwic2V0TGV2ZWxSZWRQb2ludCIsImlzX3Nob3ciLCJzZW5kZXIyNDQwOCIsInJpZCIsInNydl9pZCIsImJvb2wiLCJvcGVuX2RhdGEiLCJDb25maWciLCJkYWlseXBsYXlfZGF0YSIsImRhdGFfZXhlcmNpc2VhY3Rpdml0eSIsImV4ZWNzaWNlX2luZGV4IiwiaGVyb2V4cGVkaXQiLCJjaGVja0lzT3BlbkJ5QWN0aXZhdGUiLCJhY3RpdmF0ZSIsImxvY2tfZGVzYyIsImhlcm9FeHBlZGl0VmlldyIsImNyZWF0ZUNsYXNzIiwiaXNPcGVuIiwib3BlbiIsImNsb3NlIiwiaGVyb0V4cGVkaXRMZXZlbFZpZXciLCJlbXBvbHlQYW5lbFZpZXciLCJicm93c2VQYW5lbFZpZXciLCJfX2RlbGV0ZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FB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QUEwQm5FLElBQTFCO0FBQ0g7QUFFSixLQVJELE1BUUs7QUFDRCxVQUFHLEtBQUt1RSxlQUFSLEVBQXdCO0FBQ3BCLGFBQUtBLGVBQUwsQ0FBcUJILEtBQXJCO0FBQ0EsYUFBS0csZUFBTCxHQUF1QixJQUF2QjtBQUNIO0FBQ0o7QUFDSixHQXBTZ0M7QUFzU2pDQyxFQUFBQSxRQUFRLEVBQUMsb0JBQVUsQ0FFbEI7QUF4U2dDLENBQVQsQ0FBNUI7QUEyU0FDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQmhILHFCQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDov5nph4zloavlhpnor6bnu4bor7TmmI4s5Li76KaB5aGr5YaZ6K+l5qih5Z2X55qE5Yqf6IO9566A6KaBXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wMy0xMSAxNDoxMzo0OVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBMb2dpbkV2ZW50ID0gcmVxdWlyZShcImxvZ2luX2V2ZW50XCIpO1xudmFyIEhlcm9Db250cm9sbGVyID0gcmVxdWlyZShcImhlcm9fY29udHJvbGxlclwiKTtcbnZhciBFc2Vjc2ljZUNvbnN0ID0gcmVxdWlyZShcImVzZWNzaWNlX2NvbnN0XCIpO1xudmFyIEhlcm9FeHBlZGl0RXZlbnQgPSByZXF1aXJlKFwiaGVyb2V4cGVkaXRfZXZlbnRcIik7XG52YXIgTWFpbnVpQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcblxudmFyIEhlcm9leHBlZGl0Q29udHJvbGxlciA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ29udHJvbGxlcixcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMlumFjee9ruaVsOaNrlxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIEhlcm9leHBlZGl0TW9kZWwgPSByZXF1aXJlKFwiaGVyb2V4cGVkaXRfbW9kZWxcIik7XG5cbiAgICAgICAgdGhpcy5tb2RlbCA9IG5ldyBIZXJvZXhwZWRpdE1vZGVsKCk7XG4gICAgICAgIHRoaXMubW9kZWwuaW5pdENvbmZpZygpO1xuICAgIH0sXG5cbiAgICAvLyDov5Tlm57lvZPliY3nmoRtb2RlbFxuICAgIGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhoznm5HlkKzkuovku7ZcbiAgICByZWdpc3RlckV2ZW50czogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZih0aGlzLnJvbGVfZXZlbnQgPT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLnJvbGVfZXZlbnQgPSBnY29yZS5HbG9iYWxFdmVudC5iaW5kKEV2ZW50SWQuRVZUX1JPTEVfQ1JFQVRFX1NVQ0NFU1MsKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQudW5iaW5kKHRoaXMucm9sZV9ldmVudClcbiAgICAgICAgICAgICAgICB0aGlzLnJvbGVfZXZlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuc2VuZGVyMjQ0MTAoKTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNlbmRlcjI0NDA1KCk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5zZW5kZXIyNDQwMCgpO1xuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYodGhpcy5yZV9saW5rX2dhbWVfZXZlbnQgPT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLnJlX2xpbmtfZ2FtZV9ldmVudCA9IGdjb3JlLkdsb2JhbEV2ZW50LmJpbmQoRXZlbnRJZC5FVlRfUkVfTElOS19HQU1FLChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbkhlcm9FeHBlZGl0VmlldyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSGVyb0V4cGVkaXRMZXZlbFZpZXcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbkVtcG9seVBhbmVsVmlldyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuQnJvd3NlUGFuZWxWaWV3KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNlbmRlcjI0NDA1KCk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5zZW5kZXIyNDQxMCgpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuc2VuZGVyMjQ0MDAoKTtcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcykpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5Y2P6K6u5o6l5Y+X5LqL5Lu2XG4gICAgcmVnaXN0ZXJQcm90b2NhbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDAwLCB0aGlzLmhhbmRsZTI0NDAwKTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDAxLCB0aGlzLmhhbmRsZTI0NDAxKTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDAyLCB0aGlzLmhhbmRsZTI0NDAyKTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDAzLCB0aGlzLmhhbmRlcjI0NDAzKTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDA0LCB0aGlzLmhhbmRlcjI0NDA0KTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDA1LCB0aGlzLmhhbmRlcjI0NDA1KTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDA2LCB0aGlzLmhhbmRlcjI0NDA2KTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDA3LCB0aGlzLmhhbmRlcjI0NDA3KTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDA4LCB0aGlzLmhhbmRlcjI0NDA4KTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDA5LCB0aGlzLmhhbmRlcjI0NDA5KTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDEwLCB0aGlzLmhhbmRlcjI0NDEwKTtcbiAgICB9LFxuXG4gICAgLy8g6K+35rGC6L+c5b6B5pWw5o2uXG4gICAgc2VuZGVyMjQ0MDA6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQ0MDAsIHt9KTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMjQ0MDA6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIHRoaXMubW9kZWwuc2V0RXhwZWRpdERhdGEoZGF0YSk7XG4gICAgICAgIHRoaXMuZ3JhcmRfaWQgPSBkYXRhLmd1YXJkX2lkO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEhlcm9FeHBlZGl0RXZlbnQuSGVyb0V4cGVkaXRWaWV3RXZlbnQsIGRhdGEpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEhlcm9FeHBlZGl0RXZlbnQuUmVkX1BvaW50X0V2ZW50KTtcbiAgICB9LFxuXG4gICAgLy8g6I635Y+W5YWz5Y2hXG4gICAgZ2V0R3JhcmRJRDpmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5ncmFyZF9pZCB8fCAxO1xuICAgIH0sXG5cbiAgICAvLyDojrflj5blhbPljaHlrojlsIbkv6Hmga9cbiAgICBzZW5kZXIyNDQwMTpmdW5jdGlvbihpZCl7XG4gICAgICAgIHZhciBwcm90byA9IHt9O1xuICAgICAgICBwcm90by5pZCA9IGlkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDQwMSwgcHJvdG8pO1xuICAgIH0sXG5cbiAgICBoYW5kbGUyNDQwMTpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgaWYoIWRhdGEpcmV0dXJuO1xuICAgICAgICB2YXIgYm94X3BvcyA9IHRoaXMubW9kZWwuZ2V0RXhwZWRpdEJveERhdGEoKTtcbiAgICAgICAgdmFyIHN0YXR1cyA9IGZhbHNlO1xuICAgICAgICBmb3IodmFyIGkgaW4gYm94X3Bvcyl7XG4gICAgICAgICAgICBpZihib3hfcG9zW2ldID09IGRhdGEuaWQpe1xuICAgICAgICAgICAgICAgIHN0YXR1cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoc3RhdHVzID09IHRydWUpe1xuICAgICAgICAgICAgdGhpcy5vcGVuQnJvd3NlUGFuZWxWaWV3KHRydWUsIGRhdGEpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKGRhdGEuaWQgPD0gdGhpcy5ncmFyZF9pZCl7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSGVyb0V4cGVkaXRMZXZlbFZpZXcodHJ1ZSxkYXRhKTtcbiAgICAgICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEhlcm9FeHBlZGl0RXZlbnQubGV2ZWxNZXNzYWdlRXZlbnQsIGRhdGEpO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuWFiOmAmuWFs+WJjee9ruWFs+WNoVwiKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpooblj5blhbPljaHlrp3nrrFcbiAgICBzZW5kZXIyNDQwMjpmdW5jdGlvbihpZCl7XG4gICAgICAgIHZhciBwcm90byA9IHt9XG4gICAgICAgIHByb3RvLmlkID0gaWRcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQ0MDIscHJvdG8pO1xuICAgIH0sXG5cbiAgICBoYW5kbGUyNDQwMjpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmKGRhdGEuY29kZSA9PSAxKXtcbiAgICAgICAgICAgIHZhciBleHBlZGl0X2RhdGEgPSB0aGlzLm1vZGVsLmdldEV4cGVkaXREYXRhKCk7XG4gICAgICAgICAgICBleHBlZGl0X2RhdGEucmV3YXJkLnB1c2goe3Jld2FyZF9pZDogZGF0YS5pZH0pO1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShIZXJvRXhwZWRpdEV2ZW50LkdldF9Cb3hfRXZlbnQsIGRhdGEuaWQpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOaMkeaImFxuICAgIHNlbmRlcjI0NDAzOmZ1bmN0aW9uKGZvcm1hdGlvbl90eXBlLHBvc19pbmZvLGhhbGxvd3NfaWQpe1xuICAgICAgICB2YXIgcHJvdG8gPSB7fVxuICAgICAgICBwcm90by5mb3JtYXRpb25fdHlwZSA9IGZvcm1hdGlvbl90eXBlO1xuICAgICAgICBwcm90by5wb3NfaW5mbyA9IHBvc19pbmZvO1xuICAgICAgICBwcm90by5oYWxsb3dzX2lkID0gaGFsbG93c19pZDtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQ0MDMsIHByb3RvKTtcbiAgICB9LFxuXG4gICAgaGFuZGVyMjQ0MDM6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpXG4gICAgICAgIGlmKGRhdGEuY29kZSA9PSAxKXtcbiAgICAgICAgICAgIEhlcm9Db250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkZvcm1Hb0ZpZ2h0UGFuZWwoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOS8meS8tOS/oeaBr1xuICAgIHNlbmRlcjI0NDA0OmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI0NDA0LHt9KTtcbiAgICB9LFxuXG4gICAgaGFuZGVyMjQ0MDQ6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIHRoaXMubW9kZWwuc2V0UGFydG5lck1lc3NhZ2UoZGF0YS5saXN0KTtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShIZXJvRXhwZWRpdEV2ZW50LkVtcGxveUV2ZW50KTtcbiAgICB9LFxuXG4gICAgLy8g5bey5rS+5Ye65LyZ5Ly05L+h5oGvXG4gICAgc2VuZGVyMjQ0MDU6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQ0MDUse30pO1xuICAgIH0sXG5cbiAgICBoYW5kZXIyNDQwNTpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRIZXJvU2VuZFJlZFBvaW50KGRhdGEubGlzdC5sZW5ndGgpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEhlcm9FeHBlZGl0RXZlbnQuRW1wbG95U2VuZEV2ZW50LGRhdGEpO1xuICAgIH0sXG5cbiAgICAvLyDpm4fkvaPkvJnkvLRcbiAgICBzZW5kZXIyNDQwNjpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDQwNix7fSk7ICAgIFxuICAgIH0sXG5cbiAgICBoYW5kZXIyNDQwNjpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRFbXBsb3lQYXJ0bmVyKGRhdGEubGlzdCk7XG4gICAgfSxcblxuICAgIC8vIOa0vuWHuuS8meS8tFxuICAgIHNlbmRlcjI0NDA3OmZ1bmN0aW9uKGlkKXtcbiAgICAgICAgdmFyIHByb3RvID0ge307XG4gICAgICAgIHByb3RvLmlkID0gaWQgXG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI0NDA3LHByb3RvKVxuICAgIH0sXG5cbiAgICBoYW5kZXIyNDQwNzpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmKGRhdGEuY29kZSA9PSAxKXtcbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoSGVyb0V4cGVkaXRFdmVudC5FbXBsb3lTZW5kRXZlbnRfU3VjY2VzcyxkYXRhLmlkKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDoi7Hpm4Tlh7rmiJhcbiAgICBzZW5kZXIyNDQwOTpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDQwOSx7fSk7XG4gICAgfSxcblxuICAgIGhhbmRlcjI0NDA5OmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICB0aGlzLm1vZGVsLnNldEhlcm9CbG9vZEJ5SWQoZGF0YSk7XG4gICAgfSxcblxuICAgIC8vIOi/nOW+gee6oueCuSzku4XpmZDov4flhbNcbiAgICBzZW5kZXIyNDQxMDpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDQxMCx7fSk7XG4gICAgfSxcblxuICAgIGhhbmRlcjI0NDEwOmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICB0aGlzLm1vZGVsLnNldExldmVsUmVkUG9pbnQoZGF0YS5pc19zaG93KVxuICAgIH0sXG5cbiAgICAvLyDpm4fkvaPkvJnkvLRcbiAgICBzZW5kZXIyNDQwODpmdW5jdGlvbihyaWQsc3J2X2lkLGlkKXtcbiAgICAgICAgdmFyIHByb3RvID0ge307XG4gICAgICAgIHByb3RvLnJpZCA9IHJpZDtcbiAgICAgICAgcHJvdG8uc3J2X2lkID0gc3J2X2lkO1xuICAgICAgICBwcm90by5pZCA9IGlkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDQwOCxwcm90byk7XG4gICAgfSxcblxuICAgIGhhbmRlcjI0NDA4OmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKVxuICAgIH0sXG5cbiAgICAvLyDmiZPlvIDov5zlvoHnlYzpnaJcbiAgICBvcGVuSGVyb0V4cGVkaXRWaWV3OmZ1bmN0aW9uKGJvb2wpe1xuICAgICAgICBpZihib29sID09IHRydWUpe1xuICAgICAgICAgICAgdmFyIG9wZW5fZGF0YSA9IENvbmZpZy5kYWlseXBsYXlfZGF0YS5kYXRhX2V4ZXJjaXNlYWN0aXZpdHlbRXNlY3NpY2VDb25zdC5leGVjc2ljZV9pbmRleC5oZXJvZXhwZWRpdF07XG4gICAgICAgICAgICBpZihvcGVuX2RhdGEgPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIui/nOW+geaVsOaNruW8guW4uFwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGJvb2wgPSBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hlY2tJc09wZW5CeUFjdGl2YXRlKG9wZW5fZGF0YS5hY3RpdmF0ZSk7XG4gICAgICAgICAgICBpZihib29sID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICBtZXNzYWdlKG9wZW5fZGF0YS5sb2NrX2Rlc2MpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoIXRoaXMuaGVyb0V4cGVkaXRWaWV3KXtcbiAgICAgICAgICAgICAgICB0aGlzLmhlcm9FeHBlZGl0VmlldyA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwiaGVyb2V4cGVkaXRfd2luZG93XCIsdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLmhlcm9FeHBlZGl0VmlldyAmJiB0aGlzLmhlcm9FeHBlZGl0Vmlldy5pc09wZW4oKSA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5oZXJvRXhwZWRpdFZpZXcub3BlbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcblxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKHRoaXMuaGVyb0V4cGVkaXRWaWV3KXtcbiAgICAgICAgICAgICAgICB0aGlzLmhlcm9FeHBlZGl0Vmlldy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVyb0V4cGVkaXRWaWV3ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmiZPlvIDov5zlvoHlhbPljaHkv6Hmga/nlYzpnaJcbiAgICBvcGVuSGVyb0V4cGVkaXRMZXZlbFZpZXc6ZnVuY3Rpb24oYm9vbCxkYXRhKXtcbiAgICAgICAgaWYoYm9vbCA9PSB0cnVlKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLmhlcm9FeHBlZGl0TGV2ZWxWaWV3KXtcbiAgICAgICAgICAgICAgICB0aGlzLmhlcm9FeHBlZGl0TGV2ZWxWaWV3ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJoZXJvZXhwZWRpdF9sZXZlbF93aW5kb3dcIix0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMuaGVyb0V4cGVkaXRMZXZlbFZpZXcgJiYgdGhpcy5oZXJvRXhwZWRpdExldmVsVmlldy5pc09wZW4oKSA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5oZXJvRXhwZWRpdExldmVsVmlldy5vcGVuKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYodGhpcy5oZXJvRXhwZWRpdExldmVsVmlldyl7XG4gICAgICAgICAgICAgICAgdGhpcy5oZXJvRXhwZWRpdExldmVsVmlldy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVyb0V4cGVkaXRMZXZlbFZpZXcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOaJk+W8gOi/nOW+gembh+S9o+eVjOmdolxuICAgIG9wZW5FbXBvbHlQYW5lbFZpZXc6ZnVuY3Rpb24oYm9vbCl7XG4gICAgICAgIGlmKGJvb2wgPT0gdHJ1ZSkgICB7XG4gICAgICAgICAgICBpZighdGhpcy5lbXBvbHlQYW5lbFZpZXcpe1xuICAgICAgICAgICAgICAgIHRoaXMuZW1wb2x5UGFuZWxWaWV3ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJlbXBvbHlfd2luZG93XCIsdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLmVtcG9seVBhbmVsVmlldyAmJiB0aGlzLmVtcG9seVBhbmVsVmlldy5pc09wZW4oKSA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5lbXBvbHlQYW5lbFZpZXcub3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYodGhpcy5lbXBvbHlQYW5lbFZpZXcpe1xuICAgICAgICAgICAgICAgIHRoaXMuZW1wb2x5UGFuZWxWaWV3LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbXBvbHlQYW5lbFZpZXcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOaJk+W8gOafpeeci+WuneeuseWlluWKsVxuICAgIG9wZW5Ccm93c2VQYW5lbFZpZXc6ZnVuY3Rpb24oYm9vbCwgZGF0YSl7XG4gICAgICAgIGlmKGJvb2wgPT0gdHJ1ZSAmJiBkYXRhKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLmJyb3dzZVBhbmVsVmlldyl7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VQYW5lbFZpZXcgPSBVdGlscy5jcmVhdGVDbGFzcyhcImJyb3dzZV93aW5kb3dcIix0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMuYnJvd3NlUGFuZWxWaWV3ICYmIHRoaXMuYnJvd3NlUGFuZWxWaWV3LmlzT3BlbigpID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZVBhbmVsVmlldy5vcGVuKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYodGhpcy5icm93c2VQYW5lbFZpZXcpe1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlUGFuZWxWaWV3LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VQYW5lbFZpZXcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9fZGVsZXRlOmZ1bmN0aW9uKCl7XG4gICAgICAgXG4gICAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhlcm9leHBlZGl0Q29udHJvbGxlcjsiXX0=