difenduandada
2024-12-31 34abe6963b344c882358274957f4b992456fee40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/recruithero/view/recruit_hero_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, '15c822qJFxNwbARbTTePDh2', 'recruit_hero_window');
// Scripts/mod/recruithero/view/recruit_hero_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     限时招募
// <br/>Create: 2019-07-02 17:07:38
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var ActionController = require("action_controller");
 
var HeroController = require("hero_controller");
 
var JumpController = require("jump_controller");
 
var RecruitHeroEvent = require("recruithero_event");
 
var Recruit_heroWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("recruithero", "recruit_hero_window");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Big; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
 
    this.ctrl = arguments[0];
    this.model = this.ctrl.getModel();
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.player_item = [];
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.background = this.root_wnd.getChildByName("background");
    this.background.scale = FIT_SCALE;
    this.main_container = this.root_wnd.getChildByName("main_container");
    this.load_bg = this.main_container.getChildByName("load_bg").getComponent(cc.Sprite);
    var res = PathTool.getBigBg("action_bigbg_3", null, "action");
    this.loadRes(res, function (resObject) {
      this.load_bg.spriteFrame = resObject;
    }.bind(this));
    var Text_1 = this.main_container.getChildByName("Text_1").getComponent(cc.Label);
    Text_1.string = Utils.TI18N("活动时间:");
    var Text_3 = this.main_container.getChildByName("Text_3").getComponent(cc.Label);
    Text_3.string = Utils.TI18N("完成上方任务即可免费领取5星英雄斯芬克斯");
    this.remain_time = this.main_container.getChildByName("remain_time").getComponent(cc.Label);
    this.remain_time.string = "";
    this.all_get = this.main_container.getChildByName("all_get");
    this.all_get.active = false;
    var all_get_lab = this.all_get.getChildByName("label").getComponent(cc.Label);
    all_get_lab.string = Utils.TI18N("领取");
    this.all_goto = this.main_container.getChildByName("all_goto");
    this.all_goto.active = false;
    var all_goto_lab = this.all_goto.getChildByName("label").getComponent(cc.Label);
    all_goto_lab.string = Utils.TI18N("未完成");
    this.btn_paint = this.main_container.getChildByName("btn_paint");
    var Text_2 = this.btn_paint.getChildByName("Text_2").getComponent(cc.Label);
    Text_2.string = Utils.TI18N("战斗预览");
    this.finish_text = this.main_container.getChildByName("finish_text").getComponent(cc.Label);
    this.finish_text.string = "";
    this.setPlayerItem();
    this.btn_close = this.main_container.getChildByName("btn_close");
  },
  setPlayerItem: function setPlayerItem() {
    var pos_x = 100;
    var pos_y = 114;
    var bid = [29905, 26900, 26903];
 
    for (var i = 0; i < 3; i++) {
      var tab = {};
      var item = this.main_container.getChildByName("item_" + (parseInt(i) + 1));
      tab.btn_goto = item.getChildByName("btn_goto");
      tab.btn_goto.active = false;
      var tab_goto_lab = tab.btn_goto.getChildByName("label").getComponent(cc.Label);
      tab_goto_lab.string = Utils.TI18N("前往完成");
      tab.btn_get = item.getChildByName("btn_get");
      tab.btn_get.active = false;
      tab.btn_get_label = tab.btn_get.getChildByName("label").getComponent(cc.Label);
      tab.btn_get_label.string = Utils.TI18N("前往领取");
      tab.has = item.getChildByName("has");
      tab.has.active = false;
      tab.title_label = item.getChildByName("title").getComponent(cc.Label);
      this.player_item[i] = ItemsPool.getInstance().getItem("backpack_item");
      this.player_item[i].setParent(item);
      this.player_item[i].initConfig(false, 0.8);
      this.player_item[i].setPosition(pos_x - item.width / 2, pos_y - item.height / 2);
      this.player_item[i].setData({
        bid: bid[i],
        num: 50
      });
      this.player_item[i].show();
      this.player_item[i].setDefaultTip();
      this.player_item[i] = tab;
    }
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.addGlobalEvent(RecruitHeroEvent.RecruitHeroBaseInfo, function (data) {
      var ctr = ActionController.getInstance();
      var time = data.end_time - gcore.SmartSocket.getTime();
      ctr.getModel().setCountDownTime(this.remain_time, time);
      this.showBtnStatus(data);
    }.bind(this));
    Utils.onTouchEnd(this.btn_close, function () {
      this.ctrl.openRecruitHeroWindow(false);
    }.bind(this), 2);
    Utils.onTouchEnd(this.background, function () {
      this.ctrl.openRecruitHeroWindow(false);
    }.bind(this), 2);
    Utils.onTouchEnd(this.all_get, function () {
      this.ctrl.sender25101(0);
    }.bind(this), 2);
    Utils.onTouchEnd(this.btn_paint, function () {
      // this.ctrl.openRecruitHeroWindow(false);
      this.ctrl.sender25102(); // HeroController.getInstance().openHeroInfoWindowByBidStar(30508, 10);
    }.bind(this), 1);
 
    for (var i in this.player_item) {
      Utils.onTouchEnd(this.player_item[i].btn_goto, function (i) {
        var status = this.model.getRecruitEndTime();
 
        if (status) {
          if (i != 1) {
            this.ctrl.openRecruitHeroWindow(false);
          }
 
          this.jumpGotoTeskView(i);
        } else {
          message(Utils.TI18N("活动已结束"));
        }
      }.bind(this, i), 1);
      Utils.onTouchEnd(this.player_item[i].btn_get, function (i) {
        this.jumpGetTeskView(i);
      }.bind(this, i), 1);
    }
  },
  // 任务
  showBtnStatus: function showBtnStatus(data) {
    if (!data) return;
    var title = [Utils.TI18N("通关%d/%d关"), Utils.TI18N("次日登录"), Utils.TI18N("激活至尊月卡")];
    var tesk_dun = Config.welfare_data.data_welfare_const.dun_max_id;
    var finish_num = 0;
    var pos = [2, 1, 3];
 
    for (var i = 0; i < 3; i++) {
      var base_data = this.model.getRecruitBaseData(pos[i]);
 
      if (base_data) {
        if (i == 0) {
          this.player_item[i].title_label.string = cc.js.formatStr(title[i], base_data.val, tesk_dun.val);
        } else {
          this.player_item[i].title_label.string = title[i];
        } // 特殊处理
 
 
        if (i == 2 && base_data.status == 1) {
          this.player_item[i].btn_get_label.string = Utils.TI18N("领取");
        }
 
        this.player_item[i].btn_goto.active = base_data.status == 0;
        this.player_item[i].btn_get.active = base_data.status == 1;
        this.player_item[i].has.active = base_data.status == 2;
 
        if (base_data.status == 1 || base_data.status == 2) {
          finish_num = finish_num + 1;
        }
      }
    }
 
    var str = cc.js.formatStr(Utils.TI18N("完成进度: %d/3"), finish_num);
    this.finish_text.string = str;
 
    if (data.state != null) {
      this.all_goto.active = data.state == 0;
      this.all_get.active = data.state == 1 || data.state == 1;
    }
  },
  // 前往的跳转
  jumpGotoTeskView: function jumpGotoTeskView(num) {
    if (num == null) return;
 
    if (num == 0) {
      JumpController.getInstance().jumpViewByEvtData([5]);
    } else if (num == 1) {
      ActionController.getInstance().openSevenLoginWin(true);
    } else if (num == 2) {
      JumpController.getInstance().jumpViewByEvtData([44]);
    }
  },
  // 领取的跳转
  jumpGetTeskView: function jumpGetTeskView(num) {
    if (num == null) return;
 
    if (num == 0) {
      JumpController.getInstance().jumpViewByEvtData([46]);
    } else if (num == 1) {
      ActionController.getInstance().openSevenLoginWin(true);
    } else if (num == 2) {
      this.ctrl.sender25101(parseInt(num) + 1);
    }
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd() {
    this.ctrl.sender25100();
    this.model.setDayFirstLogin(false);
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    if (this.player_item && Utils.next(this.player_item || []) != null) {
      for (var i in this.player_item) {
        if (this.player_item[i] && this.player_item[i].deleteMe) {
          this.player_item[i].deleteMe();
        }
      }
    }
 
    this.player_item = [];
 
    if (this.remain_time && this.remain_time.node) {
      this.remain_time.node.stopAllActions();
    }
 
    this.ctrl.openRecruitHeroWindow(false);
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyZWNydWl0aGVyb1xcdmlld1xccmVjcnVpdF9oZXJvX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJBY3Rpb25Db250cm9sbGVyIiwiSGVyb0NvbnRyb2xsZXIiLCJKdW1wQ29udHJvbGxlciIsIlJlY3J1aXRIZXJvRXZlbnQiLCJSZWNydWl0X2hlcm9XaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJCaWciLCJjdHJsIiwiYXJndW1lbnRzIiwibW9kZWwiLCJnZXRNb2RlbCIsImluaXRDb25maWciLCJwbGF5ZXJfaXRlbSIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJtYWluX2NvbnRhaW5lciIsImxvYWRfYmciLCJnZXRDb21wb25lbnQiLCJTcHJpdGUiLCJyZXMiLCJnZXRCaWdCZyIsImxvYWRSZXMiLCJyZXNPYmplY3QiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJUZXh0XzEiLCJMYWJlbCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJUZXh0XzMiLCJyZW1haW5fdGltZSIsImFsbF9nZXQiLCJhY3RpdmUiLCJhbGxfZ2V0X2xhYiIsImFsbF9nb3RvIiwiYWxsX2dvdG9fbGFiIiwiYnRuX3BhaW50IiwiVGV4dF8yIiwiZmluaXNoX3RleHQiLCJzZXRQbGF5ZXJJdGVtIiwiYnRuX2Nsb3NlIiwicG9zX3giLCJwb3NfeSIsImJpZCIsImkiLCJ0YWIiLCJpdGVtIiwicGFyc2VJbnQiLCJidG5fZ290byIsInRhYl9nb3RvX2xhYiIsImJ0bl9nZXQiLCJidG5fZ2V0X2xhYmVsIiwiaGFzIiwidGl0bGVfbGFiZWwiLCJJdGVtc1Bvb2wiLCJnZXRJbnN0YW5jZSIsImdldEl0ZW0iLCJzZXRQYXJlbnQiLCJzZXRQb3NpdGlvbiIsIndpZHRoIiwiaGVpZ2h0Iiwic2V0RGF0YSIsIm51bSIsInNob3ciLCJzZXREZWZhdWx0VGlwIiwicmVnaXN0ZXJFdmVudCIsImFkZEdsb2JhbEV2ZW50IiwiUmVjcnVpdEhlcm9CYXNlSW5mbyIsImRhdGEiLCJjdHIiLCJ0aW1lIiwiZW5kX3RpbWUiLCJnY29yZSIsIlNtYXJ0U29ja2V0IiwiZ2V0VGltZSIsInNldENvdW50RG93blRpbWUiLCJzaG93QnRuU3RhdHVzIiwib25Ub3VjaEVuZCIsIm9wZW5SZWNydWl0SGVyb1dpbmRvdyIsInNlbmRlcjI1MTAxIiwic2VuZGVyMjUxMDIiLCJzdGF0dXMiLCJnZXRSZWNydWl0RW5kVGltZSIsImp1bXBHb3RvVGVza1ZpZXciLCJtZXNzYWdlIiwianVtcEdldFRlc2tWaWV3IiwidGl0bGUiLCJ0ZXNrX2R1biIsIkNvbmZpZyIsIndlbGZhcmVfZGF0YSIsImRhdGFfd2VsZmFyZV9jb25zdCIsImR1bl9tYXhfaWQiLCJmaW5pc2hfbnVtIiwicG9zIiwiYmFzZV9kYXRhIiwiZ2V0UmVjcnVpdEJhc2VEYXRhIiwianMiLCJmb3JtYXRTdHIiLCJ2YWwiLCJzdHIiLCJzdGF0ZSIsImp1bXBWaWV3QnlFdnREYXRhIiwib3BlblNldmVuTG9naW5XaW4iLCJvcGVuUm9vdFduZCIsInNlbmRlcjI1MTAwIiwic2V0RGF5Rmlyc3RMb2dpbiIsImNsb3NlQ2FsbEJhY2siLCJuZXh0IiwiZGVsZXRlTWUiLCJub2RlIiwic3RvcEFsbEFjdGlvbnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxnQkFBZ0IsR0FBR0QsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlFLGNBQWMsR0FBR0YsT0FBTyxDQUFD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LEVBQWdFO0FBQzVELFdBQUksSUFBSXFDLENBQVIsSUFBYSxLQUFLckMsV0FBbEIsRUFBOEI7QUFDMUIsWUFBRyxLQUFLQSxXQUFMLENBQWlCcUMsQ0FBakIsS0FBdUIsS0FBS3JDLFdBQUwsQ0FBaUJxQyxDQUFqQixFQUFvQmdFLFFBQTlDLEVBQXVEO0FBQ25ELGVBQUtyRyxXQUFMLENBQWlCcUMsQ0FBakIsRUFBb0JnRSxRQUFwQjtBQUNIO0FBQ0o7QUFDSjs7QUFDRCxTQUFLckcsV0FBTCxHQUFtQixFQUFuQjs7QUFFQSxRQUFHLEtBQUt1QixXQUFMLElBQW9CLEtBQUtBLFdBQUwsQ0FBaUIrRSxJQUF4QyxFQUE2QztBQUN6QyxXQUFLL0UsV0FBTCxDQUFpQitFLElBQWpCLENBQXNCQyxjQUF0QjtBQUNIOztBQUVELFNBQUs1RyxJQUFMLENBQVU0RSxxQkFBVixDQUFnQyxLQUFoQztBQUNIO0FBM042QixDQUFULENBQXpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6ZmQ5pe25oub5YufXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wNy0wMiAxNzowNzozOFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBBY3Rpb25Db250cm9sbGVyID0gcmVxdWlyZShcImFjdGlvbl9jb250cm9sbGVyXCIpO1xudmFyIEhlcm9Db250cm9sbGVyID0gcmVxdWlyZShcImhlcm9fY29udHJvbGxlclwiKTtcbnZhciBKdW1wQ29udHJvbGxlciA9IHJlcXVpcmUoXCJqdW1wX2NvbnRyb2xsZXJcIik7XG52YXIgUmVjcnVpdEhlcm9FdmVudCA9IHJlcXVpcmUoXCJyZWNydWl0aGVyb19ldmVudFwiKTtcblxudmFyIFJlY3J1aXRfaGVyb1dpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJyZWNydWl0aGVyb1wiLCBcInJlY3J1aXRfaGVyb193aW5kb3dcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkJpZzsgICAgICAgICAgICAgICAvL+aYr+WQpuaYr+WFqOWxj+eql+S9kyAgV2luVHlwZS5GdWxsLCBXaW5UeXBlLkJpZywgV2luVHlwZS5NaW5pLCBXaW5UeXBlLlRpcHNcbiAgICAgICAgdGhpcy5jdHJsID0gYXJndW1lbnRzWzBdO1xuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5jdHJsLmdldE1vZGVsKCk7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0Q29uZmlnOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMucGxheWVyX2l0ZW0gID0gW107XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjueahOWbnuiwgyzlj6/ku6XlnKjov5nph4zmjZXojrfnm7jlhbPoioLngrnmiJbogIXnu4Tku7ZcbiAgICBvcGVuQ2FsbEJhY2s6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIik7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5zY2FsZSA9IEZJVF9TQ0FMRTtcbiAgICBcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKTtcbiAgICBcbiAgICAgICAgdGhpcy5sb2FkX2JnID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImxvYWRfYmdcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgIHZhciByZXMgPSBQYXRoVG9vbC5nZXRCaWdCZyhcImFjdGlvbl9iaWdiZ18zXCIsbnVsbCxcImFjdGlvblwiKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgKGZ1bmN0aW9uKHJlc09iamVjdCl7XG4gICAgICAgICAgICB0aGlzLmxvYWRfYmcuc3ByaXRlRnJhbWUgPSByZXNPYmplY3Q7XG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xuICAgIFxuICAgICAgICB2YXIgVGV4dF8xID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlRleHRfMVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICBUZXh0XzEuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmtLvliqjml7bpl7TvvJpcIik7XG4gICAgICAgIFxuICAgICAgICB2YXIgVGV4dF8zID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlRleHRfM1wiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICBUZXh0XzMuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlrozmiJDkuIrmlrnku7vliqHljbPlj6/lhY3otLnpooblj5Y15pif6Iux6ZuE5pav6Iqs5YWL5pavXCIpO1xuXG4gICAgICAgIHRoaXMucmVtYWluX3RpbWUgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwicmVtYWluX3RpbWVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5yZW1haW5fdGltZS5zdHJpbmcgPSBcIlwiO1xuICAgIFxuICAgICAgICB0aGlzLmFsbF9nZXQgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYWxsX2dldFwiKTtcbiAgICAgICAgdGhpcy5hbGxfZ2V0LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgYWxsX2dldF9sYWIgPSB0aGlzLmFsbF9nZXQuZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICBhbGxfZ2V0X2xhYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIumihuWPllwiKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuYWxsX2dvdG8gPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYWxsX2dvdG9cIik7XG4gICAgICAgIHRoaXMuYWxsX2dvdG8uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHZhciBhbGxfZ290b19sYWIgPSB0aGlzLmFsbF9nb3RvLmdldENoaWxkQnlOYW1lKFwibGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgYWxsX2dvdG9fbGFiLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5pyq5a6M5oiQXCIpO1xuXG4gICAgICAgIHRoaXMuYnRuX3BhaW50ID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJ0bl9wYWludFwiKTtcbiAgICAgICAgdmFyIFRleHRfMiA9IHRoaXMuYnRuX3BhaW50LmdldENoaWxkQnlOYW1lKFwiVGV4dF8yXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIFRleHRfMi5zdHJpbmcgPSBVdGlscy5USTE4TihcIuaImOaWl+mihOiniFwiKTtcbiAgICBcbiAgICAgICAgdGhpcy5maW5pc2hfdGV4dCA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJmaW5pc2hfdGV4dFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmZpbmlzaF90ZXh0LnN0cmluZyA9IFwiXCI7XG4gICAgICAgIHRoaXMuc2V0UGxheWVySXRlbSgpO1xuICAgIFxuICAgICAgICB0aGlzLmJ0bl9jbG9zZSA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fY2xvc2VcIik7XG4gICAgfSxcblxuICAgIHNldFBsYXllckl0ZW06ZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHBvc194ID0gMTAwO1xuICAgICAgICB2YXIgcG9zX3kgPSAxMTQ7XG4gICAgICAgIHZhciBiaWQgPSBbMjk5MDUsMjY5MDAsMjY5MDNdO1xuICAgICAgICBmb3IodmFyIGk9MDtpPDM7aSsrKXtcbiAgICAgICAgICAgIHZhciB0YWIgPSB7fTtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIml0ZW1fXCIrKHBhcnNlSW50KGkpKzEpKTtcbiAgICAgICAgICAgIHRhYi5idG5fZ290byA9IGl0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJidG5fZ290b1wiKTtcbiAgICAgICAgICAgIHRhYi5idG5fZ290by5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciB0YWJfZ290b19sYWIgPSB0YWIuYnRuX2dvdG8uZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICAgICAgdGFiX2dvdG9fbGFiLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5YmN5b6A5a6M5oiQXCIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0YWIuYnRuX2dldCA9IGl0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJidG5fZ2V0XCIpO1xuICAgICAgICAgICAgdGFiLmJ0bl9nZXQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0YWIuYnRuX2dldF9sYWJlbCA9IHRhYi5idG5fZ2V0LmdldENoaWxkQnlOYW1lKFwibGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgICAgIHRhYi5idG5fZ2V0X2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5YmN5b6A6aKG5Y+WXCIpO1xuICAgICAgICAgICAgdGFiLmhhcyA9IGl0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJoYXNcIik7XG4gICAgICAgICAgICB0YWIuaGFzLmFjdGl2ZSA9IGZhbHNlO1xuICAgIFxuICAgICAgICAgICAgdGFiLnRpdGxlX2xhYmVsID0gaXRlbS5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG5cbiAgICAgICAgICAgIHRoaXMucGxheWVyX2l0ZW1baV0gPSBJdGVtc1Bvb2wuZ2V0SW5zdGFuY2UoKS5nZXRJdGVtKFwiYmFja3BhY2tfaXRlbVwiKTtcbiAgICAgICAgICAgIHRoaXMucGxheWVyX2l0ZW1baV0uc2V0UGFyZW50KGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXJfaXRlbVtpXS5pbml0Q29uZmlnKGZhbHNlLCAwLjgpO1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXJfaXRlbVtpXS5zZXRQb3NpdGlvbihwb3NfeC1pdGVtLndpZHRoLzIsIHBvc195LWl0ZW0uaGVpZ2h0LzIpO1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXJfaXRlbVtpXS5zZXREYXRhKHsgYmlkOiBiaWRbaV0sIG51bTogNTAgfSk7XG4gICAgICAgICAgICB0aGlzLnBsYXllcl9pdGVtW2ldLnNob3coKTtcbiAgICAgICAgICAgIHRoaXMucGxheWVyX2l0ZW1baV0uc2V0RGVmYXVsdFRpcCgpO1xuXG4gICAgICAgICAgICB0aGlzLnBsYXllcl9pdGVtW2ldID0gdGFiO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoUmVjcnVpdEhlcm9FdmVudC5SZWNydWl0SGVyb0Jhc2VJbmZvLGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICAgICAgdmFyIGN0ciA9IEFjdGlvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgIHZhciB0aW1lID0gZGF0YS5lbmRfdGltZSAtIGdjb3JlLlNtYXJ0U29ja2V0LmdldFRpbWUoKTtcbiAgICAgICAgICAgIGN0ci5nZXRNb2RlbCgpLnNldENvdW50RG93blRpbWUodGhpcy5yZW1haW5fdGltZSx0aW1lKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0J0blN0YXR1cyhkYXRhKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuYnRuX2Nsb3NlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlblJlY3J1aXRIZXJvV2luZG93KGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuYmFja2dyb3VuZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5SZWNydWl0SGVyb1dpbmRvdyhmYWxzZSk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMik7XG5cbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmFsbF9nZXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIyNTEwMSgwKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuYnRuX3BhaW50LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyB0aGlzLmN0cmwub3BlblJlY3J1aXRIZXJvV2luZG93KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIyNTEwMigpO1xuICAgICAgICAgICAgLy8gSGVyb0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuSGVyb0luZm9XaW5kb3dCeUJpZFN0YXIoMzA1MDgsIDEwKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKTtcblxuICAgICAgICBmb3IodmFyIGkgaW4gdGhpcy5wbGF5ZXJfaXRlbSl7XG4gICAgICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMucGxheWVyX2l0ZW1baV0uYnRuX2dvdG8sIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMubW9kZWwuZ2V0UmVjcnVpdEVuZFRpbWUoKTtcbiAgICAgICAgICAgICAgICBpZihzdGF0dXMpe1xuICAgICAgICAgICAgICAgICAgICBpZihpIT0xKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuUmVjcnVpdEhlcm9XaW5kb3coZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcEdvdG9UZXNrVmlldyhpKTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIua0u+WKqOW3sue7k+adn1wiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMsaSksIDEpO1xuXG4gICAgICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMucGxheWVyX2l0ZW1baV0uYnRuX2dldCwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBHZXRUZXNrVmlldyhpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzLGkpLCAxKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDku7vliqFcbiAgICBzaG93QnRuU3RhdHVzOmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBpZighZGF0YSlyZXR1cm47XG4gICAgICAgIHZhciB0aXRsZSA9IFtVdGlscy5USTE4TihcIumAmuWFsyVkLyVk5YWzXCIpLFV0aWxzLlRJMThOKFwi5qyh5pel55m75b2VXCIpLFV0aWxzLlRJMThOKFwi5r+A5rS76Iez5bCK5pyI5Y2hXCIpXTtcbiAgICAgICAgdmFyIHRlc2tfZHVuID0gQ29uZmlnLndlbGZhcmVfZGF0YS5kYXRhX3dlbGZhcmVfY29uc3QuZHVuX21heF9pZDtcbiAgICAgICAgdmFyIGZpbmlzaF9udW0gPSAwO1xuICAgICAgICB2YXIgcG9zID0gWzIsMSwzXTtcbiAgICAgICAgZm9yKHZhciBpPTA7aTwzO2krKyl7XG4gICAgICAgICAgICB2YXIgYmFzZV9kYXRhID0gdGhpcy5tb2RlbC5nZXRSZWNydWl0QmFzZURhdGEocG9zW2ldKTtcbiAgICAgICAgICAgIGlmKGJhc2VfZGF0YSl7XG4gICAgICAgICAgICAgICAgaWYoaSA9PSAwKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXJfaXRlbVtpXS50aXRsZV9sYWJlbC5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIodGl0bGVbaV0sYmFzZV9kYXRhLnZhbCx0ZXNrX2R1bi52YWwpO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXllcl9pdGVtW2ldLnRpdGxlX2xhYmVsLnN0cmluZyA9IHRpdGxlW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDnibnmrorlpITnkIZcbiAgICAgICAgICAgICAgICBpZihpID09IDIgJiYgYmFzZV9kYXRhLnN0YXR1cyA9PSAxKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXJfaXRlbVtpXS5idG5fZ2V0X2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi6aKG5Y+WXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBsYXllcl9pdGVtW2ldLmJ0bl9nb3RvLmFjdGl2ZSA9IGJhc2VfZGF0YS5zdGF0dXMgPT0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXllcl9pdGVtW2ldLmJ0bl9nZXQuYWN0aXZlID0gYmFzZV9kYXRhLnN0YXR1cyA9PSAxO1xuICAgICAgICAgICAgICAgIHRoaXMucGxheWVyX2l0ZW1baV0uaGFzLmFjdGl2ZSA9IGJhc2VfZGF0YS5zdGF0dXMgPT0gMjtcbiAgICAgICAgICAgICAgICBpZihiYXNlX2RhdGEuc3RhdHVzID09IDEgfHwgYmFzZV9kYXRhLnN0YXR1cyA9PSAyKXtcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoX251bSA9IGZpbmlzaF9udW0gKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdHIgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCLlrozmiJDov5vluqY6ICVkLzNcIiksZmluaXNoX251bSk7XG4gICAgICAgIHRoaXMuZmluaXNoX3RleHQuc3RyaW5nID0gc3RyO1xuICAgICAgICBpZihkYXRhLnN0YXRlIT1udWxsKXtcbiAgICAgICAgICAgIHRoaXMuYWxsX2dvdG8uYWN0aXZlID0gZGF0YS5zdGF0ZSA9PSAwO1xuXHRcdCAgICB0aGlzLmFsbF9nZXQuYWN0aXZlID0gZGF0YS5zdGF0ZSA9PSAxIHx8IGRhdGEuc3RhdGUgPT0gMTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDliY3lvoDnmoTot7PovaxcbiAgICBqdW1wR290b1Rlc2tWaWV3OmZ1bmN0aW9uKG51bSl7XG4gICAgICAgIGlmIChudW09PW51bGwpcmV0dXJuO1xuICAgICAgICBpZihudW0gPT0gMCl7XG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFs1XSk7XG4gICAgICAgIH1lbHNlIGlmKG51bSA9PSAxKXtcbiAgICAgICAgICAgIEFjdGlvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuU2V2ZW5Mb2dpbldpbih0cnVlKTtcbiAgICAgICAgfWVsc2UgaWYobnVtID09IDIpe1xuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNDRdKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpooblj5bnmoTot7PovaxcbiAgICBqdW1wR2V0VGVza1ZpZXc6ZnVuY3Rpb24obnVtKXtcbiAgICAgICAgaWYgKG51bT09bnVsbClyZXR1cm47XG4gICAgICAgIGlmKG51bSA9PSAwKXtcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzQ2XSk7XG4gICAgICAgIH1lbHNlIGlmKG51bSA9PSAxKXtcbiAgICAgICAgICAgIEFjdGlvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuU2V2ZW5Mb2dpbldpbih0cnVlKTtcbiAgICAgICAgfWVsc2UgaWYobnVtID09IDIpe1xuICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjI1MTAxKHBhcnNlSW50KG51bSkrMSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwgyzkuZ/lsLHmmK/kuIDkuKrnqpfkvZPnmoTmraPlvI/lhaXlj6Ms5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb3BlblJvb3RXbmQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjI1MTAwKCk7XG4gICAgICAgIHRoaXMubW9kZWwuc2V0RGF5Rmlyc3RMb2dpbihmYWxzZSk7XG4gICAgfSxcblxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMucGxheWVyX2l0ZW0gJiYgVXRpbHMubmV4dCh0aGlzLnBsYXllcl9pdGVtIHx8IFtdKSE9bnVsbCl7XG4gICAgICAgICAgICBmb3IodmFyIGkgaW4gdGhpcy5wbGF5ZXJfaXRlbSl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5wbGF5ZXJfaXRlbVtpXSAmJiB0aGlzLnBsYXllcl9pdGVtW2ldLmRlbGV0ZU1lKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXJfaXRlbVtpXS5kZWxldGVNZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBsYXllcl9pdGVtID0gW107XG5cbiAgICAgICAgaWYodGhpcy5yZW1haW5fdGltZSAmJiB0aGlzLnJlbWFpbl90aW1lLm5vZGUpe1xuICAgICAgICAgICAgdGhpcy5yZW1haW5fdGltZS5ub2RlLnN0b3BBbGxBY3Rpb25zKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN0cmwub3BlblJlY3J1aXRIZXJvV2luZG93KGZhbHNlKTtcbiAgICB9LFxufSkiXX0=