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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/vip/view/vip_award_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, '8c585iLMDVETqxZ8ThjFnoN', 'vip_award_window');
// Scripts/mod/vip/view/vip_award_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     奖励vip界面
// <br/>Create: 2019-08-19 10:38:01
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var VipLabelItemPanel = require("vip_award_item_panel");
 
var CommonScrollView = require("common_scrollview");
 
var VipController = require("vip_controller");
 
var VipEvent = require("vip_event");
 
var Vip_awardWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("vip", "vip_award_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.BtnState = 1;
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  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.vip_bg = this.main_container.getChildByName("background").getComponent(cc.Sprite);
    var res_id = PathTool.getBigBg("give_vip_bg", null, "vip");
    this.loadRes(res_id, function (res) {
      this.vip_bg.spriteFrame = res;
    }.bind(this));
    this.time_lab = this.main_container.getChildByName("time_lab").getComponent(cc.Label);
    this.giftCon_nd = this.main_container.getChildByName("giftCon");
    this.close_btn = this.main_container.getChildByName("close_btn");
    this.get_btn = this.main_container.getChildByName("get_btn");
    this.get_btn_btn = this.get_btn.getComponent(cc.Button);
    this.get_btn_lab = this.get_btn.getChildByName("Label").getComponent(cc.Label);
    this.get_btn_lab.string = Utils.TI18N("免费领取");
    this.common_goods_item = ItemsPool.getInstance().getItem("backpack_item");
    this.common_goods_item.initConfig(false, 0.8, null, true);
    this.common_goods_item.setParent(this.main_container);
    this.common_goods_item.setPosition(-120, -200);
    this.common_goods_item.show();
    var tab_size = this.giftCon_nd.getContentSize();
    var setting = {
      item_class: VipLabelItemPanel,
      // 单元类
      start_x: 0,
      // 第一个单元的X起点
      space_x: 0,
      // x方向的间隔
      start_y: 0,
      // 第一个单元的Y起点
      space_y: 0,
      // y方向的间隔
      item_width: 400,
      // 单元的尺寸width
      item_height: 36,
      // 单元的尺寸height
      row: 1,
      // 行数,作用于水平滚动类型
      col: 1,
      // 列数,作用于垂直滚动类型
      need_dynamic: true
    };
    this.info_scroll = new CommonScrollView();
    this.info_scroll.createScroll(this.giftCon_nd, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, tab_size, setting, cc.v2(0.5, 0.5));
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    Utils.onTouchEnd(this.close_btn, function () {
      this.ctrl.openVipAwardWindow(false);
    }.bind(this), 2);
    Utils.onTouchEnd(this.get_btn, function () {
      var vipGiveInfo = VipController.getInstance().getModel().getGiveVipInfo();
      if (!vipGiveInfo) return;
      var refresh = vipGiveInfo.time - gcore.SmartSocket.getTime();
 
      if (vipGiveInfo.state == 0 && refresh > 0) {
        return;
      }
 
      this.ctrl.sender16731();
    }.bind(this), 1); // 赠送vip处理
 
    this.addGlobalEvent(VipEvent.GIVE_VIP_UPDATE, function () {
      this.updateData();
    }.bind(this));
  },
  updateData: function updateData() {
    var vipGiveInfo = VipController.getInstance().getModel().getGiveVipInfo();
    var configReward = Config.vip_data.data_vip_const.vip_give_reward;
    var config = gdata("vip_data", "data_get_reward", [1]);
    if (vipGiveInfo == null || config == null || configReward == null) return; //特权信息
 
    var desc_list = config.spe_desc;
    this.info_scroll.setData(desc_list);
    this.common_goods_item.setData({
      bid: configReward.val[0][0],
      num: configReward.val[0][1]
    });
    var refresh = vipGiveInfo.time - gcore.SmartSocket.getTime();
    this.setCountDownTime(this.time_lab, refresh);
  },
  setCountDownTime: function setCountDownTime(text, less_time) {
    var node = text.node;
    if (!node) return;
    node.stopAllActions();
 
    if (less_time > 0) {
      this.updateBtnState(0);
      this.setTimeFormatString(text, less_time);
      var callfun = cc.callFunc(function () {
        less_time = less_time - 1;
 
        if (less_time <= 0) {
          node.stopAllActions();
          text.string = "";
          this.updateBtnState(1);
        } else {
          this.setTimeFormatString(text, less_time);
          this.updateBtnState(0);
        }
      }.bind(this));
      node.runAction(cc.repeatForever(cc.sequence(cc.delayTime(1), callfun)));
    } else {
      this.time_lab.node.stopAllActions();
      this.time_lab.string = "";
      this.updateBtnState(1);
    }
  },
  setTimeFormatString: function setTimeFormatString(text, time) {
    var TimeTool = require("timetool");
 
    if (time > 0) {
      text.string = TimeTool.getTimeForFunction(time);
    } else {
      text.node.stopAllActions();
      text.string = "";
    }
  },
  updateBtnState: function updateBtnState(state) {
    if (!this.get_btn_btn) return;
    if (this.BtnState == state) return;
    this.BtnState = state;
    var vipGiveInfo = VipController.getInstance().getModel().getGiveVipInfo();
 
    if (vipGiveInfo) {
      var refresh = vipGiveInfo.time - gcore.SmartSocket.getTime();
 
      if (vipGiveInfo.state == 0 && refresh > 0) {
        this.get_btn_btn.interactable = false;
        this.get_btn_btn.enableAutoGrayEffect = true;
        this.get_btn_lab.node.getComponent(cc.LabelOutline).enabled = false;
      } else {
        this.get_btn_btn.interactable = true;
        this.get_btn_btn.enableAutoGrayEffect = false;
        this.get_btn_lab.node.getComponent(cc.LabelOutline).enabled = true;
      }
    }
 
    this.model.setGiveVipStatus();
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(params) {
    this.updateData();
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    if (this.common_goods_item) {
      this.common_goods_item.deleteMe();
      this.common_goods_item = null;
    }
 
    if (this.info_scroll) {
      this.info_scroll.deleteMe();
      this.info_scroll = null;
    }
 
    if (this.time_lab) {
      this.time_lab.node.stopAllActions();
    }
 
    this.ctrl.openVipAwardWindow(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx2aXBcXHZpZXdcXHZpcF9hd2FyZF93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiVmlwTGFiZWxJdGVtUGFuZWwiLCJDb21tb25TY3JvbGxWaWV3IiwiVmlwQ29udHJvbGxlciIsIlZpcEV2ZW50IiwiVmlwX2F3YXJkV2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwidmlld1RhZyIsIlNDRU5FX1RBRyIsImRpYWxvZ3VlIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiQmlnIiwiY3RybCIsImFyZ3VtZW50cyIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJpbml0Q29uZmlnIiwiQnRuU3RhdGUiLCJvcGVuQ2FsbEJhY2siLCJiYWNrZ3JvdW5kIiwicm9vdF93bmQiLCJnZXRDaGlsZEJ5TmFtZSIsInNjYWxlIiwiRklUX1NDQUxFIiwibWFpbl9jb250YWluZXIiLCJ2aXBfYmciLCJnZXRDb21wb25lbnQiLCJTcHJpdGUiLCJyZXNfaWQiLCJnZXRCaWdCZyIsImxvYWRSZXMiLCJyZXMiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJ0aW1lX2xhYiIsIkxhYmVsIiwiZ2lmdENvbl9uZCIsImNsb3NlX2J0biIsImdldF9idG4iLCJnZXRfYnRuX2J0biIsIkJ1dHRvbiIsImdldF9idG5fbGFiIiwic3RyaW5nIiwiVXRpbHMiLCJUSTE4TiIsImNvbW1vbl9nb29kc19pdGVtIiwiSXRlbXNQb29sIiwiZ2V0SW5zdGFuY2UiLCJnZXRJdGVtIiwic2V0UGFyZW50Iiwic2V0UG9zaXRpb24iLCJzaG93IiwidGFiX3NpemUiLCJnZXRDb250ZW50U2l6ZSIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsIm5lZWRfZHluYW1pYyIsImluZm9fc2Nyb2xsIiwiY3JlYXRlU2Nyb2xsIiwidjIiLCJTY3JvbGxWaWV3RGlyIiwidmVydGljYWwiLCJTY3JvbGxWaWV3U3RhcnRQb3MiLCJ0b3AiLCJyZWdpc3RlckV2ZW50Iiwib25Ub3VjaEVuZCIsIm9wZW5WaXBBd2FyZFdpbmRvdyIsInZpcEdpdmVJbmZvIiwiZ2V0R2l2ZVZpcEluZm8iLCJyZWZyZXNoIiwidGltZSIsImdjb3JlIiwiU21hcnRTb2NrZXQiLCJnZXRUaW1lIiwic3RhdGUiLCJzZW5kZXIxNjczMSIsImFkZEdsb2JhbEV2ZW50IiwiR0lWRV9WSVBfVVBEQVRFIiwidXBkYXRlRGF0YSIsImNvbmZpZ1Jld2FyZCIsIkNvbmZpZyIsInZpcF9kYXRhIiwiZGF0YV92aXBfY29uc3QiLCJ2aXBfZ2l2ZV9yZXdhcmQiLCJjb25maWciLCJnZGF0YSIsImRlc2NfbGlzdCIsInNwZV9kZXNjIiwic2V0RGF0YSIsImJpZCIsInZhbCIsIm51bSIsInNldENvdW50RG93blRpbWUiLCJ0ZXh0IiwibGVzc190aW1lIiwibm9kZSIsInN0b3BBbGxBY3Rpb25zIiwidXBkYXRlQnRuU3RhdGUiLCJzZXRUaW1lRm9ybWF0U3RyaW5nIiwiY2FsbGZ1biIsImNhbGxGdW5jIiwicnVuQWN0aW9uIiwicmVwZWF0Rm9yZXZlciIsInNlcXVlbmNlIiwiZGVsYXlUaW1lIiwiVGltZVRvb2wiLCJnZXRUaW1lRm9yRnVuY3Rpb24iLCJpbnRlcmFjdGFibGUiLCJlbmFibGVBdXRvR3JheUVmZmVjdCIsIkxhYmVsT3V0bGluZSIsImVuYWJsZWQiLCJzZXRHaXZlVmlwU3RhdHVzIiwib3BlblJvb3RXbmQiLCJwYXJhbXMiLCJjbG9zZUNhbGxCYWNrIiwiZGVsZXRlTWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxpQkFBaUIsR0FBR0Qs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LFFBQUcsS0FBSzdFLGlCQUFSLEVBQTBCO0FBQ3RCLFdBQUtBLGlCQUFMLENBQXVCOEUsUUFBdkI7QUFDQSxXQUFLOUUsaUJBQUwsR0FBeUIsSUFBekI7QUFDSDs7QUFFRCxRQUFHLEtBQUtvQixXQUFSLEVBQW9CO0FBQ2hCLFdBQUtBLFdBQUwsQ0FBaUIwRCxRQUFqQjtBQUNBLFdBQUsxRCxXQUFMLEdBQW1CLElBQW5CO0FBQ0g7O0FBRUQsUUFBRyxLQUFLL0IsUUFBUixFQUFpQjtBQUNiLFdBQUtBLFFBQUwsQ0FBY3FFLElBQWQsQ0FBbUJDLGNBQW5CO0FBQ0g7O0FBQ0QsU0FBSzVGLElBQUwsQ0FBVThELGtCQUFWLENBQTZCLEtBQTdCO0FBQ0g7QUE5SzBCLENBQVQsQ0FBdEIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDlpZblirF2aXDnlYzpnaJcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA4LTE5IDEwOjM4OjAxXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIFZpcExhYmVsSXRlbVBhbmVsID0gcmVxdWlyZShcInZpcF9hd2FyZF9pdGVtX3BhbmVsXCIpO1xudmFyIENvbW1vblNjcm9sbFZpZXcgPSByZXF1aXJlKFwiY29tbW9uX3Njcm9sbHZpZXdcIik7XG52YXIgVmlwQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ2aXBfY29udHJvbGxlclwiKTtcbnZhciBWaXBFdmVudCA9IHJlcXVpcmUoXCJ2aXBfZXZlbnRcIik7XG5cbnZhciBWaXBfYXdhcmRXaW5kb3cgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwidmlwXCIsIFwidmlwX2F3YXJkX3dpbmRvd1wiKTtcbiAgICAgICAgdGhpcy52aWV3VGFnID0gU0NFTkVfVEFHLmRpYWxvZ3VlOyAgICAgICAgICAgICAgICAvL+ivpeeql+S9k+aJgOWxnnVp5bGC57qnLOWFqOWxj3Vp6ZyA6KaB5ZyodWnlsYIs6Z2e5YWo5bGPdWnlnKhkaWFsb2d1ZeWxgizov5nkuKropoHms6jmhI9cbiAgICAgICAgdGhpcy53aW5fdHlwZSA9IFdpblR5cGUuQmlnOyAgICAgICAgICAgICAgIC8v5piv5ZCm5piv5YWo5bGP56qX5L2TICBXaW5UeXBlLkZ1bGwsIFdpblR5cGUuQmlnLCBXaW5UeXBlLk1pbmksIFdpblR5cGUuVGlwc1xuICAgICAgICB0aGlzLmN0cmwgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKTtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5CdG5TdGF0ZSA9IDE7XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjueahOWbnuiwgyzlj6/ku6XlnKjov5nph4zmjZXojrfnm7jlhbPoioLngrnmiJbogIXnu4Tku7ZcbiAgICBvcGVuQ2FsbEJhY2s6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIik7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5zY2FsZSA9IEZJVF9TQ0FMRTtcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKTtcblxuICAgICAgICB0aGlzLnZpcF9iZyA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJiYWNrZ3JvdW5kXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xuICAgICAgICB2YXIgcmVzX2lkID0gUGF0aFRvb2wuZ2V0QmlnQmcoXCJnaXZlX3ZpcF9iZ1wiLCBudWxsLCBcInZpcFwiKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKHJlc19pZCxmdW5jdGlvbihyZXMpe1xuICAgICAgICAgICAgdGhpcy52aXBfYmcuc3ByaXRlRnJhbWUgPSByZXNcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgICAgIHRoaXMudGltZV9sYWIgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwidGltZV9sYWJcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5naWZ0Q29uX25kID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImdpZnRDb25cIik7XG4gICAgICAgIHRoaXMuY2xvc2VfYnRuID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImNsb3NlX2J0blwiKTtcbiAgICAgICAgdGhpcy5nZXRfYnRuID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImdldF9idG5cIik7XG4gICAgICAgIHRoaXMuZ2V0X2J0bl9idG4gPSB0aGlzLmdldF9idG4uZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbik7XG4gICAgICAgIHRoaXMuZ2V0X2J0bl9sYWIgPSB0aGlzLmdldF9idG4uZ2V0Q2hpbGRCeU5hbWUoXCJMYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmdldF9idG5fbGFiLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5YWN6LS56aKG5Y+WXCIpO1xuICAgICAgICB0aGlzLmNvbW1vbl9nb29kc19pdGVtID0gSXRlbXNQb29sLmdldEluc3RhbmNlKCkuZ2V0SXRlbShcImJhY2twYWNrX2l0ZW1cIik7XG4gICAgICAgIHRoaXMuY29tbW9uX2dvb2RzX2l0ZW0uaW5pdENvbmZpZyhmYWxzZSwgMC44LG51bGwsdHJ1ZSk7XG4gICAgICAgIHRoaXMuY29tbW9uX2dvb2RzX2l0ZW0uc2V0UGFyZW50KHRoaXMubWFpbl9jb250YWluZXIpO1xuICAgICAgICB0aGlzLmNvbW1vbl9nb29kc19pdGVtLnNldFBvc2l0aW9uKC0xMjAsIC0yMDApO1xuICAgICAgICB0aGlzLmNvbW1vbl9nb29kc19pdGVtLnNob3coKTtcblxuICAgICAgICB2YXIgdGFiX3NpemUgPSB0aGlzLmdpZnRDb25fbmQuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgdmFyIHNldHRpbmcgPSB7XG4gICAgICAgICAgICBpdGVtX2NsYXNzOiBWaXBMYWJlbEl0ZW1QYW5lbCwgICAgICAvLyDljZXlhYPnsbtcbiAgICAgICAgICAgIHN0YXJ0X3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XG4gICAgICAgICAgICBzcGFjZV94OiAwLCAgICAgICAgICAgICAgICAgICAgLy8geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeTogMCwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3k6IDAsICAgICAgICAgICAgICAgICAgIC8vIHnmlrnlkJHnmoTpl7TpmpRcbiAgICAgICAgICAgIGl0ZW1fd2lkdGg6IDQwMCwgICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQ6IDM2LCAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4aGVpZ2h0XG4gICAgICAgICAgICByb3c6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGM5pWw77yM5L2c55So5LqO5rC05bmz5rua5Yqo57G75Z6LXG4gICAgICAgICAgICBjb2w6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXG4gICAgICAgICAgICBuZWVkX2R5bmFtaWM6IHRydWVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZm9fc2Nyb2xsID0gbmV3IENvbW1vblNjcm9sbFZpZXcoKTtcbiAgICAgICAgdGhpcy5pbmZvX3Njcm9sbC5jcmVhdGVTY3JvbGwodGhpcy5naWZ0Q29uX25kLCBjYy52MigwLCAwKSwgU2Nyb2xsVmlld0Rpci52ZXJ0aWNhbCwgU2Nyb2xsVmlld1N0YXJ0UG9zLnRvcCwgdGFiX3NpemUsIHNldHRpbmcsIGNjLnYyKDAuNSwgMC41KSlcblxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY2xvc2VfYnRuLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlblZpcEF3YXJkV2luZG93KGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuZ2V0X2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHZpcEdpdmVJbmZvID0gVmlwQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0R2l2ZVZpcEluZm8oKTtcbiAgICAgICAgICAgIGlmKCF2aXBHaXZlSW5mbylyZXR1cm47XG5cbiAgICAgICAgICAgIHZhciByZWZyZXNoID0gdmlwR2l2ZUluZm8udGltZSAtZ2NvcmUuU21hcnRTb2NrZXQuZ2V0VGltZSgpOyAgICAgIFxuICAgICAgICAgICAgaWYodmlwR2l2ZUluZm8uc3RhdGUgPT0gMCAmJiByZWZyZXNoPjApe1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjE2NzMxKCk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSk7XG5cbiAgICAgICAgLy8g6LWg6YCBdmlw5aSE55CGXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoVmlwRXZlbnQuR0lWRV9WSVBfVVBEQVRFLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfSxcblxuICAgIHVwZGF0ZURhdGE6ZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHZpcEdpdmVJbmZvID0gVmlwQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0R2l2ZVZpcEluZm8oKTtcbiAgICAgICAgdmFyIGNvbmZpZ1Jld2FyZCA9IENvbmZpZy52aXBfZGF0YS5kYXRhX3ZpcF9jb25zdC52aXBfZ2l2ZV9yZXdhcmQ7XG4gICAgICAgIHZhciBjb25maWcgPSBnZGF0YShcInZpcF9kYXRhXCIsIFwiZGF0YV9nZXRfcmV3YXJkXCIsIFsxXSk7XG4gICAgICAgIGlmKHZpcEdpdmVJbmZvID09IG51bGwgfHwgY29uZmlnID09IG51bGwgfHwgY29uZmlnUmV3YXJkID09IG51bGwpIHJldHVybjtcbiAgICAgICAgLy/nibnmnYPkv6Hmga9cbiAgICAgICAgdmFyIGRlc2NfbGlzdCA9IGNvbmZpZy5zcGVfZGVzYztcbiAgICAgICAgdGhpcy5pbmZvX3Njcm9sbC5zZXREYXRhKGRlc2NfbGlzdCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNvbW1vbl9nb29kc19pdGVtLnNldERhdGEoe2JpZDpjb25maWdSZXdhcmQudmFsWzBdWzBdLG51bTpjb25maWdSZXdhcmQudmFsWzBdWzFdfSk7XG5cbiAgICAgICAgdmFyIHJlZnJlc2ggPSB2aXBHaXZlSW5mby50aW1lIC1nY29yZS5TbWFydFNvY2tldC5nZXRUaW1lKCk7ICBcbiAgICAgICAgdGhpcy5zZXRDb3VudERvd25UaW1lKHRoaXMudGltZV9sYWIscmVmcmVzaCk7XG4gICAgfSxcblxuICAgIHNldENvdW50RG93blRpbWUodGV4dCxsZXNzX3RpbWUpe1xuICAgICAgICBsZXQgbm9kZSA9IHRleHQubm9kZVxuICAgICAgICBpZighbm9kZSlyZXR1cm5cbiAgICAgICAgbm9kZS5zdG9wQWxsQWN0aW9ucygpO1xuICAgICAgICBpZiAobGVzc190aW1lID4gMCl7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJ0blN0YXRlKDApO1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lRm9ybWF0U3RyaW5nKHRleHQsbGVzc190aW1lKVxuICAgICAgICAgICAgbGV0IGNhbGxmdW4gPSBjYy5jYWxsRnVuYyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGVzc190aW1lID0gbGVzc190aW1lIC0gMTtcbiAgICAgICAgICAgICAgICBpZiAobGVzc190aW1lIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zdG9wQWxsQWN0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LnN0cmluZyA9IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVCdG5TdGF0ZSgxKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVGb3JtYXRTdHJpbmcodGV4dCxsZXNzX3RpbWUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnRuU3RhdGUoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgbm9kZS5ydW5BY3Rpb24oY2MucmVwZWF0Rm9yZXZlcihjYy5zZXF1ZW5jZShjYy5kZWxheVRpbWUoMSksIGNhbGxmdW4pKSlcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLnRpbWVfbGFiLm5vZGUuc3RvcEFsbEFjdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMudGltZV9sYWIuc3RyaW5nID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQnRuU3RhdGUoMSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0VGltZUZvcm1hdFN0cmluZyh0ZXh0LHRpbWUpe1xuICAgICAgICB2YXIgVGltZVRvb2wgPSByZXF1aXJlKFwidGltZXRvb2xcIilcbiAgICAgICAgaWYodGltZSA+IDApe1xuICAgICAgICAgICAgdGV4dC5zdHJpbmcgPSBUaW1lVG9vbC5nZXRUaW1lRm9yRnVuY3Rpb24odGltZSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGV4dC5ub2RlLnN0b3BBbGxBY3Rpb25zKCk7XG4gICAgICAgICAgICB0ZXh0LnN0cmluZyA9IFwiXCJcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVCdG5TdGF0ZTpmdW5jdGlvbihzdGF0ZSl7XG4gICAgICAgIGlmKCF0aGlzLmdldF9idG5fYnRuKXJldHVybjtcbiAgICAgICAgaWYodGhpcy5CdG5TdGF0ZSA9PSBzdGF0ZSlyZXR1cm47XG4gICAgICAgIHRoaXMuQnRuU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIHZpcEdpdmVJbmZvID0gVmlwQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0R2l2ZVZpcEluZm8oKTtcbiAgICAgICAgaWYodmlwR2l2ZUluZm8pe1xuICAgICAgICAgICAgdmFyIHJlZnJlc2ggPSB2aXBHaXZlSW5mby50aW1lIC1nY29yZS5TbWFydFNvY2tldC5nZXRUaW1lKCk7ICAgICAgXG4gICAgICAgICAgICBpZih2aXBHaXZlSW5mby5zdGF0ZSA9PSAwICYmIHJlZnJlc2g+MCl7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRfYnRuX2J0bi5pbnRlcmFjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldF9idG5fYnRuLmVuYWJsZUF1dG9HcmF5RWZmZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldF9idG5fbGFiLm5vZGUuZ2V0Q29tcG9uZW50KGNjLkxhYmVsT3V0bGluZSkuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRfYnRuX2J0bi5pbnRlcmFjdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0X2J0bl9idG4uZW5hYmxlQXV0b0dyYXlFZmZlY3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldF9idG5fbGFiLm5vZGUuZ2V0Q29tcG9uZW50KGNjLkxhYmVsT3V0bGluZSkuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbC5zZXRHaXZlVmlwU3RhdHVzKCk7XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjizmt7vliqDliLDlr7nlupTkuLvoioLngrnkuYvlkI7nmoTlm57osIMs5Lmf5bCx5piv5LiA5Liq56qX5L2T55qE5q2j5byP5YWl5Y+jLOWPr+S7peiuvue9ruS4gOS6m+aVsOaNruS6hlxuICAgIG9wZW5Sb290V25kOmZ1bmN0aW9uKHBhcmFtcyl7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgIH0sXG5cbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLmNvbW1vbl9nb29kc19pdGVtKXtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uX2dvb2RzX2l0ZW0uZGVsZXRlTWUoKTtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uX2dvb2RzX2l0ZW0gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5pbmZvX3Njcm9sbCl7XG4gICAgICAgICAgICB0aGlzLmluZm9fc2Nyb2xsLmRlbGV0ZU1lKClcbiAgICAgICAgICAgIHRoaXMuaW5mb19zY3JvbGwgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy50aW1lX2xhYil7XG4gICAgICAgICAgICB0aGlzLnRpbWVfbGFiLm5vZGUuc3RvcEFsbEFjdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0cmwub3BlblZpcEF3YXJkV2luZG93KGZhbHNlKTtcbiAgICB9LFxufSkiXX0=