@eui/components 18.2.0-snapshot-1726794925687 → 18.2.0-snapshot-1727360980382

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 (47) hide show
  1. package/directives/eui-maxlength.directive.d.ts +4 -0
  2. package/directives/eui-maxlength.directive.d.ts.map +1 -1
  3. package/docs/components/EuiHeaderComponent.html +0 -4
  4. package/docs/components/EuiHeaderLogoComponent.html +2 -5
  5. package/docs/components/EuiLanguageSelectorComponent.html +25 -1
  6. package/docs/components/EuiPaginatorComponent.html +25 -1
  7. package/docs/components/EuiPopoverComponent.html +1 -26
  8. package/docs/dependencies.html +2 -2
  9. package/docs/directives/EuiMaxLengthDirective.html +7 -0
  10. package/docs/js/menu-wc.js +3 -3
  11. package/docs/js/menu-wc_es5.js +1 -1
  12. package/docs/js/search/search_index.js +2 -2
  13. package/esm2022/directives/eui-maxlength.directive.mjs +14 -2
  14. package/esm2022/eui-language-selector/language-selector.component.mjs +7 -3
  15. package/esm2022/eui-menu/eui-menu-item.component.mjs +3 -7
  16. package/esm2022/eui-paginator/eui-paginator.component.mjs +7 -3
  17. package/esm2022/eui-popover/eui-popover.component.mjs +3 -5
  18. package/esm2022/externals/eui-editor/eui-editor.component.mjs +4 -4
  19. package/esm2022/layout/eui-app/eui-app-toolbar/toolbar.component.mjs +1 -1
  20. package/esm2022/layout/eui-header/header-logo/header-logo.component.mjs +8 -5
  21. package/esm2022/layout/eui-header/header.component.mjs +4 -4
  22. package/esm2022/layout/eui-header/header.module.mjs +3 -2
  23. package/eui-language-selector/language-selector.component.d.ts +2 -1
  24. package/eui-language-selector/language-selector.component.d.ts.map +1 -1
  25. package/eui-menu/eui-menu-item.component.d.ts.map +1 -1
  26. package/eui-paginator/eui-paginator.component.d.ts +3 -1
  27. package/eui-paginator/eui-paginator.component.d.ts.map +1 -1
  28. package/eui-popover/eui-popover.component.d.ts +0 -1
  29. package/eui-popover/eui-popover.component.d.ts.map +1 -1
  30. package/externals/eui-editor/eui-editor.component.d.ts.map +1 -1
  31. package/fesm2022/eui-components-directives.mjs +13 -1
  32. package/fesm2022/eui-components-directives.mjs.map +1 -1
  33. package/fesm2022/eui-components-eui-language-selector.mjs +6 -2
  34. package/fesm2022/eui-components-eui-language-selector.mjs.map +1 -1
  35. package/fesm2022/eui-components-eui-menu.mjs +2 -6
  36. package/fesm2022/eui-components-eui-menu.mjs.map +1 -1
  37. package/fesm2022/eui-components-eui-paginator.mjs +6 -2
  38. package/fesm2022/eui-components-eui-paginator.mjs.map +1 -1
  39. package/fesm2022/eui-components-eui-popover.mjs +2 -4
  40. package/fesm2022/eui-components-eui-popover.mjs.map +1 -1
  41. package/fesm2022/eui-components-externals-eui-editor.mjs +3 -3
  42. package/fesm2022/eui-components-externals-eui-editor.mjs.map +1 -1
  43. package/fesm2022/eui-components-layout.mjs +9 -7
  44. package/fesm2022/eui-components-layout.mjs.map +1 -1
  45. package/layout/eui-header/header-logo/header-logo.component.d.ts.map +1 -1
  46. package/layout/eui-header/header.component.d.ts.map +1 -1
  47. package/package.json +3 -3
@@ -36,10 +36,15 @@ export class EuiMaxLengthDirective {
36
36
  throw new Error('euiMaxlength of an input or a textarea cannot be negative.');
37
37
  }
38
38
  if (this.maxLength) {
39
+ // re-create in case you previously destroyed it
40
+ if (this.isShowMaxlength && !this.maxLengthSpan) {
41
+ this.createMaxLengthBox();
42
+ }
39
43
  this._refreshValue();
40
44
  }
41
45
  else {
42
46
  this.renderer.removeAttribute(this.el.nativeElement, 'maxLength');
47
+ this.destroyMaxLengthBox();
43
48
  }
44
49
  }
45
50
  }
@@ -71,7 +76,9 @@ export class EuiMaxLengthDirective {
71
76
  let value = (event.clipboardData || window['clipboardData']).getData('text');
72
77
  // calculate and set the maxLength based on the clipboard value
73
78
  let input = this.el.nativeElement;
74
- this.renderer.setProperty(input, 'maxLength', this.calculateMaxLength(value));
79
+ if (this.maxLength) {
80
+ this.renderer.setProperty(input, 'maxLength', this.calculateMaxLength(value));
81
+ }
75
82
  }
76
83
  setLengthCalcFactory(fn) {
77
84
  this.lengthCalcFn = () => {
@@ -90,6 +97,9 @@ export class EuiMaxLengthDirective {
90
97
  return (value?.length || (inputValue?.length || 0) - this.lengthCalcFn()) + this.maxLength;
91
98
  }
92
99
  _refreshValue() {
100
+ if (isNaN(this.maxLength)) {
101
+ return;
102
+ }
93
103
  let input = this.el.nativeElement;
94
104
  let valueLength = this.lengthCalcFn();
95
105
  let remainingLength = this.maxLength - valueLength;
@@ -156,6 +166,7 @@ export class EuiMaxLengthDirective {
156
166
  // removes maxlength element from DOM
157
167
  if (this.maxLengthSpan) {
158
168
  this.renderer.removeChild(this.maxLengthSpan.parentElement, this.maxLengthSpan);
169
+ this.maxLengthSpan = undefined;
159
170
  }
160
171
  // remove wrapper from DOM
161
172
  if (this.wrapper) {
@@ -166,6 +177,7 @@ export class EuiMaxLengthDirective {
166
177
  parent?.replaceChild(nativeElement, this.wrapper);
167
178
  // removes wrapper element from DOM
168
179
  this.renderer.removeChild(this.wrapper.parentElement, this.wrapper);
180
+ this.wrapper = undefined;
169
181
  }
170
182
  }
171
183
  /**
@@ -224,4 +236,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImpor
224
236
  declarations: [EuiMaxLengthDirective]
225
237
  }]
226
238
  }] });
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLW1heGxlbmd0aC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kaXJlY3RpdmVzL2V1aS1tYXhsZW5ndGguZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFFTixRQUFRLEVBQ1IsWUFBWSxFQUVaLFlBQVksRUFDWixRQUFRLEVBQ1IsSUFBSSxFQUlKLGVBQWUsRUFDZixnQkFBZ0IsR0FDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFJL0Msb0JBQW9CO0FBUXBCLE1BQU0sT0FBTyxxQkFBcUI7SUFXOUIsWUFBb0IsRUFBYyxFQUNkLFFBQW1CLEVBQ0MsT0FBa0I7UUFGdEMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDQyxZQUFPLEdBQVAsT0FBTyxDQUFXO1FBWE8sb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDdkYscUJBQWdCLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFXNUUsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsV0FBVztRQUNQLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixnQ0FBZ0M7UUFDaEMsSUFBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxF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QUUsQ0FBQyxRQUFRLENBQUM7O0FBNkhyQyxNQUFNLE9BQU8sMkJBQTJCOzhHQUEzQiwyQkFBMkI7K0dBQTNCLDJCQUEyQixpQkEzTTNCLHFCQUFxQixhQXVNcEIsWUFBWSxhQXZNYixxQkFBcUI7K0dBMk1yQiwyQkFBMkIsWUFKMUIsWUFBWTs7MkZBSWIsMkJBQTJCO2tCQUx2QyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ2hDLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO2lCQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgTmdNb2R1bGUsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE9uRGVzdHJveSxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgT3B0aW9uYWwsXG4gICAgU2VsZixcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBSZW5kZXJlcjIsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6IGBcbiAgICBpbnB1dFtldWlNYXhsZW5ndGhdLFxuICAgIHRleHRhcmVhW2V1aU1heGxlbmd0aF0sXG4gICAgW25nTW9kZWxdW2V1aU1heGxlbmd0aF0sXG4gICAgW2Zvcm1Db250cm9sTmFtZV1bZXVpTWF4bGVuZ3RoXWAsXG59KVxuZXhwb3J0IGNsYXNzIEV1aU1heExlbmd0aERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoeyBhbGlhczonZXVpTWF4bGVuZ3RoJywgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgbWF4TGVuZ3RoOiBudW1iZXI7XG4gICAgQElucHV0KHsgYWxpYXM6J2lzU2hvd01heGxlbmd0aCcsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1Nob3dNYXhsZW5ndGg6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBPdXRwdXQoKSBtYXhMZW5ndGhSZWFjaGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICB2YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIHByaXZhdGUgbWF4TGVuZ3RoU3BhbjogSFRNTFNwYW5FbGVtZW50O1xuICAgIHByaXZhdGUgd3JhcHBlcjogSFRNTERpdkVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBsZW5ndGhDYWxjRm46ICgpID0+IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICAgICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sOiBOZ0NvbnRyb2wpIHtcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgbGVuZ3RoIGNhbGN1bGF0aW9uIGJlaGF2aW9yXG4gICAgICAgIHRoaXMuc2V0TGVuZ3RoQ2FsY0ZhY3RvcnkoKHZhbHVlKSA9PiB2YWx1ZT8ubGVuZ3RoIHx8IDApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyByZW1vdmUgYWxsIERPTSBhZGRlZCBlbGVtZW50c1xuICAgICAgICB0aGlzLmRlc3Ryb3lNYXhMZW5ndGhCb3goKTtcblxuICAgICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIHZhbHVlQ2hhbmdlc1xuICAgICAgICBpZih0aGlzLnZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYoY2hhbmdlc1snaXNTaG93TWF4bGVuZ3RoJ10gJiYgdGhpcy5tYXhMZW5ndGhTcGFuKSB7XG4gICAgICAgICAgICBpZih0aGlzLmlzU2hvd01heGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlTWF4TGVuZ3RoQm94KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveU1heExlbmd0aEJveCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKGNoYW5nZXNbJ21heExlbmd0aCddKSB7XG4gICAgICAgICAgICBpZih0aGlzLm1heExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V1aU1heGxlbmd0aCBvZiBhbiBpbnB1dCBvciBhIHRleHRhcmVhIGNhbm5vdCBiZSBuZWdhdGl2ZS4nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoVmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnbWF4TGVuZ3RoJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLm1heExlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVNYXhMZW5ndGhCb3goKTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcyBzdWJzY3JpcHRpb24gaXMgbmVlZGVkIGFwYXJ0IGZyb20gSG9zdExpc3RlbmVyIHRvIENoYW5nZXMgaW4gY2FzZSB1c2FnZSBvZiB0aGlzIGRpcmVjdGl2ZVxuICAgICAgICAvLyBpbiBjdXN0b20gY29tcG9uZW50IHRoYXQgaW1wbGVtZW50cyBuZ0RlZmF1bHRDb250cm9sXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2w/LnZhbHVlQ2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFZhbHVlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXG4gICAgb25DaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmKCF0aGlzLmNvbnRyb2wgfHwgdGhpcy5jb250cm9sPy5jb250cm9sLnVwZGF0ZU9uICE9PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdpbnB1dCcsIFsnJGV2ZW50J10pXG4gICAgb25JbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZighdGhpcy5jb250cm9sIHx8IHRoaXMuY29udHJvbD8uY29udHJvbC51cGRhdGVPbiAhPT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKVxuICAgIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgICAgIC8vIGdldCB0aGUgdmFsdWUgZnJvbSBjbGlwYm9hcmRcbiAgICAgICAgbGV0IHZhbHVlID0gKGV2ZW50LmNsaXBib2FyZERhdGEgfHwgd2luZG93WydjbGlwYm9hcmREYXRhJ10pLmdldERhdGEoJ3RleHQnKTtcbiAgICAgICAgLy8gY2FsY3VsYXRlIGFuZCBzZXQgdGhlIG1heExlbmd0aCBiYXNlZCBvbiB0aGUgY2xpcGJvYXJkIHZhbHVlXG4gICAgICAgIGxldCBpbnB1dCA9IDxIVE1MSW5wdXRFbGVtZW50PnRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShpbnB1dCwgJ21heExlbmd0aCcsIHRoaXMuY2FsY3VsYXRlTWF4TGVuZ3RoKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldExlbmd0aENhbGNGYWN0b3J5KGZuOiAoaW5wdXQ6IHN0cmluZykgPT4gbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGVuZ3RoQ2FsY0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgICAgICAgICByZXR1cm4gZm4odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FsY3VsYXRlcyB0aGUgbWF4TGVuZ3RoIG9mIGFuIGlucHV0IGVsZW1lbnQuIENhbGN1bGF0aW9uIGlzIG1hZGVcbiAgICAgKiBhZ2FpbnN0IHRoZSB2YWx1ZSBvZiB0aGUgTW9kZWwgb3IgSW5wdXQgRWxlbWVudC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgT3B0aW9uYWwgdGhlIHZhbHVlIHRvIGNhbGN1bGF0ZSBtYXggbGVuZ3RoIGFnYWluc3QgKG92ZXJyaWRlIHRoZSBNb2RlbCBvbmUpXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhbGN1bGF0ZU1heExlbmd0aCh2YWx1ZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgICAgIHJldHVybiAodmFsdWU/Lmxlbmd0aCB8fCAoaW5wdXRWYWx1ZT8ubGVuZ3RoIHx8IDApIC0gdGhpcy5sZW5ndGhDYWxjRm4oKSkgKyB0aGlzLm1heExlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWZyZXNoVmFsdWUoKSB7XG4gICAgICAgIGxldCBpbnB1dCA9IDxIVE1MSW5wdXRFbGVtZW50PnRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgbGV0IHZhbHVlTGVuZ3RoID0gdGhpcy5sZW5ndGhDYWxjRm4oKTtcbiAgICAgICAgbGV0IHJlbWFpbmluZ0xlbmd0aCA9IHRoaXMubWF4TGVuZ3RoIC0gdmFsdWVMZW5ndGg7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShpbnB1dCwgJ21heExlbmd0aCcsIHRoaXMuY2FsY3VsYXRlTWF4TGVuZ3RoKCkpO1xuICAgICAgICBpZih0aGlzLm1heExlbmd0aFNwYW4pIHtcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSByZW1haW5pbmcgbGVuZ3RoIGFkZC9yZW1vdmUgdGhlIGVycm9yIGNsYXNzXG4gICAgICAgICAgICBpZiAocmVtYWluaW5nTGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMubWF4TGVuZ3RoU3BhbiwgJ2V1aS1pbnB1dC1tYXhsZW5ndGgtLWludmFsaWQnKVxuICAgICAgICAgICAgICAgIHRoaXMubWF4TGVuZ3RoUmVhY2hlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMubWF4TGVuZ3RoU3BhbiwgJ2V1aS1pbnB1dC1tYXhsZW5ndGgtLWludmFsaWQnKVxuICAgICAgICAgICAgICAgIHRoaXMubWF4TGVuZ3RoUmVhY2hlZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmFsdWUgb2YgcmVtYWluaW5nIGNoYXJhY3RlcnNcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmdMZW5ndGggPCAwKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBmZWF0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGhlIGNhbGN1bGF0aW9uIG9mIGxlbmd0aCBpcyBub3QgY3VzdG9tXG4gICAgICAgICAgICAgICAgLy8gdG8gc3VwcG9ydCB0aGlzIGZlYXR1cmUgeW91IG5lZWQgdG8gY2FsY3VsYXRlIHRoaXMubWF4TGVuZ3RoIGFsc29cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGlucHV0LnZhbHVlLnN1YnN0cmluZygwLCB0aGlzLmNhbGN1bGF0ZU1heExlbmd0aCgpKSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IGlucHV0LnZhbHVlLnN1YnN0cmluZygwLCB0aGlzLmNhbGN1bGF0ZU1heExlbmd0aCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLm1heExlbmd0aFNwYW4sICdpbm5lckhUTUwnLCAnMCcpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlbWFpbmluZ0xlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLm1heExlbmd0aFNwYW4sICdpbm5lckhUTUwnLCAodGhpcy5tYXhMZW5ndGggLSB2YWx1ZUxlbmd0aCkudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgdGhlIG1heExlbmd0aCBib3ggYnkgYWRkaW5nIGl0IHRvIERPTSBhbmQgYXR0YWNoaW5nIGNvcnJlY3QgQ2xhc3Nlc1xuICAgICAqIGZvciBXcmFwcGVyIGFuZCBTcGFuIChhY3R1YWwgYm94IGhvbGRpbmcgbWF4IGxlbmd0aClcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlTWF4TGVuZ3RoQm94KCkge1xuICAgICAgICAvLyBjcmVhdGVzIHRoZSBzcGFuIHRoYXQgaG9sZHMgdGhlIG1heCBsZW5ndGggdmFsdWUgd2hpY2ggY2hhbmdlcyBhY2NvcmRpbmcgdG8gaW5wdXRcbiAgICAgICAgdGhpcy5tYXhMZW5ndGhTcGFuID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5tYXhMZW5ndGhTcGFuLCAnZXVpLWlucHV0LW1heGxlbmd0aCcpXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMubWF4TGVuZ3RoU3BhbiwgJ2lubmVySFRNTCcsIHRoaXMubWF4TGVuZ3RoLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIC8vIGNyZWF0ZSB3cmFwcGVyIGVsZW1lbnRcbiAgICAgICAgbGV0IG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAobmF0aXZlRWxlbWVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBzZXQgd2lkdGggdG8gMTAwJVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXRpdmVFbGVtZW50LCAnd2lkdGgnLCAnMTAwJScpO1xuICAgICAgICAgICAgbGV0IHBhcmVudDogTm9kZSA9IG5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCAmJiB0aGlzLmlzU2hvd01heGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZXMgd3JhcHBlciBkaXYgb2YgaW5wdXQgYW5kIG1heExlbmd0aCBzcGFuXG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMud3JhcHBlciwgJ2V1aS1pbnB1dC1tYXhsZW5ndGgtd3JhcHBlcicpO1xuICAgICAgICAgICAgICAgIC8vIHN3YXAsIHdyYXBwZXIgc2hvdWxkIHdyYXAgdGhlIG5hdGl2ZUVsZW1lbnQgYW5kIG1heExlbmd0aCBzcGFuXG4gICAgICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCh0aGlzLndyYXBwZXIsIG5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyLCBuYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMud3JhcHBlciwgdGhpcy5tYXhMZW5ndGhTcGFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlc3Ryb3lzIHRoZSBtYXhMZW5ndGggYm94IGZyb20gRE9NXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGRlc3Ryb3lNYXhMZW5ndGhCb3goKSB7XG4gICAgICAgIC8vIHJlbW92ZXMgbWF4bGVuZ3RoIGVsZW1lbnQgZnJvbSBET01cbiAgICAgICAgaWYodGhpcy5tYXhMZW5ndGhTcGFuKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMubWF4TGVuZ3RoU3Bhbi5wYXJlbnRFbGVtZW50LCB0aGlzLm1heExlbmd0aFNwYW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVtb3ZlIHdyYXBwZXIgZnJvbSBET01cbiAgICAgICAgaWYodGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICAvLyBnZXQgcGFyZW50IG5vZGUgb2Ygd3JhcHBlclxuICAgICAgICAgICAgbGV0IHBhcmVudDogTm9kZSA9IHRoaXMud3JhcHBlci5wYXJlbnROb2RlO1xuICAgICAgICAgICAgbGV0IG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgLy8gc3dhcCB3cmFwcGVyIGFuZCBuYXRpdmVFbGVtZW50XG4gICAgICAgICAgICBwYXJlbnQ/LnJlcGxhY2VDaGlsZChuYXRpdmVFbGVtZW50LCB0aGlzLndyYXBwZXIpO1xuICAgICAgICAgICAgLy8gcmVtb3ZlcyB3cmFwcGVyIGVsZW1lbnQgZnJvbSBET01cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy53cmFwcGVyLnBhcmVudEVsZW1lbnQsIHRoaXMud3JhcHBlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRoZSB2YWx1ZSBiYXNlZCBvbiB3aGV0aGVyIGNvbnRyb2wgaXMgcHJlc2VudCBhbmQgY29udHJvbCdzXG4gICAgICogdXBkYXRlT24gc3RyYXRlZ3kuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBpbnB1dCA9IDxIVE1MSW5wdXRFbGVtZW50PnRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbCAmJiB0aGlzLmNvbnRyb2wuY29udHJvbC51cGRhdGVPbiA9PT0gJ2NoYW5nZScgPyB0aGlzLmNvbnRyb2wudmFsdWUgOiBpbnB1dC52YWx1ZTtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgZXhwb3J0czogW0V1aU1heExlbmd0aERpcmVjdGl2ZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbRXVpTWF4TGVuZ3RoRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBFdWlNYXhMZW5ndGhEaXJlY3RpdmVNb2R1bGUge1xufVxuLyogZXNsaW50LWVuYWJsZSAqL1xuIl19
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLW1heGxlbmd0aC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kaXJlY3RpdmVzL2V1aS1tYXhsZW5ndGguZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFFTixRQUFRLEVBQ1IsWUFBWSxFQUVaLFlBQVksRUFDWixRQUFRLEVBQ1IsSUFBSSxFQUlKLGVBQWUsRUFDZixnQkFBZ0IsR0FDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFJL0Msb0JBQW9CO0FBUXBCLE1BQU0sT0FBTyxxQkFBcUI7SUFlOUIsWUFBb0IsRUFBYyxFQUNkLFFBQW1CLEVBQ0MsT0FBa0I7UUFGdEMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDQyxZQUFPLEdBQVAsT0FBTyxDQUFXO1FBWE8sb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDdkYscUJBQWdCLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFXNUUsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsV0FBVztRQUNQLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixnQ0FBZ0M7UUFDaEMsSUFBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxF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a0JnQixJQUFJOzswQkFBSSxRQUFRO3lDQVpnQyxTQUFTO3NCQUFyRSxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUNNLGVBQWU7c0JBQS9FLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNyRCxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBbUVQLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUWxDLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUWpDLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBb0lyQyxNQUFNLE9BQU8sMkJBQTJCOzhHQUEzQiwyQkFBMkI7K0dBQTNCLDJCQUEyQixpQkEzTjNCLHFCQUFxQixhQXVOcEIsWUFBWSxhQXZOYixxQkFBcUI7K0dBMk5yQiwyQkFBMkIsWUFKMUIsWUFBWTs7MkZBSWIsMkJBQTJCO2tCQUx2QyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ2hDLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO2lCQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgTmdNb2R1bGUsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE9uRGVzdHJveSxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgT3B0aW9uYWwsXG4gICAgU2VsZixcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBSZW5kZXJlcjIsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6IGBcbiAgICBpbnB1dFtldWlNYXhsZW5ndGhdLFxuICAgIHRleHRhcmVhW2V1aU1heGxlbmd0aF0sXG4gICAgW25nTW9kZWxdW2V1aU1heGxlbmd0aF0sXG4gICAgW2Zvcm1Db250cm9sTmFtZV1bZXVpTWF4bGVuZ3RoXWAsXG59KVxuZXhwb3J0IGNsYXNzIEV1aU1heExlbmd0aERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgICAvKipcbiAgICAgKiBJdCBhY2NlcHRzIG51bWJlciB2YWx1ZXMgdG8gaW5kaWNhdGUgdGhlIG1heExlbmd0aCBvZiBhbiBpbnB1dC4gVG8gcmVzZXQgb3IgZGlzYWJsZSBpdCBzZXQgdGhlIHZhbHVlIHRvIG51bGwuXG4gICAgICogTlVMTCB2YWx1ZSB3aWxsIHJlbW92ZSBhbnkgTWF4TGVuZ3RoIGluZGljYXRvciBldmVuIGlmIGFub3RoZXIgaW5wdXQgbGlrZSBpc1Nob3dNYXhsZW5ndGggZXF1YWxzIHRydWUuXG4gICAgICovXG4gICAgQElucHV0KHsgYWxpYXM6J2V1aU1heGxlbmd0aCcsIHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIG1heExlbmd0aDogbnVtYmVyO1xuICAgIEBJbnB1dCh7IGFsaWFzOidpc1Nob3dNYXhsZW5ndGgnLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNTaG93TWF4bGVuZ3RoOiBib29sZWFuID0gdHJ1ZTtcbiAgICBAT3V0cHV0KCkgbWF4TGVuZ3RoUmVhY2hlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgdmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBwcml2YXRlIG1heExlbmd0aFNwYW46IEhUTUxTcGFuRWxlbWVudDtcbiAgICBwcml2YXRlIHdyYXBwZXI6IEhUTUxEaXZFbGVtZW50O1xuICAgIHByaXZhdGUgbGVuZ3RoQ2FsY0ZuOiAoKSA9PiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbDogTmdDb250cm9sKSB7XG4gICAgICAgIC8vIHNldCBkZWZhdWx0IGxlbmd0aCBjYWxjdWxhdGlvbiBiZWhhdmlvclxuICAgICAgICB0aGlzLnNldExlbmd0aENhbGNGYWN0b3J5KCh2YWx1ZSkgPT4gdmFsdWU/Lmxlbmd0aCB8fCAwKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gcmVtb3ZlIGFsbCBET00gYWRkZWQgZWxlbWVudHNcbiAgICAgICAgdGhpcy5kZXN0cm95TWF4TGVuZ3RoQm94KCk7XG5cbiAgICAgICAgLy8gdW5zdWJzY3JpYmUgZnJvbSB2YWx1ZUNoYW5nZXNcbiAgICAgICAgaWYodGhpcy52YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmKGNoYW5nZXNbJ2lzU2hvd01heGxlbmd0aCddICYmIHRoaXMubWF4TGVuZ3RoU3Bhbikge1xuICAgICAgICAgICAgaWYodGhpcy5pc1Nob3dNYXhsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU1heExlbmd0aEJveCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lNYXhMZW5ndGhCb3goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZihjaGFuZ2VzWydtYXhMZW5ndGgnXSkge1xuICAgICAgICAgICAgaWYodGhpcy5tYXhMZW5ndGggPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldWlNYXhsZW5ndGggb2YgYW4gaW5wdXQgb3IgYSB0ZXh0YXJlYSBjYW5ub3QgYmUgbmVnYXRpdmUuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gcmUtY3JlYXRlIGluIGNhc2UgeW91IHByZXZpb3VzbHkgZGVzdHJveWVkIGl0XG4gICAgICAgICAgICAgICAgaWYodGhpcy5pc1Nob3dNYXhsZW5ndGggJiYgIXRoaXMubWF4TGVuZ3RoU3Bhbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU1heExlbmd0aEJveCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoVmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnbWF4TGVuZ3RoJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95TWF4TGVuZ3RoQm94KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLm1heExlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVNYXhMZW5ndGhCb3goKTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcyBzdWJzY3JpcHRpb24gaXMgbmVlZGVkIGFwYXJ0IGZyb20gSG9zdExpc3RlbmVyIHRvIENoYW5nZXMgaW4gY2FzZSB1c2FnZSBvZiB0aGlzIGRpcmVjdGl2ZVxuICAgICAgICAvLyBpbiBjdXN0b20gY29tcG9uZW50IHRoYXQgaW1wbGVtZW50cyBuZ0RlZmF1bHRDb250cm9sXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2w/LnZhbHVlQ2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFZhbHVlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXG4gICAgb25DaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmKCF0aGlzLmNvbnRyb2wgfHwgdGhpcy5jb250cm9sPy5jb250cm9sLnVwZGF0ZU9uICE9PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdpbnB1dCcsIFsnJGV2ZW50J10pXG4gICAgb25JbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZighdGhpcy5jb250cm9sIHx8IHRoaXMuY29udHJvbD8uY29udHJvbC51cGRhdGVPbiAhPT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKVxuICAgIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgICAgIC8vIGdldCB0aGUgdmFsdWUgZnJvbSBjbGlwYm9hcmRcbiAgICAgICAgbGV0IHZhbHVlID0gKGV2ZW50LmNsaXBib2FyZERhdGEgfHwgd2luZG93WydjbGlwYm9hcmREYXRhJ10pLmdldERhdGEoJ3RleHQnKTtcbiAgICAgICAgLy8gY2FsY3VsYXRlIGFuZCBzZXQgdGhlIG1heExlbmd0aCBiYXNlZCBvbiB0aGUgY2xpcGJvYXJkIHZhbHVlXG4gICAgICAgIGxldCBpbnB1dCA9IDxIVE1MSW5wdXRFbGVtZW50PnRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYodGhpcy5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoaW5wdXQsICdtYXhMZW5ndGgnLCB0aGlzLmNhbGN1bGF0ZU1heExlbmd0aCh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldExlbmd0aENhbGNGYWN0b3J5KGZuOiAoaW5wdXQ6IHN0cmluZykgPT4gbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGVuZ3RoQ2FsY0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgICAgICAgICByZXR1cm4gZm4odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FsY3VsYXRlcyB0aGUgbWF4TGVuZ3RoIG9mIGFuIGlucHV0IGVsZW1lbnQuIENhbGN1bGF0aW9uIGlzIG1hZGVcbiAgICAgKiBhZ2FpbnN0IHRoZSB2YWx1ZSBvZiB0aGUgTW9kZWwgb3IgSW5wdXQgRWxlbWVudC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgT3B0aW9uYWwgdGhlIHZhbHVlIHRvIGNhbGN1bGF0ZSBtYXggbGVuZ3RoIGFnYWluc3QgKG92ZXJyaWRlIHRoZSBNb2RlbCBvbmUpXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhbGN1bGF0ZU1heExlbmd0aCh2YWx1ZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgICAgIHJldHVybiAodmFsdWU/Lmxlbmd0aCB8fCAoaW5wdXRWYWx1ZT8ubGVuZ3RoIHx8IDApIC0gdGhpcy5sZW5ndGhDYWxjRm4oKSkgKyB0aGlzLm1heExlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWZyZXNoVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIGlmKGlzTmFOKHRoaXMubWF4TGVuZ3RoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbnB1dCA9IDxIVE1MSW5wdXRFbGVtZW50PnRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgbGV0IHZhbHVlTGVuZ3RoID0gdGhpcy5sZW5ndGhDYWxjRm4oKTtcbiAgICAgICAgbGV0IHJlbWFpbmluZ0xlbmd0aCA9IHRoaXMubWF4TGVuZ3RoIC0gdmFsdWVMZW5ndGg7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShpbnB1dCwgJ21heExlbmd0aCcsIHRoaXMuY2FsY3VsYXRlTWF4TGVuZ3RoKCkpO1xuICAgICAgICBpZih0aGlzLm1heExlbmd0aFNwYW4pIHtcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSByZW1haW5pbmcgbGVuZ3RoIGFkZC9yZW1vdmUgdGhlIGVycm9yIGNsYXNzXG4gICAgICAgICAgICBpZiAocmVtYWluaW5nTGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMubWF4TGVuZ3RoU3BhbiwgJ2V1aS1pbnB1dC1tYXhsZW5ndGgtLWludmFsaWQnKVxuICAgICAgICAgICAgICAgIHRoaXMubWF4TGVuZ3RoUmVhY2hlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMubWF4TGVuZ3RoU3BhbiwgJ2V1aS1pbnB1dC1tYXhsZW5ndGgtLWludmFsaWQnKVxuICAgICAgICAgICAgICAgIHRoaXMubWF4TGVuZ3RoUmVhY2hlZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmFsdWUgb2YgcmVtYWluaW5nIGNoYXJhY3RlcnNcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmdMZW5ndGggPCAwKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBmZWF0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGhlIGNhbGN1bGF0aW9uIG9mIGxlbmd0aCBpcyBub3QgY3VzdG9tXG4gICAgICAgICAgICAgICAgLy8gdG8gc3VwcG9ydCB0aGlzIGZlYXR1cmUgeW91IG5lZWQgdG8gY2FsY3VsYXRlIHRoaXMubWF4TGVuZ3RoIGFsc29cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGlucHV0LnZhbHVlLnN1YnN0cmluZygwLCB0aGlzLmNhbGN1bGF0ZU1heExlbmd0aCgpKSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IGlucHV0LnZhbHVlLnN1YnN0cmluZygwLCB0aGlzLmNhbGN1bGF0ZU1heExlbmd0aCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLm1heExlbmd0aFNwYW4sICdpbm5lckhUTUwnLCAnMCcpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlbWFpbmluZ0xlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLm1heExlbmd0aFNwYW4sICdpbm5lckhUTUwnLCAodGhpcy5tYXhMZW5ndGggLSB2YWx1ZUxlbmd0aCkudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgdGhlIG1heExlbmd0aCBib3ggYnkgYWRkaW5nIGl0IHRvIERPTSBhbmQgYXR0YWNoaW5nIGNvcnJlY3QgQ2xhc3Nlc1xuICAgICAqIGZvciBXcmFwcGVyIGFuZCBTcGFuIChhY3R1YWwgYm94IGhvbGRpbmcgbWF4IGxlbmd0aClcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlTWF4TGVuZ3RoQm94KCkge1xuICAgICAgICAvLyBjcmVhdGVzIHRoZSBzcGFuIHRoYXQgaG9sZHMgdGhlIG1heCBsZW5ndGggdmFsdWUgd2hpY2ggY2hhbmdlcyBhY2NvcmRpbmcgdG8gaW5wdXRcbiAgICAgICAgdGhpcy5tYXhMZW5ndGhTcGFuID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5tYXhMZW5ndGhTcGFuLCAnZXVpLWlucHV0LW1heGxlbmd0aCcpXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMubWF4TGVuZ3RoU3BhbiwgJ2lubmVySFRNTCcsIHRoaXMubWF4TGVuZ3RoLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIC8vIGNyZWF0ZSB3cmFwcGVyIGVsZW1lbnRcbiAgICAgICAgbGV0IG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAobmF0aXZlRWxlbWVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBzZXQgd2lkdGggdG8gMTAwJVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXRpdmVFbGVtZW50LCAnd2lkdGgnLCAnMTAwJScpO1xuICAgICAgICAgICAgbGV0IHBhcmVudDogTm9kZSA9IG5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCAmJiB0aGlzLmlzU2hvd01heGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZXMgd3JhcHBlciBkaXYgb2YgaW5wdXQgYW5kIG1heExlbmd0aCBzcGFuXG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMud3JhcHBlciwgJ2V1aS1pbnB1dC1tYXhsZW5ndGgtd3JhcHBlcicpO1xuICAgICAgICAgICAgICAgIC8vIHN3YXAsIHdyYXBwZXIgc2hvdWxkIHdyYXAgdGhlIG5hdGl2ZUVsZW1lbnQgYW5kIG1heExlbmd0aCBzcGFuXG4gICAgICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCh0aGlzLndyYXBwZXIsIG5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyLCBuYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMud3JhcHBlciwgdGhpcy5tYXhMZW5ndGhTcGFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlc3Ryb3lzIHRoZSBtYXhMZW5ndGggYm94IGZyb20gRE9NXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGRlc3Ryb3lNYXhMZW5ndGhCb3goKSB7XG4gICAgICAgIC8vIHJlbW92ZXMgbWF4bGVuZ3RoIGVsZW1lbnQgZnJvbSBET01cbiAgICAgICAgaWYodGhpcy5tYXhMZW5ndGhTcGFuKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMubWF4TGVuZ3RoU3Bhbi5wYXJlbnRFbGVtZW50LCB0aGlzLm1heExlbmd0aFNwYW4pO1xuICAgICAgICAgICAgdGhpcy5tYXhMZW5ndGhTcGFuID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVtb3ZlIHdyYXBwZXIgZnJvbSBET01cbiAgICAgICAgaWYodGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICAvLyBnZXQgcGFyZW50IG5vZGUgb2Ygd3JhcHBlclxuICAgICAgICAgICAgbGV0IHBhcmVudDogTm9kZSA9IHRoaXMud3JhcHBlci5wYXJlbnROb2RlO1xuICAgICAgICAgICAgbGV0IG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgLy8gc3dhcCB3cmFwcGVyIGFuZCBuYXRpdmVFbGVtZW50XG4gICAgICAgICAgICBwYXJlbnQ/LnJlcGxhY2VDaGlsZChuYXRpdmVFbGVtZW50LCB0aGlzLndyYXBwZXIpO1xuICAgICAgICAgICAgLy8gcmVtb3ZlcyB3cmFwcGVyIGVsZW1lbnQgZnJvbSBET01cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy53cmFwcGVyLnBhcmVudEVsZW1lbnQsIHRoaXMud3JhcHBlcik7XG4gICAgICAgICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRoZSB2YWx1ZSBiYXNlZCBvbiB3aGV0aGVyIGNvbnRyb2wgaXMgcHJlc2VudCBhbmQgY29udHJvbCdzXG4gICAgICogdXBkYXRlT24gc3RyYXRlZ3kuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBpbnB1dCA9IDxIVE1MSW5wdXRFbGVtZW50PnRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbCAmJiB0aGlzLmNvbnRyb2wuY29udHJvbC51cGRhdGVPbiA9PT0gJ2NoYW5nZScgPyB0aGlzLmNvbnRyb2wudmFsdWUgOiBpbnB1dC52YWx1ZTtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgZXhwb3J0czogW0V1aU1heExlbmd0aERpcmVjdGl2ZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbRXVpTWF4TGVuZ3RoRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBFdWlNYXhMZW5ndGhEaXJlY3RpdmVNb2R1bGUge1xufVxuLyogZXNsaW50LWVuYWJsZSAqL1xuIl19
@@ -29,6 +29,7 @@ export class EuiLanguageSelectorComponent {
29
29
  this.hasLanguageSelection = true;
30
30
  this.isToolbarSelector = false;
31
31
  this.euiPrimary = false;
32
+ this.ariaLabel = 'Change Language';
32
33
  this.languageSelectorClick = new EventEmitter();
33
34
  this.destroy$ = new Subject();
34
35
  }
@@ -116,11 +117,11 @@ export class EuiLanguageSelectorComponent {
116
117
  return this.languages.find((lang) => lang.code === languageCode);
117
118
  }
118
119
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: EuiLanguageSelectorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.EuiDialogService }, { token: i2.EuiAppShellService }, { token: i3.TranslateService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
119
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: EuiLanguageSelectorComponent, selector: "eui-language-selector", inputs: { hasLanguageSelection: ["hasLanguageSelection", "hasLanguageSelection", booleanAttribute], isToolbarSelector: ["isToolbarSelector", "isToolbarSelector", booleanAttribute], euiPrimary: ["euiPrimary", "euiPrimary", booleanAttribute] }, outputs: { languageSelectorClick: "languageSelectorClick" }, host: { properties: { "class": "this.cssClasses" } }, ngImport: i0, template: "@if (!hasLanguageSelection) {\n <button class=\"eui-language-selector__button\"\n euiButton [euiBasicButton]=\"!isToolbarSelector\"\n [euiBranding]=\"isToolbarSelector\"\n (click)=\"onClick()\">\n <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n </button>\n\n} @else if (hasLanguageSelection && isShowDropDown) {\n <eui-dropdown>\n <button class=\"eui-language-selector__button\"\n euiButton [euiBasicButton]=\"!isToolbarSelector\"\n [euiBranding]=\"isToolbarSelector\">\n <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n </button>\n\n <eui-dropdown-content>\n <div class=\"eui-language-selector-menu\">\n <button\n *ngFor=\"let language of languages\"\n euiDropdownItem\n attr.data-e2e=\"eui-language-selector-item_{{ language.code }}\"\n class=\"eui-language-selector-menu-language-item\"\n (click)=\"onLanguageChanged(language)\">\n {{ language.label }} ({{ language.code }})\n </button>\n </div>\n </eui-dropdown-content>\n </eui-dropdown>\n\n} @else if (hasLanguageSelection && isShowModal) {\n <button class=\"eui-language-selector__button\"\n euiButton euiBasicButton\n [euiPrimary]=\"isToolbarSelector\"\n (click)=\"onOpen()\">\n <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n </button>\n}\n\n<ng-template #languageSelectorIcon>\n <eui-icon-svg icon=\"eui-ecl-global\"></eui-icon-svg>\n</ng-template>\n", styles: [".eui-18 .eui-language-selector{align-items:center;cursor:pointer;display:flex;position:relative}.eui-18 .eui-language-selector__button{padding-left:var(--eui-s-s);padding-right:var(--eui-s-s)}.eui-18 .eui-language-selector__code{text-transform:uppercase}.eui-18 .eui-language-selector-menu-language-item{padding:var(--eui-s-m);border-bottom:1px solid var(--eui-c-neutral-bg-light);text-align:center;cursor:pointer}.eui-18 .eui-language-selector-menu-language-item:hover{background:var(--eui-c-neutral-bg-light)}.eui-18 .eui-language-selector--empty{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.EuiDropdownComponent, selector: "eui-dropdown", inputs: ["e2eAttr", "tabIndex", "width", "position", "isBlock", "isDropDownRightAligned", "hasClosedOnClickInside", "isLabelUpdatedFromSelectedItem", "isExpandOnHover", "hasTabNavigation", "isRightClickEnabled", "euiDisabled"], outputs: ["expand"] }, { kind: "component", type: i5.EuiDropdownItemComponent, selector: "eui-dropdown-item, [euiDropdownItem]", inputs: ["subDropdown", "isActive"] }, { kind: "directive", type: i5.EuiDropdownContentDirective, selector: "eui-dropdown-content" }, { kind: "component", type: i6.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "euiIconButton", "euiLineWrap", "isChecked", "euiDisabled"], outputs: ["buttonClick"] }, { kind: "component", type: i7.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None }); }
120
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: EuiLanguageSelectorComponent, selector: "eui-language-selector", inputs: { hasLanguageSelection: ["hasLanguageSelection", "hasLanguageSelection", booleanAttribute], isToolbarSelector: ["isToolbarSelector", "isToolbarSelector", booleanAttribute], euiPrimary: ["euiPrimary", "euiPrimary", booleanAttribute], ariaLabel: ["aria-label", "ariaLabel"] }, outputs: { languageSelectorClick: "languageSelectorClick" }, host: { properties: { "class": "this.cssClasses" } }, ngImport: i0, template: "@if (!hasLanguageSelection) {\n <button class=\"eui-language-selector__button\"\n euiButton [euiBasicButton]=\"!isToolbarSelector\"\n [euiBranding]=\"isToolbarSelector\"\n (click)=\"onClick()\"\n [attr.aria-label]=\"ariaLabel\">\n <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n </button>\n\n} @else if (hasLanguageSelection && isShowDropDown) {\n <eui-dropdown>\n <button class=\"eui-language-selector__button\"\n [attr.aria-label]=\"ariaLabel\"\n euiButton [euiBasicButton]=\"!isToolbarSelector\"\n [euiBranding]=\"isToolbarSelector\">\n <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n </button>\n\n <eui-dropdown-content>\n <div class=\"eui-language-selector-menu\">\n <button\n *ngFor=\"let language of languages\"\n euiDropdownItem\n attr.data-e2e=\"eui-language-selector-item_{{ language.code }}\"\n class=\"eui-language-selector-menu-language-item\"\n (click)=\"onLanguageChanged(language)\">\n {{ language.label }} ({{ language.code }})\n </button>\n </div>\n </eui-dropdown-content>\n </eui-dropdown>\n\n} @else if (hasLanguageSelection && isShowModal) {\n <button class=\"eui-language-selector__button\"\n euiButton euiBasicButton\n [euiPrimary]=\"isToolbarSelector\"\n (click)=\"onOpen()\"\n [attr.aria-label]=\"ariaLabel\">\n <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n </button>\n}\n\n<ng-template #languageSelectorIcon>\n <eui-icon-svg icon=\"eui-ecl-global\"></eui-icon-svg>\n</ng-template>\n", styles: [".eui-18 .eui-language-selector{align-items:center;cursor:pointer;display:flex;position:relative}.eui-18 .eui-language-selector__button{padding-left:var(--eui-s-s);padding-right:var(--eui-s-s)}.eui-18 .eui-language-selector__code{text-transform:uppercase}.eui-18 .eui-language-selector-menu-language-item{padding:var(--eui-s-m);border-bottom:1px solid var(--eui-c-neutral-bg-light);text-align:center;cursor:pointer}.eui-18 .eui-language-selector-menu-language-item:hover{background:var(--eui-c-neutral-bg-light)}.eui-18 .eui-language-selector--empty{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.EuiDropdownComponent, selector: "eui-dropdown", inputs: ["e2eAttr", "tabIndex", "width", "position", "isBlock", "isDropDownRightAligned", "hasClosedOnClickInside", "isLabelUpdatedFromSelectedItem", "isExpandOnHover", "hasTabNavigation", "isRightClickEnabled", "euiDisabled"], outputs: ["expand"] }, { kind: "component", type: i5.EuiDropdownItemComponent, selector: "eui-dropdown-item, [euiDropdownItem]", inputs: ["subDropdown", "isActive"] }, { kind: "directive", type: i5.EuiDropdownContentDirective, selector: "eui-dropdown-content" }, { kind: "component", type: i6.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "euiIconButton", "euiLineWrap", "isChecked", "euiDisabled"], outputs: ["buttonClick"] }, { kind: "component", type: i7.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None }); }
120
121
  }
121
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: EuiLanguageSelectorComponent, decorators: [{
122
123
  type: Component,
123
- args: [{ selector: 'eui-language-selector', encapsulation: ViewEncapsulation.None, template: "@if (!hasLanguageSelection) {\n <button class=\"eui-language-selector__button\"\n euiButton [euiBasicButton]=\"!isToolbarSelector\"\n [euiBranding]=\"isToolbarSelector\"\n (click)=\"onClick()\">\n <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n </button>\n\n} @else if (hasLanguageSelection && isShowDropDown) {\n <eui-dropdown>\n <button class=\"eui-language-selector__button\"\n euiButton [euiBasicButton]=\"!isToolbarSelector\"\n [euiBranding]=\"isToolbarSelector\">\n <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n </button>\n\n <eui-dropdown-content>\n <div class=\"eui-language-selector-menu\">\n <button\n *ngFor=\"let language of languages\"\n euiDropdownItem\n attr.data-e2e=\"eui-language-selector-item_{{ language.code }}\"\n class=\"eui-language-selector-menu-language-item\"\n (click)=\"onLanguageChanged(language)\">\n {{ language.label }} ({{ language.code }})\n </button>\n </div>\n </eui-dropdown-content>\n </eui-dropdown>\n\n} @else if (hasLanguageSelection && isShowModal) {\n <button class=\"eui-language-selector__button\"\n euiButton euiBasicButton\n [euiPrimary]=\"isToolbarSelector\"\n (click)=\"onOpen()\">\n <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n </button>\n}\n\n<ng-template #languageSelectorIcon>\n <eui-icon-svg icon=\"eui-ecl-global\"></eui-icon-svg>\n</ng-template>\n", styles: [".eui-18 .eui-language-selector{align-items:center;cursor:pointer;display:flex;position:relative}.eui-18 .eui-language-selector__button{padding-left:var(--eui-s-s);padding-right:var(--eui-s-s)}.eui-18 .eui-language-selector__code{text-transform:uppercase}.eui-18 .eui-language-selector-menu-language-item{padding:var(--eui-s-m);border-bottom:1px solid var(--eui-c-neutral-bg-light);text-align:center;cursor:pointer}.eui-18 .eui-language-selector-menu-language-item:hover{background:var(--eui-c-neutral-bg-light)}.eui-18 .eui-language-selector--empty{display:none}\n"] }]
124
+ args: [{ selector: 'eui-language-selector', encapsulation: ViewEncapsulation.None, template: "@if (!hasLanguageSelection) {\n <button class=\"eui-language-selector__button\"\n euiButton [euiBasicButton]=\"!isToolbarSelector\"\n [euiBranding]=\"isToolbarSelector\"\n (click)=\"onClick()\"\n [attr.aria-label]=\"ariaLabel\">\n <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n </button>\n\n} @else if (hasLanguageSelection && isShowDropDown) {\n <eui-dropdown>\n <button class=\"eui-language-selector__button\"\n [attr.aria-label]=\"ariaLabel\"\n euiButton [euiBasicButton]=\"!isToolbarSelector\"\n [euiBranding]=\"isToolbarSelector\">\n <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n </button>\n\n <eui-dropdown-content>\n <div class=\"eui-language-selector-menu\">\n <button\n *ngFor=\"let language of languages\"\n euiDropdownItem\n attr.data-e2e=\"eui-language-selector-item_{{ language.code }}\"\n class=\"eui-language-selector-menu-language-item\"\n (click)=\"onLanguageChanged(language)\">\n {{ language.label }} ({{ language.code }})\n </button>\n </div>\n </eui-dropdown-content>\n </eui-dropdown>\n\n} @else if (hasLanguageSelection && isShowModal) {\n <button class=\"eui-language-selector__button\"\n euiButton euiBasicButton\n [euiPrimary]=\"isToolbarSelector\"\n (click)=\"onOpen()\"\n [attr.aria-label]=\"ariaLabel\">\n <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n </button>\n}\n\n<ng-template #languageSelectorIcon>\n <eui-icon-svg icon=\"eui-ecl-global\"></eui-icon-svg>\n</ng-template>\n", styles: [".eui-18 .eui-language-selector{align-items:center;cursor:pointer;display:flex;position:relative}.eui-18 .eui-language-selector__button{padding-left:var(--eui-s-s);padding-right:var(--eui-s-s)}.eui-18 .eui-language-selector__code{text-transform:uppercase}.eui-18 .eui-language-selector-menu-language-item{padding:var(--eui-s-m);border-bottom:1px solid var(--eui-c-neutral-bg-light);text-align:center;cursor:pointer}.eui-18 .eui-language-selector-menu-language-item:hover{background:var(--eui-c-neutral-bg-light)}.eui-18 .eui-language-selector--empty{display:none}\n"] }]
124
125
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.EuiDialogService }, { type: i2.EuiAppShellService }, { type: i3.TranslateService }, { type: i0.ElementRef }], propDecorators: { cssClasses: [{
125
126
  type: HostBinding,
126
127
  args: ['class']
@@ -133,7 +134,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImpor
133
134
  }], euiPrimary: [{
134
135
  type: Input,
135
136
  args: [{ transform: booleanAttribute }]
137
+ }], ariaLabel: [{
138
+ type: Input,
139
+ args: ['aria-label']
136
140
  }], languageSelectorClick: [{
137
141
  type: Output
138
142
  }] } });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLWxhbmd1YWdlLXNlbGVjdG9yL2xhbmd1YWdlLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2V1aS1sYW5ndWFnZS1zZWxlY3Rvci9sYW5ndWFnZS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixXQUFXLEVBSVgsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osZ0JBQWdCLEdBSW5CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcvQixPQUFPLEVBQUUsY0FBYyxFQUFlLE1BQU0sV0FBVyxDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQW9CLE1BQU0sNEJBQTRCLENBQUM7QUFFL0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7Ozs7OztBQVF0RixNQUFNLE9BQU8sNEJBQTRCO0lBQ3JDLElBQ0ksVUFBVTtRQUNWLE9BQU87WUFDSCx1QkFBdUI7WUFDdkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNqRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQzFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFhRCxZQUNZLEVBQXFCLEVBQ3JCLGdCQUFrQyxFQUNuQyxlQUFtQyxFQUNs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QixDQUFDLElBQUk7OE1BSWpDLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxPQUFPO2dCQVlvQixvQkFBb0I7c0JBQTNELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsaUJBQWlCO3NCQUF4RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFVBQVU7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRTVCLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHsgRXVpRXVMYW5ndWFnZXMsIEV1aUxhbmd1YWdlIH0gZnJvbSAnQGV1aS9jb3JlJztcbmltcG9ydCB7IEV1aUFwcFNoZWxsU2VydmljZSB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBFdWlEaWFsb2dDb25maWcsIEV1aURpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWRpYWxvZyc7XG5cbmltcG9ydCB7IEV1aU1vZGFsU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLXNlbGVjdG9yL21vZGFsLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXVpLWxhbmd1YWdlLXNlbGVjdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL19zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlMYW5ndWFnZVNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIGdldCBjc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZXVpLWxhbmd1YWdlLXNlbGVjdG9yJyxcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VzPy5sZW5ndGggPD0gMSA/ICdldWktbGFuZ3VhZ2Utc2VsZWN0b3ItLWVtcHR5JyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5pc1Rvb2xiYXJTZWxlY3RvciA/ICdldWktbGFuZ3VhZ2Utc2VsZWN0b3ItLXRvb2xiYXItc2VsZWN0b3InIDogJycsXG4gICAgICAgIF0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBsYW5ndWFnZXM6IEV1aUxhbmd1YWdlW107XG4gICAgc2VsZWN0ZWRMYW5ndWFnZTogRXVpTGFuZ3VhZ2U7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzTGFuZ3VhZ2VTZWxlY3Rpb24gPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1Rvb2xiYXJTZWxlY3RvciA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBldWlQcmltYXJ5ID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgbGFuZ3VhZ2VTZWxlY3RvckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxudWxsPigpO1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgZXVpRGlhbG9nU2VydmljZTogRXVpRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHVibGljIGFwcFNoZWxsU2VydmljZTogRXVpQXBwU2hlbGxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBhdCBsZWFzdCBvbmUgYW5kIG1heCBmb3VyIGxhbmd1YWdlcy5cbiAgICAgKi9cbiAgICBnZXQgaXNTaG93RHJvcERvd24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhbmd1YWdlcz8ubGVuZ3RoID4gMSAmJiB0aGlzLmxhbmd1YWdlcz8ubGVuZ3RoIDwgNDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIGF0IGxlYXN0IGZpdmUgbGFuZ3VhZ2VzLlxuICAgICAqL1xuICAgIGdldCBpc1Nob3dNb2RhbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VzPy5sZW5ndGggPj0gNDtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gdXBkYXRlIGxhbmd1YWdlcyBhcnJheSBiYXNlZCBvbiBBcHBTaGVsbCBTdGF0ZSAnbGFuZ3VhZ2UnIGNoYW5nZXNcbiAgICAgICAgdGhpcy5hcHBTaGVsbFNlcnZpY2Uuc3RhdGUkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbEtleUNoYW5nZWQoJ2xhbmd1YWdlcycpLFxuICAgICAgICAgICAgICAgIG1hcCgoc3RhdGUpID0+IHN0YXRlLmxhbmd1YWdlcyksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsYW5ndWFnZXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlcyA9IGxhbmd1YWdlcyA/IEV1aUV1TGFuZ3VhZ2VzLmdldE9yZGVyZWRMYW5ndWFnZXMobGFuZ3VhZ2VzKSA6IEV1aUV1TGFuZ3VhZ2VzLmdldExhbmd1YWdlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdXBkYXRlIGFjdGl2ZUxhbmd1YWdlIGFycmF5IGJhc2VkIG9uIEFwcFNoZWxsIFN0YXRlICdsYW5ndWFnZScgY2hhbmdlc1xuICAgICAgICB0aGlzLmFwcFNoZWxsU2VydmljZS5zdGF0ZSRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCgnYWN0aXZlTGFuZ3VhZ2UnKSxcbiAgICAgICAgICAgICAgICBtYXAoKHN0YXRlKSA9PiBzdGF0ZS5hY3RpdmVMYW5ndWFnZSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChhY3RpdmVMYW5ndWFnZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA9IHRoaXMuZ2V0TGFuZ3VhZ2UoYWN0aXZlTGFuZ3VhZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBsZXQgaGFzVG9vbGJhclBhcmVudCA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaGFzVG9vbGJhclBhcmVudCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdldWktdG9vbGJhcicpO1xuXG4gICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzVG9vbGJhclBhcmVudCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1Rvb2xiYXJTZWxlY3RvciA9IHRydWU7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBvbkxhbmd1YWdlQ2hhbmdlZChsYW5ndWFnZTogRXVpTGFuZ3VhZ2UpOiB2b2lkIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBBcHBTaGVsbFNlcnZpY2Ugc3RhdGVcbiAgICAgICAgdGhpcy5hcHBTaGVsbFNlcnZpY2Uuc2V0U3RhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5hcHBTaGVsbFNlcnZpY2Uuc3RhdGUsXG4gICAgICAgICAgICBhY3RpdmVMYW5ndWFnZTogbGFuZ3VhZ2UuY29kZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgdGhlIG1vZGFsIHRoYXQgcmVuZGVycyB0aGUgVXhMYW5ndWFnZSBhcnJheSB3aXRoIG1vZGFsIGFjdGlvbnMgYmluZGluZ3MgdG8gdGhpcyBDb21wb25lbnRcbiAgICAgKi9cbiAgICBvbk9wZW4odGl0bGVMYWJlbDogc3RyaW5nID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2V1aS5sYW5ndWFnZVNlbGVjdG9yLm1vZGFsVGl0bGUnKSk6IHZvaWQge1xuICAgICAgICB0aGlzLmV1aURpYWxvZ1NlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgICAgICAgIG5ldyBFdWlEaWFsb2dDb25maWcoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZUxhYmVsLFxuICAgICAgICAgICAgICAgIGhhc0Zvb3RlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgaGFzQ2xvc2VkT25DbGlja091dHNpZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYm9keUNvbXBvbmVudDoge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IEV1aU1vZGFsU2VsZWN0b3JDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzOiB0aGlzLmxhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2U6IHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ2hhbmdlZDogKGxhbmd1YWdlOiBFdWlMYW5ndWFnZSk6dm9pZCA9PiB0aGlzLm9uTGFuZ3VhZ2VDaGFuZ2VkKGxhbmd1YWdlKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sYW5ndWFnZVNlbGVjdG9yQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdGhlIFV4TGFuZ3VhZ2UgT2JqZWN0IGZyb20gYSBnaXZlbiBsYW5ndWFnZSBjb2RlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGFuZ3VhZ2VDb2RlIHR3byBjaGFyIGxhbmd1YWdlIGNvZGVcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldExhbmd1YWdlKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogRXVpTGFuZ3VhZ2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZXMuZmluZCgobGFuZykgPT4gbGFuZy5jb2RlID09PSBsYW5ndWFnZUNvZGUpO1xuICAgIH1cbn1cbiIsIkBpZiAoIWhhc0xhbmd1YWdlU2VsZWN0aW9uKSB7XG4gICAgPGJ1dHRvbiBjbGFzcz1cImV1aS1sYW5ndWFnZS1zZWxlY3Rvcl9fYnV0dG9uXCJcbiAgICAgICAgZXVpQnV0dG9uIFtldWlCYXNpY0J1dHRvbl09XCIhaXNUb29sYmFyU2VsZWN0b3JcIlxuICAgICAgICBbZXVpQnJhbmRpbmddPVwiaXNUb29sYmFyU2VsZWN0b3JcIlxuICAgICAgICAoY2xpY2spPVwib25DbGljaygpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImxhbmd1YWdlU2VsZWN0b3JJY29uXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJldWktbGFuZ3VhZ2Utc2VsZWN0b3JfX2NvZGVcIj57eyAoYXBwU2hlbGxTZXJ2aWNlLnN0YXRlJCB8IGFzeW5jKS5hY3RpdmVMYW5ndWFnZSB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cblxufSBAZWxzZSBpZiAoaGFzTGFuZ3VhZ2VTZWxlY3Rpb24gJiYgaXNTaG93RHJvcERvd24pIHtcbiAgICA8ZXVpLWRyb3Bkb3duPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZXVpLWxhbmd1YWdlLXNlbGVjdG9yX19idXR0b25cIlxuICAgICAgICAgICAgZXVpQnV0dG9uIFtldWlCYXNpY0J1dHRvbl09XCIhaXNUb29sYmFyU2VsZWN0b3JcIlxuICAgICAgICAgICAgW2V1aUJyYW5kaW5nXT1cImlzVG9vbGJhclNlbGVjdG9yXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYW5ndWFnZVNlbGVjdG9ySWNvblwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV1aS1sYW5ndWFnZS1zZWxlY3Rvcl9fY29kZVwiPnt7IChhcHBTaGVsbFNlcnZpY2Uuc3RhdGUkIHwgYXN5bmMpLmFjdGl2ZUxhbmd1YWdlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLWxhbmd1YWdlLXNlbGVjdG9yLW1lbnVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsYW5ndWFnZSBvZiBsYW5ndWFnZXNcIlxuICAgICAgICAgICAgICAgICAgICBldWlEcm9wZG93bkl0ZW1cbiAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLWUyZT1cImV1aS1sYW5ndWFnZS1zZWxlY3Rvci1pdGVtX3t7IGxhbmd1YWdlLmNvZGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1sYW5ndWFnZS1zZWxlY3Rvci1tZW51LWxhbmd1YWdlLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25MYW5ndWFnZUNoYW5nZWQobGFuZ3VhZ2UpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGxhbmd1YWdlLmxhYmVsIH19ICh7eyBsYW5ndWFnZS5jb2RlIH19KVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgPC9ldWktZHJvcGRvd24+XG5cbn0gQGVsc2UgaWYgKGhhc0xhbmd1YWdlU2VsZWN0aW9uICYmIGlzU2hvd01vZGFsKSB7XG4gICAgPGJ1dHRvbiBjbGFzcz1cImV1aS1sYW5ndWFnZS1zZWxlY3Rvcl9fYnV0dG9uXCJcbiAgICAgICAgZXVpQnV0dG9uIGV1aUJhc2ljQnV0dG9uXG4gICAgICAgIFtldWlQcmltYXJ5XT1cImlzVG9vbGJhclNlbGVjdG9yXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uT3BlbigpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImxhbmd1YWdlU2VsZWN0b3JJY29uXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJldWktbGFuZ3VhZ2Utc2VsZWN0b3JfX2NvZGVcIj57eyAoYXBwU2hlbGxTZXJ2aWNlLnN0YXRlJCB8IGFzeW5jKS5hY3RpdmVMYW5ndWFnZSB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbn1cblxuPG5nLXRlbXBsYXRlICNsYW5ndWFnZVNlbGVjdG9ySWNvbj5cbiAgICA8ZXVpLWljb24tc3ZnIGljb249XCJldWktZWNsLWdsb2JhbFwiPjwvZXVpLWljb24tc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLWxhbmd1YWdlLXNlbGVjdG9yL2xhbmd1YWdlLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2V1aS1sYW5ndWFnZS1zZWxlY3Rvci9sYW5ndWFnZS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixXQUFXLEVBSVgsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osZ0JBQWdCLEdBR25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcvQixPQUFPLEVBQUUsY0FBYyxFQUFlLE1BQU0sV0FBVyxDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQW9CLE1BQU0sNEJBQTRCLENBQUM7QUFFL0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7Ozs7OztBQVF0RixNQUFNLE9BQU8sNEJBQTRCO0lBQ3JDLElBQ0ksVUFBVTtRQUNWLE9BQU87WUFDSCx1QkFBdUI7WUFDdkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNqRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQzFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFjRCxZQUNZLEVBQXFCLEVBQ3JCLGdCQUFrQyxFQUNuQyxlQUFtQyxFQUNs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QUFTOytCQUNJLHVCQUF1QixpQkFHbEIsaUJBQWlCLENBQUMsSUFBSTs4TUFJakMsVUFBVTtzQkFEYixXQUFXO3VCQUFDLE9BQU87Z0JBWW9CLG9CQUFvQjtzQkFBM0QsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxpQkFBaUI7c0JBQXhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDakIsU0FBUztzQkFBN0IsS0FBSzt1QkFBQyxZQUFZO2dCQUVULHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmltcG9ydCB7IEV1aUV1TGFuZ3VhZ2VzLCBFdWlMYW5ndWFnZSB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBFdWlBcHBTaGVsbFNlcnZpY2UgfSBmcm9tICdAZXVpL2NvcmUnO1xuaW1wb3J0IHsgRXVpRGlhbG9nQ29uZmlnLCBFdWlEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1kaWFsb2cnO1xuXG5pbXBvcnQgeyBFdWlNb2RhbFNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC1zZWxlY3Rvci9tb2RhbC1zZWxlY3Rvci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2V1aS1sYW5ndWFnZS1zZWxlY3RvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xhbmd1YWdlLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9fc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpTGFuZ3VhZ2VTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2V1aS1sYW5ndWFnZS1zZWxlY3RvcicsXG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlcz8ubGVuZ3RoIDw9IDEgPyAnZXVpLWxhbmd1YWdlLXNlbGVjdG9yLS1lbXB0eScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaXNUb29sYmFyU2VsZWN0b3IgPyAnZXVpLWxhbmd1YWdlLXNlbGVjdG9yLS10b29sYmFyLXNlbGVjdG9yJyA6ICcnLFxuICAgICAgICBdLmpvaW4oJyAnKS50cmltKCk7XG4gICAgfVxuXG4gICAgbGFuZ3VhZ2VzOiBFdWlMYW5ndWFnZVtdO1xuICAgIHNlbGVjdGVkTGFuZ3VhZ2U6IEV1aUxhbmd1YWdlO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc0xhbmd1YWdlU2VsZWN0aW9uID0gdHJ1ZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNUb29sYmFyU2VsZWN0b3IgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZXVpUHJpbWFyeSA9IGZhbHNlO1xuICAgIEBJbnB1dCgnYXJpYS1sYWJlbCcpIGFyaWFMYWJlbCA9ICdDaGFuZ2UgTGFuZ3VhZ2UnO1xuXG4gICAgQE91dHB1dCgpIGxhbmd1YWdlU2VsZWN0b3JDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcblxuICAgIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGV1aURpYWxvZ1NlcnZpY2U6IEV1aURpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhcHBTaGVsbFNlcnZpY2U6IEV1aUFwcFNoZWxsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgICkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgYXQgbGVhc3Qgb25lIGFuZCBtYXggZm91ciBsYW5ndWFnZXMuXG4gICAgICovXG4gICAgZ2V0IGlzU2hvd0Ryb3BEb3duKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZXM/Lmxlbmd0aCA+IDEgJiYgdGhpcy5sYW5ndWFnZXM/Lmxlbmd0aCA8IDQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBhdCBsZWFzdCBmaXZlIGxhbmd1YWdlcy5cbiAgICAgKi9cbiAgICBnZXQgaXNTaG93TW9kYWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhbmd1YWdlcz8ubGVuZ3RoID49IDQ7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIHVwZGF0ZSBsYW5ndWFnZXMgYXJyYXkgYmFzZWQgb24gQXBwU2hlbGwgU3RhdGUgJ2xhbmd1YWdlJyBjaGFuZ2VzXG4gICAgICAgIHRoaXMuYXBwU2hlbGxTZXJ2aWNlLnN0YXRlJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKCdsYW5ndWFnZXMnKSxcbiAgICAgICAgICAgICAgICBtYXAoKHN0YXRlKSA9PiBzdGF0ZS5sYW5ndWFnZXMpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGFuZ3VhZ2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZXMgPSBsYW5ndWFnZXMgPyBFdWlFdUxhbmd1YWdlcy5nZXRPcmRlcmVkTGFuZ3VhZ2VzKGxhbmd1YWdlcykgOiBFdWlFdUxhbmd1YWdlcy5nZXRMYW5ndWFnZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBhY3RpdmVMYW5ndWFnZSBhcnJheSBiYXNlZCBvbiBBcHBTaGVsbCBTdGF0ZSAnbGFuZ3VhZ2UnIGNoYW5nZXNcbiAgICAgICAgdGhpcy5hcHBTaGVsbFNlcnZpY2Uuc3RhdGUkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbEtleUNoYW5nZWQoJ2FjdGl2ZUxhbmd1YWdlJyksXG4gICAgICAgICAgICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUuYWN0aXZlTGFuZ3VhZ2UpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYWN0aXZlTGFuZ3VhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UgPSB0aGlzLmdldExhbmd1YWdlKGFjdGl2ZUxhbmd1YWdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgbGV0IGhhc1Rvb2xiYXJQYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGhhc1Rvb2xiYXJQYXJlbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgnZXVpLXRvb2xiYXInKTtcblxuICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc1Rvb2xiYXJQYXJlbnQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNUb29sYmFyU2VsZWN0b3IgPSB0cnVlO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgb25MYW5ndWFnZUNoYW5nZWQobGFuZ3VhZ2U6IEV1aUxhbmd1YWdlKTogdm9pZCB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgQXBwU2hlbGxTZXJ2aWNlIHN0YXRlXG4gICAgICAgIHRoaXMuYXBwU2hlbGxTZXJ2aWNlLnNldFN0YXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuYXBwU2hlbGxTZXJ2aWNlLnN0YXRlLFxuICAgICAgICAgICAgYWN0aXZlTGFuZ3VhZ2U6IGxhbmd1YWdlLmNvZGUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBtb2RhbCB0aGF0IHJlbmRlcnMgdGhlIFV4TGFuZ3VhZ2UgYXJyYXkgd2l0aCBtb2RhbCBhY3Rpb25zIGJpbmRpbmdzIHRvIHRoaXMgQ29tcG9uZW50XG4gICAgICovXG4gICAgb25PcGVuKHRpdGxlTGFiZWw6IHN0cmluZyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdldWkubGFuZ3VhZ2VTZWxlY3Rvci5tb2RhbFRpdGxlJykpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ldWlEaWFsb2dTZXJ2aWNlLm9wZW5EaWFsb2coXG4gICAgICAgICAgICBuZXcgRXVpRGlhbG9nQ29uZmlnKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGVMYWJlbCxcbiAgICAgICAgICAgICAgICBoYXNGb290ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGhhc0Nsb3NlZE9uQ2xpY2tPdXRzaWRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGJvZHlDb21wb25lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBFdWlNb2RhbFNlbGVjdG9yQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlczogdGhpcy5sYW5ndWFnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlOiB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNoYW5nZWQ6IChsYW5ndWFnZTogRXVpTGFuZ3VhZ2UpOnZvaWQgPT4gdGhpcy5vbkxhbmd1YWdlQ2hhbmdlZChsYW5ndWFnZSksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGFuZ3VhZ2VTZWxlY3RvckNsaWNrLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRoZSBVeExhbmd1YWdlIE9iamVjdCBmcm9tIGEgZ2l2ZW4gbGFuZ3VhZ2UgY29kZVxuICAgICAqXG4gICAgICogQHBhcmFtIGxhbmd1YWdlQ29kZSB0d28gY2hhciBsYW5ndWFnZSBjb2RlXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRMYW5ndWFnZShsYW5ndWFnZUNvZGU6IHN0cmluZyk6IEV1aUxhbmd1YWdlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VzLmZpbmQoKGxhbmcpID0+IGxhbmcuY29kZSA9PT0gbGFuZ3VhZ2VDb2RlKTtcbiAgICB9XG59XG4iLCJAaWYgKCFoYXNMYW5ndWFnZVNlbGVjdGlvbikge1xuICAgIDxidXR0b24gY2xhc3M9XCJldWktbGFuZ3VhZ2Utc2VsZWN0b3JfX2J1dHRvblwiXG4gICAgICAgIGV1aUJ1dHRvbiBbZXVpQmFzaWNCdXR0b25dPVwiIWlzVG9vbGJhclNlbGVjdG9yXCJcbiAgICAgICAgW2V1aUJyYW5kaW5nXT1cImlzVG9vbGJhclNlbGVjdG9yXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soKVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImxhbmd1YWdlU2VsZWN0b3JJY29uXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJldWktbGFuZ3VhZ2Utc2VsZWN0b3JfX2NvZGVcIj57eyAoYXBwU2hlbGxTZXJ2aWNlLnN0YXRlJCB8IGFzeW5jKS5hY3RpdmVMYW5ndWFnZSB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cblxufSBAZWxzZSBpZiAoaGFzTGFuZ3VhZ2VTZWxlY3Rpb24gJiYgaXNTaG93RHJvcERvd24pIHtcbiAgICA8ZXVpLWRyb3Bkb3duPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZXVpLWxhbmd1YWdlLXNlbGVjdG9yX19idXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICAgICAgZXVpQnV0dG9uIFtldWlCYXNpY0J1dHRvbl09XCIhaXNUb29sYmFyU2VsZWN0b3JcIlxuICAgICAgICAgICAgW2V1aUJyYW5kaW5nXT1cImlzVG9vbGJhclNlbGVjdG9yXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYW5ndWFnZVNlbGVjdG9ySWNvblwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV1aS1sYW5ndWFnZS1zZWxlY3Rvcl9fY29kZVwiPnt7IChhcHBTaGVsbFNlcnZpY2Uuc3RhdGUkIHwgYXN5bmMpLmFjdGl2ZUxhbmd1YWdlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLWxhbmd1YWdlLXNlbGVjdG9yLW1lbnVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsYW5ndWFnZSBvZiBsYW5ndWFnZXNcIlxuICAgICAgICAgICAgICAgICAgICBldWlEcm9wZG93bkl0ZW1cbiAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLWUyZT1cImV1aS1sYW5ndWFnZS1zZWxlY3Rvci1pdGVtX3t7IGxhbmd1YWdlLmNvZGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1sYW5ndWFnZS1zZWxlY3Rvci1tZW51LWxhbmd1YWdlLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25MYW5ndWFnZUNoYW5nZWQobGFuZ3VhZ2UpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGxhbmd1YWdlLmxhYmVsIH19ICh7eyBsYW5ndWFnZS5jb2RlIH19KVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgPC9ldWktZHJvcGRvd24+XG5cbn0gQGVsc2UgaWYgKGhhc0xhbmd1YWdlU2VsZWN0aW9uICYmIGlzU2hvd01vZGFsKSB7XG4gICAgPGJ1dHRvbiBjbGFzcz1cImV1aS1sYW5ndWFnZS1zZWxlY3Rvcl9fYnV0dG9uXCJcbiAgICAgICAgZXVpQnV0dG9uIGV1aUJhc2ljQnV0dG9uXG4gICAgICAgIFtldWlQcmltYXJ5XT1cImlzVG9vbGJhclNlbGVjdG9yXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uT3BlbigpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibGFuZ3VhZ2VTZWxlY3Rvckljb25cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImV1aS1sYW5ndWFnZS1zZWxlY3Rvcl9fY29kZVwiPnt7IChhcHBTaGVsbFNlcnZpY2Uuc3RhdGUkIHwgYXN5bmMpLmFjdGl2ZUxhbmd1YWdlIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxufVxuXG48bmctdGVtcGxhdGUgI2xhbmd1YWdlU2VsZWN0b3JJY29uPlxuICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImV1aS1lY2wtZ2xvYmFsXCI+PC9ldWktaWNvbi1zdmc+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -49,12 +49,8 @@ export class EuiMenuItemComponent {
49
49
  if (!this.item.urlExternalTarget) {
50
50
  this.item.urlExternalTarget = '_blank';
51
51
  }
52
- if (this.item.filtered === undefined) {
53
- this.item.filtered = true;
54
- }
55
- if (this.item.disabled === undefined) {
56
- this.item.visible = true;
57
- }
52
+ this.item.filtered = typeof this.item.filtered == 'boolean' ? this.item.filtered : true;
53
+ this.item.visible = typeof this.item.visible == 'boolean' ? this.item.visible : true;
58
54
  }
59
55
  }
60
56
  /**
@@ -206,4 +202,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImpor
206
202
  type: HostListener,
207
203
  args: ['click', ['$event']]
208
204
  }] } });
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLW1lbnUtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktbWVudS9ldWktbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2V1aS1tZW51L2V1aS1tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFJWixnQkFBZ0IsR0FFbkIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7O0FBUTlELE1BQU0sT0FBTyxvQkFBb0I7SUFLN0IsSUFDVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUNJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlELENBQUM7SUFDRCxJQUNJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEYsQ0FBQztJQUNELElBQ0ksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDN0IsQ0FBQztJQXNCRCxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBekNoQixTQUFJLEdBQUcsVUFBVSxDQUFDO1FB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QUFFLGdCQUFnQixFQUFFO2dCQUNFLFdBQVc7c0JBQWxELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0Usb0JBQW9CO3NCQUEzRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLGdCQUFnQjtzQkFBdkQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFpQy9CLGVBQWU7c0JBRHJCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgT25Jbml0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgRWxlbWVudFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb2N1c2FibGVPcHRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5cbmltcG9ydCB7IGNvbnN1bWVFdmVudCB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBFdWlNZW51SXRlbSB9IGZyb20gJy4vbW9kZWxzL2V1aS1tZW51LWl0ZW0ubW9kZWwnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktbWVudS1pdGVtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLW1lbnUtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpTWVudUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgRm9jdXNhYmxlT3B0aW9uIHtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZSA9ICdtZW51aXRlbSc7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBhcmlhTGFiZWwgPSAnJztcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDc3NDbGFzc2VzKCk7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpIHRhYmluZGV4ID0gJy0xJztcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oYXNwb3B1cCcpXG4gICAgZ2V0IGFyaWFIYXNQb3B1cCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDAgPyB0cnVlIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1leHBhbmRlZCcpXG4gICAgZ2V0IGFyaWFFeHBhbmRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS5jaGlsZHJlbiA/IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLml0ZW0uZXhwYW5kZWQpIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kaXNhYmxlZCcpXG4gICAgZ2V0IGFyaWFEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS5kaXNhYmxlZFxuICAgIH1cblxuICAgIEBJbnB1dCgpIGl0ZW06IEV1aU1lbnVJdGVtO1xuICAgIEBJbnB1dCgpIHBhcmVudDogRXVpTWVudUl0ZW07XG4gICAgQElucHV0KCkgaGFzRXhwYW5kSWNvbiA9IHRydWU7XG4gICAgQE91dHB1dCgpIGV4cGFuZFRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpTWVudUl0ZW0+KCk7XG4gICAgQE91dHB1dCgpIGl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpTWVudUl0ZW0+KCk7XG5cbiAgICBleHBhbmRNZW51TGFiZWwgPSAnRXhwYW5kJztcbiAgICBjb2xsYXBzZU1lbnVMYWJlbCA9ICdDb2xsYXBzZSc7XG5cbiAgICBpc1VybEl0ZW0gPSBmYWxzZTtcbiAgICBpc0xpbmtJdGVtID0gZmFsc2U7XG4gICAgaXNMYWJlbEl0ZW0gPSBmYWxzZTtcbiAgICBpc0FjdGlvbkljb25Gb2N1c2VkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzSWNvbjogYm9vbGVhbjtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzVG9vbHRpcDogYm9vbGVhbjtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNDb2xsYXBzZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc0NvbGxhcHNlZEluaXRpYWxzOiBib29sZWFuO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNCb2xkUm9vdExldmVsOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNVcmxJdGVtID0gKHRoaXMuaXRlbS51cmwgfHwgdGhpcy5pdGVtLnVybEV4dGVybmFsIHx8IHRoaXMuaXRlbS5jaGlsZHJlbiB8fCB0aGlzLml0ZW0uY29tbWFuZCkgJiYgIXRoaXMuaXRlbS5saW5rO1xuICAgICAgICB0aGlzLmlzTGFiZWxJdGVtID0gIXRoaXMuaXRlbS51cmwgJiYgIXRoaXMuaXRlbS51cmxFeHRlcm5hbCAmJiAhdGhpcy5pdGVtLmNvbW1hbmQgJiYgIXRoaXMuaXRlbS5jaGlsZHJlbiAmJiAhdGhpcy5pdGVtLmxpbms7XG5cbiAgICAgICAgdGhpcy5pc0xpbmtJdGVtID0gIXRoaXMuaXNVcmxJdGVtICYmICF0aGlzLmlzTGFiZWxJdGVtO1xuICAgICAgICB0aGlzLmFyaWFMYWJlbCA9IHRoaXMuZ2V0QXJpYUxhYmVsKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5pdGVtICYmIGNoYW5nZXMuaXRlbS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbSA9IGNoYW5nZXMuaXRlbS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZighdGhpcy5pdGVtLnVybEV4dGVybmFsVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtLnVybEV4dGVybmFsVGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLml0ZW0uZmlsdGVyZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbS5maWx0ZXJlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLml0ZW0uZGlzYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdG9wUHJvcGFnYXRpb24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHBhc3MgdGhlIGV2ZW50IGFzIE1vdXNlRXZlbnQuIFdpbGwgYmUgcmVtb3ZlZCBvbiBuZXh0IGVVSSByZWxlYXNlLlxuICAgICAqIEBwYXJhbSBldmVudFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgc3RvcFByb3BhZ2F0aW9uKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1DbGljay5lbWl0KHRoaXMuaXRlbSk7XG4gICAgICAgIGNvbnN1bWVFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgZ2V0IG1lbnVJdGVtVG9vbHRpcCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5oYXNUb29sdGlwICYmIHRoaXMuaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW0udG9vbHRpcCB8fCB0aGlzLmdldFRvb2x0aXBGcm9tSXRlbSh0aGlzLml0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgcGFzcyB0aGUgZXZlbnQgYXMgTW91c2VFdmVudCBvciBLZXlib2FyZEV2ZW50LiBXaWxsIGJlIHJlbW92ZWQgb24gbmV4dCBlVUkgcmVsZWFzZS5cbiAgICAgKiBAcGFyYW0gZXZlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2suZW1pdCh0aGlzLml0ZW0pO1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIGNvbnN1bWVFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXhwYW5kVG9nZ2xlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmV4cGFuZFRvZ2dsZS5lbWl0KHRoaXMuaXRlbSk7XG4gICAgICAgIGNvbnN1bWVFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQWN0aW9uSWNvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBwYXNzIHRoZSBldmVudCBhcyBNb3VzZUV2ZW50LiBXaWxsIGJlIHJlbW92ZWQgb24gbmV4dCBlVUkgcmVsZWFzZS5cbiAgICAgKiBAcGFyYW0gZXZlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3Rpb25JY29uQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbS5hY3Rpb25JY29uPy5hY3Rpb24oZXZlbnQpO1xuICAgICAgICBjb25zdW1lRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFjdGlvbkljb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbS5hY3Rpb25JY29uPy5hY3Rpb24oZXZlbnQpO1xuICAgICAgICAgICAgY29uc3VtZUV2ZW50KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c0FjdGlvbkljb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ldWktbWVudS1pdGVtX19saW5rLWFjdGlvbi1pY29uJykuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5pc0FjdGlvbkljb25Gb2N1c2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbkFjdGlvbkljb25Gb2N1c091dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0FjdGlvbkljb25Gb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGFuIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnRcbiAgICAgKiBAcGFyYW0gcGFydGlhbGx5VmlzaWJsZVxuICAgICAqL1xuICAgIGVsZW1lbnRJc1Zpc2libGVJblZpZXdwb3J0KHBhcnRpYWxseVZpc2libGUgPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCB9ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHsgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGggfSA9IHdpbmRvdyBhcyBXaW5kb3c7XG4gICAgICAgIHJldHVybiBwYXJ0aWFsbHlWaXNpYmxlXG4gICAgICAgICAgICA/ICgodG9wID4gMCAmJiB0b3AgPCBpbm5lckhlaWdodCkgfHxcbiAgICAgICAgICAgICAgICAoYm90dG9tID4gMCAmJiBib3R0b20gPCBpbm5lckhlaWdodCkpICYmXG4gICAgICAgICAgICAoKGxlZnQgPiAwICYmIGxlZnQgPCBpbm5lcldpZHRoKSB8fCAocmlnaHQgPiAwICYmIHJpZ2h0IDwgaW5uZXJXaWR0aCkpXG4gICAgICAgICAgICA6IHRvcCA+PSAwICYmIGxlZnQgPj0gMCAmJiBib3R0b20gPD0gaW5uZXJIZWlnaHQgJiYgcmlnaHQgPD0gaW5uZXJXaWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTY3JvbGwgdGhlIGVsZW1lbnQgaW50byB2aWV3XG4gICAgICogQHBhcmFtIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBzY3JvbGxJbnRvVmlldyhwcm9wZXJ0aWVzOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VG9vbHRpcEZyb21JdGVtKGl0ZW06IEV1aU1lbnVJdGVtKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ubGFiZWwgJiYgaXRlbS50YWdMYWJlbCA/IGAke2l0ZW0ubGFiZWx9ICgke2l0ZW0udGFnTGFiZWx9KWAgOiBpdGVtLmxhYmVsIHx8XG4gICAgICAgICAgICBpdGVtLnRhZ0xhYmVsIHx8XG4gICAgICAgICAgICBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW0ubGFiZWwgfHxcbiAgICAgICAgICAgIHRoaXMuaXRlbS50YWdMYWJlbCB8fFxuICAgICAgICAgICAgKHRoaXMuaXRlbS5hY3Rpb25JY29uICYmIHRoaXMuaXRlbS5hY3Rpb25JY29uLmxhYmVsKSB8fFxuICAgICAgICAgICAgdGhpcy5pdGVtLmljb25MYWJlbCB8fFxuICAgICAgICAgICAgJ0V1aSBtZW51IGl0ZW0nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRlZmF1bHQgZXVpLW1lbnUtaXRlbSBjbGFzcyBvbiB0aGUgSG9zdEJpbmRpbmcgZnVuY3Rpb25cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2V1aS1tZW51LWl0ZW0nLFxuICAgICAgICAgICAgIXRoaXMucGFyZW50ICYmIHRoaXMuaGFzQm9sZFJvb3RMZXZlbCA/ICdldWktbWVudS1pdGVtLS1ib2xkJyA6ICcnLFxuICAgICAgICBdLmpvaW4oJyAnKS50cmltKCk7XG4gICAgfVxufVxuIiwiQGlmIChpdGVtLnZpc2libGUgJiYgaXRlbS5maWx0ZXJlZCkge1xuICAgIEBpZiAoaXNMYWJlbEl0ZW0pIHtcbiAgICAgICAgPGxpXG4gICAgICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgICAgICBpZD1cInt7aXRlbS5pZH19XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fY29udGVudFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWUyZV09XCJpdGVtLmUyZUF0dHJcIlxuICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW0tLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgIFtldWlUb29sdGlwXT1cIm1lbnVJdGVtVG9vbHRpcFwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIHBvc2l0aW9uPVwiYWZ0ZXJcIj5cblxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmsgZXVpLW1lbnUtaXRlbV9fbGluay1jYXRlZ29yeVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtX19saW5rLS1hY3RpdmVdPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtX19saW5rLS1oYXMtc3ViXT1cIml0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgICAgICAgIFtldWlUb29sdGlwXT1cIm1lbnVJdGVtVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgcG9zaXRpb249XCJhZnRlclwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstc3RhcnQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbUljb25Db250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstY29udGVudC1ibG9ja1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1sYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1sYWJlbC1jYXRlZ29yeVwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstZW5kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1FbmRDb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L2xpPlxuICAgIH1cblxuICAgIEBpZiAoaXNVcmxJdGVtKSB7XG4gICAgICAgIDxsaVxuICAgICAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICAgICAgaWQ9XCJ7e2l0ZW0uaWR9fVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWUyZV09XCJpdGVtLmUyZUF0dHJcIlxuICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19jb250ZW50XCJcbiAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtLS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtLS1leHBhbmRlZF09XCJpdGVtLmV4cGFuZGVkIHx8IGl0ZW0uZmlsdGVyZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGlua1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtX19saW5rLS1hY3RpdmVdPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtX19saW5rLS1oYXMtc3ViXT1cIml0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0udXJsID8gaXRlbS51cmwgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJpdGVtLnVybCA/ICdldWktbWVudS1pdGVtX19saW5rLS1hY3RpdmUnIDogJydcIlxuICAgICAgICAgICAgICAgIFtldWlUb29sdGlwXT1cIm1lbnVJdGVtVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgcG9zaXRpb249XCJhZnRlclwiXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtDb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9saT5cbiAgICB9XG5cbiAgICBAaWYgKGlzTGlua0l0ZW0pIHtcbiAgICAgICAgPGxpXG4gICAgICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgICAgICBpZD1cInt7aXRlbS5pZH19XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZTJlXT1cIml0ZW0uZTJlQXR0clwiXG4gICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2NvbnRlbnRcIlxuICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW0tLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW0tLWV4cGFuZGVkXT1cIml0ZW0uZXhwYW5kZWQgfHwgaXRlbS5maWx0ZXJlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0tZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWFjdGl2ZV09XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWhhcy1zdWJdPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgICAgICAgW2V1aVRvb2x0aXBdPVwibWVudUl0ZW1Ub29sdGlwXCJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbj1cImFmdGVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0NvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2xpPlxuICAgIH1cbn1cblxuPG5nLXRlbXBsYXRlICNsaW5rQ29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1zdGFydC1ibG9ja1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtSWNvbkNvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1jb250ZW50LWJsb2NrXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udXJsRXh0ZXJuYWwgJiYgaXRlbS51cmxFeHRlcm5hbFRhcmdldCA9PT0gJ19ibGFuaydcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGFiZWwtZXh0ZXJuYWxcIlxuICAgICAgICAgICAgICAgIGljb249XCJldWktZWNsLWV4dGVybmFsXCJcbiAgICAgICAgICAgICAgICBzaXplPVwiMnhzXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiZXh0ZXJuYWwgbGluayBpY29uXCJcbiAgICAgICAgICAgICAgICBldWlFbmQ+XG4gICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1lbmQtYmxvY2tcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbUVuZENvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBST0pFQ1RFRCBDT05URU5UIEJMT0NLIC0tPlxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUFJPSkVDVEVEIFNUQVJUIEJMT0NLIC0tPlxuPG5nLXRlbXBsYXRlICNpdGVtSWNvbkNvbnRlbnQ+XG4gICAgQGlmICghaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgQGlmIChoYXNJY29uKSB7XG4gICAgICAgICAgICBAaWYgKGl0ZW0uaWNvblN2Z05hbWUpIHtcbiAgICAgICAgICAgICAgICA8IS0tIFNWRyAtLT5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInt7IGl0ZW0uaWNvblN2Z05hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJ7eyBpdGVtLmljb25UeXBlQ2xhc3MgfX1cIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKGl0ZW0uaGFzTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgPCEtLSBNQVJLRVIgLS0+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstbWFya2VyXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwie3sgaXRlbT8ubWFya2VyVHlwZUNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImVsbGlwc2U6c2hhcnBcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwiMnhzXCJcbiAgICAgICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwiaXRlbS5tYXJrZXJUeXBlQ2xhc3MgKyAnICcgKyAnbWFya2VyJ1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGVsc2UgaWYgKCFpc0xhYmVsSXRlbSkge1xuICAgICAgICAgICAgICAgIDwhLS0gREVGQVVMVCBmb3Igbm9uIGNhdGVnb3J5IGl0ZW1zIC0tPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWljb25cIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZWxsaXBzZTpzaGFycFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cIm5ldXRyYWwtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwiMnhzXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgKGl0ZW0uaGFzTWFya2VyKSB7XG4gICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLW1hcmtlclwiXG4gICAgICAgICAgICAgICAgZmlsbENvbG9yPVwie3sgaXRlbT8ubWFya2VyVHlwZUNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICBpY29uPVwiZWxsaXBzZTpzaGFycFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cIjJ4c1wiXG4gICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwiaXRlbS5tYXJrZXJUeXBlQ2xhc3MgKyAnICcgKyAnbWFya2VyJ1wiPlxuICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgIH1cblxuICAgIH0gQGVsc2Uge1xuICAgICAgICBAaWYgKGhhc0NvbGxhcHNlZEluaXRpYWxzKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstaW5pdGlhbHMgZXVpLXUtYy1iZy17e2l0ZW0uaWNvblR5cGVDbGFzc319XCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbS5pbml0aWFscyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBpZiAoaGFzSWNvbikge1xuICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5pY29uU3ZnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICA8IS0tIFNWRyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInt7IGl0ZW0uaWNvblN2Z05hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwie3sgaXRlbS5pY29uVHlwZUNsYXNzIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuXG4gICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoaXRlbS5oYXNNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBNQVJLRVIgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1tYXJrZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwie3sgaXRlbT8ubWFya2VyVHlwZUNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJlbGxpcHNlOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCIyeHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwiaXRlbS5tYXJrZXJUeXBlQ2xhc3MgKyAnICcgKyAnbWFya2VyJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBERUZBVUxUIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiZWxsaXBzZTpzaGFycFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJuZXV0cmFsLWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCIyeHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwiaXRlbS5pY29uTGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstaWNvbiBldWktdS1tbC0yeHNcIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwic3F1YXJlOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwibmV1dHJhbC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCIyeHNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUFJPSkVDVEVEIEVORCBCTE9DSyAtLT5cbjxuZy10ZW1wbGF0ZSAjaXRlbUVuZENvbnRlbnQ+XG4gICAgQGlmIChpdGVtLnRhZ0xhYmVsKSB7XG4gICAgICAgIEBpZiAoaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIDxldWktYmFkZ2UgW2V1aVZhcmlhbnRdPVwiaXRlbS50YWdUeXBlQ2xhc3NcIiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstZG90dGVkLWJhZGdlXCI+PC9ldWktYmFkZ2U+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGV1aS1iYWRnZSBbZXVpVmFyaWFudF09XCJpdGVtLnRhZ1R5cGVDbGFzc1wiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0udGFnTGFiZWwgfX1cbiAgICAgICAgICAgIDwvZXVpLWJhZGdlPlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIml0ZW0uYWN0aW9uSWNvblwiXG4gICAgICAgIGV1aUJ1dHRvblxuICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgZXVpQmFzaWNCdXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbkFjdGlvbkljb25LZXlEb3duKCRldmVudClcIlxuICAgICAgICAoZm9jdXNvdXQpPVwib25BY3Rpb25JY29uRm9jdXNPdXQoKVwiXG4gICAgICAgIChmb2N1cyk9XCJmb2N1c0FjdGlvbkljb24oKVwiXG4gICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1hY3Rpb24taWNvblwiXG4gICAgICAgIFtldWlEaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmFjdGlvbkljb24/LmxhYmVsXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uSWNvbkNsaWNrKCRldmVudClcIj5cbiAgICAgICAgPGV1aS1pY29uLXN2ZyBbaWNvbl09XCJpdGVtLmFjdGlvbkljb24/Lmljb25cIiBbZmlsbENvbG9yXT1cIml0ZW0uYWN0aW9uSWNvbj8uY29sb3JcIj48L2V1aS1pY29uLXN2Zz5cbiAgICA8L2J1dHRvbj5cblxuICAgIEBpZiAoaGFzRXhwYW5kSWNvbikge1xuICAgICAgICA8ZXVpLWljb24tYnV0dG9uICpuZ0lmPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaXRlbS5leHBhbmRlZCA/ICdjaGV2cm9uLXVwOnNoYXJwJzogJ2NoZXZyb24tZG93bjpzaGFycCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIChidXR0b25DbGljayk9XCJvbkV4cGFuZFRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIml0ZW0uZXhwYW5kZWQgPyBjb2xsYXBzZU1lbnVMYWJlbCA6IGV4cGFuZE1lbnVMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgZXVpUm91bmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtldWlEaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCIvPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLW1lbnUtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktbWVudS9ldWktbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2V1aS1tZW51L2V1aS1tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFJWixnQkFBZ0IsR0FFbkIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7O0FBUTlELE1BQU0sT0FBTyxvQkFBb0I7SUFLN0IsSUFDVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUNJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlELENBQUM7SUFDRCxJQUNJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEYsQ0FBQztJQUNELElBQ0ksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDN0IsQ0FBQztJQXNCRCxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBekNoQixTQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ1osY0FBUyxHQUFHLEVBQUUsQ0FBQztRQU1qQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBZ0JyQyxrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDL0MsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFFdEQsb0JBQWUsR0FBRyxRQUFRLENBQUM7UUFDM0Isc0JBQWlCLEdBQUcsVUFBVSxDQUFDO1FBRS9CLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7SUFRaUIsQ0FBQztJQUU5QyxRQUFRO1FBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN4SCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUU1SCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDdEMsSUFBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7WUFDM0MsQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3hGLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pGLENBQUM7SUFDTCxDQUFDO0lBR0Q7OztPQUdHO0lBRUksZUFBZSxDQUFDLEtBQVk7UUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2YsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFHRDs7O09BR0c7SUFDSSxPQUFPLENBQUMsS0FBWTtRQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxjQUFjLENBQUMsS0FBWTtRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFHRDs7O09BR0c7SUFDSSxpQkFBaUIsQ0FBQyxLQUFZO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVNLG1CQUFtQixDQUFDLEtBQW9CO1FBQzNDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLENBQUM7SUFDTCxDQUFDO0lBRU0sZUFBZTtRQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBRU0sS0FBSztRQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7O09BR0c7SUFDSCwwQkFBMEIsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLO1FBQy9DLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzNGLE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBZ0IsQ0FBQztRQUNyRCxPQUFPLGdCQUFnQjtZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQztnQkFDN0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQztnQkFDekMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUM7WUFDdEUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksV0FBVyxJQUFJLEtBQUssSUFBSSxVQUFVLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxVQUFtQjtRQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQWlCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSztZQUNoRixJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQztJQUNiLENBQUM7SUFFTyxZQUFZO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNsQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDbkIsZUFBZSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxhQUFhO1FBQ2pCLE9BQU87WUFDSCxlQUFlO1lBQ2YsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDckUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQzs4R0E5S1Esb0JBQW9CO2tHQUFwQixvQkFBb0IsdUlBcUNULGdCQUFnQiw0Q0FDaEIsZ0JBQWdCLCtDQUNoQixnQkFBZ0IsMEVBQ2hCLGdCQUFnQiw4REFDaEIsZ0JBQWdCLGdjQ25FeEMseWdVQTZQQTs7MkZEbk9hLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDSSxlQUFlLGlCQUdWLGlCQUFpQixDQUFDLElBQUk7K0VBSVgsSUFBSTtzQkFBN0IsV0FBVzt1QkFBQyxXQUFXO2dCQUNRLFNBQVM7c0JBQXhDLFdBQVc7dUJBQUMsaUJBQWlCO2dCQUduQixVQUFVO3NCQURwQixXQUFXO3VCQUFDLE9BQU87Z0JBSVUsUUFBUTtzQkFBckMsV0FBVzt1QkFBQyxlQUFlO2dCQUV4QixZQUFZO3NCQURmLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUs3QixZQUFZO3NCQURmLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUs3QixZQUFZO3NCQURmLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUt4QixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQVVpQyxPQUFPO3NCQUE5QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFVBQVU7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsV0FBVztzQkFBbEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxvQkFBb0I7c0JBQTNELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsZ0JBQWdCO3NCQUF2RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQThCL0IsZUFBZTtzQkFEckIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBFbGVtZW50UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvY3VzYWJsZU9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcblxuaW1wb3J0IHsgY29uc3VtZUV2ZW50IH0gZnJvbSAnQGV1aS9jb3JlJztcbmltcG9ydCB7IEV1aU1lbnVJdGVtIH0gZnJvbSAnLi9tb2RlbHMvZXVpLW1lbnUtaXRlbS5tb2RlbCc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2V1aS1tZW51LWl0ZW0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldWktbWVudS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlNZW51SXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBGb2N1c2FibGVPcHRpb24ge1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKSByb2xlID0gJ21lbnVpdGVtJztcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpIGFyaWFMYWJlbCA9ICcnO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENzc0NsYXNzZXMoKTtcbiAgICB9XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgdGFiaW5kZXggPSAnLTEnO1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhhc3BvcHVwJylcbiAgICBnZXQgYXJpYUhhc1BvcHVwKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCA/IHRydWUgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJylcbiAgICBnZXQgYXJpYUV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtLmNoaWxkcmVuID8gY29lcmNlQm9vbGVhblByb3BlcnR5KHRoaXMuaXRlbS5leHBhbmRlZCkgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJylcbiAgICBnZXQgYXJpYURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtLmRpc2FibGVkXG4gICAgfVxuXG4gICAgQElucHV0KCkgaXRlbTogRXVpTWVudUl0ZW07XG4gICAgQElucHV0KCkgcGFyZW50OiBFdWlNZW51SXRlbTtcbiAgICBASW5wdXQoKSBoYXNFeHBhbmRJY29uID0gdHJ1ZTtcbiAgICBAT3V0cHV0KCkgZXhwYW5kVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlNZW51SXRlbT4oKTtcbiAgICBAT3V0cHV0KCkgaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlNZW51SXRlbT4oKTtcblxuICAgIGV4cGFuZE1lbnVMYWJlbCA9ICdFeHBhbmQnO1xuICAgIGNvbGxhcHNlTWVudUxhYmVsID0gJ0NvbGxhcHNlJztcblxuICAgIGlzVXJsSXRlbSA9IGZhbHNlO1xuICAgIGlzTGlua0l0ZW0gPSBmYWxzZTtcbiAgICBpc0xhYmVsSXRlbSA9IGZhbHNlO1xuICAgIGlzQWN0aW9uSWNvbkZvY3VzZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNJY29uOiBib29sZWFuO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNUb29sdGlwOiBib29sZWFuO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzQ29sbGFwc2VkSW5pdGlhbHM6IGJvb2xlYW47XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc0JvbGRSb290TGV2ZWw6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1VybEl0ZW0gPSAodGhpcy5pdGVtLnVybCB8fCB0aGlzLml0ZW0udXJsRXh0ZXJuYWwgfHwgdGhpcy5pdGVtLmNoaWxkcmVuIHx8IHRoaXMuaXRlbS5jb21tYW5kKSAmJiAhdGhpcy5pdGVtLmxpbms7XG4gICAgICAgIHRoaXMuaXNMYWJlbEl0ZW0gPSAhdGhpcy5pdGVtLnVybCAmJiAhdGhpcy5pdGVtLnVybEV4dGVybmFsICYmICF0aGlzLml0ZW0uY29tbWFuZCAmJiAhdGhpcy5pdGVtLmNoaWxkcmVuICYmICF0aGlzLml0ZW0ubGluaztcblxuICAgICAgICB0aGlzLmlzTGlua0l0ZW0gPSAhdGhpcy5pc1VybEl0ZW0gJiYgIXRoaXMuaXNMYWJlbEl0ZW07XG4gICAgICAgIHRoaXMuYXJpYUxhYmVsID0gdGhpcy5nZXRBcmlhTGFiZWwoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLml0ZW0gJiYgY2hhbmdlcy5pdGVtLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5pdGVtID0gY2hhbmdlcy5pdGVtLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmKCF0aGlzLml0ZW0udXJsRXh0ZXJuYWxUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW0udXJsRXh0ZXJuYWxUYXJnZXQgPSAnX2JsYW5rJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pdGVtLmZpbHRlcmVkID0gdHlwZW9mIHRoaXMuaXRlbS5maWx0ZXJlZCA9PSAnYm9vbGVhbicgPyB0aGlzLml0ZW0uZmlsdGVyZWQgOiB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pdGVtLnZpc2libGUgPSB0eXBlb2YgdGhpcy5pdGVtLnZpc2libGUgPT0gJ2Jvb2xlYW4nID8gdGhpcy5pdGVtLnZpc2libGUgOiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0b3BQcm9wYWdhdGlvbihldmVudDogTW91c2VFdmVudCk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgcGFzcyB0aGUgZXZlbnQgYXMgTW91c2VFdmVudC4gV2lsbCBiZSByZW1vdmVkIG9uIG5leHQgZVVJIHJlbGVhc2UuXG4gICAgICogQHBhcmFtIGV2ZW50XG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBzdG9wUHJvcGFnYXRpb24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQodGhpcy5pdGVtKTtcbiAgICAgICAgY29uc3VtZUV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBnZXQgbWVudUl0ZW1Ub29sdGlwKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmhhc1Rvb2x0aXAgJiYgdGhpcy5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS50b29sdGlwIHx8IHRoaXMuZ2V0VG9vbHRpcEZyb21JdGVtKHRoaXMuaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBwYXNzIHRoZSBldmVudCBhcyBNb3VzZUV2ZW50IG9yIEtleWJvYXJkRXZlbnQuIFdpbGwgYmUgcmVtb3ZlZCBvbiBuZXh0IGVVSSByZWxlYXNlLlxuICAgICAqIEBwYXJhbSBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1DbGljay5lbWl0KHRoaXMuaXRlbSk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgY29uc3VtZUV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FeHBhbmRUb2dnbGUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXhwYW5kVG9nZ2xlLmVtaXQodGhpcy5pdGVtKTtcbiAgICAgICAgY29uc3VtZUV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25BY3Rpb25JY29uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHBhc3MgdGhlIGV2ZW50IGFzIE1vdXNlRXZlbnQuIFdpbGwgYmUgcmVtb3ZlZCBvbiBuZXh0IGVVSSByZWxlYXNlLlxuICAgICAqIEBwYXJhbSBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFjdGlvbkljb25DbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtLmFjdGlvbkljb24/LmFjdGlvbihldmVudCk7XG4gICAgICAgIGNvbnN1bWVFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQWN0aW9uSWNvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgdGhpcy5pdGVtLmFjdGlvbkljb24/LmFjdGlvbihldmVudCk7XG4gICAgICAgICAgICBjb25zdW1lRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzQWN0aW9uSWNvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmV1aS1tZW51LWl0ZW1fX2xpbmstYWN0aW9uLWljb24nKS5mb2N1cygpO1xuICAgICAgICB0aGlzLmlzQWN0aW9uSWNvbkZvY3VzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uQWN0aW9uSWNvbkZvY3VzT3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzQWN0aW9uSWNvbkZvY3VzZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYW4gZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydFxuICAgICAqIEBwYXJhbSBwYXJ0aWFsbHlWaXNpYmxlXG4gICAgICovXG4gICAgZWxlbWVudElzVmlzaWJsZUluVmlld3BvcnQocGFydGlhbGx5VmlzaWJsZSA9IGZhbHNlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0IH0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgeyBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCB9ID0gd2luZG93IGFzIFdpbmRvdztcbiAgICAgICAgcmV0dXJuIHBhcnRpYWxseVZpc2libGVcbiAgICAgICAgICAgID8gKCh0b3AgPiAwICYmIHRvcCA8IGlubmVySGVpZ2h0KSB8fFxuICAgICAgICAgICAgICAgIChib3R0b20gPiAwICYmIGJvdHRvbSA8IGlubmVySGVpZ2h0KSkgJiZcbiAgICAgICAgICAgICgobGVmdCA+IDAgJiYgbGVmdCA8IGlubmVyV2lkdGgpIHx8IChyaWdodCA+IDAgJiYgcmlnaHQgPCBpbm5lcldpZHRoKSlcbiAgICAgICAgICAgIDogdG9wID49IDAgJiYgbGVmdCA+PSAwICYmIGJvdHRvbSA8PSBpbm5lckhlaWdodCAmJiByaWdodCA8PSBpbm5lcldpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNjcm9sbCB0aGUgZWxlbWVudCBpbnRvIHZpZXdcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllc1xuICAgICAqL1xuICAgIHNjcm9sbEludG9WaWV3KHByb3BlcnRpZXM6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcocHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUb29sdGlwRnJvbUl0ZW0oaXRlbTogRXVpTWVudUl0ZW0pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gaXRlbS5sYWJlbCAmJiBpdGVtLnRhZ0xhYmVsID8gYCR7aXRlbS5sYWJlbH0gKCR7aXRlbS50YWdMYWJlbH0pYCA6IGl0ZW0ubGFiZWwgfHxcbiAgICAgICAgICAgIGl0ZW0udGFnTGFiZWwgfHxcbiAgICAgICAgICAgIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS5sYWJlbCB8fFxuICAgICAgICAgICAgdGhpcy5pdGVtLnRhZ0xhYmVsIHx8XG4gICAgICAgICAgICAodGhpcy5pdGVtLmFjdGlvbkljb24gJiYgdGhpcy5pdGVtLmFjdGlvbkljb24ubGFiZWwpIHx8XG4gICAgICAgICAgICB0aGlzLml0ZW0uaWNvbkxhYmVsIHx8XG4gICAgICAgICAgICAnRXVpIG1lbnUgaXRlbSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBldWktbWVudS1pdGVtIGNsYXNzIG9uIHRoZSBIb3N0QmluZGluZyBmdW5jdGlvblxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRDc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZXVpLW1lbnUtaXRlbScsXG4gICAgICAgICAgICAhdGhpcy5wYXJlbnQgJiYgdGhpcy5oYXNCb2xkUm9vdExldmVsID8gJ2V1aS1tZW51LWl0ZW0tLWJvbGQnIDogJycsXG4gICAgICAgIF0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG59XG4iLCJAaWYgKGl0ZW0udmlzaWJsZSAmJiBpdGVtLmZpbHRlcmVkKSB7XG4gICAgQGlmIChpc0xhYmVsSXRlbSkge1xuICAgICAgICA8bGlcbiAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgIGlkPVwie3tpdGVtLmlkfX1cIlxuICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19jb250ZW50XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZTJlXT1cIml0ZW0uZTJlQXR0clwiXG4gICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbS0tZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2V1aVRvb2x0aXBdPVwibWVudUl0ZW1Ub29sdGlwXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgcG9zaXRpb249XCJhZnRlclwiPlxuXG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluayBldWktbWVudS1pdGVtX19saW5rLWNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0tZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWFjdGl2ZV09XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWhhcy1zdWJdPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgICAgICAgW2V1aVRvb2x0aXBdPVwibWVudUl0ZW1Ub29sdGlwXCJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbj1cImFmdGVyXCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1zdGFydC1ibG9ja1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtSWNvbkNvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1jb250ZW50LWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWxhYmVsLWNhdGVnb3J5XCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1lbmQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbUVuZENvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbGk+XG4gICAgfVxuXG4gICAgQGlmIChpc1VybEl0ZW0pIHtcbiAgICAgICAgPGxpXG4gICAgICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgICAgICBpZD1cInt7aXRlbS5pZH19XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZTJlXT1cIml0ZW0uZTJlQXR0clwiXG4gICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2NvbnRlbnRcIlxuICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW0tLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW0tLWV4cGFuZGVkXT1cIml0ZW0uZXhwYW5kZWQgfHwgaXRlbS5maWx0ZXJlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0tZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWFjdGl2ZV09XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWhhcy1zdWJdPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS51cmwgPyBpdGVtLnVybCA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIml0ZW0udXJsID8gJ2V1aS1tZW51LWl0ZW1fX2xpbmstLWFjdGl2ZScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgW2V1aVRvb2x0aXBdPVwibWVudUl0ZW1Ub29sdGlwXCJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbj1cImFmdGVyXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0NvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2xpPlxuICAgIH1cblxuICAgIEBpZiAoaXNMaW5rSXRlbSkge1xuICAgICAgICA8bGlcbiAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgIGlkPVwie3tpdGVtLmlkfX1cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1lMmVdPVwiaXRlbS5lMmVBdHRyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fY29udGVudFwiXG4gICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbS0tZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbS0tZXhwYW5kZWRdPVwiaXRlbS5leHBhbmRlZCB8fCBpdGVtLmZpbHRlcmVkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmtcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtX19saW5rLS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0tYWN0aXZlXT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0taGFzLXN1Yl09XCJpdGVtLmNoaWxkcmVuPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICAgICAgICBbZXVpVG9vbHRpcF09XCJtZW51SXRlbVRvb2x0aXBcIlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uPVwiYWZ0ZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaW5rQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbGk+XG4gICAgfVxufVxuXG48bmctdGVtcGxhdGUgI2xpbmtDb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLXN0YXJ0LWJsb2NrXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1JY29uQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWNvbnRlbnQtYmxvY2tcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstbGFiZWwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstbGFiZWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS51cmxFeHRlcm5hbCAmJiBpdGVtLnVybEV4dGVybmFsVGFyZ2V0ID09PSAnX2JsYW5rJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19sYWJlbC1leHRlcm5hbFwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImV1aS1lY2wtZXh0ZXJuYWxcIlxuICAgICAgICAgICAgICAgIHNpemU9XCIyeHNcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJleHRlcm5hbCBsaW5rIGljb25cIlxuICAgICAgICAgICAgICAgIGV1aUVuZD5cbiAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWVuZC1ibG9ja1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtRW5kQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUFJPSkVDVEVEIENPTlRFTlQgQkxPQ0sgLS0+XG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQUk9KRUNURUQgU1RBUlQgQkxPQ0sgLS0+XG48bmctdGVtcGxhdGUgI2l0ZW1JY29uQ29udGVudD5cbiAgICBAaWYgKCFpc0NvbGxhcHNlZCkge1xuICAgICAgICBAaWYgKGhhc0ljb24pIHtcbiAgICAgICAgICAgIEBpZiAoaXRlbS5pY29uU3ZnTmFtZSkge1xuICAgICAgICAgICAgICAgIDwhLS0gU1ZHIC0tPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWljb25cIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwie3sgaXRlbS5pY29uU3ZnTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IGl0ZW0uaWNvblR5cGVDbGFzcyB9fVwiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoaXRlbS5oYXNNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICA8IS0tIE1BUktFUiAtLT5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1tYXJrZXJcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJ7eyBpdGVtPy5tYXJrZXJUeXBlQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZWxsaXBzZTpzaGFycFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCIyeHNcIlxuICAgICAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJpdGVtLm1hcmtlclR5cGVDbGFzcyArICcgJyArICdtYXJrZXInXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZWxzZSBpZiAoIWlzTGFiZWxJdGVtKSB7XG4gICAgICAgICAgICAgICAgPCEtLSBERUZBVUxUIGZvciBub24gY2F0ZWdvcnkgaXRlbXMgLS0+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJlbGxpcHNlOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwibmV1dHJhbC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCIyeHNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoaXRlbS5oYXNNYXJrZXIpIHtcbiAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstbWFya2VyXCJcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJ7eyBpdGVtPy5tYXJrZXJUeXBlQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgIGljb249XCJlbGxpcHNlOnNoYXJwXCJcbiAgICAgICAgICAgICAgICBzaXplPVwiMnhzXCJcbiAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJpdGVtLm1hcmtlclR5cGVDbGFzcyArICcgJyArICdtYXJrZXInXCI+XG4gICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgfVxuXG4gICAgfSBAZWxzZSB7XG4gICAgICAgIEBpZiAoaGFzQ29sbGFwc2VkSW5pdGlhbHMpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1pbml0aWFscyBldWktdS1jLWJnLXt7aXRlbS5pY29uVHlwZUNsYXNzfX1cIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLmluaXRpYWxzIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgQGlmIChoYXNJY29uKSB7XG4gICAgICAgICAgICAgICAgQGlmIChpdGVtLmljb25TdmdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU1ZHIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwie3sgaXRlbS5pY29uU3ZnTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJ7eyBpdGVtLmljb25UeXBlQ2xhc3MgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChpdGVtLmhhc01hcmtlcikge1xuICAgICAgICAgICAgICAgICAgICA8IS0tIE1BUktFUiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLW1hcmtlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJ7eyBpdGVtPy5tYXJrZXJUeXBlQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImVsbGlwc2U6c2hhcnBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJpdGVtLm1hcmtlclR5cGVDbGFzcyArICcgJyArICdtYXJrZXInXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8IS0tIERFRkFVTFQgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJlbGxpcHNlOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cIm5ldXRyYWwtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJpdGVtLmljb25MYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1pY29uIGV1aS11LW1sLTJ4c1wiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJzcXVhcmU6c2hhcnBcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJuZXV0cmFsLWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjJ4c1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQUk9KRUNURUQgRU5EIEJMT0NLIC0tPlxuPG5nLXRlbXBsYXRlICNpdGVtRW5kQ29udGVudD5cbiAgICBAaWYgKGl0ZW0udGFnTGFiZWwpIHtcbiAgICAgICAgQGlmIChpc0NvbGxhcHNlZCkge1xuICAgICAgICAgICAgPGV1aS1iYWRnZSBbZXVpVmFyaWFudF09XCJpdGVtLnRhZ1R5cGVDbGFzc1wiIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1kb3R0ZWQtYmFkZ2VcIj48L2V1aS1iYWRnZT5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8ZXVpLWJhZGdlIFtldWlWYXJpYW50XT1cIml0ZW0udGFnVHlwZUNsYXNzXCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbS50YWdMYWJlbCB9fVxuICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwiaXRlbS5hY3Rpb25JY29uXCJcbiAgICAgICAgZXVpQnV0dG9uXG4gICAgICAgIGV1aVJvdW5kZWRcbiAgICAgICAgZXVpSWNvbkJ1dHRvblxuICAgICAgICBldWlTaXplU1xuICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uQWN0aW9uSWNvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAgIChmb2N1c291dCk9XCJvbkFjdGlvbkljb25Gb2N1c091dCgpXCJcbiAgICAgICAgKGZvY3VzKT1cImZvY3VzQWN0aW9uSWNvbigpXCJcbiAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWFjdGlvbi1pY29uXCJcbiAgICAgICAgW2V1aURpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0uYWN0aW9uSWNvbj8ubGFiZWxcIlxuICAgICAgICAoY2xpY2spPVwib25BY3Rpb25JY29uQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICA8ZXVpLWljb24tc3ZnIFtpY29uXT1cIml0ZW0uYWN0aW9uSWNvbj8uaWNvblwiIFtmaWxsQ29sb3JdPVwiaXRlbS5hY3Rpb25JY29uPy5jb2xvclwiPjwvZXVpLWljb24tc3ZnPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgQGlmIChoYXNFeHBhbmRJY29uKSB7XG4gICAgICAgIDxldWktaWNvbi1idXR0b24gKm5nSWY9XCJpdGVtLmNoaWxkcmVuPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJpdGVtLmV4cGFuZGVkID8gJ2NoZXZyb24tdXA6c2hhcnAnOiAnY2hldnJvbi1kb3duOnNoYXJwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uRXhwYW5kVG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiaXRlbS5leHBhbmRlZCA/IGNvbGxhcHNlTWVudUxhYmVsIDogZXhwYW5kTWVudUxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2V1aURpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIi8+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==