@qbs-origin/origin-form 0.8.10 → 0.8.12

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 (27) hide show
  1. package/esm2022/lib/form-css.helper.mjs +122 -28
  2. package/esm2022/lib/formly/custom-section-separator.component.mjs +11 -3
  3. package/esm2022/lib/formly/form-section-separator.component.mjs +34 -11
  4. package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +23 -8
  5. package/esm2022/lib/formly/formly-radio/formly-radio-component.mjs +3 -3
  6. package/esm2022/lib/formly/formly-row-spacer.mjs +12 -0
  7. package/esm2022/lib/formly/formly-row-wrapper.mjs +32 -0
  8. package/esm2022/lib/formly/formly-scan-id/formly-scan-id.component.mjs +21 -26
  9. package/esm2022/lib/model-population.helper.mjs +22 -1
  10. package/esm2022/lib/models/flux.model.mjs +1 -1
  11. package/esm2022/lib/models/forms.model.mjs +77 -25
  12. package/esm2022/lib/origin-form.component.mjs +170 -55
  13. package/esm2022/lib/origin-form.module.mjs +11 -1
  14. package/esm2022/lib/services/applicationData.service.mjs +1 -1
  15. package/fesm2022/qbs-origin-origin-form.mjs +518 -151
  16. package/fesm2022/qbs-origin-origin-form.mjs.map +1 -1
  17. package/lib/form-css.helper.d.ts +7 -0
  18. package/lib/formly/form-section-separator.component.d.ts +2 -2
  19. package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +2 -1
  20. package/lib/formly/formly-row-spacer.d.ts +6 -0
  21. package/lib/formly/formly-row-wrapper.d.ts +6 -0
  22. package/lib/models/flux.model.d.ts +4 -0
  23. package/lib/models/forms.model.d.ts +22 -6
  24. package/lib/origin-form.component.d.ts +6 -1
  25. package/lib/origin-form.module.d.ts +64 -62
  26. package/lib/services/applicationData.service.d.ts +1 -1
  27. package/package.json +1 -1
@@ -51,11 +51,10 @@ export class FormlyScanIdComponent extends FieldType {
51
51
  ngOnInit() {
52
52
  const group = this.form;
53
53
  group.addControl(this.props['identifier'], this.control);
54
- this.validFormats = this.props['config'].allowedFormats?.split(',') || [
55
- '.jpg',
56
- '.png',
57
- ];
58
- this.maxFileSizeKB = this.props['config'].maxFileSizeKB || 2000;
54
+ this.validFormats = this.props['config'].fileFormats
55
+ ? this.props['config'].fileFormats.split(',').map((f) => '.' + f.trim().replace(/^[*.]+/, ''))
56
+ : ['.jpg', '.png'];
57
+ this.maxFileSizeKB = this.props['config'].fileMaxSize || 2000;
59
58
  if (this.props['config'].collected) {
60
59
  const controlId = this.props['config'].componentCollected;
61
60
  const value = this.form.get(controlId)?.value ?? this.model?.[controlId];
@@ -383,28 +382,24 @@ export class FormlyScanIdComponent extends FieldType {
383
382
  ],
384
383
  };
385
384
  this.appDataService.scanId(command).subscribe({
386
- next: async (result) => {
387
- console.log('Scan ID result:', result);
385
+ next: async (isValid) => {
386
+ console.log('Scan ID result:', isValid);
388
387
  this.isLoading = false;
388
+ if (!isValid) {
389
+ this.fileError =
390
+ this.props['errorMessages']?.invalidStatus ||
391
+ 'Invalid status response.';
392
+ this.canRetry = true;
393
+ this.control.setErrors({ invalidStatus: true });
394
+ this.cdr.detectChanges();
395
+ return;
396
+ }
389
397
  const appData = await this.appDataService.getSteps(this.props['appDataId']);
390
- if (appData) {
391
- const status = this.extractStatusFromAppData(appData);
392
- console.log('[SCAN-ID] extracted status:', status);
393
- if (status?.toLowerCase().includes('invalid')) {
394
- this.fileError =
395
- this.props['errorMessages']?.invalidStatus ||
396
- 'Invalid status response.';
397
- this.canRetry = true;
398
- this.control.setErrors({ invalidStatus: true });
399
- this.cdr.detectChanges();
400
- return;
401
- }
402
- this.isScanValid = true;
403
- this.successMessage = 'Upload successful!';
404
- this.wizardSteps.forEach((s) => (s.status = 'completed'));
405
- if (this.props['event']) {
406
- this.props['event'](appData);
407
- }
398
+ this.isScanValid = true;
399
+ this.successMessage = 'Upload successful!';
400
+ this.wizardSteps.forEach((s) => (s.status = 'completed'));
401
+ if (this.props['event'] && appData) {
402
+ this.props['event'](appData);
408
403
  }
409
404
  this.cdr.detectChanges();
410
405
  },
@@ -486,4 +481,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
486
481
  type: ViewChild,
487
482
  args: ['videoElement']
488
483
  }] } });
489
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LXNjYW4taWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXNjYW4taWQvZm9ybWx5LXNjYW4taWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXNjYW4taWQvZm9ybWx5LXNjYW4taWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFJVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7QUFnQjdDLE1BQU0sT0FBTyxxQkFDWCxTQUFRLFNBQVM7SUErQ2pCLFlBQ1UsY0FBc0MsRUFDdEMsR0FBc0I7UUFFOUIsS0FBSyxFQUFFLENBQUM7UUFIQSxtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFDdEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE5Q2hDLFlBQU8sR0FBZ0IsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbEUsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFDaEMsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDM0IsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsaUJBQVksR0FBYSxFQUFFLENBQUM7UUFDNUIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDMUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLHNCQUFp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RWxlbWVudFJlZixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbkRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBTY2FuSWREdG8gfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgQXBwRGF0YUZpbGwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybXMubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpemFyZFN0ZXAge1xuICBsYWJlbDogc3RyaW5nO1xuICBzdGF0dXM6ICd1cGNvbWluZycgfCAnYWN0aXZlJyB8ICdjb21wbGV0ZWQnO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZm9ybWx5LXNjYW4taWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LXNjYW4taWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtbHktc2Nhbi1pZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlTY2FuSWRDb21wb25lbnRcbiAgZXh0ZW5kcyBGaWVsZFR5cGVcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBjb250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgZmlsZUVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgZmlsZU5hbWVGcm9udDogc3RyaW5nID0gJyc7XG4gIGZpbGVOYW1lQmFjazogc3RyaW5nID0gJyc7XG4gIHZhbGlkRm9ybWF0czogc3RyaW5nW10gPSBbXTtcbiAgbWF4RmlsZVNpemVLQjogbnVtYmVyID0gMDtcbiAgY2FyZFR5cGVTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBvbGRJZENhcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZnJvbnRQaG90b1VwbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGJhY2tQaG90b1VwbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHBob3RvQmFzZTY0RnJvbnQ6IHN0cmluZyA9ICcnO1xuICBwaG90b0Jhc2U2NEJhY2s6IHN0cmluZyA9ICcnO1xuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpc1NjYW5WYWxpZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gV2l6YXJkIHN0YXRlXG4gIGN1cnJlbnRXaXphcmRTdGVwOiBudW1iZXIgPSAwO1xuICB3aXphcmRTdGVwczogV2l6YXJkU3RlcFtdID0gW107XG5cbiAgLy8gQ2FtZXJhIG1hbmFnZW1lbnRcbiAgY2FtZXJhQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIGF2YWlsYWJsZUNhbWVyYXM6IE1lZGlhRGV2aWNlSW5mb1tdID0gW107XG4gIHNlbGVjdGVkQ2FtZXJhSWQ6IHN0cmluZyA9ICcnO1xuXG4gIC8vIFBob3RvIHByZXZpZXcgKGZ1bGwgZGF0YSBVUkkgZm9yIGltZyBkaXNwbGF5KVxuICBwaG90b1ByZXZpZXdGcm9udDogc3RyaW5nID0gJyc7XG4gIHBob3RvUHJldmlld0JhY2s6IHN0cmluZyA9ICcnO1xuXG4gIC8vIERyYWcgYW5kIGRyb3BcbiAgaXNEcmFnT3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEZsYXNoIGFuaW1hdGlvblxuICBzaG93Rmxhc2g6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBSZXRyeVxuICBjYW5SZXRyeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3ZpZGVvRWxlbWVudCcpIHZpZGVvRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTFZpZGVvRWxlbWVudD47XG4gIHZpZGVvU3RyZWFtOiBNZWRpYVN0cmVhbSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgdmFsdWVDaGFuZ2VzU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwRGF0YVNlcnZpY2U6IEFwcGxpY2F0aW9uRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBncm91cCA9IHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA7XG4gICAgZ3JvdXAuYWRkQ29udHJvbCh0aGlzLnByb3BzWydpZGVudGlmaWVyJ10sIHRoaXMuY29udHJvbCk7XG5cbiAgICB0aGlzLnZhbGlkRm9ybWF0cyA9IHRoaXMucHJvcHNbJ2NvbmZpZyddLmFsbG93ZWRGb3JtYXRzPy5zcGxpdCgnLCcpIHx8IFtcbiAgICAgICcuanBnJyxcbiAgICAgICcucG5nJyxcbiAgICBdO1xuICAgIHRoaXMubWF4RmlsZVNpemVLQiA9IHRoaXMucHJvcHNbJ2NvbmZpZyddLm1heEZpbGVTaXplS0IgfHwgMjAwMDtcblxuICAgIGlmICh0aGlzLnByb3BzWydjb25maWcnXS5jb2xsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xJZCA9IHRoaXMucHJvcHNbJ2NvbmZpZyddLmNvbXBvbmVudENvbGxlY3RlZDtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtLmdldChjb250cm9sSWQpPy52YWx1ZSA/PyB0aGlzLm1vZGVsPy5bY29udHJvbElkXTtcbiAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VzU3ViID0gdGhpcy5mb3JtXG4gICAgICAgIC5nZXQodGhpcy5wcm9wc1snY29uZmlnJ10uY29tcG9uZW50Q29sbGVjdGVkKVxuICAgICAgICA/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQodGhpcy5wcm9wc1snY29uZmlnJ10uY29tcG9uZW50Q29sbGVjdGVkKT8udmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRXaXphcmRTdGVwcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdG9wQ2FtZXJhKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZXNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBnZXQgY3VycmVudFBob3RvUHJldmlldygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRXaXphcmRTdGVwID09PSAxXG4gICAgICA/IHRoaXMucGhvdG9QcmV2aWV3RnJvbnRcbiAgICAgIDogdGhpcy5waG90b1ByZXZpZXdCYWNrO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRTdGVwTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jdXJyZW50V2l6YXJkU3RlcCA9PT0gMSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5wcm9wc1snbGFiZWxzJ10/LnVwbG9hZEZyb250UHJvbXB0IHx8XG4gICAgICAgICdQbGVhc2UgdXBsb2FkIHRoZSBmcm9udCBwaG90byBvZiB5b3VyIElEIGNhcmQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcHNbJ2xhYmVscyddPy51cGxvYWRCYWNrUHJvbXB0IHx8XG4gICAgICAnUGxlYXNlIHVwbG9hZCB0aGUgYmFjayBwaG90byBvZiB5b3VyIElEIGNhcmQuJ1xuICAgICk7XG4gIH1cblxuICBnZXQgY3VycmVudFN0ZXBTaG9ydExhYmVsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY3VycmVudFdpemFyZFN0ZXAgPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzWydsYWJlbHMnXT8uZnJvbnRQaG90b0xhYmVsIHx8ICdGcm9udCBvZiBJRCc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb3BzWydsYWJlbHMnXT8uYmFja1Bob3RvTGFiZWwgfHwgJ0JhY2sgb2YgSUQnO1xuICB9XG5cbiAgLy8gLS0tIFdpemFyZCBTdGVwIE1hbmFnZW1lbnQgLS0tXG5cbiAgcHJpdmF0ZSBpbml0V2l6YXJkU3RlcHMoKSB7XG4gICAgdGhpcy53aXphcmRTdGVwcyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6XG4gICAgICAgICAgdGhpcy5wcm9wc1snbGFiZWxzJ10/LmNhcmRUeXBlU3RlcExhYmVsIHx8ICdTZWxlY3QgQ2FyZCBUeXBlJyxcbiAgICAgICAgc3RhdHVzOiAnYWN0aXZlJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlV2l6YXJkU3RlcHMoKSB7XG4gICAgY29uc3QgZnJvbnRMYWJlbCA9XG4gICAgICB0aGlzLnByb3BzWydsYWJlbHMnXT8uZnJvbnRQaG90b1N0ZXBMYWJlbCB8fCAnRnJvbnQgUGhvdG8nO1xuICAgIGNvbnN0IGJhY2tMYWJlbCA9XG4gICAgICB0aGlzLnByb3BzWydsYWJlbHMnXT8uYmFja1Bob3RvU3RlcExhYmVsIHx8ICdCYWNrIFBob3RvJztcblxuICAgIHRoaXMud2l6YXJkU3RlcHMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOlxuICAgICAgICAgIHRoaXMucHJvcHNbJ2xhYmVscyddPy5jYXJkVHlwZVN0ZXBMYWJlbCB8fCAnU2VsZWN0IENhcmQgVHlwZScsXG4gICAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICB9LFxuICAgICAgeyBsYWJlbDogZnJvbnRMYWJlbCwgc3RhdHVzOiAnYWN0aXZlJyB9LFxuICAgIF07XG4gICAgaWYgKCF0aGlzLm9sZElkQ2FyZCkge1xuICAgICAgdGhpcy53aXphcmRTdGVwcy5wdXNoKHsgbGFiZWw6IGJhY2tMYWJlbCwgc3RhdHVzOiAndXBjb21pbmcnIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBOYXZpZ2F0aW9uIC0tLVxuXG4gIGdvQmFjaygpIHtcbiAgICB0aGlzLmNsb3NlQ2FtZXJhKCk7XG4gICAgaWYgKHRoaXMuY3VycmVudFdpemFyZFN0ZXAgPT09IDIpIHtcbiAgICAgIC8vIEdvIGJhY2sgdG8gZnJvbnQgcGhvdG8gc3RlcCwgcHJlc2VydmUgZnJvbnQgcGhvdG9cbiAgICAgIHRoaXMud2l6YXJkU3RlcHNbMl0uc3RhdHVzID0gJ3VwY29taW5nJztcbiAgICAgIHRoaXMud2l6YXJkU3RlcHNbMV0uc3RhdHVzID0gJ2FjdGl2ZSc7XG4gICAgICB0aGlzLmN1cnJlbnRXaXphcmRTdGVwID0gMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFdpemFyZFN0ZXAgPT09IDEpIHtcbiAgICAgIC8vIEdvIGJhY2sgdG8gY2FyZCB0eXBlIHNlbGVjdGlvbiwgcmVzZXQgZXZlcnl0aGluZ1xuICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgIHRoaXMuY2FyZFR5cGVTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jdXJyZW50V2l6YXJkU3RlcCA9IDA7XG4gICAgICB0aGlzLmluaXRXaXphcmRTdGVwcygpO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnb1RvU3RlcChzdGVwSW5kZXg6IG51bWJlcikge1xuICAgIGlmIChzdGVwSW5kZXggPCB0aGlzLmN1cnJlbnRXaXphcmRTdGVwKSB7XG4gICAgICB3aGlsZSAodGhpcy5jdXJyZW50V2l6YXJkU3RlcCA+IHN0ZXBJbmRleCkge1xuICAgICAgICB0aGlzLmdvQmFjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBDYXJkIFR5cGUgU2VsZWN0aW9uIC0tLVxuXG4gIHNlbGVjdENhcmRUeXBlKGlzT2xkSWRDYXJkOiBib29sZWFuKSB7XG4gICAgdGhpcy5vbGRJZENhcmQgPSBpc09sZElkQ2FyZDtcbiAgICB0aGlzLmNhcmRUeXBlU2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgdGhpcy51cGRhdGVXaXphcmRTdGVwcygpO1xuICAgIHRoaXMuY3VycmVudFdpemFyZFN0ZXAgPSAxO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIC0tLSBGaWxlIFVwbG9hZCAtLS1cblxuICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGUgPSBpbnB1dD8uZmlsZXM/LlswXTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3QgaXNGcm9udCA9IHRoaXMuY3VycmVudFdpemFyZFN0ZXAgPT09IDE7XG4gICAgICB0aGlzLnByb2Nlc3NGaWxlKGZpbGUsIGlzRnJvbnQpO1xuICAgIH1cbiAgICAvLyBSZXNldCBpbnB1dCBzbyBzYW1lIGZpbGUgY2FuIGJlIHJlLXNlbGVjdGVkXG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0ZpbGUoZmlsZTogRmlsZSwgaXNGcm9udDogYm9vbGVhbikge1xuICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSAnLicgKyBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBmaWxlU2l6ZUtCID0gZmlsZS5zaXplIC8gMTAyNDtcblxuICAgIGlmICghdGhpcy52YWxpZEZvcm1hdHMuaW5jbHVkZXMoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgIHRoaXMuZmlsZUVycm9yID0gKFxuICAgICAgICB0aGlzLnByb3BzWydlcnJvck1lc3NhZ2VzJ10/LmludmFsaWRUeXBlIHx8XG4gICAgICAgIGBJbnZhbGlkIGZpbGUgdHlwZS4gQWxsb3dlZCBmb3JtYXRzIGFyZSAke3RoaXMudmFsaWRGb3JtYXRzLmpvaW4oXG4gICAgICAgICAgJywgJ1xuICAgICAgICApfWBcbiAgICAgICkucmVwbGFjZSgne2Zvcm1hdHN9JywgdGhpcy52YWxpZEZvcm1hdHMuam9pbignLCAnKSk7XG4gICAgICB0aGlzLmNvbnRyb2wuc2V0RXJyb3JzKHsgaW52YWxpZFR5cGU6IHRydWUgfSk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZpbGVTaXplS0IgPiB0aGlzLm1heEZpbGVTaXplS0IgfHwgZmlsZVNpemVLQiA8IDEpIHtcbiAgICAgIHRoaXMuZmlsZUVycm9yID0gKFxuICAgICAgICB0aGlzLnByb3BzWydlcnJvck1lc3NhZ2VzJ10/Lm1heFNpemUgfHxcbiAgICAgICAgYEZpbGUgc2l6ZSBtdXN0IGJlIGJldHdlZW4gMUtCIGFuZCAke3RoaXMubWF4RmlsZVNpemVLQn1LQi5gXG4gICAgICApLnJlcGxhY2UoJ3tzaXplfScsIHRoaXMubWF4RmlsZVNpemVLQi50b1N0cmluZygpKTtcbiAgICAgIHRoaXMuY29udHJvbC5zZXRFcnJvcnMoeyBpbnZhbGlkU2l6ZTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpbGVFcnJvciA9IG51bGw7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVVyaSA9IHJlYWRlci5yZXN1bHQ/LnRvU3RyaW5nKCkgfHwgJyc7XG4gICAgICBjb25zdCBiYXNlNjQgPSBkYXRhVXJpLnNwbGl0KCcsJylbMV0gfHwgJyc7XG4gICAgICBpZiAoaXNGcm9udCkge1xuICAgICAgICB0aGlzLmZpbGVOYW1lRnJvbnQgPSBmaWxlLm5hbWU7XG4gICAgICAgIHRoaXMucGhvdG9CYXNlNjRGcm9udCA9IGJhc2U2NDtcbiAgICAgICAgdGhpcy5waG90b1ByZXZpZXdGcm9udCA9IGRhdGFVcmk7XG4gICAgICAgIHRoaXMuZnJvbnRQaG90b1VwbG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsZU5hbWVCYWNrID0gZmlsZS5uYW1lO1xuICAgICAgICB0aGlzLnBob3RvQmFzZTY0QmFjayA9IGJhc2U2NDtcbiAgICAgICAgdGhpcy5waG90b1ByZXZpZXdCYWNrID0gZGF0YVVyaTtcbiAgICAgICAgdGhpcy5iYWNrUGhvdG9VcGxvYWRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIC0tLSBEcmFnIGFuZCBEcm9wIC0tLVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0RyYWdPdmVyID0gdHJ1ZTtcbiAgfVxuXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xuICB9XG5cbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaXNGcm9udCA9IHRoaXMuY3VycmVudFdpemFyZFN0ZXAgPT09IDE7XG4gICAgICB0aGlzLnByb2Nlc3NGaWxlKGZpbGVzWzBdLCBpc0Zyb250KTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gQ2FtZXJhIC0tLVxuXG4gIGFzeW5jIG9wZW5DYW1lcmEoKSB7XG4gICAgdGhpcy5maWxlRXJyb3IgPSBudWxsO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGlmICghbmF2aWdhdG9yLm1lZGlhRGV2aWNlcz8uZ2V0VXNlck1lZGlhKSB7XG4gICAgICB0aGlzLmZpbGVFcnJvciA9XG4gICAgICAgIHRoaXMucHJvcHNbJ2Vycm9yTWVzc2FnZXMnXT8uY2FtZXJhTm90U3VwcG9ydGVkIHx8XG4gICAgICAgICdDYW1lcmEgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZS4nO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXF1ZXN0IHBlcm1pc3Npb24gZmlyc3QgKGxhYmVscyBhcmUgb25seSBhdmFpbGFibGUgYWZ0ZXIgcGVybWlzc2lvbiBncmFudClcbiAgICAgIGNvbnN0IHRlbXBTdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgICAgIHZpZGVvOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0ZW1wU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2goKHQpID0+IHQuc3RvcCgpKTtcblxuICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpO1xuICAgICAgdGhpcy5hdmFpbGFibGVDYW1lcmFzID0gZGV2aWNlcy5maWx0ZXIoXG4gICAgICAgIChkKSA9PiBkLmtpbmQgPT09ICd2aWRlb2lucHV0J1xuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuYXZhaWxhYmxlQ2FtZXJhcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5maWxlRXJyb3IgPVxuICAgICAgICAgIHRoaXMucHJvcHNbJ2Vycm9yTWVzc2FnZXMnXT8ubm9DYW1lcmEgfHxcbiAgICAgICAgICAnTm8gY2FtZXJhIGRldmljZXMgZm91bmQuJztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRDYW1lcmFJZCA9IHRoaXMuYXZhaWxhYmxlQ2FtZXJhc1swXS5kZXZpY2VJZDtcbiAgICAgIHRoaXMuY2FtZXJhQWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRDYW1lcmFTdHJlYW0odGhpcy5zZWxlY3RlZENhbWVyYUlkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuZmlsZUVycm9yID1cbiAgICAgICAgdGhpcy5wcm9wc1snZXJyb3JNZXNzYWdlcyddPy5jYW1lcmFBY2Nlc3MgfHxcbiAgICAgICAgJ1VuYWJsZSB0byBhY2Nlc3MgY2FtZXJhLiBQbGVhc2UgY2hlY2sgcGVybWlzc2lvbnMuJztcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzd2l0Y2hDYW1lcmEoZGV2aWNlSWQ6IHN0cmluZykge1xuICAgIHRoaXMuc3RvcENhbWVyYVN0cmVhbSgpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnRDYW1lcmFTdHJlYW0oZGV2aWNlSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydENhbWVyYVN0cmVhbShkZXZpY2VJZDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHtcbiAgICAgICAgdmlkZW86IHsgZGV2aWNlSWQ6IHsgZXhhY3Q6IGRldmljZUlkIH0gfSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy52aWRlb1N0cmVhbSA9IHN0cmVhbTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5uYXRpdmVFbGVtZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgYXdhaXQgdGhpcy52aWRlb0VsZW1lbnQubmF0aXZlRWxlbWVudC5wbGF5KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmZpbGVFcnJvciA9XG4gICAgICAgIHRoaXMucHJvcHNbJ2Vycm9yTWVzc2FnZXMnXT8uY2FtZXJhQWNjZXNzIHx8XG4gICAgICAgICdVbmFibGUgdG8gYWNjZXNzIHRoZSBzZWxlY3RlZCBjYW1lcmEuJztcbiAgICAgIHRoaXMuY2FtZXJhQWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ2FtZXJhU3RyZWFtKCkge1xuICAgIGlmICh0aGlzLnZpZGVvU3RyZWFtKSB7XG4gICAgICB0aGlzLnZpZGVvU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2goKHRyYWNrKSA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy52aWRlb1N0cmVhbSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ2FtZXJhKCkge1xuICAgIHRoaXMuc3RvcENhbWVyYVN0cmVhbSgpO1xuICAgIHRoaXMuY2FtZXJhQWN0aXZlID0gZmFsc2U7XG4gIH1cblxuICBjbG9zZUNhbWVyYSgpIHtcbiAgICB0aGlzLnN0b3BDYW1lcmEoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBjYXB0dXJlQ3VycmVudFBob3RvKCkge1xuICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZmlsZUVycm9yID0gJ05vIHZpZGVvIGVsZW1lbnQgYXZhaWxhYmxlLic7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmlkZW8gPSB0aGlzLnZpZGVvRWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy53aWR0aCA9IHZpZGVvLnZpZGVvV2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IHZpZGVvLnZpZGVvSGVpZ2h0O1xuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBjb250ZXh0Py5kcmF3SW1hZ2UodmlkZW8sIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG5cbiAgICAvLyBGbGFzaCBhbmltYXRpb25cbiAgICB0aGlzLnRyaWdnZXJGbGFzaCgpO1xuXG4gICAgY29uc3QgZGF0YVVyaSA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwLjkpO1xuICAgIGNvbnN0IGJhc2U2NCA9IGRhdGFVcmkuc3BsaXQoJywnKVsxXSB8fCAnJztcblxuICAgIGNvbnN0IGlzRnJvbnQgPSB0aGlzLmN1cnJlbnRXaXphcmRTdGVwID09PSAxO1xuICAgIGlmIChpc0Zyb250KSB7XG4gICAgICB0aGlzLnBob3RvQmFzZTY0RnJvbnQgPSBiYXNlNjQ7XG4gICAgICB0aGlzLnBob3RvUHJldmlld0Zyb250ID0gZGF0YVVyaTtcbiAgICAgIHRoaXMuZnJvbnRQaG90b1VwbG9hZGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5waG90b0Jhc2U2NEJhY2sgPSBiYXNlNjQ7XG4gICAgICB0aGlzLnBob3RvUHJldmlld0JhY2sgPSBkYXRhVXJpO1xuICAgICAgdGhpcy5iYWNrUGhvdG9VcGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wQ2FtZXJhKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyRmxhc2goKSB7XG4gICAgdGhpcy5zaG93Rmxhc2ggPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0ZsYXNoID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIC8vIC0tLSBQaG90byBQcmV2aWV3IEFjdGlvbnMgLS0tXG5cbiAgY29uZmlybVBob3RvKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRXaXphcmRTdGVwID09PSAxICYmICF0aGlzLm9sZElkQ2FyZCkge1xuICAgICAgLy8gTW92ZSB0byBiYWNrIHBob3RvIHN0ZXBcbiAgICAgIHRoaXMud2l6YXJkU3RlcHNbMV0uc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgICB0aGlzLndpemFyZFN0ZXBzWzJdLnN0YXR1cyA9ICdhY3RpdmUnO1xuICAgICAgdGhpcy5jdXJyZW50V2l6YXJkU3RlcCA9IDI7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFsbCBwaG90b3MgY29sbGVjdGVkLCB0cmlnZ2VyIHVwbG9hZFxuICAgICAgdGhpcy5jaGVja1VwbG9hZENvbmRpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0Q3VycmVudFBob3RvKCkge1xuICAgIGNvbnN0IGlzRnJvbnQgPSB0aGlzLmN1cnJlbnRXaXphcmRTdGVwID09PSAxO1xuICAgIGlmIChpc0Zyb250KSB7XG4gICAgICB0aGlzLnBob3RvQmFzZTY0RnJvbnQgPSAnJztcbiAgICAgIHRoaXMucGhvdG9QcmV2aWV3RnJvbnQgPSAnJztcbiAgICAgIHRoaXMuZnJvbnRQaG90b1VwbG9hZGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbGVOYW1lRnJvbnQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5waG90b0Jhc2U2NEJhY2sgPSAnJztcbiAgICAgIHRoaXMucGhvdG9QcmV2aWV3QmFjayA9ICcnO1xuICAgICAgdGhpcy5iYWNrUGhvdG9VcGxvYWRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maWxlTmFtZUJhY2sgPSAnJztcbiAgICB9XG4gICAgdGhpcy5maWxlRXJyb3IgPSBudWxsO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIC0tLSBVcGxvYWQgLS0tXG5cbiAgdXBsb2FkUGhvdG8oKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuY2FuUmV0cnkgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGVFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgY29tbWFuZDogU2NhbklkRHRvID0ge1xuICAgICAgYXBwSWQ6IHRoaXMucHJvcHNbJ2FwcElkJ10sXG4gICAgICBhcHBEYXRhSWQ6IHRoaXMucHJvcHNbJ2FwcERhdGFJZCddLFxuICAgICAgc3RlcElkOiB0aGlzLnByb3BzWydzdGVwSWQnXSxcbiAgICAgIG9sZElkQ2FyZDogdGhpcy5vbGRJZENhcmQsXG4gICAgICBwaG90b3M6IHRoaXMub2xkSWRDYXJkXG4gICAgICAgID8gW3sgYmFzZTY0OiB0aGlzLnBob3RvQmFzZTY0RnJvbnQgfV1cbiAgICAgICAgOiBbXG4gICAgICAgICAgICB7IGJhc2U2NDogdGhpcy5waG90b0Jhc2U2NEZyb250IH0sXG4gICAgICAgICAgICB7IGJhc2U2NDogdGhpcy5waG90b0Jhc2U2NEJhY2sgfSxcbiAgICAgICAgICBdLFxuICAgIH07XG5cbiAgICB0aGlzLmFwcERhdGFTZXJ2aWNlLnNjYW5JZChjb21tYW5kKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnU2NhbiBJRCByZXN1bHQ6JywgcmVzdWx0KTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBhcHBEYXRhID0gYXdhaXQgdGhpcy5hcHBEYXRhU2VydmljZS5nZXRTdGVwcyhcbiAgICAgICAgICB0aGlzLnByb3BzWydhcHBEYXRhSWQnXVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChhcHBEYXRhKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5leHRyYWN0U3RhdHVzRnJvbUFwcERhdGEoYXBwRGF0YSk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1tTQ0FOLUlEXSBleHRyYWN0ZWQgc3RhdHVzOicsIHN0YXR1cyk7XG5cbiAgICAgICAgICBpZiAoc3RhdHVzPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpbnZhbGlkJykpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZUVycm9yID1cbiAgICAgICAgICAgICAgdGhpcy5wcm9wc1snZXJyb3JNZXNzYWdlcyddPy5pbnZhbGlkU3RhdHVzIHx8XG4gICAgICAgICAgICAgICdJbnZhbGlkIHN0YXR1cyByZXNwb25zZS4nO1xuICAgICAgICAgICAgdGhpcy5jYW5SZXRyeSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2V0RXJyb3JzKHsgaW52YWxpZFN0YXR1czogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmlzU2NhblZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gJ1VwbG9hZCBzdWNjZXNzZnVsISc7XG4gICAgICAgICAgdGhpcy53aXphcmRTdGVwcy5mb3JFYWNoKChzKSA9PiAocy5zdGF0dXMgPSAnY29tcGxldGVkJykpO1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzWydldmVudCddKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzWydldmVudCddKGFwcERhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5maWxlRXJyb3IgPSAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgc2Nhbi4nO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTY2FuIElEIGVycm9yOicsIGVycik7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FuUmV0cnkgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0cnlVcGxvYWQoKSB7XG4gICAgdGhpcy51cGxvYWRQaG90bygpO1xuICB9XG5cbiAgLy8gLS0tIEhlbHBlcnMgLS0tXG5cbiAgcmVzZXRGb3JtKHByZXNlcnZlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuZmlsZU5hbWVGcm9udCA9ICcnO1xuICAgIHRoaXMuZmlsZU5hbWVCYWNrID0gJyc7XG4gICAgdGhpcy5waG90b0Jhc2U2NEZyb250ID0gJyc7XG4gICAgdGhpcy5waG90b0Jhc2U2NEJhY2sgPSAnJztcbiAgICB0aGlzLnBob3RvUHJldmlld0Zyb250ID0gJyc7XG4gICAgdGhpcy5waG90b1ByZXZpZXdCYWNrID0gJyc7XG4gICAgdGhpcy5mcm9udFBob3RvVXBsb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmJhY2tQaG90b1VwbG9hZGVkID0gZmFsc2U7XG4gICAgaWYgKCFwcmVzZXJ2ZUVycm9yKSB7XG4gICAgICB0aGlzLmZpbGVFcnJvciA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuc3RvcENhbWVyYSgpO1xuICAgIHRoaXMuY29udHJvbC5yZXNldCgpO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IG51bGw7XG4gICAgdGhpcy5jYW5SZXRyeSA9IGZhbHNlO1xuICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xuICB9XG5cbiAgY2hlY2tVcGxvYWRDb25kaXRpb24oKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vbGRJZENhcmQgJiYgdGhpcy5mcm9udFBob3RvVXBsb2FkZWQgfHxcbiAgICAgICF0aGlzLm9sZElkQ2FyZCAmJiB0aGlzLmZyb250UGhvdG9VcGxvYWRlZCAmJiB0aGlzLmJhY2tQaG90b1VwbG9hZGVkXG4gICAgKSB7XG4gICAgICB0aGlzLnVwbG9hZFBob3RvKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0U3RhdHVzRnJvbUFwcERhdGEoYXBwRGF0YTogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFhcHBEYXRhPy5maWxsRGF0YSB8fCAhdGhpcy5wcm9wc1snc3RlcElkJ10pIHJldHVybiBudWxsO1xuXG4gICAgbGV0IGZpbGxEYXRhOiBBcHBEYXRhRmlsbDtcbiAgICB0cnkge1xuICAgICAgZmlsbERhdGEgPVxuICAgICAgICB0eXBlb2YgYXBwRGF0YS5maWxsRGF0YSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IChKU09OLnBhcnNlKGFwcERhdGEuZmlsbERhdGEpIGFzIEFwcERhdGFGaWxsKVxuICAgICAgICAgIDogYXBwRGF0YS5maWxsRGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZXh0cmFjdFN0YXR1c0Zyb21BcHBEYXRhXSBKU09OIHBhcnNlIGVycm9yJywgZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzdGVwID0gZmlsbERhdGEuZmx1eC5maW5kKFxuICAgICAgKHM6IGFueSkgPT4gcy5zdGVwSWQgPT09IHRoaXMucHJvcHNbJ3N0ZXBJZCddXG4gICAgKTtcbiAgICBpZiAoIXN0ZXA/LnNlY3Rpb25zKSByZXR1cm4gbnVsbDtcblxuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzdGVwLnNlY3Rpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IGN0cmwgb2Ygc2VjdGlvbi5jb250cm9scyB8fCBbXSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGN0cmwuZmlsbFZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGN0cmwuZmlsbFZhbHVlLnRyaW0oKSAhPT0gJydcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGN0cmwuZmlsbFZhbHVlLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2Nhbi1pZC1jb250YWluZXJcIj5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxoMiBjbGFzcz1cInNjYW4taWQtdGl0bGVcIj57eyBwcm9wc1tcIm5hbWVcIl0gfX08L2gyPlxuICA8cCBjbGFzcz1cInNjYW4taWQtZGVzY3JpcHRpb25cIj57eyBwcm9wc1tcImRlc2NyaXB0aW9uXCJdIH19PC9wPlxuXG4gIDwhLS0gU3RlcCBQcm9ncmVzcyBJbmRpY2F0b3IgLS0+XG4gIDxkaXYgY2xhc3M9XCJzdGVwLXByb2dyZXNzXCIgKm5nSWY9XCJ3aXphcmRTdGVwcy5sZW5ndGggPiAxXCIgcm9sZT1cImxpc3RcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3RlcC1wcm9ncmVzc19faXRlbVwiICpuZ0Zvcj1cImxldCBzdGVwIG9mIHdpemFyZFN0ZXBzOyBsZXQgaSA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3RcIiByb2xlPVwibGlzdGl0ZW1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLXByb2dyZXNzX19jaXJjbGVcIlxuICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInN0ZXAuc3RhdHVzID09PSAnYWN0aXZlJ1wiXG4gICAgICAgICAgIFtjbGFzcy5jb21wbGV0ZWRdPVwic3RlcC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnXCJcbiAgICAgICAgICAgW2NsYXNzLnVwY29taW5nXT1cInN0ZXAuc3RhdHVzID09PSAndXBjb21pbmcnXCJcbiAgICAgICAgICAgW2NsYXNzLmNsaWNrYWJsZV09XCJzdGVwLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCdcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwic3RlcC5zdGF0dXMgPT09ICdhY3RpdmUnID8gJ3N0ZXAnIDogbnVsbFwiXG4gICAgICAgICAgIChjbGljayk9XCJzdGVwLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgPyBnb1RvU3RlcChpKSA6IG51bGxcIj5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic3RlcC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnXCI+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInN0ZXAuc3RhdHVzICE9PSAnY29tcGxldGVkJ1wiPnt7IGkgKyAxIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhbiBjbGFzcz1cInN0ZXAtcHJvZ3Jlc3NfX2xhYmVsXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic3RlcC5zdGF0dXMgPT09ICdhY3RpdmUnXCJcbiAgICAgICAgICAgIFtjbGFzcy5jb21wbGV0ZWRdPVwic3RlcC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnXCI+XG4gICAgICAgIHt7IHN0ZXAubGFiZWwgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLXByb2dyZXNzX19jb25uZWN0b3JcIiAqbmdJZj1cIiFsYXN0XCJcbiAgICAgICAgICAgW2NsYXNzLmNvbXBsZXRlZF09XCJzdGVwLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCdcIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFN0ZXAgMTogQ2FyZCBUeXBlIFNlbGVjdGlvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImNhcmQtdHlwZS1zdGVwXCIgKm5nSWY9XCJjdXJyZW50V2l6YXJkU3RlcCA9PT0gMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uc1wiIHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10eXBlLW9wdGlvblwiXG4gICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJvbGRJZENhcmQgPT09IHRydWUgJiYgY2FyZFR5cGVTZWxlY3RlZFwiXG4gICAgICAgICAgIChjbGljayk9XCJzZWxlY3RDYXJkVHlwZSh0cnVlKVwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlbGVjdENhcmRUeXBlKHRydWUpXCJcbiAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwic2VsZWN0Q2FyZFR5cGUodHJ1ZSk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cIm9sZElkQ2FyZCA9PT0gdHJ1ZSAmJiBjYXJkVHlwZVNlbGVjdGVkXCJcbiAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uX19pbWFnZS13cmFwcGVyXCI+XG4gICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL29yaWdpbi1mb3JtL29sZC1pZC1jYXJkLnBuZ1wiIGFsdD1cIk9sZCBJRCBDYXJkXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uX19pbmZvXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uX19sYWJlbFwiPlxuICAgICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5vbGRDYXJkTGFiZWwgfHwgJ09sZCBJRCBDYXJkJyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtdHlwZS1vcHRpb25fX2hlbHBlclwiPlxuICAgICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5vbGRDYXJkSGVscGVyIHx8ICdTaW5nbGUtc2lkZWQgY2FyZCAtIDEgcGhvdG8gbmVlZGVkJyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdHlwZS1vcHRpb25cIlxuICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwib2xkSWRDYXJkID09PSBmYWxzZSAmJiBjYXJkVHlwZVNlbGVjdGVkXCJcbiAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENhcmRUeXBlKGZhbHNlKVwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlbGVjdENhcmRUeXBlKGZhbHNlKVwiXG4gICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInNlbGVjdENhcmRUeXBlKGZhbHNlKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICByb2xlPVwicmFkaW9cIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwib2xkSWRDYXJkID09PSBmYWxzZSAmJiBjYXJkVHlwZVNlbGVjdGVkXCJcbiAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uX19pbWFnZS13cmFwcGVyXCI+XG4gICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL29yaWdpbi1mb3JtL25ldy1pZC1jYXJkLnBuZ1wiIGFsdD1cIk5ldyBJRCBDYXJkXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uX19pbmZvXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uX19sYWJlbFwiPlxuICAgICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5uZXdDYXJkTGFiZWwgfHwgJ05ldyBJRCBDYXJkJyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtdHlwZS1vcHRpb25fX2hlbHBlclwiPlxuICAgICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5uZXdDYXJkSGVscGVyIHx8ICdDYXJkIHdpdGggZnJvbnQgYW5kIGJhY2sgLSAyIHBob3RvcyBuZWVkZWQnIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFN0ZXBzIDItMzogUGhvdG8gQ2FwdHVyZSAvIFVwbG9hZCAtLT5cbiAgPGRpdiBjbGFzcz1cInBob3RvLXN0ZXBcIiAqbmdJZj1cIihjdXJyZW50V2l6YXJkU3RlcCA9PT0gMSB8fCBjdXJyZW50V2l6YXJkU3RlcCA9PT0gMikgJiYgIWlzTG9hZGluZyAmJiAhKHN1Y2Nlc3NNZXNzYWdlICYmIGlzU2NhblZhbGlkKVwiPlxuXG4gICAgPCEtLSBCYWNrIEJ1dHRvbiAtLT5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJiYWNrLWJ0blwiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxuICAgICAge3sgY3VycmVudFdpemFyZFN0ZXAgPT09IDFcbiAgICAgICAgID8gKHByb3BzWydsYWJlbHMnXT8uY2hhbmdlQ2FyZFR5cGVMYWJlbCB8fCAnQ2hhbmdlIGNhcmQgdHlwZScpXG4gICAgICAgICA6IChwcm9wc1snbGFiZWxzJ10/LmJhY2tMYWJlbCB8fCAnQmFjaycpIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8IS0tIFBob3RvIFByZXZpZXcgTW9kZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwicGhvdG8tcHJldmlld1wiICpuZ0lmPVwiY3VycmVudFBob3RvUHJldmlldyAmJiAhY2FtZXJhQWN0aXZlXCI+XG4gICAgICA8cCBjbGFzcz1cInBob3RvLXByZXZpZXdfX2xhYmVsXCI+e3sgY3VycmVudFN0ZXBTaG9ydExhYmVsIH19PC9wPlxuICAgICAgPGltZyBjbGFzcz1cInBob3RvLXByZXZpZXdfX2ltYWdlXCIgW3NyY109XCJjdXJyZW50UGhvdG9QcmV2aWV3XCIgW2FsdF09XCJjdXJyZW50U3RlcFNob3J0TGFiZWxcIiAvPlxuICAgICAgPGRpdiBjbGFzcz1cInBob3RvLXByZXZpZXdfX2FjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cInJlc2V0Q3VycmVudFBob3RvKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5yZXRha2VMYWJlbCB8fCAnUmV0YWtlJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNvbmZpcm1QaG90bygpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPmNoZWNrPC9tYXQtaWNvbj5cbiAgICAgICAgICB7eyBwcm9wc1snbGFiZWxzJ10/LnVzZVBob3RvTGFiZWwgfHwgJ1VzZSBUaGlzIFBob3RvJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDYXB0dXJlIE1vZGUgKG5vIHBob3RvIHlldCkgLS0+XG4gICAgPGRpdiBjbGFzcz1cInBob3RvLWNhcHR1cmVcIiAqbmdJZj1cIiFjdXJyZW50UGhvdG9QcmV2aWV3ICYmICFjYW1lcmFBY3RpdmVcIj5cbiAgICAgIDxwIGNsYXNzPVwicGhvdG8tY2FwdHVyZV9fbGFiZWxcIj57eyBjdXJyZW50U3RlcExhYmVsIH19PC9wPlxuXG4gICAgICA8IS0tIERyb3AgWm9uZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwaG90by1jYXB0dXJlX19kcm9wem9uZVwiXG4gICAgICAgICAgIFtjbGFzcy5kcmFnb3Zlcl09XCJpc0RyYWdPdmVyXCJcbiAgICAgICAgICAgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgICAgICAgIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0Ryb3Agem9uZSBmb3IgJyArIGN1cnJlbnRTdGVwU2hvcnRMYWJlbCArICcgdXBsb2FkJ1wiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJkcm9wem9uZS1pY29uXCI+Y2xvdWRfdXBsb2FkPC9tYXQtaWNvbj5cbiAgICAgICAgPHAgY2xhc3M9XCJkcm9wem9uZS10ZXh0XCI+XG4gICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5kcmFnRHJvcFByb21wdCB8fCAnRHJhZyAmIGRyb3AgeW91ciBwaG90byBoZXJlLCBvciB1c2UgdGhlIGJ1dHRvbnMgYmVsb3cnIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJkcm9wem9uZS1mb3JtYXRzXCI+XG4gICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5mb3JtYXRzTGFiZWwgfHwgJ0FjY2VwdGVkJyB9fToge3sgdmFsaWRGb3JtYXRzLmpvaW4oJywgJykgfX0gJm1pZGRvdDtcbiAgICAgICAgICB7eyBwcm9wc1snbGFiZWxzJ10/Lm1heFNpemVMYWJlbCB8fCAnTWF4JyB9fToge3sgbWF4RmlsZVNpemVLQiB9fUtCXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInBob3RvLWNhcHR1cmVfX2FjdGlvbnNcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgI2ZpbGVJbnB1dCAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIiBoaWRkZW4gW2FjY2VwdF09XCJ2YWxpZEZvcm1hdHMuam9pbignLCcpXCIgLz5cbiAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCIgY2xhc3M9XCJhY3Rpb24tYnRuXCI+XG4gICAgICAgICAgPG1hdC1pY29uPnVwbG9hZF9maWxlPC9tYXQtaWNvbj5cbiAgICAgICAgICB7eyBwcm9wc1snbGFiZWxzJ10/LnVwbG9hZEZpbGVCdXR0b25UcmFuc2xhdGlvbnMgfHwgJ1VwbG9hZCBGaWxlJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9wZW5DYW1lcmEoKVwiIGNsYXNzPVwiYWN0aW9uLWJ0blwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9wc1snY29uZmlnJ10uc2hvd1Rha2VQaWN0dXJlQnV0dG9uICE9PSBmYWxzZVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5waG90b19jYW1lcmE8L21hdC1pY29uPlxuICAgICAgICAgIHt7IHByb3BzWydsYWJlbHMnXT8udGFrZVBpY3R1cmVCdXR0b25UcmFuc2xhdGlvbnMgfHwgJ1Rha2UgUGhvdG8nIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENhbWVyYSBWaWV3ZmluZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjYW1lcmEtY29udGFpbmVyXCIgKm5nSWY9XCJjYW1lcmFBY3RpdmVcIj5cbiAgICAgIDwhLS0gQ2FtZXJhIHNlbGVjdG9yIC0tPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiYXZhaWxhYmxlQ2FtZXJhcy5sZW5ndGggPiAxXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImNhbWVyYS1zZWxlY3RvclwiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IHByb3BzWydsYWJlbHMnXT8uc2VsZWN0Q2FtZXJhTGFiZWwgfHwgJ1NlbGVjdCBjYW1lcmEnIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cInNlbGVjdGVkQ2FtZXJhSWRcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInN3aXRjaENhbWVyYSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNhbSBvZiBhdmFpbGFibGVDYW1lcmFzOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cImNhbS5kZXZpY2VJZFwiPlxuICAgICAgICAgICAge3sgY2FtLmxhYmVsIHx8ICdDYW1lcmEgJyArIChpICsgMSkgfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYW1lcmEtdmlld2ZpbmRlclwiPlxuICAgICAgICA8dmlkZW8gI3ZpZGVvRWxlbWVudCBhdXRvcGxheSBwbGF5c2lubGluZSBjbGFzcz1cImNhbWVyYS12aWRlb1wiPjwvdmlkZW8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYW1lcmEtZmxhc2gtb3ZlcmxheVwiIFtjbGFzcy5mbGFzaF09XCJzaG93Rmxhc2hcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FtZXJhLWNvbnRyb2xzXCI+XG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJjbG9zZUNhbWVyYSgpXCIgY2xhc3M9XCJjYW1lcmEtY2FuY2VsLWJ0blwiPlxuICAgICAgICAgIHt7IHByb3BzWydsYWJlbHMnXT8uY2FuY2VsTGFiZWwgfHwgJ0NhbmNlbCcgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LWZhYiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2FwdHVyZUN1cnJlbnRQaG90bygpXCIgY2xhc3M9XCJjYW1lcmEtY2FwdHVyZS1idG5cIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0NhcHR1cmUgJyArIGN1cnJlbnRTdGVwU2hvcnRMYWJlbFwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5waG90b19jYW1lcmE8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbWVyYS1zcGFjZXJcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFcnJvciBEaXNwbGF5IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJwaG90by1zdGVwX19lcnJvclwiICpuZ0lmPVwiZmlsZUVycm9yXCIgcm9sZT1cImFsZXJ0XCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCI+XG4gICAgICA8bWF0LWljb24+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICA8c3Bhbj57eyBmaWxlRXJyb3IgfX08L3NwYW4+XG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAqbmdJZj1cImNhblJldHJ5XCIgKGNsaWNrKT1cInJldHJ5VXBsb2FkKClcIiBjbGFzcz1cInJldHJ5LWJ0blwiPlxuICAgICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgIHt7IHByb3BzWydsYWJlbHMnXT8ucmV0cnlMYWJlbCB8fCAnVHJ5IEFnYWluJyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gTG9hZGluZyAvIFByb2Nlc3NpbmcgU3RhdGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJwcm9jZXNzaW5nLW92ZXJsYXlcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICAgIDxwIGNsYXNzPVwicHJvY2Vzc2luZy10ZXh0XCI+XG4gICAgICB7eyBwcm9wc1snbGFiZWxzJ10/LnByb2Nlc3NpbmdNZXNzYWdlIHx8ICdQcm9jZXNzaW5nIHlvdXIgSUQgc2Nhbi4uLicgfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuXG4gIDwhLS0gU3VjY2VzcyBTdGF0ZSAtLT5cbiAgPGRpdiBjbGFzcz1cInNjYW4tc3VjY2Vzc1wiICpuZ0lmPVwic3VjY2Vzc01lc3NhZ2UgJiYgaXNTY2FuVmFsaWRcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwic2Nhbi1zdWNjZXNzX19pY29uXCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICA8aDMgY2xhc3M9XCJzY2FuLXN1Y2Nlc3NfX3RpdGxlXCI+XG4gICAgICB7eyBwcm9wc1snbGFiZWxzJ10/LnN1Y2Nlc3NUaXRsZSB8fCAnSUQgc2NhbiBzdWNjZXNzZnVsJyB9fVxuICAgIDwvaDM+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
484
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LXNjYW4taWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXNjYW4taWQvZm9ybWx5LXNjYW4taWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXNjYW4taWQvZm9ybWx5LXNjYW4taWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFJVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7QUFnQjdDLE1BQU0sT0FBTyxxQkFDWCxTQUFRLFNBQVM7SUErQ2pCLFlBQ1UsY0FBc0MsRUFDdEMsR0FBc0I7UUFFOUIsS0FBSyxFQUFFLENBQUM7UUFIQSxtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFDdEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE5Q2hDLFlBQU8sR0FBZ0IsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbEUsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFDaEMsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDM0IsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsaUJBQVksR0FBYSxFQUFFLENBQUM7UUFDNUIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDMUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxxQkFBZ0IsR0FBVyxFQUFFLENBQUM7UUFDOUIsb0JBQWUsR0FBVyxFQUFFLENBQUM7UUFDN0IsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFDckMsZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUFFNUIsZUFBZTtRQUNmLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUM5QixnQkFBVyxHQUFpQixFQUFFLENBQUM7UUFFL0Isb0JBQW9CO1FBQ3BCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLHFCQUFnQixHQUFzQixFQUFFLENBQUM7UUFDekMscUJBQWdCLEdBQVcsRUFBRSxDQUFDO1FBRTlCLGdEQUFnRDtRQUNoRCxzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFDL0IscUJBQWdCLEdBQVcsRUFBRSxDQUFDO1FBRTlCLGdCQUFnQjtRQUNoQixlQUFVLEdBQVksS0FBSyxDQUFDO1FBRTVCLGtCQUFrQjtRQUNsQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBRTNCLFFBQVE7UUFDUixhQUFRLEdBQVksS0FBSyxDQUFDO1FBSTFCLGdCQUFXLEdBQXVCLElBQUksQ0FBQztJQVN2QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFpQixDQUFDO1FBQ3JDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVc7WUFDbEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7UUFFOUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsa0JBQWtCLENBQUM7WUFDMUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU3QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJO2lCQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDN0MsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLLENBQzlELENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEtBQUssQ0FBQztZQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxpQkFBaUI7Z0JBQ3ZDLGdEQUFnRCxDQUNqRCxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sQ0FDTCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQjtZQUN0QywrQ0FBK0MsQ0FDaEQsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsZUFBZSxJQUFJLGFBQWEsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGNBQWMsSUFBSSxZQUFZLENBQUM7SUFDOUQsQ0FBQztJQUVELGlDQUFpQztJQUV6QixlQUFlO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakI7Z0JBQ0UsS0FBSyxFQUNILElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsaUJBQWlCLElBQUksa0JBQWtCO2dCQUMvRCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sVUFBVSxHQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsbUJBQW1CLElBQUksYUFBYSxDQUFDO1FBQzdELE1BQU0sU0FBUyxHQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsa0JBQWtCLElBQUksWUFBWSxDQUFDO1FBRTNELElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakI7Z0JBQ0UsS0FBSyxFQUNILElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsaUJBQWlCLElBQUksa0JBQWtCO2dCQUMvRCxNQUFNLEVBQUUsV0FBVzthQUNwQjtZQUNELEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO1NBQ3hDLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtJQUVyQixNQUFNO1FBQ0osSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLG9EQUFvRDtZQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7WUFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDN0IsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hDLG1EQUFtRDtZQUNuRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztZQUM5QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQWlCO1FBQ3hCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsOEJBQThCO0lBRTlCLGNBQWMsQ0FBQyxXQUFvQjtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELHNCQUFzQjtJQUV0QixjQUFjLENBQUMsS0FBWTtRQUN6QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELDhDQUE4QztRQUM5QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsSUFBVSxFQUFFLE9BQWdCO1FBQzlDLE1BQU0sYUFBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN0RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUVwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxXQUFXO2dCQUN4QywwQ0FBMEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzlELElBQUksQ0FDTCxFQUFFLENBQ0osQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTztnQkFDcEMscUNBQXFDLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FDN0QsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDbkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDaEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDakMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDaEMsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELHdCQUF3QjtJQUV4QixVQUFVLENBQUMsS0FBZ0I7UUFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWdCO1FBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWdCO1FBQ3JCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUM7UUFDeEMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO0lBRWpCLEtBQUssQ0FBQyxVQUFVO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV6QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsU0FBUztnQkFDWixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLGtCQUFrQjtvQkFDL0Msc0NBQXNDLENBQUM7WUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILDhFQUE4RTtZQUM5RSxNQUFNLFVBQVUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO2dCQUMzRCxLQUFLLEVBQUUsSUFBSTthQUNaLENBQUMsQ0FBQztZQUNILFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRWhELE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUNwQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQy9CLENBQUM7WUFFRixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxTQUFTO29CQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUTt3QkFDckMsMEJBQTBCLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3pCLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDMUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxZQUFZO29CQUN6QyxvREFBb0QsQ0FBQztZQUN2RCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFnQjtRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQWdCO1FBQzlDLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7Z0JBQ3ZELEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRTthQUN6QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztZQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztnQkFDbkQsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQyxDQUFDO1FBQ0gsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLElBQUksQ0FBQyxTQUFTO2dCQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsWUFBWTtvQkFDekMsdUNBQXVDLENBQUM7WUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFTyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLDZCQUE2QixDQUFDO1lBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDbEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxPQUFPLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixLQUFLLENBQUMsQ0FBQztRQUM3QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztZQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztZQUM5QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELGdDQUFnQztJQUVoQyxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BELDBCQUEwQjtZQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDO2FBQU0sQ0FBQztZQUNOLHVDQUF1QztZQUN2QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQzFCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUI7SUFFakIsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFekIsTUFBTSxPQUFPLEdBQWM7WUFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQzFCLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDNUIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDcEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQztvQkFDRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ2pDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7aUJBQ2pDO1NBQ04sQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM1QyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO2dCQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFFdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxTQUFTO3dCQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsYUFBYTs0QkFDMUMsMEJBQTBCLENBQUM7b0JBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN6QixPQUFPO2dCQUNULENBQUM7Z0JBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FDeEIsQ0FBQztnQkFFRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyw4Q0FBOEMsQ0FBQztnQkFDaEUsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO0lBRWxCLFNBQVMsQ0FBQyxnQkFBeUIsS0FBSztRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQ0UsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsa0JBQWtCO1lBQ3pDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUNwRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsT0FBWTtRQUMzQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFN0QsSUFBSSxRQUFxQixDQUFDO1FBQzFCLElBQUksQ0FBQztZQUNILFFBQVE7Z0JBQ04sT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVE7b0JBQ2xDLENBQUMsQ0FBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQWlCO29CQUMvQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQzdCLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQzlDLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVqQyxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxLQUFLLE1BQU0sSUFBSSxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQzFDLElBQ0UsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVE7b0JBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUM1QixDQUFDO29CQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDL0IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOytHQTNpQlUscUJBQXFCO21HQUFyQixxQkFBcUIsd1JDekJsQyxtNVJBcU1BOzs0RkQ1S2EscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG9CQUFvQjsySEE4Q04sU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNLLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwbGljYXRpb25EYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NhbklkRHRvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwcGxpY2F0aW9uLm1vZGVsJztcbmltcG9ydCB7IEFwcERhdGFGaWxsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Zvcm1zLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBXaXphcmRTdGVwIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgc3RhdHVzOiAndXBjb21pbmcnIHwgJ2FjdGl2ZScgfCAnY29tcGxldGVkJztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZvcm1seS1zY2FuLWlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS1zY2FuLWlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybWx5LXNjYW4taWQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5U2NhbklkQ29tcG9uZW50XG4gIGV4dGVuZHMgRmllbGRUeXBlXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgY29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gIGZpbGVFcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGZpbGVOYW1lRnJvbnQ6IHN0cmluZyA9ICcnO1xuICBmaWxlTmFtZUJhY2s6IHN0cmluZyA9ICcnO1xuICB2YWxpZEZvcm1hdHM6IHN0cmluZ1tdID0gW107XG4gIG1heEZpbGVTaXplS0I6IG51bWJlciA9IDA7XG4gIGNhcmRUeXBlU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgb2xkSWRDYXJkOiBib29sZWFuID0gZmFsc2U7XG4gIGZyb250UGhvdG9VcGxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBiYWNrUGhvdG9VcGxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwaG90b0Jhc2U2NEZyb250OiBzdHJpbmcgPSAnJztcbiAgcGhvdG9CYXNlNjRCYWNrOiBzdHJpbmcgPSAnJztcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaXNTY2FuVmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFdpemFyZCBzdGF0ZVxuICBjdXJyZW50V2l6YXJkU3RlcDogbnVtYmVyID0gMDtcbiAgd2l6YXJkU3RlcHM6IFdpemFyZFN0ZXBbXSA9IFtdO1xuXG4gIC8vIENhbWVyYSBtYW5hZ2VtZW50XG4gIGNhbWVyYUFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBhdmFpbGFibGVDYW1lcmFzOiBNZWRpYURldmljZUluZm9bXSA9IFtdO1xuICBzZWxlY3RlZENhbWVyYUlkOiBzdHJpbmcgPSAnJztcblxuICAvLyBQaG90byBwcmV2aWV3IChmdWxsIGRhdGEgVVJJIGZvciBpbWcgZGlzcGxheSlcbiAgcGhvdG9QcmV2aWV3RnJvbnQ6IHN0cmluZyA9ICcnO1xuICBwaG90b1ByZXZpZXdCYWNrOiBzdHJpbmcgPSAnJztcblxuICAvLyBEcmFnIGFuZCBkcm9wXG4gIGlzRHJhZ092ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBGbGFzaCBhbmltYXRpb25cbiAgc2hvd0ZsYXNoOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gUmV0cnlcbiAgY2FuUmV0cnk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKSBmaWxlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd2aWRlb0VsZW1lbnQnKSB2aWRlb0VsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxWaWRlb0VsZW1lbnQ+O1xuICB2aWRlb1N0cmVhbTogTWVkaWFTdHJlYW0gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHZhbHVlQ2hhbmdlc1N1Yj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcERhdGFTZXJ2aWNlOiBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmZvcm0gYXMgRm9ybUdyb3VwO1xuICAgIGdyb3VwLmFkZENvbnRyb2wodGhpcy5wcm9wc1snaWRlbnRpZmllciddLCB0aGlzLmNvbnRyb2wpO1xuXG4gICAgdGhpcy52YWxpZEZvcm1hdHMgPSB0aGlzLnByb3BzWydjb25maWcnXS5maWxlRm9ybWF0c1xuICAgICAgPyB0aGlzLnByb3BzWydjb25maWcnXS5maWxlRm9ybWF0cy5zcGxpdCgnLCcpLm1hcCgoZjogc3RyaW5nKSA9PiAnLicgKyBmLnRyaW0oKS5yZXBsYWNlKC9eWyouXSsvLCAnJykpXG4gICAgICA6IFsnLmpwZycsICcucG5nJ107XG4gICAgdGhpcy5tYXhGaWxlU2l6ZUtCID0gdGhpcy5wcm9wc1snY29uZmlnJ10uZmlsZU1heFNpemUgfHwgMjAwMDtcblxuICAgIGlmICh0aGlzLnByb3BzWydjb25maWcnXS5jb2xsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xJZCA9IHRoaXMucHJvcHNbJ2NvbmZpZyddLmNvbXBvbmVudENvbGxlY3RlZDtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtLmdldChjb250cm9sSWQpPy52YWx1ZSA/PyB0aGlzLm1vZGVsPy5bY29udHJvbElkXTtcbiAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VzU3ViID0gdGhpcy5mb3JtXG4gICAgICAgIC5nZXQodGhpcy5wcm9wc1snY29uZmlnJ10uY29tcG9uZW50Q29sbGVjdGVkKVxuICAgICAgICA/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQodGhpcy5wcm9wc1snY29uZmlnJ10uY29tcG9uZW50Q29sbGVjdGVkKT8udmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRXaXphcmRTdGVwcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdG9wQ2FtZXJhKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZXNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBnZXQgY3VycmVudFBob3RvUHJldmlldygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRXaXphcmRTdGVwID09PSAxXG4gICAgICA/IHRoaXMucGhvdG9QcmV2aWV3RnJvbnRcbiAgICAgIDogdGhpcy5waG90b1ByZXZpZXdCYWNrO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRTdGVwTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jdXJyZW50V2l6YXJkU3RlcCA9PT0gMSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5wcm9wc1snbGFiZWxzJ10/LnVwbG9hZEZyb250UHJvbXB0IHx8XG4gICAgICAgICdQbGVhc2UgdXBsb2FkIHRoZSBmcm9udCBwaG90byBvZiB5b3VyIElEIGNhcmQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcHNbJ2xhYmVscyddPy51cGxvYWRCYWNrUHJvbXB0IHx8XG4gICAgICAnUGxlYXNlIHVwbG9hZCB0aGUgYmFjayBwaG90byBvZiB5b3VyIElEIGNhcmQuJ1xuICAgICk7XG4gIH1cblxuICBnZXQgY3VycmVudFN0ZXBTaG9ydExhYmVsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY3VycmVudFdpemFyZFN0ZXAgPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzWydsYWJlbHMnXT8uZnJvbnRQaG90b0xhYmVsIHx8ICdGcm9udCBvZiBJRCc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb3BzWydsYWJlbHMnXT8uYmFja1Bob3RvTGFiZWwgfHwgJ0JhY2sgb2YgSUQnO1xuICB9XG5cbiAgLy8gLS0tIFdpemFyZCBTdGVwIE1hbmFnZW1lbnQgLS0tXG5cbiAgcHJpdmF0ZSBpbml0V2l6YXJkU3RlcHMoKSB7XG4gICAgdGhpcy53aXphcmRTdGVwcyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6XG4gICAgICAgICAgdGhpcy5wcm9wc1snbGFiZWxzJ10/LmNhcmRUeXBlU3RlcExhYmVsIHx8ICdTZWxlY3QgQ2FyZCBUeXBlJyxcbiAgICAgICAgc3RhdHVzOiAnYWN0aXZlJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlV2l6YXJkU3RlcHMoKSB7XG4gICAgY29uc3QgZnJvbnRMYWJlbCA9XG4gICAgICB0aGlzLnByb3BzWydsYWJlbHMnXT8uZnJvbnRQaG90b1N0ZXBMYWJlbCB8fCAnRnJvbnQgUGhvdG8nO1xuICAgIGNvbnN0IGJhY2tMYWJlbCA9XG4gICAgICB0aGlzLnByb3BzWydsYWJlbHMnXT8uYmFja1Bob3RvU3RlcExhYmVsIHx8ICdCYWNrIFBob3RvJztcblxuICAgIHRoaXMud2l6YXJkU3RlcHMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOlxuICAgICAgICAgIHRoaXMucHJvcHNbJ2xhYmVscyddPy5jYXJkVHlwZVN0ZXBMYWJlbCB8fCAnU2VsZWN0IENhcmQgVHlwZScsXG4gICAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICB9LFxuICAgICAgeyBsYWJlbDogZnJvbnRMYWJlbCwgc3RhdHVzOiAnYWN0aXZlJyB9LFxuICAgIF07XG4gICAgaWYgKCF0aGlzLm9sZElkQ2FyZCkge1xuICAgICAgdGhpcy53aXphcmRTdGVwcy5wdXNoKHsgbGFiZWw6IGJhY2tMYWJlbCwgc3RhdHVzOiAndXBjb21pbmcnIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBOYXZpZ2F0aW9uIC0tLVxuXG4gIGdvQmFjaygpIHtcbiAgICB0aGlzLmNsb3NlQ2FtZXJhKCk7XG4gICAgaWYgKHRoaXMuY3VycmVudFdpemFyZFN0ZXAgPT09IDIpIHtcbiAgICAgIC8vIEdvIGJhY2sgdG8gZnJvbnQgcGhvdG8gc3RlcCwgcHJlc2VydmUgZnJvbnQgcGhvdG9cbiAgICAgIHRoaXMud2l6YXJkU3RlcHNbMl0uc3RhdHVzID0gJ3VwY29taW5nJztcbiAgICAgIHRoaXMud2l6YXJkU3RlcHNbMV0uc3RhdHVzID0gJ2FjdGl2ZSc7XG4gICAgICB0aGlzLmN1cnJlbnRXaXphcmRTdGVwID0gMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFdpemFyZFN0ZXAgPT09IDEpIHtcbiAgICAgIC8vIEdvIGJhY2sgdG8gY2FyZCB0eXBlIHNlbGVjdGlvbiwgcmVzZXQgZXZlcnl0aGluZ1xuICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgIHRoaXMuY2FyZFR5cGVTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jdXJyZW50V2l6YXJkU3RlcCA9IDA7XG4gICAgICB0aGlzLmluaXRXaXphcmRTdGVwcygpO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnb1RvU3RlcChzdGVwSW5kZXg6IG51bWJlcikge1xuICAgIGlmIChzdGVwSW5kZXggPCB0aGlzLmN1cnJlbnRXaXphcmRTdGVwKSB7XG4gICAgICB3aGlsZSAodGhpcy5jdXJyZW50V2l6YXJkU3RlcCA+IHN0ZXBJbmRleCkge1xuICAgICAgICB0aGlzLmdvQmFjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBDYXJkIFR5cGUgU2VsZWN0aW9uIC0tLVxuXG4gIHNlbGVjdENhcmRUeXBlKGlzT2xkSWRDYXJkOiBib29sZWFuKSB7XG4gICAgdGhpcy5vbGRJZENhcmQgPSBpc09sZElkQ2FyZDtcbiAgICB0aGlzLmNhcmRUeXBlU2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgdGhpcy51cGRhdGVXaXphcmRTdGVwcygpO1xuICAgIHRoaXMuY3VycmVudFdpemFyZFN0ZXAgPSAxO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIC0tLSBGaWxlIFVwbG9hZCAtLS1cblxuICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGUgPSBpbnB1dD8uZmlsZXM/LlswXTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3QgaXNGcm9udCA9IHRoaXMuY3VycmVudFdpemFyZFN0ZXAgPT09IDE7XG4gICAgICB0aGlzLnByb2Nlc3NGaWxlKGZpbGUsIGlzRnJvbnQpO1xuICAgIH1cbiAgICAvLyBSZXNldCBpbnB1dCBzbyBzYW1lIGZpbGUgY2FuIGJlIHJlLXNlbGVjdGVkXG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0ZpbGUoZmlsZTogRmlsZSwgaXNGcm9udDogYm9vbGVhbikge1xuICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSAnLicgKyBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBmaWxlU2l6ZUtCID0gZmlsZS5zaXplIC8gMTAyNDtcblxuICAgIGlmICghdGhpcy52YWxpZEZvcm1hdHMuaW5jbHVkZXMoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgIHRoaXMuZmlsZUVycm9yID0gKFxuICAgICAgICB0aGlzLnByb3BzWydlcnJvck1lc3NhZ2VzJ10/LmludmFsaWRUeXBlIHx8XG4gICAgICAgIGBJbnZhbGlkIGZpbGUgdHlwZS4gQWxsb3dlZCBmb3JtYXRzIGFyZSAke3RoaXMudmFsaWRGb3JtYXRzLmpvaW4oXG4gICAgICAgICAgJywgJ1xuICAgICAgICApfWBcbiAgICAgICkucmVwbGFjZSgne2Zvcm1hdHN9JywgdGhpcy52YWxpZEZvcm1hdHMuam9pbignLCAnKSk7XG4gICAgICB0aGlzLmNvbnRyb2wuc2V0RXJyb3JzKHsgaW52YWxpZFR5cGU6IHRydWUgfSk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZpbGVTaXplS0IgPiB0aGlzLm1heEZpbGVTaXplS0IgfHwgZmlsZVNpemVLQiA8IDEpIHtcbiAgICAgIHRoaXMuZmlsZUVycm9yID0gKFxuICAgICAgICB0aGlzLnByb3BzWydlcnJvck1lc3NhZ2VzJ10/Lm1heFNpemUgfHxcbiAgICAgICAgYEZpbGUgc2l6ZSBtdXN0IGJlIGJldHdlZW4gMUtCIGFuZCAke3RoaXMubWF4RmlsZVNpemVLQn1LQi5gXG4gICAgICApLnJlcGxhY2UoJ3tzaXplfScsIHRoaXMubWF4RmlsZVNpemVLQi50b1N0cmluZygpKTtcbiAgICAgIHRoaXMuY29udHJvbC5zZXRFcnJvcnMoeyBpbnZhbGlkU2l6ZTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpbGVFcnJvciA9IG51bGw7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVVyaSA9IHJlYWRlci5yZXN1bHQ/LnRvU3RyaW5nKCkgfHwgJyc7XG4gICAgICBjb25zdCBiYXNlNjQgPSBkYXRhVXJpLnNwbGl0KCcsJylbMV0gfHwgJyc7XG4gICAgICBpZiAoaXNGcm9udCkge1xuICAgICAgICB0aGlzLmZpbGVOYW1lRnJvbnQgPSBmaWxlLm5hbWU7XG4gICAgICAgIHRoaXMucGhvdG9CYXNlNjRGcm9udCA9IGJhc2U2NDtcbiAgICAgICAgdGhpcy5waG90b1ByZXZpZXdGcm9udCA9IGRhdGFVcmk7XG4gICAgICAgIHRoaXMuZnJvbnRQaG90b1VwbG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsZU5hbWVCYWNrID0gZmlsZS5uYW1lO1xuICAgICAgICB0aGlzLnBob3RvQmFzZTY0QmFjayA9IGJhc2U2NDtcbiAgICAgICAgdGhpcy5waG90b1ByZXZpZXdCYWNrID0gZGF0YVVyaTtcbiAgICAgICAgdGhpcy5iYWNrUGhvdG9VcGxvYWRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIC0tLSBEcmFnIGFuZCBEcm9wIC0tLVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0RyYWdPdmVyID0gdHJ1ZTtcbiAgfVxuXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xuICB9XG5cbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaXNGcm9udCA9IHRoaXMuY3VycmVudFdpemFyZFN0ZXAgPT09IDE7XG4gICAgICB0aGlzLnByb2Nlc3NGaWxlKGZpbGVzWzBdLCBpc0Zyb250KTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gQ2FtZXJhIC0tLVxuXG4gIGFzeW5jIG9wZW5DYW1lcmEoKSB7XG4gICAgdGhpcy5maWxlRXJyb3IgPSBudWxsO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGlmICghbmF2aWdhdG9yLm1lZGlhRGV2aWNlcz8uZ2V0VXNlck1lZGlhKSB7XG4gICAgICB0aGlzLmZpbGVFcnJvciA9XG4gICAgICAgIHRoaXMucHJvcHNbJ2Vycm9yTWVzc2FnZXMnXT8uY2FtZXJhTm90U3VwcG9ydGVkIHx8XG4gICAgICAgICdDYW1lcmEgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZS4nO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXF1ZXN0IHBlcm1pc3Npb24gZmlyc3QgKGxhYmVscyBhcmUgb25seSBhdmFpbGFibGUgYWZ0ZXIgcGVybWlzc2lvbiBncmFudClcbiAgICAgIGNvbnN0IHRlbXBTdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgICAgIHZpZGVvOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0ZW1wU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2goKHQpID0+IHQuc3RvcCgpKTtcblxuICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpO1xuICAgICAgdGhpcy5hdmFpbGFibGVDYW1lcmFzID0gZGV2aWNlcy5maWx0ZXIoXG4gICAgICAgIChkKSA9PiBkLmtpbmQgPT09ICd2aWRlb2lucHV0J1xuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuYXZhaWxhYmxlQ2FtZXJhcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5maWxlRXJyb3IgPVxuICAgICAgICAgIHRoaXMucHJvcHNbJ2Vycm9yTWVzc2FnZXMnXT8ubm9DYW1lcmEgfHxcbiAgICAgICAgICAnTm8gY2FtZXJhIGRldmljZXMgZm91bmQuJztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRDYW1lcmFJZCA9IHRoaXMuYXZhaWxhYmxlQ2FtZXJhc1swXS5kZXZpY2VJZDtcbiAgICAgIHRoaXMuY2FtZXJhQWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRDYW1lcmFTdHJlYW0odGhpcy5zZWxlY3RlZENhbWVyYUlkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuZmlsZUVycm9yID1cbiAgICAgICAgdGhpcy5wcm9wc1snZXJyb3JNZXNzYWdlcyddPy5jYW1lcmFBY2Nlc3MgfHxcbiAgICAgICAgJ1VuYWJsZSB0byBhY2Nlc3MgY2FtZXJhLiBQbGVhc2UgY2hlY2sgcGVybWlzc2lvbnMuJztcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzd2l0Y2hDYW1lcmEoZGV2aWNlSWQ6IHN0cmluZykge1xuICAgIHRoaXMuc3RvcENhbWVyYVN0cmVhbSgpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnRDYW1lcmFTdHJlYW0oZGV2aWNlSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydENhbWVyYVN0cmVhbShkZXZpY2VJZDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHtcbiAgICAgICAgdmlkZW86IHsgZGV2aWNlSWQ6IHsgZXhhY3Q6IGRldmljZUlkIH0gfSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy52aWRlb1N0cmVhbSA9IHN0cmVhbTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5uYXRpdmVFbGVtZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgYXdhaXQgdGhpcy52aWRlb0VsZW1lbnQubmF0aXZlRWxlbWVudC5wbGF5KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmZpbGVFcnJvciA9XG4gICAgICAgIHRoaXMucHJvcHNbJ2Vycm9yTWVzc2FnZXMnXT8uY2FtZXJhQWNjZXNzIHx8XG4gICAgICAgICdVbmFibGUgdG8gYWNjZXNzIHRoZSBzZWxlY3RlZCBjYW1lcmEuJztcbiAgICAgIHRoaXMuY2FtZXJhQWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ2FtZXJhU3RyZWFtKCkge1xuICAgIGlmICh0aGlzLnZpZGVvU3RyZWFtKSB7XG4gICAgICB0aGlzLnZpZGVvU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2goKHRyYWNrKSA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy52aWRlb1N0cmVhbSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ2FtZXJhKCkge1xuICAgIHRoaXMuc3RvcENhbWVyYVN0cmVhbSgpO1xuICAgIHRoaXMuY2FtZXJhQWN0aXZlID0gZmFsc2U7XG4gIH1cblxuICBjbG9zZUNhbWVyYSgpIHtcbiAgICB0aGlzLnN0b3BDYW1lcmEoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBjYXB0dXJlQ3VycmVudFBob3RvKCkge1xuICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZmlsZUVycm9yID0gJ05vIHZpZGVvIGVsZW1lbnQgYXZhaWxhYmxlLic7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmlkZW8gPSB0aGlzLnZpZGVvRWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy53aWR0aCA9IHZpZGVvLnZpZGVvV2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IHZpZGVvLnZpZGVvSGVpZ2h0O1xuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBjb250ZXh0Py5kcmF3SW1hZ2UodmlkZW8sIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG5cbiAgICAvLyBGbGFzaCBhbmltYXRpb25cbiAgICB0aGlzLnRyaWdnZXJGbGFzaCgpO1xuXG4gICAgY29uc3QgZGF0YVVyaSA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwLjkpO1xuICAgIGNvbnN0IGJhc2U2NCA9IGRhdGFVcmkuc3BsaXQoJywnKVsxXSB8fCAnJztcblxuICAgIGNvbnN0IGlzRnJvbnQgPSB0aGlzLmN1cnJlbnRXaXphcmRTdGVwID09PSAxO1xuICAgIGlmIChpc0Zyb250KSB7XG4gICAgICB0aGlzLnBob3RvQmFzZTY0RnJvbnQgPSBiYXNlNjQ7XG4gICAgICB0aGlzLnBob3RvUHJldmlld0Zyb250ID0gZGF0YVVyaTtcbiAgICAgIHRoaXMuZnJvbnRQaG90b1VwbG9hZGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5waG90b0Jhc2U2NEJhY2sgPSBiYXNlNjQ7XG4gICAgICB0aGlzLnBob3RvUHJldmlld0JhY2sgPSBkYXRhVXJpO1xuICAgICAgdGhpcy5iYWNrUGhvdG9VcGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wQ2FtZXJhKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyRmxhc2goKSB7XG4gICAgdGhpcy5zaG93Rmxhc2ggPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0ZsYXNoID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIC8vIC0tLSBQaG90byBQcmV2aWV3IEFjdGlvbnMgLS0tXG5cbiAgY29uZmlybVBob3RvKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRXaXphcmRTdGVwID09PSAxICYmICF0aGlzLm9sZElkQ2FyZCkge1xuICAgICAgLy8gTW92ZSB0byBiYWNrIHBob3RvIHN0ZXBcbiAgICAgIHRoaXMud2l6YXJkU3RlcHNbMV0uc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgICB0aGlzLndpemFyZFN0ZXBzWzJdLnN0YXR1cyA9ICdhY3RpdmUnO1xuICAgICAgdGhpcy5jdXJyZW50V2l6YXJkU3RlcCA9IDI7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFsbCBwaG90b3MgY29sbGVjdGVkLCB0cmlnZ2VyIHVwbG9hZFxuICAgICAgdGhpcy5jaGVja1VwbG9hZENvbmRpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0Q3VycmVudFBob3RvKCkge1xuICAgIGNvbnN0IGlzRnJvbnQgPSB0aGlzLmN1cnJlbnRXaXphcmRTdGVwID09PSAxO1xuICAgIGlmIChpc0Zyb250KSB7XG4gICAgICB0aGlzLnBob3RvQmFzZTY0RnJvbnQgPSAnJztcbiAgICAgIHRoaXMucGhvdG9QcmV2aWV3RnJvbnQgPSAnJztcbiAgICAgIHRoaXMuZnJvbnRQaG90b1VwbG9hZGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbGVOYW1lRnJvbnQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5waG90b0Jhc2U2NEJhY2sgPSAnJztcbiAgICAgIHRoaXMucGhvdG9QcmV2aWV3QmFjayA9ICcnO1xuICAgICAgdGhpcy5iYWNrUGhvdG9VcGxvYWRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maWxlTmFtZUJhY2sgPSAnJztcbiAgICB9XG4gICAgdGhpcy5maWxlRXJyb3IgPSBudWxsO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIC0tLSBVcGxvYWQgLS0tXG5cbiAgdXBsb2FkUGhvdG8oKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuY2FuUmV0cnkgPSBmYWxzZTtcbiAgICB0aGlzLmZpbGVFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgY29tbWFuZDogU2NhbklkRHRvID0ge1xuICAgICAgYXBwSWQ6IHRoaXMucHJvcHNbJ2FwcElkJ10sXG4gICAgICBhcHBEYXRhSWQ6IHRoaXMucHJvcHNbJ2FwcERhdGFJZCddLFxuICAgICAgc3RlcElkOiB0aGlzLnByb3BzWydzdGVwSWQnXSxcbiAgICAgIG9sZElkQ2FyZDogdGhpcy5vbGRJZENhcmQsXG4gICAgICBwaG90b3M6IHRoaXMub2xkSWRDYXJkXG4gICAgICAgID8gW3sgYmFzZTY0OiB0aGlzLnBob3RvQmFzZTY0RnJvbnQgfV1cbiAgICAgICAgOiBbXG4gICAgICAgICAgICB7IGJhc2U2NDogdGhpcy5waG90b0Jhc2U2NEZyb250IH0sXG4gICAgICAgICAgICB7IGJhc2U2NDogdGhpcy5waG90b0Jhc2U2NEJhY2sgfSxcbiAgICAgICAgICBdLFxuICAgIH07XG5cbiAgICB0aGlzLmFwcERhdGFTZXJ2aWNlLnNjYW5JZChjb21tYW5kKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogYXN5bmMgKGlzVmFsaWQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1NjYW4gSUQgcmVzdWx0OicsIGlzVmFsaWQpO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMuZmlsZUVycm9yID1cbiAgICAgICAgICAgIHRoaXMucHJvcHNbJ2Vycm9yTWVzc2FnZXMnXT8uaW52YWxpZFN0YXR1cyB8fFxuICAgICAgICAgICAgJ0ludmFsaWQgc3RhdHVzIHJlc3BvbnNlLic7XG4gICAgICAgICAgdGhpcy5jYW5SZXRyeSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5jb250cm9sLnNldEVycm9ycyh7IGludmFsaWRTdGF0dXM6IHRydWUgfSk7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcERhdGEgPSBhd2FpdCB0aGlzLmFwcERhdGFTZXJ2aWNlLmdldFN0ZXBzKFxuICAgICAgICAgIHRoaXMucHJvcHNbJ2FwcERhdGFJZCddXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5pc1NjYW5WYWxpZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSAnVXBsb2FkIHN1Y2Nlc3NmdWwhJztcbiAgICAgICAgdGhpcy53aXphcmRTdGVwcy5mb3JFYWNoKChzKSA9PiAocy5zdGF0dXMgPSAnY29tcGxldGVkJykpO1xuICAgICAgICBpZiAodGhpcy5wcm9wc1snZXZlbnQnXSAmJiBhcHBEYXRhKSB7XG4gICAgICAgICAgdGhpcy5wcm9wc1snZXZlbnQnXShhcHBEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5maWxlRXJyb3IgPSAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgc2Nhbi4nO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTY2FuIElEIGVycm9yOicsIGVycik7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FuUmV0cnkgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0cnlVcGxvYWQoKSB7XG4gICAgdGhpcy51cGxvYWRQaG90bygpO1xuICB9XG5cbiAgLy8gLS0tIEhlbHBlcnMgLS0tXG5cbiAgcmVzZXRGb3JtKHByZXNlcnZlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuZmlsZU5hbWVGcm9udCA9ICcnO1xuICAgIHRoaXMuZmlsZU5hbWVCYWNrID0gJyc7XG4gICAgdGhpcy5waG90b0Jhc2U2NEZyb250ID0gJyc7XG4gICAgdGhpcy5waG90b0Jhc2U2NEJhY2sgPSAnJztcbiAgICB0aGlzLnBob3RvUHJldmlld0Zyb250ID0gJyc7XG4gICAgdGhpcy5waG90b1ByZXZpZXdCYWNrID0gJyc7XG4gICAgdGhpcy5mcm9udFBob3RvVXBsb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmJhY2tQaG90b1VwbG9hZGVkID0gZmFsc2U7XG4gICAgaWYgKCFwcmVzZXJ2ZUVycm9yKSB7XG4gICAgICB0aGlzLmZpbGVFcnJvciA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuc3RvcENhbWVyYSgpO1xuICAgIHRoaXMuY29udHJvbC5yZXNldCgpO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IG51bGw7XG4gICAgdGhpcy5jYW5SZXRyeSA9IGZhbHNlO1xuICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xuICB9XG5cbiAgY2hlY2tVcGxvYWRDb25kaXRpb24oKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vbGRJZENhcmQgJiYgdGhpcy5mcm9udFBob3RvVXBsb2FkZWQgfHxcbiAgICAgICF0aGlzLm9sZElkQ2FyZCAmJiB0aGlzLmZyb250UGhvdG9VcGxvYWRlZCAmJiB0aGlzLmJhY2tQaG90b1VwbG9hZGVkXG4gICAgKSB7XG4gICAgICB0aGlzLnVwbG9hZFBob3RvKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0U3RhdHVzRnJvbUFwcERhdGEoYXBwRGF0YTogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFhcHBEYXRhPy5maWxsRGF0YSB8fCAhdGhpcy5wcm9wc1snc3RlcElkJ10pIHJldHVybiBudWxsO1xuXG4gICAgbGV0IGZpbGxEYXRhOiBBcHBEYXRhRmlsbDtcbiAgICB0cnkge1xuICAgICAgZmlsbERhdGEgPVxuICAgICAgICB0eXBlb2YgYXBwRGF0YS5maWxsRGF0YSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IChKU09OLnBhcnNlKGFwcERhdGEuZmlsbERhdGEpIGFzIEFwcERhdGFGaWxsKVxuICAgICAgICAgIDogYXBwRGF0YS5maWxsRGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZXh0cmFjdFN0YXR1c0Zyb21BcHBEYXRhXSBKU09OIHBhcnNlIGVycm9yJywgZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzdGVwID0gZmlsbERhdGEuZmx1eC5maW5kKFxuICAgICAgKHM6IGFueSkgPT4gcy5zdGVwSWQgPT09IHRoaXMucHJvcHNbJ3N0ZXBJZCddXG4gICAgKTtcbiAgICBpZiAoIXN0ZXA/LnNlY3Rpb25zKSByZXR1cm4gbnVsbDtcblxuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzdGVwLnNlY3Rpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IGN0cmwgb2Ygc2VjdGlvbi5jb250cm9scyB8fCBbXSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGN0cmwuZmlsbFZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGN0cmwuZmlsbFZhbHVlLnRyaW0oKSAhPT0gJydcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGN0cmwuZmlsbFZhbHVlLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2Nhbi1pZC1jb250YWluZXJcIj5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxoMiBjbGFzcz1cInNjYW4taWQtdGl0bGVcIj57eyBwcm9wc1tcIm5hbWVcIl0gfX08L2gyPlxuICA8cCBjbGFzcz1cInNjYW4taWQtZGVzY3JpcHRpb25cIj57eyBwcm9wc1tcImRlc2NyaXB0aW9uXCJdIH19PC9wPlxuXG4gIDwhLS0gU3RlcCBQcm9ncmVzcyBJbmRpY2F0b3IgLS0+XG4gIDxkaXYgY2xhc3M9XCJzdGVwLXByb2dyZXNzXCIgKm5nSWY9XCJ3aXphcmRTdGVwcy5sZW5ndGggPiAxXCIgcm9sZT1cImxpc3RcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3RlcC1wcm9ncmVzc19faXRlbVwiICpuZ0Zvcj1cImxldCBzdGVwIG9mIHdpemFyZFN0ZXBzOyBsZXQgaSA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3RcIiByb2xlPVwibGlzdGl0ZW1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLXByb2dyZXNzX19jaXJjbGVcIlxuICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInN0ZXAuc3RhdHVzID09PSAnYWN0aXZlJ1wiXG4gICAgICAgICAgIFtjbGFzcy5jb21wbGV0ZWRdPVwic3RlcC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnXCJcbiAgICAgICAgICAgW2NsYXNzLnVwY29taW5nXT1cInN0ZXAuc3RhdHVzID09PSAndXBjb21pbmcnXCJcbiAgICAgICAgICAgW2NsYXNzLmNsaWNrYWJsZV09XCJzdGVwLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCdcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwic3RlcC5zdGF0dXMgPT09ICdhY3RpdmUnID8gJ3N0ZXAnIDogbnVsbFwiXG4gICAgICAgICAgIChjbGljayk9XCJzdGVwLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgPyBnb1RvU3RlcChpKSA6IG51bGxcIj5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic3RlcC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnXCI+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInN0ZXAuc3RhdHVzICE9PSAnY29tcGxldGVkJ1wiPnt7IGkgKyAxIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhbiBjbGFzcz1cInN0ZXAtcHJvZ3Jlc3NfX2xhYmVsXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic3RlcC5zdGF0dXMgPT09ICdhY3RpdmUnXCJcbiAgICAgICAgICAgIFtjbGFzcy5jb21wbGV0ZWRdPVwic3RlcC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnXCI+XG4gICAgICAgIHt7IHN0ZXAubGFiZWwgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLXByb2dyZXNzX19jb25uZWN0b3JcIiAqbmdJZj1cIiFsYXN0XCJcbiAgICAgICAgICAgW2NsYXNzLmNvbXBsZXRlZF09XCJzdGVwLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCdcIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFN0ZXAgMTogQ2FyZCBUeXBlIFNlbGVjdGlvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImNhcmQtdHlwZS1zdGVwXCIgKm5nSWY9XCJjdXJyZW50V2l6YXJkU3RlcCA9PT0gMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uc1wiIHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10eXBlLW9wdGlvblwiXG4gICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJvbGRJZENhcmQgPT09IHRydWUgJiYgY2FyZFR5cGVTZWxlY3RlZFwiXG4gICAgICAgICAgIChjbGljayk9XCJzZWxlY3RDYXJkVHlwZSh0cnVlKVwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlbGVjdENhcmRUeXBlKHRydWUpXCJcbiAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwic2VsZWN0Q2FyZFR5cGUodHJ1ZSk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cIm9sZElkQ2FyZCA9PT0gdHJ1ZSAmJiBjYXJkVHlwZVNlbGVjdGVkXCJcbiAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uX19pbWFnZS13cmFwcGVyXCI+XG4gICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL29yaWdpbi1mb3JtL29sZC1pZC1jYXJkLnBuZ1wiIGFsdD1cIk9sZCBJRCBDYXJkXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uX19pbmZvXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uX19sYWJlbFwiPlxuICAgICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5vbGRDYXJkTGFiZWwgfHwgJ09sZCBJRCBDYXJkJyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtdHlwZS1vcHRpb25fX2hlbHBlclwiPlxuICAgICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5vbGRDYXJkSGVscGVyIHx8ICdTaW5nbGUtc2lkZWQgY2FyZCAtIDEgcGhvdG8gbmVlZGVkJyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdHlwZS1vcHRpb25cIlxuICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwib2xkSWRDYXJkID09PSBmYWxzZSAmJiBjYXJkVHlwZVNlbGVjdGVkXCJcbiAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENhcmRUeXBlKGZhbHNlKVwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlbGVjdENhcmRUeXBlKGZhbHNlKVwiXG4gICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInNlbGVjdENhcmRUeXBlKGZhbHNlKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICByb2xlPVwicmFkaW9cIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwib2xkSWRDYXJkID09PSBmYWxzZSAmJiBjYXJkVHlwZVNlbGVjdGVkXCJcbiAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uX19pbWFnZS13cmFwcGVyXCI+XG4gICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL29yaWdpbi1mb3JtL25ldy1pZC1jYXJkLnBuZ1wiIGFsdD1cIk5ldyBJRCBDYXJkXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uX19pbmZvXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLXR5cGUtb3B0aW9uX19sYWJlbFwiPlxuICAgICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5uZXdDYXJkTGFiZWwgfHwgJ05ldyBJRCBDYXJkJyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtdHlwZS1vcHRpb25fX2hlbHBlclwiPlxuICAgICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5uZXdDYXJkSGVscGVyIHx8ICdDYXJkIHdpdGggZnJvbnQgYW5kIGJhY2sgLSAyIHBob3RvcyBuZWVkZWQnIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFN0ZXBzIDItMzogUGhvdG8gQ2FwdHVyZSAvIFVwbG9hZCAtLT5cbiAgPGRpdiBjbGFzcz1cInBob3RvLXN0ZXBcIiAqbmdJZj1cIihjdXJyZW50V2l6YXJkU3RlcCA9PT0gMSB8fCBjdXJyZW50V2l6YXJkU3RlcCA9PT0gMikgJiYgIWlzTG9hZGluZyAmJiAhKHN1Y2Nlc3NNZXNzYWdlICYmIGlzU2NhblZhbGlkKVwiPlxuXG4gICAgPCEtLSBCYWNrIEJ1dHRvbiAtLT5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJiYWNrLWJ0blwiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxuICAgICAge3sgY3VycmVudFdpemFyZFN0ZXAgPT09IDFcbiAgICAgICAgID8gKHByb3BzWydsYWJlbHMnXT8uY2hhbmdlQ2FyZFR5cGVMYWJlbCB8fCAnQ2hhbmdlIGNhcmQgdHlwZScpXG4gICAgICAgICA6IChwcm9wc1snbGFiZWxzJ10/LmJhY2tMYWJlbCB8fCAnQmFjaycpIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8IS0tIFBob3RvIFByZXZpZXcgTW9kZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwicGhvdG8tcHJldmlld1wiICpuZ0lmPVwiY3VycmVudFBob3RvUHJldmlldyAmJiAhY2FtZXJhQWN0aXZlXCI+XG4gICAgICA8cCBjbGFzcz1cInBob3RvLXByZXZpZXdfX2xhYmVsXCI+e3sgY3VycmVudFN0ZXBTaG9ydExhYmVsIH19PC9wPlxuICAgICAgPGltZyBjbGFzcz1cInBob3RvLXByZXZpZXdfX2ltYWdlXCIgW3NyY109XCJjdXJyZW50UGhvdG9QcmV2aWV3XCIgW2FsdF09XCJjdXJyZW50U3RlcFNob3J0TGFiZWxcIiAvPlxuICAgICAgPGRpdiBjbGFzcz1cInBob3RvLXByZXZpZXdfX2FjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cInJlc2V0Q3VycmVudFBob3RvKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5yZXRha2VMYWJlbCB8fCAnUmV0YWtlJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNvbmZpcm1QaG90bygpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPmNoZWNrPC9tYXQtaWNvbj5cbiAgICAgICAgICB7eyBwcm9wc1snbGFiZWxzJ10/LnVzZVBob3RvTGFiZWwgfHwgJ1VzZSBUaGlzIFBob3RvJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDYXB0dXJlIE1vZGUgKG5vIHBob3RvIHlldCkgLS0+XG4gICAgPGRpdiBjbGFzcz1cInBob3RvLWNhcHR1cmVcIiAqbmdJZj1cIiFjdXJyZW50UGhvdG9QcmV2aWV3ICYmICFjYW1lcmFBY3RpdmVcIj5cbiAgICAgIDxwIGNsYXNzPVwicGhvdG8tY2FwdHVyZV9fbGFiZWxcIj57eyBjdXJyZW50U3RlcExhYmVsIH19PC9wPlxuXG4gICAgICA8IS0tIERyb3AgWm9uZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwaG90by1jYXB0dXJlX19kcm9wem9uZVwiXG4gICAgICAgICAgIFtjbGFzcy5kcmFnb3Zlcl09XCJpc0RyYWdPdmVyXCJcbiAgICAgICAgICAgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgICAgICAgIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0Ryb3Agem9uZSBmb3IgJyArIGN1cnJlbnRTdGVwU2hvcnRMYWJlbCArICcgdXBsb2FkJ1wiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJkcm9wem9uZS1pY29uXCI+Y2xvdWRfdXBsb2FkPC9tYXQtaWNvbj5cbiAgICAgICAgPHAgY2xhc3M9XCJkcm9wem9uZS10ZXh0XCI+XG4gICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5kcmFnRHJvcFByb21wdCB8fCAnRHJhZyAmIGRyb3AgeW91ciBwaG90byBoZXJlLCBvciB1c2UgdGhlIGJ1dHRvbnMgYmVsb3cnIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJkcm9wem9uZS1mb3JtYXRzXCI+XG4gICAgICAgICAge3sgcHJvcHNbJ2xhYmVscyddPy5mb3JtYXRzTGFiZWwgfHwgJ0FjY2VwdGVkJyB9fToge3sgdmFsaWRGb3JtYXRzLmpvaW4oJywgJykgfX0gJm1pZGRvdDtcbiAgICAgICAgICB7eyBwcm9wc1snbGFiZWxzJ10/Lm1heFNpemVMYWJlbCB8fCAnTWF4JyB9fToge3sgbWF4RmlsZVNpemVLQiB9fUtCXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInBob3RvLWNhcHR1cmVfX2FjdGlvbnNcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgI2ZpbGVJbnB1dCAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIiBoaWRkZW4gW2FjY2VwdF09XCJ2YWxpZEZvcm1hdHMuam9pbignLCcpXCIgLz5cbiAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCIgY2xhc3M9XCJhY3Rpb24tYnRuXCI+XG4gICAgICAgICAgPG1hdC1pY29uPnVwbG9hZF9maWxlPC9tYXQtaWNvbj5cbiAgICAgICAgICB7eyBwcm9wc1snbGFiZWxzJ10/LnVwbG9hZEZpbGVCdXR0b25UcmFuc2xhdGlvbnMgfHwgJ1VwbG9hZCBGaWxlJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9wZW5DYW1lcmEoKVwiIGNsYXNzPVwiYWN0aW9uLWJ0blwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9wc1snY29uZmlnJ10uc2hvd1Rha2VQaWN0dXJlQnV0dG9uICE9PSBmYWxzZVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5waG90b19jYW1lcmE8L21hdC1pY29uPlxuICAgICAgICAgIHt7IHByb3BzWydsYWJlbHMnXT8udGFrZVBpY3R1cmVCdXR0b25UcmFuc2xhdGlvbnMgfHwgJ1Rha2UgUGhvdG8nIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENhbWVyYSBWaWV3ZmluZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjYW1lcmEtY29udGFpbmVyXCIgKm5nSWY9XCJjYW1lcmFBY3RpdmVcIj5cbiAgICAgIDwhLS0gQ2FtZXJhIHNlbGVjdG9yIC0tPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiYXZhaWxhYmxlQ2FtZXJhcy5sZW5ndGggPiAxXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImNhbWVyYS1zZWxlY3RvclwiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IHByb3BzWydsYWJlbHMnXT8uc2VsZWN0Q2FtZXJhTGFiZWwgfHwgJ1NlbGVjdCBjYW1lcmEnIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cInNlbGVjdGVkQ2FtZXJhSWRcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInN3aXRjaENhbWVyYSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNhbSBvZiBhdmFpbGFibGVDYW1lcmFzOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cImNhbS5kZXZpY2VJZFwiPlxuICAgICAgICAgICAge3sgY2FtLmxhYmVsIHx8ICdDYW1lcmEgJyArIChpICsgMSkgfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYW1lcmEtdmlld2ZpbmRlclwiPlxuICAgICAgICA8dmlkZW8gI3ZpZGVvRWxlbWVudCBhdXRvcGxheSBwbGF5c2lubGluZSBjbGFzcz1cImNhbWVyYS12aWRlb1wiPjwvdmlkZW8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYW1lcmEtZmxhc2gtb3ZlcmxheVwiIFtjbGFzcy5mbGFzaF09XCJzaG93Rmxhc2hcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FtZXJhLWNvbnRyb2xzXCI+XG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJjbG9zZUNhbWVyYSgpXCIgY2xhc3M9XCJjYW1lcmEtY2FuY2VsLWJ0blwiPlxuICAgICAgICAgIHt7IHByb3BzWydsYWJlbHMnXT8uY2FuY2VsTGFiZWwgfHwgJ0NhbmNlbCcgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LWZhYiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2FwdHVyZUN1cnJlbnRQaG90bygpXCIgY2xhc3M9XCJjYW1lcmEtY2FwdHVyZS1idG5cIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0NhcHR1cmUgJyArIGN1cnJlbnRTdGVwU2hvcnRMYWJlbFwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5waG90b19jYW1lcmE8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbWVyYS1zcGFjZXJcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFcnJvciBEaXNwbGF5IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJwaG90by1zdGVwX19lcnJvclwiICpuZ0lmPVwiZmlsZUVycm9yXCIgcm9sZT1cImFsZXJ0XCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCI+XG4gICAgICA8bWF0LWljb24+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICA8c3Bhbj57eyBmaWxlRXJyb3IgfX08L3NwYW4+XG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAqbmdJZj1cImNhblJldHJ5XCIgKGNsaWNrKT1cInJldHJ5VXBsb2FkKClcIiBjbGFzcz1cInJldHJ5LWJ0blwiPlxuICAgICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgIHt7IHByb3BzWydsYWJlbHMnXT8ucmV0cnlMYWJlbCB8fCAnVHJ5IEFnYWluJyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gTG9hZGluZyAvIFByb2Nlc3NpbmcgU3RhdGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJwcm9jZXNzaW5nLW92ZXJsYXlcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICAgIDxwIGNsYXNzPVwicHJvY2Vzc2luZy10ZXh0XCI+XG4gICAgICB7eyBwcm9wc1snbGFiZWxzJ10/LnByb2Nlc3NpbmdNZXNzYWdlIHx8ICdQcm9jZXNzaW5nIHlvdXIgSUQgc2Nhbi4uLicgfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuXG4gIDwhLS0gU3VjY2VzcyBTdGF0ZSAtLT5cbiAgPGRpdiBjbGFzcz1cInNjYW4tc3VjY2Vzc1wiICpuZ0lmPVwic3VjY2Vzc01lc3NhZ2UgJiYgaXNTY2FuVmFsaWRcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwic2Nhbi1zdWNjZXNzX19pY29uXCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICA8aDMgY2xhc3M9XCJzY2FuLXN1Y2Nlc3NfX3RpdGxlXCI+XG4gICAgICB7eyBwcm9wc1snbGFiZWxzJ10/LnN1Y2Nlc3NUaXRsZSB8fCAnSUQgc2NhbiBzdWNjZXNzZnVsJyB9fVxuICAgIDwvaDM+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -273,6 +273,27 @@ export class ModelPopulationHelper {
273
273
  }
274
274
  }
275
275
  }
276
+ // Also add inherited fields not matching any flux control
277
+ // (needed for componentCollected references from parent flows, e.g., Sign phone)
278
+ if (fillData.inheritedFields) {
279
+ for (const [key, value] of Object.entries(fillData.inheritedFields)) {
280
+ if (model[key] !== undefined)
281
+ continue;
282
+ if (value === undefined || value === null)
283
+ continue;
284
+ if (typeof value === 'object' &&
285
+ !Array.isArray(value) &&
286
+ value.dictionaryUUID) {
287
+ const fv = value.fillValue;
288
+ if (fv !== undefined && fv !== null) {
289
+ model[key] = fv;
290
+ }
291
+ }
292
+ else {
293
+ model[key] = value;
294
+ }
295
+ }
296
+ }
276
297
  // Apply precompletion for ManualInput controls
277
298
  ModelPopulationHelper.applyPrecompletionToModel(model, flux);
278
299
  return model;
@@ -418,4 +439,4 @@ export class ModelPopulationHelper {
418
439
  return null;
419
440
  }
420
441
  }
421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcG9wdWxhdGlvbi5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL21vZGVsLXBvcHVsYXRpb24uaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxlQUFlLEVBQWlELE1BQU0sc0JBQXNCLENBQUM7QUFJdEcsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxNQUFNLENBQUMseUJBQXlCLENBQzlCLFFBQWEsRUFDYixJQUFXLEVBQ1gsYUFBeUMsRUFDekMsa0JBQThCO1FBRTlCLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0IsT0FBTyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUF3QixFQUFFLENBQUM7UUFFdEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO1FBQ25ELEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNsQixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3JCLEtBQUssTUFBTSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUN2QyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQ0FDdEIsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7NEJBQ3RELENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztR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LElBQUksRUFBRTt3QkFDNUIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO3FCQUNmLENBQUM7Z0JBQ0osQ0FBQyxDQUNGLElBQUksRUFBRTtnQkFDVCxpQkFBaUIsRUFBRSxlQUFlLENBQUMsaUJBQWlCO2dCQUNwRCxtQkFBbUIsRUFBRSxlQUFlLENBQUMsbUJBQW1CO2dCQUN4RCxlQUFlLEVBQUUsRUFBRTthQUNwQixDQUFDO1lBQ0YsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdGlvbmFyeUR0bywgRGljdGlvbmFyeVZhbHVlLCBUcmFuc2xhdGlvbkR0bywgVHJhbnNsYXRpb24gfSBmcm9tIFwiLi9tb2RlbHMvZGljdGlvbmFyeS5tb2RlbFwiO1xuaW1wb3J0IHsgU3RlcENvbnRyb2xUeXBlLCBEaWN0aW9uYXJ5Q29udHJvbERhdGEsIE1hbnVhbElucHV0Q29udHJvbERhdGEgfSBmcm9tIFwiLi9tb2RlbHMvZm9ybXMubW9kZWxcIjtcbmltcG9ydCB7IExhbmd1YWdlIH0gZnJvbSBcIi4vbW9kZWxzL2xhbmd1YWdlLm1vZGVsXCI7XG5cblxuZXhwb3J0IGNsYXNzIE1vZGVsUG9wdWxhdGlvbkhlbHBlciB7XG4gIHN0YXRpYyBwb3B1bGF0ZU1vZGVsV2l0aEZpbGxEYXRhKFxuICAgIGZpbGxEYXRhOiBhbnksXG4gICAgZmx1eDogYW55W10sXG4gICAgZGljdGlvbmFyeU1hcDogTWFwPHN0cmluZywgRGljdGlvbmFyeUR0bz4sXG4gICAgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBMYW5ndWFnZVtdXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmICghZmlsbERhdGE/LmZsdXggfHwgIWZsdXgpIHtcbiAgICAgIHJldHVybiBNb2RlbFBvcHVsYXRpb25IZWxwZXIuYXBwbHlEZWZhdWx0c1RvTW9kZWwoZmx1eCwgZGljdGlvbmFyeU1hcCk7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIGNvbnN0IGZpbGxEYXRhQ29udHJvbHNNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBmaWxsRGF0YS5mbHV4KSB7XG4gICAgICBpZiAoc3RlcC5zZWN0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc3RlcC5zZWN0aW9ucykge1xuICAgICAgICAgIGlmIChzZWN0aW9uLmNvbnRyb2xzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2Ygc2VjdGlvbi5jb250cm9scykge1xuICAgICAgICAgICAgICBpZiAoY29udHJvbC5jb250cm9sSWQpIHtcbiAgICAgICAgICAgICAgICBmaWxsRGF0YUNvbnRyb2xzTWFwLnNldChjb250cm9sLmNvbnRyb2xJZCwgY29udHJvbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgZmx1eCkge1xuICAgICAgaWYgKHN0ZXAuc2VjdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHN0ZXAuc2VjdGlvbnMpIHtcbiAgICAgICAgICBpZiAoc2VjdGlvbi5jb250cm9scykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sRGVmaW5pdGlvbiBvZiBzZWN0aW9uLmNvbnRyb2xzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xJZCA9IGNvbnRyb2xEZWZpbml0aW9uLmlkZW50aWZpZXI7XG4gICAgICAgICAgICAgIGlmICghY29udHJvbElkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICBsZXQgdmFsdWVTZXRGb3JDb250cm9sID0gZmFsc2U7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGxlZENvbnRyb2xEYXRhID0gZmlsbERhdGFDb250cm9sc01hcC5nZXQoY29udHJvbElkKTtcblxuICAgICAgICAgICAgICBpZiAoZmlsbGVkQ29udHJvbERhdGEpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVGcm9tRmlsbERhdGE6IGFueSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBsZXQgZmlsbGVkVmFsdWVJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZmlsbGVkQ29udHJvbERhdGEuZmlsbFZhbHVlSWQgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgIGZpbGxlZENvbnRyb2xEYXRhLmZpbGxWYWx1ZUlkICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZElkID0gcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgIFN0cmluZyhmaWxsZWRDb250cm9sRGF0YS5maWxsVmFsdWVJZCksXG4gICAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgZmlsbGVkVmFsdWVJZCA9ICFpc05hTihwYXJzZWRJZCkgPyBwYXJzZWRJZCA6IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGxlZFZhbHVlID0gZmlsbGVkQ29udHJvbERhdGEuZmlsbFZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xEZWZpbml0aW9uLnR5cGUgPT09IFN0ZXBDb250cm9sVHlwZS5EaWN0aW9uYXJ5KSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzcGVjaWZpY0RhdGEgPVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sRGVmaW5pdGlvbi5zcGVjaWZpY0NvbnRyb2xEYXRhIGFzIERpY3Rpb25hcnlDb250cm9sRGF0YTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzUmFkaW8gPSBzcGVjaWZpY0RhdGEuc2hvd0FzUmFkaW9CdXR0b25zTGlzdCA9PT0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG11bHRpLXNlbGVjdCB2YWx1ZXMgZmlyc3RcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGxWYWx1ZUlkcyA9IGZpbGxlZENvbnRyb2xEYXRhLmZpbGxWYWx1ZUlkcztcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgZmlsbFZhbHVlSWRzICYmXG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZmlsbFZhbHVlSWRzKSAmJlxuICAgICAgICAgICAgICAgICAgICBmaWxsVmFsdWVJZHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5TWFwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuZGljdGlvbmFyeVVVSURcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkVmFsdWVzOiBEaWN0aW9uYXJ5VmFsdWVbXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlSWQgb2YgZmlsbFZhbHVlSWRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtZXJpY0lkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZUlkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHBhcnNlSW50KHZhbHVlSWQsIDEwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHZhbHVlSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEdG8gPSBkaWN0aW9uYXJ5Py52YWx1ZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAodikgPT4gdi5pZCA9PT0gbnVtZXJpY0lkXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVEdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5tYXBEaWN0aW9uYXJ5VmFsdWVEdG8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVEdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZFZhbHVlcy5wdXNoKG1hcHBlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXBwZWRWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRnJvbUZpbGxEYXRhID0gbWFwcGVkVmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGxlZFZhbHVlSWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmFkaW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZyb21GaWxsRGF0YSA9IGZpbGxlZFZhbHVlSWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlNYXAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhLmRpY3Rpb25hcnlVVUlEXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUR0byA9IGRpY3Rpb25hcnk/LnZhbHVlcz8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICh2KSA9PiB2LmlkID09PSBmaWxsZWRWYWx1ZUlkXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVEdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRnJvbUZpbGxEYXRhID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZWxQb3B1bGF0aW9uSGVscGVyLm1hcERpY3Rpb25hcnlWYWx1ZUR0byhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUR0byxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGZpbGxlZFZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgIGZpbGxlZFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSYWRpbykge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRnJvbUZpbGxEYXRhID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBmaWxsZWRWYWx1ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmaWxsZWRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZpbGxlZFZhbHVlID09PSAnb2JqZWN0JyAmJiBmaWxsZWRWYWx1ZT8uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRnJvbUZpbGxEYXRhID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZWxQb3B1bGF0aW9uSGVscGVyLm1hcERpY3Rpb25hcnlWYWx1ZUR0byhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlNYXAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuZGljdGlvbmFyeVVVSURcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUR0byA9IGRpY3Rpb25hcnk/LnZhbHVlcz8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHYpID0+IHYuaWQgPT09IGZpbGxlZFZhbHVlIHx8IHYubmFtZSA9PT0gZmlsbGVkVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVEdG8pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRnJvbUZpbGxEYXRhID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlbFBvcHVsYXRpb25IZWxwZXIubWFwRGljdGlvbmFyeVZhbHVlRHRvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVEdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgcmVmZXJlbmNlIHZhbHVlcyAob25seSBmb3Igc2luZ2xlLXNlbGVjdClcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVGcm9tRmlsbERhdGEgJiZcbiAgICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWVGcm9tRmlsbERhdGEpICYmXG4gICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlNYXAuaGFzKHNwZWNpZmljRGF0YS5kaWN0aW9uYXJ5VVVJRClcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYWluRGljdGlvbmFyeSA9IGRpY3Rpb25hcnlNYXAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YS5kaWN0aW9uYXJ5VVVJRFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWFpbkRpY3Rpb25hcnk/LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IG1haW5EaWN0aW9uYXJ5LnZhbHVlcz8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICh2KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2LmlkID09PSAodmFsdWVGcm9tRmlsbERhdGEuaWQgfHwgdmFsdWVGcm9tRmlsbERhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VEaWN0aW9uYXJpZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5TWFwLnZhbHVlcygpXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpY3QpID0+IGRpY3QucmVmZXJlbmNlSWQgPT09IG1haW5EaWN0aW9uYXJ5LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlZkRpY3Qgb2YgcmVmZXJlbmNlRGljdGlvbmFyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZlZhbHVlID0gcmVmRGljdC52YWx1ZXM/LmZpbmQoKHYpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5yZWZlcmVuY2VWYWx1ZXMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydikgPT4gcnYuaWQgPT09IHNlbGVjdGVkVmFsdWUuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZlZhbHVlICYmIHJlZkRpY3QudXVpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkNvbnRyb2xJZCA9IGAke2NvbnRyb2xJZH1fcmVmZXJlbmNlXyR7cmVmRGljdC51dWlkfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxbcmVmQ29udHJvbElkXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlbFBvcHVsYXRpb25IZWxwZXIubWFwRGljdGlvbmFyeVZhbHVlRHRvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWxsZWRWYWx1ZSAhPT0gbnVsbCAmJiBmaWxsZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRnJvbUZpbGxEYXRhID0gZmlsbGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZUZyb21GaWxsRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBtb2RlbFtjb250cm9sSWRdID0gdmFsdWVGcm9tRmlsbERhdGE7XG4gICAgICAgICAgICAgICAgICB2YWx1ZVNldEZvckNvbnRyb2wgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghdmFsdWVTZXRGb3JDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZUZvck1vZGVsOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xEZWZpbml0aW9uLnR5cGUgPT09IFN0ZXBDb250cm9sVHlwZS5EaWN0aW9uYXJ5KSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzcGVjaWZpY0RhdGEgPVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sRGVmaW5pdGlvbi5zcGVjaWZpY0NvbnRyb2xEYXRhIGFzIERpY3Rpb25hcnlDb250cm9sRGF0YTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzUmFkaW8gPSBzcGVjaWZpY0RhdGEuc2hvd0FzUmFkaW9CdXR0b25zTGlzdCA9PT0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCA9XG4gICAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YS5kaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQ7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmFkaW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVGb3JNb2RlbCA9IGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0gZGljdGlvbmFyeU1hcC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuZGljdGlvbmFyeVVVSURcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZUZvck1vZGVsID1cbiAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5maW5kQW5kTWFwRGVmYXVsdFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSByZWZlcmVuY2UgdmFsdWVzIGZvciBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVGb3JNb2RlbCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlNYXAuaGFzKHNwZWNpZmljRGF0YS5kaWN0aW9uYXJ5VVVJRClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFpbkRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5TWFwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YS5kaWN0aW9uYXJ5VVVJRFxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG1haW5EaWN0aW9uYXJ5Py5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IG1haW5EaWN0aW9uYXJ5LnZhbHVlcz8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHYpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5pZCA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdFZhbHVlRm9yTW9kZWwuaWQgfHwgZGVmYXVsdFZhbHVlRm9yTW9kZWwpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VEaWN0aW9uYXJpZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlNYXAudmFsdWVzKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpY3QpID0+IGRpY3QucmVmZXJlbmNlSWQgPT09IG1haW5EaWN0aW9uYXJ5LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZWZEaWN0IG9mIHJlZmVyZW5jZURpY3Rpb25hcmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZlZhbHVlID0gcmVmRGljdC52YWx1ZXM/LmZpbmQoKHYpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LnJlZmVyZW5jZVZhbHVlcy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnYpID0+IHJ2LmlkID09PSBzZWxlY3RlZFZhbHVlLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZWYWx1ZSAmJiByZWZEaWN0LnV1aWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkNvbnRyb2xJZCA9IGAke2NvbnRyb2xJZH1fcmVmZXJlbmNlXyR7cmVmRGljdC51dWlkfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbFtyZWZDb250cm9sSWRdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZWxQb3B1bGF0aW9uSGVscGVyLm1hcERpY3Rpb25hcnlWYWx1ZUR0byhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgY29udHJvbERlZmluaXRpb24udHlwZSA9PT0gU3RlcENvbnRyb2xUeXBlLkNoZWNrQm94XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzcGVjaWZpY0RhdGEgPVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sRGVmaW5pdGlvbi5zcGVjaWZpY0NvbnRyb2xEYXRhIGFzIGFueTtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhPy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykgJiZcbiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhLmRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVGb3JNb2RlbCA9IHNwZWNpZmljRGF0YS5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsdWVGb3JNb2RlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBtb2RlbFtjb250cm9sSWRdID0gZGVmYXVsdFZhbHVlRm9yTW9kZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IGFwcGx5IGluaGVyaXRlZCBmaWVsZHMgZm9yIGNvbnRyb2xzIG5vdCBwb3B1bGF0ZWQgZnJvbSBmbHV4XG4gICAgaWYgKGZpbGxEYXRhLmluaGVyaXRlZEZpZWxkcykge1xuICAgICAgZm9yIChjb25zdCBzdGVwIG9mIGZsdXgpIHtcbiAgICAgICAgaWYgKCFzdGVwLnNlY3Rpb25zKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHN0ZXAuc2VjdGlvbnMpIHtcbiAgICAgICAgICBpZiAoIXNlY3Rpb24uY29udHJvbHMpIGNvbnRpbnVlO1xuICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbERlZiBvZiBzZWN0aW9uLmNvbnRyb2xzKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sSWQgPSBjb250cm9sRGVmLmlkZW50aWZpZXI7XG4gICAgICAgICAgICBpZiAoIWNvbnRyb2xJZCB8fCBtb2RlbFtjb250cm9sSWRdICE9PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBpbmhlcml0ZWRWYWx1ZSA9IGZpbGxEYXRhLmluaGVyaXRlZEZpZWxkc1tjb250cm9sSWRdO1xuICAgICAgICAgICAgaWYgKGluaGVyaXRlZFZhbHVlID09PSB1bmRlZmluZWQgfHwgaW5oZXJpdGVkVmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoY29udHJvbERlZi50eXBlID09PSBTdGVwQ29udHJvbFR5cGUuRGljdGlvbmFyeSkge1xuICAgICAgICAgICAgICBjb25zdCBzcGVjaWZpY0RhdGEgPVxuICAgICAgICAgICAgICAgIGNvbnRyb2xEZWYuc3BlY2lmaWNDb250cm9sRGF0YSBhcyBEaWN0aW9uYXJ5Q29udHJvbERhdGE7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUmFkaW8gPSBzcGVjaWZpY0RhdGEuc2hvd0FzUmFkaW9CdXR0b25zTGlzdCA9PT0gdHJ1ZTtcblxuICAgICAgICAgICAgICAvLyBFbnJpY2hlZCBmb3JtYXQ6IHsgZmlsbFZhbHVlLCBmaWxsVmFsdWVJZCwgZmlsbFZhbHVlSWRzLCBkaWN0aW9uYXJ5VVVJRCB9XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0eXBlb2YgaW5oZXJpdGVkVmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoaW5oZXJpdGVkVmFsdWUpICYmXG4gICAgICAgICAgICAgICAgaW5oZXJpdGVkVmFsdWUuZGljdGlvbmFyeVVVSURcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlNYXAuZ2V0KFxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhLmRpY3Rpb25hcnlVVUlEXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIC8vIE11bHRpLXNlbGVjdFxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YS5hbGxvd011bHRpcGxlU2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgICBpbmhlcml0ZWRWYWx1ZS5maWxsVmFsdWVJZHMgJiZcbiAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoaW5oZXJpdGVkVmFsdWUuZmlsbFZhbHVlSWRzKSAmJlxuICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkVmFsdWUuZmlsbFZhbHVlSWRzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZFZhbHVlczogRGljdGlvbmFyeVZhbHVlW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWVJZCBvZiBpbmhlcml0ZWRWYWx1ZS5maWxsVmFsdWVJZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtZXJpY0lkID1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVJZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyc2VJbnQodmFsdWVJZCwgMTApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHZhbHVlSWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRHRvID0gZGljdGlvbmFyeT8udmFsdWVzPy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICh2OiBhbnkpID0+IHYuaWQgPT09IG51bWVyaWNJZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVEdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgTW9kZWxQb3B1bGF0aW9uSGVscGVyLm1hcERpY3Rpb25hcnlWYWx1ZUR0byhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVEdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRWYWx1ZXMucHVzaChtYXBwZWQpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZFZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsW2NvbnRyb2xJZF0gPSBtYXBwZWRWYWx1ZXM7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmhlcml0ZWRWYWx1ZS5maWxsVmFsdWVJZCAhPT0gdW5kZWZpbmVkICYmIGluaGVyaXRlZFZhbHVlLmZpbGxWYWx1ZUlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTaW5nbGUtc2VsZWN0XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRJZCA9IHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICBTdHJpbmcoaW5oZXJpdGVkVmFsdWUuZmlsbFZhbHVlSWQpLFxuICAgICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4ocGFyc2VkSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1JhZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbW9kZWxbY29udHJvbElkXSA9IHBhcnNlZElkO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRHRvID0gZGljdGlvbmFyeT8udmFsdWVzPy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHY6IGFueSkgPT4gdi5pZCA9PT0gcGFyc2VkSWRcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZUR0bykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxbY29udHJvbElkXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5tYXBEaWN0aW9uYXJ5VmFsdWVEdG8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVEdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGlibGU6IHNpbXBsZSB2YWx1ZSAob2xkIGZvcm1hdClcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRJZCA9IHBhcnNlSW50KFN0cmluZyhpbmhlcml0ZWRWYWx1ZSksIDEwKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZElkKSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGlzUmFkaW8pIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxbY29udHJvbElkXSA9IHBhcnNlZElkO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlNYXAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YS5kaWN0aW9uYXJ5VVVJRFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUR0byA9IGRpY3Rpb25hcnk/LnZhbHVlcz8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAodjogYW55KSA9PiB2LmlkID09PSBwYXJzZWRJZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVEdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICBtb2RlbFtjb250cm9sSWRdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5tYXBEaWN0aW9uYXJ5VmFsdWVEdG8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRHRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1vZGVsW2NvbnRyb2xJZF0gPSBpbmhlcml0ZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBwcmVjb21wbGV0aW9uIGZvciBNYW51YWxJbnB1dCBjb250cm9sc1xuICAgIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5hcHBseVByZWNvbXBsZXRpb25Ub01vZGVsKG1vZGVsLCBmbHV4KTtcblxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVByZWNvbXBsZXRpb25Ub01vZGVsKFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGZsdXg6IGFueVtdXG4gICk6IHZvaWQge1xuICAgIGlmICghZmx1eCkgcmV0dXJuO1xuXG4gICAgZm9yIChjb25zdCBzdGVwIG9mIGZsdXgpIHtcbiAgICAgIGlmIChzdGVwLnNlY3Rpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzdGVwLnNlY3Rpb25zKSB7XG4gICAgICAgICAgaWYgKHNlY3Rpb24uY29udHJvbHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbERlZmluaXRpb24gb2Ygc2VjdGlvbi5jb250cm9scykge1xuICAgICAgICAgICAgICBjb25zdCBjb250cm9sSWQgPSBjb250cm9sRGVmaW5pdGlvbi5pZGVudGlmaWVyO1xuICAgICAgICAgICAgICBpZiAoIWNvbnRyb2xJZCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgLy8gT25seSBwcm9jZXNzIE1hbnVhbElucHV0IGNvbnRyb2xzIHdpdGggcHJlY29tcGxldGlvbiBlbmFibGVkXG4gICAgICAgICAgICAgIGlmIChjb250cm9sRGVmaW5pdGlvbi50eXBlID09PSBTdGVwQ29udHJvbFR5cGUuTWFudWFsSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGVjaWZpY0RhdGEgPVxuICAgICAgICAgICAgICAgICAgY29udHJvbERlZmluaXRpb24uc3BlY2lmaWNDb250cm9sRGF0YSBhcyBNYW51YWxJbnB1dENvbnRyb2xEYXRhO1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhPy5pc1ByZWNvbXBsZXRhYmxlICYmXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGE/LnByZWNvbXBsZXRpb25GaWVsZElkXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsW2NvbnRyb2xJZF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICBtb2RlbFtjb250cm9sSWRdID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsW2NvbnRyb2xJZF0gPT09ICcnXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSBtb2RlbFtzcGVjaWZpY0RhdGEucHJlY29tcGxldGlvbkZpZWxkSWRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlVmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlVmFsdWUgIT09ICcnXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBkaWN0aW9uYXJ5IHZhbHVlcyAtIGV4dHJhY3QgdGhlIGRpc3BsYXkgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVZhbHVlID09PSAnb2JqZWN0JyAmJiBzb3VyY2VWYWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbFtjb250cm9sSWRdID0gc291cmNlVmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxbY29udHJvbElkXSA9IHNvdXJjZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhcHBseURlZmF1bHRzVG9Nb2RlbChcbiAgICBmbHV4OiBhbnlbXSxcbiAgICBkaWN0aW9uYXJ5TWFwOiBNYXA8c3RyaW5nLCBEaWN0aW9uYXJ5RHRvPixcbiAgICBhdmFpbGFibGVMYW5ndWFnZXM/OiBMYW5ndWFnZVtdXG4gICk6IGFueSB7XG4gICAgY29uc3QgbW9kZWwgPSB7fTtcbiAgICBpZiAoIWZsdXgpIHJldHVybiBtb2RlbDtcblxuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBmbHV4KSB7XG4gICAgICBpZiAoc3RlcC5zZWN0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc3RlcC5zZWN0aW9ucykge1xuICAgICAgICAgIGlmIChzZWN0aW9uLmNvbnRyb2xzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xEZWZpbml0aW9uIG9mIHNlY3Rpb24uY29udHJvbHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29udHJvbElkID0gY29udHJvbERlZmluaXRpb24uaWRlbnRpZmllcjtcbiAgICAgICAgICAgICAgaWYgKCFjb250cm9sSWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlRm9yTW9kZWw6IGFueSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgaWYgKGNvbnRyb2xEZWZpbml0aW9uLnR5cGUgPT09IFN0ZXBDb250cm9sVHlwZS5EaWN0aW9uYXJ5KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNEYXRhID1cbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xEZWZpbml0aW9uLnNwZWNpZmljQ29udHJvbERhdGEgYXMgRGljdGlvbmFyeUNvbnRyb2xEYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmFkaW8gPSBzcGVjaWZpY0RhdGEuc2hvd0FzUmFkaW9CdXR0b25zTGlzdCA9PT0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQgPVxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhLmRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZDtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoaXNSYWRpbykge1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVGb3JNb2RlbCA9IGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5TWFwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuZGljdGlvbmFyeVVVSURcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlRm9yTW9kZWwgPVxuICAgICAgICAgICAgICAgICAgICAgIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5maW5kQW5kTWFwRGVmYXVsdFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlcyA/PyBbXVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2xEZWZpbml0aW9uLnR5cGUgPT09IFN0ZXBDb250cm9sVHlwZS5DaGVja0JveCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwZWNpZmljRGF0YSA9XG4gICAgICAgICAgICAgICAgICBjb250cm9sRGVmaW5pdGlvbi5zcGVjaWZpY0NvbnRyb2xEYXRhIGFzIGFueTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGE/Lmhhc093blByb3BlcnR5KCdkZWZhdWx0VmFsdWUnKSAmJlxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhLmRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVGb3JNb2RlbCA9IHNwZWNpZmljRGF0YS5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsdWVGb3JNb2RlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgKG1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2NvbnRyb2xJZF0gPVxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlRm9yTW9kZWw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBwcmVjb21wbGV0aW9uIGZvciBNYW51YWxJbnB1dCBjb250cm9sc1xuICAgIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5hcHBseVByZWNvbXBsZXRpb25Ub01vZGVsKFxuICAgICAgbW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAgIGZsdXhcbiAgICApO1xuXG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgc3RhdGljIG1hcERpY3Rpb25hcnlWYWx1ZUR0byhcbiAgICBkdG86IGFueSxcbiAgICBhdmFpbGFibGVMYW5ndWFnZXM6IExhbmd1YWdlW11cbiAgKTogRGljdGlvbmFyeVZhbHVlIHwgbnVsbCB7XG4gICAgaWYgKCFkdG8gfHwgdHlwZW9mIGR0by5pZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2xhdGlvbnNEdG8gPSBkdG8udmFsdWVUcmFuc2xhdGlvbnMgfHwgZHRvLnRyYW5zbGF0aW9ucyB8fCBbXTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGR0by5pZCxcbiAgICAgIG5hbWU6IGR0by5uYW1lID8/ICcnLFxuICAgICAgYWN0aXZlOiBkdG8uYWN0aXZlID8/IGZhbHNlLFxuICAgICAgbG9ja2VkOiBkdG8ubG9ja2VkID8/IGZhbHNlLFxuICAgICAgdHJhbnNsYXRpb25zOlxuICAgICAgICB0cmFuc2xhdGlvbnNEdG8ubWFwKCh0OiBUcmFuc2xhdGlvbkR0byk6IFRyYW5zbGF0aW9uID0+IHtcbiAgICAgICAgICBjb25zdCBsYW5nID0gYXZhaWxhYmxlTGFuZ3VhZ2VzPy5maW5kKChsKSA9PiBsLmlkID09PSB0Lmxhbmd1YWdlSWQpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYW5ndWFnZUlkOiB0Lmxhbmd1YWdlSWQsXG4gICAgICAgICAgICBsYW5ndWFnZUlzbzogbGFuZz8uaXNvID8/ICcnLFxuICAgICAgICAgICAgdmFsdWU6IHQudmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSkgfHwgW10sXG4gICAgICBjaGlsZERpY3Rpb25hcnlJZDogZHRvLmNoaWxkRGljdGlvbmFyeUlkLFxuICAgICAgY2hpbGREaWN0aW9uYXJ5VVVJRDogZHRvLmNoaWxkRGljdGlvbmFyeVVVSUQsXG4gICAgICByZWZlcmVuY2VWYWx1ZXM6IGR0by5yZWZlcmVuY2VWYWx1ZXMgfHwgW10sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmaW5kQW5kTWFwRGVmYXVsdFZhbHVlKFxuICAgIGRpY3Rpb25hcnk6IERpY3Rpb25hcnlEdG8gfCB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlSWQ6IG51bWJlcixcbiAgICBhdmFpbGFibGVMYW5ndWFnZXM6IExhbmd1YWdlW11cbiAgKTogRGljdGlvbmFyeVZhbHVlIHwgbnVsbCB7XG4gICAgaWYgKCFkaWN0aW9uYXJ5IHx8ICFkaWN0aW9uYXJ5LnZhbHVlcyB8fCBkZWZhdWx0VmFsdWVJZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlRHRvID0gZGljdGlvbmFyeS52YWx1ZXMuZmluZChcbiAgICAgICh2KSA9PiB2LmlkID09PSBkZWZhdWx0VmFsdWVJZFxuICAgICk7XG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlRHRvKSB7XG4gICAgICBjb25zdCBtYXBwZWRWYWx1ZTogRGljdGlvbmFyeVZhbHVlID0ge1xuICAgICAgICBpZDogZGVmYXVsdFZhbHVlRHRvLmlkLFxuICAgICAgICBuYW1lOiBkZWZhdWx0VmFsdWVEdG8ubmFtZSxcbiAgICAgICAgYWN0aXZlOiBkZWZhdWx0VmFsdWVEdG8uYWN0aXZlLFxuICAgICAgICBsb2NrZWQ6IGRlZmF1bHRWYWx1ZUR0by5sb2NrZWQsXG4gICAgICAgIHRyYW5zbGF0aW9uczpcbiAgICAgICAgICBkZWZhdWx0VmFsdWVEdG8udmFsdWVUcmFuc2xhdGlvbnM/Lm1hcChcbiAgICAgICAgICAgICh0OiBUcmFuc2xhdGlvbkR0byk6IFRyYW5zbGF0aW9uID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFuZyA9IGF2YWlsYWJsZUxhbmd1YWdlcz8uZmluZChcbiAgICAgICAgICAgICAgICAobCkgPT4gbC5pZCA9PT0gdC5sYW5ndWFnZUlkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VJZDogdC5sYW5ndWFnZUlkLFxuICAgICAgICAgICAgICAgIGxhbmd1YWdlSXNvOiBsYW5nPy5pc28gPz8gJycsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHQudmFsdWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSB8fCBbXSxcbiAgICAgICAgY2hpbGREaWN0aW9uYXJ5SWQ6IGRlZmF1bHRWYWx1ZUR0by5jaGlsZERpY3Rpb25hcnlJZCxcbiAgICAgICAgY2hpbGREaWN0aW9uYXJ5VVVJRDogZGVmYXVsdFZhbHVlRHRvLmNoaWxkRGljdGlvbmFyeVVVSUQsXG4gICAgICAgIHJlZmVyZW5jZVZhbHVlczogW10sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG1hcHBlZFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcG9wdWxhdGlvbi5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL21vZGVsLXBvcHVsYXRpb24uaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxlQUFlLEVBQWlELE1BQU0sc0JBQXNCLENBQUM7QUFJdEcsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxNQUFNLENBQUMseUJBQXlCLENBQzlCLFFBQWEsRUFDYixJQUFXLEVBQ1gsYUFBeUMsRUFDekMsa0JBQThCO1FBRTlCLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0IsT0FBTyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUF3QixFQUFFLENBQUM7UUFFdEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO1FBQ25ELEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNsQixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3JCLEtBQUssTUFBTSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUN2QyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQ0FDdEIsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7NEJBQ3RELENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztR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IERpY3Rpb25hcnlEdG8sIERpY3Rpb25hcnlWYWx1ZSwgVHJhbnNsYXRpb25EdG8sIFRyYW5zbGF0aW9uIH0gZnJvbSBcIi4vbW9kZWxzL2RpY3Rpb25hcnkubW9kZWxcIjtcbmltcG9ydCB7IFN0ZXBDb250cm9sVHlwZSwgRGljdGlvbmFyeUNvbnRyb2xEYXRhLCBNYW51YWxJbnB1dENvbnRyb2xEYXRhIH0gZnJvbSBcIi4vbW9kZWxzL2Zvcm1zLm1vZGVsXCI7XG5pbXBvcnQgeyBMYW5ndWFnZSB9IGZyb20gXCIuL21vZGVscy9sYW5ndWFnZS5tb2RlbFwiO1xuXG5cbmV4cG9ydCBjbGFzcyBNb2RlbFBvcHVsYXRpb25IZWxwZXIge1xuICBzdGF0aWMgcG9wdWxhdGVNb2RlbFdpdGhGaWxsRGF0YShcbiAgICBmaWxsRGF0YTogYW55LFxuICAgIGZsdXg6IGFueVtdLFxuICAgIGRpY3Rpb25hcnlNYXA6IE1hcDxzdHJpbmcsIERpY3Rpb25hcnlEdG8+LFxuICAgIGF2YWlsYWJsZUxhbmd1YWdlczogTGFuZ3VhZ2VbXVxuICApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBpZiAoIWZpbGxEYXRhPy5mbHV4IHx8ICFmbHV4KSB7XG4gICAgICByZXR1cm4gTW9kZWxQb3B1bGF0aW9uSGVscGVyLmFwcGx5RGVmYXVsdHNUb01vZGVsKGZsdXgsIGRpY3Rpb25hcnlNYXApO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICBjb25zdCBmaWxsRGF0YUNvbnRyb2xzTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgZmlsbERhdGEuZmx1eCkge1xuICAgICAgaWYgKHN0ZXAuc2VjdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHN0ZXAuc2VjdGlvbnMpIHtcbiAgICAgICAgICBpZiAoc2VjdGlvbi5jb250cm9scykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIHNlY3Rpb24uY29udHJvbHMpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbnRyb2wuY29udHJvbElkKSB7XG4gICAgICAgICAgICAgICAgZmlsbERhdGFDb250cm9sc01hcC5zZXQoY29udHJvbC5jb250cm9sSWQsIGNvbnRyb2wpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdGVwIG9mIGZsdXgpIHtcbiAgICAgIGlmIChzdGVwLnNlY3Rpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzdGVwLnNlY3Rpb25zKSB7XG4gICAgICAgICAgaWYgKHNlY3Rpb24uY29udHJvbHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbERlZmluaXRpb24gb2Ygc2VjdGlvbi5jb250cm9scykge1xuICAgICAgICAgICAgICBjb25zdCBjb250cm9sSWQgPSBjb250cm9sRGVmaW5pdGlvbi5pZGVudGlmaWVyO1xuICAgICAgICAgICAgICBpZiAoIWNvbnRyb2xJZCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgbGV0IHZhbHVlU2V0Rm9yQ29udHJvbCA9IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zdCBmaWxsZWRDb250cm9sRGF0YSA9IGZpbGxEYXRhQ29udHJvbHNNYXAuZ2V0KGNvbnRyb2xJZCk7XG5cbiAgICAgICAgICAgICAgaWYgKGZpbGxlZENvbnRyb2xEYXRhKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlRnJvbUZpbGxEYXRhOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbGV0IGZpbGxlZFZhbHVlSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGZpbGxlZENvbnRyb2xEYXRhLmZpbGxWYWx1ZUlkICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICBmaWxsZWRDb250cm9sRGF0YS5maWxsVmFsdWVJZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRJZCA9IHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICBTdHJpbmcoZmlsbGVkQ29udHJvbERhdGEuZmlsbFZhbHVlSWQpLFxuICAgICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGZpbGxlZFZhbHVlSWQgPSAhaXNOYU4ocGFyc2VkSWQpID8gcGFyc2VkSWQgOiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmaWxsZWRWYWx1ZSA9IGZpbGxlZENvbnRyb2xEYXRhLmZpbGxWYWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sRGVmaW5pdGlvbi50eXBlID09PSBTdGVwQ29udHJvbFR5cGUuRGljdGlvbmFyeSkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNEYXRhID1cbiAgICAgICAgICAgICAgICAgICAgY29udHJvbERlZmluaXRpb24uc3BlY2lmaWNDb250cm9sRGF0YSBhcyBEaWN0aW9uYXJ5Q29udHJvbERhdGE7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc1JhZGlvID0gc3BlY2lmaWNEYXRhLnNob3dBc1JhZGlvQnV0dG9uc0xpc3QgPT09IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBtdWx0aS1zZWxlY3QgdmFsdWVzIGZpcnN0XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWxsVmFsdWVJZHMgPSBmaWxsZWRDb250cm9sRGF0YS5maWxsVmFsdWVJZHM7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YS5hbGxvd011bHRpcGxlU2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgIGZpbGxWYWx1ZUlkcyAmJlxuICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGZpbGxWYWx1ZUlkcykgJiZcbiAgICAgICAgICAgICAgICAgICAgZmlsbFZhbHVlSWRzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0gZGljdGlvbmFyeU1hcC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhLmRpY3Rpb25hcnlVVUlEXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZFZhbHVlczogRGljdGlvbmFyeVZhbHVlW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZUlkIG9mIGZpbGxWYWx1ZUlkcykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWVyaWNJZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVJZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUludCh2YWx1ZUlkLCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZUlkO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRHRvID0gZGljdGlvbmFyeT8udmFsdWVzPy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHYpID0+IHYuaWQgPT09IG51bWVyaWNJZFxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlRHRvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlbFBvcHVsYXRpb25IZWxwZXIubWFwRGljdGlvbmFyeVZhbHVlRHRvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRHRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRWYWx1ZXMucHVzaChtYXBwZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGVkVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZyb21GaWxsRGF0YSA9IG1hcHBlZFZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxsZWRWYWx1ZUlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1JhZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVGcm9tRmlsbERhdGEgPSBmaWxsZWRWYWx1ZUlkO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5TWFwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YS5kaWN0aW9uYXJ5VVVJRFxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEdG8gPSBkaWN0aW9uYXJ5Py52YWx1ZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAodikgPT4gdi5pZCA9PT0gZmlsbGVkVmFsdWVJZFxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlRHRvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZyb21GaWxsRGF0YSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5tYXBEaWN0aW9uYXJ5VmFsdWVEdG8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVEdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBmaWxsZWRWYWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBmaWxsZWRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmFkaW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZyb21GaWxsRGF0YSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZmlsbGVkVmFsdWUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gZmlsbGVkVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWxsZWRWYWx1ZSA9PT0gJ29iamVjdCcgJiYgZmlsbGVkVmFsdWU/LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZyb21GaWxsRGF0YSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5tYXBEaWN0aW9uYXJ5VmFsdWVEdG8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbGVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5TWFwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhLmRpY3Rpb25hcnlVVUlEXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEdG8gPSBkaWN0aW9uYXJ5Py52YWx1ZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICh2KSA9PiB2LmlkID09PSBmaWxsZWRWYWx1ZSB8fCB2Lm5hbWUgPT09IGZpbGxlZFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlRHRvKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZyb21GaWxsRGF0YSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZWxQb3B1bGF0aW9uSGVscGVyLm1hcERpY3Rpb25hcnlWYWx1ZUR0byhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRHRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHJlZmVyZW5jZSB2YWx1ZXMgKG9ubHkgZm9yIHNpbmdsZS1zZWxlY3QpXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRnJvbUZpbGxEYXRhICYmXG4gICAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHZhbHVlRnJvbUZpbGxEYXRhKSAmJlxuICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5TWFwLmhhcyhzcGVjaWZpY0RhdGEuZGljdGlvbmFyeVVVSUQpXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFpbkRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5TWFwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuZGljdGlvbmFyeVVVSURcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1haW5EaWN0aW9uYXJ5Py5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBtYWluRGljdGlvbmFyeS52YWx1ZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAodikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdi5pZCA9PT0gKHZhbHVlRnJvbUZpbGxEYXRhLmlkIHx8IHZhbHVlRnJvbUZpbGxEYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlRGljdGlvbmFyaWVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeU1hcC52YWx1ZXMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChkaWN0KSA9PiBkaWN0LnJlZmVyZW5jZUlkID09PSBtYWluRGljdGlvbmFyeS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZWZEaWN0IG9mIHJlZmVyZW5jZURpY3Rpb25hcmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZWYWx1ZSA9IHJlZkRpY3QudmFsdWVzPy5maW5kKCh2KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYucmVmZXJlbmNlVmFsdWVzLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnYpID0+IHJ2LmlkID09PSBzZWxlY3RlZFZhbHVlLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZWYWx1ZSAmJiByZWZEaWN0LnV1aWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZDb250cm9sSWQgPSBgJHtjb250cm9sSWR9X3JlZmVyZW5jZV8ke3JlZkRpY3QudXVpZH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsW3JlZkNvbnRyb2xJZF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZWxQb3B1bGF0aW9uSGVscGVyLm1hcERpY3Rpb25hcnlWYWx1ZUR0byhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmlsbGVkVmFsdWUgIT09IG51bGwgJiYgZmlsbGVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZUZyb21GaWxsRGF0YSA9IGZpbGxlZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsdWVGcm9tRmlsbERhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgbW9kZWxbY29udHJvbElkXSA9IHZhbHVlRnJvbUZpbGxEYXRhO1xuICAgICAgICAgICAgICAgICAgdmFsdWVTZXRGb3JDb250cm9sID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIXZhbHVlU2V0Rm9yQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWVGb3JNb2RlbDogYW55ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sRGVmaW5pdGlvbi50eXBlID09PSBTdGVwQ29udHJvbFR5cGUuRGljdGlvbmFyeSkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNEYXRhID1cbiAgICAgICAgICAgICAgICAgICAgY29udHJvbERlZmluaXRpb24uc3BlY2lmaWNDb250cm9sRGF0YSBhcyBEaWN0aW9uYXJ5Q29udHJvbERhdGE7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc1JhZGlvID0gc3BlY2lmaWNEYXRhLnNob3dBc1JhZGlvQnV0dG9uc0xpc3QgPT09IHRydWU7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQgPVxuICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1JhZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlRm9yTW9kZWwgPSBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlNYXAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhLmRpY3Rpb25hcnlVVUlEXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVGb3JNb2RlbCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBNb2RlbFBvcHVsYXRpb25IZWxwZXIuZmluZEFuZE1hcERlZmF1bHRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgcmVmZXJlbmNlIHZhbHVlcyBmb3IgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlRm9yTW9kZWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5TWFwLmhhcyhzcGVjaWZpY0RhdGEuZGljdGlvbmFyeVVVSUQpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1haW5EaWN0aW9uYXJ5ID0gZGljdGlvbmFyeU1hcC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuZGljdGlvbmFyeVVVSURcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWluRGljdGlvbmFyeT8uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBtYWluRGljdGlvbmFyeS52YWx1ZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICh2KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuaWQgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHRWYWx1ZUZvck1vZGVsLmlkIHx8IGRlZmF1bHRWYWx1ZUZvck1vZGVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlRGljdGlvbmFyaWVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5TWFwLnZhbHVlcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaWN0KSA9PiBkaWN0LnJlZmVyZW5jZUlkID09PSBtYWluRGljdGlvbmFyeS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVmRGljdCBvZiByZWZlcmVuY2VEaWN0aW9uYXJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZWYWx1ZSA9IHJlZkRpY3QudmFsdWVzPy5maW5kKCh2KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5yZWZlcmVuY2VWYWx1ZXMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ2KSA9PiBydi5pZCA9PT0gc2VsZWN0ZWRWYWx1ZS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmVmFsdWUgJiYgcmVmRGljdC51dWlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZDb250cm9sSWQgPSBgJHtjb250cm9sSWR9X3JlZmVyZW5jZV8ke3JlZkRpY3QudXVpZH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxbcmVmQ29udHJvbElkXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5tYXBEaWN0aW9uYXJ5VmFsdWVEdG8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xEZWZpbml0aW9uLnR5cGUgPT09IFN0ZXBDb250cm9sVHlwZS5DaGVja0JveFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNEYXRhID1cbiAgICAgICAgICAgICAgICAgICAgY29udHJvbERlZmluaXRpb24uc3BlY2lmaWNDb250cm9sRGF0YSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YT8uaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpICYmXG4gICAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YS5kZWZhdWx0VmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlRm9yTW9kZWwgPSBzcGVjaWZpY0RhdGEuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlRm9yTW9kZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgbW9kZWxbY29udHJvbElkXSA9IGRlZmF1bHRWYWx1ZUZvck1vZGVsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrOiBhcHBseSBpbmhlcml0ZWQgZmllbGRzIGZvciBjb250cm9scyBub3QgcG9wdWxhdGVkIGZyb20gZmx1eFxuICAgIGlmIChmaWxsRGF0YS5pbmhlcml0ZWRGaWVsZHMpIHtcbiAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiBmbHV4KSB7XG4gICAgICAgIGlmICghc3RlcC5zZWN0aW9ucykgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzdGVwLnNlY3Rpb25zKSB7XG4gICAgICAgICAgaWYgKCFzZWN0aW9uLmNvbnRyb2xzKSBjb250aW51ZTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xEZWYgb2Ygc2VjdGlvbi5jb250cm9scykge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbElkID0gY29udHJvbERlZi5pZGVudGlmaWVyO1xuICAgICAgICAgICAgaWYgKCFjb250cm9sSWQgfHwgbW9kZWxbY29udHJvbElkXSAhPT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgaW5oZXJpdGVkVmFsdWUgPSBmaWxsRGF0YS5pbmhlcml0ZWRGaWVsZHNbY29udHJvbElkXTtcbiAgICAgICAgICAgIGlmIChpbmhlcml0ZWRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGluaGVyaXRlZFZhbHVlID09PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKGNvbnRyb2xEZWYudHlwZSA9PT0gU3RlcENvbnRyb2xUeXBlLkRpY3Rpb25hcnkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNEYXRhID1cbiAgICAgICAgICAgICAgICBjb250cm9sRGVmLnNwZWNpZmljQ29udHJvbERhdGEgYXMgRGljdGlvbmFyeUNvbnRyb2xEYXRhO1xuICAgICAgICAgICAgICBjb25zdCBpc1JhZGlvID0gc3BlY2lmaWNEYXRhLnNob3dBc1JhZGlvQnV0dG9uc0xpc3QgPT09IHRydWU7XG5cbiAgICAgICAgICAgICAgLy8gRW5yaWNoZWQgZm9ybWF0OiB7IGZpbGxWYWx1ZSwgZmlsbFZhbHVlSWQsIGZpbGxWYWx1ZUlkcywgZGljdGlvbmFyeVVVSUQgfVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdHlwZW9mIGluaGVyaXRlZFZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGluaGVyaXRlZFZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIGluaGVyaXRlZFZhbHVlLmRpY3Rpb25hcnlVVUlEXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5TWFwLmdldChcbiAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YS5kaWN0aW9uYXJ5VVVJRFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAvLyBNdWx0aS1zZWxlY3RcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkVmFsdWUuZmlsbFZhbHVlSWRzICYmXG4gICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGluaGVyaXRlZFZhbHVlLmZpbGxWYWx1ZUlkcykgJiZcbiAgICAgICAgICAgICAgICAgIGluaGVyaXRlZFZhbHVlLmZpbGxWYWx1ZUlkcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZXM6IERpY3Rpb25hcnlWYWx1ZVtdID0gW107XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlSWQgb2YgaW5oZXJpdGVkVmFsdWUuZmlsbFZhbHVlSWRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWVyaWNJZCA9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlSWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHBhcnNlSW50KHZhbHVlSWQsIDEwKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZUlkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUR0byA9IGRpY3Rpb25hcnk/LnZhbHVlcz8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAodjogYW55KSA9PiB2LmlkID09PSBudW1lcmljSWRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlRHRvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5tYXBEaWN0aW9uYXJ5VmFsdWVEdG8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRHRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkVmFsdWVzLnB1c2gobWFwcGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChtYXBwZWRWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbFtjb250cm9sSWRdID0gbWFwcGVkVmFsdWVzO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5oZXJpdGVkVmFsdWUuZmlsbFZhbHVlSWQgIT09IHVuZGVmaW5lZCAmJiBpbmhlcml0ZWRWYWx1ZS5maWxsVmFsdWVJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gU2luZ2xlLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkSWQgPSBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgU3RyaW5nKGluaGVyaXRlZFZhbHVlLmZpbGxWYWx1ZUlkKSxcbiAgICAgICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZElkKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSYWRpbykge1xuICAgICAgICAgICAgICAgICAgICAgIG1vZGVsW2NvbnRyb2xJZF0gPSBwYXJzZWRJZDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUR0byA9IGRpY3Rpb25hcnk/LnZhbHVlcz8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICh2OiBhbnkpID0+IHYuaWQgPT09IHBhcnNlZElkXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVEdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsW2NvbnRyb2xJZF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlbFBvcHVsYXRpb25IZWxwZXIubWFwRGljdGlvbmFyeVZhbHVlRHRvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRHRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBCYWNrd2FyZCBjb21wYXRpYmxlOiBzaW1wbGUgdmFsdWUgKG9sZCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkSWQgPSBwYXJzZUludChTdHJpbmcoaW5oZXJpdGVkVmFsdWUpLCAxMCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihwYXJzZWRJZCkpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChpc1JhZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsW2NvbnRyb2xJZF0gPSBwYXJzZWRJZDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5TWFwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuZGljdGlvbmFyeVVVSURcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEdG8gPSBkaWN0aW9uYXJ5Py52YWx1ZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgKHY6IGFueSkgPT4gdi5pZCA9PT0gcGFyc2VkSWRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlRHRvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbW9kZWxbY29udHJvbElkXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBNb2RlbFBvcHVsYXRpb25IZWxwZXIubWFwRGljdGlvbmFyeVZhbHVlRHRvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUR0byxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtb2RlbFtjb250cm9sSWRdID0gaW5oZXJpdGVkVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxzbyBhZGQgaW5oZXJpdGVkIGZpZWxkcyBub3QgbWF0Y2hpbmcgYW55IGZsdXggY29udHJvbFxuICAgIC8vIChuZWVkZWQgZm9yIGNvbXBvbmVudENvbGxlY3RlZCByZWZlcmVuY2VzIGZyb20gcGFyZW50IGZsb3dzLCBlLmcuLCBTaWduIHBob25lKVxuICAgIGlmIChmaWxsRGF0YS5pbmhlcml0ZWRGaWVsZHMpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGxEYXRhLmluaGVyaXRlZEZpZWxkcykpIHtcbiAgICAgICAgaWYgKG1vZGVsW2tleV0gIT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgICAgICAgICh2YWx1ZSBhcyBhbnkpLmRpY3Rpb25hcnlVVUlEXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGZ2ID0gKHZhbHVlIGFzIGFueSkuZmlsbFZhbHVlO1xuICAgICAgICAgIGlmIChmdiAhPT0gdW5kZWZpbmVkICYmIGZ2ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBtb2RlbFtrZXldID0gZnY7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1vZGVsW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGx5IHByZWNvbXBsZXRpb24gZm9yIE1hbnVhbElucHV0IGNvbnRyb2xzXG4gICAgTW9kZWxQb3B1bGF0aW9uSGVscGVyLmFwcGx5UHJlY29tcGxldGlvblRvTW9kZWwobW9kZWwsIGZsdXgpO1xuXG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5UHJlY29tcGxldGlvblRvTW9kZWwoXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgZmx1eDogYW55W11cbiAgKTogdm9pZCB7XG4gICAgaWYgKCFmbHV4KSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgZmx1eCkge1xuICAgICAgaWYgKHN0ZXAuc2VjdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHN0ZXAuc2VjdGlvbnMpIHtcbiAgICAgICAgICBpZiAoc2VjdGlvbi5jb250cm9scykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sRGVmaW5pdGlvbiBvZiBzZWN0aW9uLmNvbnRyb2xzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xJZCA9IGNvbnRyb2xEZWZpbml0aW9uLmlkZW50aWZpZXI7XG4gICAgICAgICAgICAgIGlmICghY29udHJvbElkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAvLyBPbmx5IHByb2Nlc3MgTWFudWFsSW5wdXQgY29udHJvbHMgd2l0aCBwcmVjb21wbGV0aW9uIGVuYWJsZWRcbiAgICAgICAgICAgICAgaWYgKGNvbnRyb2xEZWZpbml0aW9uLnR5cGUgPT09IFN0ZXBDb250cm9sVHlwZS5NYW51YWxJbnB1dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwZWNpZmljRGF0YSA9XG4gICAgICAgICAgICAgICAgICBjb250cm9sRGVmaW5pdGlvbi5zcGVjaWZpY0NvbnRyb2xEYXRhIGFzIE1hbnVhbElucHV0Q29udHJvbERhdGE7XG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGE/LmlzUHJlY29tcGxldGFibGUgJiZcbiAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YT8ucHJlY29tcGxldGlvbkZpZWxkSWRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxbY29udHJvbElkXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsW2NvbnRyb2xJZF0gPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxbY29udHJvbElkXSA9PT0gJydcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IG1vZGVsW3NwZWNpZmljRGF0YS5wcmVjb21wbGV0aW9uRmllbGRJZF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlVmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VWYWx1ZSAhPT0gJydcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGRpY3Rpb25hcnkgdmFsdWVzIC0gZXh0cmFjdCB0aGUgZGlzcGxheSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlVmFsdWUgPT09ICdvYmplY3QnICYmIHNvdXJjZVZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsW2NvbnRyb2xJZF0gPSBzb3VyY2VWYWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbFtjb250cm9sSWRdID0gc291cmNlVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFwcGx5RGVmYXVsdHNUb01vZGVsKFxuICAgIGZsdXg6IGFueVtdLFxuICAgIGRpY3Rpb25hcnlNYXA6IE1hcDxzdHJpbmcsIERpY3Rpb25hcnlEdG8+LFxuICAgIGF2YWlsYWJsZUxhbmd1YWdlcz86IExhbmd1YWdlW11cbiAgKTogYW55IHtcbiAgICBjb25zdCBtb2RlbCA9IHt9O1xuICAgIGlmICghZmx1eCkgcmV0dXJuIG1vZGVsO1xuXG4gICAgZm9yIChjb25zdCBzdGVwIG9mIGZsdXgpIHtcbiAgICAgIGlmIChzdGVwLnNlY3Rpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzdGVwLnNlY3Rpb25zKSB7XG4gICAgICAgICAgaWYgKHNlY3Rpb24uY29udHJvbHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbERlZmluaXRpb24gb2Ygc2VjdGlvbi5jb250cm9scykge1xuICAgICAgICAgICAgICBjb25zdCBjb250cm9sSWQgPSBjb250cm9sRGVmaW5pdGlvbi5pZGVudGlmaWVyO1xuICAgICAgICAgICAgICBpZiAoIWNvbnRyb2xJZCkgY29udGludWU7XG4gICAgICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWVGb3JNb2RlbDogYW55ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoY29udHJvbERlZmluaXRpb24udHlwZSA9PT0gU3RlcENvbnRyb2xUeXBlLkRpY3Rpb25hcnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGVjaWZpY0RhdGEgPVxuICAgICAgICAgICAgICAgICAgY29udHJvbERlZmluaXRpb24uc3BlY2lmaWNDb250cm9sRGF0YSBhcyBEaWN0aW9uYXJ5Q29udHJvbERhdGE7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYWRpbyA9IHNwZWNpZmljRGF0YS5zaG93QXNSYWRpb0J1dHRvbnNMaXN0ID09PSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCA9XG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChpc1JhZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZUZvck1vZGVsID0gZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlNYXAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YS5kaWN0aW9uYXJ5VVVJRFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVGb3JNb2RlbCA9XG4gICAgICAgICAgICAgICAgICAgICAgTW9kZWxQb3B1bGF0aW9uSGVscGVyLmZpbmRBbmRNYXBEZWZhdWx0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzID8/IFtdXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbERlZmluaXRpb24udHlwZSA9PT0gU3RlcENvbnRyb2xUeXBlLkNoZWNrQm94KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNEYXRhID1cbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xEZWZpbml0aW9uLnNwZWNpZmljQ29udHJvbERhdGEgYXMgYW55O1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YT8uaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpICYmXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuZGVmYXVsdFZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGEuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZUZvck1vZGVsID0gc3BlY2lmaWNEYXRhLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZUZvck1vZGVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAobW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55PilbY29udHJvbElkXSA9XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVGb3JNb2RlbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGx5IHByZWNvbXBsZXRpb24gZm9yIE1hbnVhbElucHV0IGNvbnRyb2xzXG4gICAgTW9kZWxQb3B1bGF0aW9uSGVscGVyLmFwcGx5UHJlY29tcGxldGlvblRvTW9kZWwoXG4gICAgICBtb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICAgZmx1eFxuICAgICk7XG5cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICBzdGF0aWMgbWFwRGljdGlvbmFyeVZhbHVlRHRvKFxuICAgIGR0bzogYW55LFxuICAgIGF2YWlsYWJsZUxhbmd1YWdlczogTGFuZ3VhZ2VbXVxuICApOiBEaWN0aW9uYXJ5VmFsdWUgfCBudWxsIHtcbiAgICBpZiAoIWR0byB8fCB0eXBlb2YgZHRvLmlkID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHRyYW5zbGF0aW9uc0R0byA9IGR0by52YWx1ZVRyYW5zbGF0aW9ucyB8fCBkdG8udHJhbnNsYXRpb25zIHx8IFtdO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZHRvLmlkLFxuICAgICAgbmFtZTogZHRvLm5hbWUgPz8gJycsXG4gICAgICBhY3RpdmU6IGR0by5hY3RpdmUgPz8gZmFsc2UsXG4gICAgICBsb2NrZWQ6IGR0by5sb2NrZWQgPz8gZmFsc2UsXG4gICAgICB0cmFuc2xhdGlvbnM6XG4gICAgICAgIHRyYW5zbGF0aW9uc0R0by5tYXAoKHQ6IFRyYW5zbGF0aW9uRHRvKTogVHJhbnNsYXRpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IGxhbmcgPSBhdmFpbGFibGVMYW5ndWFnZXM/LmZpbmQoKGwpID0+IGwuaWQgPT09IHQubGFuZ3VhZ2VJZCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhbmd1YWdlSWQ6IHQubGFuZ3VhZ2VJZCxcbiAgICAgICAgICAgIGxhbmd1YWdlSXNvOiBsYW5nPy5pc28gPz8gJycsXG4gICAgICAgICAgICB2YWx1ZTogdC52YWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSB8fCBbXSxcbiAgICAgIGNoaWxkRGljdGlvbmFyeUlkOiBkdG8uY2hpbGREaWN0aW9uYXJ5SWQsXG4gICAgICBjaGlsZERpY3Rpb25hcnlVVUlEOiBkdG8uY2hpbGREaWN0aW9uYXJ5VVVJRCxcbiAgICAgIHJlZmVyZW5jZVZhbHVlczogZHRvLnJlZmVyZW5jZVZhbHVlcyB8fCBbXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZpbmRBbmRNYXBEZWZhdWx0VmFsdWUoXG4gICAgZGljdGlvbmFyeTogRGljdGlvbmFyeUR0byB8IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWVJZDogbnVtYmVyLFxuICAgIGF2YWlsYWJsZUxhbmd1YWdlczogTGFuZ3VhZ2VbXVxuICApOiBEaWN0aW9uYXJ5VmFsdWUgfCBudWxsIHtcbiAgICBpZiAoIWRpY3Rpb25hcnkgfHwgIWRpY3Rpb25hcnkudmFsdWVzIHx8IGRlZmF1bHRWYWx1ZUlkID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0VmFsdWVEdG8gPSBkaWN0aW9uYXJ5LnZhbHVlcy5maW5kKFxuICAgICAgKHYpID0+IHYuaWQgPT09IGRlZmF1bHRWYWx1ZUlkXG4gICAgKTtcblxuICAgIGlmIChkZWZhdWx0VmFsdWVEdG8pIHtcbiAgICAgIGNvbnN0IG1hcHBlZFZhbHVlOiBEaWN0aW9uYXJ5VmFsdWUgPSB7XG4gICAgICAgIGlkOiBkZWZhdWx0VmFsdWVEdG8uaWQsXG4gICAgICAgIG5hbWU6IGRlZmF1bHRWYWx1ZUR0by5uYW1lLFxuICAgICAgICBhY3RpdmU6IGRlZmF1bHRWYWx1ZUR0by5hY3RpdmUsXG4gICAgICAgIGxvY2tlZDogZGVmYXVsdFZhbHVlRHRvLmxvY2tlZCxcbiAgICAgICAgdHJhbnNsYXRpb25zOlxuICAgICAgICAgIGRlZmF1bHRWYWx1ZUR0by52YWx1ZVRyYW5zbGF0aW9ucz8ubWFwKFxuICAgICAgICAgICAgKHQ6IFRyYW5zbGF0aW9uRHRvKTogVHJhbnNsYXRpb24gPT4ge1xuICAgICAgICAgICAgICBjb25zdCBsYW5nID0gYXZhaWxhYmxlTGFuZ3VhZ2VzPy5maW5kKFxuICAgICAgICAgICAgICAgIChsKSA9PiBsLmlkID09PSB0Lmxhbmd1YWdlSWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUlkOiB0Lmxhbmd1YWdlSWQsXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VJc286IGxhbmc/LmlzbyA/PyAnJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdC52YWx1ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApIHx8IFtdLFxuICAgICAgICBjaGlsZERpY3Rpb25hcnlJZDogZGVmYXVsdFZhbHVlRHRvLmNoaWxkRGljdGlvbmFyeUlkLFxuICAgICAgICBjaGlsZERpY3Rpb25hcnlVVUlEOiBkZWZhdWx0VmFsdWVEdG8uY2hpbGREaWN0aW9uYXJ5VVVJRCxcbiAgICAgICAgcmVmZXJlbmNlVmFsdWVzOiBbXSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gbWFwcGVkVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=