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/welfare/view/month_week_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, '59cf3yeDqRBPK2A/rSiyWov', 'month_week_panel');
// Scripts/mod/welfare/view/month_week_panel.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-04-26 14:35:00
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var CommonScrollView = require("common_scrollview");
 
var MonthItem = require("month_item");
 
var WelfareEvent = require("welfare_event");
 
var TimeTool = require("timetool");
 
var ActionEvent = require("action_event");
 
var WelfareConst = require("welfare_const");
 
var Month_weekPanel = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("welfare", "week_month_panel");
  },
  // 可以初始化声明一些变量的
  initConfig: function initConfig() {
    this.ctrl = require("welfare_controller").getInstance();
    this.model = this.ctrl.getModel();
    this.gift_info = Config.misc_data.data_cycle_gift_info;
    this.reward_list = Config.misc_data.data_cycle_gift_reward;
    this.cur_charge_id = 0;
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initPanel: function initPanel() {
    this.main_container = this.seekChild("main_container");
    var title_con = this.seekChild("title_con");
    this.btn_rule = this.seekChild(title_con, "btn_rule");
    this.btn_rule.active = false;
    this.sprite_title = this.seekChild(title_con, "sprite_title", cc.Sprite);
    this.model.setWeekMonthSortData();
    this.ramain_time_lb = this.seekChild("remain_time", cc.Label);
    this.good_cons = this.seekChild(this.main_container, "good_cons");
    var bgSize = this.good_cons.getContentSize();
    var tab_size = cc.size(bgSize.width, bgSize.height);
    var setting = {
      item_class: MonthItem,
      // 单元类
      start_x: 5,
      // 第一个单元的X起点
      space_x: 0,
      // x方向的间隔
      start_y: 0,
      // 第一个单元的Y起点
      space_y: 0,
      // y方向的间隔
      item_width: 688,
      // 单元的尺寸width
      item_height: 136,
      // 单元的尺寸height
      row: 0,
      // 行数,作用于水平滚动类型
      col: 1,
      // 列数,作用于垂直滚动类型
      need_dynamic: true
    };
    this.order_scrollview = new CommonScrollView();
    this.order_scrollview.createScroll(this.good_cons, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, tab_size, setting, cc.v2(0.5, 0.5));
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.addGlobalEvent(WelfareEvent.Updata_Week_Month_Data, function (data) {
      this.getMonthWeekItemInfo(data);
    }, this);
    this.addGlobalEvent(ActionEvent.Is_Charge_Event, function (data) {
      if (data && data.status && data.charge_id) {
        var charge_config = Config.charge_data.data_charge_data[data.charge_id];
 
        if (charge_config && data.status == 1 && data.charge_id == this.cur_charge_id) {
          SDK.pay(charge_config.val, 1, charge_config.id, charge_config.name, null, null, null);
        }
      }
    }, this);
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
  onShow: function onShow(params) {
    this.holiday_id = params;
    var str = "txt_cn_welfare_banner6";
    this.send_holiday_id = 1;
 
    if (this.holiday_id == WelfareConst.WelfareIcon.month) {
      str = "txt_cn_welfare_banner7";
      this.send_holiday_id = 2;
    }
 
    var res_id = PathTool.getIconPath("welfare/welfare_banner", str);
    this.loadRes(res_id, function (res_object) {
      this.sprite_title.spriteFrame = res_object;
    }.bind(this));
 
    if (this.send_holiday_id) {
      this.ctrl.sender21007(this.send_holiday_id);
    }
  },
  getMonthWeekItemInfo: function getMonthWeekItemInfo(data) {
    this.setLessTime(data.ref_time - gcore.SmartSocket.getTime());
 
    if (this.gift_info[data.type]) {
      this.setBuyCount(data.first_gift);
      var list = [];
 
      for (var i in this.gift_info[data.type]) {
        var v = this.gift_info[data.type][i];
        v.count = v.limit_count - this.getBuyCount(v.charge_id);
 
        if (v.count <= 0) {
          v.count = 0;
        }
 
        v.reward = this.getRegisteDayReward(v.charge_id, data.reg_day);
        list.push(v);
      }
 
      this.sortList(list);
      this.order_scrollview.setData(list, function (cell) {
        this.cur_charge_id = cell.getData().charge_id || 0;
      }.bind(this));
    }
  },
  getRegisteDayReward: function getRegisteDayReward(id, day) {
    if (this.reward_list[id]) {
      var num = 1;
 
      for (var i in this.reward_list[id]) {
        var v = this.reward_list[id][i];
 
        if (day >= v.min && day <= v.max) {
          num = v.sort_id;
          break;
        }
      }
 
      return this.reward_list[id][num].reward;
    }
 
    return [];
  },
  sortList: function sortList(list) {
    var sort_func = function sort_func(objA, objB) {
      if (objA.count <= 0 && objB.count > 0) {
        return 1; //换位置
      } else if (objA.count > 0 && objB.count <= 0) {
        return -1; //不换位置
      } else {
        return objA.charge_id - objB.charge_id; //排序
      }
    };
 
    list.sort(sort_func);
  },
  setBuyCount: function setBuyCount(data) {
    if (!data || Utils.next(data) == null) return;
    this.buyCountData = {};
 
    for (var i in data) {
      this.buyCountData[data[i].id] = data[i].count;
    }
  },
  getBuyCount: function getBuyCount(id) {
    if (this.buyCountData && this.buyCountData[id]) {
      return this.buyCountData[id];
    }
 
    return 0;
  },
  //设置倒计时
  setLessTime: function setLessTime(less_time) {
    if (this.ramain_time_lb == null) return;
    this.ramain_time_lb.node.stopAllActions();
 
    if (less_time > 0) {
      this.setTimeFormatString(less_time);
 
      var func = function () {
        less_time = less_time - 1;
 
        if (less_time < 0) {
          this.ramain_time_lb.node.stopAllActions();
          this.ramain_time_lb.string = "00:00:00";
        } else {
          this.setTimeFormatString(less_time);
        }
      }.bind(this);
 
      this.ramain_time_lb.node.runAction(cc.repeatForever(cc.sequence(cc.delayTime(1), cc.callFunc(func))));
    } else {
      this.setTimeFormatString(less_time);
    }
  },
  setTimeFormatString: function setTimeFormatString(time) {
    if (time > 0) {
      this.ramain_time_lb.string = TimeTool.getTimeForFunction(time);
    } else {
      this.ramain_time_lb.node.stopAllActions();
      this.ramain_time_lb.string = "00:00:00";
    }
  },
  setVisibleStatus: function setVisibleStatus(bool) {
    bool = bool || false;
    this.setVisible(bool);
 
    if (bool == true && this.send_holiday_id) {
      this.ctrl.sender21007(this.send_holiday_id);
    }
  },
  // 面板设置不可见的回调,这里做一些不可见的屏蔽处理
  onHide: function onHide() {},
  // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
  onDelete: function onDelete() {
    if (this.order_scrollview) {
      this.order_scrollview.deleteMe();
      this.order_scrollview = null;
    }
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx3ZWxmYXJlXFx2aWV3XFxtb250aF93ZWVrX3BhbmVsLmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIkNvbW1vblNjcm9sbFZpZXciLCJNb250aEl0ZW0iLCJXZWxmYXJlRXZlbnQiLCJUaW1lVG9vbCIsIkFjdGlvbkV2ZW50IiwiV2VsZmFyZUNvbnN0IiwiTW9udGhfd2Vla1BhbmVsIiwiY2MiLCJDbGFzcyIsIkJhc2VQYW5lbCIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsImluaXRDb25maWciLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJtb2RlbCIsImdldE1vZGVsIiwiZ2lmdF9pbmZvIiwiQ29uZmlnIiwibWlzY19kYXRhIiwiZGF0YV9jeWNsZV9naWZ0X2luZm8iLCJyZXdhcmRfbGlzdCIsImRhdGFfY3ljbGVfZ2lmdF9yZXdhcmQiLCJjdXJfY2hhcmdlX2lkIiwiaW5pdFBhbmVsIiwibWFpbl9jb250YWluZXIiLCJzZWVrQ2hpbGQiLCJ0aXRsZV9jb24iLCJidG5fcnVsZSIsImFjdGl2ZSIsInNwcml0ZV90aXRsZSIsIlNwcml0ZSIsInNldFdlZWtNb250aFNvcnREYXRhIiwicmFtYWluX3RpbWVfbGIiLCJMYWJlbCIsImdvb2RfY29ucyIsImJnU2l6ZSIsImdldENvbnRlbnRTaXplIiwidGFiX3NpemUiLCJzaXplIiwid2lkdGgiLCJoZWlnaHQiLCJzZXR0aW5nIiwiaXRlbV9jbGFzcyIsInN0YXJ0X3giLCJzcGFjZV94Iiwic3RhcnRfeSIsInNwYWNlX3kiLCJpdGVtX3dpZHRoIiwiaXRlbV9oZWlnaHQiLCJyb3ciLCJjb2wiLCJuZWVkX2R5bmFtaWMiLCJvcmRlcl9zY3JvbGx2aWV3IiwiY3JlYXRlU2Nyb2xsIiwidjIiLCJTY3JvbGxWaWV3RGlyIiwidmVydGljYWwiLCJTY3JvbGxWaWV3U3RhcnRQb3MiLCJ0b3AiLCJyZWdpc3RlckV2ZW50IiwiYWRkR2xvYmFsRXZlbnQiLCJVcGRhdGFfV2Vla19Nb250aF9EYXRhIiwiZGF0YSIsImdldE1vbnRoV2Vla0l0ZW1JbmZvIiwiSXNfQ2hhcmdlX0V2ZW50Iiwic3RhdHVzIiwiY2hhcmdlX2lkIiwiY2hhcmdlX2NvbmZpZyIsImNoYXJnZV9kYXRhIiwiZGF0YV9jaGFyZ2VfZGF0YSIsIlNESyIsInBheSIsInZhbCIsImlkIiwibmFtZSIsIm9uU2hvdyIsInBhcmFtcyIsImhvbGlkYXlfaWQiLCJzdHIiLCJzZW5kX2hvbGlkYXlfaWQiLCJXZWxmYXJlSWNvbiIsIm1vbnRoIiwicmVzX2lkIiwiZ2V0SWNvblBhdGgiLCJsb2FkUmVzIiwicmVzX29iamVjdCIsInNwcml0ZUZyYW1lIiwiYmluZCIsInNlbmRlcjIxMDA3Iiwic2V0TGVzc1RpbWUiLCJyZWZfdGltZSIsImdjb3JlIiwiU21hcnRTb2NrZXQiLCJnZXRUaW1lIiwidHlwZSIsInNldEJ1eUNvdW50IiwiZmlyc3RfZ2lmdCIsImxpc3QiLCJpIiwidiIsImNvdW50IiwibGltaXRfY291bnQiLCJnZXRCdXlDb3VudCIsInJld2FyZCIsImdldFJlZ2lzdGVEYXlSZXdhcmQiLCJyZWdfZGF5IiwicHVzaCIsInNvcnRMaXN0Iiwic2V0RGF0YSIsImNlbGwiLCJnZXREYXRhIiwiZGF5IiwibnVtIiwibWluIiwibWF4Iiwic29ydF9pZCIsInNvcnRfZnVuYyIsIm9iakEiLCJvYmpCIiwic29ydCIsIlV0aWxzIiwibmV4dCIsImJ1eUNvdW50RGF0YSIsImxlc3NfdGltZSIsIm5vZGUiLCJzdG9wQWxsQWN0aW9ucyIsInNldFRpbWVGb3JtYXRTdHJpbmciLCJmdW5jIiwic3RyaW5nIiwicnVuQWN0aW9uIiwicmVwZWF0Rm9yZXZlciIsInNlcXVlbmNlIiwiZGVsYXlUaW1lIiwiY2FsbEZ1bmMiLCJ0aW1lIiwiZ2V0VGltZUZvckZ1bmN0aW9uIiwic2V0VmlzaWJsZVN0YXR1cyIsImJvb2wiLCJzZXRWaXNpYmxlIiwib25IaWRlIiwib25EZWxldGUiLCJkZWxldGVNZSJdLCJtYXBw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b3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDov5nph4zmmK/mj4/ov7Dov5nkuKrnqpfkvZPnmoTkvZznlKjnmoRcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA0LTI2IDE0OjM1OjAwXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIENvbW1vblNjcm9sbFZpZXcgPSByZXF1aXJlKFwiY29tbW9uX3Njcm9sbHZpZXdcIik7XG52YXIgTW9udGhJdGVtID0gcmVxdWlyZShcIm1vbnRoX2l0ZW1cIik7XG52YXIgV2VsZmFyZUV2ZW50ID0gcmVxdWlyZShcIndlbGZhcmVfZXZlbnRcIik7XG52YXIgVGltZVRvb2wgPSByZXF1aXJlKFwidGltZXRvb2xcIik7XG52YXIgQWN0aW9uRXZlbnQgPSByZXF1aXJlKFwiYWN0aW9uX2V2ZW50XCIpO1xudmFyIFdlbGZhcmVDb25zdCA9IHJlcXVpcmUoXCJ3ZWxmYXJlX2NvbnN0XCIpO1xuXG52YXIgTW9udGhfd2Vla1BhbmVsID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VQYW5lbCxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJ3ZWxmYXJlXCIsIFwid2Vla19tb250aF9wYW5lbFwiKTtcbiAgICB9LFxuXG4gICAgLy8g5Y+v5Lul5Yid5aeL5YyW5aOw5piO5LiA5Lqb5Y+Y6YeP55qEXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmN0cmwgPSByZXF1aXJlKFwid2VsZmFyZV9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCk7XG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKTtcbiAgICAgICAgdGhpcy5naWZ0X2luZm8gPSBDb25maWcubWlzY19kYXRhLmRhdGFfY3ljbGVfZ2lmdF9pbmZvXG4gICAgICAgIHRoaXMucmV3YXJkX2xpc3QgPSBDb25maWcubWlzY19kYXRhLmRhdGFfY3ljbGVfZ2lmdF9yZXdhcmRcbiAgICAgICAgdGhpcy5jdXJfY2hhcmdlX2lkID0gMDtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRQYW5lbDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyID0gdGhpcy5zZWVrQ2hpbGQoXCJtYWluX2NvbnRhaW5lclwiKTtcbiAgICAgICAgdmFyIHRpdGxlX2NvbiA9IHRoaXMuc2Vla0NoaWxkKFwidGl0bGVfY29uXCIpO1xuICAgICAgICB0aGlzLmJ0bl9ydWxlID0gdGhpcy5zZWVrQ2hpbGQodGl0bGVfY29uLCBcImJ0bl9ydWxlXCIpO1xuICAgICAgICB0aGlzLmJ0bl9ydWxlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNwcml0ZV90aXRsZSA9IHRoaXMuc2Vla0NoaWxkKHRpdGxlX2NvbiwgXCJzcHJpdGVfdGl0bGVcIiwgY2MuU3ByaXRlKTtcblxuICAgICAgICB0aGlzLm1vZGVsLnNldFdlZWtNb250aFNvcnREYXRhKCk7XG5cbiAgICAgICAgdGhpcy5yYW1haW5fdGltZV9sYiA9IHRoaXMuc2Vla0NoaWxkKFwicmVtYWluX3RpbWVcIiwgY2MuTGFiZWwpO1xuXG4gICAgICAgIHRoaXMuZ29vZF9jb25zID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX2NvbnRhaW5lciwgXCJnb29kX2NvbnNcIik7XG4gICAgICAgIHZhciBiZ1NpemUgPSB0aGlzLmdvb2RfY29ucy5nZXRDb250ZW50U2l6ZSgpO1xuICAgICAgICB2YXIgdGFiX3NpemUgPSBjYy5zaXplKGJnU2l6ZS53aWR0aCwgYmdTaXplLmhlaWdodCk7XG4gICAgICAgIHZhciBzZXR0aW5nID0ge1xuICAgICAgICAgICAgaXRlbV9jbGFzczogTW9udGhJdGVtLCAgICAgIC8vIOWNleWFg+exu1xuICAgICAgICAgICAgc3RhcnRfeDogNSwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFjotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyB45pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBzdGFydF95OiAwLCAgICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWei1t+eCuVxuICAgICAgICAgICAgc3BhY2VfeTogMCwgICAgICAgICAgICAgICAgICAgLy8geeaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgaXRlbV93aWR0aDogNjg4LCAgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuHdpZHRoXG4gICAgICAgICAgICBpdGVtX2hlaWdodDogMTM2LCAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4aGVpZ2h0XG4gICAgICAgICAgICByb3c6IDAsICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGM5pWw77yM5L2c55So5LqO5rC05bmz5rua5Yqo57G75Z6LXG4gICAgICAgICAgICBjb2w6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXG4gICAgICAgICAgICBuZWVkX2R5bmFtaWM6IHRydWVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9yZGVyX3Njcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpXG4gICAgICAgIHRoaXMub3JkZXJfc2Nyb2xsdmlldy5jcmVhdGVTY3JvbGwodGhpcy5nb29kX2NvbnMsIGNjLnYyKDAsIDApLCBTY3JvbGxWaWV3RGlyLnZlcnRpY2FsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCB0YWJfc2l6ZSwgc2V0dGluZywgY2MudjIoMC41LCAwLjUpKVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KFdlbGZhcmVFdmVudC5VcGRhdGFfV2Vla19Nb250aF9EYXRhLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5nZXRNb250aFdlZWtJdGVtSW5mbyhkYXRhKVxuICAgICAgICB9LCB0aGlzKVxuXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoQWN0aW9uRXZlbnQuSXNfQ2hhcmdlX0V2ZW50LCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5zdGF0dXMgJiYgZGF0YS5jaGFyZ2VfaWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hhcmdlX2NvbmZpZyA9IENvbmZpZy5jaGFyZ2VfZGF0YS5kYXRhX2NoYXJnZV9kYXRhW2RhdGEuY2hhcmdlX2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoY2hhcmdlX2NvbmZpZyAmJiBkYXRhLnN0YXR1cyA9PSAxICYmIGRhdGEuY2hhcmdlX2lkID09IHRoaXMuY3VyX2NoYXJnZV9pZCkge1xuICAgICAgICAgICAgICAgICAgICBTREsucGF5KGNoYXJnZV9jb25maWcudmFsLCAxLCBjaGFyZ2VfY29uZmlnLmlkLCBjaGFyZ2VfY29uZmlnLm5hbWUsbnVsbCxudWxsLG51bGwpICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMpXG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjizmt7vliqDliLDlr7nlupTkuLvoioLngrnkuYvlkI7nmoTlm57osIPlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvblNob3c6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdGhpcy5ob2xpZGF5X2lkID0gcGFyYW1zO1xuICAgICAgICB2YXIgc3RyID0gXCJ0eHRfY25fd2VsZmFyZV9iYW5uZXI2XCI7XG4gICAgICAgIHRoaXMuc2VuZF9ob2xpZGF5X2lkID0gMTtcbiAgICAgICAgaWYgKHRoaXMuaG9saWRheV9pZCA9PSBXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24ubW9udGgpIHtcbiAgICAgICAgICAgIHN0ciA9IFwidHh0X2NuX3dlbGZhcmVfYmFubmVyN1wiO1xuICAgICAgICAgICAgdGhpcy5zZW5kX2hvbGlkYXlfaWQgPSAyO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXNfaWQgPSBQYXRoVG9vbC5nZXRJY29uUGF0aChcIndlbGZhcmUvd2VsZmFyZV9iYW5uZXJcIiwgc3RyKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKHJlc19pZCwgZnVuY3Rpb24gKHJlc19vYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc3ByaXRlX3RpdGxlLnNwcml0ZUZyYW1lID0gcmVzX29iamVjdDtcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICBpZiAodGhpcy5zZW5kX2hvbGlkYXlfaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIyMTAwNyh0aGlzLnNlbmRfaG9saWRheV9pZClcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRNb250aFdlZWtJdGVtSW5mbzogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5zZXRMZXNzVGltZShkYXRhLnJlZl90aW1lIC0gZ2NvcmUuU21hcnRTb2NrZXQuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKHRoaXMuZ2lmdF9pbmZvW2RhdGEudHlwZV0pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QnV5Q291bnQoZGF0YS5maXJzdF9naWZ0KTtcbiAgICAgICAgICAgIHZhciBsaXN0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuZ2lmdF9pbmZvW2RhdGEudHlwZV0pIHtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IHRoaXMuZ2lmdF9pbmZvW2RhdGEudHlwZV1baV07XG4gICAgICAgICAgICAgICAgdi5jb3VudCA9IHYubGltaXRfY291bnQgLSB0aGlzLmdldEJ1eUNvdW50KHYuY2hhcmdlX2lkKTtcbiAgICAgICAgICAgICAgICBpZiAodi5jb3VudCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHYuY291bnQgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2LnJld2FyZCA9IHRoaXMuZ2V0UmVnaXN0ZURheVJld2FyZCh2LmNoYXJnZV9pZCwgZGF0YS5yZWdfZGF5KTtcbiAgICAgICAgICAgICAgICBsaXN0LnB1c2godik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNvcnRMaXN0KGxpc3QpO1xuICAgICAgICAgICAgdGhpcy5vcmRlcl9zY3JvbGx2aWV3LnNldERhdGEobGlzdCwgZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cl9jaGFyZ2VfaWQgPSBjZWxsLmdldERhdGEoKS5jaGFyZ2VfaWQgfHwgMDtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRSZWdpc3RlRGF5UmV3YXJkOiBmdW5jdGlvbiAoaWQsIGRheSkge1xuICAgICAgICBpZiAodGhpcy5yZXdhcmRfbGlzdFtpZF0pIHtcbiAgICAgICAgICAgIHZhciBudW0gPSAxO1xuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLnJld2FyZF9saXN0W2lkXSkge1xuICAgICAgICAgICAgICAgIHZhciB2ID0gdGhpcy5yZXdhcmRfbGlzdFtpZF1baV1cbiAgICAgICAgICAgICAgICBpZiAoZGF5ID49IHYubWluICYmIGRheSA8PSB2Lm1heCkge1xuICAgICAgICAgICAgICAgICAgICBudW0gPSB2LnNvcnRfaWQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmV3YXJkX2xpc3RbaWRdW251bV0ucmV3YXJkXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdXG4gICAgfSxcblxuICAgIHNvcnRMaXN0OiBmdW5jdGlvbiAobGlzdCkge1xuICAgICAgICB2YXIgc29ydF9mdW5jID0gZnVuY3Rpb24gKG9iakEsIG9iakIpIHtcbiAgICAgICAgICAgIGlmIChvYmpBLmNvdW50IDw9IDAgJiYgb2JqQi5jb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMSAvL+aNouS9jee9rlxuICAgICAgICAgICAgfSBlbHNlIGlmIChvYmpBLmNvdW50ID4gMCAmJiBvYmpCLmNvdW50IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTEgLy/kuI3mjaLkvY3nva5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iakEuY2hhcmdlX2lkIC0gb2JqQi5jaGFyZ2VfaWQgLy/mjpLluo9cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaXN0LnNvcnQoc29ydF9mdW5jKVxuICAgIH0sXG5cbiAgICBzZXRCdXlDb3VudDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKCFkYXRhIHx8IFV0aWxzLm5leHQoZGF0YSkgPT0gbnVsbCkgcmV0dXJuXG4gICAgICAgIHRoaXMuYnV5Q291bnREYXRhID0ge307XG4gICAgICAgIGZvciAodmFyIGkgaW4gZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5idXlDb3VudERhdGFbZGF0YVtpXS5pZF0gPSBkYXRhW2ldLmNvdW50O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldEJ1eUNvdW50OiBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgaWYgKHRoaXMuYnV5Q291bnREYXRhICYmIHRoaXMuYnV5Q291bnREYXRhW2lkXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnV5Q291bnREYXRhW2lkXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwXG4gICAgfSxcblxuICAgIC8v6K6+572u5YCS6K6h5pe2XG4gICAgc2V0TGVzc1RpbWU6IGZ1bmN0aW9uIChsZXNzX3RpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMucmFtYWluX3RpbWVfbGIgPT0gbnVsbCkgcmV0dXJuXG4gICAgICAgIHRoaXMucmFtYWluX3RpbWVfbGIubm9kZS5zdG9wQWxsQWN0aW9ucygpO1xuICAgICAgICBpZiAobGVzc190aW1lID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lRm9ybWF0U3RyaW5nKGxlc3NfdGltZSk7XG4gICAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXNzX3RpbWUgPSBsZXNzX3RpbWUgLSAxO1xuICAgICAgICAgICAgICAgIGlmIChsZXNzX3RpbWUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmFtYWluX3RpbWVfbGIubm9kZS5zdG9wQWxsQWN0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJhbWFpbl90aW1lX2xiLnN0cmluZyA9IFwiMDA6MDA6MDBcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVGb3JtYXRTdHJpbmcobGVzc190aW1lKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxuICAgICAgICAgICAgdGhpcy5yYW1haW5fdGltZV9sYi5ub2RlLnJ1bkFjdGlvbihjYy5yZXBlYXRGb3JldmVyKGNjLnNlcXVlbmNlKGNjLmRlbGF5VGltZSgxKSwgY2MuY2FsbEZ1bmMoZnVuYykpKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZUZvcm1hdFN0cmluZyhsZXNzX3RpbWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNldFRpbWVGb3JtYXRTdHJpbmc6IGZ1bmN0aW9uICh0aW1lKSB7XG4gICAgICAgIGlmICh0aW1lID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yYW1haW5fdGltZV9sYi5zdHJpbmcgPSBUaW1lVG9vbC5nZXRUaW1lRm9yRnVuY3Rpb24odGltZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJhbWFpbl90aW1lX2xiLm5vZGUuc3RvcEFsbEFjdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMucmFtYWluX3RpbWVfbGIuc3RyaW5nID0gXCIwMDowMDowMFwiO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNldFZpc2libGVTdGF0dXM6IGZ1bmN0aW9uIChib29sKSB7XG4gICAgICAgIGJvb2wgPSBib29sIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLnNldFZpc2libGUoYm9vbCk7XG4gICAgICAgIGlmIChib29sID09IHRydWUgJiYgdGhpcy5zZW5kX2hvbGlkYXlfaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIyMTAwNyh0aGlzLnNlbmRfaG9saWRheV9pZClcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpnaLmnb/orr7nva7kuI3lj6/op4HnmoTlm57osIMs6L+Z6YeM5YGa5LiA5Lqb5LiN5Y+v6KeB55qE5bGP6JS95aSE55CGXG4gICAgb25IaWRlOiBmdW5jdGlvbiAoKSB7XG5cbiAgICB9LFxuXG4gICAgLy8g5b2T6Z2i5p2/5LuO5Li76IqC54K56YeK5pS+5o6J55qE6LCD55So5o6l5Y+jLOmcgOimgeaJi+WKqOiwg+eUqCzogIzkuJTkuZ/kuIDlrpropoHosIPnlKhcbiAgICBvbkRlbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5vcmRlcl9zY3JvbGx2aWV3KSB7XG4gICAgICAgICAgICB0aGlzLm9yZGVyX3Njcm9sbHZpZXcuZGVsZXRlTWUoKTtcbiAgICAgICAgICAgIHRoaXMub3JkZXJfc2Nyb2xsdmlldyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxufSkiXX0=