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
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/mail/view/mail_info_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, 'b97d9TdONJKjZbp53rr1p3g', 'mail_info_window');
// Scripts/mod/mail/view/mail_info_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: shiraho@syg.com(必填, 创建模块的人员)
// @description:
//      竖版邮件/公告详情
// <br/>Create: new Date().toISOString()
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var TimeTool = require("timetool");
 
var MailController = require("mail_controller");
 
var MailEvent = require("mail_event");
 
var MailInfoWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("mail", "mail_info_window");
    this.win_type = WinType.Big;
    this.data = null;
    this.ctrl = MailController.getInstance();
    this.model = MailController.getInstance().getModel();
    this.goods_list = [];
  },
  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.main_panel = this.main_container.getChildByName("main_panel");
    this.win_title = this.main_panel.getChildByName("win_title").getComponent(cc.Label);
    this.win_title.string = Utils.TI18N("邮件");
    this.title_container = this.main_panel.getChildByName("title_container");
    this.title = this.title_container.getChildByName("title").getComponent(cc.Label);
    this.time = this.title_container.getChildByName("time").getComponent(cc.Label);
    this.icon = this.title_container.getChildByName("icon").getComponent(cc.Sprite);
    this.info_container = this.main_panel.getChildByName("info_container");
    this.content = this.info_container.getChildByName("ScrollView").getChildByName("view").getChildByName("content").getChildByName("RichText").getComponent(cc.RichText);
    this.youxiao = this.info_container.getChildByName("youxiao").getComponent(cc.Label);
    this.goods_container = this.info_container.getChildByName("goods_container");
    this.goods_title = this.goods_container.getChildByName("goods_title").getComponent(cc.Label);
    this.goods_title.string = "领取奖励";
    this.goods_scroll = this.goods_container.getChildByName("ScrollView");
    this.goods_scroll_content = this.goods_scroll.getChildByName("view").getChildByName("content");
    this.goods_scroll_size = this.goods_scroll.getContentSize();
    this.take_label = this.goods_container.getChildByName("take_label").getComponent(cc.Label);
    this.take_label.node.active = false;
    this.btn = this.main_panel.getChildByName("btn");
    this.btn_label = this.btn.getChildByName("Label").getComponent(cc.Label);
    this.btn_label_lo = this.btn.getChildByName("Label").getComponent(cc.LabelOutline);
    this.btn_img = this.btn.getComponent(cc.Sprite);
    this.close_btn = this.main_panel.getChildByName("close_btn");
    this.onShow();
  },
  createPanel: function createPanel(panel) {
    this.panel_bg = panel;
    this.panel_bg.setParent(this.main_container);
  },
  registerEvent: function registerEvent() {
    if (this.close_btn) {
      this.close_btn.on(cc.Node.EventType.TOUCH_END, function () {
        this.ctrl.openMailInfo(false);
      }.bind(this));
    }
 
    if (this.btn) {
      this.btn.on(cc.Node.EventType.TOUCH_END, function () {
        if (this.data && this.data.status) {
          //邮件
          if (this.data.assets && this.data.items) {
            if (Utils.getArrLen(this.data.assets) > 0 || Utils.getArrLen(this.data.items) > 0 && this.data.type == 1) {
              //领取
              this.ctrl.getGoods(this.data.id, this.data.srv_id);
            } else if (Utils.getArrLen(this.data.assets) <= 0 || Utils.getArrLen(this.data.items) <= 0 && this.data.type == 1) {
              var ids = [{
                id: this.data.id,
                srv_id: this.data.srv_id
              }];
              this.ctrl.deletMailSend(ids);
              this.ctrl.openMailInfo(false);
            }
          }
        }
      }, this);
    }
 
    if (this.background) {
      this.background.on(cc.Node.EventType.TOUCH_END, function () {
        this.ctrl.openMailInfo(false);
      }, this);
    }
 
    this.addGlobalEvent(MailEvent.GET_ITEM_ASSETS, function (key) {
      if (this.data) {
        var item_key = Utils.getNorKey(this.data.id || 0, this.data.srv_id || "");
 
        if (key == item_key) {
          this.removeAsset(key);
        }
      }
    }, this);
  },
  //必要添加的数据传入方法
  setData: function setData(data) {
    this.data = data;
    this.onShow();
  },
  onShow: function onShow() {
    // return
    if (this.data == null) return;
    if (this.root_wnd == null) return;
    var data = this.data; // var str2 = data.content;
    // str2 = string.gsub(str2,"&lt;","<");
    // str2 = string.gsub(str2,"&gt;",">");
    // str2 = string.gsub(str2, "&#039;", "'")
    // str2 = string.gsub(str2, "&quot;", '"')
    // str2 = WordCensor.getInstance().relapceAssetsTag(str2);
    // this.content.string = str2;
 
    var str2 = data.content;
    str2 = str2.replace(/&lt/g, "<");
    str2 = str2.replace(/&gt/g, ">");
    str2 = str2.replace(/&#039/g, "'");
    str2 = str2.replace(/&quot/g, '"');
    str2 = StringUtil.parseStr(str2).string;
    var color = Config.color_data.data_color16[58];
    this.content.string = "<color=" + color + ">" + str2 + "</c>";
 
    if (data.status != null) {
      this.title.string = data.subject;
      this.time.active = true;
      this.youxiao.active = true;
 
      if (data.assets && data.items) {
        if (Utils.getArrLen(data.assets) > 0 || Utils.getArrLen(data.items) > 0 && data.type == 1) {
          this.btn.active = true;
          this.changeButtonStatus(true);
          this.goods_container.active = true;
          this.createGoodsList();
        } else if (Utils.getArrLen(data.assets) <= 0 || Utils.getArrLen(data.items) <= 0 && data.type == 1) {
          this.btn.active = true;
          this.changeButtonStatus(false);
          this.goods_container.active = false;
        } else {
          this.btn.active = false;
          this.goods_container.active = false;
        }
      }
 
      var show_time = TimeTool.getDayOrHour(gcore.SmartSocket.getTime() - this.data.send_time);
 
      if (show_time != null) {
        this.time.string = show_time + "前";
      } else {
        this.time.string = "";
      }
 
      show_time = TimeTool.getDayOrHour(data.time_out - gcore.SmartSocket.getTime());
 
      if (show_time != null) {
        this.youxiao.string = "有效期" + show_time;
      } else {
        this.youxiao.string = "";
      }
 
      this.changeIcon(data.status);
      this.ctrl.read(data.id, data.srv_id);
    } else if (data.flag != null) {
      this.title.string = data.title;
      this.btn.active = false;
      this.goods_container.active = false;
      this.time.node.active = false;
      this.youxiao.node.active = false;
      this.changeIcon(data.flag);
      this.ctrl.readNotice(data.id);
    }
  },
  removeAsset: function removeAsset() {
    if (this.goods_list) {
      for (var k in this.goods_list) {
        if (this.goods_list[k] != null) {
          this.goods_list[k].deleteMe();
          this.goods_list[k] = null;
        }
      }
 
      this.goods_list = null;
    }
 
    this.goods_container.active = false;
    this.data.assets = {};
    this.data.status = 2;
    this.data.items = {};
    this.changeIcon(this.data.status);
    this.changeButtonStatus(false);
  },
  createGoodsList: function createGoodsList() {
    if (this.data.status == 2) {
      //领了的就不创建了
      return;
    }
 
    var show_list = [];
 
    for (var k in this.data.assets) {
      var v = this.data.assets[k];
      if (Utils.deepCopy(Utils.getItemConfig(v.label || v.base_id)).id != null) show_list.push(this.data.assets[k]);
    }
 
    for (var k in this.data.items) {
      var v = this.data.items[k];
      if (Utils.deepCopy(Utils.getItemConfig(v.label || v.base_id)).id != null) show_list.push(this.data.items[k]);
    }
 
    if (this.data.items.length > 0) {
      this.take_label.string = "占用背包空间:" + this.data.items.length;
      this.take_label.node.active = true;
    }
 
    var max_width = Math.max((BackPackItem.Width + 10) * show_list.length, this.goods_scroll_size.width);
    this.goods_scroll_content.setContentSize(cc.size(max_width, this.goods_scroll_size.height));
 
    for (var i = 0; i < show_list.length; i++) {
      var v = show_list[i];
      var config = Utils.deepCopy(Utils.getItemConfig(v.label || v.base_id));
      config.bid = v.label || v.base_id;
 
      if (config.id != null) {
        config.num = v.val || v.quantity;
        var item = ItemsPool.getInstance().getItem("backpack_item");
        item.setParent(this.goods_scroll_content);
        item.initConfig(false, 1, false, false);
 
        if (max_width > this.goods_scroll_size.width) {
          item.setPosition(i * (BackPackItem.Width + 8) - max_width / 2 + BackPackItem.Width / 2, 0);
        } else {
          item.setPosition(i * (BackPackItem.Width + 8) - (show_list.length - 1) * BackPackItem.Width / 2, 0);
        }
 
        item.show();
        item.setData(config);
        this.goods_list[i] = item;
      }
    }
  },
  changeButtonStatus: function changeButtonStatus(status) {
    if (status == true) {
      this.loadRes(PathTool.getCommonIcomPath("common_1017"), function (sf_obj) {
        this.btn_img.spriteFrame = sf_obj;
      }.bind(this));
      this.btn_label.string = "领取";
      this.btn_label_lo.color = new cc.Color(0x6c, 0x2b, 0x00, 0xff);
    } else {
      this.btn_label.string = "删除";
      this.btn_label_lo.color = new cc.Color(0x2b, 0x61, 0x0d, 0xff);
      this.loadRes(PathTool.getCommonIcomPath("common_1018"), function (sf_obj) {
        this.btn_img.spriteFrame = sf_obj;
      }.bind(this));
    }
  },
  changeIcon: function changeIcon(status) {
    if (status != null) {
      if (status == 1) {
        //已读
        if (this.data.assets && this.data.items && (Utils.getArrLen(this.data.assets) > 0 || Utils.getArrLen(this.data.items) > 0)) {
          //读了没领
          this.loadRes(PathTool.getUIIconPath("mail", "mail_icon4"), function (res_object) {
            this.res_object = res_object;
            this.icon.spriteFrame = res_object;
          }.bind(this));
        } else {
          this.loadRes(PathTool.getUIIconPath("mail", "mail_icon3"), function (res_object) {
            this.res_object = res_object;
            this.icon.spriteFrame = res_object;
          }.bind(this));
        }
      } else if (status == 2) {
        //领了
        this.loadRes(PathTool.getUIIconPath("mail", "mail_icon3"), function (res_object) {
          this.res_object = res_object;
          this.icon.spriteFrame = res_object;
        }.bind(this));
      } else if (status == 0) {
        //未读
        if (this.data.assets && this.data.items && (Utils.getArrLen(this.data.assets) > 0 || Utils.getArrLen(this.data.items) > 0)) {
          this.loadRes(PathTool.getUIIconPath("mail", "mail_icon2"), function (res_object) {
            this.res_object = res_object;
            this.icon.spriteFrame = res_object;
          }.bind(this));
        } else {
          this.loadRes(PathTool.getUIIconPath("mail", "mail_icon1"), function (res_object) {
            this.res_object = res_object;
            this.icon.spriteFrame = res_object;
          }.bind(this));
        }
      }
    }
  },
  close_callback: function close_callback() {
    if (this.goods_list != null) {
      for (var k in this.goods_list) {
        if (this.goods_list[k] != null) {
          this.goods_list[k].deleteMe();
          this.goods_list[k] = null;
        }
      }
 
      this.goods_list = null;
    }
 
    this.ctrl.openMailInfo(false);
  },
  onHide: function onHide() {},
  onDelete: function onDelete() {}
});
module.exports = MailInfoWindow;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxtYWlsXFx2aWV3XFxtYWlsX2luZm9fd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIlRpbWVUb29sIiwiTWFpbENvbnRyb2xsZXIiLCJNYWlsRXZlbnQiLCJNYWlsSW5mb1dpbmRvdyIsImNjIiwiQ2xhc3MiLCJCYXNlVmlldyIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsIndpbl90eXBlIiwiV2luVHlwZSIsIkJpZyIsImRhdGEiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJtb2RlbCIsImdldE1vZGVsIiwiZ29vZHNfbGlzdCIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJtYWluX2NvbnRhaW5lciIsIm1haW5fcGFuZWwiLCJ3aW5fdGl0bGUiLCJnZXRDb21wb25lbnQiLCJMYWJlbCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJ0aXRsZV9jb250YWluZXIiLCJ0aXRsZSIsInRpbWUiLCJpY29uIiwiU3ByaXRlIiwiaW5mb19jb250YWluZXIiLCJjb250ZW50IiwiUmljaFRleHQiLCJ5b3V4aWFvIiwiZ29vZHNfY29udGFpbmVyIiwiZ29vZHNfdGl0bGUiLCJnb29kc19zY3JvbGwiLCJnb29kc19zY3JvbGxfY29udGVudCIsImdvb2RzX3Njcm9sbF9zaXplIiwiZ2V0Q29udGVudFNpemUiLCJ0YWtlX2xhYmVsIiwibm9kZSIsImFjdGl2ZSIsImJ0biIsImJ0bl9sYWJlbCIsImJ0bl9sYWJlbF9sbyIsIkxhYmVsT3V0bGluZSIsImJ0bl9pbWciLCJjbG9zZV9idG4iLCJvblNob3ciLCJjcmVhdGVQYW5lbCIsInBhbmVsIiwicGFuZWxfYmciLCJzZXRQYXJlbnQiLCJyZWdpc3RlckV2ZW50Iiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfRU5EIiwib3Blbk1haWxJbmZvIiwiYmluZCIsInN0YXR1cyIsImFzc2V0cyIsIml0ZW1zIiwiZ2V0QXJyTGVuIiwidHlwZSIsImdldEdvb2RzIiwiaWQiLCJzcnZfaWQiLCJpZHMiLCJkZWxldE1haWxTZW5kIiwiYWRkR2xvYmFsRXZlbnQiLCJHRVRfSVRFTV9BU1NFVFMiLCJrZXkiLCJpdGVtX2tleSIsImdldE5vcktleSIsInJlbW92ZUFzc2V0Iiwic2V0RGF0YSIsInN0cjIiLCJyZXBsYWNlIiwiU3RyaW5nVXRpbCIsInBhcnNlU3RyIiwiY29sb3IiLCJDb25maWciLCJjb2xvcl9kYXRhIiwiZGF0YV9jb2xvcjE2Iiwic3ViamVjdCIsImNoYW5nZUJ1dHRvblN0YXR1cyIsImNyZWF0ZUdvb2RzTGlzdCIsInNob3dfdGltZSIsImdldERheU9ySG91ciIsImdjb3JlIiwiU21hcnRTb2NrZXQiLCJnZXRUaW1lIiwic2VuZF90aW1lIiwidGltZV9vdXQiLCJjaGFuZ2VJY29uIiwicmVhZCIsImZsYWciLCJyZWFkTm90aWNlIiwiayIsImRlbGV0ZU1lIiwic2hvd19saXN0IiwidiIsImRlZXBDb3B5IiwiZ2V0SXRlbUNvbmZpZyIsImxhYmVsIiwiYmFzZV9pZCIsInB1c2giLCJsZW5ndGgiLCJtYXhfd2lkdGgiLCJNYXRoIiwibWF4IiwiQmFja1BhY2tJdGVtIiwiV2lkdGgiLCJ3aWR0aCIsInNldENvbnRlbnRTaXplIiwic2l6ZSIsImhlaWdodCIsImkiLCJjb25maWciLCJiaWQiLCJudW0iLCJ2YWwiLCJxdWFudGl0eSIsIml0ZW0iLCJJdGVtc1Bvb2wiLCJnZXRJdGVtIiwiaW5pdENvbmZpZyIsInNldFBvc2l0aW9uIiwic2hvdyIsImxvYWRSZXMiLCJnZXRDb21tb25JY29tUGF0aCIsInNmX29iaiIsInNwcml0ZUZyYW1lIiwiQ29sb3IiLCJnZXRVSUljb25QYXRoIiwicmVzX29iamVjdCIsImNsb3NlX2NhbGxiYWNrIiwib25IaWRlIiwib25EZWxldGUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7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QUwsQ0FBVTBHLFdBQVYsR0FBd0JHLFVBQXhCO0FBQ0gsV0FIMEQsQ0FHekQ3RSxJQUh5RCxDQUdwRCxJQUhvRCxDQUEzRDtBQUlILFNBTEQsTUFLTztBQUNILGVBQUt1RSxPQUFMLENBQWE3SSxRQUFRLENBQUNrSixhQUFULENBQXVCLE1BQXZCLEVBQStCLFlBQS9CLENBQWIsRUFBMkQsVUFBVUMsVUFBVixFQUFzQjtBQUM3RSxpQkFBS0EsVUFBTCxHQUFrQkEsVUFBbEI7QUFDQSxpQkFBSzdHLElBQUwsQ0FBVTBHLFdBQVYsR0FBd0JHLFVBQXhCO0FBQ0gsV0FIMEQsQ0FHekQ3RSxJQUh5RCxDQUdwRCxJQUhvRCxDQUEzRDtBQUlIO0FBRUo7QUFDSjtBQUNKLEdBL1J5QjtBQWlTMUI4RSxFQUFBQSxjQUFjLEVBQUUsMEJBQVk7QUFDeEIsUUFBSSxLQUFLaEksVUFBTCxJQUFtQixJQUF2QixFQUE2QjtBQUN6QixXQUFLLElBQUkwRixDQUFULElBQWMsS0FBSzFGLFVBQW5CLEVBQStCO0FBQzNCLFlBQUksS0FBS0EsVUFBTCxDQUFnQjBGLENBQWhCLEtBQXNCLElBQTFCLEVBQWdDO0FBQzVCLGVBQUsxRixVQUFMLENBQWdCMEYsQ0FBaEIsRUFBbUJDLFFBQW5CO0FBQ0EsZUFBSzNGLFVBQUwsQ0FBZ0IwRixDQUFoQixJQUFxQixJQUFyQjtBQUNIO0FBQ0o7O0FBQ0QsV0FBSzFGLFVBQUwsR0FBa0IsSUFBbEI7QUFDSDs7QUFDRCxTQUFLSixJQUFMLENBQVVxRCxZQUFWLENBQXVCLEtBQXZCO0FBQ0gsR0E1U3lCO0FBOFMxQmdGLEVBQUFBLE1BQU0sRUFBRSxrQkFBWSxDQUVuQixDQWhUeUI7QUFrVDFCQyxFQUFBQSxRQUFRLEVBQUUsb0JBQVksQ0FFckI7QUFwVHlCLENBQVQsQ0FBckI7QUF3VEFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQm5KLGNBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyBAYXV0aG9yOiBzaGlyYWhvQHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXHJcbi8vIEBkZXNjcmlwdGlvbjpcclxuLy8gICAgICDnq5bniYjpgq7ku7Yv5YWs5ZGK6K+m5oOFXHJcbi8vIDxici8+Q3JlYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcclxudmFyIFRpbWVUb29sID0gcmVxdWlyZShcInRpbWV0b29sXCIpO1xyXG52YXIgTWFpbENvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbF9jb250cm9sbGVyXCIpO1xyXG52YXIgTWFpbEV2ZW50ID0gcmVxdWlyZShcIm1haWxfZXZlbnRcIik7XHJcblxyXG52YXIgTWFpbEluZm9XaW5kb3cgPSBjYy5DbGFzcyh7XHJcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcclxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwibWFpbFwiLCBcIm1haWxfaW5mb193aW5kb3dcIik7XHJcbiAgICAgICAgdGhpcy53aW5fdHlwZSA9IFdpblR5cGUuQmlnO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdHJsID0gTWFpbENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gTWFpbENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpO1xyXG4gICAgICAgIHRoaXMuZ29vZHNfbGlzdCA9IFtdO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgb3BlbkNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIik7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNjYWxlID0gRklUX1NDQUxFO1xyXG4gICAgICAgIHRoaXMubWFpbl9jb250YWluZXIgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwibWFpbl9jb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5tYWluX3BhbmVsID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIm1haW5fcGFuZWxcIik7XHJcbiAgICAgICAgdGhpcy53aW5fdGl0bGUgPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJ3aW5fdGl0bGVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLndpbl90aXRsZS5zdHJpbmcgPSBVdGlscy5USTE4TihcIumCruS7tlwiKTtcclxuXHJcblxyXG4gICAgICAgIHRoaXMudGl0bGVfY29udGFpbmVyID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwidGl0bGVfY29udGFpbmVyXCIpO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aGlzLnRpdGxlX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy50aW1lID0gdGhpcy50aXRsZV9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJ0aW1lXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy5pY29uID0gdGhpcy50aXRsZV9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJpY29uXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xyXG5cclxuICAgICAgICB0aGlzLmluZm9fY29udGFpbmVyID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiaW5mb19jb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy5pbmZvX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlNjcm9sbFZpZXdcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ2aWV3XCIpLmdldENoaWxkQnlOYW1lKFwiY29udGVudFwiKS5nZXRDaGlsZEJ5TmFtZShcIlJpY2hUZXh0XCIpLmdldENvbXBvbmVudChjYy5SaWNoVGV4dCk7XHJcblxyXG4gICAgICAgIHRoaXMueW91eGlhbyA9IHRoaXMuaW5mb19jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJ5b3V4aWFvXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcblxyXG4gICAgICAgIHRoaXMuZ29vZHNfY29udGFpbmVyID0gdGhpcy5pbmZvX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImdvb2RzX2NvbnRhaW5lclwiKTtcclxuICAgICAgICB0aGlzLmdvb2RzX3RpdGxlID0gdGhpcy5nb29kc19jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJnb29kc190aXRsZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xyXG4gICAgICAgIHRoaXMuZ29vZHNfdGl0bGUuc3RyaW5nID0gXCLpooblj5blpZblirFcIjtcclxuXHJcbiAgICAgICAgdGhpcy5nb29kc19zY3JvbGwgPSB0aGlzLmdvb2RzX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlNjcm9sbFZpZXdcIik7XHJcbiAgICAgICAgdGhpcy5nb29kc19zY3JvbGxfY29udGVudCA9IHRoaXMuZ29vZHNfc2Nyb2xsLmdldENoaWxkQnlOYW1lKFwidmlld1wiKS5nZXRDaGlsZEJ5TmFtZShcImNvbnRlbnRcIik7XHJcbiAgICAgICAgdGhpcy5nb29kc19zY3JvbGxfc2l6ZSA9IHRoaXMuZ29vZHNfc2Nyb2xsLmdldENvbnRlbnRTaXplKCk7XHJcblxyXG5cclxuICAgICAgICB0aGlzLnRha2VfbGFiZWwgPSB0aGlzLmdvb2RzX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRha2VfbGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLnRha2VfbGFiZWwubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5idG4gPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJidG5cIik7XHJcbiAgICAgICAgdGhpcy5idG5fbGFiZWwgPSB0aGlzLmJ0bi5nZXRDaGlsZEJ5TmFtZShcIkxhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy5idG5fbGFiZWxfbG8gPSB0aGlzLmJ0bi5nZXRDaGlsZEJ5TmFtZShcIkxhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbE91dGxpbmUpO1xyXG4gICAgICAgIHRoaXMuYnRuX2ltZyA9IHRoaXMuYnRuLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VfYnRuID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiY2xvc2VfYnRuXCIpO1xyXG5cclxuICAgICAgICB0aGlzLm9uU2hvdygpXHJcbiAgICB9LFxyXG5cclxuICAgIGNyZWF0ZVBhbmVsOiBmdW5jdGlvbiAocGFuZWwpIHtcclxuICAgICAgICB0aGlzLnBhbmVsX2JnID0gcGFuZWw7XHJcbiAgICAgICAgdGhpcy5wYW5lbF9iZy5zZXRQYXJlbnQodGhpcy5tYWluX2NvbnRhaW5lcilcclxuICAgIH0sXHJcblxyXG5cclxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5jbG9zZV9idG4pIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZV9idG4ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5NYWlsSW5mbyhmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcykpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmJ0bikge1xyXG4gICAgICAgICAgICB0aGlzLmJ0bi5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnN0YXR1cykgey8v6YKu5Lu2XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5hc3NldHMgJiYgdGhpcy5kYXRhLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5nZXRBcnJMZW4odGhpcy5kYXRhLmFzc2V0cykgPiAwIHx8IFV0aWxzLmdldEFyckxlbih0aGlzLmRhdGEuaXRlbXMpID4gMCAmJiB0aGlzLmRhdGEudHlwZSA9PSAxKSB7IC8v6aKG5Y+WXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuZ2V0R29vZHModGhpcy5kYXRhLmlkLCB0aGlzLmRhdGEuc3J2X2lkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChVdGlscy5nZXRBcnJMZW4odGhpcy5kYXRhLmFzc2V0cykgPD0gMCB8fCBVdGlscy5nZXRBcnJMZW4odGhpcy5kYXRhLml0ZW1zKSA8PSAwICYmIHRoaXMuZGF0YS50eXBlID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZHMgPSBbeyBpZDogdGhpcy5kYXRhLmlkLCBzcnZfaWQ6IHRoaXMuZGF0YS5zcnZfaWQgfV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuZGVsZXRNYWlsU2VuZChpZHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5NYWlsSW5mbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmJhY2tncm91bmQpIHtcclxuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5NYWlsSW5mbyhmYWxzZSk7XHJcbiAgICAgICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoTWFpbEV2ZW50LkdFVF9JVEVNX0FTU0VUUywgZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXRlbV9rZXkgPSBVdGlscy5nZXROb3JLZXkodGhpcy5kYXRhLmlkIHx8IDAsIHRoaXMuZGF0YS5zcnZfaWQgfHwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09IGl0ZW1fa2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBc3NldChrZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcylcclxuICAgIH0sXHJcblxyXG4gICAgLy/lv4XopoHmt7vliqDnmoTmlbDmja7kvKDlhaXmlrnms5VcclxuICAgIHNldERhdGE6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLm9uU2hvdygpXHJcbiAgICB9LFxyXG5cclxuICAgIG9uU2hvdzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIHJldHVyblxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEgPT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQgPT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XHJcbiAgICAgICAgLy8gdmFyIHN0cjIgPSBkYXRhLmNvbnRlbnQ7XHJcbiAgICAgICAgLy8gc3RyMiA9IHN0cmluZy5nc3ViKHN0cjIsXCImbHQ7XCIsXCI8XCIpO1xyXG4gICAgICAgIC8vIHN0cjIgPSBzdHJpbmcuZ3N1YihzdHIyLFwiJmd0O1wiLFwiPlwiKTtcclxuICAgICAgICAvLyBzdHIyID0gc3RyaW5nLmdzdWIoc3RyMiwgXCImIzAzOTtcIiwgXCInXCIpXHJcbiAgICAgICAgLy8gc3RyMiA9IHN0cmluZy5nc3ViKHN0cjIsIFwiJnF1b3Q7XCIsICdcIicpXHJcbiAgICAgICAgLy8gc3RyMiA9IFdvcmRDZW5zb3IuZ2V0SW5zdGFuY2UoKS5yZWxhcGNlQXNzZXRzVGFnKHN0cjIpO1xyXG4gICAgICAgIC8vIHRoaXMuY29udGVudC5zdHJpbmcgPSBzdHIyO1xyXG4gICAgICAgIHZhciBzdHIyID0gZGF0YS5jb250ZW50O1xyXG4gICAgICAgIHN0cjIgPSBzdHIyLnJlcGxhY2UoLyZsdC9nLCBcIjxcIik7XHJcbiAgICAgICAgc3RyMiA9IHN0cjIucmVwbGFjZSgvJmd0L2csIFwiPlwiKTtcclxuICAgICAgICBzdHIyID0gc3RyMi5yZXBsYWNlKC8mIzAzOS9nLCBcIidcIik7XHJcbiAgICAgICAgc3RyMiA9IHN0cjIucmVwbGFjZSgvJnF1b3QvZywgJ1wiJyk7XHJcblxyXG4gICAgICAgIHN0cjIgPSBTdHJpbmdVdGlsLnBhcnNlU3RyKHN0cjIpLnN0cmluZ1xyXG5cclxuICAgICAgICB2YXIgY29sb3IgPSBDb25maWcuY29sb3JfZGF0YS5kYXRhX2NvbG9yMTZbNThdO1xyXG4gICAgICAgIHRoaXMuY29udGVudC5zdHJpbmcgPSBcIjxjb2xvcj1cIiArIGNvbG9yICsgXCI+XCIgKyBzdHIyICsgXCI8L2M+XCI7XHJcblxyXG4gICAgICAgIGlmIChkYXRhLnN0YXR1cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGl0bGUuc3RyaW5nID0gZGF0YS5zdWJqZWN0O1xyXG4gICAgICAgICAgICB0aGlzLnRpbWUuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy55b3V4aWFvLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmFzc2V0cyAmJiBkYXRhLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuZ2V0QXJyTGVuKGRhdGEuYXNzZXRzKSA+IDAgfHwgVXRpbHMuZ2V0QXJyTGVuKGRhdGEuaXRlbXMpID4gMCAmJiBkYXRhLnR5cGUgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnRuLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VCdXR0b25TdGF0dXModHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nb29kc19jb250YWluZXIuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdvb2RzTGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChVdGlscy5nZXRBcnJMZW4oZGF0YS5hc3NldHMpIDw9IDAgfHwgVXRpbHMuZ2V0QXJyTGVuKGRhdGEuaXRlbXMpIDw9IDAgJiYgZGF0YS50eXBlID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ0bi5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQnV0dG9uU3RhdHVzKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdvb2RzX2NvbnRhaW5lci5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idG4uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nb29kc19jb250YWluZXIuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBzaG93X3RpbWUgPSBUaW1lVG9vbC5nZXREYXlPckhvdXIoZ2NvcmUuU21hcnRTb2NrZXQuZ2V0VGltZSgpIC0gdGhpcy5kYXRhLnNlbmRfdGltZSk7XHJcbiAgICAgICAgICAgIGlmIChzaG93X3RpbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aW1lLnN0cmluZyA9IHNob3dfdGltZSArIFwi5YmNXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWUuc3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2hvd190aW1lID0gVGltZVRvb2wuZ2V0RGF5T3JIb3VyKGRhdGEudGltZV9vdXQgLSBnY29yZS5TbWFydFNvY2tldC5nZXRUaW1lKCkpO1xyXG4gICAgICAgICAgICBpZiAoc2hvd190aW1lICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueW91eGlhby5zdHJpbmcgPSBcIuacieaViOacn1wiICsgc2hvd190aW1lO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy55b3V4aWFvLnN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlSWNvbihkYXRhLnN0YXR1cyk7XHJcbiAgICAgICAgICAgIHRoaXMuY3RybC5yZWFkKGRhdGEuaWQsIGRhdGEuc3J2X2lkKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZmxhZyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGl0bGUuc3RyaW5nID0gZGF0YS50aXRsZTtcclxuICAgICAgICAgICAgdGhpcy5idG4uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZ29vZHNfY29udGFpbmVyLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWUubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy55b3V4aWFvLm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlSWNvbihkYXRhLmZsYWcpO1xyXG4gICAgICAgICAgICB0aGlzLmN0cmwucmVhZE5vdGljZShkYXRhLmlkKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlQXNzZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5nb29kc19saXN0KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gdGhpcy5nb29kc19saXN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nb29kc19saXN0W2tdICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdvb2RzX2xpc3Rba10uZGVsZXRlTWUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdvb2RzX2xpc3Rba10gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ29vZHNfbGlzdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ29vZHNfY29udGFpbmVyLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGF0YS5hc3NldHMgPSB7fTtcclxuICAgICAgICB0aGlzLmRhdGEuc3RhdHVzID0gMjtcclxuICAgICAgICB0aGlzLmRhdGEuaXRlbXMgPSB7fTtcclxuICAgICAgICB0aGlzLmNoYW5nZUljb24odGhpcy5kYXRhLnN0YXR1cyk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VCdXR0b25TdGF0dXMoZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVHb29kc0xpc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLnN0YXR1cyA9PSAyKSB7IC8v6aKG5LqG55qE5bCx5LiN5Yib5bu65LqGXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNob3dfbGlzdCA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGsgaW4gdGhpcy5kYXRhLmFzc2V0cykge1xyXG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuZGF0YS5hc3NldHNba107XHJcbiAgICAgICAgICAgIGlmIChVdGlscy5kZWVwQ29weShVdGlscy5nZXRJdGVtQ29uZmlnKHYubGFiZWwgfHwgdi5iYXNlX2lkKSkuaWQgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHNob3dfbGlzdC5wdXNoKHRoaXMuZGF0YS5hc3NldHNba10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBrIGluIHRoaXMuZGF0YS5pdGVtcykge1xyXG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuZGF0YS5pdGVtc1trXTtcclxuICAgICAgICAgICAgaWYgKFV0aWxzLmRlZXBDb3B5KFV0aWxzLmdldEl0ZW1Db25maWcodi5sYWJlbCB8fCB2LmJhc2VfaWQpKS5pZCAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgc2hvd19saXN0LnB1c2godGhpcy5kYXRhLml0ZW1zW2tdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRha2VfbGFiZWwuc3RyaW5nID0gXCLljaDnlKjog4zljIXnqbrpl7TvvJpcIiArIHRoaXMuZGF0YS5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudGFrZV9sYWJlbC5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWF4X3dpZHRoID0gTWF0aC5tYXgoKEJhY2tQYWNrSXRlbS5XaWR0aCArIDEwKSAqIHNob3dfbGlzdC5sZW5ndGgsIHRoaXMuZ29vZHNfc2Nyb2xsX3NpemUud2lkdGgpO1xyXG4gICAgICAgIHRoaXMuZ29vZHNfc2Nyb2xsX2NvbnRlbnQuc2V0Q29udGVudFNpemUoY2Muc2l6ZShtYXhfd2lkdGgsIHRoaXMuZ29vZHNfc2Nyb2xsX3NpemUuaGVpZ2h0KSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaG93X2xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHYgPSBzaG93X2xpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBVdGlscy5kZWVwQ29weShVdGlscy5nZXRJdGVtQ29uZmlnKHYubGFiZWwgfHwgdi5iYXNlX2lkKSk7XHJcbiAgICAgICAgICAgIGNvbmZpZy5iaWQgPSB2LmxhYmVsIHx8IHYuYmFzZV9pZFxyXG4gICAgICAgICAgICBpZiAoY29uZmlnLmlkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5udW0gPSB2LnZhbCB8fCB2LnF1YW50aXR5O1xyXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBJdGVtc1Bvb2wuZ2V0SW5zdGFuY2UoKS5nZXRJdGVtKFwiYmFja3BhY2tfaXRlbVwiKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0UGFyZW50KHRoaXMuZ29vZHNfc2Nyb2xsX2NvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICBpdGVtLmluaXRDb25maWcoZmFsc2UsIDEsIGZhbHNlLCBmYWxzZSlcclxuICAgICAgICAgICAgICAgIGlmIChtYXhfd2lkdGggPiB0aGlzLmdvb2RzX3Njcm9sbF9zaXplLndpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRQb3NpdGlvbihpICogKEJhY2tQYWNrSXRlbS5XaWR0aCArIDgpIC0gbWF4X3dpZHRoIC8gMiArIEJhY2tQYWNrSXRlbS5XaWR0aCAvIDIsIDApXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0UG9zaXRpb24oaSAqIChCYWNrUGFja0l0ZW0uV2lkdGggKyA4KSAtIChzaG93X2xpc3QubGVuZ3RoIC0gMSkgKiBCYWNrUGFja0l0ZW0uV2lkdGggLyAyLCAwKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaXRlbS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnNldERhdGEoY29uZmlnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29vZHNfbGlzdFtpXSA9IGl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNoYW5nZUJ1dHRvblN0YXR1czogZnVuY3Rpb24gKHN0YXR1cykge1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0Q29tbW9uSWNvbVBhdGgoXCJjb21tb25fMTAxN1wiKSwgZnVuY3Rpb24gKHNmX29iaikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idG5faW1nLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgICAgIHRoaXMuYnRuX2xhYmVsLnN0cmluZyA9IFwi6aKG5Y+WXCI7XHJcbiAgICAgICAgICAgIHRoaXMuYnRuX2xhYmVsX2xvLmNvbG9yID0gbmV3IGNjLkNvbG9yKDB4NmMsIDB4MmIsIDB4MDAsIDB4ZmYpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5idG5fbGFiZWwuc3RyaW5nID0gXCLliKDpmaRcIjtcclxuICAgICAgICAgICAgdGhpcy5idG5fbGFiZWxfbG8uY29sb3IgPSBuZXcgY2MuQ29sb3IoMHgyYiwgMHg2MSwgMHgwZCwgMHhmZilcclxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldENvbW1vbkljb21QYXRoKFwiY29tbW9uXzEwMThcIiksIGZ1bmN0aW9uIChzZl9vYmopIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnRuX2ltZy5zcHJpdGVGcmFtZSA9IHNmX29iajtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY2hhbmdlSWNvbjogZnVuY3Rpb24gKHN0YXR1cykge1xyXG4gICAgICAgIGlmIChzdGF0dXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoc3RhdHVzID09IDEpIHsgLy/lt7Lor7tcclxuICAgICAgICAgICAgICAgIGlmICgodGhpcy5kYXRhLmFzc2V0cyAmJiB0aGlzLmRhdGEuaXRlbXMpICYmIChVdGlscy5nZXRBcnJMZW4odGhpcy5kYXRhLmFzc2V0cykgPiAwIHx8IFV0aWxzLmdldEFyckxlbih0aGlzLmRhdGEuaXRlbXMpID4gMCkpIHsgLy/or7vkuobmsqHpooZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcIm1haWxcIiwgXCJtYWlsX2ljb240XCIpLCBmdW5jdGlvbiAocmVzX29iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc19vYmplY3QgPSByZXNfb2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmljb24uc3ByaXRlRnJhbWUgPSByZXNfb2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJtYWlsXCIsIFwibWFpbF9pY29uM1wiKSwgZnVuY3Rpb24gKHJlc19vYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNfb2JqZWN0ID0gcmVzX29iamVjdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pY29uLnNwcml0ZUZyYW1lID0gcmVzX29iamVjdDtcclxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09IDIpIHsgLy/poobkuoZcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwibWFpbFwiLCBcIm1haWxfaWNvbjNcIiksIGZ1bmN0aW9uIChyZXNfb2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNfb2JqZWN0ID0gcmVzX29iamVjdDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmljb24uc3ByaXRlRnJhbWUgPSByZXNfb2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PSAwKSB7IC8v5pyq6K+7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZGF0YS5hc3NldHMgJiYgdGhpcy5kYXRhLml0ZW1zKSAmJiAoVXRpbHMuZ2V0QXJyTGVuKHRoaXMuZGF0YS5hc3NldHMpID4gMCB8fCBVdGlscy5nZXRBcnJMZW4odGhpcy5kYXRhLml0ZW1zKSA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJtYWlsXCIsIFwibWFpbF9pY29uMlwiKSwgZnVuY3Rpb24gKHJlc19vYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNfb2JqZWN0ID0gcmVzX29iamVjdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pY29uLnNwcml0ZUZyYW1lID0gcmVzX29iamVjdDtcclxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwibWFpbFwiLCBcIm1haWxfaWNvbjFcIiksIGZ1bmN0aW9uIChyZXNfb2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzX29iamVjdCA9IHJlc19vYmplY3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWNvbi5zcHJpdGVGcmFtZSA9IHJlc19vYmplY3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY2xvc2VfY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5nb29kc19saXN0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLmdvb2RzX2xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdvb2RzX2xpc3Rba10gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ29vZHNfbGlzdFtrXS5kZWxldGVNZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ29vZHNfbGlzdFtrXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nb29kc19saXN0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdHJsLm9wZW5NYWlsSW5mbyhmYWxzZSlcclxuICAgIH0sXHJcblxyXG4gICAgb25IaWRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBvbkRlbGV0ZTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNYWlsSW5mb1dpbmRvdzsiXX0=