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
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/task/task_controller.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, '4f6bfKZYWRDXpwlXMiaunHe', 'task_controller');
// Scripts/mod/task/task_controller.js
 
"use strict";
 
// ////////////////////////////////////////////////////////////////////
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//      任务,日常,成就
// <br/>Create: 2019-01-09 11:26:10
// ////////////////////////////////////////////////////////////////////
var RoleController = require("role_controller");
 
var TaskConst = require("task_const");
 
var MainuiConst = require("mainui_const");
 
var MainuiController = require("mainui_controller");
 
var JumpController = require("jump_controller");
 
var TaskController = cc.Class({
  "extends": BaseController,
  ctor: function ctor() {},
  // 初始化配置数据
  initConfig: function initConfig() {
    var TaskModel = require("task_model");
 
    this.model = new TaskModel(this);
    this.model.initConfig();
  },
  // 返回当前的model
  getModel: function getModel() {
    return this.model;
  },
  // 注册监听事件
  registerEvents: function registerEvents() {
    if (this.init_quest_event == null) {
      this.init_quest_event = gcore.GlobalEvent.bind(EventId.EVT_ROLE_CREATE_SUCCESS, function () {
        gcore.GlobalEvent.unbind(this.init_quest_event);
        this.init_quest_event = null;
 
        if (this.notice_view == null) {
          var TaskNoticeView = require("task_notice_view");
 
          this.notice_view = new TaskNoticeView();
          this.notice_view.open();
        } //角色更新之后请求3条任务相关数据
        // this.requestBaseQuestData();
 
 
        this.role_vo = RoleController.getInstance().getRoleVo();
 
        if (this.role_assets_event == null) {
          this.role_assets_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) {
            if (key == "activity") this.model.checkQuestAndFeatStatus(TaskConst.update_type.activity);
          }.bind(this));
        }
      }.bind(this));
    }
 
    if (this.re_link_game_event == null) {
      this.re_link_game_event = gcore.GlobalEvent.bind(EventId.EVT_RE_LINK_GAME, function () {
        var GuideController = require("guide_controller");
 
        if (!GuideController.getInstance().isInGuide()) this.openTaskMainWindow(false); // this.requestBaseQuestData();
      }.bind(this));
    }
  },
  requestBaseQuestData: function requestBaseQuestData() {
    this.SendProtocal(10400, {}); //请求所有任务列表
 
    this.SendProtocal(16400, {}); //请求当前所有的成就列表
 
    this.requestActivityInfo(); //请求活跃度
  },
  // 注册协议接受事件
  registerProtocals: function registerProtocals() {
    this.RegisterProtocal(10400, this.on10400); //全部任务列表
 
    this.RegisterProtocal(10403, this.on10403); //增加已接任务
 
    this.RegisterProtocal(10406, this.on10406); //提交任务返回,客户端自己更新内存缓存数据
 
    this.RegisterProtocal(10409, this.on10409); //更新已接任务进度
 
    this.RegisterProtocal(16400, this.on16400); //全部成就列表
 
    this.RegisterProtocal(16401, this.on16401); //更新成就进度,也可能是新增成就
 
    this.RegisterProtocal(16402, this.on16402); //提交成就返回
 
    this.RegisterProtocal(20300, this.on20300); //已领取的活跃宝箱
 
    this.RegisterProtocal(20301, this.on20301); //请求领取活跃宝箱
    //新主线
 
    this.RegisterProtocal(30001, this.on30001); //进度更新时返回
 
    this.RegisterProtocal(30002, this.on30002); //提交任务返回
  },
  // @desc:打开日常任务主界面
  // author:{author}
  // time:2018-05-22 11:32:35
  // //@status:打开或者关闭
  // //@index:自动跳转到
  // return
  openTaskMainWindow: function openTaskMainWindow(status, index) {
    if (status == false) {
      if (this.task_main_window != null) {
        this.task_main_window.close();
        this.task_main_window = null;
      }
    } else {
      if (this.task_main_window == null) {
        var TaskMainWindow = require("task_main_window");
 
        this.task_main_window = new TaskMainWindow();
      } // if (this.task_main_window.isOpen() == false)
      //     this.task_main_window.open(index);
 
 
      this.task_main_window.open(index);
    }
  },
  // @desc:点击任务前往
  // author:{author}
  // time:2018-05-22 21:00:26
  // //@data:
  // //@index:
  // //@open_type: 
  // return
  handleTaskProgress: function handleTaskProgress(data, index, open_type) {
    index = index || 1;
 
    if (data.config.progress == null || Utils.next(data.config.progress) == null) {
      if (data.id != null) cc.log("=================> 处理任务进度时出错,任务id为 " + data.id + " 的没有配置任务进度");
      return;
    }
 
    var progressConfig = data.config.progress[index];
 
    if (progressConfig == null) {
      if (data.id != null) cc.log("=================> 处理任务id为 " + data.id + " 的第 " + index + " 个进度要求时出错");
      return;
    } //拓展参数用于跳转
 
 
    var extra = data.config.extra;
    this.gotoTagertFun(progressConfig, extra, open_type);
  },
  //desc:任务和成就的跳转
  //time:2018-07-07 03:57:59
  //@progressConfig:
  //@extra:
  //@open_type:
  //@return 
  gotoTagertFun: function gotoTagertFun(progressConfig, extra, open_type) {
    // this.openTaskMainWindow(false)
    if (progressConfig == null) return;
    var _progress = Config.quest_data.data_progress_lable;
 
    if (progressConfig.cli_label == _progress.evt_recruit) {
      //进行X次英雄召唤
      JumpController.getInstance().jumpViewByEvtData([1]);
    } else if (progressConfig.cli_label == _progress.evt_partner) {
      //获得1个SS英雄2.获得XX个英雄3.集齐冰雪领域(图书馆XX类型收集)的所有英雄4.获得XX个SS英雄
      if (extra && Utils.next(extra)) {
        var extra_type = extra[0];
        var extra_val = extra[1];
        JumpController.getInstance().jumpViewByEvtData([2, extra_type, extra_val]);
      } else {
        var PartnersummonController = require("partnersummon_controller");
 
        PartnersummonController.getInstance().openPartnerSummonWindow(true);
      }
    } else if (progressConfig.cli_label == _progress.evt_arena_fight || //竞技场挑战X次(无论成败)
    progressConfig.cli_label == _progress.evt_arena_fight_result || //竞技场挑战胜利X次
    progressConfig.cli_label == _progress.evt_arena_score || //竞技场
    progressConfig.cli_label == _progress.evt_arena_rank) {
      //竞技场排行达到前XX名
      JumpController.getInstance().jumpViewByEvtData([3]);
    } else if (progressConfig.cli_label == _progress.evt_friend_present || //向好友赠送
    progressConfig.cli_label == _progress.evt_friend) {
      //拥有XX个好友
      JumpController.getInstance().jumpViewByEvtData([4]);
    } else if (progressConfig.cli_label == _progress.evt_dungeon_pass) {
      //通过指定副本id
      JumpController.getInstance().jumpViewByEvtData([5]);
    } else if (progressConfig.cli_label == _progress.evt_levup || //人物角色达到XX级
    progressConfig.cli_label == _progress.evt_get_item || // 获得一个物品
    progressConfig.cli_label == _progress.evt_dungeon_enter) {
      //每日挑战X次地下城副本
      JumpController.getInstance().jumpViewByEvtData([5]);
    } else if (progressConfig.cli_label == _progress.evt_loss_silver_coin) {
      //累计消耗xx银币    elseif progressConfig.cli_label == _progress.evt_loss_coin then --累计消耗xx金币,
      JumpController.getInstance().jumpViewByEvtData([6]);
    } else if (progressConfig.cli_label == _progress.evt_gain_gold) {
      //拥有xx蓝钻
      JumpController.getInstance().jumpViewByEvtData([7]);
    } else if (progressConfig.cli_label == _progress.evt_eqm_sell) {
      //装备熔炼
      JumpController.getInstance().jumpViewByEvtData([8]);
    } else if (progressConfig.cli_label == _progress.evt_say) {
      //世界聊天
      JumpController.getInstance().jumpViewByEvtData([9]);
    } else if (progressConfig.cli_label == _progress.evt_friend_sns) {
      //私聊
      JumpController.getInstance().jumpViewByEvtData([10]);
    } else if (progressConfig.cli_label == _progress.evt_dungeon_fast_combat) {
      //快速作战X次
      JumpController.getInstance().jumpViewByEvtData([11]);
    } else if (progressConfig.cli_label == _progress.evt_adventure_explore || //探险X间未探索的房间
    progressConfig.cli_label == _progress.evt_adventure_plunder || //任意掠夺他人X次(无论成败
    progressConfig.cli_label == _progress.evt_adventure_goto_floor || //进入神界冒险第X层
    progressConfig.cli_label == _progress.evt_adventure_box || //开启宝箱XX次(宝箱总数)7.宝箱开出X次神器
    progressConfig.cli_label == _progress.evt_adventure_finger_guessing || //猜拳累计获胜X次8.猜拳累计失败X次
    progressConfig.cli_label == _progress.evt_adventure_answer_all_right || //智力大乱斗答题全对累计X次
    progressConfig.cli_label == _progress.evt_adventure_plunder_result || //累计成功掠夺X次
    progressConfig.cli_label == _progress.evt_adventure_kill_mon) {//累计击败小怪X次
    } else if (progressConfig.cli_label == _progress.evt_boss_fight || //挑战X次个人BOSS
    progressConfig.cli_label == _progress.evt_boss_fight_result) {//击败XX级个人BOSS(指定类)
    } else if (progressConfig.cli_label == _progress.evt_world_boss_fight || //挑战X次世界BOSS3.累计挑战XX次世界BOSS
    progressConfig.cli_label == _progress.evt_world_boss_fight_ko) {//完成一次任意世界BOSS的击杀(最后一击)
    } else if (progressConfig.cli_label == _progress.evt_star_tower_pass) {
      //扫荡或挑战星命塔任意一层X次
      JumpController.getInstance().jumpViewByEvtData([12]);
    } else if (progressConfig.cli_label == _progress.evt_guild_dun_fight || //挑战任意公会bossX次
    progressConfig.cli_label == _progress.evt_guild_dun_fight_ko) {
      //对公会Boss的最后一击达到x次
      JumpController.getInstance().jumpViewByEvtData([31]);
    } else if (progressConfig.cli_label == _progress.evt_guild_donate) {
      //2.公会任意种类捐献X次3.公会XX类型捐献达到X次4.公会所以类型捐献总共达到XX次
      JumpController.getInstance().jumpViewByEvtData([13]);
    } else if (progressConfig.cli_label == _progress.evt_partner_enchant_eqm || //精炼装备X次
    progressConfig.cli_label == _progress.evt_partner_levelup || //升级英雄X次
    progressConfig.cli_label == _progress.evt_partner_eqm || //装备X套橙色装备(即武器、衣服、头盔、鞋子都为橙色)
    progressConfig.cli_label == _progress.evt_partner_artifact || //装备1件神器
    progressConfig.cli_label == _progress.evt_eqm_compound) {
      //进阶x装备
      JumpController.getInstance().jumpViewByEvtData([19]);
    } else if (progressConfig.cli_label == _progress.evt_star_divination) {
      //任意进行X次观星(普通观星和皇家观星)
      AuguryController.getInstance().openMainView(true);
    } else if (progressConfig.cli_label == _progress.evt_dungeon_auto) {
      //扫荡剧情副本
      JumpController.getInstance().jumpViewByEvtData([5]);
    } else if (progressConfig.cli_label == _progress.evt_guild_join) {
      //加入一个公会
      JumpController.getInstance().jumpViewByEvtData([14]);
    } else if (progressConfig.cli_label == _progress.evt_gain_guild) {
      //公会贡献达到
      JumpController.getInstance().jumpViewByEvtData([14]);
    } else if (progressConfig.cli_label == _progress.evt_loss_guild) {
      //累计消耗XX贡献点
      JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.UnionShop]);
    } else if (progressConfig.cli_label == _progress.evt_power) {
      //战力达到多少
      JumpController.getInstance().jumpViewByEvtData([16]);
    } else if (progressConfig.cli_label == _progress.evt_star_natal || //集齐X套星命3.装备X套紫/红/橙命格
    progressConfig.cli_label == _progress.evt_star_level_up || //X套星命升到X级
    progressConfig.cli_label == _progress.evt_star_natal_level_up) {
      //X个红色命格升星到X星
      StarlifeController.getInstance().openMainView(true);
    } else if (progressConfig.cli_label == _progress.evt_formation_open || //已学习的阵法达到X个
    progressConfig.cli_label == _progress.evt_formation_level_up) {//X个阵法达到X级
    } else if (progressConfig.cli_label == _progress.evt_dungeon_stone_fight) {
      //1.参与x次宝石副本2.参与x次圣器副本,
      JumpController.getInstance().jumpViewByEvtData([17]);
    } else if (progressConfig.cli_label == _progress.evt_shipping) {
      //参与远航,
      JumpController.getInstance().jumpViewByEvtData([18]);
    } else if (progressConfig.cli_label == _progress.evt_escort_enter || progressConfig.cli_label == _progress.evt_escort_fight) {
      // 萌兽
      MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.escort);
    } else if (progressConfig.cli_label == _progress.evt_endless_fight) {
      // 无尽试炼
      JumpController.getInstance().jumpViewByEvtData([43]);
    } else if (progressConfig.cli_label == _progress.evt_mystery_buy) {
      // 打开商城
      var MallController = require("mall_controller");
 
      if (progressConfig.target == 1) {
        JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.GodShop]);
      } else if (progressConfig.target == 2) {
        JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.Recovery]);
      } else if (progressConfig.target == 3) {
        JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.ScoreShop]);
      } else if (progressConfig.target == 4) {
        // 杂货店
        JumpController.getInstance().jumpViewByEvtData([6]);
      } else {
        JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.Recovery]);
      }
    } else if (progressConfig.cli_label == _progress.evt_partner_star) {
      // 打开英雄主界面升星
      JumpController.getInstance().jumpViewByEvtData([19]);
    } else if (progressConfig.cli_label == _progress.evt_hallows_all_step || progressConfig.cli_label == _progress.evt_hallows_step || progressConfig.cli_label == _progress.evt_hallows_activate) {
      // 打开提升圣器
      JumpController.getInstance().jumpViewByEvtData([20]);
    } else if (progressConfig.cli_label == _progress.evt_guild_war) {
      // 打开公会站
      JumpController.getInstance().jumpViewByEvtData([21]);
    } else if (progressConfig.cli_label == _progress.evt_endless_pass) {
      // 打开无尽之塔
      Endless_trailController.getInstance().openEndlessMainWindow(true);
    } else if (progressConfig.cli_label == _progress.evt_partner_decompose) {
      // 祭祀小屋
      JumpController.getInstance().jumpViewByEvtData([22]);
    } else if (progressConfig.cli_label == _progress.evt_partner_star_up) {
      // 融合祭坛
      JumpController.getInstance().jumpViewByEvtData([23]);
    } else if (progressConfig.cli_label == _progress.evt_star_tower_floor_pass) {
      // 试练塔
      JumpController.getInstance().jumpViewByEvtData([12]);
    } else if (progressConfig.cli_label == _progress.evt_recruit_high) {
      // 先知殿 
      JumpController.getInstance().jumpViewByEvtData([24]);
    } else if (progressConfig.cli_label == _progress.evt_expedition_fight) {
      //远征
      JumpController.getInstance().jumpViewByEvtData([25]);
    } else if (progressConfig.cli_label == _progress.evt_primus_fight) {
      //星河
      JumpController.getInstance().jumpViewByEvtData([27]);
    } else if (progressConfig.cli_label == _progress.evt_equipment_compound) {
      //锻造
      JumpController.getInstance().jumpViewByEvtData([26]);
    } else if (progressConfig.cli_label == _progress.evt_fragment_synthesis) {
      //背包碎片页签
      JumpController.getInstance().jumpViewByEvtData([8, 3]);
    } else if (progressConfig.cli_label == _progress.evt_dungeon_ext_reward) {
      //通关奖励
      JumpController.getInstance().jumpViewByEvtData([46]);
    } else if (progressConfig.cli_label == _progress.evt_artifact_compose) {
      //符文锻造
      JumpController.getInstance().jumpViewByEvtData([26, 2]);
    }
  },
  ///---------------------------任务相关 start
  on10400: function on10400(data) {
    this.model.addTaskList(data.quest_list, false, true);
  },
  on10403: function on10403(data) {
    this.model.addTaskList(data.quest_list);
  },
  on10409: function on10409(data) {
    this.model.addTaskList(data.quest_list, true);
  },
  on10406: function on10406(data) {
    message(data.msg);
    if (data.flag == 1) this.model.setTaskCompleted(data.id);
  },
  requestSubmitTask: function requestSubmitTask(id) {
    var protocal = {};
    protocal.id = id;
    this.SendProtocal(10406, protocal);
  },
  //------------------------任务相关 end
  //------------------------成就相关 start
  on16400: function on16400(data) {
    this.model.addFeatList(data.feat_list, false, true);
  },
  on16401: function on16401(data) {
    this.model.addFeatList(data.feat_list, true);
  },
  on16402: function on16402(data) {
    message(data.msg);
 
    if (data.code == 1) {
      this.model.setFeatCompleted(data.id);
    }
  },
  requestSubmitFeat: function requestSubmitFeat(id) {
    var protocal = {};
    protocal.id = id;
    this.SendProtocal(16402, protocal);
  },
  //------------------------成就相关 end
  //------------------------活跃度相关 start
  requestActivityInfo: function requestActivityInfo() {
    this.SendProtocal(20300, {});
  },
  on20300: function on20300(data) {
    this.model.updateActivityData(data.activity_box);
  },
  requestGetActivityAwards: function requestGetActivityAwards(activity) {
    var proto = {};
    proto.activity = activity;
    this.SendProtocal(20301, proto);
  },
  on20301: function on20301(data) {
    message(data.msg);
    if (data.code == 1) this.model.updateSingleActivityData(data.activity);
  },
  //------------------------活跃度相关 end
  //-----------------------新主线 
  send30001: function send30001() {
    this.SendProtocal(30001, {});
  },
  on30001: function on30001(data) {
    cc.log("30001", data);
    this.model.setMainTaskData(data);
  },
  send30002: function send30002(task_id) {
    var proto = {};
    proto.id = task_id;
    this.SendProtocal(30002, proto);
  },
  on30002: function on30002(data) {
    cc.log("3002", data);
    message(data.msg);
 
    if (data.code == 1) {}
  }
});
module.exports = TaskController;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx0YXNrXFx0YXNrX2NvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiUm9sZUNvbnRyb2xsZXIiLCJyZXF1aXJlIiwiVGFza0NvbnN0IiwiTWFpbnVpQ29uc3QiLCJNYWludWlDb250cm9sbGVyIiwiSnVtcENvbnRyb2xsZXIiLCJUYXNrQ29udHJvbGxlciIsImNjIiwiQ2xhc3MiLCJCYXNlQ29udHJvbGxlciIsImN0b3IiLCJpbml0Q29uZmlnIiwiVGFza01vZGVsIiwibW9kZWwiLCJnZXRNb2RlbCIsInJlZ2lzdGVyRXZlbnRzIiwiaW5pdF9xdWVzdF9ldmVudCIsImdjb3JlIiwiR2xvYmFsRXZlbnQiLCJiaW5kIiwiRXZlbnRJZCIsIkVWVF9ST0xFX0NSRUFURV9TVUNDRVNTIiwidW5iaW5kIiwibm90aWNlX3ZpZXciLCJUYXNrTm90aWNlVmlldyIsIm9wZW4iLCJyb2xlX3ZvIiwiZ2V0SW5zdGFuY2UiLCJnZXRSb2xlVm8iLCJyb2xlX2Fzc2V0c19ldmVudCIsIlVQREFURV9ST0xFX0FUVFJJQlVURSIsImtleSIsInZhbHVlIiwiY2hlY2tRdWVzdEFuZEZlYXRTdGF0dXMiLCJ1cGRhdGVfdHlwZSIsImFjdGl2aXR5IiwicmVfbGlua19nYW1lX2V2ZW50IiwiRVZUX1JFX0xJTktfR0FNRSIsIkd1aWRlQ29udHJvbGxlciIsImlzSW5HdWlkZSIsIm9wZW5UYXNrTWFpbldpbmRvdyIsInJlcXVlc3RCYXNlUXVlc3REYXRhIiwiU2VuZFByb3RvY2FsIiwicmVxdWVzdEFjdGl2aXR5SW5mbyIsInJlZ2lzdGVyUHJvdG9jYWxzIiwiUmVnaXN0ZXJQcm90b2NhbCIsIm9uMTA0MDAiLCJvbjEwNDAzIiwib24xMDQwNiIsIm9uMTA0MDkiLCJvbjE2NDAwIiwib24xNjQwMSIsIm9uMTY0MDIiLCJvbjIwMzAwIiwib24yMDMwMSIsIm9uMzAwMDEiLCJvbjMwMDAyIiwic3RhdHVzIiwiaW5kZXgiLCJ0YXNrX21haW5fd2luZG93IiwiY2xvc2UiLCJUYXNrTWFpbldpbmRvdyIsImhhbmRsZVRhc2tQcm9ncmVzcyIsImRhdGEiLCJvcGVuX3R5cGUiLCJjb25maWciLCJwcm9ncmVzcyIsIlV0aWxzIiwibmV4dCIsImlkIiwibG9nIiwicHJvZ3Jlc3NDb25maWciLCJleHRyYSIsImdvdG9UYWdlcnRGdW4iLCJfcHJvZ3Jlc3MiLCJDb25maWciLCJxdWVzdF9kYXRhIiwiZGF0YV9wcm9ncmVzc19sYWJsZSIsImNsaV9sYWJlbCIsImV2dF9yZWNydWl0IiwianVtcFZpZXdCeUV2dERhdGEiLCJldnRfcGFydG5lciIsImV4dHJhX3R5cGUiLCJleHRyYV92YWwiLCJQYXJ0bmVyc3VtbW9uQ29udHJvbGxlciIsIm9wZW5QYXJ0bmVyU3VtbW9uV2luZG93IiwiZXZ0X2FyZW5hX2ZpZ2h0IiwiZXZ0X2FyZW5hX2ZpZ2h0X3Jlc3VsdCIsImV2dF9hcmVuYV9zY29yZSIsImV2dF9hcmVuYV9yYW5rIiwiZXZ0X2ZyaWVuZF9wcmVzZW50IiwiZXZ0X2ZyaWVuZCIsImV2dF9kdW5nZW9uX3Bhc3MiLCJldnRfbGV2dXAiLCJldnRfZ2V0X2l0ZW0iLCJldnRfZHVuZ2Vvbl9lbnRlciIsImV2dF9sb3NzX3NpbHZlcl9jb2luIiwiZXZ0X2dhaW5fZ29sZCIsImV2dF9lcW1fc2VsbCIsImV2dF9zYXkiLCJldnRfZnJpZW5kX3NucyIsImV2dF9kdW5nZW9uX2Zhc3RfY29tYmF0IiwiZXZ0X2FkdmVudHVyZV9leHBsb3JlIiwiZXZ0X2FkdmVudHVyZV9wbHVuZGVyIiwiZXZ0X2FkdmVudHVyZV9nb3RvX2Zsb29yIiwiZXZ0X2FkdmVudHVyZV9ib3giLCJldnRfYWR2ZW50dXJlX2Zpbmdlcl9ndWVzc2luZyIsImV2dF9hZHZlbnR1cmVfYW5zd2VyX2FsbF9yaWdodCIsImV2dF9hZHZlbnR1cmVfcGx1bmRlcl9yZXN1bHQiLCJldnRfYWR2ZW50dXJlX2tpbGxfbW9uIiwiZXZ0X2Jvc3NfZmlnaHQiLCJldnRfYm9zc19maWdodF9yZXN1bHQiLCJldnRfd29ybGRfYm9zc19maWdodCIsImV2dF93b3JsZF9ib3NzX2ZpZ2h0X2tvIiwiZXZ0X3N0YXJfdG93ZXJfcGFzcyIsImV2dF9ndWlsZF9kdW5fZmlnaHQiLCJldnRfZ3VpbGRfZHVuX2ZpZ2h0X2tvIiwiZXZ0X2d1aWxkX2RvbmF0ZSIsImV2dF9wYXJ0bmVyX2VuY2hhbnRfZXFtIiwiZXZ0X3BhcnRuZXJfbGV2ZWx1cCIsImV2dF9wYXJ0bmVyX2VxbSIsImV2dF9wYXJ0bmVyX2FydGlmYWN0IiwiZXZ0X2VxbV9jb21wb3VuZCIsImV2dF9zdGFyX2RpdmluYXRpb24iLCJBdWd1cnlDb250cm9sbGVyIiwib3Blbk1haW5WaWV3IiwiZXZ0X2R1bmdlb25fYXV0byIsImV2dF9ndWlsZF9qb2luIiwiZXZ0X2dhaW5fZ3VpbGQiLCJldnRfbG9zc19ndWlsZCIsIk1hbGxDb25zdCIsIk1hbGxUeXBlIiwiVW5pb25TaG9wIiwiZXZ0X3Bvd2VyIiwiZXZ0X3N0YXJfbmF0YWwiLCJldnRfc3Rhcl9sZXZlbF91cCIsImV2dF9zdGFyX25hdGFsX2xldmVsX3VwIiwiU3RhcmxpZmVDb250cm9sbGVyIiwiZXZ0X2Zvcm1hdGlvbl9vcGVuIiwiZXZ0X2Zvcm1hdGlvbl9sZXZlbF91cCIsImV2dF9kdW5nZW9uX3N0b25lX2ZpZ2h0IiwiZXZ0X3NoaXBwaW5nIiwiZXZ0X2VzY29ydF9lbnRlciIsImV2dF9lc2NvcnRfZmlnaHQiLCJjaGFuZ2VNYWluVUlTdGF0dXMiLCJidG5faW5kZXgiLCJtYWluX3NjZW5lIiwic3ViX3R5cGUiLCJlc2NvcnQiLCJldnRfZW5kbGVzc19maWdodCIsImV2dF9teXN0ZXJ5X2J1eSIsIk1hbGxDb250cm9sbGVyIiwidGFyZ2V0IiwiR29kU2hvcCIsIlJlY292ZXJ5IiwiU2NvcmVTaG9wIiwiZXZ0X3BhcnRuZXJfc3RhciIsImV2dF9oYWxsb3dzX2FsbF9zdGVwIiwiZXZ0X2hhbGxvd3Nfc3RlcCIsImV2dF9oYWxsb3dzX2FjdGl2YXRlIiwiZXZ0X2d1aWxkX3dhciIsImV2dF9lbmRsZXNzX3Bhc3MiLCJFbmRsZXNzX3RyYWlsQ29udHJvbGxlciIsIm9wZW5FbmRsZXNzTWFpbldpbmRvdyIsImV2dF9wYXJ0bmVyX2RlY29tcG9zZSIsImV2dF9wYXJ0bmVyX3N0YXJfdXAiLCJldnRfc3Rhcl90b3dlcl9mbG9vcl9wYXNzIiwiZXZ0X3JlY3J1aXRfaGlnaCIsImV2dF9leHBlZGl0aW9uX2ZpZ2h0IiwiZXZ0X3ByaW11c19maWdodCIsImV2dF9lcXVpcG1lbnRfY29tcG91bmQiLCJldnRfZnJhZ21lbnRfc3ludGhlc2lzIiwiZXZ0X2R1bmdlb25fZXh0X3Jld2FyZCIsImV2dF9hcnRpZmFjdF9jb21wb3NlIiwiYWRkVGFza0xpc3QiLCJxdWVzdF9saXN0IiwibWVzc2FnZSIsIm1zZyIsImZsYWciLCJzZXRUYXNrQ29tcGxldGVkIiwicmVxdWVzdFN1Ym1pdFRhc2siLCJwcm90b2NhbCIsImFkZEZlYXRMaXN0IiwiZmVhdF9saXN0IiwiY29kZSIsInNldEZlYXRDb21wbGV0ZWQiLCJyZXF1ZXN0U3VibWl0RmVhdCIsInVwZGF0ZUFjdGl2aXR5RGF0YSIsImFjdGl2aXR5X2JveCIsInJlcXVlc3RHZXRBY3Rpdml0eUF3YXJkcyIsInByb3RvIiwidXBkYXRlU2luZ2xlQWN0aXZpdHlEYXRhIiwic2VuZDMwMDAxIiwic2V0TWFpblRhc2tEYXRhIiwic2VuZDMwMDAyIiwidGFza19pZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsY0FBYyxHQUFHQyxPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUMsU0FBUyxHQUFHRCxPQUFPLENBQUMsWUFBRCxDQUF2Qjs7QUFDQSxJQUFJRSxXQUFXLEdBQUdGLE9BQU8sQ0FBQyxjQUFELENBQXpCOztBQUNBLElBQUlHLGdCQUFnQixHQUFHSCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUksY0FBYyxHQUFHSixPQUFPLENBQUMsaUJBQUQsQ0FB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LElBQUwsSUFBYSxDQUFqQixFQUFvQixDQUVuQjtBQUNKO0FBcFh5QixDQUFULENBQXJCO0FBdVhBWSxNQUFNLENBQUNDLE9BQVAsR0FBaUIvTCxjQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDku7vliqHvvIzml6XluLjvvIzmiJDlsLFcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTAxLTA5IDExOjI2OjEwXG4vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKTtcbnZhciBUYXNrQ29uc3QgPSByZXF1aXJlKFwidGFza19jb25zdFwiKTtcbnZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG52YXIgTWFpbnVpQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcbnZhciBKdW1wQ29udHJvbGxlciA9IHJlcXVpcmUoXCJqdW1wX2NvbnRyb2xsZXJcIik7XG5cbnZhciBUYXNrQ29udHJvbGxlciA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ29udHJvbGxlcixcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMlumFjee9ruaVsOaNrlxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIFRhc2tNb2RlbCA9IHJlcXVpcmUoXCJ0YXNrX21vZGVsXCIpO1xuICAgICAgICB0aGlzLm1vZGVsID0gbmV3IFRhc2tNb2RlbCh0aGlzKTtcbiAgICAgICAgdGhpcy5tb2RlbC5pbml0Q29uZmlnKCk7XG4gICAgfSxcblxuICAgIC8vIOi/lOWbnuW9k+WJjeeahG1vZGVsXG4gICAgZ2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOebkeWQrOS6i+S7tlxuICAgIHJlZ2lzdGVyRXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmluaXRfcXVlc3RfZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pbml0X3F1ZXN0X2V2ZW50ID0gZ2NvcmUuR2xvYmFsRXZlbnQuYmluZChFdmVudElkLkVWVF9ST0xFX0NSRUFURV9TVUNDRVNTLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQudW5iaW5kKHRoaXMuaW5pdF9xdWVzdF9ldmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0X3F1ZXN0X2V2ZW50ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5vdGljZV92aWV3ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFRhc2tOb3RpY2VWaWV3ID0gcmVxdWlyZShcInRhc2tfbm90aWNlX3ZpZXdcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWNlX3ZpZXcgPSBuZXcgVGFza05vdGljZVZpZXcoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpY2Vfdmlldy5vcGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy/op5LoibLmm7TmlrDkuYvlkI7or7fmsYIz5p2h5Lu75Yqh55u45YWz5pWw5o2uXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5yZXF1ZXN0QmFzZVF1ZXN0RGF0YSgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb2xlX2Fzc2V0c19ldmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPSB0aGlzLnJvbGVfdm8uYmluZChFdmVudElkLlVQREFURV9ST0xFX0FUVFJJQlVURSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gXCJhY3Rpdml0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuY2hlY2tRdWVzdEFuZEZlYXRTdGF0dXMoVGFza0NvbnN0LnVwZGF0ZV90eXBlLmFjdGl2aXR5KTtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKHRoaXMucmVfbGlua19nYW1lX2V2ZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMucmVfbGlua19nYW1lX2V2ZW50ID0gZ2NvcmUuR2xvYmFsRXZlbnQuYmluZChFdmVudElkLkVWVF9SRV9MSU5LX0dBTUUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgR3VpZGVDb250cm9sbGVyID0gcmVxdWlyZShcImd1aWRlX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCFHdWlkZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5pc0luR3VpZGUoKSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuVGFza01haW5XaW5kb3coZmFsc2UpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMucmVxdWVzdEJhc2VRdWVzdERhdGEoKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZXF1ZXN0QmFzZVF1ZXN0RGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMDQwMCwge30pOyAgICAgICAgICAgICAgICAvL+ivt+axguaJgOacieS7u+WKoeWIl+ihqFxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxNjQwMCwge30pOyAgICAgICAgICAgICAgICAvL+ivt+axguW9k+WJjeaJgOacieeahOaIkOWwseWIl+ihqFxuICAgICAgICB0aGlzLnJlcXVlc3RBY3Rpdml0eUluZm8oKTsgICAgICAgICAgICAgICAgLy/or7fmsYLmtLvot4PluqZcbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5Y2P6K6u5o6l5Y+X5LqL5Lu2XG4gICAgcmVnaXN0ZXJQcm90b2NhbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwNDAwLCB0aGlzLm9uMTA0MDApOyAgICAgICAgIC8v5YWo6YOo5Lu75Yqh5YiX6KGoXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMDQwMywgdGhpcy5vbjEwNDAzKSAgICAgICAgICAgICAvL+WinuWKoOW3suaOpeS7u+WKoVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTA0MDYsIHRoaXMub24xMDQwNikgICAgICAgICAgICAgLy/mj5DkuqTku7vliqHov5Tlm57vvIzlrqLmiLfnq6/oh6rlt7Hmm7TmlrDlhoXlrZjnvJPlrZjmlbDmja5cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwNDA5LCB0aGlzLm9uMTA0MDkpICAgICAgICAgICAgIC8v5pu05paw5bey5o6l5Lu75Yqh6L+b5bqmXG5cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDE2NDAwLCB0aGlzLm9uMTY0MDApICAgICAgICAgICAgIC8v5YWo6YOo5oiQ5bCx5YiX6KGoXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjQwMSwgdGhpcy5vbjE2NDAxKSAgICAgICAgICAgICAvL+abtOaWsOaIkOWwsei/m+W6pu+8jOS5n+WPr+iDveaYr+aWsOWinuaIkOWwsVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY0MDIsIHRoaXMub24xNjQwMikgICAgICAgICAgICAgLy/mj5DkuqTmiJDlsLHov5Tlm55cblxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjAzMDAsIHRoaXMub24yMDMwMCkgICAgICAgICAgICAgLy/lt7Lpooblj5bnmoTmtLvot4Plrp3nrrFcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIwMzAxLCB0aGlzLm9uMjAzMDEpICAgICAgICAgICAgIC8v6K+35rGC6aKG5Y+W5rS76LeD5a6d566xXG5cbiAgICAgICAgLy/mlrDkuLvnur9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDMwMDAxLCB0aGlzLm9uMzAwMDEpICAgICAgICAgICAgIC8v6L+b5bqm5pu05paw5pe26L+U5ZueXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgzMDAwMiwgdGhpcy5vbjMwMDAyKSAgICAgICAgICAgICAvL+aPkOS6pOS7u+WKoei/lOWbnlxuICAgIH0sXG5cbiAgICAvLyBAZGVzYzrmiZPlvIDml6XluLjku7vliqHkuLvnlYzpnaJcbiAgICAvLyBhdXRob3I6e2F1dGhvcn1cbiAgICAvLyB0aW1lOjIwMTgtMDUtMjIgMTE6MzI6MzVcbiAgICAvLyAvL0BzdGF0dXM65omT5byA5oiW6ICF5YWz6ZetXG4gICAgLy8gLy9AaW5kZXg66Ieq5Yqo6Lez6L2s5YiwXG4gICAgLy8gcmV0dXJuXG4gICAgb3BlblRhc2tNYWluV2luZG93OiBmdW5jdGlvbiAoc3RhdHVzLCBpbmRleCkge1xuICAgICAgICBpZiAoc3RhdHVzID09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50YXNrX21haW5fd2luZG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tfbWFpbl93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tfbWFpbl93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudGFza19tYWluX3dpbmRvdyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIFRhc2tNYWluV2luZG93ID0gcmVxdWlyZShcInRhc2tfbWFpbl93aW5kb3dcIik7XG4gICAgICAgICAgICAgICAgdGhpcy50YXNrX21haW5fd2luZG93ID0gbmV3IFRhc2tNYWluV2luZG93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiAodGhpcy50YXNrX21haW5fd2luZG93LmlzT3BlbigpID09IGZhbHNlKVxuICAgICAgICAgICAgLy8gICAgIHRoaXMudGFza19tYWluX3dpbmRvdy5vcGVuKGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudGFza19tYWluX3dpbmRvdy5vcGVuKGluZGV4KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAZGVzYzrngrnlh7vku7vliqHliY3lvoBcbiAgICAvLyBhdXRob3I6e2F1dGhvcn1cbiAgICAvLyB0aW1lOjIwMTgtMDUtMjIgMjE6MDA6MjZcbiAgICAvLyAvL0BkYXRhOlxuICAgIC8vIC8vQGluZGV4OlxuICAgIC8vIC8vQG9wZW5fdHlwZTogXG4gICAgLy8gcmV0dXJuXG4gICAgaGFuZGxlVGFza1Byb2dyZXNzOiBmdW5jdGlvbiAoZGF0YSwgaW5kZXgsIG9wZW5fdHlwZSkge1xuICAgICAgICBpbmRleCA9IGluZGV4IHx8IDE7XG4gICAgICAgIGlmIChkYXRhLmNvbmZpZy5wcm9ncmVzcyA9PSBudWxsIHx8IFV0aWxzLm5leHQoZGF0YS5jb25maWcucHJvZ3Jlc3MpID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmlkICE9IG51bGwpXG4gICAgICAgICAgICAgICAgY2MubG9nKFwiPT09PT09PT09PT09PT09PT0+IOWkhOeQhuS7u+WKoei/m+W6puaXtuWHuumUmSzku7vliqFpZOS4uiBcIiArIGRhdGEuaWQgKyBcIiDnmoTmsqHmnInphY3nva7ku7vliqHov5vluqZcIik7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJvZ3Jlc3NDb25maWcgPSBkYXRhLmNvbmZpZy5wcm9ncmVzc1tpbmRleF07XG4gICAgICAgIGlmIChwcm9ncmVzc0NvbmZpZyA9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5pZCAhPSBudWxsKVxuICAgICAgICAgICAgICAgIGNjLmxvZyhcIj09PT09PT09PT09PT09PT09PiDlpITnkIbku7vliqFpZOS4uiBcIiArIGRhdGEuaWQgKyBcIiDnmoTnrKwgXCIgKyBpbmRleCArIFwiIOS4qui/m+W6puimgeaxguaXtuWHuumUmVwiKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy/mi5PlsZXlj4LmlbDnlKjkuo7ot7PovaxcbiAgICAgICAgdmFyIGV4dHJhID0gZGF0YS5jb25maWcuZXh0cmE7XG4gICAgICAgIHRoaXMuZ290b1RhZ2VydEZ1bihwcm9ncmVzc0NvbmZpZywgZXh0cmEsIG9wZW5fdHlwZSk7XG4gICAgfSxcblxuICAgIC8vZGVzYzrku7vliqHlkozmiJDlsLHnmoTot7PovaxcbiAgICAvL3RpbWU6MjAxOC0wNy0wNyAwMzo1Nzo1OVxuICAgIC8vQHByb2dyZXNzQ29uZmlnOlxuICAgIC8vQGV4dHJhOlxuICAgIC8vQG9wZW5fdHlwZTpcbiAgICAvL0ByZXR1cm4gXG4gICAgZ290b1RhZ2VydEZ1bjogZnVuY3Rpb24gKHByb2dyZXNzQ29uZmlnLCBleHRyYSwgb3Blbl90eXBlKSB7XG4gICAgICAgIC8vIHRoaXMub3BlblRhc2tNYWluV2luZG93KGZhbHNlKVxuICAgICAgICBpZiAocHJvZ3Jlc3NDb25maWcgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB2YXIgX3Byb2dyZXNzID0gQ29uZmlnLnF1ZXN0X2RhdGEuZGF0YV9wcm9ncmVzc19sYWJsZTtcblxuICAgICAgICBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcmVjcnVpdCkgeyAgLy/ov5vooYxY5qyh6Iux6ZuE5Y+s5ZSkXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcGFydG5lcikgeyAgICAgICAvL+iOt+W+lzHkuKpTU+iLsembhDIu6I635b6XWFjkuKroi7Hpm4QzLumbhum9kOWGsOmbqumihuWfn++8iOWbvuS5pummhlhY57G75Z6L5pS26ZuG77yJ55qE5omA5pyJ6Iux6ZuENC7ojrflvpdYWOS4qlNT6Iux6ZuEXG4gICAgICAgICAgICBpZiAoZXh0cmEgJiYgVXRpbHMubmV4dChleHRyYSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFfdHlwZSA9IGV4dHJhWzBdO1xuICAgICAgICAgICAgICAgIHZhciBleHRyYV92YWwgPSBleHRyYVsxXTtcbiAgICAgICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsyLCBleHRyYV90eXBlLCBleHRyYV92YWxdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIFBhcnRuZXJzdW1tb25Db250cm9sbGVyID0gcmVxdWlyZShcInBhcnRuZXJzdW1tb25fY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgICAgICBQYXJ0bmVyc3VtbW9uQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5QYXJ0bmVyU3VtbW9uV2luZG93KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2FyZW5hX2ZpZ2h0IHx8ICAgICAgICAgLy/nq57mioDlnLrmjJHmiJhY5qyh77yI5peg6K665oiQ6LSl77yJXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hcmVuYV9maWdodF9yZXN1bHQgfHwgICAgICAgICAvL+ernuaKgOWcuuaMkeaImOiDnOWIqVjmrKFcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2FyZW5hX3Njb3JlIHx8ICAgICAgICAgICAgICAgIC8v56ue5oqA5Zy6XG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hcmVuYV9yYW5rKSB7ICAgICAgICAgICAgICAgICAvL+ernuaKgOWcuuaOkuihjOi+vuWIsOWJjVhY5ZCNXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFszXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZnJpZW5kX3ByZXNlbnQgfHwgLy/lkJHlpb3lj4votaDpgIFcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2ZyaWVuZCkgeyAvL+aLpeaciVhY5Liq5aW95Y+LXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFs0XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZHVuZ2Vvbl9wYXNzKSB7IC8v6YCa6L+H5oyH5a6a5Ymv5pysaWRcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzVdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9sZXZ1cCB8fCAgIC8v5Lq654mp6KeS6Imy6L6+5YiwWFjnuqdcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2dldF9pdGVtIHx8ICAgLy8g6I635b6X5LiA5Liq54mp5ZOBXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9kdW5nZW9uX2VudGVyKSB7IC8v5q+P5pel5oyR5oiYWOasoeWcsOS4i+WfjuWJr+acrFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2xvc3Nfc2lsdmVyX2NvaW4pIHsvL+e0r+iuoea2iOiAl3h46ZO25biBICAgIGVsc2VpZiBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9sb3NzX2NvaW4gdGhlbiAtLee0r+iuoea2iOiAl3h46YeR5biBLFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2dhaW5fZ29sZCkgeyAvL+aLpeaciXh46JOd6ZK7XG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFs3XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZXFtX3NlbGwpIHsgLy/oo4XlpIfnhpTngrxcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzhdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9zYXkpIHsgLy/kuJbnlYzogYrlpKlcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzldKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9mcmllbmRfc25zKSB7IC8v56eB6IGKXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxMF0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2R1bmdlb25fZmFzdF9jb21iYXQpIHsgLy/lv6vpgJ/kvZzmiJhY5qyhXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxMV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2FkdmVudHVyZV9leHBsb3JlIHx8IC8v5o6i6ZmpWOmXtOacquaOoue0oueahOaIv+mXtFxuICAgICAgICAgICAgcHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfYWR2ZW50dXJlX3BsdW5kZXIgfHwgLy/ku7vmhI/mjqDlpLrku5bkurpY5qyh77yI5peg6K665oiQ6LSlXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hZHZlbnR1cmVfZ290b19mbG9vciB8fCAvL+i/m+WFpeelnueVjOWGkumZqeesrFjlsYJcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2FkdmVudHVyZV9ib3ggfHwgLy/lvIDlkK/lrp3nrrFYWOasoSjlrp3nrrHmgLvmlbApNy7lrp3nrrHlvIDlh7pY5qyh56We5ZmoXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hZHZlbnR1cmVfZmluZ2VyX2d1ZXNzaW5nIHx8IC8v54yc5ouz57Sv6K6h6I636IOcWOasoTgu54yc5ouz57Sv6K6h5aSx6LSlWOasoVxuICAgICAgICAgICAgcHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfYWR2ZW50dXJlX2Fuc3dlcl9hbGxfcmlnaHQgfHwgLy/mmbrlipvlpKfkubHmlpfnrZTpopjlhajlr7nntK/orqFY5qyhXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hZHZlbnR1cmVfcGx1bmRlcl9yZXN1bHQgfHwgLy/ntK/orqHmiJDlip/mjqDlpLpY5qyhXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hZHZlbnR1cmVfa2lsbF9tb24pIHsgLy/ntK/orqHlh7votKXlsI/mgKpY5qyhXG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfYm9zc19maWdodCB8fCAvL+aMkeaImFjmrKHkuKrkurpCT1NTXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9ib3NzX2ZpZ2h0X3Jlc3VsdCkgeyAvL+WHu+i0pVhY57qn5Liq5Lq6Qk9TU++8iOaMh+WumuexuylcblxuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X3dvcmxkX2Jvc3NfZmlnaHQgfHwgLy/mjJHmiJhY5qyh5LiW55WMQk9TUzMu57Sv6K6h5oyR5oiYWFjmrKHkuJbnlYxCT1NTXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF93b3JsZF9ib3NzX2ZpZ2h0X2tvKSB7ICAgLy/lrozmiJDkuIDmrKHku7vmhI/kuJbnlYxCT1NT55qE5Ye75p2A77yI5pyA5ZCO5LiA5Ye777yJXG5cbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9zdGFyX3Rvd2VyX3Bhc3MpIHsgLy/miavojaHmiJbmjJHmiJjmmJ/lkb3loZTku7vmhI/kuIDlsYJY5qyhXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxMl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2d1aWxkX2R1bl9maWdodCB8fCAvL+aMkeaImOS7u+aEj+WFrOS8mmJvc3NY5qyhXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9ndWlsZF9kdW5fZmlnaHRfa28pIHsgLy/lr7nlhazkvJpCb3Nz55qE5pyA5ZCO5LiA5Ye76L6+5YiweOasoVxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMzFdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9ndWlsZF9kb25hdGUpIHsgLy8yLuWFrOS8muS7u+aEj+enjeexu+aNkOeMrljmrKEzLuWFrOS8mlhY57G75Z6L5o2Q54yu6L6+5YiwWOasoTQu5YWs5Lya5omA5Lul57G75Z6L5o2Q54yu5oC75YWx6L6+5YiwWFjmrKFcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzEzXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcGFydG5lcl9lbmNoYW50X2VxbSB8fCAvL+eyvueCvOijheWkh1jmrKFcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X3BhcnRuZXJfbGV2ZWx1cCB8fCAvL+WNh+e6p+iLsembhFjmrKFcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X3BhcnRuZXJfZXFtIHx8IC8v6KOF5aSHWOWll+apmeiJsuijheWkh++8iOWNs+atpuWZqOOAgeiho+acjeOAgeWktOeblOOAgemei+WtkOmDveS4uuapmeiJsu+8iVxuICAgICAgICAgICAgcHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcGFydG5lcl9hcnRpZmFjdCB8fCAvL+ijheWkhzHku7bnpZ7lmahcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2VxbV9jb21wb3VuZCkgeyAvL+i/m+mYtnjoo4XlpIdcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE5XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfc3Rhcl9kaXZpbmF0aW9uKSB7IC8v5Lu75oSP6L+b6KGMWOasoeinguaYn++8iOaZrumAmuinguaYn+WSjOeah+WutuinguaYn++8iVxuICAgICAgICAgICAgQXVndXJ5Q29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5NYWluVmlldyh0cnVlKVxuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2R1bmdlb25fYXV0bykgeyAvL+aJq+iNoeWJp+aDheWJr+acrFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2d1aWxkX2pvaW4pIHsgLy/liqDlhaXkuIDkuKrlhazkvJpcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE0XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZ2Fpbl9ndWlsZCkgeyAvL+WFrOS8mui0oeeMrui+vuWIsFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMTRdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9sb3NzX2d1aWxkKSB7IC8v57Sv6K6h5raI6ICXWFjotKHnjK7ngrlcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE1LCBNYWxsQ29uc3QuTWFsbFR5cGUuVW5pb25TaG9wXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcG93ZXIpIHsgLy/miJjlipvovr7liLDlpJrlsJFcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE2XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfc3Rhcl9uYXRhbCB8fCAvL+mbhum9kFjlpZfmmJ/lkb0zLuijheWkh1jlpZfntKsv57qiL+apmeWRveagvFxuICAgICAgICAgICAgcHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfc3Rhcl9sZXZlbF91cCB8fCAvL1jlpZfmmJ/lkb3ljYfliLBY57qnXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9zdGFyX25hdGFsX2xldmVsX3VwKSB7IC8vWOS4que6ouiJsuWRveagvOWNh+aYn+WIsFjmmJ9cbiAgICAgICAgICAgIFN0YXJsaWZlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5NYWluVmlldyh0cnVlKVxuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2Zvcm1hdGlvbl9vcGVuIHx8IC8v5bey5a2m5Lmg55qE6Zi15rOV6L6+5YiwWOS4qlxuICAgICAgICAgICAgcHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZm9ybWF0aW9uX2xldmVsX3VwKSB7IC8vWOS4qumYteazlei+vuWIsFjnuqdcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9kdW5nZW9uX3N0b25lX2ZpZ2h0KSB7IC8vMS7lj4LkuI545qyh5a6d55+z5Ymv5pysMi7lj4LkuI545qyh5Zyj5Zmo5Ymv5pysLFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMTddKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9zaGlwcGluZykgeyAvL+WPguS4jui/nOiIqixcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE4XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZXNjb3J0X2VudGVyIHx8IHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2VzY29ydF9maWdodCkgeyAvLyDokIzlhb1cbiAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4Lm1haW5fc2NlbmUsIE1haW51aUNvbnN0LnN1Yl90eXBlLmVzY29ydClcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9lbmRsZXNzX2ZpZ2h0KSB7IC8vIOaXoOWwveivleeCvFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNDNdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9teXN0ZXJ5X2J1eSkgeyAvLyDmiZPlvIDllYbln45cbiAgICAgICAgICAgIHZhciBNYWxsQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWxsX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3NDb25maWcudGFyZ2V0ID09IDEpIHtcbiAgICAgICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxNSwgTWFsbENvbnN0Lk1hbGxUeXBlLkdvZFNob3BdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcudGFyZ2V0ID09IDIpIHtcbiAgICAgICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxNSwgTWFsbENvbnN0Lk1hbGxUeXBlLlJlY292ZXJ5XSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLnRhcmdldCA9PSAzKSB7XG4gICAgICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMTUsIE1hbGxDb25zdC5NYWxsVHlwZS5TY29yZVNob3BdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcudGFyZ2V0ID09IDQpIHsgLy8g5p2C6LSn5bqXXG4gICAgICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNl0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxNSwgTWFsbENvbnN0Lk1hbGxUeXBlLlJlY292ZXJ5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcGFydG5lcl9zdGFyKSB7IC8vIOaJk+W8gOiLsembhOS4u+eVjOmdouWNh+aYn1xuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMTldKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9oYWxsb3dzX2FsbF9zdGVwIHx8IHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2hhbGxvd3Nfc3RlcCB8fCBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9oYWxsb3dzX2FjdGl2YXRlKSB7IC8vIOaJk+W8gOaPkOWNh+Wco+WZqFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMjBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9ndWlsZF93YXIpIHsgLy8g5omT5byA5YWs5Lya56uZXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsyMV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2VuZGxlc3NfcGFzcykgeyAvLyDmiZPlvIDml6DlsL3kuYvloZRcbiAgICAgICAgICAgIEVuZGxlc3NfdHJhaWxDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkVuZGxlc3NNYWluV2luZG93KHRydWUpXG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcGFydG5lcl9kZWNvbXBvc2UpIHsgLy8g56Wt56WA5bCP5bGLXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsyMl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X3BhcnRuZXJfc3Rhcl91cCkgeyAvLyDono3lkIjnpa3lnZtcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzIzXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfc3Rhcl90b3dlcl9mbG9vcl9wYXNzKSB7IC8vIOivlee7g+WhlFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMTJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9yZWNydWl0X2hpZ2gpIHsgLy8g5YWI55+l5q6/IFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMjRdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9leHBlZGl0aW9uX2ZpZ2h0KSB7Ly/ov5zlvoFcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzI1XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcHJpbXVzX2ZpZ2h0KSB7Ly/mmJ/msrNcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzI3XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZXF1aXBtZW50X2NvbXBvdW5kKSB7Ly/plLvpgKBcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzI2XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZnJhZ21lbnRfc3ludGhlc2lzKSB7Ly/og4zljIXnoo7niYfpobXnrb5cbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzgsIDNdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9kdW5nZW9uX2V4dF9yZXdhcmQpIHsvL+mAmuWFs+WlluWKsVxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNDZdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hcnRpZmFjdF9jb21wb3NlKSB7Ly/nrKbmlofplLvpgKBcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzI2LDJdKTtcbiAgICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLeS7u+WKoeebuOWFsyBzdGFydFxuICAgIG9uMTA0MDA6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwuYWRkVGFza0xpc3QoZGF0YS5xdWVzdF9saXN0LCBmYWxzZSwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIG9uMTA0MDM6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwuYWRkVGFza0xpc3QoZGF0YS5xdWVzdF9saXN0KTtcbiAgICB9LFxuXG4gICAgb24xMDQwOTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5hZGRUYXNrTGlzdChkYXRhLnF1ZXN0X2xpc3QsIHRydWUpO1xuICAgIH0sXG5cbiAgICBvbjEwNDA2OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuZmxhZyA9PSAxKVxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRUYXNrQ29tcGxldGVkKGRhdGEuaWQpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0U3VibWl0VGFzazogZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICBwcm90b2NhbC5pZCA9IGlkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMDQwNiwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLeS7u+WKoeebuOWFsyBlbmRcblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t5oiQ5bCx55u45YWzIHN0YXJ0XG4gICAgb24xNjQwMDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5hZGRGZWF0TGlzdChkYXRhLmZlYXRfbGlzdCwgZmFsc2UsIHRydWUpO1xuICAgIH0sXG4gICAgb24xNjQwMTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5hZGRGZWF0TGlzdChkYXRhLmZlYXRfbGlzdCwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIG9uMTY0MDI6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgICAgICBpZiAoZGF0YS5jb2RlID09IDEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0RmVhdENvbXBsZXRlZChkYXRhLmlkKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZXF1ZXN0U3VibWl0RmVhdDogZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICBwcm90b2NhbC5pZCA9IGlkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxNjQwMiwgcHJvdG9jYWwpO1xuICAgIH0sXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS3miJDlsLHnm7jlhbMgZW5kXG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLea0u+i3g+W6puebuOWFsyBzdGFydFxuICAgIHJlcXVlc3RBY3Rpdml0eUluZm86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjAzMDAsIHt9KTtcbiAgICB9LFxuXG4gICAgb24yMDMwMDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVBY3Rpdml0eURhdGEoZGF0YS5hY3Rpdml0eV9ib3gpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0R2V0QWN0aXZpdHlBd2FyZHM6IGZ1bmN0aW9uIChhY3Rpdml0eSkge1xuICAgICAgICB2YXIgcHJvdG8gPSB7fVxuICAgICAgICBwcm90by5hY3Rpdml0eSA9IGFjdGl2aXR5XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDIwMzAxLCBwcm90byk7XG4gICAgfSxcblxuICAgIG9uMjAzMDE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgICAgICBpZiAoZGF0YS5jb2RlID09IDEpXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnVwZGF0ZVNpbmdsZUFjdGl2aXR5RGF0YShkYXRhLmFjdGl2aXR5KTtcbiAgICB9LFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t5rS76LeD5bqm55u45YWzIGVuZFxuXG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t5paw5Li757q/IFxuXG4gICAgc2VuZDMwMDAxOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDMwMDAxLCB7fSk7XG4gICAgfSxcblxuICAgIG9uMzAwMDE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGNjLmxvZyhcIjMwMDAxXCIsIGRhdGEpO1xuICAgICAgICB0aGlzLm1vZGVsLnNldE1haW5UYXNrRGF0YShkYXRhKTtcbiAgICB9LFxuXG4gICAgc2VuZDMwMDAyOiBmdW5jdGlvbiAodGFza19pZCkge1xuICAgICAgICBsZXQgcHJvdG8gPSB7fTtcbiAgICAgICAgcHJvdG8uaWQgPSB0YXNrX2lkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgzMDAwMiwgcHJvdG8pO1xuICAgIH0sXG5cbiAgICBvbjMwMDAyOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBjYy5sb2coXCIzMDAyXCIsIGRhdGEpO1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKSB7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRhc2tDb250cm9sbGVyOyJdfQ==