(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/redbag/redbag_model.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, '44ea0Mgh+hGP6SZQFLU5xvc', 'redbag_model'); // Scripts/mod/redbag/redbag_model.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里填写详细说明,主要填写该模块的功能简要 //
Create: 2019-02-13 11:19:47 // -------------------------------------------------------------------- var RedbagEvent = require("redbag_event"); var GuildController = require("guild_controller"); var MainuiConst = require("mainui_const"); var MainuiController = require("mainui_controller"); var BackpackController = require("backpack_controller"); var GuildConst = require("guild_const"); var GuildEvent = require("guild_event"); var RedbagModel = cc.Class({ "extends": BaseClass, ctor: function ctor() { this.ctrl = require("redbag_controller").getInstance(); }, properties: {}, initConfig: function initConfig() { this.redbag_list = {}; this.redbag_num = 0; this.redbag_send_num = 0; this.redbag_rec_num = 0; this.is_get_redbag = 0; this.red_bag_item_num = []; this.all_red_show = false; }, resetData: function resetData() { this.initConfig(); }, updateData: function updateData(data) { if (!data) return; if (data.type && data.type == 0) { this.redbag_list = {}; } var list = data.list || {}; for (var i in list) { var v = list[i]; v.order = 0 - v.time; if (v.flag == 0 && v.num < v.max_num && v.time - gcore.SmartSocket.getTime() >= 0) { v.order = gcore.SmartSocket.getTime() - v.time; } this.redbag_list[v.id] = v; } gcore.GlobalEvent.fire(RedbagEvent.Get_Data_Event, data); if (this.is_get_redbag != 0) { this.checkRedBagRedPoint(); } else { GuildController.getInstance().SendProtocal(13523, {}); } this.is_get_redbag = 0; }, updateRedBagNum: function updateRedBagNum(send_num, rec_num) { this.redbag_send_num = send_num || 0; this.redbag_rec_num = rec_num || 0; this.is_get_redbag = 1; var max_rec_num = gdata("guild_data", "data_const", "red_packet_get").val; if (this.redbag_rec_num >= max_rec_num) { this.is_get_redbag = 2; } this.checkRedBagRedPoint(); }, checkRedBagRedPoint: function checkRedBagRedPoint() { //判断有没有没领取的红包,有就抛事件推送 var vo; this.is_have_red = false; this.all_red_show = false; this.redbag_num = 0; for (var i in this.redbag_list) { this.redbag_num = this.redbag_num + 1; var v = this.redbag_list[i]; //没过期也没被领完的 if (v.num < v.max_num) { if (v.time - gcore.SmartSocket.getTime() >= 0) { if (v.flag == 0) { vo = v; this.is_have_red = true; this.all_red_show = true; break; } } } } if (this.is_get_redbag == 2) { vo = null; this.is_have_red = false; this.all_red_show = false; } this.checkItemNumRedPoint(); if (this.red_bag_item_num && Utils.next(this.red_bag_item_num || {}) != null) { for (var i in this.red_bag_item_num) { var v = this.red_bag_item_num[i]; if (v.status == true) { this.all_red_show = true; break; } } } //抛去主界面播特效 gcore.GlobalEvent.fire(RedbagEvent.Can_Get_Red_Bag, vo); //抛去公会界面红点 gcore.GlobalEvent.fire(GuildEvent.UpdateGuildRedStatus, GuildConst.red_index.red_bag, this.all_red_show); //更新场景红点 var base_data = Config.function_data.data_base; var bool = MainuiController.getInstance().checkIsOpenByActivate(base_data[6].activate); if (bool == true) MainuiController.getInstance().setBtnRedPoint(MainuiConst.btn_index.guild, { bid: GuildConst.red_index.red_bag, status: this.all_red_show }); }, //主要红包道具的数量判断 checkItemNumRedPoint: function checkItemNumRedPoint() { if (Config.guild_data.data_guild_red_bag) { this.red_bag_item_num = []; for (var i in Config.guild_data.data_guild_red_bag) { var v = gdata("guild_data", "data_guild_red_bag", [i]); if (v && v.loss_item && v.loss_item[0]) { var has_num = BackpackController.getInstance().getModel().getBackPackItemNumByBid(v.loss_item[0][0]); var status = false; if (has_num >= v.loss_item[0][1]) { status = true; } this.red_bag_item_num.push({ id: v.id, status: status, bid: v.loss_item[0][0] }); } } } }, getRedBagNum: function getRedBagNum() { return this.redbag_num || 0; }, getIsHaveRedBag: function getIsHaveRedBag() { return this.is_have_red || false; }, getAllRedBagStatus: function getAllRedBagStatus() { return this.all_red_show || false; }, //每次打开获取拥有红包道具的的最少来ID来默认打开那个界面 getHaveItemID: function getHaveItemID() { if (this.red_bag_item_num && Utils.next(this.red_bag_item_num || {} != null)) { var temp_id = 99; for (var i in this.red_bag_item_num) { var v = this.red_bag_item_num[i]; if (v.status == true && v.id <= temp_id) { temp_id = v.id; } } return temp_id; } }, getSendRedBagStatue: function getSendRedBagStatue(id) { var status = false; if (this.red_bag_item_num && Utils.next(this.red_bag_item_num || {}) != null) { for (var i in this.red_bag_item_num) { var v = this.red_bag_item_num[i]; if (id) { if (v.id != id) { if (v.status == true) { status = true; break; } } } else { if (v.status == true) { status = true; break; } } } } return status; }, getRebBagItemNumList: function getRebBagItemNumList() { if (this.red_bag_item_num && Utils.next(this.red_bag_item_num || {}) != null) { return this.red_bag_item_num; } }, getRedBagList: function getRedBagList() { var redbag_list = []; for (var k in this.redbag_list) { var v = this.redbag_list[k]; redbag_list.push(v); } return redbag_list; }, getRedBagListById: function getRedBagListById(id) { return this.redbag_list[id]; } }); 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyZWRiYWdcXHJlZGJhZ19tb2RlbC5qcyJdLCJuYW1lcyI6WyJSZWRiYWdFdmVudCIsInJlcXVpcmUiLCJHdWlsZENvbnRyb2xsZXIiLCJNYWludWlDb25zdCIsIk1haW51aUNvbnRyb2xsZXIiLCJCYWNrcGFja0NvbnRyb2xsZXIiLCJHdWlsZENvbnN0IiwiR3VpbGRFdmVudCIsIlJlZGJhZ01vZGVsIiwiY2MiLCJDbGFzcyIsIkJhc2VDbGFzcyIsImN0b3IiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJwcm9wZXJ0aWVzIiwiaW5pdENvbmZpZyIsInJlZGJhZ19saXN0IiwicmVkYmFnX251bSIsInJlZGJhZ19zZW5kX251bSIsInJlZGJhZ19yZWNfbnVtIiwiaXNfZ2V0X3JlZGJhZyIsInJlZF9iYWdfaXRlbV9udW0iLCJhbGxfcmVkX3Nob3ciLCJyZXNldERhdGEiLCJ1cGRhdGVEYXRhIiwiZGF0YSIsInR5cGUiLCJsaXN0IiwiaSIsInYiLCJvcmRlciIsInRpbWUiLCJmbGFnIiwibnVtIiwibWF4X251bSIsImdjb3JlIiwiU21hcnRTb2NrZXQiLCJnZXRUaW1lIiwiaWQiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJHZXRfRGF0YV9FdmVudCIsImNoZWNrUmVkQmFnUmVkUG9pbnQiLCJTZW5kUHJvdG9jYWwiLCJ1cGRhdGVSZWRCYWdOdW0iLCJzZW5kX251bSIsInJlY19udW0iLCJtYXhfcmVjX251bSIsImdkYXRhIiwidmFsIiwidm8iLCJpc19oYXZlX3JlZCIsImNoZWNrSXRlbU51bVJlZFBvaW50IiwiVXRpbHMiLCJuZXh0Iiwic3RhdHVzIiwiQ2FuX0dldF9SZWRfQmFnIiwiVXBkYXRlR3VpbGRSZWRTdGF0dXMiLCJyZWRfaW5kZXgiLCJyZWRfYmFnIiwiYmFzZV9kYXRhIiwiQ29uZmlnIiwiZnVuY3Rpb25fZGF0YSIsImRhdGFfYmFzZSIsImJvb2wiLCJjaGVja0lzT3BlbkJ5QWN0aXZhdGUiLCJhY3RpdmF0ZSIsInNldEJ0blJlZFBvaW50IiwiYnRuX2luZGV4IiwiZ3VpbGQiLCJiaWQiLCJndWlsZF9kYXRhIiwiZGF0YV9ndWlsZF9yZWRfYmFnIiwibG9zc19pdGVtIiwiaGFzX251bSIsImdldE1vZGVsIiwiZ2V0QmFja1BhY2tJdGVtTnVtQnlCaWQiLCJwdXNoIiwiZ2V0UmVkQmFnTnVtIiwiZ2V0SXNIYXZlUmVkQmFnIiwiZ2V0QWxsUmVkQmFnU3RhdHVzIiwiZ2V0SGF2ZUl0ZW1JRCIsInRlbXBfaWQiLCJnZXRTZW5kUmVkQmFnU3RhdHVlIiwiZ2V0UmViQmFnSXRlbU51bUxpc3QiLCJnZXRSZWRCYWdMaXN0IiwiayIsImdldFJlZEJhZ0xpc3RCeUlkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFdBQVcsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBQ0EsSUFBSUMsZUFBZSxHQUFHRCxPQUFPLENBQUMsa0JBQUQsQ0FBN0I7O0FBQ0EsSUFBSUUsV0FBVyxHQUFHRixPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQSxJQUFJRyxnQkFBZ0IsR0FBR0gsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlJLGtCQUFrQixHQUFHSixPQUFPLENBQUMscUJBQUQsQ0FBaEM7O0FBQ0EsSUFBSUssVUFBVSxHQUFHTCxPQUFPLENBQUMsYUFBRCxDQUF4Qjs7QUFDQSxJQUFJTSxVQUFVLEdBQUdOLE9BQU8sQ0FBQyxhQUFELENBQXhCOztBQUVBLElBQUlPLFdBQVcsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDdkIsYUFBU0MsU0FEYztBQUV2QkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsSUFBTCxHQUFZWixPQUFPLENBQUMsbUJBQUQsQ0FBUCxDQUE2QmEsV0FBN0IsRUFBWjtBQUNILEdBSnNCO0FBTXZCQyxFQUFBQSxVQUFVLEVBQUUsRUFOVztBQVN2QkMsRUFBQUEsVUFBVSxFQUFFLHNCQUFZ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O0FBQzFFLGFBQU8sS0FBS0EsZ0JBQVo7QUFDSDtBQUNKLEdBbkxzQjtBQXFMdkJnRSxFQUFBQSxhQUFhLEVBQUUseUJBQVk7QUFDdkIsUUFBSXJFLFdBQVcsR0FBRyxFQUFsQjs7QUFDQSxTQUFLLElBQUlzRSxDQUFULElBQWMsS0FBS3RFLFdBQW5CLEVBQWdDO0FBQzVCLFVBQUlhLENBQUMsR0FBRyxLQUFLYixXQUFMLENBQWlCc0UsQ0FBakIsQ0FBUjtBQUNBdEUsTUFBQUEsV0FBVyxDQUFDNkQsSUFBWixDQUFpQmhELENBQWpCO0FBQ0g7O0FBQ0QsV0FBT2IsV0FBUDtBQUNILEdBNUxzQjtBQThMdkJ1RSxFQUFBQSxpQkFBaUIsRUFBRSwyQkFBVWpELEVBQVYsRUFBYztBQUM3QixXQUFPLEtBQUt0QixXQUFMLENBQWlCc0IsRUFBakIsQ0FBUDtBQUNIO0FBaE1zQixDQUFULENBQWxCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAgIOi/memHjOWhq+WGmeivpue7huivtOaYjizkuLvopoHloavlhpnor6XmqKHlnZfnmoTlip/og73nroDopoFcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTAyLTEzIDExOjE5OjQ3XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFJlZGJhZ0V2ZW50ID0gcmVxdWlyZShcInJlZGJhZ19ldmVudFwiKTtcbnZhciBHdWlsZENvbnRyb2xsZXIgPSByZXF1aXJlKFwiZ3VpbGRfY29udHJvbGxlclwiKTtcbnZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG52YXIgTWFpbnVpQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcbnZhciBCYWNrcGFja0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiYmFja3BhY2tfY29udHJvbGxlclwiKTtcbnZhciBHdWlsZENvbnN0ID0gcmVxdWlyZShcImd1aWxkX2NvbnN0XCIpO1xudmFyIEd1aWxkRXZlbnQgPSByZXF1aXJlKFwiZ3VpbGRfZXZlbnRcIik7XG5cbnZhciBSZWRiYWdNb2RlbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ2xhc3MsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmN0cmwgPSByZXF1aXJlKFwicmVkYmFnX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKTtcbiAgICB9LFxuXG4gICAgcHJvcGVydGllczoge1xuICAgIH0sXG5cbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVkYmFnX2xpc3QgPSB7fTtcbiAgICAgICAgdGhpcy5yZWRiYWdfbnVtID0gMDtcbiAgICAgICAgdGhpcy5yZWRiYWdfc2VuZF9udW0gPSAwO1xuICAgICAgICB0aGlzLnJlZGJhZ19yZWNfbnVtID0gMDtcbiAgICAgICAgdGhpcy5pc19nZXRfcmVkYmFnID0gMDtcbiAgICAgICAgdGhpcy5yZWRfYmFnX2l0ZW1fbnVtID0gW107XG4gICAgICAgIHRoaXMuYWxsX3JlZF9zaG93ID0gZmFsc2U7XG4gICAgfSxcblxuICAgIHJlc2V0RGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmluaXRDb25maWcoKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0YTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKCFkYXRhKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVkYmFnX2xpc3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGlzdCA9IGRhdGEubGlzdCB8fCB7fTtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBsaXN0KSB7XG4gICAgICAgICAgICB2YXIgdiA9IGxpc3RbaV07XG4gICAgICAgICAgICB2Lm9yZGVyID0gMCAtIHYudGltZTtcbiAgICAgICAgICAgIGlmICh2LmZsYWcgPT0gMCAmJiB2Lm51bSA8IHYubWF4X251bSAmJiB2LnRpbWUgLSBnY29yZS5TbWFydFNvY2tldC5nZXRUaW1lKCkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHYub3JkZXIgPSBnY29yZS5TbWFydFNvY2tldC5nZXRUaW1lKCkgLSB2LnRpbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlZGJhZ19saXN0W3YuaWRdID0gdjtcbiAgICAgICAgfVxuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFJlZGJhZ0V2ZW50LkdldF9EYXRhX0V2ZW50LCBkYXRhKTtcblxuICAgICAgICBpZiAodGhpcy5pc19nZXRfcmVkYmFnICE9IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tSZWRCYWdSZWRQb2ludCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgR3VpbGRDb250cm9sbGVyLmdldEluc3RhbmNlKCkuU2VuZFByb3RvY2FsKDEzNTIzLCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc19nZXRfcmVkYmFnID0gMDtcbiAgICB9LFxuXG4gICAgdXBkYXRlUmVkQmFnTnVtOiBmdW5jdGlvbiAoc2VuZF9udW0sIHJlY19udW0pIHtcbiAgICAgICAgdGhpcy5yZWRiYWdfc2VuZF9udW0gPSBzZW5kX251bSB8fCAwO1xuICAgICAgICB0aGlzLnJlZGJhZ19yZWNfbnVtID0gcmVjX251bSB8fCAwO1xuICAgICAgICB0aGlzLmlzX2dldF9yZWRiYWcgPSAxO1xuICAgICAgICB2YXIgbWF4X3JlY19udW0gPSBnZGF0YShcImd1aWxkX2RhdGFcIiwgXCJkYXRhX2NvbnN0XCIsIFwicmVkX3BhY2tldF9nZXRcIikudmFsO1xuICAgICAgICBpZiAodGhpcy5yZWRiYWdfcmVjX251bSA+PSBtYXhfcmVjX251bSkge1xuICAgICAgICAgICAgdGhpcy5pc19nZXRfcmVkYmFnID0gMjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVkQmFnUmVkUG9pbnQoKTtcbiAgICB9LFxuXG4gICAgY2hlY2tSZWRCYWdSZWRQb2ludDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvL+WIpOaWreacieayoeacieayoemihuWPlueahOe6ouWMhe+8jOacieWwseaKm+S6i+S7tuaOqOmAgVxuICAgICAgICB2YXIgdm87XG4gICAgICAgIHRoaXMuaXNfaGF2ZV9yZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hbGxfcmVkX3Nob3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWRiYWdfbnVtID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLnJlZGJhZ19saXN0KSB7XG4gICAgICAgICAgICB0aGlzLnJlZGJhZ19udW0gPSB0aGlzLnJlZGJhZ19udW0gKyAxO1xuICAgICAgICAgICAgdmFyIHYgPSB0aGlzLnJlZGJhZ19saXN0W2ldO1xuICAgICAgICAgICAgLy/msqHov4fmnJ/kuZ/msqHooqvpooblroznmoRcbiAgICAgICAgICAgIGlmICh2Lm51bSA8IHYubWF4X251bSkge1xuICAgICAgICAgICAgICAgIGlmICh2LnRpbWUgLSBnY29yZS5TbWFydFNvY2tldC5nZXRUaW1lKCkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodi5mbGFnID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNfaGF2ZV9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxfcmVkX3Nob3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc19nZXRfcmVkYmFnID09IDIpIHtcbiAgICAgICAgICAgIHZvID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuaXNfaGF2ZV9yZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYWxsX3JlZF9zaG93ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoZWNrSXRlbU51bVJlZFBvaW50KCk7XG4gICAgICAgIGlmICh0aGlzLnJlZF9iYWdfaXRlbV9udW0gJiYgVXRpbHMubmV4dCh0aGlzLnJlZF9iYWdfaXRlbV9udW0gfHwge30pICE9IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5yZWRfYmFnX2l0ZW1fbnVtKSB7XG4gICAgICAgICAgICAgICAgdmFyIHYgPSB0aGlzLnJlZF9iYWdfaXRlbV9udW1baV07XG4gICAgICAgICAgICAgICAgaWYgKHYuc3RhdHVzID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxfcmVkX3Nob3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8v5oqb5Y675Li755WM6Z2i5pKt54m55pWIXG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoUmVkYmFnRXZlbnQuQ2FuX0dldF9SZWRfQmFnLCB2byk7XG4gICAgICAgIC8v5oqb5Y675YWs5Lya55WM6Z2i57qi54K5XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoR3VpbGRFdmVudC5VcGRhdGVHdWlsZFJlZFN0YXR1cywgR3VpbGRDb25zdC5yZWRfaW5kZXgucmVkX2JhZywgdGhpcy5hbGxfcmVkX3Nob3cpO1xuICAgICAgICAvL+abtOaWsOWcuuaZr+e6oueCuVxuICAgICAgICB2YXIgYmFzZV9kYXRhID0gQ29uZmlnLmZ1bmN0aW9uX2RhdGEuZGF0YV9iYXNlO1xuICAgICAgICB2YXIgYm9vbCA9IE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGVja0lzT3BlbkJ5QWN0aXZhdGUoYmFzZV9kYXRhWzZdLmFjdGl2YXRlKTtcbiAgICAgICAgaWYgKGJvb2wgPT0gdHJ1ZSlcbiAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZXRCdG5SZWRQb2ludChNYWludWlDb25zdC5idG5faW5kZXguZ3VpbGQsIHsgYmlkOiBHdWlsZENvbnN0LnJlZF9pbmRleC5yZWRfYmFnLCBzdGF0dXM6IHRoaXMuYWxsX3JlZF9zaG93IH0pO1xuICAgIH0sXG5cbiAgICAvL+S4u+imgee6ouWMhemBk+WFt+eahOaVsOmHj+WIpOaWrVxuICAgIGNoZWNrSXRlbU51bVJlZFBvaW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChDb25maWcuZ3VpbGRfZGF0YS5kYXRhX2d1aWxkX3JlZF9iYWcpIHtcbiAgICAgICAgICAgIHRoaXMucmVkX2JhZ19pdGVtX251bSA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBDb25maWcuZ3VpbGRfZGF0YS5kYXRhX2d1aWxkX3JlZF9iYWcpIHtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IGdkYXRhKFwiZ3VpbGRfZGF0YVwiLCBcImRhdGFfZ3VpbGRfcmVkX2JhZ1wiLCBbaV0pO1xuICAgICAgICAgICAgICAgIGlmICh2ICYmIHYubG9zc19pdGVtICYmIHYubG9zc19pdGVtWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoYXNfbnVtID0gQmFja3BhY2tDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRCYWNrUGFja0l0ZW1OdW1CeUJpZCh2Lmxvc3NfaXRlbVswXVswXSlcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzX251bSA+PSB2Lmxvc3NfaXRlbVswXVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZF9iYWdfaXRlbV9udW0ucHVzaCh7IGlkOiB2LmlkLCBzdGF0dXM6IHN0YXR1cywgYmlkOiB2Lmxvc3NfaXRlbVswXVswXSB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRSZWRCYWdOdW06IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVkYmFnX251bSB8fCAwO1xuICAgIH0sXG5cbiAgICBnZXRJc0hhdmVSZWRCYWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNfaGF2ZV9yZWQgfHwgZmFsc2U7XG4gICAgfSxcblxuICAgIGdldEFsbFJlZEJhZ1N0YXR1czogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxfcmVkX3Nob3cgfHwgZmFsc2U7XG4gICAgfSxcblxuICAgIC8v5q+P5qyh5omT5byA6I635Y+W5oul5pyJ57qi5YyF6YGT5YW355qE55qE5pyA5bCR5p2lSUTmnaXpu5jorqTmiZPlvIDpgqPkuKrnlYzpnaJcbiAgICBnZXRIYXZlSXRlbUlEOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZF9iYWdfaXRlbV9udW0gJiYgVXRpbHMubmV4dCh0aGlzLnJlZF9iYWdfaXRlbV9udW0gfHwge30gIT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHZhciB0ZW1wX2lkID0gOTk7XG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMucmVkX2JhZ19pdGVtX251bSkge1xuICAgICAgICAgICAgICAgIHZhciB2ID0gdGhpcy5yZWRfYmFnX2l0ZW1fbnVtW2ldO1xuICAgICAgICAgICAgICAgIGlmICh2LnN0YXR1cyA9PSB0cnVlICYmIHYuaWQgPD0gdGVtcF9pZCkge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wX2lkID0gdi5pZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGVtcF9pZFxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldFNlbmRSZWRCYWdTdGF0dWU6IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICB2YXIgc3RhdHVzID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnJlZF9iYWdfaXRlbV9udW0gJiYgVXRpbHMubmV4dCh0aGlzLnJlZF9iYWdfaXRlbV9udW0gfHwge30pICE9IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5yZWRfYmFnX2l0ZW1fbnVtKSB7XG4gICAgICAgICAgICAgICAgdmFyIHYgPSB0aGlzLnJlZF9iYWdfaXRlbV9udW1baV07XG4gICAgICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2LmlkICE9IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodi5zdGF0dXMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2LnN0YXR1cyA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdHVzXG4gICAgfSxcblxuICAgIGdldFJlYkJhZ0l0ZW1OdW1MaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZF9iYWdfaXRlbV9udW0gJiYgVXRpbHMubmV4dCh0aGlzLnJlZF9iYWdfaXRlbV9udW0gfHwge30pICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZF9iYWdfaXRlbV9udW07XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UmVkQmFnTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVkYmFnX2xpc3QgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnJlZGJhZ19saXN0KSB7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMucmVkYmFnX2xpc3Rba107XG4gICAgICAgICAgICByZWRiYWdfbGlzdC5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWRiYWdfbGlzdDtcbiAgICB9LFxuXG4gICAgZ2V0UmVkQmFnTGlzdEJ5SWQ6IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWRiYWdfbGlzdFtpZF07XG4gICAgfVxufSk7Il19