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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/rank/view/rank_reward_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, '20a3fnCjSRE36pqctfvN54A', 'rank_reward_window');
// Scripts/mod/rank/view/rank_reward_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-04-23 20:35:06 
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var CommonScrollView = require("common_scrollview");
 
var RankRewardItem = require("rank_reward_item");
 
var ActionEvent = require("action_event");
 
var Rank_rewardWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("rank", "rank_reward_panel");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Big; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.ctrl = require("rank_controller").getInstance();
    this.item_list = [];
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.background = this.seekChild("background");
    this.background.scale = FIT_SCALE;
    this.main_container = this.seekChild("main_container");
    this.rank_panel = this.seekChild("rank_panel");
    this.my_rank_nd = this.seekChild("my_rank");
    this.rank_index_lb = this.seekChild(this.my_rank_nd, "rank_id", cc.Label);
    this.label_tips_lb = this.seekChild(this.my_rank_nd, "label_tips", cc.Label);
    this.item_scrollview_nd = this.seekChild(this.my_rank_nd, "item_scrollview");
    this.item_scrollview_size = this.item_scrollview_nd.getContentSize();
    this.item_scrollview_sv = this.item_scrollview_nd.getComponent(cc.ScrollView);
    this.item_content_nd = this.seekChild(this.item_scrollview_nd, "content");
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    Utils.onTouchEnd(this.background, function () {
      this.ctrl.openRankRewardPanel(false);
    }.bind(this), 2);
    this.addGlobalEvent(ActionEvent.RANK_REWARD_LIST, function (data) {
      if (!data) return;
      this.cell_data_list = data.rank_award;
      this.cell_data_list.sort(function (a, b) {
        if (a.rank1 < b.rank2) {
          return -1;
        } else {
          return 1;
        }
      });
 
      if (this.cell_data_list == 0) {
        this.showEmptyIcon();
      } else {
        this.updateRankList();
      }
 
      this.updateMyRankInfo(data.rank);
    }, this);
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(params) {
    this.rank_reward_type = params || 1;
 
    require("action_controller").getInstance().send16650(this.rank_reward_type);
  },
  //更新我的排行信息
  updateMyRankInfo: function updateMyRankInfo(my_rank) {
    if (!this.cell_data_list) return;
 
    if (my_rank == null || my_rank == 0) {
      this.rank_index_lb.string = "";
      this.label_tips_lb.string = Utils.TI18N("未上榜");
      return;
    }
 
    this.rank_index_lb.string = my_rank;
    var cell_data = null;
 
    for (var i in this.cell_data_list) {
      var data = this.cell_data_list[i];
 
      if (data.rank1 && data.rank2) {
        if (my_rank >= data.rank1 && my_rank <= data.rank2) {
          cell_data = data;
        }
      } else if (data.rank1) {
        if (my_rank <= data.rank1) {
          cell_data = data;
        }
      }
    }
 
    if (!cell_data) return;
    var scale = 0.8;
    var offsetX = 10;
    var item_count = Utils.getArrLen(cell_data.award);
    var item_width = BackPackItem.Width * scale;
    var total_width = (item_width + offsetX) * item_count;
    var max_width = Math.max(this.item_scrollview_size.width, total_width);
    this.item_content_nd.setContentSize(max_width, this.item_scrollview_size.height);
    this.item_content_nd.x = 0;
    var index = 0;
 
    for (var i in cell_data.award) {
      var v = cell_data.award[i];
 
      if (!this.item_list[i]) {
        var item = ItemsPool.getInstance().getItem("backpack_item");
        item.initConfig(false, scale, false, true);
        item.show();
        item.setParent(this.item_content_nd);
        item.setData({
          bid: v.bid,
          num: v.num
        });
        item.setPosition(index * (item_width + offsetX) + 60, 0);
        this.item_list[i] = item;
        index = index + 1;
      }
    }
  },
  updateRankList: function updateRankList() {
    if (this.common_scrollview) {
      this.common_scrollview.setData(this.cell_data_list);
      return;
    }
 
    var lay_scrollview = this.seekChild(this.main_container, "lay_scrollview");
    var bgSize = lay_scrollview.getContentSize();
    var tab_size = cc.size(bgSize.width, bgSize.height);
    var setting = {
      item_class: RankRewardItem,
      // 单元类
      start_x: 0,
      // 第一个单元的X起点
      space_x: 0,
      // x方向的间隔
      start_y: 0,
      // 第一个单元的Y起点
      space_y: 0,
      // y方向的间隔
      item_width: 634,
      // 单元的尺寸width
      item_height: 142,
      // 单元的尺寸height
      row: 0,
      // 行数,作用于水平滚动类型
      col: 1,
      // 列数,作用于垂直滚动类型
      need_dynamic: true
    };
    this.common_scrollview = new CommonScrollView();
    this.common_scrollview.createScroll(lay_scrollview, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, tab_size, setting, cc.v2(0.5, 0.5));
    this.common_scrollview.setData(this.cell_data_list);
  },
  showEmptyIcon: function showEmptyIcon(bool) {
    if (!this.empty_con && bool == false) return;
 
    if (!this.empty_con) {
      var size = cc.size(200, 200);
      this.empty_con = new cc.Node();
      this.empty_con.setContentSize(size);
      this.empty_con.setAnchorPoint(cc.v2(0.5, 0.5));
      this.empty_con.setPosition(cc.v2(0, 0));
      this.main_panel.addChild(this.empty_con);
      var res = PathTool.getBigBg("bigbg_3");
      this.empty_bg = Utils.createImage(this.empty_con, null, 0, 0, cc.v2(0.5, 0.5), false);
      this.loadRes(res, function (sf_obj) {
        this.empty_bg.spriteFrame = sf_obj;
      }.bind(this));
      this.empty_label = Utils.createLabel(26, new cc.Color(0x68, 0x45, 0x2a, 0xff), null, 0, -100, "", this.empty_con, 0, cc.v2(0.5, 0.5));
    }
 
    var str = Utils.TI18N("暂无奖励数据");
    this.empty_label.string = str;
    this.empty_con.active = bool;
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    if (this.common_scrollview) {
      this.common_scrollview.deleteMe();
      this.common_scrollview = null;
    }
 
    if (this.item_list) {
      for (var k in this.item_list) {
        this.item_list[k].deleteMe();
        this.item_list[k] = null;
      }
 
      this.item_list = null;
    }
 
    if (this.empty_con) {
      this.empty_con.destroy();
      this.empty_label.destroy();
      this.empty_bg.destroy();
      this.empty_con = null;
      this.empty_bg = null;
      this.empty_label = null;
    }
 
    this.ctrl.openRankRewardPanel(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyYW5rXFx2aWV3XFxyYW5rX3Jld2FyZF93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiQ29tbW9uU2Nyb2xsVmlldyIsIlJhbmtSZXdhcmRJdGVtIiwiQWN0aW9uRXZlbnQiLCJSYW5rX3Jld2FyZFdpbmRvdyIsImNjIiwiQ2xhc3MiLCJCYXNlVmlldyIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsInZpZXdUYWciLCJTQ0VORV9UQUciLCJkaWFsb2d1ZSIsIndpbl90eXBlIiwiV2luVHlwZSIsIkJpZyIsImluaXRDb25maWciLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJpdGVtX2xpc3QiLCJvcGVuQ2FsbEJhY2siLCJiYWNrZ3JvdW5kIiwic2Vla0NoaWxkIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJtYWluX2NvbnRhaW5lciIsInJhbmtfcGFuZWwiLCJteV9yYW5rX25kIiwicmFua19pbmRleF9sYiIsIkxhYmVsIiwibGFiZWxfdGlwc19sYiIsIml0ZW1fc2Nyb2xsdmlld19uZCIsIml0ZW1fc2Nyb2xsdmlld19zaXplIiwiZ2V0Q29udGVudFNpemUiLCJpdGVtX3Njcm9sbHZpZXdfc3YiLCJnZXRDb21wb25lbnQiLCJTY3JvbGxWaWV3IiwiaXRlbV9jb250ZW50X25kIiwicmVnaXN0ZXJFdmVudCIsIlV0aWxzIiwib25Ub3VjaEVuZCIsIm9wZW5SYW5rUmV3YXJkUGFuZWwiLCJiaW5kIiwiYWRkR2xvYmFsRXZlbnQiLCJSQU5LX1JFV0FSRF9MSVNUIiwiZGF0YSIsImNlbGxfZGF0YV9saXN0IiwicmFua19hd2FyZCIsInNvcnQiLCJhIiwiYiIsInJhbmsxIiwicmFuazIiLCJzaG93RW1wdHlJY29uIiwidXBkYXRlUmFua0xpc3QiLCJ1cGRhdGVNeVJhbmtJbmZvIiwicmFuayIsIm9wZW5Sb290V25kIiwicGFyYW1zIiwicmFua19yZXdhcmRfdHlwZSIsInNlbmQxNjY1MCIsIm15X3JhbmsiLCJzdHJpbmciLCJUSTE4TiIsImNlbGxfZGF0YSIsImkiLCJvZmZzZXRYIiwiaXRlbV9jb3VudCIsImdldEFyckxlbiIsImF3YXJkIiwiaXRlbV93aWR0aCIsIkJhY2tQYWNrSXRlbSIsIldpZHRoIiwidG90YWxfd2lkdGgiLCJtYXhfd2lkdGgiLCJNYXRoIiwibWF4Iiwid2lkdGgiLCJzZXRDb250ZW50U2l6ZSIsImhlaWdodCIsIngiLCJpbmRleCIsInYiLCJpdGVtIiwiSXRlbXNQb29sIiwiZ2V0SXRlbSIsInNob3ciLCJzZXRQYXJlbnQiLCJzZXREYXRhIiwiYmlkIiwibnVtIiwic2V0UG9zaXRpb24iLCJjb21tb25fc2Nyb2xsdmlldyIsImxheV9zY3JvbGx2aWV3IiwiYmdTaXplIiwidGFiX3NpemUiLCJzaXplIiwic2V0dGluZyIsIml0ZW1fY2xhc3MiLCJzdGFydF94Iiwic3BhY2VfeCIsInN0YXJ0X3kiLCJzcGFjZV95IiwiaXRlbV9oZWlnaHQiLCJyb3ciLCJjb2wiLCJuZWVkX2R5bmFtaWMiLCJjcmVhdGVTY3JvbGwiLCJ2MiIsIlNjcm9sbFZpZXdEaXIiLCJ2ZXJ0aWNhbCIsIlNjcm9sbFZpZXdTdGFydFBvcyIsInRvcCIsImJvb2wiLCJlbXB0eV9jb24iLCJOb2RlIiwic2V0QW5jaG9yUG9pbnQiLCJtYWluX3BhbmVsIiwiYWRkQ2hpbGQiLCJyZXMiLCJnZXRCaWdCZyIsImVtcHR5X2JnIiwiY3JlYXRlSW1hZ2UiLCJsb2FkUmVzIiwic2Zfb2JqIiwic3ByaXRlRnJhbWUiLCJlbXB0eV9sYWJlbCIsImNyZWF0ZUxhYmVsIiwiQ29sb3IiLCJzdHIiLCJhY3RpdmUiLCJjbG9zZUNhbGxCYWNrIiwiZGVsZXRlTWUiLCJrIiwiZGVzdHJveSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGdCQUFnQixHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUUsY0FBYyxHQUFHRixPQUFPLENBQUMsa0JBQUQsQ0FBNUI7O0FBQ0EsSUFBSUcsV0FBVyxHQUFHSCxPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFFQSxJQUFJSSxpQkFBaUIsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDN0IsYUFBU0MsUUFEb0I7QUFFN0JDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JWLFFBQVEsQ0FBQ1csYUFBVCxDQUF1QixNQUF2QixFQUErQixtQkFBL0IsQ0FBbEI7QUFDQSxTQUFLQyxPQUFMLEdBQWVDLFNBQVMsQ0FBQ0MsUUFBekIsQ0FGYyxDQUVvQzs7QUFDbEQsU0FBS0MsUUFBTCxHQUFnQkMsT0FBTyxDQUFDQyxHQUF4QixDQUhjLENBRzZCO0FBQzlDLEdBTjRCO0FBUTdCO0FBQ0FDLEVBQUFBLFVBQVUsRUFBRSxzQkFBWTtBQUNwQixTQUFLQyxJQUFMLEdBQVlsQixPQUFPLENBQUMsaUJBQUQsQ0FBUCxDQUEyQm1CLFdBQTNCLEVBQVo7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLEVBQWpCO0FBRUgsR0FiNEI7QUFlN0I7QUFDQUMsRUFBQUEsWUFBWSxFQUFFLHdCQUFZO0FBQ3RCLFNBQUtDLFVBQUwsR0FBa0IsS0FBS0MsU0FBTCxDQUFlLFlBQWYsQ0FBbEI7QUFDQSxTQUFLRCxVQUFMLENBQWdCRSxLQUFoQixHQUF3QkMsU0FBeEI7QUFDQSxTQUFLQyxjQUFMLEdBQXNCLEtBQUtILFNBQUwsQ0FBZSxnQkFBZixDQUF0QjtBQUNBLFNBQUtJLFVBQUwsR0FBa0IsS0FBS0osU0FBTCxDQUFlLFlBQWYsQ0FBbEI7QUFDQSxTQUFLSyxVQUFMLEdBQWtCLEtBQUtMLFNBQUwsQ0FBZSxTQUFmLENBQWxCO0FBRUEsU0FBS00sYUFBTCxHQUFxQixLQUFLTixTQUFMLENBQWUsS0FBS0ssVUFBcEIsRUFBZ0MsU0FBaEMsRUFBMkN2QixFQUFFLENBQUN5QixLQUE5QyxDQUFyQjtBQUNBLFNBQUtDLGFBQUwsR0FBcUIsS0FBS1IsU0FBTCxDQUFlLEtBQUtLLFVBQXBCLEVBQWdDLFlBQWhDLEVBQThDdkIsRUFBRSxDQUFDeUIsS0FBakQsQ0FBckI7QUFFQSxTQUFLRSxrQkFBTCxHQUEwQixLQUFLVCxTQUFMLENBQWUsS0FBS0ssVUFBcEIsRUFBZ0MsaUJBQWhDLENBQTFCO0FBQ0EsU0FBS0ssb0JBQUwsR0FBNEIsS0FBS0Qsa0JBQUwsQ0FBd0JFLGNBQXhCLEVBQTVCO0FBQ0EsU0FBS0Msa0JBQUwsR0FBMEIsS0FBS0gsa0JBQUwsQ0FBd0JJLFlBQXhCLENBQXFDL0IsRUFBRSxDQUFDZ0MsVUFBeEMsQ0FBMUI7QUFDQSxTQUFLQyxlQUFMLEdBQXVCLEtBQUtmLFNBQUwsQ0FBZSxLQUFLUyxrQkFBcEIsRUFBd0MsU0FBeEMsQ0FBdkI7QUFFSCxHQS9CNEI7QUFpQzdCO0FBQ0FPLEVBQUFBLGFBQWEsRUFBRSx5QkFBWTtBQUN2QkMsSUFBQUEsS0FBSyxDQUFDQyxVQUFOLENBQWlCLEtBQUtuQixVQUF0QixFQUFrQyxZQUFZO0FBQzFDLFdBQUtKLElBQUwsQ0FBVXdCLG1CQUFWLENBQThCLEtBQTlCO0FBQ0gsS0FGaUMsQ0FFaENDLElBRmdDLENBRTNCLElBRjJCLENBQWxDLEVBRWMsQ0FGZDtBQUlBLFNBQUtDLGNBQUwsQ0FBb0J6QyxXQUFXLENBQUMwQyxnQkFBaEMsRUFBa0QsVUFBVUMsSUFBVixFQUFnQjtBQUM5RCxVQUFJLENBQUNBLElBQUwsRUFBVztBQUNYLFdBQUtDLGNBQUwsR0FBc0JELElBQUksQ0FBQ0UsVUFBM0I7QUFDQSxXQUFLRCxjQUFMLENBQW9CRSxJQUFwQixDQUF5QixVQUFTQyxDQUFULEVBQVdDLENBQVgsRUFBYTtBQUNsQyxZQUFHRCxDQUFDLENBQUNFLEtBQUYsR0FBVUQsQ0FBQyxDQUFDRSxLQUFmLEVBQXdCO0FBQ3BCLGlCQUFPLENBQUMsQ0FBUjtBQUNILFNBRkQsTUFFSztBQUNELGlCQUFPLENBQVA7QUFDSDtBQUNKLE9BTkQ7O0FBT0EsVUFBSSxLQUFLTixjQUFMLElBQXVCLENBQTNCLEVBQThCO0FBQzFCLGFBQUtPLGFBQUw7QUFDSCxPQUZELE1BRU87QUFDSCxhQUFLQyxjQUFMO0FBQ0g7O0FBQ0QsV0FBS0MsZ0JBQUwsQ0FBc0JWLElBQUksQ0FBQ1csSUFBM0I7QUFDSCxLQWhCRCxFQWdCRyxJQWhCSDtBQWlCSCxHQXhENEI7QUEwRDdCO0FBQ0FDLEVBQUFBLFdBQVcsRUFBRSxxQkFBVUMsTUFBVixFQUFrQjtBQUMzQixTQUFLQyxnQkFBTCxHQUF3QkQsTUFBTSxJQUFJLENBQWxDOztBQUNBM0QsSUFBQUEsT0FBTyxDQUFDLG1CQUFELENBQVAsQ0FBNkJtQixXQUE3QixHQUEyQzBDLFNBQTNDLENBQXFELEtBQUtELGdCQUExRDtBQUNILEdBOUQ0QjtBQWdFN0I7QUFDQUosRUFBQUEsZ0JBQWdCLEVBQUUsMEJBQVVNLE9BQVYsRUFBbUI7QUFDakMsUUFBSSxDQUFDLEtBQUtmLGNBQVYsRUFBMEI7O0FBQzFCLFFBQUllLE9BQU8sSUFBSSxJQUFYLElBQW1CQSxPQUFPLElBQUksQ0FBbEMsRUFBcUM7QUFDakMsV0FBS2pDLGFBQUwsQ0FBbUJrQyxNQUFuQixHQUE0QixFQUE1QjtBQUNBLFdBQUtoQyxhQUFMLENBQW1CZ0MsTUFBbkIsR0FBNEJ2QixLQUFLLENBQUN3QixLQUFOLENBQVksS0FBWixDQUE1QjtBQUNBO0FBQ0g7O0FBQ0QsU0FBS25DLGFBQUwsQ0FBbUJrQyxNQUFuQixHQUE0QkQsT0FBNUI7QUFDQSxRQUFJRyxTQUFTLEdBQUcsSUFBaEI7O0FBQ0EsU0FBSyxJQUFJQyxDQUFULElBQWMsS0FBS25CLGNBQW5CLEVBQW1DO0FBQy9CLFVBQUlELElBQUksR0FBRyxLQUFLQyxjQUFMLENBQW9CbUIsQ0FBcEIsQ0FBWDs7QUFDQSxVQUFJcEIsSUFBSSxDQUFDTSxLQUFMLElBQWNOLElBQUksQ0FBQ08sS0FBdkIsRUFBOEI7QUFDMUIsWUFBSVMsT0FBTyxJQUFJaEIsSUFBSSxDQUFDTSxLQUFoQixJQUF5QlUsT0FBTyxJQUFJaEIsSUFBSSxDQUFDTyxLQUE3QyxFQUFvRDtBQUNoRFksVUFBQUEsU0FBUyxHQUFHbkIsSUFBWjtBQUNIO0FBQ0osT0FKRCxNQUlPLElBQUlBLElBQUksQ0FBQ00sS0FBVCxFQUFnQjtBQUNuQixZQUFJVSxPQUFPLElBQUloQixJQUFJLENBQUNNLEtBQXBCLEVBQTJCO0FBQ3ZCYSxVQUFBQSxTQUFTLEdBQUduQixJQUFaO0FBQ0g7QUFDSjtBQUNKOztBQUNELFFBQUksQ0FBQ21CLFNBQUwsRUFBZ0I7QUFFaEIsUUFBSXpDLEtBQUssR0FBRyxHQUFaO0FBQ0EsUUFBSTJDLE9BQU8sR0FBRyxFQUFkO0FBQ0EsUUFBSUMsVUFBVSxHQUFHNUIsS0FBSyxDQUFDNkIsU0FBTixDQUFnQkosU0FBUyxDQUFDSyxLQUExQixDQUFqQjtBQUNBLFFBQUlDLFVBQVUsR0FBR0MsWUFBWSxDQUFDQyxLQUFiLEdBQXFCakQsS0FBdEM7QUFDQSxRQUFJa0QsV0FBVyxHQUFHLENBQUNILFVBQVUsR0FBR0osT0FBZCxJQUF5QkMsVUFBM0M7QUFDQSxRQUFJTyxTQUFTLEdBQUdDLElBQUksQ0FBQ0MsR0FBTCxDQUFTLEtBQUs1QyxvQkFBTCxDQUEwQjZDLEtBQW5DLEVBQTBDSixXQUExQyxDQUFoQjtBQUNBLFNBQUtwQyxlQUFMLENBQXFCeUMsY0FBckIsQ0FBb0NKLFNBQXBDLEVBQStDLEtBQUsxQyxvQkFBTCxDQUEwQitDLE1BQXpFO0FBRUEsU0FBSzFDLGVBQUwsQ0FBcUIyQyxDQUFyQixHQUF5QixDQUF6QjtBQUVBLFFBQUlDLEtBQUssR0FBRyxDQUFaOztBQUNBLFNBQUssSUFBSWhCLENBQVQsSUFBY0QsU0FBUyxDQUFDSyxLQUF4QixFQUErQjtBQUMzQixVQUFNYSxDQUFDLEdBQUdsQixTQUFTLENBQUNLLEtBQVYsQ0FBZ0JKLENBQWhCLENBQVY7O0FBQ0EsVUFBSSxDQUFDLEtBQUs5QyxTQUFMLENBQWU4QyxDQUFmLENBQUwsRUFBd0I7QUFDcEIsWUFBTWtCLElBQUksR0FBR0MsU0FBUyxDQUFDbEUsV0FBVixHQUF3Qm1FLE9BQXhCLENBQWdDLGVBQWhDLENBQWI7QUFDQUYsUUFBQUEsSUFBSSxDQUFDbkUsVUFBTCxDQUFnQixLQUFoQixFQUF1Qk8sS0FBdkIsRUFBOEIsS0FBOUIsRUFBcUMsSUFBckM7QUFDQTRELFFBQUFBLElBQUksQ0FBQ0csSUFBTDtBQUNBSCxRQUFBQSxJQUFJLENBQUNJLFNBQUwsQ0FBZSxLQUFLbEQsZUFBcEI7QUFDQThDLFFBQUFBLElBQUksQ0FBQ0ssT0FBTCxDQUFhO0FBQUVDLFVBQUFBLEdBQUcsRUFBRVAsQ0FBQyxDQUFDTyxHQUFUO0FBQWNDLFVBQUFBLEdBQUcsRUFBRVIsQ0FBQyxDQUFDUTtBQUFyQixTQUFiO0FBQ0FQLFFBQUFBLElBQUksQ0FBQ1EsV0FBTCxDQUFpQlYsS0FBSyxJQUFJWCxVQUFVLEdBQUdKLE9BQWpCLENBQUwsR0FBaUMsRUFBbEQsRUFBc0QsQ0FBdEQ7QUFDQSxhQUFLL0MsU0FBTCxDQUFlOEMsQ0FBZixJQUFvQmtCLElBQXBCO0FBQ0FGLFFBQUFBLEtBQUssR0FBR0EsS0FBSyxHQUFHLENBQWhCO0FBQ0g7QUFDSjtBQUNKLEdBaEg0QjtBQWtIN0IzQixFQUFBQSxjQUFjLEVBQUUsMEJBQVk7QUFDeEIsUUFBSSxLQUFLc0MsaUJBQVQsRUFBNEI7QUFDeEIsV0FBS0EsaUJBQUwsQ0FBdUJKLE9BQXZCLENBQStCLEtBQUsxQyxjQUFwQztBQUNBO0FBQ0g7O0FBQ0QsUUFBSStDLGNBQWMsR0FBRyxLQUFLdkUsU0FBTCxDQUFlLEtBQUtHLGNBQXBCLEVBQW9DLGdCQUFwQyxDQUFyQjtBQUNBLFFBQUlxRSxNQUFNLEdBQUdELGNBQWMsQ0FBQzVELGNBQWYsRUFBYjtBQUNBLFFBQUk4RCxRQUFRLEdBQUczRixFQUFFLENBQUM0RixJQUFILENBQVFGLE1BQU0sQ0FBQ2pCLEtBQWYsRUFBc0JpQixNQUFNLENBQUNmLE1BQTdCLENBQWY7QUFDQSxRQUFJa0IsT0FBTyxHQUFHO0FBQ1ZDLE1BQUFBLFVBQVUsRUFBRWpHLGNBREY7QUFDdUI7QUFDakNrRyxNQUFBQSxPQUFPLEVBQUUsQ0FGQztBQUVxQjtBQUMvQkMsTUFBQUEsT0FBTyxFQUFFLENBSEM7QUFHcUI7QUFDL0JDLE1BQUFBLE9BQU8sRUFBRSxDQUpDO0FBSXFCO0FBQy9CQyxNQUFBQSxPQUFPLEVBQUUsQ0FMQztBQUtvQjtBQUM5QmhDLE1BQUFBLFVBQVUsRUFBRSxHQU5GO0FBTXFCO0FBQy9CaUMsTUFBQUEsV0FBVyxFQUFFLEdBUEg7QUFPcUI7QUFDL0JDLE1BQUFBLEdBQUcsRUFBRSxDQVJLO0FBUXFCO0FBQy9CQyxNQUFBQSxHQUFHLEVBQUUsQ0FUSztBQVNxQjtBQUMvQkMsTUFBQUEsWUFBWSxFQUFFO0FBVkosS0FBZDtBQVlBLFNBQUtkLGlCQUFMLEdBQXlCLElBQUk1RixnQkFBSixFQUF6QjtBQUNBLFNBQUs0RixpQkFBTCxDQUF1QmUsWUFBdkIsQ0FBb0NkLGNBQXBDLEVBQW9EekYsRUFBRSxDQUFDd0csRUFBSCxDQUFNLENBQU4sRUFBUyxDQUFULENBQXBELEVBQWlFQyxhQUFhLENBQUNDLFFBQS9FLEVBQXlGQyxrQkFBa0IsQ0FBQ0MsR0FBNUcsRUFBaUhqQixRQUFqSCxFQUEySEUsT0FBM0gsRUFBb0k3RixFQUFFLENBQUN3RyxFQUFILENBQU0sR0FBTixFQUFXLEdBQVgsQ0FBcEk7QUFDQSxTQUFLaEIsaUJBQUwsQ0FBdUJKLE9BQXZCLENBQStCLEtBQUsxQyxjQUFwQztBQUNILEdBekk0QjtBQTJJN0JPLEVBQUFBLGFBQWEsRUFBRSx1QkFBVTRELElBQVYsRUFBZ0I7QUFDM0IsUUFBSSxDQUFDLEtBQUtDLFNBQU4sSUFBbUJELElBQUksSUFBSSxLQUEvQixFQUFzQzs7QUFDdEMsUUFBSSxDQUFDLEtBQUtDLFNBQVYsRUFBcUI7QUFDakIsVUFBSWxCLElBQUksR0FBRzVGLEVBQUUsQ0FBQzRGLElBQUgsQ0FBUSxHQUFSLEVBQWEsR0FBYixDQUFYO0FBQ0EsV0FBS2tCLFNBQUwsR0FBaUIsSUFBSTlHLEVBQUUsQ0FBQytHLElBQVAsRUFBakI7QUFDQSxXQUFLRCxTQUFMLENBQWVwQyxjQUFmLENBQThCa0IsSUFBOUI7QUFDQSxXQUFLa0IsU0FBTCxDQUFlRSxjQUFmLENBQThCaEgsRUFBRSxDQUFDd0csRUFBSCxDQUFNLEdBQU4sRUFBVyxHQUFYLENBQTlCO0FBQ0EsV0FBS00sU0FBTCxDQUFldkIsV0FBZixDQUEyQnZGLEVBQUUsQ0FBQ3dHLEVBQUgsQ0FBTSxDQUFOLEVBQVMsQ0FBVCxDQUEzQjtBQUNBLFdBQUtTLFVBQUwsQ0FBZ0JDLFFBQWhCLENBQXlCLEtBQUtKLFNBQTlCO0FBQ0EsVUFBSUssR0FBRyxHQUFHekgsUUFBUSxDQUFDMEgsUUFBVCxDQUFrQixTQUFsQixDQUFWO0FBQ0EsV0FBS0MsUUFBTCxHQUFnQmxGLEtBQUssQ0FBQ21GLFdBQU4sQ0FBa0IsS0FBS1IsU0FBdkIsRUFBa0MsSUFBbEMsRUFBd0MsQ0FBeEMsRUFBMkMsQ0FBM0MsRUFBOEM5RyxFQUFFLENBQUN3RyxFQUFILENBQU0sR0FBTixFQUFXLEdBQVgsQ0FBOUMsRUFBK0QsS0FBL0QsQ0FBaEI7QUFDQSxXQUFLZSxPQUFMLENBQWFKLEdBQWIsRUFBa0IsVUFBVUssTUFBVixFQUFrQjtBQUNoQyxhQUFLSCxRQUFMLENBQWNJLFdBQWQsR0FBNEJELE1BQTVCO0FBQ0gsT0FGaUIsQ0FFaEJsRixJQUZnQixDQUVYLElBRlcsQ0FBbEI7QUFHQSxXQUFLb0YsV0FBTCxHQUFtQnZGLEtBQUssQ0FBQ3dGLFdBQU4sQ0FBa0IsRUFBbEIsRUFBc0IsSUFBSTNILEVBQUUsQ0FBQzRILEtBQVAsQ0FBYSxJQUFiLEVBQW1CLElBQW5CLEVBQXlCLElBQXpCLEVBQStCLElBQS9CLENBQXRCLEVBQTRELElBQTVELEVBQWtFLENBQWxFLEVBQXFFLENBQUMsR0FBdEUsRUFBMkUsRUFBM0UsRUFBK0UsS0FBS2QsU0FBcEYsRUFBK0YsQ0FBL0YsRUFBa0c5RyxFQUFFLENBQUN3RyxFQUFILENBQU0sR0FBTixFQUFXLEdBQVgsQ0FBbEcsQ0FBbkI7QUFDSDs7QUFDRCxRQUFJcUIsR0FBRyxHQUFHMUYsS0FBSyxDQUFDd0IsS0FBTixDQUFZLFFBQVosQ0FBVjtBQUNBLFNBQUsrRCxXQUFMLENBQWlCaEUsTUFBakIsR0FBMEJtRSxHQUExQjtBQUNBLFNBQUtmLFNBQUwsQ0FBZWdCLE1BQWYsR0FBd0JqQixJQUF4QjtBQUNILEdBOUo0QjtBQWdLN0I7QUFDQWtCLEVBQUFBLGFBQWEsRUFBRSx5QkFBWTtBQUN2QixRQUFJLEtBQUt2QyxpQkFBVCxFQUE0QjtBQUN4QixXQUFLQSxpQkFBTCxDQUF1QndDLFFBQXZCO0FBQ0EsV0FBS3hDLGlCQUFMLEdBQXlCLElBQXpCO0FBQ0g7O0FBQ0QsUUFBSSxLQUFLekUsU0FBVCxFQUFvQjtBQUNoQixXQUFLLElBQUlrSCxDQUFULElBQWMsS0FBS2xILFNBQW5CLEVBQThCO0FBQzFCLGFBQUtBLFNBQUwsQ0FBZWtILENBQWYsRUFBa0JELFFBQWxCO0FBQ0EsYUFBS2pILFNBQUwsQ0FBZWtILENBQWYsSUFBb0IsSUFBcEI7QUFDSDs7QUFDRCxXQUFLbEgsU0FBTCxHQUFpQixJQUFqQjtBQUNIOztBQUNELFFBQUksS0FBSytGLFNBQVQsRUFBb0I7QUFDaEIsV0FBS0EsU0FBTCxDQUFlb0IsT0FBZjtBQUNBLFdBQUtSLFdBQUwsQ0FBaUJRLE9BQWpCO0FBQ0EsV0FBS2IsUUFBTCxDQUFjYSxPQUFkO0FBQ0EsV0FBS3BCLFNBQUwsR0FBaUIsSUFBakI7QUFDQSxXQUFLTyxRQUFMLEdBQWdCLElBQWhCO0FBQ0EsV0FBS0ssV0FBTCxHQUFtQixJQUFuQjtBQUNIOztBQUNELFNBQUs3RyxJQUFMLENBQVV3QixtQkFBVixDQUE4QixLQUE5QjtBQUNIO0FBdEw0QixDQUFULENBQXhCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6L+Z6YeM5piv5o+P6L+w6L+Z5Liq56qX5L2T55qE5L2c55So55qEXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wNC0yMyAyMDozNTowNiBcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcbnZhciBSYW5rUmV3YXJkSXRlbSA9IHJlcXVpcmUoXCJyYW5rX3Jld2FyZF9pdGVtXCIpO1xudmFyIEFjdGlvbkV2ZW50ID0gcmVxdWlyZShcImFjdGlvbl9ldmVudFwiKTtcblxudmFyIFJhbmtfcmV3YXJkV2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcInJhbmtcIiwgXCJyYW5rX3Jld2FyZF9wYW5lbFwiKTtcbiAgICAgICAgdGhpcy52aWV3VGFnID0gU0NFTkVfVEFHLmRpYWxvZ3VlOyAgICAgICAgICAgICAgICAvL+ivpeeql+S9k+aJgOWxnnVp5bGC57qnLOWFqOWxj3Vp6ZyA6KaB5ZyodWnlsYIs6Z2e5YWo5bGPdWnlnKhkaWFsb2d1ZeWxgizov5nkuKropoHms6jmhI9cbiAgICAgICAgdGhpcy53aW5fdHlwZSA9IFdpblR5cGUuQmlnOyAgICAgICAgICAgICAgIC8v5piv5ZCm5piv5YWo5bGP56qX5L2TICBXaW5UeXBlLkZ1bGwsIFdpblR5cGUuQmlnLCBXaW5UeXBlLk1pbmksIFdpblR5cGUuVGlwc1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmN0cmwgPSByZXF1aXJlKFwicmFua19jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCk7XG4gICAgICAgIHRoaXMuaXRlbV9saXN0ID0gW107XG5cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCO55qE5Zue6LCDLOWPr+S7peWcqOi/memHjOaNleiOt+ebuOWFs+iKgueCueaIluiAhee7hOS7tlxuICAgIG9wZW5DYWxsQmFjazogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLnNlZWtDaGlsZChcImJhY2tncm91bmRcIik7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5zY2FsZSA9IEZJVF9TQ0FMRTtcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMuc2Vla0NoaWxkKFwibWFpbl9jb250YWluZXJcIik7XG4gICAgICAgIHRoaXMucmFua19wYW5lbCA9IHRoaXMuc2Vla0NoaWxkKFwicmFua19wYW5lbFwiKTtcbiAgICAgICAgdGhpcy5teV9yYW5rX25kID0gdGhpcy5zZWVrQ2hpbGQoXCJteV9yYW5rXCIpO1xuXG4gICAgICAgIHRoaXMucmFua19pbmRleF9sYiA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubXlfcmFua19uZCwgXCJyYW5rX2lkXCIsIGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5sYWJlbF90aXBzX2xiID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5teV9yYW5rX25kLCBcImxhYmVsX3RpcHNcIiwgY2MuTGFiZWwpO1xuXG4gICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3X25kID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5teV9yYW5rX25kLCBcIml0ZW1fc2Nyb2xsdmlld1wiKTtcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXdfc2l6ZSA9IHRoaXMuaXRlbV9zY3JvbGx2aWV3X25kLmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3X3N2ID0gdGhpcy5pdGVtX3Njcm9sbHZpZXdfbmQuZ2V0Q29tcG9uZW50KGNjLlNjcm9sbFZpZXcpO1xuICAgICAgICB0aGlzLml0ZW1fY29udGVudF9uZCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuaXRlbV9zY3JvbGx2aWV3X25kLCBcImNvbnRlbnRcIik7XG5cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmJhY2tncm91bmQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuUmFua1Jld2FyZFBhbmVsKGZhbHNlKVxuICAgICAgICB9LmJpbmQodGhpcyksIDIpXG5cbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChBY3Rpb25FdmVudC5SQU5LX1JFV0FSRF9MSVNULCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFkYXRhKSByZXR1cm5cbiAgICAgICAgICAgIHRoaXMuY2VsbF9kYXRhX2xpc3QgPSBkYXRhLnJhbmtfYXdhcmQ7XG4gICAgICAgICAgICB0aGlzLmNlbGxfZGF0YV9saXN0LnNvcnQoZnVuY3Rpb24oYSxiKXtcbiAgICAgICAgICAgICAgICBpZihhLnJhbmsxIDwgYi5yYW5rMikgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpZiAodGhpcy5jZWxsX2RhdGFfbGlzdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RW1wdHlJY29uKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUmFua0xpc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTXlSYW5rSW5mbyhkYXRhLnJhbmspO1xuICAgICAgICB9LCB0aGlzKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB0aGlzLnJhbmtfcmV3YXJkX3R5cGUgPSBwYXJhbXMgfHwgMTtcbiAgICAgICAgcmVxdWlyZShcImFjdGlvbl9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkuc2VuZDE2NjUwKHRoaXMucmFua19yZXdhcmRfdHlwZSlcbiAgICB9LFxuXG4gICAgLy/mm7TmlrDmiJHnmoTmjpLooYzkv6Hmga9cbiAgICB1cGRhdGVNeVJhbmtJbmZvOiBmdW5jdGlvbiAobXlfcmFuaykge1xuICAgICAgICBpZiAoIXRoaXMuY2VsbF9kYXRhX2xpc3QpIHJldHVyblxuICAgICAgICBpZiAobXlfcmFuayA9PSBudWxsIHx8IG15X3JhbmsgPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5yYW5rX2luZGV4X2xiLnN0cmluZyA9IFwiXCI7XG4gICAgICAgICAgICB0aGlzLmxhYmVsX3RpcHNfbGIuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmnKrkuIrmppxcIik7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJhbmtfaW5kZXhfbGIuc3RyaW5nID0gbXlfcmFuaztcbiAgICAgICAgdmFyIGNlbGxfZGF0YSA9IG51bGw7XG4gICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5jZWxsX2RhdGFfbGlzdCkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmNlbGxfZGF0YV9saXN0W2ldXG4gICAgICAgICAgICBpZiAoZGF0YS5yYW5rMSAmJiBkYXRhLnJhbmsyKSB7XG4gICAgICAgICAgICAgICAgaWYgKG15X3JhbmsgPj0gZGF0YS5yYW5rMSAmJiBteV9yYW5rIDw9IGRhdGEucmFuazIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbF9kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEucmFuazEpIHtcbiAgICAgICAgICAgICAgICBpZiAobXlfcmFuayA8PSBkYXRhLnJhbmsxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGxfZGF0YSA9IGRhdGFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjZWxsX2RhdGEpIHJldHVyblxuXG4gICAgICAgIHZhciBzY2FsZSA9IDAuODtcbiAgICAgICAgdmFyIG9mZnNldFggPSAxMDtcbiAgICAgICAgdmFyIGl0ZW1fY291bnQgPSBVdGlscy5nZXRBcnJMZW4oY2VsbF9kYXRhLmF3YXJkKTtcbiAgICAgICAgdmFyIGl0ZW1fd2lkdGggPSBCYWNrUGFja0l0ZW0uV2lkdGggKiBzY2FsZTtcbiAgICAgICAgdmFyIHRvdGFsX3dpZHRoID0gKGl0ZW1fd2lkdGggKyBvZmZzZXRYKSAqIGl0ZW1fY291bnQ7XG4gICAgICAgIHZhciBtYXhfd2lkdGggPSBNYXRoLm1heCh0aGlzLml0ZW1fc2Nyb2xsdmlld19zaXplLndpZHRoLCB0b3RhbF93aWR0aCk7XG4gICAgICAgIHRoaXMuaXRlbV9jb250ZW50X25kLnNldENvbnRlbnRTaXplKG1heF93aWR0aCwgdGhpcy5pdGVtX3Njcm9sbHZpZXdfc2l6ZS5oZWlnaHQpO1xuXG4gICAgICAgIHRoaXMuaXRlbV9jb250ZW50X25kLnggPSAwO1xuXG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgaW4gY2VsbF9kYXRhLmF3YXJkKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gY2VsbF9kYXRhLmF3YXJkW2ldO1xuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1fbGlzdFtpXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBJdGVtc1Bvb2wuZ2V0SW5zdGFuY2UoKS5nZXRJdGVtKFwiYmFja3BhY2tfaXRlbVwiKTtcbiAgICAgICAgICAgICAgICBpdGVtLmluaXRDb25maWcoZmFsc2UsIHNjYWxlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaXRlbS5zaG93KCk7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRQYXJlbnQodGhpcy5pdGVtX2NvbnRlbnRfbmQpO1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0RGF0YSh7IGJpZDogdi5iaWQsIG51bTogdi5udW0gfSk7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRQb3NpdGlvbihpbmRleCAqIChpdGVtX3dpZHRoICsgb2Zmc2V0WCkgKyA2MCwgMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RbaV0gPSBpdGVtO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZVJhbmtMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbW1vbl9zY3JvbGx2aWV3KSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1vbl9zY3JvbGx2aWV3LnNldERhdGEodGhpcy5jZWxsX2RhdGFfbGlzdClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHZhciBsYXlfc2Nyb2xsdmlldyA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl9jb250YWluZXIsIFwibGF5X3Njcm9sbHZpZXdcIilcbiAgICAgICAgdmFyIGJnU2l6ZSA9IGxheV9zY3JvbGx2aWV3LmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIHZhciB0YWJfc2l6ZSA9IGNjLnNpemUoYmdTaXplLndpZHRoLCBiZ1NpemUuaGVpZ2h0KTtcbiAgICAgICAgdmFyIHNldHRpbmcgPSB7XG4gICAgICAgICAgICBpdGVtX2NsYXNzOiBSYW5rUmV3YXJkSXRlbSwgICAgICAvLyDljZXlhYPnsbtcbiAgICAgICAgICAgIHN0YXJ0X3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XG4gICAgICAgICAgICBzcGFjZV94OiAwLCAgICAgICAgICAgICAgICAgICAgLy8geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeTogMCwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3k6IDAsICAgICAgICAgICAgICAgICAgIC8vIHnmlrnlkJHnmoTpl7TpmpRcbiAgICAgICAgICAgIGl0ZW1fd2lkdGg6IDYzNCwgICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQ6IDE0MiwgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuGhlaWdodFxuICAgICAgICAgICAgcm93OiAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xuICAgICAgICAgICAgY29sOiAxLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWIl+aVsO+8jOS9nOeUqOS6juWeguebtOa7muWKqOexu+Wei1xuICAgICAgICAgICAgbmVlZF9keW5hbWljOiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21tb25fc2Nyb2xsdmlldyA9IG5ldyBDb21tb25TY3JvbGxWaWV3KClcbiAgICAgICAgdGhpcy5jb21tb25fc2Nyb2xsdmlldy5jcmVhdGVTY3JvbGwobGF5X3Njcm9sbHZpZXcsIGNjLnYyKDAsIDApLCBTY3JvbGxWaWV3RGlyLnZlcnRpY2FsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCB0YWJfc2l6ZSwgc2V0dGluZywgY2MudjIoMC41LCAwLjUpKVxuICAgICAgICB0aGlzLmNvbW1vbl9zY3JvbGx2aWV3LnNldERhdGEodGhpcy5jZWxsX2RhdGFfbGlzdClcbiAgICB9LFxuXG4gICAgc2hvd0VtcHR5SWNvbjogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVtcHR5X2NvbiAmJiBib29sID09IGZhbHNlKSByZXR1cm5cbiAgICAgICAgaWYgKCF0aGlzLmVtcHR5X2Nvbikge1xuICAgICAgICAgICAgdmFyIHNpemUgPSBjYy5zaXplKDIwMCwgMjAwKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfY29uID0gbmV3IGNjLk5vZGUoKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfY29uLnNldENvbnRlbnRTaXplKHNpemUpO1xuICAgICAgICAgICAgdGhpcy5lbXB0eV9jb24uc2V0QW5jaG9yUG9pbnQoY2MudjIoMC41LCAwLjUpKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfY29uLnNldFBvc2l0aW9uKGNjLnYyKDAsIDApKTtcbiAgICAgICAgICAgIHRoaXMubWFpbl9wYW5lbC5hZGRDaGlsZCh0aGlzLmVtcHR5X2Nvbik7XG4gICAgICAgICAgICB2YXIgcmVzID0gUGF0aFRvb2wuZ2V0QmlnQmcoXCJiaWdiZ18zXCIpO1xuICAgICAgICAgICAgdGhpcy5lbXB0eV9iZyA9IFV0aWxzLmNyZWF0ZUltYWdlKHRoaXMuZW1wdHlfY29uLCBudWxsLCAwLCAwLCBjYy52MigwLjUsIDAuNSksIGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgZnVuY3Rpb24gKHNmX29iaikge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1wdHlfYmcuc3ByaXRlRnJhbWUgPSBzZl9vYmo7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICB0aGlzLmVtcHR5X2xhYmVsID0gVXRpbHMuY3JlYXRlTGFiZWwoMjYsIG5ldyBjYy5Db2xvcigweDY4LCAweDQ1LCAweDJhLCAweGZmKSwgbnVsbCwgMCwgLTEwMCwgXCJcIiwgdGhpcy5lbXB0eV9jb24sIDAsIGNjLnYyKDAuNSwgMC41KSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN0ciA9IFV0aWxzLlRJMThOKFwi5pqC5peg5aWW5Yqx5pWw5o2uXCIpO1xuICAgICAgICB0aGlzLmVtcHR5X2xhYmVsLnN0cmluZyA9IHN0cjtcbiAgICAgICAgdGhpcy5lbXB0eV9jb24uYWN0aXZlID0gYm9vbDtcbiAgICB9LFxuXG4gICAgLy8g5YWz6Zet56qX5L2T5Zue6LCDLOmcgOimgeWcqOi/memHjOiwg+eUqOivpeeql+S9k+aJgOWxnmNvbnRyb2xsZXLnmoRjbG9zZeaWueazleayoeeUqOS6jue9ruepuuivpeeql+S9k+WunuS+i+WvueixoVxuICAgIGNsb3NlQ2FsbEJhY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tbW9uX3Njcm9sbHZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uX3Njcm9sbHZpZXcuZGVsZXRlTWUoKTtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uX3Njcm9sbHZpZXcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLml0ZW1fbGlzdCkge1xuICAgICAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLml0ZW1fbGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2tdLmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3Rba10gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVtcHR5X2Nvbikge1xuICAgICAgICAgICAgdGhpcy5lbXB0eV9jb24uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5lbXB0eV9sYWJlbC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmVtcHR5X2JnLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfY29uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfYmcgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5lbXB0eV9sYWJlbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHJsLm9wZW5SYW5rUmV3YXJkUGFuZWwoZmFsc2UpXG4gICAgfSxcbn0pIl19