vcomply-workflow-engine 3.0.278 → 3.0.279

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/esm2020/lib/add-multiple-responsibility/add-multiple-responsibility.component.mjs +2 -2
  2. package/esm2020/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.mjs +310 -123
  3. package/esm2020/lib/add-multiple-risk/add-multiple-risk.component.mjs +128 -64
  4. package/esm2020/lib/log-an-issue/log-an-issue.component.mjs +2 -2
  5. package/esm2020/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.mjs +2 -2
  6. package/esm2020/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.mjs +2 -2
  7. package/esm2020/lib/sharedComponents/frequency/frequency-container/frequency-container.component.mjs +2 -2
  8. package/esm2020/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.mjs +2 -2
  9. package/esm2020/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.mjs +2 -2
  10. package/esm2020/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.mjs +2 -2
  11. package/esm2020/lib/sharedComponents/frequency/frequency-on-completion-of/frequency-on-completion-of.component.mjs +26 -11
  12. package/esm2020/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.mjs +2 -2
  13. package/esm2020/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.mjs +2 -2
  14. package/esm2020/lib/sharedComponents/frequency/frequency-top/frequency-top.component.mjs +21 -8
  15. package/esm2020/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.mjs +2 -2
  16. package/esm2020/lib/sharedComponents/frequency/frequency.service.mjs +5 -3
  17. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.mjs +113 -23
  18. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.mjs +60 -21
  19. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.mjs +53 -43
  20. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.mjs +64 -25
  21. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.mjs +63 -20
  22. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.mjs +65 -23
  23. package/esm2020/lib/workflow-compliance/workflow-compliance.component.mjs +2 -2
  24. package/esm2020/lib/workflow-policy/workflow-policy.component.mjs +2 -2
  25. package/esm2020/lib/workflow-risk/workflow-risk.component.mjs +365 -131
  26. package/fesm2015/vcomply-workflow-engine.mjs +1304 -537
  27. package/fesm2015/vcomply-workflow-engine.mjs.map +1 -1
  28. package/fesm2020/vcomply-workflow-engine.mjs +1320 -541
  29. package/fesm2020/vcomply-workflow-engine.mjs.map +1 -1
  30. package/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.d.ts +1 -1
  31. package/lib/sharedComponents/frequency/frequency-on-completion-of/frequency-on-completion-of.component.d.ts +1 -1
  32. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
- import { Component, Output, EventEmitter } from '@angular/core';
1
+ import { Component, Output, EventEmitter, } from '@angular/core';
2
2
  import { cloneDeep } from 'lodash';
3
3
  import * as XLSX from 'xlsx';
4
- import * as moment from 'moment';
4
+ import moment from 'moment/moment';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "../workflow-services/add-risk.service";
7
7
  import * as i2 from "../workflow-services/auth.service";
@@ -28,19 +28,19 @@ export class AddMultipleRiskComponent {
28
28
  this.categoryList = {
29
29
  strategic: {
30
30
  name: 'STRATEGIC',
31
- data: []
31
+ data: [],
32
32
  },
33
33
  operational: {
34
34
  name: 'OPERATIONAL',
35
- data: []
35
+ data: [],
36
36
  },
37
37
  compliance: {
38
38
  name: 'COMPLIANCE',
39
- data: []
39
+ data: [],
40
40
  },
41
41
  others: {
42
42
  name: 'OTHERS',
43
- data: []
43
+ data: [],
44
44
  },
45
45
  };
46
46
  this.category = {
@@ -61,7 +61,7 @@ export class AddMultipleRiskComponent {
61
61
  likelihood: [],
62
62
  impact: [],
63
63
  velocity: [],
64
- vulnerability: []
64
+ vulnerability: [],
65
65
  };
66
66
  this.isLoader = false;
67
67
  this.showCategoryList = false;
@@ -74,7 +74,7 @@ export class AddMultipleRiskComponent {
74
74
  this.showExcel = false;
75
75
  this.memberId = 0;
76
76
  this.organizationId = 0;
77
- this.errorMessage = " invalid file error";
77
+ this.errorMessage = ' invalid file error';
78
78
  this.downloadStatus = 'NOT_DOWNLOADING';
79
79
  this.downloadPercent = 0;
80
80
  this.smileyMessage = `You're All Set! We're uploading the risks. The risk owners will be notified once the risks have been uploaded.`;
@@ -85,10 +85,16 @@ export class AddMultipleRiskComponent {
85
85
  this.showSmiley = false;
86
86
  this.member_obj_id = '';
87
87
  this.defaultOwner = '';
88
- this.frequencyType = ['weekly', 'monthly', 'quarterly', 'biannual', 'annual', 'one time'];
89
- }
90
- ngOnChanges(changes) {
88
+ this.frequencyType = [
89
+ 'weekly',
90
+ 'monthly',
91
+ 'quarterly',
92
+ 'biannual',
93
+ 'annual',
94
+ 'one time',
95
+ ];
91
96
  }
97
+ ngOnChanges(changes) { }
92
98
  ngOnInit() {
93
99
  this.pickerChanged.emit(false);
94
100
  this.getCategoryList();
@@ -105,13 +111,14 @@ export class AddMultipleRiskComponent {
105
111
  this.categoryList.operational.data = res.operational_arr;
106
112
  this.categoryList.compliance.data = res.compliance_arr;
107
113
  this.categoryList.others.data = res.others_arr;
108
- }, err => {
114
+ }, (err) => {
109
115
  console.error(err);
110
116
  this.isLoader = false;
111
117
  });
112
118
  }
113
119
  saveSelectedCategory(category) {
114
- if (this.category?.selectedCategory?.category_id != category?.selectedCategory?.category_id) {
120
+ if (this.category?.selectedCategory?.category_id !=
121
+ category?.selectedCategory?.category_id) {
115
122
  this.downloadStatus = 'NOT_DOWNLOADING';
116
123
  }
117
124
  this.showCategoryList = false;
@@ -125,14 +132,14 @@ export class AddMultipleRiskComponent {
125
132
  removeCategory() {
126
133
  this.category = {
127
134
  type: 'strategic',
128
- selectedCategory: ''
135
+ selectedCategory: '',
129
136
  };
130
137
  this.reset();
131
138
  }
132
139
  getSettingsInfo() {
133
- this.riskService.getRiskSettingDetails().subscribe(res => {
140
+ this.riskService.getRiskSettingDetails().subscribe((res) => {
134
141
  this.settingsInfo = res;
135
- }, err => {
142
+ }, (err) => {
136
143
  console.error(err);
137
144
  });
138
145
  }
@@ -147,7 +154,7 @@ export class AddMultipleRiskComponent {
147
154
  this.riskBulkUpload = {
148
155
  header: [],
149
156
  weightFactors: [],
150
- risks: []
157
+ risks: [],
151
158
  };
152
159
  this.templateInfo = {
153
160
  memberId: '',
@@ -158,7 +165,7 @@ export class AddMultipleRiskComponent {
158
165
  likelihood: [],
159
166
  impact: [],
160
167
  velocity: [],
161
- vulnerability: []
168
+ vulnerability: [],
162
169
  };
163
170
  const reference = document.querySelector('#scrollReference');
164
171
  if (reference) {
@@ -193,14 +200,14 @@ export class AddMultipleRiskComponent {
193
200
  if (element[8]) {
194
201
  const member = {
195
202
  name: element[8],
196
- member_id: element[9]
203
+ member_id: element[9],
197
204
  };
198
205
  this.templateInfo.ownerList.push(member);
199
206
  }
200
207
  if (element[2]) {
201
208
  const mitigation = {
202
209
  mitigationName: element[2],
203
- mitigation_id: element[3]
210
+ mitigation_id: element[3],
204
211
  };
205
212
  this.templateInfo.mitigationList.push(mitigation);
206
213
  }
@@ -208,7 +215,7 @@ export class AddMultipleRiskComponent {
208
215
  const rc = {
209
216
  rcName: element[6],
210
217
  rc_id: element[7],
211
- owner_ids: element[11]
218
+ owner_ids: element[11],
212
219
  };
213
220
  this.templateInfo.rcList.push(rc);
214
221
  }
@@ -218,20 +225,29 @@ export class AddMultipleRiskComponent {
218
225
  if (element[13]) {
219
226
  this.templateInfo?.impact.push(element[13]);
220
227
  }
221
- if (this.riskBulkUpload?.weightFactors?.includes('Velocity') && element[14]) {
228
+ if (this.riskBulkUpload?.weightFactors?.includes('Velocity') &&
229
+ element[14]) {
222
230
  this.templateInfo.velocity.push(element[14]);
223
231
  }
224
- if (this.riskBulkUpload?.weightFactors?.includes('Vulnerability') && element[15]) {
232
+ if (this.riskBulkUpload?.weightFactors?.includes('Vulnerability') &&
233
+ element[15]) {
225
234
  this.templateInfo.vulnerability.push(element[15]);
226
235
  }
227
236
  });
228
237
  if (this.fileName.substr(-5) !== '.xlsx') {
229
- this.errorMessage = 'The incorrect file has been uploaded. Please upload the template file for Risk Category:' + this.category.selectedCategory.category_name + ' RETRY';
238
+ this.errorMessage =
239
+ 'The incorrect file has been uploaded. Please upload the template file for Risk Category:' +
240
+ this.category.selectedCategory.category_name +
241
+ ' RETRY';
230
242
  this.isWrongFile = true;
231
243
  return;
232
244
  }
233
- if (this.riskBulkUpload.header[0] !== 'What risk would you like to manage?*') {
234
- this.errorMessage = 'The incorrect file has been uploaded. Please upload the template file for Risk Category:' + this.category.selectedCategory.category_name + ' RETRY';
245
+ if (this.riskBulkUpload.header[0] !==
246
+ 'What risk would you like to manage?*') {
247
+ this.errorMessage =
248
+ 'The incorrect file has been uploaded. Please upload the template file for Risk Category:' +
249
+ this.category.selectedCategory.category_name +
250
+ ' RETRY';
235
251
  this.isWrongFile = false;
236
252
  this.isWrongFormat = true;
237
253
  return;
@@ -242,18 +258,26 @@ export class AddMultipleRiskComponent {
242
258
  this.defaultOwner = this.templateInfo.ownerList[defaultOwner].name;
243
259
  }
244
260
  else {
245
- this.errorMessage = 'The incorrect file has been uploaded. Please upload the template file for Risk Category:' + this.category.selectedCategory.category_name + ' RETRY';
261
+ this.errorMessage =
262
+ 'The incorrect file has been uploaded. Please upload the template file for Risk Category:' +
263
+ this.category.selectedCategory.category_name +
264
+ ' RETRY';
246
265
  this.isWrongFile = true;
247
266
  return;
248
267
  }
249
- if ((this.member_obj_id != this.templateInfo.memberId) || (this.category.selectedCategory._id != this.templateInfo.categoryId)) {
250
- this.errorMessage = 'The incorrect file has been uploaded. Please upload the template file for Risk Category:' + this.category.selectedCategory.category_name + ' RETRY';
268
+ if (this.member_obj_id != this.templateInfo.memberId ||
269
+ this.category.selectedCategory._id != this.templateInfo.categoryId) {
270
+ this.errorMessage =
271
+ 'The incorrect file has been uploaded. Please upload the template file for Risk Category:' +
272
+ this.category.selectedCategory.category_name +
273
+ ' RETRY';
251
274
  this.isWrongFile = true;
252
275
  return;
253
276
  }
254
277
  const isEmpty = this.checkEmptyFile();
255
278
  if (isEmpty) {
256
- this.errorMessage = 'You have uploaded a blank template. Please add details for all mandatory fields. RETRY';
279
+ this.errorMessage =
280
+ 'You have uploaded a blank template. Please add details for all mandatory fields. RETRY';
257
281
  this.isFileEmpty = true;
258
282
  this.isWrongFile = false;
259
283
  this.isWrongFormat = false;
@@ -327,16 +351,19 @@ export class AddMultipleRiskComponent {
327
351
  // obj.customTag = customTags;
328
352
  // }
329
353
  let obj = this.setRiskDetails(risk);
330
- if (obj?.likelihood && !this.templateInfo?.likelihood.includes(obj?.likelihood)) {
354
+ if (obj?.likelihood &&
355
+ !this.templateInfo?.likelihood.includes(obj?.likelihood)) {
331
356
  obj.isValid = false;
332
357
  }
333
358
  if (obj?.impact && !this.templateInfo?.impact.includes(obj?.impact)) {
334
359
  obj.isValid = false;
335
360
  }
336
- if (obj?.velocity && !this.templateInfo?.velocity.includes(obj?.velocity)) {
361
+ if (obj?.velocity &&
362
+ !this.templateInfo?.velocity.includes(obj?.velocity)) {
337
363
  obj.isValid = false;
338
364
  }
339
- if (obj?.vulnerability && !this.templateInfo?.vulnerability.includes(obj?.vulnerability)) {
365
+ if (obj?.vulnerability &&
366
+ !this.templateInfo?.vulnerability.includes(obj?.vulnerability)) {
340
367
  obj.isValid = false;
341
368
  }
342
369
  this.riskBulkUpload.risks.push(obj);
@@ -362,11 +389,14 @@ export class AddMultipleRiskComponent {
362
389
  }
363
390
  checkValidity(risk) {
364
391
  const re = /&nbsp;|<br>/g;
365
- let trimmedName = (risk[0]) ? risk[0].toString().replace(re, '').trim() : '';
392
+ let trimmedName = risk[0] ? risk[0].toString().replace(re, '').trim() : '';
366
393
  trimmedName = trimmedName.replace(/ +/g, ' ');
367
394
  // || (this.assessmentDeadLine && (!risk[6]))
368
- if ((!trimmedName) || (risk[3] && (risk[3] == risk[6])) || ((!risk[3]) && (this.defaultOwner == risk[6]))
369
- || (!risk[2]) || (!this.frequencyType?.includes(risk[4]?.toLowerCase()))) {
395
+ if (!trimmedName ||
396
+ (risk[3] && risk[3] == risk[6]) ||
397
+ (!risk[3] && this.defaultOwner == risk[6]) ||
398
+ !risk[2] ||
399
+ !this.frequencyType?.includes(risk[4]?.toLowerCase())) {
370
400
  return false;
371
401
  }
372
402
  else {
@@ -378,8 +408,14 @@ export class AddMultipleRiskComponent {
378
408
  this.downloadPercent = 0;
379
409
  const today = new Date().toISOString().split('T');
380
410
  const downloadDate = today[0];
381
- const fileName = 'VComply - Risk Module - Add Multiple Risks - ' + this.category?.selectedCategory?.category_name + ' - ' + downloadDate + '.xlsx';
382
- this.riskService.downloadTemplate(this.category.selectedCategory._id).subscribe((data) => {
411
+ const fileName = 'VComply - Risk Module - Add Multiple Risks - ' +
412
+ this.category?.selectedCategory?.category_name +
413
+ ' - ' +
414
+ downloadDate +
415
+ '.xlsx';
416
+ this.riskService
417
+ .downloadTemplate(this.category.selectedCategory._id)
418
+ .subscribe((data) => {
383
419
  if (data.loaded) {
384
420
  this.downloadPercent = 100 * (data.loaded / data.total);
385
421
  }
@@ -401,7 +437,14 @@ export class AddMultipleRiskComponent {
401
437
  if (risk?.frequency.toLowerCase() === 'one time') {
402
438
  const date = new Date();
403
439
  date.setDate(date.getDate() + 1);
404
- frequencyValue = '0~' + '' + date.getFullYear() + '~' + (date.getMonth() + 1) + '~' + date.getDate();
440
+ frequencyValue =
441
+ '0~' +
442
+ '' +
443
+ date.getFullYear() +
444
+ '~' +
445
+ (date.getMonth() + 1) +
446
+ '~' +
447
+ date.getDate();
405
448
  }
406
449
  else {
407
450
  frequencyValue = this.frequencyService.shortHand_freqCal(risk?.frequency);
@@ -412,8 +455,12 @@ export class AddMultipleRiskComponent {
412
455
  description: risk?.description,
413
456
  category_custom_tag: risk?.customTag,
414
457
  assessment_deadline_enable: this.settingsInfo?.assessment_deadline_enable,
415
- owner: (risk?.owner) ? this.returnIds(risk?.owner, 'owner') : this.returnIds(this.defaultOwner, 'owner'),
416
- category: (this.category?.selectedCategory?.category_id) ? [this.category?.selectedCategory?.category_id] : [],
458
+ owner: risk?.owner
459
+ ? this.returnIds(risk?.owner, 'owner')
460
+ : this.returnIds(this.defaultOwner, 'owner'),
461
+ category: this.category?.selectedCategory?.category_id
462
+ ? [this.category?.selectedCategory?.category_id]
463
+ : [],
417
464
  manage_oversight: this.returnIds(risk?.overseer, 'overseer'),
418
465
  rc_id: this.returnIds(risk?.rcName, 'rc_id'),
419
466
  head_ids: this.returnIds(risk?.rcName, 'rc_owner_ids'),
@@ -428,7 +475,7 @@ export class AddMultipleRiskComponent {
428
475
  risk_progress_flag: 1,
429
476
  IfAssessmentDone: 0,
430
477
  workshop_id: '',
431
- complete_assessment: (completeAssessment) ? 1 : 0,
478
+ complete_assessment: completeAssessment ? 1 : 0,
432
479
  mitigation: this.returnIds(risk?.mitigationPriority, 'mitigation'),
433
480
  weightage_enable: this.settingsInfo?.weightage_enable,
434
481
  treatment_type: this.settingsInfo?.treatment_criteria,
@@ -442,12 +489,17 @@ export class AddMultipleRiskComponent {
442
489
  ],
443
490
  // assessment_deadline_set_by: this.settingsInfo?.assessment_deadline_set_by, //check1 not appearing
444
491
  assessment_deadline_set_by: this.settingsInfo?.assessment_deadline_set_by ?? this.memberId,
445
- assessment_deadline_days: (this.settingsInfo?.assessment_deadline_enable) ? this.settingsInfo?.assessment_deadline_days : risk?.assessmentDeadLine,
492
+ assessment_deadline_days: this.settingsInfo
493
+ ?.assessment_deadline_enable
494
+ ? this.settingsInfo?.assessment_deadline_days
495
+ : risk?.assessmentDeadLine,
446
496
  frequency_details: {
447
497
  frequency: frequencyValue,
448
- started_at: this.changeTimeZone(new Date) ?? moment().format("YYYY-MM-DD"),
449
- frequency_time: "11:00 pm",
450
- remind_before_days: risk?.emailReminder ? risk?.emailReminder : this.setDefaultEmailReminderValue(risk?.frequency),
498
+ started_at: this.changeTimeZone(new Date()) ?? moment().format('YYYY-MM-DD'),
499
+ frequency_time: '11:00 pm',
500
+ remind_before_days: risk?.emailReminder
501
+ ? risk?.emailReminder
502
+ : this.setDefaultEmailReminderValue(risk?.frequency),
451
503
  },
452
504
  risk_label: this.setRiskLabel(risk?.riskLabel),
453
505
  mitigation_plan_recommendation: risk?.mitigationPlans ?? '',
@@ -456,13 +508,13 @@ export class AddMultipleRiskComponent {
456
508
  payload.push(obj);
457
509
  }
458
510
  });
459
- console.log("payloadpayloadpayloadpayloadpayloadpayload ====>", payload);
511
+ console.log('payloadpayloadpayloadpayloadpayloadpayload ====>', payload);
460
512
  this.riskService.addBulkRisk(payload).subscribe((res) => {
461
513
  this.loader = false;
462
514
  this.showExcel = false;
463
515
  this.showSmiley = true;
464
516
  this.riskData = res;
465
- }, err => {
517
+ }, (err) => {
466
518
  console.log(err);
467
519
  this.loader = false;
468
520
  this.showExcel = false;
@@ -484,7 +536,9 @@ export class AddMultipleRiskComponent {
484
536
  let owner_ids = [];
485
537
  this.templateInfo.rcList.forEach((headerIds) => {
486
538
  if (headerIds.rcName == item && headerIds.owner_ids) {
487
- owner_ids = headerIds.owner_ids.includes(',') ? headerIds.owner_ids.split(',').map(Number) : [Number(headerIds.owner_ids)];
539
+ owner_ids = headerIds.owner_ids.includes(',')
540
+ ? headerIds.owner_ids.split(',').map(Number)
541
+ : [Number(headerIds.owner_ids)];
488
542
  }
489
543
  });
490
544
  return owner_ids;
@@ -522,14 +576,14 @@ export class AddMultipleRiskComponent {
522
576
  this.riskBulkUpload = {
523
577
  header: [],
524
578
  weightFactors: [],
525
- risks: []
579
+ risks: [],
526
580
  };
527
581
  this.templateInfo = {
528
582
  memberId: '',
529
583
  categoryId: '',
530
584
  ownerList: [],
531
585
  rcList: [],
532
- mitigationList: []
586
+ mitigationList: [],
533
587
  };
534
588
  this.isFileEmpty = false;
535
589
  this.isWrongFile = false;
@@ -634,7 +688,7 @@ export class AddMultipleRiskComponent {
634
688
  if (tag) {
635
689
  const cTag = {
636
690
  custom_tag_value: risk[index + i] ?? '',
637
- custom_tag_name: tag.tagName
691
+ custom_tag_name: tag.tagName,
638
692
  };
639
693
  customTags.push(cTag);
640
694
  }
@@ -652,13 +706,20 @@ export class AddMultipleRiskComponent {
652
706
  */
653
707
  setDefaultEmailReminderValue(frequencyType) {
654
708
  switch (frequencyType?.toLowerCase()) {
655
- case 'weekly': return 2;
656
- case 'monthly': return 7;
657
- case 'quarterly': return 7;
658
- case 'biannual': return 30;
659
- case 'annual': return 30;
660
- case 'one time': return 15;
661
- default: return 0;
709
+ case 'weekly':
710
+ return 2;
711
+ case 'monthly':
712
+ return 7;
713
+ case 'quarterly':
714
+ return 7;
715
+ case 'biannual':
716
+ return 30;
717
+ case 'annual':
718
+ return 30;
719
+ case 'one time':
720
+ return 15;
721
+ default:
722
+ return 0;
662
723
  }
663
724
  }
664
725
  /**
@@ -669,9 +730,12 @@ export class AddMultipleRiskComponent {
669
730
  */
670
731
  setRiskLabel(label) {
671
732
  switch (label?.toLowerCase()) {
672
- case 'newly identified risks': return 1;
673
- case 'rapidly changing risks': return 2;
674
- default: return 1;
733
+ case 'newly identified risks':
734
+ return 1;
735
+ case 'rapidly changing risks':
736
+ return 2;
737
+ default:
738
+ return 1;
675
739
  }
676
740
  }
677
741
  /**
@@ -688,7 +752,7 @@ export class AddMultipleRiskComponent {
688
752
  const invDate = new Date(date.toLocaleString('en-US', {
689
753
  timeZone: this.authService.userDetails?.timezone,
690
754
  }));
691
- return moment(invDate).format("YYYY-MM-DD");
755
+ return moment(invDate).format('YYYY-MM-DD');
692
756
  }
693
757
  }
694
758
  AddMultipleRiskComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AddMultipleRiskComponent, deps: [{ token: i1.AddRiskService }, { token: i2.AuthService }, { token: i3.SnackBarService }, { token: i4.FrequencyBulkService }], target: i0.ɵɵFactoryTarget.Component });
@@ -705,4 +769,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
705
769
  }], disconnectRefresh: [{
706
770
  type: Output
707
771
  }] } });
708
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJpc2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJpc2svYWRkLW11bHRpcGxlLXJpc2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJpc2svYWRkLW11bHRpcGxlLXJpc2suY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBUyxNQUFNLEVBQUUsWUFBWSxFQUE2RCxNQUFNLGVBQWUsQ0FBQztBQUNsSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBTTdCLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVNqQyxNQUFNLE9BQU8sd0JBQXdCO0lBOEVuQyxZQUFvQixXQUEyQixFQUNyQyxXQUF3QixFQUN2QixRQUF3QixFQUN6QixnQkFBc0M7UUFINUIsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQ3JDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3ZCLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBc0I7UUFoRnRDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakQsaUJBQVksR0FBaUI7WUFDM0IsU0FBUyxFQUFFO2dCQUNULElBQUksRUFBRSxXQUFXO2dCQUNq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QU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRTtZQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsUUFBUTtTQUNqRCxDQUFDLENBQ0gsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5QyxDQUFDOztxSEF0dUJVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLHlPQ2pCckMsaWlKQXlFZ007MkZEeERuTCx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0UsdUJBQXVCO2dNQU12QixhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcbmltcG9ydCB7IENhdGVnb3J5TGlzdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2F0ZWdvcnlMaXN0JztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFkZFJpc2tTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYWRkLXJpc2suc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRnJlcXVlbmN5QnVsa1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9mcmVxdWVuY3kuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxudHlwZSBBT0EgPSBhbnlbXVtdO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hZGQtbXVsdGlwbGUtcmlzaycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1tdWx0aXBsZS1yaXNrLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hZGQtbXVsdGlwbGUtcmlzay5jb21wb25lbnQubGVzcycsICcuLi9mb3Jtcy5sZXNzJ10sXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkTXVsdGlwbGVSaXNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwb3B1bGF0ZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGlzY29ubmVjdFJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgY2F0ZWdvcnlMaXN0OiBDYXRlZ29yeUxpc3QgPSB7XHJcbiAgICBzdHJhdGVnaWM6IHtcclxuICAgICAgbmFtZTogJ1NUUkFURUdJQycsXHJcbiAgICAgIGRhdGE6IFtdXHJcbiAgICB9LFxyXG4gICAgb3BlcmF0aW9uYWw6IHtcclxuICAgICAgbmFtZTogJ09QRVJBVElPTkFMJyxcclxuICAgICAgZGF0YTogW11cclxuICAgIH0sXHJcbiAgICBjb21wbGlhbmNlOiB7XHJcbiAgICAgIG5hbWU6ICdDT01QTElBTkNFJyxcclxuICAgICAgZGF0YTogW11cclxuICAgIH0sXHJcbiAgICBvdGhlcnM6IHtcclxuICAgICAgbmFtZTogJ09USEVSUycsXHJcbiAgICAgIGRhdGE6IFtdXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIGNhdGVnb3J5OiBhbnkgPSB7XHJcbiAgICB0eXBlOiAnc3RyYXRlZ2ljJyxcclxuICAgIHNlbGVjdGVkQ2F0ZWdvcnk6ICcnLFxyXG4gIH1cclxuXHJcbiAgcmlza0J1bGtVcGxvYWQ6IGFueSA9IHtcclxuICAgIGhlYWRlcjogW10sXHJcbiAgICB3ZWlnaHRGYWN0b3JzOiBbXSxcclxuICAgIHJpc2tzOiBbXSxcclxuICB9XHJcblxyXG4gIHRlbXBsYXRlSW5mbzogYW55ID0ge1xyXG4gICAgbWVtYmVySWQ6ICcnLFxyXG4gICAgY2F0ZWdvcnlJZDogJycsXHJcbiAgICBvd25lckxpc3Q6IFtdLFxyXG4gICAgcmNMaXN0OiBbXSxcclxuICAgIG1pdGlnYXRpb25MaXN0OiBbXSxcclxuICAgIGxpa2VsaWhvb2Q6W10sXHJcbiAgICBpbXBhY3Q6W10sXHJcbiAgICB2ZWxvY2l0eTpbXSxcclxuICAgIHZ1bG5lcmFiaWxpdHk6W11cclxuICB9XHJcblxyXG4gIGlzTG9hZGVyID0gZmFsc2U7XHJcbiAgc2hvd0NhdGVnb3J5TGlzdCA9IGZhbHNlO1xyXG4gIHRlbXBsYXRlRG93bmxvYWRlZCA9IGZhbHNlO1xyXG4gIGRvd25sb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIHNldHRpbmdzSW5mbyAhOiBhbnk7XHJcbiAgaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICBpc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gIGlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICBmaWxlTmFtZTogYW55O1xyXG4gIGRhdGE6IGFueTtcclxuICBhc3Nlc3NtZW50RGVhZExpbmU6IGFueTtcclxuICBzaG93RXhjZWwgPSBmYWxzZTtcclxuICBmaWxlVmFsdWU6YW55O1xyXG4gIG1lbWJlcklkID0gMDtcclxuICBvcmdhbml6YXRpb25JZCA9IDA7XHJcbiAgZXJyb3JNZXNzYWdlID0gXCIgaW52YWxpZCBmaWxlIGVycm9yXCJcclxuICBkb3dubG9hZFN0YXR1czogc3RyaW5nID0gJ05PVF9ET1dOTE9BRElORyc7XHJcbiAgZG93bmxvYWRQZXJjZW50ID0gMDtcclxuXHJcbiAgc21pbGV5TWVzc2FnZSA9IGBZb3UncmUgQWxsIFNldCEgV2UncmUgdXBsb2FkaW5nIHRoZSByaXNrcy4gVGhlIHJpc2sgb3duZXJzIHdpbGwgYmUgbm90aWZpZWQgb25jZSB0aGUgcmlza3MgaGF2ZSBiZWVuIHVwbG9hZGVkLmA7XHJcbiAgYWN0aW9uQnV0dG9ucyA9IFtcclxuICAgIHsgYnV0dG9uVGV4dDogJ0FkZCBNb3JlIFJpc2tzJywgY2xhc3M6ICd3aGl0ZS1idG4nLCBpZDogJ2FkZE1vcmUnIH0sXHJcbiAgICB7IGJ1dHRvblRleHQ6ICdWaWV3IFJpc2snLCBjbGFzczogJ2JsdWUtYnRuJywgaWQ6ICd2aWV3Umlza3MnIH0sXHJcbiAgXTtcclxuICBzaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgbWVtYmVyX29ial9pZCA9ICcnO1xyXG4gIGRlZmF1bHRPd25lciA9ICcnXHJcbiAgcmlza0RhdGEgITphbnk7XHJcbiAgZnJlcXVlbmN5VHlwZSA9IFsnd2Vla2x5JywgJ21vbnRobHknLCAncXVhcnRlcmx5JywgJ2JpYW5udWFsJywgJ2FubnVhbCcsICdvbmUgdGltZSddO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJpc2tTZXJ2aWNlOiBBZGRSaXNrU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSAgc25hY2tCYXI6U25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmcmVxdWVuY3lTZXJ2aWNlOiBGcmVxdWVuY3lCdWxrU2VydmljZSwpIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuXHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gICAgdGhpcy5nZXRDYXRlZ29yeUxpc3QoKTtcclxuICAgIHRoaXMuZ2V0U2V0dGluZ3NJbmZvKCk7XHJcblxyXG4gICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgIHRoaXMubWVtYmVySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCk7XHJcbiAgICB0aGlzLm1lbWJlcl9vYmpfaWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkuX2lkO1xyXG4gIH1cclxuICBnZXRDYXRlZ29yeUxpc3QoKSB7XHJcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucmlza1NlcnZpY2UuZ2V0Q2F0ZWdvcnlMaXN0KCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0LnN0cmF0ZWdpYy5kYXRhID0gcmVzLnN0cmF0ZWdpY19hcnI7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0Lm9wZXJhdGlvbmFsLmRhdGEgPSByZXMub3BlcmF0aW9uYWxfYXJyO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdC5jb21wbGlhbmNlLmRhdGEgPSByZXMuY29tcGxpYW5jZV9hcnI7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0Lm90aGVycy5kYXRhID0gcmVzLm90aGVyc19hcnI7XHJcblxyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHNhdmVTZWxlY3RlZENhdGVnb3J5KGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIGlmKHRoaXMuY2F0ZWdvcnk/LnNlbGVjdGVkQ2F0ZWdvcnk/LmNhdGVnb3J5X2lkICE9Y2F0ZWdvcnk/LnNlbGVjdGVkQ2F0ZWdvcnk/LmNhdGVnb3J5X2lkKXtcclxuICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdOT1RfRE9XTkxPQURJTkcnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93Q2F0ZWdvcnlMaXN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XHJcbiAgICBjb25zdCByZWZlcmVuY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2Nyb2xsUmVmZXJlbmNlJyk7XHJcbiAgICBpZiAocmVmZXJlbmNlKSB7XHJcbiAgICAgIHJlZmVyZW5jZS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNldCgpO1xyXG5cclxuICB9XHJcbiAgcmVtb3ZlQ2F0ZWdvcnkoKSB7XHJcbiAgICB0aGlzLmNhdGVnb3J5ID0ge1xyXG4gICAgICB0eXBlOiAnc3RyYXRlZ2ljJyxcclxuICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogJydcclxuICAgIH07XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgfVxyXG4gIGdldFNldHRpbmdzSW5mbygpIHtcclxuXHJcbiAgICB0aGlzLnJpc2tTZXJ2aWNlLmdldFJpc2tTZXR0aW5nRGV0YWlscygpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnNldHRpbmdzSW5mbyA9IHJlcztcclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgdHJpZ2dlckJyb3dzZUZpbGUoKSB7XHJcbiAgICBjb25zdCBnZXRGaWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVJbnB1dCcpO1xyXG4gICAgaWYgKGdldEZpbGUpIHtcclxuICAgICAgZ2V0RmlsZS5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkZWRGaWxlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMucmlza0J1bGtVcGxvYWQgPSB7XHJcbiAgICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgICB3ZWlnaHRGYWN0b3JzOiBbXSxcclxuICAgICAgICByaXNrczogW11cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mbyA9IHtcclxuICAgICAgICBtZW1iZXJJZDogJycsXHJcbiAgICAgICAgY2F0ZWdvcnlJZDogJycsXHJcbiAgICAgICAgb3duZXJMaXN0OiBbXSxcclxuICAgICAgICByY0xpc3Q6IFtdLFxyXG4gICAgICAgIG1pdGlnYXRpb25MaXN0OiBbXSxcclxuICAgICAgICBsaWtlbGlob29kOltdLFxyXG4gICAgICAgIGltcGFjdDpbXSxcclxuICAgICAgICB2ZWxvY2l0eTpbXSxcclxuICAgICAgICB2dWxuZXJhYmlsaXR5OltdXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcmVmZXJlbmNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Njcm9sbFJlZmVyZW5jZScpO1xyXG4gICAgICBpZiAocmVmZXJlbmNlKSB7XHJcbiAgICAgICAgcmVmZXJlbmNlLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbGVOYW1lID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdLm5hbWU7XHJcblxyXG4gICAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IGV2ZW50LnRhcmdldCBhcyBEYXRhVHJhbnNmZXI7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY3VybHlcclxuICAgICAgaWYgKHRhcmdldC5maWxlcy5sZW5ndGggIT09IDEpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBtdWx0aXBsZSBmaWxlcycpO1xyXG4gICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJzdHI6IHN0cmluZyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgIGNvbnN0IHdzbmFtZTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1swXTtcclxuICAgICAgICBjb25zdCB3c25hbWUxOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzFdO1xyXG5cclxuICAgICAgICBjb25zdCB3czogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lXTtcclxuICAgICAgICBjb25zdCB0ZW1wRGF0YTogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lMV07XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih3cywge1xyXG4gICAgICAgICAgaGVhZGVyOiAxLFxyXG4gICAgICAgIH0pIGFzIEFPQTtcclxuXHJcbiAgICAgICAgY29uc3QgdERhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24odGVtcERhdGEsIHsgaGVhZGVyOiAxIH0pIGFzIEFPQTtcclxuICAgICAgICBjb25zdCB0ZW1wTGlzdCA9IHREYXRhLmZpbHRlcigoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMCk7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ubWVtYmVySWQgPSB0ZW1wTGlzdFswXVs1Nl1cclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUlkID0gdGVtcExpc3RbMF1bNTVdXHJcbiAgICAgICAgdGhpcy5yaXNrQnVsa1VwbG9hZC5oZWFkZXIgPSBjbG9uZURlZXAodGhpcy5kYXRhWzRdLmZpbHRlcigoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMCkpO1xyXG4gICAgICAgIHRoaXMucmlza0J1bGtVcGxvYWQud2VpZ2h0RmFjdG9ycyA9IGNsb25lRGVlcCh0aGlzLmRhdGFbNV0uZmlsdGVyKCh3ZWlnaHRGYWN0b3I6IGFueSkgPT4gd2VpZ2h0RmFjdG9yLmxlbmd0aCA+IDApKTtcclxuICAgICAgICB0ZW1wTGlzdC5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudFs4XSkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbWVtYmVyID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnRbOF0sXHJcbiAgICAgICAgICAgICAgbWVtYmVyX2lkOiBlbGVtZW50WzldXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ub3duZXJMaXN0LnB1c2gobWVtYmVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50WzJdKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBtaXRpZ2F0aW9uID0ge1xyXG4gICAgICAgICAgICAgIG1pdGlnYXRpb25OYW1lOiBlbGVtZW50WzJdLFxyXG4gICAgICAgICAgICAgIG1pdGlnYXRpb25faWQ6IGVsZW1lbnRbM11cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5taXRpZ2F0aW9uTGlzdC5wdXNoKG1pdGlnYXRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnRbNl0pIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJjID0ge1xyXG4gICAgICAgICAgICAgIHJjTmFtZTogZWxlbWVudFs2XSxcclxuICAgICAgICAgICAgICByY19pZDogZWxlbWVudFs3XSxcclxuICAgICAgICAgICAgICBvd25lcl9pZHM6IGVsZW1lbnRbMTFdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucmNMaXN0LnB1c2gocmMpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChlbGVtZW50WzEyXSkge1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ubGlrZWxpaG9vZC5wdXNoKGVsZW1lbnRbMTJdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50WzEzXSkge1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8uaW1wYWN0LnB1c2goZWxlbWVudFsxM10pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMucmlza0J1bGtVcGxvYWQ/LndlaWdodEZhY3RvcnM/LmluY2x1ZGVzKCdWZWxvY2l0eScpICYmIGVsZW1lbnRbMTRdKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnZlbG9jaXR5LnB1c2goZWxlbWVudFsxNF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMucmlza0J1bGtVcGxvYWQ/LndlaWdodEZhY3RvcnM/LmluY2x1ZGVzKCdWdWxuZXJhYmlsaXR5JykgJiYgZWxlbWVudFsxNV0pIHtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8udnVsbmVyYWJpbGl0eS5wdXNoKGVsZW1lbnRbMTVdKTtcclxuXHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZU5hbWUuc3Vic3RyKC01KSAhPT0gJy54bHN4Jykge1xyXG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSBmaWxlIGZvciBSaXNrIENhdGVnb3J5OicgKyB0aGlzLmNhdGVnb3J5LnNlbGVjdGVkQ2F0ZWdvcnkuY2F0ZWdvcnlfbmFtZSArICcgUkVUUlknO1xyXG5cclxuICAgICAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmlza0J1bGtVcGxvYWQuaGVhZGVyWzBdICE9PSAnV2hhdCByaXNrIHdvdWxkIHlvdSBsaWtlIHRvIG1hbmFnZT8qJykge1xyXG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSBmaWxlIGZvciBSaXNrIENhdGVnb3J5OicgKyB0aGlzLmNhdGVnb3J5LnNlbGVjdGVkQ2F0ZWdvcnkuY2F0ZWdvcnlfbmFtZSArICcgUkVUUlknO1xyXG5cclxuICAgICAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhPy5zbGljZSg3KTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0T3duZXIgPSB0aGlzLnRlbXBsYXRlSW5mbz8ub3duZXJMaXN0Py5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCA9PSB0aGlzLm1lbWJlcklkKTtcclxuICAgICAgICBpZihkZWZhdWx0T3duZXIgIT0tMSl7XHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRPd25lciA9IHRoaXMudGVtcGxhdGVJbmZvLm93bmVyTGlzdFtkZWZhdWx0T3duZXJdLm5hbWVcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgZmlsZSBmb3IgUmlzayBDYXRlZ29yeTonICsgdGhpcy5jYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5LmNhdGVnb3J5X25hbWUgKyAnIFJFVFJZJztcclxuICAgICAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCh0aGlzLm1lbWJlcl9vYmpfaWQgIT0gdGhpcy50ZW1wbGF0ZUluZm8ubWVtYmVySWQpIHx8ICh0aGlzLmNhdGVnb3J5LnNlbGVjdGVkQ2F0ZWdvcnkuX2lkICE9IHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5SWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIGZpbGUgZm9yIFJpc2sgQ2F0ZWdvcnk6JyArIHRoaXMuY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5jYXRlZ29yeV9uYW1lICsgJyBSRVRSWSc7XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpc0VtcHR5ID0gdGhpcy5jaGVja0VtcHR5RmlsZSgpO1xyXG4gICAgICAgIGlmIChpc0VtcHR5KSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdZb3UgaGF2ZSB1cGxvYWRlZCBhIGJsYW5rIHRlbXBsYXRlLiBQbGVhc2UgYWRkIGRldGFpbHMgZm9yIGFsbCBtYW5kYXRvcnkgZmllbGRzLiBSRVRSWSc7XHJcbiAgICAgICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRoaXMucmlza0J1bGtVcGxvYWQuaGVhZGVyWzZdID09PSAnUmlzayBBc3Nlc3NtZW50IERlYWRsaW5lKicpIHtcclxuICAgICAgICAgICAgdGhpcy5hc3Nlc3NtZW50RGVhZExpbmUgPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hc3Nlc3NtZW50RGVhZExpbmUgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5maWxlVmFsdWUgPSAnJztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJpc2tEYXRhID0gdGhpcy5kYXRhLmZpbHRlcigoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMCk7XHJcblxyXG4gICAgICAgIHJpc2tEYXRhLmZvckVhY2goKHJpc2s6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgIC8vIGNvbnN0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgLy8gICByaXNrTmFtZTogcmlza1swXSA/PyAnJyxcclxuICAgICAgICAgIC8vICAgZGVzY3JpcHRpb246IHJpc2tbMV0gPz8gJycsXHJcbiAgICAgICAgICAvLyAgIHJjTmFtZTogcmlza1syXSA/PyAnJyxcclxuICAgICAgICAgIC8vICAgb3duZXI6IHJpc2tbM10gPz8gJycsXHJcbiAgICAgICAgICAvLyAgIG1pdGlnYXRpb25Qcmlvcml0eTogcmlza1s0XSA/PyAnJyxcclxuICAgICAgICAgIC8vICAgb3ZlcnNlZXI6IHJpc2tbNV0gPz8gJycsXHJcbiAgICAgICAgICAvLyAgIGlzVmFsaWQ6IHRoaXMuY2hlY2tWYWxpZGl0eShyaXNrKSxcclxuICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAvLyBpZiAodGhpcy5hc3Nlc3NtZW50RGVhZExpbmUpIHtcclxuICAgICAgICAgIC8vICAgb2JqLmFzc2Vzc21lbnREZWFkTGluZSA9IHJpc2tbNl0gPz8gJyc7XHJcbiAgICAgICAgICAvLyAgIG9iai5saWtlbGlob29kID0gcmlza1s3XSA/PyAnJztcclxuICAgICAgICAgIC8vICAgb2JqLmltcGFjdCA9IHJpc2tbOF0gPz8gJyc7XHJcbiAgICAgICAgICAvLyAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkLndlaWdodEZhY3RvcnMubGVuZ3RoID09IDMpIHtcclxuICAgICAgICAgIC8vICAgICBvYmoudmVsb2NpdHkgPSByaXNrWzldID8/ICcnO1xyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkLndlaWdodEZhY3RvcnMubGVuZ3RoID09IDQpIHtcclxuICAgICAgICAgIC8vICAgICBvYmoudmVsb2NpdHkgPSByaXNrWzldID8/ICcnO1xyXG4gICAgICAgICAgLy8gICAgIG9iai52dWxuZXJhYmlsaXR5ID0gcmlza1sxMF0gPz8gJyc7XHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vICAgY29uc3QgY3VzdG9tVGFnczogYW55ID0gW107XHJcblxyXG4gICAgICAgICAgLy8gICB0aGlzLmNhdGVnb3J5LnNlbGVjdGVkQ2F0ZWdvcnkuY3VzdG9tX3RhZy5mb3JFYWNoKCh0YWc6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICAgIGlmICh0YWcpIHtcclxuICAgICAgICAgIC8vICAgICAgIGNvbnN0IGNUYWcgPSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIGN1c3RvbV90YWdfdmFsdWU6IHJpc2tbNyArIHRoaXMucmlza0J1bGtVcGxvYWQud2VpZ2h0RmFjdG9ycy5sZW5ndGggKyBpbmRleF0gPz8gJycsXHJcbiAgICAgICAgICAvLyAgICAgICAgIGN1c3RvbV90YWdfbmFtZTogdGFnLnRhZ05hbWVcclxuICAgICAgICAgIC8vICAgICAgIH07XHJcbiAgICAgICAgICAvLyAgICAgICBjdXN0b21UYWdzLnB1c2goY1RhZyk7XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgIC8vICAgb2JqLmN1c3RvbVRhZyA9IGN1c3RvbVRhZ3M7XHJcbiAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gICBvYmoubGlrZWxpaG9vZCA9IHJpc2tbNl0gPz8gJyc7XHJcbiAgICAgICAgICAvLyAgIG9iai5pbXBhY3QgPSByaXNrWzddID8/ICcnO1xyXG5cclxuICAgICAgICAgIC8vICAgaWYgKHRoaXMucmlza0J1bGtVcGxvYWQud2VpZ2h0RmFjdG9ycy5sZW5ndGggPT0gMykge1xyXG4gICAgICAgICAgLy8gICAgIG9iai52ZWxvY2l0eSA9IHJpc2tbOF0gPz8gJyc7XHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vICAgaWYgKHRoaXMucmlza0J1bGtVcGxvYWQud2VpZ2h0RmFjdG9ycy5sZW5ndGggPT0gNCkge1xyXG4gICAgICAgICAgLy8gICAgIG9iai52ZWxvY2l0eSA9IHJpc2tbOF0gPz8gJyc7XHJcbiAgICAgICAgICAvLyAgICAgb2JqLnZ1bG5lcmFiaWxpdHkgPSByaXNrWzldID8/ICcnO1xyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyAgIGNvbnN0IGN1c3RvbVRhZ3M6IGFueSA9IFtdO1xyXG4gICAgICAgICAgLy8gICB0aGlzLmNhdGVnb3J5LnNlbGVjdGVkQ2F0ZWdvcnkuY3VzdG9tX3RhZy5mb3JFYWNoKCh0YWc6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICAgIGlmICh0YWcpIHtcclxuICAgICAgICAgIC8vICAgICAgIGNvbnN0IGNUYWcgPSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIGN1c3RvbV90YWdfdmFsdWU6IHJpc2tbNiArIHRoaXMucmlza0J1bGtVcGxvYWQud2VpZ2h0RmFjdG9ycy5sZW5ndGggKyBpbmRleF0gPz8gJycsXHJcbiAgICAgICAgICAvLyAgICAgICAgIGN1c3RvbV90YWdfbmFtZTogdGFnLnRhZ05hbWVcclxuICAgICAgICAgIC8vICAgICAgIH07XHJcbiAgICAgICAgICAvLyAgICAgICBjdXN0b21UYWdzLnB1c2goY1RhZyk7XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgIC8vICAgb2JqLmN1c3RvbVRhZyA9IGN1c3RvbVRhZ3M7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICBsZXQgb2JqID0gdGhpcy5zZXRSaXNrRGV0YWlscyhyaXNrKVxyXG4gICAgICAgICAgaWYgKG9iaj8ubGlrZWxpaG9vZCAmJiAhdGhpcy50ZW1wbGF0ZUluZm8/Lmxpa2VsaWhvb2QuaW5jbHVkZXMob2JqPy5saWtlbGlob29kKSkge1xyXG4gICAgICAgICAgICBvYmouaXNWYWxpZD1mYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChvYmo/LmltcGFjdCAmJiAhdGhpcy50ZW1wbGF0ZUluZm8/LmltcGFjdC5pbmNsdWRlcyhvYmo/LmltcGFjdCkpIHtcclxuICAgICAgICAgICAgb2JqLmlzVmFsaWQ9ZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob2JqPy52ZWxvY2l0eSAmJiAhdGhpcy50ZW1wbGF0ZUluZm8/LnZlbG9jaXR5LmluY2x1ZGVzKG9iaj8udmVsb2NpdHkpKSB7XHJcbiAgICAgICAgICAgIG9iai5pc1ZhbGlkPWZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG9iaj8udnVsbmVyYWJpbGl0eSAmJiAhdGhpcy50ZW1wbGF0ZUluZm8/LnZ1bG5lcmFiaWxpdHkuaW5jbHVkZXMob2JqPy52dWxuZXJhYmlsaXR5KSkge1xyXG4gICAgICAgICAgICBvYmouaXNWYWxpZD1mYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnJpc2tCdWxrVXBsb2FkLnJpc2tzLnB1c2gob2JqKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0V4Y2VsID0gdHJ1ZTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQ/LmZpbGVzWzBdKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrRW1wdHlGaWxlKCkge1xyXG4gICAgbGV0IGlzRW1wdHkgPSBmYWxzZTtcclxuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50Lmxlbmd0aCA+IDApO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPCAxKSB7XHJcbiAgICAgIGlzRW1wdHkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzRW1wdHk7XHJcbiAgfVxyXG5cclxuICBjaGVja1ZhbGlkaXR5KHJpc2s6IGFueSkge1xyXG4gICAgY29uc3QgcmUgPSAvJm5ic3A7fDxicj4vZztcclxuICAgIGxldCB0cmltbWVkTmFtZSA9IChyaXNrWzBdKSA/IHJpc2tbMF0udG9TdHJpbmcoKS5yZXBsYWNlKHJlLCAnJykudHJpbSgpIDogJyc7XHJcbiAgICB0cmltbWVkTmFtZSA9IHRyaW1tZWROYW1lLnJlcGxhY2UoLyAgKy9nLCAnICcpO1xyXG4gICAgLy8gfHwgKHRoaXMuYXNzZXNzbWVudERlYWRMaW5lICYmICghcmlza1s2XSkpXHJcbiAgICBpZiAoKCF0cmltbWVkTmFtZSkgfHwgKHJpc2tbM10gJiYgKHJpc2tbM10gPT0gcmlza1s2XSkpIHx8ICgoIXJpc2tbM10pICYmICh0aGlzLmRlZmF1bHRPd25lciA9PSByaXNrWzZdKSlcclxuICAgICAgfHwgKCFyaXNrWzJdKSB8fCAoIXRoaXMuZnJlcXVlbmN5VHlwZT8uaW5jbHVkZXMocmlza1s0XT8udG9Mb3dlckNhc2UoKSkpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7IHJldHVybiB0cnVlIH1cclxuICB9XHJcblxyXG4gIGRvd25sb2FkVGVtcGxhdGUoKSB7XHJcbiAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gJ0RPV05MT0FESU5HJztcclxuICAgIHRoaXMuZG93bmxvYWRQZXJjZW50ID0gMDtcclxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJyk7XHJcbiAgICBjb25zdCBkb3dubG9hZERhdGUgPSB0b2RheVswXTtcclxuICAgIGNvbnN0IGZpbGVOYW1lID0gJ1ZDb21wbHkgLSBSaXNrIE1vZHVsZSAtIEFkZCBNdWx0aXBsZSBSaXNrcyAtICcrIHRoaXMuY2F0ZWdvcnk/LnNlbGVjdGVkQ2F0ZWdvcnk/LmNhdGVnb3J5X25hbWUgKycgLSAnICsgZG93bmxvYWREYXRlICsgJy54bHN4JztcclxuXHJcbiAgICB0aGlzLnJpc2tTZXJ2aWNlLmRvd25sb2FkVGVtcGxhdGUodGhpcy5jYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5Ll9pZCkuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmRvd25sb2FkUGVyY2VudCA9IDEwMCAqIChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0YS5ib2R5KSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9IHRoaXMucmlza1NlcnZpY2UuZG93bkxvYWRGaWxlKGRhdGEuYm9keSwgJ2FwcGxpY2F0aW9uL3hsc3gnLCBmaWxlTmFtZSk7XHJcbiAgICAgICAgICB9LCAxNTAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gJ0RPV05MT0FERUQnO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0Umlza0J1bGtVcGxvYWQoY29tcGxldGVBc3Nlc3NtZW50OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IFtdO1xyXG4gICAgdGhpcy5yaXNrQnVsa1VwbG9hZC5yaXNrcy5mb3JFYWNoKChyaXNrOiBhbnkpID0+IHtcclxuICAgICAgbGV0IGZyZXF1ZW5jeVZhbHVlID0gJyc7XHJcbiAgICAgIGlmKHJpc2s/LmZyZXF1ZW5jeS50b0xvd2VyQ2FzZSgpID09PSAnb25lIHRpbWUnKSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKClcclxuICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKVxyXG4gICAgICAgIGZyZXF1ZW5jeVZhbHVlID0gJzB+JyArICcnICsgZGF0ZS5nZXRGdWxsWWVhcigpICsgJ34nICsgKGRhdGUuZ2V0TW9udGgoKSArIDEpICsgJ34nICsgZGF0ZS5nZXREYXRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIGZyZXF1ZW5jeVZhbHVlID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnNob3J0SGFuZF9mcmVxQ2FsKHJpc2s/LmZyZXF1ZW5jeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyaXNrLmlzVmFsaWQpIHtcclxuICAgICAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgICAgICB0aXRsZTogcmlzaz8ucmlza05hbWUsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogcmlzaz8uZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICBjYXRlZ29yeV9jdXN0b21fdGFnOiByaXNrPy5jdXN0b21UYWcsXHJcbiAgICAgICAgICBhc3Nlc3NtZW50X2RlYWRsaW5lX2VuYWJsZTogdGhpcy5zZXR0aW5nc0luZm8/LmFzc2Vzc21lbnRfZGVhZGxpbmVfZW5hYmxlLFxyXG4gICAgICAgICAgb3duZXI6IChyaXNrPy5vd25lcikgPyB0aGlzLnJldHVybklkcyhyaXNrPy5vd25lciwgJ293bmVyJykgOiB0aGlzLnJldHVybklkcyh0aGlzLmRlZmF1bHRPd25lciwgJ293bmVyJyksXHJcbiAgICAgICAgICBjYXRlZ29yeTogKHRoaXMuY2F0ZWdvcnk/LnNlbGVjdGVkQ2F0ZWdvcnk/LmNhdGVnb3J5X2lkKSA/IFt0aGlzLmNhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeV9pZF0gOiBbXSxcclxuICAgICAgICAgIG1hbmFnZV9vdmVyc2lnaHQ6IHRoaXMucmV0dXJuSWRzKHJpc2s/Lm92ZXJzZWVyLCAnb3ZlcnNlZXInKSxcclxuICAgICAgICAgIHJjX2lkOiB0aGlzLnJldHVybklkcyhyaXNrPy5yY05hbWUsICdyY19pZCcpLFxyXG4gICAgICAgICAgaGVhZF9pZHM6IHRoaXMucmV0dXJuSWRzKHJpc2s/LnJjTmFtZSwgJ3JjX293bmVyX2lkcycpLCAvLzIgdG8gYmUgYXJheVxyXG4gICAgICAgICAgcmF0aW5nX2FycjogW1xyXG4gICAgICAgICAgICByaXNrPy5saWtlbGlob29kID8gcmlzaz8ubGlrZWxpaG9vZC5zcGxpdCgnIC0gJylbMV0gOiAwLFxyXG4gICAgICAgICAgICByaXNrPy5pbXBhY3QgPyByaXNrPy5pbXBhY3Quc3BsaXQoJyAtICcpWzFdIDogMCxcclxuICAgICAgICAgICAgcmlzaz8udmVsb2NpdHkgPyByaXNrPy52ZWxvY2l0eS5zcGxpdCgnIC0gJylbMV0gOiAwLFxyXG4gICAgICAgICAgICByaXNrPy52dWxuZXJhYmlsaXR5ID8gcmlzaz8udnVsbmVyYWJpbGl0eS5zcGxpdCgnIC0gJylbMV0gOiAwLFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIG1lbWJlcl9pZDogdGhpcy5tZW1iZXJJZCxcclxuICAgICAgICAgIG9yZ2FuaXNhdGlvbl9pZDogdGhpcy5vcmdhbml6YXRpb25JZCxcclxuICAgICAgICAgIHJpc2tfcHJvZ3Jlc3NfZmxhZzogMSxcclxuICAgICAgICAgIElmQXNzZXNzbWVudERvbmU6IDAsXHJcbiAgICAgICAgICB3b3Jrc2hvcF9pZDogJycsXHJcbiAgICAgICAgICBjb21wbGV0ZV9hc3Nlc3NtZW50OiAoY29tcGxldGVBc3Nlc3NtZW50KSA/IDEgOiAwLFxyXG4gICAgICAgICAgbWl0aWdhdGlvbjogdGhpcy5yZXR1cm5JZHMocmlzaz8ubWl0aWdhdGlvblByaW9yaXR5LCAnbWl0aWdhdGlvbicpLCAvLzMgd3JvbmdcclxuICAgICAgICAgIHdlaWdodGFnZV9lbmFibGU6IHRoaXMuc2V0dGluZ3NJbmZvPy53ZWlnaHRhZ2VfZW5hYmxlLFxyXG4gICAgICAgICAgdHJlYXRtZW50X3R5cGU6IHRoaXMuc2V0dGluZ3NJbmZvPy50cmVhdG1lbnRfY3JpdGVyaWEsXHJcbiAgICAgICAgICB3ZWlnaHRhZ2VfZGV0YWlsczogdGhpcy5zZXR0aW5nc0luZm8/LndlaWdodGFnZV9kZXRhaWxzLFxyXG4gICAgICAgICAgd2VpZ2h0YWdlX3NldF9ieTogdGhpcy5zZXR0aW5nc0luZm8/LndlaWdodGFnZV9zZXRfYnksXHJcbiAgICAgICAgICB3ZWlnaHRhZ2Vfc3RyOiBbXHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NJbmZvPy53ZWlnaHRhZ2VfZGV0YWlscz8uaW1wYWN0LnZhbHVlLFxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzSW5mbz8ud2VpZ2h0YWdlX2RldGFpbHM/Lmxpa2VsaWhvb2QudmFsdWUsXHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NJbmZvPy53ZWlnaHRhZ2VfZGV0YWlscz8udmVsb2NpdHkudmFsdWUsXHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NJbmZvPy53ZWlnaHRhZ2VfZGV0YWlscz8udnVsbmVyYWJpbGl0eS52YWx1ZSxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICAvLyBhc3Nlc3NtZW50X2RlYWRsaW5lX3NldF9ieTogdGhpcy5zZXR0aW5nc0luZm8/LmFzc2Vzc21lbnRfZGVhZGxpbmVfc2V0X2J5LCAvL2NoZWNrMSBub3QgYXBwZWFyaW5nXHJcbiAgICAgICAgICBhc3Nlc3NtZW50X2RlYWRsaW5lX3NldF9ieTogdGhpcy5zZXR0aW5nc0luZm8/LmFzc2Vzc21lbnRfZGVhZGxpbmVfc2V0X2J5ID8/IHRoaXMubWVtYmVySWQsIC8vY2hlY2sxIG5vdCBhcHBlYXJpbmdcclxuICAgICAgICAgIGFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5czogKHRoaXMuc2V0dGluZ3NJbmZvPy5hc3Nlc3NtZW50X2RlYWRsaW5lX2VuYWJsZSkgPyB0aGlzLnNldHRpbmdzSW5mbz8uYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzIDogcmlzaz8uYXNzZXNzbWVudERlYWRMaW5lLFxyXG4gICAgICAgICAgZnJlcXVlbmN5X2RldGFpbHM6IHtcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiBmcmVxdWVuY3lWYWx1ZSxcclxuICAgICAgICAgICAgc3RhcnRlZF9hdDogdGhpcy5jaGFuZ2VUaW1lWm9uZShuZXcgRGF0ZSkgPz8gbW9tZW50KCkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSxcclxuICAgICAgICAgICAgZnJlcXVlbmN5X3RpbWU6IFwiMTE6MDAgcG1cIixcclxuICAgICAgICAgICAgcmVtaW5kX2JlZm9yZV9kYXlzOiByaXNrPy5lbWFpbFJlbWluZGVyID8gcmlzaz8uZW1haWxSZW1pbmRlciA6IHRoaXMuc2V0RGVmYXVsdEVtYWlsUmVtaW5kZXJWYWx1ZShyaXNrPy5mcmVxdWVuY3kpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHJpc2tfbGFiZWw6IHRoaXMuc2V0Umlza0xhYmVsKHJpc2s/LnJpc2tMYWJlbCksXHJcbiAgICAgICAgICBtaXRpZ2F0aW9uX3BsYW5fcmVjb21tZW5kYXRpb246IHJpc2s/Lm1pdGlnYXRpb25QbGFucyA/PyAnJyxcclxuICAgICAgICAgIHNhbWVSaXNrUmF0aW5nc0ZvckFsbFJDOiByaXNrPy5hcHBseVNhbWVSaXNrUmF0aW5nID8/ICdObycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBwYXlsb2FkLnB1c2gob2JqKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhcInBheWxvYWRwYXlsb2FkcGF5bG9hZHBheWxvYWRwYXlsb2FkcGF5bG9hZCAgPT09PT5cIixwYXlsb2FkKVxyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuYWRkQnVsa1Jpc2socGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJpc2tEYXRhID0gcmVzO1xyXG4gICAgfSxcclxuICAgICAgZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93RXhjZWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsICdhbGVydCcpO1xyXG5cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICByZXR1cm5JZHMoaXRlbTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSAncmNfaWQnOlxyXG4gICAgICAgIGNvbnN0IHJjSWQ6IGFueSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJjTGlzdC5mb3JFYWNoKChyY19lbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyY19lbGVtZW50LnJjTmFtZSA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIHJjSWQucHVzaChyY19lbGVtZW50LnJjX2lkKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByY0lkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyY19vd25lcl9pZHMnOlxyXG4gICAgICAgIGxldCBvd25lcl9pZHM6IGFueSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJjTGlzdC5mb3JFYWNoKChoZWFkZXJJZHM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGhlYWRlcklkcy5yY05hbWUgPT0gaXRlbSAmJiBoZWFkZXJJZHMub3duZXJfaWRzKSB7XHJcbiAgICAgICAgICAgIG93bmVyX2lkcz0gaGVhZGVySWRzLm93bmVyX2lkcy5pbmNsdWRlcygnLCcpPyBoZWFkZXJJZHMub3duZXJfaWRzLnNwbGl0KCcsJykubWFwKE51bWJlcikgOltOdW1iZXIoaGVhZGVySWRzLm93bmVyX2lkcyldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBvd25lcl9pZHM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ293bmVyJzpcclxuICAgICAgICBjb25zdCBvd25lcklkOiBhbnkgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5vd25lckxpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5uYW1lID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgb3duZXJJZC5wdXNoKGVsZW1lbnQubWVtYmVyX2lkKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBvd25lcklkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvdmVyc2Vlcic6XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJJZDogYW55ID0gW107XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ub3duZXJMaXN0LmZvckVhY2goKG9zX2VsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG9zX2VsZW1lbnQubmFtZSA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIG92ZXJzZWVySWQucHVzaChvc19lbGVtZW50Lm1lbWJlcl9pZClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gb3ZlcnNlZXJJZDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ21pdGlnYXRpb24nOlxyXG4gICAgICAgIGxldCBtaXRpZ2F0aW9uSWQ6IGFueT0wO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm1pdGlnYXRpb25MaXN0LmZvckVhY2goKG1pdGlnYXRpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG1pdGlnYXRpb24ubWl0aWdhdGlvbk5hbWUgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBtaXRpZ2F0aW9uSWQgPSBtaXRpZ2F0aW9uLm1pdGlnYXRpb25faWRcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbWl0aWdhdGlvbklkO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5yaXNrQnVsa1VwbG9hZCA9IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgd2VpZ2h0RmFjdG9yczogW10sXHJcbiAgICAgIHJpc2tzOiBbXVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGVtcGxhdGVJbmZvID0ge1xyXG4gICAgICBtZW1iZXJJZDogJycsXHJcbiAgICAgIGNhdGVnb3J5SWQ6ICcnLFxyXG4gICAgICBvd25lckxpc3Q6IFtdLFxyXG4gICAgICByY0xpc3Q6IFtdLFxyXG4gICAgICBtaXRpZ2F0aW9uTGlzdDogW11cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpbGVOYW1lID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5kYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50RGVhZExpbmUgPSB1bmRlZmluZWRcclxuICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuXHJcbiAgfVxyXG4gIGFjdGlvbihldmVudDogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XHJcbiAgICAgIGNhc2UgJ2FkZE1vcmUnOlxyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnkgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnc3RyYXRlZ2ljJyxcclxuICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6ICcnLFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gJ05PVF9ET1dOTE9BRElORyc7XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd2aWV3Umlza3MnOlxyXG4gICAgICAgIHRoaXMudmlld1Jpc2tzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVNtaWxleShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuICAgIHRoaXMuY2xvc2VXb3JrZmxvdy5lbWl0KHtldnQ6dGhpcy5yaXNrRGF0YSwgY29uZmlybSA6IGZhbHNlfSk7XHJcbiAgfVxyXG5cclxuICB2aWV3Umlza3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCArPSAnL3Jpc2stcmVnaXN0ZXInO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsICs9ICcvcmlzay9yaXNrLXJlZ2lzdGVyJztcclxuICAgIH1cclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgYXJyYXkgdmFsdWVzIGFzIHByb3BlcnRpZXMuXHJcbiAgICogPC9jb2RlPlxyXG4gICAqIEBwYXJhbSB7YW55fSByaXNrIC0gYW55ID0gW1xyXG4gICAqIEByZXR1cm5zIFtcclxuICAgKiAgIHtcclxuICAgKiAgICAgXCJyaXNrTmFtZVwiOiBcIlwiLFxyXG4gICAqICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICogICAgIFwicmNOYW1lXCI6IFwiXCIsXHJcbiAgICogICAgIFwib3duZXJcIjogXCJcIixcclxuICAgKiAgICAgXCJmcmVxdWVuY3lcIjogXCJcIixcclxuICAgKiAgICAgXCJlbWFpbFJlbWluZGVyXCI6IFwiXCIsXHJcbiAgICogICAgIFwib3ZlcnNlZXJcIjogXCJcIixcclxuICAgKiAgICAgXCJpc1ZhbGlkXCI6IGZhbHNlLFxyXG4gICAqICAgICBcIm1pdGlnYXRpb25Qcmlvcml0eVwiOiBcIlwiLFxyXG4gICAqL1xyXG4gIHNldFJpc2tEZXRhaWxzKHJpc2s6IGFueSkge1xyXG4gICAgbGV0IG9iajogYW55O1xyXG4gICAgb2JqID0ge1xyXG4gICAgICByaXNrTmFtZTogcmlza1swXSA/PyAnJyxcclxuICAgICAgZGVzY3JpcHRpb246IHJpc2tbMV0gPz8gJycsXHJcbiAgICAgIHJjTmFtZTogcmlza1syXSA/PyAnJyxcclxuICAgICAgb3duZXI6IHJpc2tbM10gPz8gJycsXHJcbiAgICAgIGZyZXF1ZW5jeTogcmlza1s0XSA/PyAnJyxcclxuICAgICAgZW1haWxSZW1pbmRlcjogcmlza1s1XSxcclxuICAgICAgb3ZlcnNlZXI6IHJpc2tbNl0gPz8gJycsXHJcbiAgICAgIGlzVmFsaWQ6IHRoaXMuY2hlY2tWYWxpZGl0eShyaXNrKSxcclxuICAgIH1cclxuICAgIGxldCBpbmRleCA9IDc7XHJcbiAgICBpZih0aGlzLnJpc2tCdWxrVXBsb2FkPy5oZWFkZXI/LmluY2x1ZGVzKCdSZWNvbW1lbmRlZCBNaXRpZ2F0aW9uIFByaW9yaXR5JykpIHtcclxuICAgICAgb2JqWydtaXRpZ2F0aW9uUHJpb3JpdHknXSA9IHJpc2tbaW5kZXhdID8/ICcnO1xyXG4gICAgICBpbmRleCArKztcclxuICAgIH1cclxuICAgIG9ialsnbWl0aWdhdGlvblBsYW5zJ10gPSByaXNrW2luZGV4XSA/PyAnJztcclxuICAgIGluZGV4ICsrO1xyXG4gICAgb2JqWydyaXNrTGFiZWwnXSA9IHJpc2tbaW5kZXhdID8/ICcnO1xyXG4gICAgaW5kZXggKys7XHJcbiAgICBvYmpbJ2xpa2VsaWhvb2QnXSA9IHJpc2tbaW5kZXhdID8/ICcnO1xyXG4gICAgaW5kZXggKys7XHJcbiAgICBvYmpbJ2ltcGFjdCddID0gcmlza1tpbmRleF0gPz8gJyc7XHJcbiAgICBpbmRleCArKztcclxuICAgIGlmKHRoaXMucmlza0J1bGtVcGxvYWQ/LndlaWdodEZhY3RvcnM/LmluY2x1ZGVzKCdWZWxvY2l0eScpKSB7XHJcbiAgICAgIG9ialsndmVsb2NpdHknXSA9IHJpc2tbaW5kZXhdID8/ICcnO1xyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5yaXNrQnVsa1VwbG9hZD8ud2VpZ2h0RmFjdG9ycz8uaW5jbHVkZXMoJ1Z1bG5lcmFiaWxpdHknKSkge1xyXG4gICAgICBvYmpbJ3Z1bG5lcmFiaWxpdHknXSA9IHJpc2tbaW5kZXhdID8/ICcnO1xyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5yaXNrQnVsa1VwbG9hZD8uaGVhZGVyPy5pbmNsdWRlcygnRG8geW91IHdhbnQgdG8gYXBwbHkgdGhlIHNhbWUgcmlzayByYXRpbmdzIGZvciBhbGwgUmVzcG9uc2liaWxpdHkgQ2VudGVycz8nKSkge1xyXG4gICAgICBvYmpbJ2FwcGx5U2FtZVJpc2tSYXRpbmcnXSA9IHJpc2tbaW5kZXhdID8/ICcnO1xyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY3VzdG9tVGFnczogYW55ID0gW107XHJcbiAgICB0aGlzLmNhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jdXN0b21fdGFnPy5mb3JFYWNoKCh0YWc6IGFueSwgaTogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0YWcpIHtcclxuICAgICAgICBjb25zdCBjVGFnID0ge1xyXG4gICAgICAgICAgY3VzdG9tX3RhZ192YWx1ZTogcmlza1tpbmRleCArIGldID8/ICcnLFxyXG4gICAgICAgICAgY3VzdG9tX3RhZ19uYW1lOiB0YWcudGFnTmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY3VzdG9tVGFncy5wdXNoKGNUYWcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIG9ialsnY3VzdG9tVGFnJ10gPSBjdXN0b21UYWdzO1xyXG4gICAgb2JqWydpc1ZhbGlkRnJlcXVlbmN5J10gPSB0aGlzLmZyZXF1ZW5jeVR5cGU/LmluY2x1ZGVzKG9iaj8uZnJlcXVlbmN5Py50b0xvd2VyQ2FzZSgpKTtcclxuICAgIHJldHVybiBvYmo7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgZnJlcXVlbmN5VHlwZSBpcyB3ZWVrbHksIHJldHVybiAyLCBpZiBpdCdzIG1vbnRobHksIHJldHVybiA3LCBpZiBpdCdzIHF1YXJ0ZXJseSwgcmV0dXJuIDcsXHJcbiAgICogaWYgaXQncyBiaWFubnVhbCwgcmV0dXJuIDMwLCBpZiBpdCdzIGFubnVhbCwgcmV0dXJuIDMwLCBpZiBpdCdzIG9uZSB0aW1lLCByZXR1cm4gMTUsIG90aGVyd2lzZVxyXG4gICAqIHJldHVybiAwLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZnJlcXVlbmN5VHlwZV0gLSBzdHJpbmcgLSB0aGUgZnJlcXVlbmN5IHR5cGUgb2YgdGhlIHJlbWluZGVyXHJcbiAgICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGRheXMgYmVmb3JlIHRoZSBldmVudCB0aGF0IHRoZSByZW1pbmRlciBzaG91bGQgYmUgc2VudC5cclxuICAgKi9cclxuICBzZXREZWZhdWx0RW1haWxSZW1pbmRlclZhbHVlKGZyZXF1ZW5jeVR5cGU/OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgc3dpdGNoKGZyZXF1ZW5jeVR5cGU/LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSAnd2Vla2x5JyA6IHJldHVybiAyO1xyXG4gICAgICBjYXNlICdtb250aGx5JyA6IHJldHVybiA3O1xyXG4gICAgICBjYXNlICdxdWFydGVybHknIDogcmV0dXJuIDc7XHJcbiAgICAgIGNhc2UgJ2JpYW5udWFsJyA6IHJldHVybiAzMDtcclxuICAgICAgY2FzZSAnYW5udWFsJyA6IHJldHVybiAzMDtcclxuICAgICAgY2FzZSAnb25lIHRpbWUnIDogcmV0dXJuIDE1O1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBsYWJlbCBpcyAnbmV3IHJpc2snLCByZXR1cm4gMSwgaWYgdGhlIGxhYmVsIGlzICdlbWVyZ2luZy9yYXBpZGx5IGNoYW5naW5nIHJpc2tzJywgcmV0dXJuIDIsXHJcbiAgICogb3RoZXJ3aXNlIHJldHVybiAxXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsYWJlbF0gLSB0aGUgbGFiZWwgb2YgdGhlIHJpc2tcclxuICAgKiBAcmV0dXJucyBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBleHByZXNzaW9uIGluIHRoZSBmdW5jdGlvbi5cclxuICAgKi9cclxuICBzZXRSaXNrTGFiZWwobGFiZWw/OiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaChsYWJlbD8udG9Mb3dlckNhc2UoKSl7XHJcbiAgICAgIGNhc2UgJ25ld2x5IGlkZW50aWZpZWQgcmlza3MnOiByZXR1cm4gMTtcclxuICAgICAgY2FzZSAncmFwaWRseSBjaGFuZ2luZyByaXNrcyc6IHJldHVybiAyO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gMVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXCJJZiB0aGUgZGF0ZSBpcyBhIG51bWJlciwgY29udmVydCBpdCB0byBhIGRhdGUgb2JqZWN0LCB0aGVuIGNyZWF0ZSBhIG5ldyBkYXRlIG9iamVjdCB3aXRoIHRoZVxyXG4gICAqIHRpbWV6b25lIHNldCB0byB0aGUgdXNlcidzIHRpbWV6b25lLCB0aGVuIHJldHVybiB0aGUgZGF0ZSBpbiB0aGUgZm9ybWF0IFlZWVktTU0tREQuXCJcclxuICAgKiA8L2NvZGU+XHJcbiAgICogQHBhcmFtIHthbnl9IGRhdGUgLSBhbnkgLSB0aGUgZGF0ZSB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHRpbWV6b25lIG9mXHJcbiAgICogQHJldHVybnMgVGhlIGRhdGUgaXMgYmVpbmcgcmV0dXJuZWQgaW4gdGhlIHRpbWV6b25lIG9mIHRoZSB1c2VyLlxyXG4gICAqL1xyXG4gIGNoYW5nZVRpbWVab25lKGRhdGU6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiBkYXRlID09PSAnbnVtYmVyJykge1xyXG4gICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnZEYXRlID0gbmV3IERhdGUoXHJcbiAgICAgIGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xyXG4gICAgICAgIHRpbWVab25lOiB0aGlzLmF1dGhTZXJ2aWNlLnVzZXJEZXRhaWxzPy50aW1lem9uZSxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gbW9tZW50KGludkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlza1wiPlxyXG4gICAgPCEtLSBtYWluIGNvbnRhaW5lciBzdGFydHMgaGVyZSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlzay1ib2R5XCIgW2NsYXNzLmRpc2FibGVkXT1cInNob3dDYXRlZ29yeUxpc3RcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2stY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvc3ByZWFkc2hlZXQtbXVsdGlwbGUtY2F0ZWdvcnkuc3ZnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8aDQgaWQ9XCJtdWx0aXBsZVJpc2tcIj5Zb3UgY2FuIGFkZCBtdWx0aXBsZSByaXNrIGluIGp1c3QgdGhyZWUgZWFzeSBzdGVwczwvaDQ+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxsaT4gU2VsZWN0IGEgUmlzayBDYXRlZ29yeS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPiBEb3dubG9hZCB0aGUgdGVtcGxhdGUgYW5kIGZpbGwgaW4gdGhlIGRldGFpbHMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT4gVXBsb2FkIHRoZSAueGxzeCBmaWxlIGFuZCB5b3UncmUgZ29vZCB0byBnbyE8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiICBbYXR0ci5pZF09XCInc2Nyb2xsUmVmZXJlbmNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJpc2sgQ2F0ZWdvcnkgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RcIiAqbmdJZj1cIiFjYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cInNob3dDYXRlZ29yeUxpc3Q9dHJ1ZTtwaWNrZXJDaGFuZ2VkLmVtaXQodHJ1ZSlcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBSaXNrIENhdGVnb3J5XCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwiY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZUNhdGVnb3J5KClcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJjYXRlZ29yeT8uc2VsZWN0ZWRDYXRlZ29yeT8uY2F0ZWdvcnlfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e2NhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeV9uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmVDYXRlZ29yeSgpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeV9uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzaG93Q2F0ZWdvcnlMaXN0PXRydWU7cGlja2VyQ2hhbmdlZC5lbWl0KHRydWUpXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXRlZ29yeT8uc2VsZWN0ZWRDYXRlZ29yeVwiID5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ05PVF9ET1dOTE9BRElORydcIiBjbGFzcz1cImRvd25sb2FkXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPiA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxYjs8L2k+IERvd25sb2FkIFRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1wcm9ncmVzc1wiICpuZ0lmPVwiZG93bmxvYWRTdGF0dXMgPT09ICdET1dOTE9BRElORydcIj5cclxuICAgICAgICAgICAgICAgICAgICBEb3dubG9hZCBpbiBQcm9ncmVzc1xyXG4gICAgICAgICAgICAgICAgICAgIDxhcHAtbGluZS1sb2FkZXIgW2xvYWRlckhlaWdodF09XCInMidcIj48L2FwcC1saW5lLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURFRCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tcHJvZ3Jlc3NcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxYzs8L2k+RG93bmxvYWQgQ29tcGxldGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tYWdhaW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSXMgdGhlIGZpbGUgbm90IGRvd25sb2FkZWQ/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPlJldHJ5IERvd25sb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpc1dyb25nRmlsZSB8fCBpc1dyb25nRm9ybWF0fHwgaXNGaWxlRW1wdHlcIlxyXG4gICAgICAgICAgICA+e3tlcnJvck1lc3NhZ2V9fTwvcD5cclxuXHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48YXBwLWNhdGVnb3J5LWxpc3QgKm5nSWY9XCJzaG93Q2F0ZWdvcnlMaXN0XCIgW2NhdGVnb3J5TGlzdF09XCJjYXRlZ29yeUxpc3RcIiBbc2VsZWN0ZWRDYXRlZ29yeV09XCJjYXRlZ29yeVwiXHJcbiAgICAoc2F2ZVNlbGVjdGVkQ2F0ZWdvcnkpPVwic2F2ZVNlbGVjdGVkQ2F0ZWdvcnkoJGV2ZW50KTtwaWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpXCIgKGNsb3NlQ2F0ZWdvcmllc0xpc3QpPVwic2hvd0NhdGVnb3J5TGlzdD1mYWxzZTtwaWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpXCI+XHJcbjwvYXBwLWNhdGVnb3J5LWxpc3Q+XHJcbjxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cImlzTG9hZGVyXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cclxuPGFwcC1idWxrLXZpZXcgKm5nSWY9XCJzaG93RXhjZWxcIlxyXG5bcmlza0J1bGtVcGxvYWRdPVwicmlza0J1bGtVcGxvYWRcIlxyXG5bdGVtcGxhdGVJbmZvXT1cInRlbXBsYXRlSW5mb1wiXHJcbltkZWZhdWx0T3duZXJdPVwiZGVmYXVsdE93bmVyXCJcclxuW2ZpbGVOYW1lXT1cImZpbGVOYW1lXCJcclxuW2xvYWRlcl09XCJsb2FkZXJcIlxyXG5bYXNzZXNzbWVudERheXNFbmFibGVdPVwiYXNzZXNzbWVudERlYWRMaW5lXCJcclxuKHN1Ym1pdFJpc2tCdWxrVXBsb2FkKT1cInN1Ym1pdFJpc2tCdWxrVXBsb2FkKCRldmVudClcIlxyXG4oY2FuY2VsKT1cInJlc2V0KClcIlxyXG4+PC9hcHAtYnVsay12aWV3PlxyXG5cclxuPGlucHV0IHR5cGU9XCJmaWxlXCIgWyhuZ01vZGVsKV09XCJmaWxlVmFsdWVcIiBpZD1cImZpbGVJbnB1dFwiIGNsYXNzPVwiaGlkZGVuLWlucHV0XCIgKGNoYW5nZSk9XCJ1cGxvYWRlZEZpbGUoJGV2ZW50KVwiIC8+XHJcbjxhcHAtc21pbGV5LWRpYWxvZy1pbmxpbmUgKm5nSWY9XCJzaG93U21pbGV5XCIgW21lc3NhZ2VdPVwic21pbGV5TWVzc2FnZVwiIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIiAoYWN0aW9uKT1cImFjdGlvbigkZXZlbnQpXCIgKGNsb3NlU21pbGV5KT1cImNsb3NlU21pbGV5KCRldmVudClcIj48L2FwcC1zbWlsZXktZGlhbG9nLWlubGluZT4iXX0=
772
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJpc2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJpc2svYWRkLW11bHRpcGxlLXJpc2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJpc2svYWRkLW11bHRpcGxlLXJpc2suY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxNQUFNLEVBQ04sWUFBWSxHQUtiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFNN0IsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVFuQyxNQUFNLE9BQU8sd0JBQXdCO0lBcUZuQyxZQUNVLFdBQTJCLEVBQzNCLFdBQXdCLEVBQ3hCLFFBQXlCLEVBQ3pCLGdCQUFzQztRQUh0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDM0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFzQjtRQXhGdEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRCxpQkFBWSxHQUFpQjtZQUMzQixTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLElBQUks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LFdBQVcsRUFBRSxRQUFRO1NBQ2pELENBQUMsQ0FDSCxDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlDLENBQUM7O3FIQTUwQlUsd0JBQXdCO3lHQUF4Qix3QkFBd0IseU9DekJyQyxpaUpBeUVnTTsyRkRoRG5MLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSx1QkFBdUI7Z01BS3ZCLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkNoYW5nZXMsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgT25Jbml0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBDYXRlZ29yeUxpc3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NhdGVnb3J5TGlzdCc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZGRSaXNrU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2FkZC1yaXNrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEZyZXF1ZW5jeUJ1bGtTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvZnJlcXVlbmN5LnNlcnZpY2UnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC9tb21lbnQnO1xyXG5cclxudHlwZSBBT0EgPSBhbnlbXVtdO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hZGQtbXVsdGlwbGUtcmlzaycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1tdWx0aXBsZS1yaXNrLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hZGQtbXVsdGlwbGUtcmlzay5jb21wb25lbnQubGVzcycsICcuLi9mb3Jtcy5sZXNzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRNdWx0aXBsZVJpc2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQE91dHB1dCgpIHBpY2tlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHBvcHVsYXRlT3B0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZVdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkaXNjb25uZWN0UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBjYXRlZ29yeUxpc3Q6IENhdGVnb3J5TGlzdCA9IHtcclxuICAgIHN0cmF0ZWdpYzoge1xyXG4gICAgICBuYW1lOiAnU1RSQVRFR0lDJyxcclxuICAgICAgZGF0YTogW10sXHJcbiAgICB9LFxyXG4gICAgb3BlcmF0aW9uYWw6IHtcclxuICAgICAgbmFtZTogJ09QRVJBVElPTkFMJyxcclxuICAgICAgZGF0YTogW10sXHJcbiAgICB9LFxyXG4gICAgY29tcGxpYW5jZToge1xyXG4gICAgICBuYW1lOiAnQ09NUExJQU5DRScsXHJcbiAgICAgIGRhdGE6IFtdLFxyXG4gICAgfSxcclxuICAgIG90aGVyczoge1xyXG4gICAgICBuYW1lOiAnT1RIRVJTJyxcclxuICAgICAgZGF0YTogW10sXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIGNhdGVnb3J5OiBhbnkgPSB7XHJcbiAgICB0eXBlOiAnc3RyYXRlZ2ljJyxcclxuICAgIHNlbGVjdGVkQ2F0ZWdvcnk6ICcnLFxyXG4gIH07XHJcblxyXG4gIHJpc2tCdWxrVXBsb2FkOiBhbnkgPSB7XHJcbiAgICBoZWFkZXI6IFtdLFxyXG4gICAgd2VpZ2h0RmFjdG9yczogW10sXHJcbiAgICByaXNrczogW10sXHJcbiAgfTtcclxuXHJcbiAgdGVtcGxhdGVJbmZvOiBhbnkgPSB7XHJcbiAgICBtZW1iZXJJZDogJycsXHJcbiAgICBjYXRlZ29yeUlkOiAnJyxcclxuICAgIG93bmVyTGlzdDogW10sXHJcbiAgICByY0xpc3Q6IFtdLFxyXG4gICAgbWl0aWdhdGlvbkxpc3Q6IFtdLFxyXG4gICAgbGlrZWxpaG9vZDogW10sXHJcbiAgICBpbXBhY3Q6IFtdLFxyXG4gICAgdmVsb2NpdHk6IFtdLFxyXG4gICAgdnVsbmVyYWJpbGl0eTogW10sXHJcbiAgfTtcclxuXHJcbiAgaXNMb2FkZXIgPSBmYWxzZTtcclxuICBzaG93Q2F0ZWdvcnlMaXN0ID0gZmFsc2U7XHJcbiAgdGVtcGxhdGVEb3dubG9hZGVkID0gZmFsc2U7XHJcbiAgZG93bmxvYWRJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgc2V0dGluZ3NJbmZvITogYW55O1xyXG4gIGlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICBpc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgZmlsZU5hbWU6IGFueTtcclxuICBkYXRhOiBhbnk7XHJcbiAgYXNzZXNzbWVudERlYWRMaW5lOiBhbnk7XHJcbiAgc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgZmlsZVZhbHVlOiBhbnk7XHJcbiAgbWVtYmVySWQgPSAwO1xyXG4gIG9yZ2FuaXphdGlvbklkID0gMDtcclxuICBlcnJvck1lc3NhZ2UgPSAnIGludmFsaWQgZmlsZSBlcnJvcic7XHJcbiAgZG93bmxvYWRTdGF0dXM6IHN0cmluZyA9ICdOT1RfRE9XTkxPQURJTkcnO1xyXG4gIGRvd25sb2FkUGVyY2VudCA9IDA7XHJcblxyXG4gIHNtaWxleU1lc3NhZ2UgPSBgWW91J3JlIEFsbCBTZXQhIFdlJ3JlIHVwbG9hZGluZyB0aGUgcmlza3MuIFRoZSByaXNrIG93bmVycyB3aWxsIGJlIG5vdGlmaWVkIG9uY2UgdGhlIHJpc2tzIGhhdmUgYmVlbiB1cGxvYWRlZC5gO1xyXG4gIGFjdGlvbkJ1dHRvbnMgPSBbXHJcbiAgICB7IGJ1dHRvblRleHQ6ICdBZGQgTW9yZSBSaXNrcycsIGNsYXNzOiAnd2hpdGUtYnRuJywgaWQ6ICdhZGRNb3JlJyB9LFxyXG4gICAgeyBidXR0b25UZXh0OiAnVmlldyBSaXNrJywgY2xhc3M6ICdibHVlLWJ0bicsIGlkOiAndmlld1Jpc2tzJyB9LFxyXG4gIF07XHJcbiAgc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gIG1lbWJlcl9vYmpfaWQgPSAnJztcclxuICBkZWZhdWx0T3duZXIgPSAnJztcclxuICByaXNrRGF0YSE6IGFueTtcclxuICBmcmVxdWVuY3lUeXBlID0gW1xyXG4gICAgJ3dlZWtseScsXHJcbiAgICAnbW9udGhseScsXHJcbiAgICAncXVhcnRlcmx5JyxcclxuICAgICdiaWFubnVhbCcsXHJcbiAgICAnYW5udWFsJyxcclxuICAgICdvbmUgdGltZScsXHJcbiAgXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJpc2tTZXJ2aWNlOiBBZGRSaXNrU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmcmVxdWVuY3lTZXJ2aWNlOiBGcmVxdWVuY3lCdWxrU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge31cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMuZ2V0Q2F0ZWdvcnlMaXN0KCk7XHJcbiAgICB0aGlzLmdldFNldHRpbmdzSW5mbygpO1xyXG5cclxuICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpO1xyXG4gICAgdGhpcy5tZW1iZXJfb2JqX2lkID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpLl9pZDtcclxuICB9XHJcbiAgZ2V0Q2F0ZWdvcnlMaXN0KCkge1xyXG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnJpc2tTZXJ2aWNlLmdldENhdGVnb3J5TGlzdCgpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0LnN0cmF0ZWdpYy5kYXRhID0gcmVzLnN0cmF0ZWdpY19hcnI7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeUxpc3Qub3BlcmF0aW9uYWwuZGF0YSA9IHJlcy5vcGVyYXRpb25hbF9hcnI7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeUxpc3QuY29tcGxpYW5jZS5kYXRhID0gcmVzLmNvbXBsaWFuY2VfYXJyO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0Lm90aGVycy5kYXRhID0gcmVzLm90aGVyc19hcnI7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICBzYXZlU2VsZWN0ZWRDYXRlZ29yeShjYXRlZ29yeTogYW55KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2F0ZWdvcnk/LnNlbGVjdGVkQ2F0ZWdvcnk/LmNhdGVnb3J5X2lkICE9XHJcbiAgICAgIGNhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeV9pZFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnTk9UX0RPV05MT0FESU5HJztcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0NhdGVnb3J5TGlzdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xyXG4gICAgY29uc3QgcmVmZXJlbmNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Njcm9sbFJlZmVyZW5jZScpO1xyXG4gICAgaWYgKHJlZmVyZW5jZSkge1xyXG4gICAgICByZWZlcmVuY2Uuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzZXQoKTtcclxuICB9XHJcbiAgcmVtb3ZlQ2F0ZWdvcnkoKSB7XHJcbiAgICB0aGlzLmNhdGVnb3J5ID0ge1xyXG4gICAgICB0eXBlOiAnc3RyYXRlZ2ljJyxcclxuICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogJycsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gIH1cclxuICBnZXRTZXR0aW5nc0luZm8oKSB7XHJcbiAgICB0aGlzLnJpc2tTZXJ2aWNlLmdldFJpc2tTZXR0aW5nRGV0YWlscygpLnN1YnNjcmliZShcclxuICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NJbmZvID0gcmVzO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICB0cmlnZ2VyQnJvd3NlRmlsZSgpIHtcclxuICAgIGNvbnN0IGdldEZpbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZUlucHV0Jyk7XHJcbiAgICBpZiAoZ2V0RmlsZSkge1xyXG4gICAgICBnZXRGaWxlLmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGxvYWRlZEZpbGUoZXZlbnQ6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5yaXNrQnVsa1VwbG9hZCA9IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHdlaWdodEZhY3RvcnM6IFtdLFxyXG4gICAgICAgIHJpc2tzOiBbXSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XHJcbiAgICAgICAgbWVtYmVySWQ6ICcnLFxyXG4gICAgICAgIGNhdGVnb3J5SWQ6ICcnLFxyXG4gICAgICAgIG93bmVyTGlzdDogW10sXHJcbiAgICAgICAgcmNMaXN0OiBbXSxcclxuICAgICAgICBtaXRpZ2F0aW9uTGlzdDogW10sXHJcbiAgICAgICAgbGlrZWxpaG9vZDogW10sXHJcbiAgICAgICAgaW1wYWN0OiBbXSxcclxuICAgICAgICB2ZWxvY2l0eTogW10sXHJcbiAgICAgICAgdnVsbmVyYWJpbGl0eTogW10sXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzY3JvbGxSZWZlcmVuY2UnKTtcclxuICAgICAgaWYgKHJlZmVyZW5jZSkge1xyXG4gICAgICAgIHJlZmVyZW5jZS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWxlTmFtZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXS5uYW1lO1xyXG5cclxuICAgICAgY29uc3QgdGFyZ2V0OiBEYXRhVHJhbnNmZXIgPSBldmVudC50YXJnZXQgYXMgRGF0YVRyYW5zZmVyO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGN1cmx5XHJcbiAgICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoICE9PSAxKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBtdWx0aXBsZSBmaWxlcycpO1xyXG4gICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJzdHI6IHN0cmluZyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgIGNvbnN0IHdzbmFtZTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1swXTtcclxuICAgICAgICBjb25zdCB3c25hbWUxOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzFdO1xyXG5cclxuICAgICAgICBjb25zdCB3czogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lXTtcclxuICAgICAgICBjb25zdCB0ZW1wRGF0YTogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lMV07XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih3cywge1xyXG4gICAgICAgICAgaGVhZGVyOiAxLFxyXG4gICAgICAgIH0pIGFzIEFPQTtcclxuXHJcbiAgICAgICAgY29uc3QgdERhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24odGVtcERhdGEsIHsgaGVhZGVyOiAxIH0pIGFzIEFPQTtcclxuICAgICAgICBjb25zdCB0ZW1wTGlzdCA9IHREYXRhLmZpbHRlcihcclxuICAgICAgICAgIChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5sZW5ndGggPiAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5tZW1iZXJJZCA9IHRlbXBMaXN0WzBdWzU2XTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUlkID0gdGVtcExpc3RbMF1bNTVdO1xyXG4gICAgICAgIHRoaXMucmlza0J1bGtVcGxvYWQuaGVhZGVyID0gY2xvbmVEZWVwKFxyXG4gICAgICAgICAgdGhpcy5kYXRhWzRdLmZpbHRlcigoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucmlza0J1bGtVcGxvYWQud2VpZ2h0RmFjdG9ycyA9IGNsb25lRGVlcChcclxuICAgICAgICAgIHRoaXMuZGF0YVs1XS5maWx0ZXIoKHdlaWdodEZhY3RvcjogYW55KSA9PiB3ZWlnaHRGYWN0b3IubGVuZ3RoID4gMClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRlbXBMaXN0LmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgIGlmIChlbGVtZW50WzhdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlciA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50WzhdLFxyXG4gICAgICAgICAgICAgIG1lbWJlcl9pZDogZWxlbWVudFs5XSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ub3duZXJMaXN0LnB1c2gobWVtYmVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50WzJdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pdGlnYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgbWl0aWdhdGlvbk5hbWU6IGVsZW1lbnRbMl0sXHJcbiAgICAgICAgICAgICAgbWl0aWdhdGlvbl9pZDogZWxlbWVudFszXSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ubWl0aWdhdGlvbkxpc3QucHVzaChtaXRpZ2F0aW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50WzZdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJjID0ge1xyXG4gICAgICAgICAgICAgIHJjTmFtZTogZWxlbWVudFs2XSxcclxuICAgICAgICAgICAgICByY19pZDogZWxlbWVudFs3XSxcclxuICAgICAgICAgICAgICBvd25lcl9pZHM6IGVsZW1lbnRbMTFdLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QucHVzaChyYyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGVsZW1lbnRbMTJdKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5saWtlbGlob29kLnB1c2goZWxlbWVudFsxMl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnRbMTNdKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5pbXBhY3QucHVzaChlbGVtZW50WzEzXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucmlza0J1bGtVcGxvYWQ/LndlaWdodEZhY3RvcnM/LmluY2x1ZGVzKCdWZWxvY2l0eScpICYmXHJcbiAgICAgICAgICAgIGVsZW1lbnRbMTRdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8udmVsb2NpdHkucHVzaChlbGVtZW50WzE0XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucmlza0J1bGtVcGxvYWQ/LndlaWdodEZhY3RvcnM/LmluY2x1ZGVzKCdWdWxuZXJhYmlsaXR5JykgJiZcclxuICAgICAgICAgICAgZWxlbWVudFsxNV1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby52dWxuZXJhYmlsaXR5LnB1c2goZWxlbWVudFsxNV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5maWxlTmFtZS5zdWJzdHIoLTUpICE9PSAnLnhsc3gnKSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIGZpbGUgZm9yIFJpc2sgQ2F0ZWdvcnk6JyArXHJcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5jYXRlZ29yeV9uYW1lICtcclxuICAgICAgICAgICAgJyBSRVRSWSc7XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnJpc2tCdWxrVXBsb2FkLmhlYWRlclswXSAhPT1cclxuICAgICAgICAgICdXaGF0IHJpc2sgd291bGQgeW91IGxpa2UgdG8gbWFuYWdlPyonXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIGZpbGUgZm9yIFJpc2sgQ2F0ZWdvcnk6JyArXHJcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5jYXRlZ29yeV9uYW1lICtcclxuICAgICAgICAgICAgJyBSRVRSWSc7XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2UoNyk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdE93bmVyID0gdGhpcy50ZW1wbGF0ZUluZm8/Lm93bmVyTGlzdD8uZmluZEluZGV4KFxyXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCA9PSB0aGlzLm1lbWJlcklkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZGVmYXVsdE93bmVyICE9IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRPd25lciA9IHRoaXMudGVtcGxhdGVJbmZvLm93bmVyTGlzdFtkZWZhdWx0T3duZXJdLm5hbWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgZmlsZSBmb3IgUmlzayBDYXRlZ29yeTonICtcclxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5LmNhdGVnb3J5X25hbWUgK1xyXG4gICAgICAgICAgICAnIFJFVFJZJztcclxuICAgICAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5tZW1iZXJfb2JqX2lkICE9IHRoaXMudGVtcGxhdGVJbmZvLm1lbWJlcklkIHx8XHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5LnNlbGVjdGVkQ2F0ZWdvcnkuX2lkICE9IHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5SWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgZmlsZSBmb3IgUmlzayBDYXRlZ29yeTonICtcclxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5LmNhdGVnb3J5X25hbWUgK1xyXG4gICAgICAgICAgICAnIFJFVFJZJztcclxuXHJcbiAgICAgICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlzRW1wdHkgPSB0aGlzLmNoZWNrRW1wdHlGaWxlKCk7XHJcbiAgICAgICAgaWYgKGlzRW1wdHkpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgJ1lvdSBoYXZlIHVwbG9hZGVkIGEgYmxhbmsgdGVtcGxhdGUuIFBsZWFzZSBhZGQgZGV0YWlscyBmb3IgYWxsIG1hbmRhdG9yeSBmaWVsZHMuIFJFVFJZJztcclxuICAgICAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkLmhlYWRlcls2XSA9PT0gJ1Jpc2sgQXNzZXNzbWVudCBEZWFkbGluZSonKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXNzbWVudERlYWRMaW5lID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXNzbWVudERlYWRMaW5lID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZmlsZVZhbHVlID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJpc2tEYXRhID0gdGhpcy5kYXRhLmZpbHRlcihcclxuICAgICAgICAgIChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5sZW5ndGggPiAwXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmlza0RhdGEuZm9yRWFjaCgocmlzazogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyBjb25zdCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgIC8vICAgcmlza05hbWU6IHJpc2tbMF0gPz8gJycsXHJcbiAgICAgICAgICAvLyAgIGRlc2NyaXB0aW9uOiByaXNrWzFdID8/ICcnLFxyXG4gICAgICAgICAgLy8gICByY05hbWU6IHJpc2tbMl0gPz8gJycsXHJcbiAgICAgICAgICAvLyAgIG93bmVyOiByaXNrWzNdID8/ICcnLFxyXG4gICAgICAgICAgLy8gICBtaXRpZ2F0aW9uUHJpb3JpdHk6IHJpc2tbNF0gPz8gJycsXHJcbiAgICAgICAgICAvLyAgIG92ZXJzZWVyOiByaXNrWzVdID8/ICcnLFxyXG4gICAgICAgICAgLy8gICBpc1ZhbGlkOiB0aGlzLmNoZWNrVmFsaWRpdHkocmlzayksXHJcbiAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuYXNzZXNzbWVudERlYWRMaW5lKSB7XHJcbiAgICAgICAgICAvLyAgIG9iai5hc3Nlc3NtZW50RGVhZExpbmUgPSByaXNrWzZdID8/ICcnO1xyXG4gICAgICAgICAgLy8gICBvYmoubGlrZWxpaG9vZCA9IHJpc2tbN10gPz8gJyc7XHJcbiAgICAgICAgICAvLyAgIG9iai5pbXBhY3QgPSByaXNrWzhdID8/ICcnO1xyXG4gICAgICAgICAgLy8gICBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZC53ZWlnaHRGYWN0b3JzLmxlbmd0aCA9PSAzKSB7XHJcbiAgICAgICAgICAvLyAgICAgb2JqLnZlbG9jaXR5ID0gcmlza1s5XSA/PyAnJztcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gICBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZC53ZWlnaHRGYWN0b3JzLmxlbmd0aCA9PSA0KSB7XHJcbiAgICAgICAgICAvLyAgICAgb2JqLnZlbG9jaXR5ID0gcmlza1s5XSA/PyAnJztcclxuICAgICAgICAgIC8vICAgICBvYmoudnVsbmVyYWJpbGl0eSA9IHJpc2tbMTBdID8/ICcnO1xyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyAgIGNvbnN0IGN1c3RvbVRhZ3M6IGFueSA9IFtdO1xyXG5cclxuICAgICAgICAgIC8vICAgdGhpcy5jYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5LmN1c3RvbV90YWcuZm9yRWFjaCgodGFnOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICBpZiAodGFnKSB7XHJcbiAgICAgICAgICAvLyAgICAgICBjb25zdCBjVGFnID0ge1xyXG4gICAgICAgICAgLy8gICAgICAgICBjdXN0b21fdGFnX3ZhbHVlOiByaXNrWzcgKyB0aGlzLnJpc2tCdWxrVXBsb2FkLndlaWdodEZhY3RvcnMubGVuZ3RoICsgaW5kZXhdID8/ICcnLFxyXG4gICAgICAgICAgLy8gICAgICAgICBjdXN0b21fdGFnX25hbWU6IHRhZy50YWdOYW1lXHJcbiAgICAgICAgICAvLyAgICAgICB9O1xyXG4gICAgICAgICAgLy8gICAgICAgY3VzdG9tVGFncy5wdXNoKGNUYWcpO1xyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAvLyAgIG9iai5jdXN0b21UYWcgPSBjdXN0b21UYWdzO1xyXG4gICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgb2JqLmxpa2VsaWhvb2QgPSByaXNrWzZdID8/ICcnO1xyXG4gICAgICAgICAgLy8gICBvYmouaW1wYWN0ID0gcmlza1s3XSA/PyAnJztcclxuXHJcbiAgICAgICAgICAvLyAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkLndlaWdodEZhY3RvcnMubGVuZ3RoID09IDMpIHtcclxuICAgICAgICAgIC8vICAgICBvYmoudmVsb2NpdHkgPSByaXNrWzhdID8/ICcnO1xyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkLndlaWdodEZhY3RvcnMubGVuZ3RoID09IDQpIHtcclxuICAgICAgICAgIC8vICAgICBvYmoudmVsb2NpdHkgPSByaXNrWzhdID8/ICcnO1xyXG4gICAgICAgICAgLy8gICAgIG9iai52dWxuZXJhYmlsaXR5ID0gcmlza1s5XSA/PyAnJztcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gICBjb25zdCBjdXN0b21UYWdzOiBhbnkgPSBbXTtcclxuICAgICAgICAgIC8vICAgdGhpcy5jYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5LmN1c3RvbV90YWcuZm9yRWFjaCgodGFnOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICBpZiAodGFnKSB7XHJcbiAgICAgICAgICAvLyAgICAgICBjb25zdCBjVGFnID0ge1xyXG4gICAgICAgICAgLy8gICAgICAgICBjdXN0b21fdGFnX3ZhbHVlOiByaXNrWzYgKyB0aGlzLnJpc2tCdWxrVXBsb2FkLndlaWdodEZhY3RvcnMubGVuZ3RoICsgaW5kZXhdID8/ICcnLFxyXG4gICAgICAgICAgLy8gICAgICAgICBjdXN0b21fdGFnX25hbWU6IHRhZy50YWdOYW1lXHJcbiAgICAgICAgICAvLyAgICAgICB9O1xyXG4gICAgICAgICAgLy8gICAgICAgY3VzdG9tVGFncy5wdXNoKGNUYWcpO1xyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAvLyAgIG9iai5jdXN0b21UYWcgPSBjdXN0b21UYWdzO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgbGV0IG9iaiA9IHRoaXMuc2V0Umlza0RldGFpbHMocmlzayk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG9iaj8ubGlrZWxpaG9vZCAmJlxyXG4gICAgICAgICAgICAhdGhpcy50ZW1wbGF0ZUluZm8/Lmxpa2VsaWhvb2QuaW5jbHVkZXMob2JqPy5saWtlbGlob29kKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIG9iai5pc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob2JqPy5pbXBhY3QgJiYgIXRoaXMudGVtcGxhdGVJbmZvPy5pbXBhY3QuaW5jbHVkZXMob2JqPy5pbXBhY3QpKSB7XHJcbiAgICAgICAgICAgIG9iai5pc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG9iaj8udmVsb2NpdHkgJiZcclxuICAgICAgICAgICAgIXRoaXMudGVtcGxhdGVJbmZvPy52ZWxvY2l0eS5pbmNsdWRlcyhvYmo/LnZlbG9jaXR5KVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIG9iai5pc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG9iaj8udnVsbmVyYWJpbGl0eSAmJlxyXG4gICAgICAgICAgICAhdGhpcy50ZW1wbGF0ZUluZm8/LnZ1bG5lcmFiaWxpdHkuaW5jbHVkZXMob2JqPy52dWxuZXJhYmlsaXR5KVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIG9iai5pc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5yaXNrQnVsa1VwbG9hZC5yaXNrcy5wdXNoKG9iaik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IHRydWU7XHJcbiAgICAgIH07XHJcbiAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcodGFyZ2V0Py5maWxlc1swXSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja0VtcHR5RmlsZSgpIHtcclxuICAgIGxldCBpc0VtcHR5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5sZW5ndGggPiAwKTtcclxuICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoIDwgMSkge1xyXG4gICAgICBpc0VtcHR5ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc0VtcHR5O1xyXG4gIH1cclxuXHJcbiAgY2hlY2tWYWxpZGl0eShyaXNrOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlID0gLyZuYnNwO3w8YnI+L2c7XHJcbiAgICBsZXQgdHJpbW1lZE5hbWUgPSByaXNrWzBdID8gcmlza1swXS50b1N0cmluZygpLnJlcGxhY2UocmUsICcnKS50cmltKCkgOiAnJztcclxuICAgIHRyaW1tZWROYW1lID0gdHJpbW1lZE5hbWUucmVwbGFjZSgvICArL2csICcgJyk7XHJcbiAgICAvLyB8fCAodGhpcy5hc3Nlc3NtZW50RGVhZExpbmUgJiYgKCFyaXNrWzZdKSlcclxuICAgIGlmIChcclxuICAgICAgIXRyaW1tZWROYW1lIHx8XHJcbiAgICAgIChyaXNrWzNdICYmIHJpc2tbM10gPT0gcmlza1s2XSkgfHxcclxuICAgICAgKCFyaXNrWzNdICYmIHRoaXMuZGVmYXVsdE93bmVyID09IHJpc2tbNl0pIHx8XHJcbiAgICAgICFyaXNrWzJdIHx8XHJcbiAgICAgICF0aGlzLmZyZXF1ZW5jeVR5cGU/LmluY2x1ZGVzKHJpc2tbNF0/LnRvTG93ZXJDYXNlKCkpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFRlbXBsYXRlKCkge1xyXG4gICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BRElORyc7XHJcbiAgICB0aGlzLmRvd25sb2FkUGVyY2VudCA9IDA7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpO1xyXG4gICAgY29uc3QgZG93bmxvYWREYXRlID0gdG9kYXlbMF07XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9XHJcbiAgICAgICdWQ29tcGx5IC0gUmlzayBNb2R1bGUgLSBBZGQgTXVsdGlwbGUgUmlza3MgLSAnICtcclxuICAgICAgdGhpcy5jYXRlZ29yeT8uc2VsZWN0ZWRDYXRlZ29yeT8uY2F0ZWdvcnlfbmFtZSArXHJcbiAgICAgICcgLSAnICtcclxuICAgICAgZG93bmxvYWREYXRlICtcclxuICAgICAgJy54bHN4JztcclxuXHJcbiAgICB0aGlzLnJpc2tTZXJ2aWNlXHJcbiAgICAgIC5kb3dubG9hZFRlbXBsYXRlKHRoaXMuY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5faWQpXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEubG9hZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG93bmxvYWRQZXJjZW50ID0gMTAwICogKGRhdGEubG9hZGVkIC8gZGF0YS50b3RhbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZGF0YS5ib2R5KSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSB0aGlzLnJpc2tTZXJ2aWNlLmRvd25Mb2FkRmlsZShcclxuICAgICAgICAgICAgICAgIGRhdGEuYm9keSxcclxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94bHN4JyxcclxuICAgICAgICAgICAgICAgIGZpbGVOYW1lXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSwgMTUwMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BREVEJztcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRSaXNrQnVsa1VwbG9hZChjb21wbGV0ZUFzc2Vzc21lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0gW107XHJcbiAgICB0aGlzLnJpc2tCdWxrVXBsb2FkLnJpc2tzLmZvckVhY2goKHJpc2s6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgZnJlcXVlbmN5VmFsdWUgPSAnJztcclxuICAgICAgaWYgKHJpc2s/LmZyZXF1ZW5jeS50b0xvd2VyQ2FzZSgpID09PSAnb25lIHRpbWUnKSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMSk7XHJcbiAgICAgICAgZnJlcXVlbmN5VmFsdWUgPVxyXG4gICAgICAgICAgJzB+JyArXHJcbiAgICAgICAgICAnJyArXHJcbiAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCkgK1xyXG4gICAgICAgICAgJ34nICtcclxuICAgICAgICAgIChkYXRlLmdldE1vbnRoKCkgKyAxKSArXHJcbiAgICAgICAgICAnficgK1xyXG4gICAgICAgICAgZGF0ZS5nZXREYXRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZnJlcXVlbmN5VmFsdWUgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2Uuc2hvcnRIYW5kX2ZyZXFDYWwoXHJcbiAgICAgICAgICByaXNrPy5mcmVxdWVuY3lcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmlzay5pc1ZhbGlkKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgdGl0bGU6IHJpc2s/LnJpc2tOYW1lLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IHJpc2s/LmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgY2F0ZWdvcnlfY3VzdG9tX3RhZzogcmlzaz8uY3VzdG9tVGFnLFxyXG4gICAgICAgICAgYXNzZXNzbWVudF9kZWFkbGluZV9lbmFibGU6XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NJbmZvPy5hc3Nlc3NtZW50X2RlYWRsaW5lX2VuYWJsZSxcclxuICAgICAgICAgIG93bmVyOiByaXNrPy5vd25lclxyXG4gICAgICAgICAgICA/IHRoaXMucmV0dXJuSWRzKHJpc2s/Lm93bmVyLCAnb3duZXInKVxyXG4gICAgICAgICAgICA6IHRoaXMucmV0dXJuSWRzKHRoaXMuZGVmYXVsdE93bmVyLCAnb3duZXInKSxcclxuICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLmNhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeV9pZFxyXG4gICAgICAgICAgICA/IFt0aGlzLmNhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeV9pZF1cclxuICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgIG1hbmFnZV9vdmVyc2lnaHQ6IHRoaXMucmV0dXJuSWRzKHJpc2s/Lm92ZXJzZWVyLCAnb3ZlcnNlZXInKSxcclxuICAgICAgICAgIHJjX2lkOiB0aGlzLnJldHVybklkcyhyaXNrPy5yY05hbWUsICdyY19pZCcpLFxyXG4gICAgICAgICAgaGVhZF9pZHM6IHRoaXMucmV0dXJuSWRzKHJpc2s/LnJjTmFtZSwgJ3JjX293bmVyX2lkcycpLCAvLzIgdG8gYmUgYXJheVxyXG4gICAgICAgICAgcmF0aW5nX2FycjogW1xyXG4gICAgICAgICAgICByaXNrPy5saWtlbGlob29kID8gcmlzaz8ubGlrZWxpaG9vZC5zcGxpdCgnIC0gJylbMV0gOiAwLFxyXG4gICAgICAgICAgICByaXNrPy5pbXBhY3QgPyByaXNrPy5pbXBhY3Quc3BsaXQoJyAtICcpWzFdIDogMCxcclxuICAgICAgICAgICAgcmlzaz8udmVsb2NpdHkgPyByaXNrPy52ZWxvY2l0eS5zcGxpdCgnIC0gJylbMV0gOiAwLFxyXG4gICAgICAgICAgICByaXNrPy52dWxuZXJhYmlsaXR5ID8gcmlzaz8udnVsbmVyYWJpbGl0eS5zcGxpdCgnIC0gJylbMV0gOiAwLFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIG1lbWJlcl9pZDogdGhpcy5tZW1iZXJJZCxcclxuICAgICAgICAgIG9yZ2FuaXNhdGlvbl9pZDogdGhpcy5vcmdhbml6YXRpb25JZCxcclxuICAgICAgICAgIHJpc2tfcHJvZ3Jlc3NfZmxhZzogMSxcclxuICAgICAgICAgIElmQXNzZXNzbWVudERvbmU6IDAsXHJcbiAgICAgICAgICB3b3Jrc2hvcF9pZDogJycsXHJcbiAgICAgICAgICBjb21wbGV0ZV9hc3Nlc3NtZW50OiBjb21wbGV0ZUFzc2Vzc21lbnQgPyAxIDogMCxcclxuICAgICAgICAgIG1pdGlnYXRpb246IHRoaXMucmV0dXJuSWRzKHJpc2s/Lm1pdGlnYXRpb25Qcmlvcml0eSwgJ21pdGlnYXRpb24nKSwgLy8zIHdyb25nXHJcbiAgICAgICAgICB3ZWlnaHRhZ2VfZW5hYmxlOiB0aGlzLnNldHRpbmdzSW5mbz8ud2VpZ2h0YWdlX2VuYWJsZSxcclxuICAgICAgICAgIHRyZWF0bWVudF90eXBlOiB0aGlzLnNldHRpbmdzSW5mbz8udHJlYXRtZW50X2NyaXRlcmlhLFxyXG4gICAgICAgICAgd2VpZ2h0YWdlX2RldGFpbHM6IHRoaXMuc2V0dGluZ3NJbmZvPy53ZWlnaHRhZ2VfZGV0YWlscyxcclxuICAgICAgICAgIHdlaWdodGFnZV9zZXRfYnk6IHRoaXMuc2V0dGluZ3NJbmZvPy53ZWlnaHRhZ2Vfc2V0X2J5LFxyXG4gICAgICAgICAgd2VpZ2h0YWdlX3N0cjogW1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzSW5mbz8ud2VpZ2h0YWdlX2RldGFpbHM/LmltcGFjdC52YWx1ZSxcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0luZm8/LndlaWdodGFnZV9kZXRhaWxzPy5saWtlbGlob29kLnZhbHVlLFxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzSW5mbz8ud2VpZ2h0YWdlX2RldGFpbHM/LnZlbG9jaXR5LnZhbHVlLFxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzSW5mbz8ud2VpZ2h0YWdlX2RldGFpbHM/LnZ1bG5lcmFiaWxpdHkudmFsdWUsXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgLy8gYXNzZXNzbWVudF9kZWFkbGluZV9zZXRfYnk6IHRoaXMuc2V0dGluZ3NJbmZvPy5hc3Nlc3NtZW50X2RlYWRsaW5lX3NldF9ieSwgLy9jaGVjazEgbm90IGFwcGVhcmluZ1xyXG4gICAgICAgICAgYXNzZXNzbWVudF9kZWFkbGluZV9zZXRfYnk6XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NJbmZvPy5hc3Nlc3NtZW50X2RlYWRsaW5lX3NldF9ieSA/PyB0aGlzLm1lbWJlcklkLCAvL2NoZWNrMSBub3QgYXBwZWFyaW5nXHJcbiAgICAgICAgICBhc3Nlc3NtZW50X2RlYWRsaW5lX2RheXM6IHRoaXMuc2V0dGluZ3NJbmZvXHJcbiAgICAgICAgICAgID8uYXNzZXNzbWVudF9kZWFkbGluZV9lbmFibGVcclxuICAgICAgICAgICAgPyB0aGlzLnNldHRpbmdzSW5mbz8uYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzXHJcbiAgICAgICAgICAgIDogcmlzaz8uYXNzZXNzbWVudERlYWRMaW5lLFxyXG4gICAgICAgICAgZnJlcXVlbmN5X2RldGFpbHM6IHtcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiBmcmVxdWVuY3lWYWx1ZSxcclxuICAgICAgICAgICAgc3RhcnRlZF9hdDpcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZVRpbWVab25lKG5ldyBEYXRlKCkpID8/IG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3lfdGltZTogJzExOjAwIHBtJyxcclxuICAgICAgICAgICAgcmVtaW5kX2JlZm9yZV9kYXlzOiByaXNrPy5lbWFpbFJlbWluZGVyXHJcbiAgICAgICAgICAgICAgPyByaXNrPy5lbWFpbFJlbWluZGVyXHJcbiAgICAgICAgICAgICAgOiB0aGlzLnNldERlZmF1bHRFbWFpbFJlbWluZGVyVmFsdWUocmlzaz8uZnJlcXVlbmN5KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICByaXNrX2xhYmVsOiB0aGlzLnNldFJpc2tMYWJlbChyaXNrPy5yaXNrTGFiZWwpLFxyXG4gICAgICAgICAgbWl0aWdhdGlvbl9wbGFuX3JlY29tbWVuZGF0aW9uOiByaXNrPy5taXRpZ2F0aW9uUGxhbnMgPz8gJycsXHJcbiAgICAgICAgICBzYW1lUmlza1JhdGluZ3NGb3JBbGxSQzogcmlzaz8uYXBwbHlTYW1lUmlza1JhdGluZyA/PyAnTm8nLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcGF5bG9hZC5wdXNoKG9iaik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2coJ3BheWxvYWRwYXlsb2FkcGF5bG9hZHBheWxvYWRwYXlsb2FkcGF5bG9hZCAgPT09PT4nLCBwYXlsb2FkKTtcclxuXHJcbiAgICB0aGlzLnJpc2tTZXJ2aWNlLmFkZEJ1bGtSaXNrKHBheWxvYWQpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yaXNrRGF0YSA9IHJlcztcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICAgICdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLFxyXG4gICAgICAgICAgJ2FsZXJ0J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm5JZHMoaXRlbTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSAncmNfaWQnOlxyXG4gICAgICAgIGNvbnN0IHJjSWQ6IGFueSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJjTGlzdC5mb3JFYWNoKChyY19lbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyY19lbGVtZW50LnJjTmFtZSA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIHJjSWQucHVzaChyY19lbGVtZW50LnJjX2lkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmNJZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmNfb3duZXJfaWRzJzpcclxuICAgICAgICBsZXQgb3duZXJfaWRzOiBhbnkgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QuZm9yRWFjaCgoaGVhZGVySWRzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChoZWFkZXJJZHMucmNOYW1lID09IGl0ZW0gJiYgaGVhZGVySWRzLm93bmVyX2lkcykge1xyXG4gICAgICAgICAgICBvd25lcl9pZHMgPSBoZWFkZXJJZHMub3duZXJfaWRzLmluY2x1ZGVzKCcsJylcclxuICAgICAgICAgICAgICA/IGhlYWRlcklkcy5vd25lcl9pZHMuc3BsaXQoJywnKS5tYXAoTnVtYmVyKVxyXG4gICAgICAgICAgICAgIDogW051bWJlcihoZWFkZXJJZHMub3duZXJfaWRzKV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG93bmVyX2lkcztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb3duZXInOlxyXG4gICAgICAgIGNvbnN0IG93bmVySWQ6IGFueSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm93bmVyTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBvd25lcklkLnB1c2goZWxlbWVudC5tZW1iZXJfaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBvd25lcklkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvdmVyc2Vlcic6XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJJZDogYW55ID0gW107XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ub3duZXJMaXN0LmZvckVhY2goKG9zX2VsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG9zX2VsZW1lbnQubmFtZSA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIG92ZXJzZWVySWQucHVzaChvc19lbGVtZW50Lm1lbWJlcl9pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG92ZXJzZWVySWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdtaXRpZ2F0aW9uJzpcclxuICAgICAgICBsZXQgbWl0aWdhdGlvbklkOiBhbnkgPSAwO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm1pdGlnYXRpb25MaXN0LmZvckVhY2goKG1pdGlnYXRpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG1pdGlnYXRpb24ubWl0aWdhdGlvbk5hbWUgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBtaXRpZ2F0aW9uSWQgPSBtaXRpZ2F0aW9uLm1pdGlnYXRpb25faWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1pdGlnYXRpb25JZDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5yaXNrQnVsa1VwbG9hZCA9IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgd2VpZ2h0RmFjdG9yczogW10sXHJcbiAgICAgIHJpc2tzOiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XHJcbiAgICAgIG1lbWJlcklkOiAnJyxcclxuICAgICAgY2F0ZWdvcnlJZDogJycsXHJcbiAgICAgIG93bmVyTGlzdDogW10sXHJcbiAgICAgIHJjTGlzdDogW10sXHJcbiAgICAgIG1pdGlnYXRpb25MaXN0OiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpbGVOYW1lID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5kYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50RGVhZExpbmUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgfVxyXG4gIGFjdGlvbihldmVudDogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XHJcbiAgICAgIGNhc2UgJ2FkZE1vcmUnOlxyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnkgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnc3RyYXRlZ2ljJyxcclxuICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6ICcnLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdOT1RfRE9XTkxPQURJTkcnO1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndmlld1Jpc2tzJzpcclxuICAgICAgICB0aGlzLnZpZXdSaXNrcygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VTbWlsZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7IGV2dDogdGhpcy5yaXNrRGF0YSwgY29uZmlybTogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICB2aWV3Umlza3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCArPSAnL3Jpc2stcmVnaXN0ZXInO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsICs9ICcvcmlzay9yaXNrLXJlZ2lzdGVyJztcclxuICAgIH1cclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgYXJyYXkgdmFsdWVzIGFzIHByb3BlcnRpZXMuXHJcbiAgICogPC9jb2RlPlxyXG4gICAqIEBwYXJhbSB7YW55fSByaXNrIC0gYW55ID0gW1xyXG4gICAqIEByZXR1cm5zIFtcclxuICAgKiAgIHtcclxuICAgKiAgICAgXCJyaXNrTmFtZVwiOiBcIlwiLFxyXG4gICAqICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICogICAgIFwicmNOYW1lXCI6IFwiXCIsXHJcbiAgICogICAgIFwib3duZXJcIjogXCJcIixcclxuICAgKiAgICAgXCJmcmVxdWVuY3lcIjogXCJcIixcclxuICAgKiAgICAgXCJlbWFpbFJlbWluZGVyXCI6IFwiXCIsXHJcbiAgICogICAgIFwib3ZlcnNlZXJcIjogXCJcIixcclxuICAgKiAgICAgXCJpc1ZhbGlkXCI6IGZhbHNlLFxyXG4gICAqICAgICBcIm1pdGlnYXRpb25Qcmlvcml0eVwiOiBcIlwiLFxyXG4gICAqL1xyXG4gIHNldFJpc2tEZXRhaWxzKHJpc2s6IGFueSkge1xyXG4gICAgbGV0IG9iajogYW55O1xyXG4gICAgb2JqID0ge1xyXG4gICAgICByaXNrTmFtZTogcmlza1swXSA/PyAnJyxcclxuICAgICAgZGVzY3JpcHRpb246IHJpc2tbMV0gPz8gJycsXHJcbiAgICAgIHJjTmFtZTogcmlza1syXSA/PyAnJyxcclxuICAgICAgb3duZXI6IHJpc2tbM10gPz8gJycsXHJcbiAgICAgIGZyZXF1ZW5jeTogcmlza1s0XSA/PyAnJyxcclxuICAgICAgZW1haWxSZW1pbmRlcjogcmlza1s1XSxcclxuICAgICAgb3ZlcnNlZXI6IHJpc2tbNl0gPz8gJycsXHJcbiAgICAgIGlzVmFsaWQ6IHRoaXMuY2hlY2tWYWxpZGl0eShyaXNrKSxcclxuICAgIH07XHJcbiAgICBsZXQgaW5kZXggPSA3O1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnJpc2tCdWxrVXBsb2FkPy5oZWFkZXI/LmluY2x1ZGVzKCdSZWNvbW1lbmRlZCBNaXRpZ2F0aW9uIFByaW9yaXR5JylcclxuICAgICkge1xyXG4gICAgICBvYmpbJ21pdGlnYXRpb25Qcmlvcml0eSddID0gcmlza1tpbmRleF0gPz8gJyc7XHJcbiAgICAgIGluZGV4Kys7XHJcbiAgICB9XHJcbiAgICBvYmpbJ21pdGlnYXRpb25QbGFucyddID0gcmlza1tpbmRleF0gPz8gJyc7XHJcbiAgICBpbmRleCsrO1xyXG4gICAgb2JqWydyaXNrTGFiZWwnXSA9IHJpc2tbaW5kZXhdID8/ICcnO1xyXG4gICAgaW5kZXgrKztcclxuICAgIG9ialsnbGlrZWxpaG9vZCddID0gcmlza1tpbmRleF0gPz8gJyc7XHJcbiAgICBpbmRleCsrO1xyXG4gICAgb2JqWydpbXBhY3QnXSA9IHJpc2tbaW5kZXhdID8/ICcnO1xyXG4gICAgaW5kZXgrKztcclxuICAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkPy53ZWlnaHRGYWN0b3JzPy5pbmNsdWRlcygnVmVsb2NpdHknKSkge1xyXG4gICAgICBvYmpbJ3ZlbG9jaXR5J10gPSByaXNrW2luZGV4XSA/PyAnJztcclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkPy53ZWlnaHRGYWN0b3JzPy5pbmNsdWRlcygnVnVsbmVyYWJpbGl0eScpKSB7XHJcbiAgICAgIG9ialsndnVsbmVyYWJpbGl0eSddID0gcmlza1tpbmRleF0gPz8gJyc7XHJcbiAgICAgIGluZGV4Kys7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucmlza0J1bGtVcGxvYWQ/LmhlYWRlcj8uaW5jbHVkZXMoXHJcbiAgICAgICAgJ0RvIHlvdSB3YW50IHRvIGFwcGx5IHRoZSBzYW1lIHJpc2sgcmF0aW5ncyBmb3IgYWxsIFJlc3BvbnNpYmlsaXR5IENlbnRlcnM/J1xyXG4gICAgICApXHJcbiAgICApIHtcclxuICAgICAgb2JqWydhcHBseVNhbWVSaXNrUmF0aW5nJ10gPSByaXNrW2luZGV4XSA/PyAnJztcclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuICAgIGNvbnN0IGN1c3RvbVRhZ3M6IGFueSA9IFtdO1xyXG4gICAgdGhpcy5jYXRlZ29yeT8uc2VsZWN0ZWRDYXRlZ29yeT8uY3VzdG9tX3RhZz8uZm9yRWFjaCgodGFnOiBhbnksIGk6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGFnKSB7XHJcbiAgICAgICAgY29uc3QgY1RhZyA9IHtcclxuICAgICAgICAgIGN1c3RvbV90YWdfdmFsdWU6IHJpc2tbaW5kZXggKyBpXSA/PyAnJyxcclxuICAgICAgICAgIGN1c3RvbV90YWdfbmFtZTogdGFnLnRhZ05hbWUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjdXN0b21UYWdzLnB1c2goY1RhZyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgb2JqWydjdXN0b21UYWcnXSA9IGN1c3RvbVRhZ3M7XHJcbiAgICBvYmpbJ2lzVmFsaWRGcmVxdWVuY3knXSA9IHRoaXMuZnJlcXVlbmN5VHlwZT8uaW5jbHVkZXMoXHJcbiAgICAgIG9iaj8uZnJlcXVlbmN5Py50b0xvd2VyQ2FzZSgpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBmcmVxdWVuY3lUeXBlIGlzIHdlZWtseSwgcmV0dXJuIDIsIGlmIGl0J3MgbW9udGhseSwgcmV0dXJuIDcsIGlmIGl0J3MgcXVhcnRlcmx5LCByZXR1cm4gNyxcclxuICAgKiBpZiBpdCdzIGJpYW5udWFsLCByZXR1cm4gMzAsIGlmIGl0J3MgYW5udWFsLCByZXR1cm4gMzAsIGlmIGl0J3Mgb25lIHRpbWUsIHJldHVybiAxNSwgb3RoZXJ3aXNlXHJcbiAgICogcmV0dXJuIDAuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmcmVxdWVuY3lUeXBlXSAtIHN0cmluZyAtIHRoZSBmcmVxdWVuY3kgdHlwZSBvZiB0aGUgcmVtaW5kZXJcclxuICAgKiBAcmV0dXJucyBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgZGF5cyBiZWZvcmUgdGhlIGV2ZW50IHRoYXQgdGhlIHJlbWluZGVyIHNob3VsZCBiZSBzZW50LlxyXG4gICAqL1xyXG4gIHNldERlZmF1bHRFbWFpbFJlbWluZGVyVmFsdWUoZnJlcXVlbmN5VHlwZT86IHN0cmluZyk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKGZyZXF1ZW5jeVR5cGU/LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSAnd2Vla2x5JzpcclxuICAgICAgICByZXR1cm4gMjtcclxuICAgICAgY2FzZSAnbW9udGhseSc6XHJcbiAgICAgICAgcmV0dXJuIDc7XHJcbiAgICAgIGNhc2UgJ3F1YXJ0ZXJseSc6XHJcbiAgICAgICAgcmV0dXJuIDc7XHJcbiAgICAgIGNhc2UgJ2JpYW5udWFsJzpcclxuICAgICAgICByZXR1cm4gMzA7XHJcbiAgICAgIGNhc2UgJ2FubnVhbCc6XHJcbiAgICAgICAgcmV0dXJuIDMwO1xyXG4gICAgICBjYXNlICdvbmUgdGltZSc6XHJcbiAgICAgICAgcmV0dXJuIDE1O1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGxhYmVsIGlzICduZXcgcmlzaycsIHJldHVybiAxLCBpZiB0aGUgbGFiZWwgaXMgJ2VtZXJnaW5nL3JhcGlkbHkgY2hhbmdpbmcgcmlza3MnLCByZXR1cm4gMixcclxuICAgKiBvdGhlcndpc2UgcmV0dXJuIDFcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xhYmVsXSAtIHRoZSBsYWJlbCBvZiB0aGUgcmlza1xyXG4gICAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IGV4cHJlc3Npb24gaW4gdGhlIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIHNldFJpc2tMYWJlbChsYWJlbD86IHN0cmluZykge1xyXG4gICAgc3dpdGNoIChsYWJlbD8udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICBjYXNlICduZXdseSBpZGVudGlmaWVkIHJpc2tzJzpcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgY2FzZSAncmFwaWRseSBjaGFuZ2luZyByaXNrcyc6XHJcbiAgICAgICAgcmV0dXJuIDI7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcIklmIHRoZSBkYXRlIGlzIGEgbnVtYmVyLCBjb252ZXJ0IGl0IHRvIGEgZGF0ZSBvYmplY3QsIHRoZW4gY3JlYXRlIGEgbmV3IGRhdGUgb2JqZWN0IHdpdGggdGhlXHJcbiAgICogdGltZXpvbmUgc2V0IHRvIHRoZSB1c2VyJ3MgdGltZXpvbmUsIHRoZW4gcmV0dXJuIHRoZSBkYXRlIGluIHRoZSBmb3JtYXQgWVlZWS1NTS1ERC5cIlxyXG4gICAqIDwvY29kZT5cclxuICAgKiBAcGFyYW0ge2FueX0gZGF0ZSAtIGFueSAtIHRoZSBkYXRlIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgdGltZXpvbmUgb2ZcclxuICAgKiBAcmV0dXJucyBUaGUgZGF0ZSBpcyBiZWluZyByZXR1cm5lZCBpbiB0aGUgdGltZXpvbmUgb2YgdGhlIHVzZXIuXHJcbiAgICovXHJcbiAgY2hhbmdlVGltZVpvbmUoZGF0ZTogYW55KSB7XHJcbiAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludkRhdGUgPSBuZXcgRGF0ZShcclxuICAgICAgZGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgICAgdGltZVpvbmU6IHRoaXMuYXV0aFNlcnZpY2UudXNlckRldGFpbHM/LnRpbWV6b25lLFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHJldHVybiBtb21lbnQoaW52RGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlza1wiPlxyXG4gICAgPCEtLSBtYWluIGNvbnRhaW5lciBzdGFydHMgaGVyZSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlzay1ib2R5XCIgW2NsYXNzLmRpc2FibGVkXT1cInNob3dDYXRlZ29yeUxpc3RcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2stY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvc3ByZWFkc2hlZXQtbXVsdGlwbGUtY2F0ZWdvcnkuc3ZnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8aDQgaWQ9XCJtdWx0aXBsZVJpc2tcIj5Zb3UgY2FuIGFkZCBtdWx0aXBsZSByaXNrIGluIGp1c3QgdGhyZWUgZWFzeSBzdGVwczwvaDQ+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxsaT4gU2VsZWN0IGEgUmlzayBDYXRlZ29yeS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPiBEb3dubG9hZCB0aGUgdGVtcGxhdGUgYW5kIGZpbGwgaW4gdGhlIGRldGFpbHMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT4gVXBsb2FkIHRoZSAueGxzeCBmaWxlIGFuZCB5b3UncmUgZ29vZCB0byBnbyE8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiICBbYXR0ci5pZF09XCInc2Nyb2xsUmVmZXJlbmNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJpc2sgQ2F0ZWdvcnkgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RcIiAqbmdJZj1cIiFjYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cInNob3dDYXRlZ29yeUxpc3Q9dHJ1ZTtwaWNrZXJDaGFuZ2VkLmVtaXQodHJ1ZSlcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBSaXNrIENhdGVnb3J5XCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwiY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZUNhdGVnb3J5KClcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJjYXRlZ29yeT8uc2VsZWN0ZWRDYXRlZ29yeT8uY2F0ZWdvcnlfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e2NhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeV9uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmVDYXRlZ29yeSgpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeV9uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzaG93Q2F0ZWdvcnlMaXN0PXRydWU7cGlja2VyQ2hhbmdlZC5lbWl0KHRydWUpXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXRlZ29yeT8uc2VsZWN0ZWRDYXRlZ29yeVwiID5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ05PVF9ET1dOTE9BRElORydcIiBjbGFzcz1cImRvd25sb2FkXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPiA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxYjs8L2k+IERvd25sb2FkIFRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1wcm9ncmVzc1wiICpuZ0lmPVwiZG93bmxvYWRTdGF0dXMgPT09ICdET1dOTE9BRElORydcIj5cclxuICAgICAgICAgICAgICAgICAgICBEb3dubG9hZCBpbiBQcm9ncmVzc1xyXG4gICAgICAgICAgICAgICAgICAgIDxhcHAtbGluZS1sb2FkZXIgW2xvYWRlckhlaWdodF09XCInMidcIj48L2FwcC1saW5lLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURFRCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tcHJvZ3Jlc3NcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxYzs8L2k+RG93bmxvYWQgQ29tcGxldGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tYWdhaW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSXMgdGhlIGZpbGUgbm90IGRvd25sb2FkZWQ/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPlJldHJ5IERvd25sb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpc1dyb25nRmlsZSB8fCBpc1dyb25nRm9ybWF0fHwgaXNGaWxlRW1wdHlcIlxyXG4gICAgICAgICAgICA+e3tlcnJvck1lc3NhZ2V9fTwvcD5cclxuXHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48YXBwLWNhdGVnb3J5LWxpc3QgKm5nSWY9XCJzaG93Q2F0ZWdvcnlMaXN0XCIgW2NhdGVnb3J5TGlzdF09XCJjYXRlZ29yeUxpc3RcIiBbc2VsZWN0ZWRDYXRlZ29yeV09XCJjYXRlZ29yeVwiXHJcbiAgICAoc2F2ZVNlbGVjdGVkQ2F0ZWdvcnkpPVwic2F2ZVNlbGVjdGVkQ2F0ZWdvcnkoJGV2ZW50KTtwaWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpXCIgKGNsb3NlQ2F0ZWdvcmllc0xpc3QpPVwic2hvd0NhdGVnb3J5TGlzdD1mYWxzZTtwaWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpXCI+XHJcbjwvYXBwLWNhdGVnb3J5LWxpc3Q+XHJcbjxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cImlzTG9hZGVyXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cclxuPGFwcC1idWxrLXZpZXcgKm5nSWY9XCJzaG93RXhjZWxcIlxyXG5bcmlza0J1bGtVcGxvYWRdPVwicmlza0J1bGtVcGxvYWRcIlxyXG5bdGVtcGxhdGVJbmZvXT1cInRlbXBsYXRlSW5mb1wiXHJcbltkZWZhdWx0T3duZXJdPVwiZGVmYXVsdE93bmVyXCJcclxuW2ZpbGVOYW1lXT1cImZpbGVOYW1lXCJcclxuW2xvYWRlcl09XCJsb2FkZXJcIlxyXG5bYXNzZXNzbWVudERheXNFbmFibGVdPVwiYXNzZXNzbWVudERlYWRMaW5lXCJcclxuKHN1Ym1pdFJpc2tCdWxrVXBsb2FkKT1cInN1Ym1pdFJpc2tCdWxrVXBsb2FkKCRldmVudClcIlxyXG4oY2FuY2VsKT1cInJlc2V0KClcIlxyXG4+PC9hcHAtYnVsay12aWV3PlxyXG5cclxuPGlucHV0IHR5cGU9XCJmaWxlXCIgWyhuZ01vZGVsKV09XCJmaWxlVmFsdWVcIiBpZD1cImZpbGVJbnB1dFwiIGNsYXNzPVwiaGlkZGVuLWlucHV0XCIgKGNoYW5nZSk9XCJ1cGxvYWRlZEZpbGUoJGV2ZW50KVwiIC8+XHJcbjxhcHAtc21pbGV5LWRpYWxvZy1pbmxpbmUgKm5nSWY9XCJzaG93U21pbGV5XCIgW21lc3NhZ2VdPVwic21pbGV5TWVzc2FnZVwiIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIiAoYWN0aW9uKT1cImFjdGlvbigkZXZlbnQpXCIgKGNsb3NlU21pbGV5KT1cImNsb3NlU21pbGV5KCRldmVudClcIj48L2FwcC1zbWlsZXktZGlhbG9nLWlubGluZT4iXX0=