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
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/role/view/role_title_panel.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, '257d0GZm8xBo5pjitNoZjb+', 'role_title_panel');
// Scripts/mod/role/view/role_title_panel.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: whjing2012@syg.com(必填, 创建模块的人员)
// @description:
//      头像框
// <br/>Create: new Date().toISOString()
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var TimeTool = require("timetool");
 
var RoleController = require("role_controller");
 
var BackpackController = require("backpack_controller");
 
var PartnerCalculate = require("partner_calculate");
 
var RoleTitlePanel = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("roleinfo", "role_title_panel");
    this.x = 0; //必须设置的两个变量
 
    this.y = 0;
    this.data = null;
    this.has_list = {};
    this.item_list = {};
  },
  initPanel: function initPanel() {
    this.setPosition(0, 0);
    this.scroll_con = this.root_wnd.getChildByName("scroll_con");
    this.view = this.scroll_con.getChildByName("view");
    this.content = this.view.getChildByName("content");
    this.ok_btn = this.root_wnd.getChildByName("ok_btn");
    this.ok_label = this.ok_btn.getChildByName("Label").getComponent(cc.Label);
    this.item = this.root_wnd.getChildByName("item");
    this.roleVo = RoleController.getInstance().getRoleVo();
    RoleController.getInstance().send23300();
  },
  registerEvent: function registerEvent() {
    this.ok_btn.on(cc.Node.EventType.TOUCH_END, function () {
      if (this.select_item) {
        var config = Config.honor_data.data_title[this.select_bid];
 
        if (this.select_item.v.status == 1) {
          RoleController.getInstance().send23301(this.select_bid);
        } else if (this.select_item.v.status == 0 && config.source > 0) {
          var data = Config.source_data.data_source_data[config.source];
 
          if (data.evt_type != null && data.extend != null) {
            BackpackController.getInstance().gotoItemSources(data.evt_type, data.extend);
          }
        } else {
          RoleController.getInstance().send23303(this.select_bid);
        }
      }
    }, this);
 
    var RoleEvent = require("role_event");
 
    this.addGlobalEvent(RoleEvent.GetTitleList, function (data) {
      this.updateList(data.honor);
    });
    this.addGlobalEvent(RoleEvent.UpdateTitleList, function (data) {
      this.updateList(data.honor);
    });
    this.addGlobalEvent(RoleEvent.UseTitle, function (data) {
      this.updateList();
    });
  },
  onShow: function onShow() {},
  // 更新头像框列表信息
  updateList: function updateList(has_list) {
    if (has_list) {
      this.has_list = this.has_list || {};
 
      for (var k in has_list) {
        this.has_list[has_list[k].base_id] = has_list[k];
      }
    }
 
    this.list = [];
 
    for (var k in Config.honor_data.data_title) {
      var v = Config.honor_data.data_title[k];
 
      if (v.is_show != 1) {} else if (v.base_id == this.roleVo.title_id) {
        this.list.push({
          bid: v.base_id,
          use: 1,
          status: 1,
          sort: 1100000 - v.base_id
        });
      } else if (this.has_list[v.base_id]) {
        this.list.push({
          bid: v.base_id,
          use: 0,
          status: 1,
          sort: 100000 - v.base_id
        });
      } else if (v.loss && v.loss[0]) {
        if (BackpackController.getInstance().getModel().getBackPackItemNumByBid(v.loss[0][0]) >= v.loss[0][1]) {
          this.list.push({
            bid: v.base_id,
            use: 0,
            status: 2,
            sort: 2000000 - v.base_id,
            res_id: v.res_id
          });
        } else {
          this.list.push({
            bid: v.base_id,
            use: 0,
            status: 0,
            sort: -v.base_id,
            res_id: v.res_id
          });
        }
      } else {
        this.list.push({
          bid: v.base_id,
          use: 0,
          status: 0,
          sort: -v.base_id
        });
      }
    } //Log.info(has_list, this.has_list, this.list, this.roleVo);
 
 
    this.list.sort(function (a, b) {
      return a.sort > b.sort;
    });
    var i = 0;
 
    var func = function (num) {
      if (!this.list || !this.item_list || this.list.length == 0) {
        return;
      }
 
      num = num || 2;
 
      for (var j = 0; j < num; j++) {
        if (this.list.length == 0) {
          return;
        }
 
        this.createItem(i, this.list.pop());
        i++;
      }
 
      gcore.Timer.set(func, 20, 1, "role_title_panel_timer");
    }.bind(this);
 
    func(10);
  },
  // 创建更新一个头像框
  createItem: function createItem(i, v) {
    var item = this.item_list[v.bid];
 
    if (!item) {
      var config = Config.honor_data.data_title[v.bid];
      item = cc.instantiate(this.item);
      this.content.addChild(item);
      this.item_list[v.bid] = item;
      item.active = true;
      item.icon = item.getChildByName("icon").getComponent(cc.Sprite);
      item.use = item.getChildByName("use");
      item.select = item.getChildByName("select");
      item.active_node = item.getChildByName("active");
      item.bg = item.getChildByName("bg").getComponent(cc.Sprite);
      item.label = item.getChildByName("label").getComponent(cc.Label);
      item.attr_desc = item.getChildByName("attr_desc").getComponent(cc.RichText);
      item.desc = item.getChildByName("desc").getComponent(cc.RichText);
      item.desc.string = cc.js.formatStr(Utils.TI18N("<color=#a95f0f>获取条件:%s</color>"), config.desc);
      item.attr_desc.string = this.attrString(config);
      item.on(cc.Node.EventType.TOUCH_END, function () {
        this.setSelected(v.bid);
      }.bind(this));
      this.loadRes(PathTool.getHonorRes(config.res_id), function (resObject) {
        item.icon.spriteFrame = resObject;
      }.bind(this));
    }
 
    item.v = v;
    var y = -(i * 127 + 65);
    item.setPosition(302, y);
    this.content.height = 65 - y;
    item.active_node.active = v.status == 2;
 
    if (i == 0) {
      this.setSelected(v.bid);
    }
 
    if (v.use == 1) {
      item.use.active = true;
      this.setSelected(v.bid);
    } else {
      item.use.active = false;
    }
 
    if (this.has_list[v.bid]) {
      if (this.has_list[v.bid].expire_time > 0) {
        item.label.string = TimeTool.getTimeFormatDay(this.has_list[v.bid].expire_time - gcore.SmartSocket.getTime());
      } else {
        item.label.string = Utils.TI18N("永久");
      }
    } else {
      item.label.string = Utils.TI18N("未获得");
    }
  },
  attrString: function attrString(config) {
    cc.log("title", config);
    var attr_list = Utils.deepCopy(config.attr);
 
    if (config.add_exp > 0) {
      attr_list.push(["add_exp", config.add_exp]);
    }
 
    if (attr_list.length == 0) {
      return Utils.TI18N("<color=#693705>无属性加成</color>");
    }
 
    var attr_desc = "";
 
    for (var i = 0, n = attr_list.length; i < n; i++) {
      var attr = attr_list[i];
 
      if (i > 0 && i % 2 == 0) {
        attr_desc += "<br/>";
      } else if (i > 0) {
        attr_desc += "        ";
      }
 
      if (attr[0] == "add_exp") {
        attr_desc += cc.js.formatStr(Utils.TI18N("挂机经验: %d"), attr[1]);
      } else {
        if (PartnerCalculate.isShowPerByStr(attr[0]) == true) {
          attr_desc += cc.js.formatStr("%s: %d%", Config.attr_data.data_key_to_name[attr[0]], attr[1] * 0.1);
        } else {
          attr_desc += cc.js.formatStr("%s: %d", Config.attr_data.data_key_to_name[attr[0]], attr[1]);
        }
      }
    }
 
    return "<color=#693705>" + attr_desc + "</color>";
  },
  // 设置选择状态 
  setSelected: function setSelected(bid) {
    if (this.select_bid == bid) {
      return;
    }
 
    this.select_bid = bid;
 
    if (this.select_item) {
      var common_res_path = PathTool.getCommonIcomPath("common_1029");
      this.changeImage(this.select_item.bg, common_res_path);
    }
 
    this.select_item = this.item_list[bid];
 
    if (this.select_item) {
      var common_res_path = PathTool.getCommonIcomPath("common_1020");
      this.changeImage(this.select_item.bg, common_res_path);
      var config = Config.honor_data.data_title[bid];
 
      if (this.select_item.v.status == 1) {
        this.ok_label.string = Utils.TI18N("更 换");
      } else if (this.select_item.v.status == 0 && config.source > 0) {
        this.ok_label.string = Utils.TI18N("前往获取");
      } else {
        this.ok_label.string = Utils.TI18N("激 活");
      }
    }
  },
  changeImage: function changeImage(sp, res) {
    this.loadRes(res, function (sf_obj) {
      sp.spriteFrame = sf_obj;
    }.bind(this));
  },
  onHide: function onHide() {},
  onDelete: function onDelete() {
    this.list = null;
    this.item_list = null;
  }
});
module.exports = RoleTitlePanel;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyb2xlXFx2aWV3XFxyb2xlX3RpdGxlX3BhbmVsLmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIlRpbWVUb29sIiwiUm9sZUNvbnRyb2xsZXIiLCJCYWNrcGFja0NvbnRyb2xsZXIiLCJQYXJ0bmVyQ2FsY3VsYXRlIiwiUm9sZVRpdGxlUGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwieCIsInkiLCJkYXRhIiwiaGFzX2xpc3QiLCJpdGVtX2xpc3QiLCJpbml0UGFuZWwiLCJzZXRQb3NpdGlvbiIsInNjcm9sbF9jb24iLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwidmlldyIsImNvbnRlbnQiLCJva19idG4iLCJva19sYWJlbCIsImdldENvbXBvbmVudCIsIkxhYmVsIiwiaXRlbSIsInJvbGVWbyIsImdldEluc3RhbmNlIiwiZ2V0Um9sZVZvIiwic2VuZDIzMzAwIiwicmVnaXN0ZXJFdmVudCIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsInNlbGVjdF9pdGVtIiwiY29uZmlnIiwiQ29uZmlnIiwiaG9ub3JfZGF0YSIsImRhdGFfdGl0bGUiLCJzZWxlY3RfYmlkIiwidiIsInN0YXR1cyIsInNlbmQyMzMwMSIsInNvdXJjZSIsInNvdXJjZV9kYXRhIiwiZGF0YV9zb3VyY2VfZGF0YSIsImV2dF90eXBlIiwiZXh0ZW5kIiwiZ290b0l0ZW1Tb3VyY2VzIiwic2VuZDIzMzAzIiwiUm9sZUV2ZW50IiwiYWRkR2xvYmFsRXZlbnQiLCJHZXRUaXRsZUxpc3QiLCJ1cGRhdGVMaXN0IiwiaG9ub3IiLCJVcGRhdGVUaXRsZUxpc3QiLCJVc2VUaXRsZSIsIm9uU2hvdyIsImsiLCJiYXNlX2lkIiwibGlzdCIsImlzX3Nob3ciLCJ0aXRsZV9pZCIsInB1c2giLCJiaWQiLCJ1c2UiLCJzb3J0IiwibG9zcyIsImdldE1vZGVsIiwiZ2V0QmFja1BhY2tJdGVtTnVtQnlCaWQiLCJyZXNfaWQiLCJhIiwiYiIsImkiLCJmdW5jIiwibnVtIiwibGVuZ3RoIiwiaiIsImNyZWF0ZUl0ZW0iLCJwb3AiLCJnY29yZSIsIlRpbWVyIiwic2V0IiwiYmluZCIsImluc3RhbnRpYXRlIiwiYWRkQ2hpbGQiLCJhY3RpdmUiLCJpY29uIiwiU3ByaXRlIiwic2VsZWN0IiwiYWN0aXZlX25vZGUiLCJiZyIsImxhYmVsIiwiYXR0cl9kZXNjIiwiUmljaFRleHQiLCJkZXNjIiwic3RyaW5nIiwianMiLCJmb3JtYXRTdHIiLCJVdGlscyIsIlRJMThOIiwiYXR0clN0cmluZyIsInNldFNlbGVjdGVkIiwibG9hZFJlcyIsImdldEhvbm9yUmVzIiwicmVzT2JqZWN0Iiwic3ByaXRlRnJhbWUiLCJoZWlnaHQiLCJleHBpcmVfdGltZSIsImdldFRpbWVGb3JtYXREYXkiLCJTbWFydFNvY2tldCIsImdldFRpbWUiLCJsb2ciLCJhdHRyX2xpc3QiLCJkZWVwQ29weSIsImF0dHIiLCJhZGRfZXhwIiwibiIsImlzU2hvd1BlckJ5U3RyIiwiYXR0cl9kYXRhIiwiZGF0YV9rZXlfdG9fbmFtZSIsImNvbW1vbl9yZXNfcGF0aCIsImdldENvbW1vbkljb21QYXRoIiwiY2hhbmdlSW1hZ2UiLCJzcCIsInJlcyIsInNmX29iaiIsIm9uSGlkZSIsIm9uRGVsZXRlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLFFBQVEsR0FBR0QsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUUsY0FBYyxHQUFHRixPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUcsa0JBQWtCLEdBQUdILE9BQU8sQ0FBQyxxQkFBRCxDQUFoQzs7QUFDQSxJQUFJSSxnQkFBZ0IsR0FBR0os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Q0MsS0FBTixDQUFZLEtBQVosQ0FBdkI7QUFDSCxPQUZELE1BRU8sSUFBSSxLQUFLbEUsV0FBTCxDQUFpQk0sQ0FBakIsQ0FBbUJDLE1BQW5CLElBQTZCLENBQTdCLElBQWtDTixNQUFNLENBQUNRLE1BQVAsR0FBZ0IsQ0FBdEQsRUFBeUQ7QUFDNUQsYUFBS3RCLFFBQUwsQ0FBYzJFLE1BQWQsR0FBdUJHLEtBQUssQ0FBQ0MsS0FBTixDQUFZLE1BQVosQ0FBdkI7QUFDSCxPQUZNLE1BRUE7QUFDSCxhQUFLL0UsUUFBTCxDQUFjMkUsTUFBZCxHQUF1QkcsS0FBSyxDQUFDQyxLQUFOLENBQVksS0FBWixDQUF2QjtBQUNIO0FBQ0o7QUFDSixHQTlNeUI7QUFnTjFCdUIsRUFBQUEsV0FBVyxFQUFFLHFCQUFVQyxFQUFWLEVBQWNDLEdBQWQsRUFBbUI7QUFDNUIsU0FBS3RCLE9BQUwsQ0FBYXNCLEdBQWIsRUFBa0IsVUFBVUMsTUFBVixFQUFrQjtBQUNoQ0YsTUFBQUEsRUFBRSxDQUFDbEIsV0FBSCxHQUFpQm9CLE1BQWpCO0FBQ0gsS0FGaUIsQ0FFaEIzQyxJQUZnQixDQUVYLElBRlcsQ0FBbEI7QUFHSCxHQXBOeUI7QUFzTjFCNEMsRUFBQUEsTUFBTSxFQUFFLGtCQUFZLENBRW5CLENBeE55QjtBQTBOMUJDLEVBQUFBLFFBQVEsRUFBRSxvQkFBWTtBQUNsQixTQUFLcEUsSUFBTCxHQUFZLElBQVo7QUFDQSxTQUFLaEQsU0FBTCxHQUFpQixJQUFqQjtBQUNIO0FBN055QixDQUFULENBQXJCO0FBZ09BcUgsTUFBTSxDQUFDQyxPQUFQLEdBQWlCakksY0FBakIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB3aGppbmcyMDEyQHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAgIOWktOWDj+ahhlxuLy8gPGJyLz5DcmVhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIFRpbWVUb29sID0gcmVxdWlyZShcInRpbWV0b29sXCIpO1xudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKTtcbnZhciBCYWNrcGFja0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiYmFja3BhY2tfY29udHJvbGxlclwiKTtcbnZhciBQYXJ0bmVyQ2FsY3VsYXRlID0gcmVxdWlyZShcInBhcnRuZXJfY2FsY3VsYXRlXCIpO1xuXG52YXIgUm9sZVRpdGxlUGFuZWwgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVBhbmVsLFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcInJvbGVpbmZvXCIsIFwicm9sZV90aXRsZV9wYW5lbFwiKTtcbiAgICAgICAgdGhpcy54ID0gMDsvL+W/hemhu+iuvue9rueahOS4pOS4quWPmOmHj1xuICAgICAgICB0aGlzLnkgPSAwO1xuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLmhhc19saXN0ID0ge307XG4gICAgICAgIHRoaXMuaXRlbV9saXN0ID0ge307XG4gICAgfSxcblxuICAgIGluaXRQYW5lbDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKDAsIDApO1xuICAgICAgICB0aGlzLnNjcm9sbF9jb24gPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwic2Nyb2xsX2NvblwiKTtcbiAgICAgICAgdGhpcy52aWV3ID0gdGhpcy5zY3JvbGxfY29uLmdldENoaWxkQnlOYW1lKFwidmlld1wiKTtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy52aWV3LmdldENoaWxkQnlOYW1lKFwiY29udGVudFwiKTtcbiAgICAgICAgdGhpcy5va19idG4gPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwib2tfYnRuXCIpO1xuICAgICAgICB0aGlzLm9rX2xhYmVsID0gdGhpcy5va19idG4uZ2V0Q2hpbGRCeU5hbWUoXCJMYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLml0ZW0gPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwiaXRlbVwiKTtcbiAgICAgICAgdGhpcy5yb2xlVm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpO1xuICAgICAgICBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNlbmQyMzMwMCgpO1xuICAgIH0sXG5cbiAgICByZWdpc3RlckV2ZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub2tfYnRuLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0X2l0ZW0pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29uZmlnID0gQ29uZmlnLmhvbm9yX2RhdGEuZGF0YV90aXRsZVt0aGlzLnNlbGVjdF9iaWRdO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdF9pdGVtLnYuc3RhdHVzID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZW5kMjMzMDEodGhpcy5zZWxlY3RfYmlkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0X2l0ZW0udi5zdGF0dXMgPT0gMCAmJiBjb25maWcuc291cmNlID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IENvbmZpZy5zb3VyY2VfZGF0YS5kYXRhX3NvdXJjZV9kYXRhW2NvbmZpZy5zb3VyY2VdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5ldnRfdHlwZSAhPSBudWxsICYmIGRhdGEuZXh0ZW5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEJhY2twYWNrQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdvdG9JdGVtU291cmNlcyhkYXRhLmV2dF90eXBlLCBkYXRhLmV4dGVuZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNlbmQyMzMwMyh0aGlzLnNlbGVjdF9iaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIHZhciBSb2xlRXZlbnQgPSByZXF1aXJlKFwicm9sZV9ldmVudFwiKTtcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChSb2xlRXZlbnQuR2V0VGl0bGVMaXN0LCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0KGRhdGEuaG9ub3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChSb2xlRXZlbnQuVXBkYXRlVGl0bGVMaXN0LCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0KGRhdGEuaG9ub3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChSb2xlRXZlbnQuVXNlVGl0bGUsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxpc3QoKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIG9uU2hvdzogZnVuY3Rpb24gKCkge1xuICAgIH0sXG5cbiAgICAvLyDmm7TmlrDlpLTlg4/moYbliJfooajkv6Hmga9cbiAgICB1cGRhdGVMaXN0OiBmdW5jdGlvbiAoaGFzX2xpc3QpIHtcbiAgICAgICAgaWYgKGhhc19saXN0KSB7XG4gICAgICAgICAgICB0aGlzLmhhc19saXN0ID0gdGhpcy5oYXNfbGlzdCB8fCB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gaGFzX2xpc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc19saXN0W2hhc19saXN0W2tdLmJhc2VfaWRdID0gaGFzX2xpc3Rba107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0ID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gQ29uZmlnLmhvbm9yX2RhdGEuZGF0YV90aXRsZSkge1xuICAgICAgICAgICAgdmFyIHYgPSBDb25maWcuaG9ub3JfZGF0YS5kYXRhX3RpdGxlW2tdO1xuICAgICAgICAgICAgaWYgKHYuaXNfc2hvdyAhPSAxKSB7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYuYmFzZV9pZCA9PSB0aGlzLnJvbGVWby50aXRsZV9pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdC5wdXNoKHsgYmlkOiB2LmJhc2VfaWQsIHVzZTogMSwgc3RhdHVzOiAxLCBzb3J0OiAxMTAwMDAwIC0gdi5iYXNlX2lkIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc19saXN0W3YuYmFzZV9pZF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QucHVzaCh7IGJpZDogdi5iYXNlX2lkLCB1c2U6IDAsIHN0YXR1czogMSwgc29ydDogMTAwMDAwIC0gdi5iYXNlX2lkIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2Lmxvc3MgJiYgdi5sb3NzWzBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKEJhY2twYWNrQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0QmFja1BhY2tJdGVtTnVtQnlCaWQodi5sb3NzWzBdWzBdKSA+PSB2Lmxvc3NbMF1bMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0LnB1c2goeyBiaWQ6IHYuYmFzZV9pZCwgdXNlOiAwLCBzdGF0dXM6IDIsIHNvcnQ6IDIwMDAwMDAgLSB2LmJhc2VfaWQsIHJlc19pZDogdi5yZXNfaWQgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0LnB1c2goeyBiaWQ6IHYuYmFzZV9pZCwgdXNlOiAwLCBzdGF0dXM6IDAsIHNvcnQ6IC12LmJhc2VfaWQsIHJlc19pZDogdi5yZXNfaWQgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QucHVzaCh7IGJpZDogdi5iYXNlX2lkLCB1c2U6IDAsIHN0YXR1czogMCwgc29ydDogLXYuYmFzZV9pZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL0xvZy5pbmZvKGhhc19saXN0LCB0aGlzLmhhc19saXN0LCB0aGlzLmxpc3QsIHRoaXMucm9sZVZvKTtcbiAgICAgICAgdGhpcy5saXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuc29ydCA+IGIuc29ydCB9KTtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB2YXIgZnVuYyA9IChmdW5jdGlvbiAobnVtKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdCB8fCAhdGhpcy5pdGVtX2xpc3QgfHwgdGhpcy5saXN0Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbnVtID0gbnVtIHx8IDI7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlSXRlbShpLCB0aGlzLmxpc3QucG9wKCkpO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdjb3JlLlRpbWVyLnNldChmdW5jLCAyMCwgMSwgXCJyb2xlX3RpdGxlX3BhbmVsX3RpbWVyXCIpO1xuICAgICAgICB9KS5iaW5kKHRoaXMpO1xuICAgICAgICBmdW5jKDEwKTtcbiAgICB9LFxuXG4gICAgLy8g5Yib5bu65pu05paw5LiA5Liq5aS05YOP5qGGXG4gICAgY3JlYXRlSXRlbTogZnVuY3Rpb24gKGksIHYpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1fbGlzdFt2LmJpZF07XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IENvbmZpZy5ob25vcl9kYXRhLmRhdGFfdGl0bGVbdi5iaWRdO1xuICAgICAgICAgICAgaXRlbSA9IGNjLmluc3RhbnRpYXRlKHRoaXMuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnQuYWRkQ2hpbGQoaXRlbSk7XG4gICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFt2LmJpZF0gPSBpdGVtO1xuICAgICAgICAgICAgaXRlbS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgaXRlbS5pY29uID0gaXRlbS5nZXRDaGlsZEJ5TmFtZShcImljb25cIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgICAgICBpdGVtLnVzZSA9IGl0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJ1c2VcIik7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdCA9IGl0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJzZWxlY3RcIik7XG4gICAgICAgICAgICBpdGVtLmFjdGl2ZV9ub2RlID0gaXRlbS5nZXRDaGlsZEJ5TmFtZShcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgIGl0ZW0uYmcgPSBpdGVtLmdldENoaWxkQnlOYW1lKFwiYmdcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgICAgICBpdGVtLmxhYmVsID0gaXRlbS5nZXRDaGlsZEJ5TmFtZShcImxhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgICAgICBpdGVtLmF0dHJfZGVzYyA9IGl0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJhdHRyX2Rlc2NcIikuZ2V0Q29tcG9uZW50KGNjLlJpY2hUZXh0KTtcbiAgICAgICAgICAgIGl0ZW0uZGVzYyA9IGl0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJkZXNjXCIpLmdldENvbXBvbmVudChjYy5SaWNoVGV4dCk7XG4gICAgICAgICAgICBpdGVtLmRlc2Muc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiPGNvbG9yPSNhOTVmMGY+6I635Y+W5p2h5Lu277yaJXM8L2NvbG9yPlwiKSwgY29uZmlnLmRlc2MpO1xuICAgICAgICAgICAgaXRlbS5hdHRyX2Rlc2Muc3RyaW5nID0gdGhpcy5hdHRyU3RyaW5nKGNvbmZpZyk7XG4gICAgICAgICAgICBpdGVtLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkKHYuYmlkKTtcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEhvbm9yUmVzKGNvbmZpZy5yZXNfaWQpLCAoZnVuY3Rpb24gKHJlc09iamVjdCkge1xuICAgICAgICAgICAgICAgIGl0ZW0uaWNvbi5zcHJpdGVGcmFtZSA9IHJlc09iamVjdDtcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0udiA9IHY7XG4gICAgICAgIHZhciB5ID0gLShpICogMTI3ICsgNjUpO1xuICAgICAgICBpdGVtLnNldFBvc2l0aW9uKDMwMiwgeSk7XG4gICAgICAgIHRoaXMuY29udGVudC5oZWlnaHQgPSA2NSAtIHk7XG4gICAgICAgIGl0ZW0uYWN0aXZlX25vZGUuYWN0aXZlID0gKHYuc3RhdHVzID09IDIpO1xuICAgICAgICBpZiAoaSA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkKHYuYmlkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodi51c2UgPT0gMSkge1xuICAgICAgICAgICAgaXRlbS51c2UuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQodi5iaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS51c2UuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFzX2xpc3Rbdi5iaWRdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNfbGlzdFt2LmJpZF0uZXhwaXJlX3RpbWUgPiAwKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5sYWJlbC5zdHJpbmcgPSBUaW1lVG9vbC5nZXRUaW1lRm9ybWF0RGF5KHRoaXMuaGFzX2xpc3Rbdi5iaWRdLmV4cGlyZV90aW1lIC0gZ2NvcmUuU21hcnRTb2NrZXQuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbS5sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIuawuOS5hVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0ubGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmnKrojrflvpdcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0clN0cmluZzogZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICBjYy5sb2coXCJ0aXRsZVwiLCBjb25maWcpXG4gICAgICAgIHZhciBhdHRyX2xpc3QgPSBVdGlscy5kZWVwQ29weShjb25maWcuYXR0cik7XG4gICAgICAgIGlmIChjb25maWcuYWRkX2V4cCA+IDApIHtcbiAgICAgICAgICAgIGF0dHJfbGlzdC5wdXNoKFtcImFkZF9leHBcIiwgY29uZmlnLmFkZF9leHBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXR0cl9saXN0Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMuVEkxOE4oXCI8Y29sb3I9IzY5MzcwNT7ml6DlsZ7mgKfliqDmiJA8L2NvbG9yPlwiKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYXR0cl9kZXNjID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG4gPSBhdHRyX2xpc3QubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYXR0ciA9IGF0dHJfbGlzdFtpXTtcbiAgICAgICAgICAgIGlmIChpID4gMCAmJiBpICUgMiA9PSAwKSB7XG4gICAgICAgICAgICAgICAgYXR0cl9kZXNjICs9IFwiPGJyLz5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICBhdHRyX2Rlc2MgKz0gXCIgICAgICAgIFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGF0dHJbMF0gPT0gXCJhZGRfZXhwXCIpIHtcbiAgICAgICAgICAgICAgICBhdHRyX2Rlc2MgKz0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5oyC5py657uP6aqMOiAlZFwiKSwgYXR0clsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoUGFydG5lckNhbGN1bGF0ZS5pc1Nob3dQZXJCeVN0cihhdHRyWzBdKSA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJfZGVzYyArPSBjYy5qcy5mb3JtYXRTdHIoXCIlczogJWQlXCIsIENvbmZpZy5hdHRyX2RhdGEuZGF0YV9rZXlfdG9fbmFtZVthdHRyWzBdXSwgYXR0clsxXSAqIDAuMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhdHRyX2Rlc2MgKz0gY2MuanMuZm9ybWF0U3RyKFwiJXM6ICVkXCIsIENvbmZpZy5hdHRyX2RhdGEuZGF0YV9rZXlfdG9fbmFtZVthdHRyWzBdXSwgYXR0clsxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIjxjb2xvcj0jNjkzNzA1PlwiICsgYXR0cl9kZXNjICsgXCI8L2NvbG9yPlwiO1xuICAgIH0sXG5cbiAgICAvLyDorr7nva7pgInmi6nnirbmgIEgXG4gICAgc2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uIChiaWQpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0X2JpZCA9PSBiaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdF9iaWQgPSBiaWQ7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdF9pdGVtKSB7XG4gICAgICAgICAgICB2YXIgY29tbW9uX3Jlc19wYXRoID0gUGF0aFRvb2wuZ2V0Q29tbW9uSWNvbVBhdGgoXCJjb21tb25fMTAyOVwiKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlSW1hZ2UodGhpcy5zZWxlY3RfaXRlbS5iZywgY29tbW9uX3Jlc19wYXRoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0X2l0ZW0gPSB0aGlzLml0ZW1fbGlzdFtiaWRdO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RfaXRlbSkge1xuICAgICAgICAgICAgdmFyIGNvbW1vbl9yZXNfcGF0aCA9IFBhdGhUb29sLmdldENvbW1vbkljb21QYXRoKFwiY29tbW9uXzEwMjBcIik7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUltYWdlKHRoaXMuc2VsZWN0X2l0ZW0uYmcsIGNvbW1vbl9yZXNfcGF0aClcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBDb25maWcuaG9ub3JfZGF0YS5kYXRhX3RpdGxlW2JpZF07XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RfaXRlbS52LnN0YXR1cyA9PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5va19sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIuabtCDmjaJcIik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0X2l0ZW0udi5zdGF0dXMgPT0gMCAmJiBjb25maWcuc291cmNlID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMub2tfbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLliY3lvoDojrflj5ZcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub2tfbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmv4Ag5rS7XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGNoYW5nZUltYWdlOiBmdW5jdGlvbiAoc3AsIHJlcykge1xuICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCBmdW5jdGlvbiAoc2Zfb2JqKSB7XG4gICAgICAgICAgICBzcC5zcHJpdGVGcmFtZSA9IHNmX29iajtcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICBvbkhpZGU6IGZ1bmN0aW9uICgpIHtcblxuICAgIH0sXG5cbiAgICBvbkRlbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmxpc3QgPSBudWxsO1xuICAgICAgICB0aGlzLml0ZW1fbGlzdCA9IG51bGw7XG4gICAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUm9sZVRpdGxlUGFuZWw7Il19