@gipisistemas/ng-core 1.1.3 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. package/assets/styles/colors.scss +5 -1
  2. package/bundles/gipisistemas-ng-core.umd.js +8379 -7856
  3. package/bundles/gipisistemas-ng-core.umd.js.map +1 -1
  4. package/bundles/gipisistemas-ng-core.umd.min.js +10 -9
  5. package/bundles/gipisistemas-ng-core.umd.min.js.map +1 -1
  6. package/core/gipi-components/models/sort.model.d.ts +3 -3
  7. package/core/utils/array.util.d.ts +2 -2
  8. package/core/utils/object.util.d.ts +3 -5
  9. package/esm2015/core/gipi-components/models/sort.model.js +1 -1
  10. package/esm2015/core/gipi-components/services/abstract-crud.service.js +18 -24
  11. package/esm2015/core/utils/array.util.js +4 -2
  12. package/esm2015/core/utils/object.util.js +5 -9
  13. package/esm2015/gipi-components.js +10 -1
  14. package/esm2015/shared/components/input/input.component.js +46 -23
  15. package/esm2015/shared/components/table/table.component.js +1 -1
  16. package/esm2015/shared/gipi-components/abstract-form/abstract-form.component.js +1 -1
  17. package/esm2015/shared/gipi-components/button/button.component.js +2 -2
  18. package/esm2015/shared/gipi-components/card/card.component.js +113 -0
  19. package/esm2015/shared/gipi-components/datepicker/datepicker/datepicker.component.js +8 -3
  20. package/esm2015/shared/gipi-components/empty-state/empty-state.component.js +30 -0
  21. package/esm2015/shared/gipi-components/layout-grid/col.directive.js +4 -4
  22. package/esm2015/shared/gipi-components/month-year-picker/month-year-picker.component.js +2 -2
  23. package/esm2015/shared/gipi-components/notification/notification.component.js +8 -3
  24. package/esm2015/shared/gipi-components/sidebar/sidenav/sidenav.component.js +35 -3
  25. package/esm2015/shared/gipi-components/slide-toggle/slide-toggle.component.js +113 -0
  26. package/esm2015/shared/gipi-components/tabs/shared/dynamic-tab.directive.js +18 -0
  27. package/esm2015/shared/gipi-components/tabs/shared/tab.model.js +8 -0
  28. package/esm2015/shared/gipi-components/tabs/tab/tab.component.js +66 -0
  29. package/esm2015/shared/gipi-components/tabs/tab-group/tab-group.component.js +123 -0
  30. package/esm2015/shared/gipi-components/textarea/textarea.component.js +298 -0
  31. package/esm2015/shared/shared.module.js +20 -16
  32. package/esm2015/shared.js +1 -5
  33. package/esm5/core/gipi-components/models/sort.model.js +1 -1
  34. package/esm5/core/gipi-components/services/abstract-crud.service.js +18 -24
  35. package/esm5/core/utils/array.util.js +4 -3
  36. package/esm5/core/utils/object.util.js +5 -9
  37. package/esm5/gipi-components.js +10 -1
  38. package/esm5/shared/components/input/input.component.js +46 -23
  39. package/esm5/shared/components/table/table.component.js +1 -1
  40. package/esm5/shared/gipi-components/abstract-form/abstract-form.component.js +1 -1
  41. package/esm5/shared/gipi-components/button/button.component.js +2 -2
  42. package/esm5/shared/gipi-components/card/card.component.js +135 -0
  43. package/esm5/shared/gipi-components/datepicker/datepicker/datepicker.component.js +8 -3
  44. package/esm5/shared/gipi-components/empty-state/empty-state.component.js +33 -0
  45. package/esm5/shared/gipi-components/layout-grid/col.directive.js +4 -4
  46. package/esm5/shared/gipi-components/month-year-picker/month-year-picker.component.js +2 -2
  47. package/esm5/shared/gipi-components/notification/notification.component.js +8 -3
  48. package/esm5/shared/gipi-components/sidebar/sidenav/sidenav.component.js +35 -3
  49. package/esm5/shared/gipi-components/slide-toggle/slide-toggle.component.js +127 -0
  50. package/esm5/shared/gipi-components/tabs/shared/dynamic-tab.directive.js +19 -0
  51. package/esm5/shared/gipi-components/tabs/shared/tab.model.js +10 -0
  52. package/esm5/shared/gipi-components/tabs/tab/tab.component.js +67 -0
  53. package/esm5/shared/gipi-components/tabs/tab-group/tab-group.component.js +131 -0
  54. package/esm5/shared/gipi-components/textarea/textarea.component.js +352 -0
  55. package/esm5/shared/shared.module.js +20 -16
  56. package/esm5/shared.js +1 -5
  57. package/fesm2015/gipisistemas-ng-core.js +1741 -1303
  58. package/fesm2015/gipisistemas-ng-core.js.map +1 -1
  59. package/fesm5/gipisistemas-ng-core.js +8369 -7851
  60. package/fesm5/gipisistemas-ng-core.js.map +1 -1
  61. package/gipi-components.d.ts +8 -0
  62. package/gipisistemas-ng-core.metadata.json +1 -1
  63. package/package.json +1 -2
  64. package/shared/components/input/input.component.d.ts +13 -11
  65. package/shared/components/table/table.component.d.ts +3 -3
  66. package/shared/gipi-components/card/card.component.d.ts +23 -0
  67. package/shared/gipi-components/empty-state/empty-state.component.d.ts +5 -0
  68. package/shared/gipi-components/notification/notification.component.d.ts +1 -0
  69. package/shared/gipi-components/sidebar/sidenav/sidenav.component.d.ts +7 -0
  70. package/shared/gipi-components/slide-toggle/slide-toggle.component.d.ts +27 -0
  71. package/shared/{directives → gipi-components/tabs/shared}/dynamic-tab.directive.d.ts +1 -1
  72. package/shared/gipi-components/tabs/shared/tab.model.d.ts +12 -0
  73. package/shared/{components → gipi-components/tabs}/tab/tab.component.d.ts +4 -2
  74. package/shared/gipi-components/tabs/tab-group/tab-group.component.d.ts +22 -0
  75. package/shared/gipi-components/textarea/textarea.component.d.ts +68 -0
  76. package/shared.d.ts +0 -4
  77. package/esm2015/shared/components/select-button/select-button.component.js +0 -181
  78. package/esm2015/shared/components/tab/tab.component.js +0 -57
  79. package/esm2015/shared/components/tab-group/tab-group.component.js +0 -117
  80. package/esm2015/shared/directives/dynamic-tab.directive.js +0 -18
  81. package/esm5/shared/components/select-button/select-button.component.js +0 -195
  82. package/esm5/shared/components/tab/tab.component.js +0 -58
  83. package/esm5/shared/components/tab-group/tab-group.component.js +0 -125
  84. package/esm5/shared/directives/dynamic-tab.directive.js +0 -19
  85. package/shared/components/select-button/select-button.component.d.ts +0 -35
  86. package/shared/components/tab-group/tab-group.component.d.ts +0 -22
@@ -1,14 +1,17 @@
1
1
  var InputComponent_1;
2
2
  import { __decorate, __metadata } from "tslib";
3
- import { Component, ContentChild, ElementRef, EventEmitter, Input, Output, TemplateRef, ViewChild, forwardRef } from '@angular/core';
3
+ import { ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild, forwardRef } from '@angular/core';
4
4
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
5
  import { BehaviorSubject } from 'rxjs';
6
6
  import { debounceTime } from 'rxjs/operators';
7
- import { PhoneUtil } from '../../../core';
7
+ import { PhoneUtil } from '../../../core/utils/phone.util';
8
+ import { StringUtil } from '../../../core/utils/string.util';
8
9
  let InputComponent = InputComponent_1 = class InputComponent {
9
- constructor() {
10
- this._inputSubject = new BehaviorSubject('');
11
- this._maskPhone = new BehaviorSubject('');
10
+ constructor(elementRef, _changeDetectorRef) {
11
+ this.elementRef = elementRef;
12
+ this._changeDetectorRef = _changeDetectorRef;
13
+ this._inputSubject$ = new BehaviorSubject('');
14
+ this._maskPhone$ = new BehaviorSubject('');
12
15
  this.tooltip = '';
13
16
  this.styleClassFormField = '';
14
17
  this.styleClassSuffix = '';
@@ -29,26 +32,32 @@ let InputComponent = InputComponent_1 = class InputComponent {
29
32
  this.onTouch = () => { };
30
33
  }
31
34
  get value() {
32
- return this.val;
35
+ return this._value;
33
36
  }
34
- set value(val) {
37
+ set value(value) {
38
+ let valueAux = null;
35
39
  if (this.lowerCase) {
36
- this.val = this.checkLowercase(this.checkSpaceDrop(val));
40
+ valueAux = this.checkLowercase(this.checkSpaceDrop(value));
37
41
  }
38
42
  else {
39
- this.val = this.checkUppercase(this.checkSpaceDrop(val));
43
+ valueAux = this.checkUppercase(this.checkSpaceDrop(value));
40
44
  }
41
- this.onChange(this.val);
45
+ this._value = valueAux;
46
+ if (this.value !== value) {
47
+ this._changeDetectorRef.detectChanges();
48
+ }
49
+ this.onChange(this._value);
42
50
  this.onTouch();
43
51
  }
44
52
  ngOnInit() {
45
53
  if (this.phone) {
46
- this._inputSubject.pipe(debounceTime(300)).subscribe(value => {
47
- this._maskPhone.next(PhoneUtil.mask(value));
54
+ this._inputSubject$.pipe(debounceTime(300)).subscribe(value => {
55
+ if (!StringUtil.isEmpty(value)) {
56
+ this._maskPhone$.next(PhoneUtil.mask(value));
57
+ }
48
58
  });
49
59
  }
50
60
  }
51
- ngAfterViewInit() { }
52
61
  registerOnChange(fn) {
53
62
  this.onChange = fn;
54
63
  }
@@ -56,8 +65,16 @@ let InputComponent = InputComponent_1 = class InputComponent {
56
65
  this.onTouch = fn;
57
66
  }
58
67
  writeValue(value) {
68
+ if (this.phone && !StringUtil.isEmpty(value)) {
69
+ this._inputSubject$.next(value);
70
+ this._changeDetectorRef.detectChanges();
71
+ }
59
72
  this.value = value;
60
73
  }
74
+ setDisabledState(isDisabled) {
75
+ this.disabled = isDisabled;
76
+ this._changeDetectorRef.detectChanges();
77
+ }
61
78
  checkSpaceDrop(value) {
62
79
  if (this.spaceDrop && value) {
63
80
  return value.replace(/\s/g, '');
@@ -87,23 +104,27 @@ let InputComponent = InputComponent_1 = class InputComponent {
87
104
  this.onTouch();
88
105
  }
89
106
  }
90
- onInputPhoneKeyup(event) {
107
+ onInputPhoneKeydown(event) {
91
108
  if (!this.phone) {
92
109
  return;
93
110
  }
94
111
  const value = PhoneUtil.removeCharacters(event.target.value);
95
112
  const key = event.key;
96
- if (/\d/.test(key) && value.length < 12) {
97
- this._maskPhone.next('0*');
113
+ if (/\d/.test(key) && ((value.trim().length < 8) || (value.trim().length > 12))) {
114
+ this._maskPhone$.next('0*');
98
115
  }
99
116
  }
100
117
  onInputPhoneChange(value) {
101
118
  if (!this.phone) {
102
119
  return;
103
120
  }
104
- this._inputSubject.next(value);
121
+ this._inputSubject$.next(value);
105
122
  }
106
123
  };
124
+ InputComponent.ctorParameters = () => [
125
+ { type: ElementRef },
126
+ { type: ChangeDetectorRef }
127
+ ];
107
128
  __decorate([
108
129
  ViewChild('input', { static: false, read: ElementRef }),
109
130
  __metadata("design:type", ElementRef)
@@ -173,9 +194,10 @@ __decorate([
173
194
  __metadata("design:type", String)
174
195
  ], InputComponent.prototype, "appearance", void 0);
175
196
  __decorate([
176
- Input('value'),
177
- __metadata("design:type", Object)
178
- ], InputComponent.prototype, "val", void 0);
197
+ Input(),
198
+ __metadata("design:type", Object),
199
+ __metadata("design:paramtypes", [Object])
200
+ ], InputComponent.prototype, "value", null);
179
201
  __decorate([
180
202
  Input(),
181
203
  __metadata("design:type", String)
@@ -219,7 +241,7 @@ __decorate([
219
241
  InputComponent = InputComponent_1 = __decorate([
220
242
  Component({
221
243
  selector: 'itss-input',
222
- template: "<div fxLayout=\"column\">\n <mat-label *ngIf=\"label\">\n {{ label }}\n <span *ngIf=\"required && label\"> * </span>\n <gipi-helpful-tip *ngIf=\"tooltip && label\"\n [tooltip]=\"tooltip\">\n </gipi-helpful-tip>\n </mat-label>\n\n <ng-container *ngIf=\"hidePasswordManager && (type === 'password')\">\n <input style=\"opacity: 0;position: absolute;\">\n <input type=\"password\"\n style=\"opacity: 0;position: absolute;\">\n </ng-container>\n\n <mat-form-field [appearance]=\"appearance\"\n [class]=\"styleClassFormField\">\n <input matInput\n #input\n *ngIf=\"mask\"\n autocomplete=\"off\"\n upperCase\n lowerCase\n spaceDrop\n [enabledUpperCase]=\"upperCase\"\n [enabledLowerCase]=\"lowerCase\"\n [spaceDrop]=\"spaceDrop\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n [type]=\"type\"\n [min]=\"min\"\n [max]=\"max\"\n [maxlength]=\"maxlength\"\n [mask]=\"phone ? (_maskPhone | async) : mask\"\n [dropSpecialCharacters]=\"dropSpecialCharacters\"\n [patterns]=\"patterns\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keyup)=\"onInputPhoneKeyup($event)\"\n (ngModelChange)=\"onInputPhoneChange($event)\">\n\n <input matInput\n #input\n *ngIf=\"!mask\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n autocomplete=\"off\"\n upperCase\n [enabledUpperCase]=\"upperCase\"\n [type]=\"type\"\n [min]=\"min\"\n [max]=\"max\"\n [maxlength]=\"maxlength\"\n [mask]=\"phone ? (_maskPhone | async) : ''\"\n spaceDrop\n [spaceDrop]=\"spaceDrop\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keyup)=\"onInputPhoneKeyup($event)\"\n (ngModelChange)=\"onInputPhoneChange($event)\">\n\n <mat-spinner matPrefix\n *ngIf=\"loading\"\n mode=\"indeterminate\"\n diameter=\"17\">\n </mat-spinner>\n\n <div *ngIf=\"suffixRef\"\n matSuffix\n [class]=\"styleClassSuffix\">\n <ng-template [ngTemplateOutlet]=\"suffixRef\"> </ng-template>\n </div>\n </mat-form-field>\n</div>",
244
+ template: "<div fxLayout=\"column\">\n <mat-label *ngIf=\"label\">\n {{ label }}\n <span *ngIf=\"required && label\"> * </span>\n <gipi-helpful-tip *ngIf=\"tooltip && label\"\n [tooltip]=\"tooltip\">\n </gipi-helpful-tip>\n </mat-label>\n\n <ng-container *ngIf=\"hidePasswordManager && (type === 'password')\">\n <input style=\"opacity: 0;position: absolute;\">\n <input type=\"password\"\n style=\"opacity: 0;position: absolute;\">\n </ng-container>\n\n <mat-form-field [appearance]=\"appearance\"\n [class]=\"styleClassFormField\">\n <input matInput\n #input\n *ngIf=\"mask || phone\"\n autocomplete=\"off\"\n upperCase\n lowerCase\n spaceDrop\n [enabledUpperCase]=\"upperCase\"\n [enabledLowerCase]=\"lowerCase\"\n [spaceDrop]=\"spaceDrop\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n [type]=\"type\"\n [min]=\"min\"\n [max]=\"max\"\n [maxlength]=\"maxlength\"\n [mask]=\"phone ? (_maskPhone$ | async) : mask\"\n [dropSpecialCharacters]=\"dropSpecialCharacters\"\n [patterns]=\"patterns\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onInputPhoneKeydown($event)\"\n (ngModelChange)=\"onInputPhoneChange($event)\">\n\n <input matInput\n #input\n *ngIf=\"!mask && !phone\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n autocomplete=\"off\"\n upperCase\n [enabledUpperCase]=\"upperCase\"\n [type]=\"type\"\n [min]=\"min\"\n [max]=\"max\"\n [maxlength]=\"maxlength\"\n [mask]=\"''\"\n spaceDrop\n [spaceDrop]=\"spaceDrop\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n\n <mat-spinner matPrefix\n *ngIf=\"loading\"\n mode=\"indeterminate\"\n diameter=\"17\">\n </mat-spinner>\n\n <div *ngIf=\"suffixRef\"\n matSuffix\n [class]=\"styleClassSuffix\">\n <ng-template [ngTemplateOutlet]=\"suffixRef\"> </ng-template>\n </div>\n </mat-form-field>\n</div>",
223
245
  providers: [
224
246
  {
225
247
  provide: NG_VALUE_ACCESSOR,
@@ -229,7 +251,8 @@ InputComponent = InputComponent_1 = __decorate([
229
251
  ],
230
252
  styles: ["mat-label span{color:#d14014!important}"]
231
253
  }),
232
- __metadata("design:paramtypes", [])
254
+ __metadata("design:paramtypes", [ElementRef,
255
+ ChangeDetectorRef])
233
256
  ], InputComponent);
234
257
  export { InputComponent };
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWMxQyxJQUFhLGNBQWMsc0JBQTNCLE1BQWEsY0FBYztJQTBFdkI7UUFwRVEsa0JBQWEsR0FBNEIsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEUsZUFBVSxHQUE0QixJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQU01RCxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBRXJCLHdCQUFtQixHQUFXLEVBQUUsQ0FBQztRQUVqQyxxQkFBZ0IsR0FBVyxFQUFFLENBQUM7UUFROUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQix3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFFckMsY0FBUyxHQUFXLEdBQUcsQ0FBQztRQUV4QixTQUFJLEdBQVcsTUFBTSxDQUFDO1FBTXRCLGVBQVUsR0FBVyxTQUFTLENBQUM7UUFrQi9CLFVBQUssR0FBWSxLQUFLLENBQUM7UUFFdkIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUV6QiwwQkFBcUIsR0FBWSxJQUFJLENBQUM7UUFFdEMsY0FBUyxH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RUFBRTs7Z0RBQTJCO0FBRTFCO0lBQVIsS0FBSyxFQUFFOzsyREFBc0M7QUFFckM7SUFBUixLQUFLLEVBQUU7O2lEQUF5QjtBQUV4QjtJQUFSLEtBQUssRUFBRTs7NENBQXVCO0FBRXRCO0lBQVIsS0FBSyxFQUFFOzsyQ0FBSztBQUVKO0lBQVIsS0FBSyxFQUFFOzsyQ0FBSztBQUVKO0lBQVIsS0FBSyxFQUFFOztrREFBZ0M7QUFFeEI7SUFBZixLQUFLLENBQUMsT0FBTyxDQUFDOzsyQ0FBVTtBQWNoQjtJQUFSLEtBQUssRUFBRTs7NENBQWlDO0FBRWhDO0lBQVIsS0FBSyxFQUFFOzs2Q0FBd0I7QUFFdkI7SUFBUixLQUFLLEVBQUU7OytDQUEwQjtBQUV6QjtJQUFSLEtBQUssRUFBRTs7NkRBQXVDO0FBRXRDO0lBQVIsS0FBSyxFQUFFOztpREFBNEI7QUFFM0I7SUFBUixLQUFLLEVBQUU7O2lEQUE0QjtBQUUzQjtJQUFSLEtBQUssRUFBRTs7Z0RBQWU7QUFFZDtJQUFSLEtBQUssRUFBRTs7aURBQTRCO0FBRTFCO0lBQVQsTUFBTSxFQUFFOzhCQUFRLFlBQVk7NkNBQTZCO0FBRWhEO0lBQVQsTUFBTSxFQUFFOzhCQUFPLFlBQVk7NENBQTZCO0FBeEVoRCxjQUFjO0lBWjFCLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxZQUFZO1FBQ3RCLHU5RkFBcUM7UUFFckMsU0FBUyxFQUFFO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUEwQixFQUFFLENBQUMsZ0JBQWMsQ0FBQztnQkFDcEUsS0FBSyxFQUFFLElBQUk7YUFDZDtTQUNKOztLQUNKLENBQUM7O0dBQ1csY0FBYyxDQThKMUI7U0E5SlksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBob25lVXRpbCB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2l0c3MtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKTogdHlwZW9mIElucHV0Q29tcG9uZW50ID0+IElucHV0Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ3N1ZmZpeCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzdWZmaXhSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcml2YXRlIF9pbnB1dFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG5cbiAgICBwdWJsaWMgX21hc2tQaG9uZTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcblxuICAgIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSB0b29sdGlwOiBzdHJpbmcgPSAnJztcblxuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3NGb3JtRmllbGQ6IHN0cmluZyA9ICcnO1xuXG4gICAgQElucHV0KCkgc3R5bGVDbGFzc1N1ZmZpeDogc3RyaW5nID0gJyc7XG5cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBoaWRlUGFzc3dvcmRNYW5hZ2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBtYXhsZW5ndGg6IG51bWJlciA9IDI1MDtcblxuICAgIEBJbnB1dCgpIHR5cGU6IHN0cmluZyA9ICd0ZXh0JztcblxuICAgIEBJbnB1dCgpIG1pbjtcblxuICAgIEBJbnB1dCgpIG1heDtcblxuICAgIEBJbnB1dCgpIGFwcGVhcmFuY2U6IHN0cmluZyA9ICdvdXRsaW5lJztcblxuICAgIEBJbnB1dCgndmFsdWUnKSB2YWw6IGFueTtcbiAgICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsO1xuICAgIH1cbiAgICBzZXQgdmFsdWUodmFsOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMubG93ZXJDYXNlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbCA9IHRoaXMuY2hlY2tMb3dlcmNhc2UodGhpcy5jaGVja1NwYWNlRHJvcCh2YWwpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsID0gdGhpcy5jaGVja1VwcGVyY2FzZSh0aGlzLmNoZWNrU3BhY2VEcm9wKHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWwpO1xuICAgICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBtYXNrOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgQElucHV0KCkgcGhvbmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGRyb3BTcGVjaWFsQ2hhcmFjdGVyczogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKSB1cHBlckNhc2U6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGxvd2VyQ2FzZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgcGF0dGVybnM6IGFueTtcblxuICAgIEBJbnB1dCgpIHNwYWNlRHJvcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIGZvY3VzOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIGJsdXI6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBob25lKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dFN1YmplY3QucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tQaG9uZS5uZXh0KFBob25lVXRpbC5tYXNrKHZhbHVlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHsgfVxuXG4gICAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHsgfTtcblxuICAgIG9uVG91Y2g6IGFueSA9ICgpID0+IHsgfTtcblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNoZWNrU3BhY2VEcm9wKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5zcGFjZURyb3AgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjaGVja1VwcGVyY2FzZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMudXBwZXJDYXNlICYmIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY2hlY2tMb3dlcmNhc2UodmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmxvd2VyQ2FzZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIG9uRm9jdXMoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1cy5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQmx1cihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmJsdXIuZW1pdChldmVudCk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5wdXRQaG9uZUtleXVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5waG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gUGhvbmVVdGlsLnJlbW92ZUNoYXJhY3RlcnMoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcblxuICAgICAgICBpZiAoL1xcZC8udGVzdChrZXkpICYmIHZhbHVlLmxlbmd0aCA8IDEyKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrUGhvbmUubmV4dCgnMConKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5wdXRQaG9uZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5waG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgIH1cblxufVxuIl19
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQWM3RCxJQUFhLGNBQWMsc0JBQTNCLE1BQWEsY0FBYztJQWtGdkIsWUFDVyxVQUFzQixFQUNyQixrQkFBcUM7UUFEdEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBOUV6QyxtQkFBYyxHQUE0QixJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuRSxnQkFBVyxHQUE0QixJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQU03RCxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBRXJCLHdCQUFtQixHQUFXLEVBQUUsQ0FBQztRQUVqQyxxQkFBZ0IsR0FBVyxFQUFFLENBQUM7UUFROUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQix3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFFckMsY0FBUyxHQUFXLEdBQUcs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OztrREFBZ0M7QUFHL0I7SUFBUixLQUFLLEVBQUU7OzsyQ0FFUDtBQW1CUTtJQUFSLEtBQUssRUFBRTs7NENBQWlDO0FBRWhDO0lBQVIsS0FBSyxFQUFFOzs2Q0FBd0I7QUFFdkI7SUFBUixLQUFLLEVBQUU7OytDQUEwQjtBQUV6QjtJQUFSLEtBQUssRUFBRTs7NkRBQXVDO0FBRXRDO0lBQVIsS0FBSyxFQUFFOztpREFBNEI7QUFFM0I7SUFBUixLQUFLLEVBQUU7O2lEQUE0QjtBQUUzQjtJQUFSLEtBQUssRUFBRTs7Z0RBQWU7QUFFZDtJQUFSLEtBQUssRUFBRTs7aURBQTRCO0FBRTFCO0lBQVQsTUFBTSxFQUFFOzhCQUFRLFlBQVk7NkNBQTZCO0FBRWhEO0lBQVQsTUFBTSxFQUFFOzhCQUFPLFlBQVk7NENBQTZCO0FBaEZoRCxjQUFjO0lBWjFCLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxZQUFZO1FBQ3RCLDIxRkFBcUM7UUFFckMsU0FBUyxFQUFFO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUEwQixFQUFFLENBQUMsZ0JBQWMsQ0FBQztnQkFDcEUsS0FBSyxFQUFFLElBQUk7YUFDZDtTQUNKOztLQUNKLENBQUM7cUNBb0Z5QixVQUFVO1FBQ0QsaUJBQWlCO0dBcEZ4QyxjQUFjLENBbUwxQjtTQW5MWSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFBob25lVXRpbCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvcGhvbmUudXRpbCc7XG5pbXBvcnQgeyBTdHJpbmdVdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9zdHJpbmcudXRpbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaXRzcy1pbnB1dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpOiB0eXBlb2YgSW5wdXRDb21wb25lbnQgPT4gSW5wdXRDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBFbGVtZW50UmVmIH0pIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnc3VmZml4JywgeyBzdGF0aWM6IGZhbHNlIH0pIHN1ZmZpeFJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHByaXZhdGUgX2lucHV0U3ViamVjdCQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG5cbiAgICBwdWJsaWMgX21hc2tQaG9uZSQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG5cbiAgICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgdG9vbHRpcDogc3RyaW5nID0gJyc7XG5cbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzRm9ybUZpZWxkOiBzdHJpbmcgPSAnJztcblxuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3NTdWZmaXg6IHN0cmluZyA9ICcnO1xuXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaGlkZVBhc3N3b3JkTWFuYWdlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgbWF4bGVuZ3RoOiBudW1iZXIgPSAyNTA7XG5cbiAgICBASW5wdXQoKSB0eXBlOiBzdHJpbmcgPSAndGV4dCc7XG5cbiAgICBASW5wdXQoKSBtaW46IHN0cmluZyB8IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIG1heDogc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgQElucHV0KCkgYXBwZWFyYW5jZTogc3RyaW5nID0gJ291dGxpbmUnO1xuXG4gICAgcHJpdmF0ZSBfdmFsdWU6IGFueTtcbiAgICBASW5wdXQoKSBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBsZXQgdmFsdWVBdXg6IGFueSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMubG93ZXJDYXNlKSB7XG4gICAgICAgICAgICB2YWx1ZUF1eCA9IHRoaXMuY2hlY2tMb3dlcmNhc2UodGhpcy5jaGVja1NwYWNlRHJvcCh2YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVBdXggPSB0aGlzLmNoZWNrVXBwZXJjYXNlKHRoaXMuY2hlY2tTcGFjZURyb3AodmFsdWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWVBdXg7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XG4gICAgICAgIHRoaXMub25Ub3VjaCgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIG1hc2s6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgICBASW5wdXQoKSBwaG9uZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZHJvcFNwZWNpYWxDaGFyYWN0ZXJzOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIHVwcGVyQ2FzZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgbG93ZXJDYXNlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBwYXR0ZXJuczogYW55O1xuXG4gICAgQElucHV0KCkgc3BhY2VEcm9wOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgZm9jdXM6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgYmx1cjogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGhvbmUpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0U3ViamVjdCQucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghU3RyaW5nVXRpbC5pc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXNrUGhvbmUkLm5leHQoUGhvbmVVdGlsLm1hc2sodmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XG5cbiAgICBvblRvdWNoOiBhbnkgPSAoKSA9PiB7IH07XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoID0gZm47XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBob25lICYmICFTdHJpbmdVdGlsLmlzRW1wdHkodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dFN1YmplY3QkLm5leHQodmFsdWUpXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGNoZWNrU3BhY2VEcm9wKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5zcGFjZURyb3AgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjaGVja1VwcGVyY2FzZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMudXBwZXJDYXNlICYmIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY2hlY2tMb3dlcmNhc2UodmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmxvd2VyQ2FzZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIG9uRm9jdXMoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1cy5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQmx1cihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmJsdXIuZW1pdChldmVudCk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbklucHV0UGhvbmVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5waG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gUGhvbmVVdGlsLnJlbW92ZUNoYXJhY3RlcnMoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcblxuICAgICAgICBpZiAoL1xcZC8udGVzdChrZXkpICYmICgodmFsdWUudHJpbSgpLmxlbmd0aCA8IDgpIHx8ICh2YWx1ZS50cmltKCkubGVuZ3RoID4gMTIpKSkge1xuICAgICAgICAgICAgdGhpcy5fbWFza1Bob25lJC5uZXh0KCcwKicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uSW5wdXRQaG9uZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5waG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faW5wdXRTdWJqZWN0JC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbn1cbiJdfQ==
@@ -582,4 +582,4 @@ TableComponent = __decorate([
582
582
  __metadata("design:paramtypes", [NgZone])
583
583
  ], TableComponent);
584
584
  export { TableComponent };
585
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SyxPQUFPLEVBQW1CLFlBQVksRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQXVCLE1BQU0sbUJBQW1CLENBQUM7QUFDcEgsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBZ0J0RixJQUFhLGNBQWMsR0FBM0IsTUFBYSxjQUFjO0lBd0h2QixZQUFvQixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQXRINUIsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFFeEIsc0JBQWlCLEdBQVcsR0FBRyxDQUFDO1FBQ2hDLG9CQUFlLEdBQVEsSUFBSSxDQUFDO1FBRTVCLHNCQUFpQixHQUFVLEVBQUUsQ0FBQztRQW1CNUIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV4QixZQUFPLEdBQXFCLEVBQUUsQ0FBQztRQVcv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LEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDN0UsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDekMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2FBQ3hGLENBQUM7U0FDTDs7S0FDSixDQUFDO3FDQXlIK0IsTUFBTTtHQXhIMUIsY0FBYyxDQXNjMUI7U0F0Y1ksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0SGVhZGVyUm93RGVmLCBNYXRQYWdpbmF0b3IsIE1hdFNvcnQsIE1hdFRhYmxlRGF0YVNvdXJjZSwgU29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXJyYXlVdGlsLCBPYmplY3RVdGlsLCBTdHJpbmdVdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbkRUTyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2R0by90YWJsZS1jb2x1bW4uZHRvJztcbmltcG9ydCB7IFRhYmxlR3JvdXBIZWFkZXJEVE8gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9kdG8vdGFibGUtZ3JvdXAtaGVhZGVyLmR0byc7XG5pbXBvcnQgeyBUYWJsZVBhZ2VFdmVudERUTyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2R0by90YWJsZS1wYWdlLWV2ZW50LmR0byc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpdHNzLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICAgICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJywgZGlzcGxheTogJ25vbmUnIH0pKSxcbiAgICAgICAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uSW5pdCB7XG5cbiAgICBwdWJsaWMgX2V4cGFuZGVkUm93czogVFtdID0gW107XG5cbiAgICBwdWJsaWMgX3Njcm9sbEhlaWdodENhbGM6IG51bWJlciA9IDQxMDtcbiAgICBwdWJsaWMgX2lzUG9wb3ZlckhvdmVyOiBhbnkgPSBudWxsO1xuICAgIHB1YmxpYyBfY29udGV4dFBvcG92ZXI6IFQ7XG4gICAgcHVibGljIF9kaXNwbGF5ZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBfZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPPjtcblxuICAgIEBWaWV3Q2hpbGQoTWF0U29ydCwgeyBzdGF0aWM6IHRydWUgfSkgbWF0U29ydDogTWF0U29ydDtcbiAgICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgbWF0UGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gICAgQFZpZXdDaGlsZCgnZnJvbnRlbmRQYWdpbmF0b3InLCB7IHN0YXRpYzogZmFsc2UgfSkgbWF0RnJvbnRlbmRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgICBAVmlld0NoaWxkKCdiYWNrZW5kUGFnaW5hdG9yJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1hdEJhY2tlbmRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICAgIEBWaWV3Q2hpbGQoJ21hdEhlYWRlclJvdycsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgX21hdEhlYWRlclJvd1JlZjogVGVtcGxhdGVSZWY8TWF0SGVhZGVyUm93RGVmPjtcbiAgICBAVmlld0NoaWxkKCdmcm9udGVuZFBhZ2luYXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgX21hdEZyb250ZW5kUGFnaW5hdG9yUm93UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2JhY2tlbmRQYWdpbmF0b3InLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIF9tYXRCYWNrZW5kUGFnaW5hdG9yUm93UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnYWN0aW9ucycsIHsgc3RhdGljOiBmYWxzZSB9KSBhY3Rpb25zUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2FjdGlvbnNQb3BvdmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGFjdGlvbnNQb3BvdmVyUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2Zvb3RlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBmb290ZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZXhwYW5kZWQnLCB7IHN0YXRpYzogZmFsc2UgfSkgZXhwYW5kZWRSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBIZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBIZWFkZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBGb290ZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBGb290ZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBzaGFkb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uRFRPW10gPSBbXTtcblxuICAgIHByaXZhdGUgX2RhdGFWYWx1ZTogVFtdO1xuICAgIEBJbnB1dCgpIGdldCBkYXRhKCk6IFRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhVmFsdWU7XG4gICAgfVxuICAgIHNldCBkYXRhKGRhdGE6IFRbXSkge1xuICAgICAgICB0aGlzLl9kYXRhVmFsdWUgPSBkYXRhO1xuICAgICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdCh0aGlzLl9kYXRhVmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgYmFja2VuZFBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZUluZGV4OiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yTGVuZ3RoOiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZVNpemU6IG51bWJlciA9IDEwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDMwXTtcblxuICAgIEBJbnB1dCgpIHNob3dQYWdlU2l6ZU9wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGV4cGFuZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNob3dIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgY29sdW1uSW5pdGlhbDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgY29sdW1uRmluYWw6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGhlYWRlclN0aWNreTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZ3JvdXBCeUNvbHVtbjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZ3JvdXBIZWFkZXJTdGlja3k6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGdyb3VwU3RhcnRFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaGlnaGxpZ2h0Um93Rm46IChyb3c6IFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKSA9PiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgaW5maW5pdGVTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNjcm9sbERlbGF5OiBudW1iZXIgPSAxMDAwO1xuXG4gICAgQElucHV0KCkgc2Nyb2xsT2Zmc2V0OiBudW1iZXIgPSAxMDAwO1xuXG4gICAgQElucHV0KCkgc2Nyb2xsSGVpZ3RoOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBpc0ZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCdjb2x1bW5FeHBhbmRhYmxlRml4ZWQnKSBzaG93Q29sdW1uRXhwYW5kYWJsZUZpeGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBleHBhbmRhYmxlT25lUm93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBpZ25vcmVDaGlsZHJlbkV4cGFuZFJvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgc29ydDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgY2xlYXJTb3J0OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgc29ydEFjdGl2ZTogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgc29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbiA9ICdhc2MnO1xuXG4gICAgQE91dHB1dCgpIHJvd0V4cGFuZGVkOiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUW10+ID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcbiAgICBAT3V0cHV0KCkgcGFnZTogRXZlbnRFbWl0dGVyPFRhYmxlUGFnZUV2ZW50RFRPPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcm93SG92ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIGdldCBtYXRUYWJsZUhlaWd0aCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICBsZXQgaGVhZGVyUm93SGVpZ2h0OiBudW1iZXI7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbWF0SGVhZGVyUm93UmVmKSkge1xuICAgICAgICAgICAgaGVhZGVyUm93SGVpZ2h0ID0gKHRoaXMuX21hdEhlYWRlclJvd1JlZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNsaWVudEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYWdpbmF0b3JSb3dIZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yUmVmID0gdGhpcy5iYWNrZW5kUGFnaW5hdGlvbiA/IHRoaXMuX21hdEJhY2tlbmRQYWdpbmF0b3JSb3dSZWYgOiB0aGlzLl9tYXRGcm9udGVuZFBhZ2luYXRvclJvd1JlZjtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChwYWdpbmF0b3JSZWYpKSB7XG4gICAgICAgICAgICBwYWdpbmF0b3JSb3dIZWlnaHQgPSAocGFnaW5hdG9yUmVmLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0SGVhZGVyd0hlaWdodDogbnVtYmVyID0gaGVhZGVyUm93SGVpZ2h0IHx8IDYwO1xuICAgICAgICBjb25zdCBtYXRQYWdpbmF0b3JIZWlnaHQ6IG51bWJlciA9IHBhZ2luYXRvclJvd0hlaWdodCB8fCA1NztcblxuICAgICAgICBjb25zdCBwYWdlU2l6ZTogbnVtYmVyID0gdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSAmJiAodGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSA8PSAxMCkgPyB0aGlzLnBhZ2luYXRvclBhZ2VTaXplIDogMTA7XG4gICAgICAgIGNvbnN0IHNldEhlaWd0aDogYm9vbGVhbiA9IHRoaXMuaGVhZGVyU3RpY2t5ICYmICh0aGlzLmRhdGEubGVuZ3RoID4gcGFnZVNpemUpO1xuXG4gICAgICAgIHJldHVybiBvZihzZXRIZWlndGggPyBgJHsoKDU3ICogcGFnZVNpemUpICsgbWF0SGVhZGVyd0hlaWdodCArIG1hdFBhZ2luYXRvckhlaWdodCl9cHhgIDogJ2F1dG8nKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLnNvcnQgPSB0aGlzLm1hdFNvcnQ7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IgJiYgIXRoaXMuYmFja2VuZFBhZ2luYXRpb24gJiYgIXRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLm1hdEZyb250ZW5kUGFnaW5hdG9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmICh0aGlzLmJhY2tlbmRQYWdpbmF0aW9uIHx8IHRoaXMuaW5maW5pdGVTY3JvbGwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFnaW5hdG9yUGFnZVNpemVPcHRpb25zOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IDAsXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUGFnZUluZGV4OiAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5hY3Rpb25zUG9wb3ZlclJlZikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0UG9wb3ZlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNQb3BvdmVySG92ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigwKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBvcG92ZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxlLXBvcG92ZXInKTtcbiAgICAgICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHBvcG92ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVEYXRhU291cmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZURhdGFTb3VyY2UoKTogdm9pZCB7XG4gICAgICAgIGxldCBjb2x1bW5zOiBzdHJpbmdbXSA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUpLm1hcChjID0+IGMucHJvcGVydHkpO1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZXhwYW5kZWRSZWYpKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gWydleHBhbmRlZENvbHVtbicsIC4uLmNvbHVtbnNdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5hY3Rpb25zUmVmKSkge1xuICAgICAgICAgICAgY29sdW1ucyA9IFsuLi5jb2x1bW5zLCAnYWN0aW9uc0NvbHVtbiddO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Rpc3BsYXllZENvbHVtbnMgPSBjb2x1bW5zO1xuXG4gICAgICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgICAgICBsZXQgZGF0YUFsbDogVFtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc0ZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUFsbCA9IEFycmF5VXRpbC5jbG9uZSh0aGlzLl9kYXRhU291cmNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YUFsbC5wdXNoKC4uLnRoaXMuZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKFtdKTtcbiAgICAgICAgICAgIGlmICghU3RyaW5nVXRpbC5pc0VtcHR5KHRoaXMuZ3JvdXBCeUNvbHVtbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZ3JvdXBIZWFkZXJSZWYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5nZW5lcmV0ZUdyb3Vwc0J5Q29sdW1uKGRhdGFBbGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLmRhdGEgPSBkYXRhQWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhQWxsO1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQodGhpcy5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY1Njcm9sbEhlaWdodCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoW10pO1xuICAgICAgICAgICAgaWYgKCFTdHJpbmdVdGlsLmlzRW1wdHkodGhpcy5ncm91cEJ5Q29sdW1uKSAmJiAhT2JqZWN0VXRpbC5pc051bGwodGhpcy5ncm91cEhlYWRlclJlZikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLmRhdGEgPSB0aGlzLmdlbmVyZXRlR3JvdXBzQnlDb2x1bW4odGhpcy5kYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLl9kYXRhU291cmNlLmRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLnNvcnQgPSB0aGlzLm1hdFNvcnQ7XG4gICAgICAgICAgICB0aGlzLnNldFNvcnRpbmdEYXRhQWNjZXNzb3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRvciAmJiAhdGhpcy5iYWNrZW5kUGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLm1hdEZyb250ZW5kUGFnaW5hdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgKCF0aGlzLmdyb3VwU3RhcnRFeHBhbmRlZCAmJiAodGhpcy5ncm91cEhlYWRlclJlZiB8fCAodGhpcy5leHBhbmRhYmxlICYmIHRoaXMuZXhwYW5kZWRSZWYpKSAmJiAhQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5fZGF0YVNvdXJjZS5kYXRhKSkge1xuICAgICAgICAvLyB0aGlzLl9kYXRhU291cmNlLmRhdGEuZm9yRWFjaChyb3cgPT4gdGhpcy5hZGRDb2xsYXBzZShyb3cpKTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIGNhbGNTY3JvbGxIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIGlmICgodGhpcy5fZGF0YVNvdXJjZSAmJiAodGhpcy5fZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA+IDApKSAmJiAoTWF0aC5mbG9vcih0aGlzLl9zY3JvbGxIZWlnaHRDYWxjKSA8PSA3MDApKSB7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxIZWlnaHRDYWxjID0gMTMwICsgKHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5sZW5ndGggKiA0OCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblBhZ2UocGFnZUV2ZW50OiBUYWJsZVBhZ2VFdmVudERUTyk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhZ2luYXRvclBhZ2VTaXplID0gcGFnZUV2ZW50LnBhZ2VTaXplO1xuICAgICAgICBwYWdlRXZlbnQucGFnaW5hdG9yUGFnZVNpemVPcHRpb25zID0gQXJyYXlVdGlsLmlzRW1wdHkocGFnZUV2ZW50LnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucykgPyB0aGlzLnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucyA6IHBhZ2VFdmVudC5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnM7XG4gICAgICAgIHRoaXMucGFnZS5lbWl0KHBhZ2VFdmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRXhwYW5kZWRSb3cocm93OiBUKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGlmIChBcnJheVV0aWwuaXNFbXB0eSh0aGlzLl9leHBhbmRlZFJvd3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuX2V4cGFuZGVkUm93cy5maW5kSW5kZXgociA9PiByID09PSByb3cpO1xuICAgICAgICByZXR1cm4gb2YoaW5kZXggPj0gMCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUV4cGFuZFJvdyhyb3c6IFQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuX2V4cGFuZGVkUm93cy5maW5kSW5kZXgociA9PiByID09PSByb3cpO1xuICAgICAgICBpZiAoQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5fZXhwYW5kZWRSb3dzKSB8fCAoaW5kZXggPCAwKSkge1xuICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRSb3dzID0gW3Jvd107XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuZGVkLmVtaXQocm93KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IF9leHBhbmRlZFJvd3NBdXg6IFRbXSA9IEFycmF5VXRpbC5jbG9uZSh0aGlzLl9leHBhbmRlZFJvd3MpO1xuICAgICAgICBfZXhwYW5kZWRSb3dzQXV4LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkUm93cyA9IEFycmF5VXRpbC5jbG9uZShfZXhwYW5kZWRSb3dzQXV4KTtcbiAgICAgICAgdGhpcy5yb3dFeHBhbmRlZC5lbWl0KG51bGwpO1xuICAgIH1cblxuICAgIHNvcnREYXRhKHNvcnQ6IFNvcnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoW10pO1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoW10pO1xuICAgICAgICAgICAgdGhpcy5jYWxjU2Nyb2xsSGVpZ2h0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uUGFnZSh7XG4gICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSxcbiAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgICAgIHByZXZpb3VzUGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgcGFnaW5hdG9yUGFnZVNpemVPcHRpb25zOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucyxcbiAgICAgICAgICAgIHNvcnQ6IHNvcnRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dQb3BvdmVyKGV2ZW50OiBNb3VzZUV2ZW50LCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9wb3ZlcjogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFibGUtcG9wb3ZlcicpO1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHBvcG92ZXIpKSB7XG4gICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb21SZWN0UG9wb3ZlciA9IHBvcG92ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbVJlY3RSb3cgPSAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTFRhYmxlUm93RWxlbWVudCkuY2hpbGRyZW47XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbVJlY3RQb3BvdmVyICYmIGRvbVJlY3RSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudG9wID0gYCR7KGRvbVJlY3RSb3cudG9wICsgZG9tUmVjdFJvdy5oZWlnaHQpIC0gMX1weGA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGFydFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVuZFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5Jbml0aWFsICYmICh0aGlzLmNvbHVtbkluaXRpYWwgPj0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNlbGxzW3RoaXMuY29sdW1uSW5pdGlhbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbml0aWFsIGNvbHVtbiB1bmRlZmluZWQgb3IgbnVsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gY2VsbHNbdGhpcy5jb2x1bW5Jbml0aWFsXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gZG9tUmVjdFJvdy5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5GaW5hbCAmJiAodGhpcy5jb2x1bW5GaW5hbCA+PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2VsbHNbdGhpcy5jb2x1bW5GaW5hbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaW5hbCBjb2x1bW4gdW5kZWZpbmVkIG9yIG51bGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBjZWxsc1t0aGlzLmNvbHVtbkZpbmFsXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9tUmVjdFBvcG92ZXIud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gZG9tUmVjdFJvdy5yaWdodCAtIGRvbVJlY3RQb3BvdmVyLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY2xpZW50WCA+IHN0YXJ0UG9zaXRpb24gKyAxNSAmJiBldmVudC5jbGllbnRYIDwgZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7ZXZlbnQuY2xpZW50WCAtIDE1fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPD0gc3RhcnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLmxlZnQgPSBgJHtzdGFydFBvc2l0aW9ufXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPj0gZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7ZW5kUG9zaXRpb259cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dIb3Zlci5lbWl0KGRhdGEpO1xuICAgICAgICB0aGlzLl9jb250ZXh0UG9wb3ZlciA9IGRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgc2hvd1BvcG92ZXIoZXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3BvdmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZS1wb3BvdmVyJyk7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocG9wb3ZlcikpIHtcbiAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvbVJlY3RQb3BvdmVyID0gcG9wb3Zlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21SZWN0Um93ID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTFRhYmxlUm93RWxlbWVudCkuY2hpbGRyZW47XG5cbiAgICAgICAgICAgICAgICBpZiAoZG9tUmVjdFBvcG92ZXIgJiYgZG9tUmVjdFJvdykge1xuICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudG9wID0gYCR7KGRvbVJlY3RSb3cudG9wICsgZG9tUmVjdFJvdy5oZWlnaHQpIC0gMX1weGA7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXJ0UG9zaXRpb246IG51bWJlciA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlbmRQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5Jbml0aWFsICYmICh0aGlzLmNvbHVtbkluaXRpYWwgPj0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2VsbHNbdGhpcy5jb2x1bW5Jbml0aWFsXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5pdGlhbCBjb2x1bW4gdW5kZWZpbmVkIG9yIG51bGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBjZWxsc1t0aGlzLmNvbHVtbkluaXRpYWxdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gZG9tUmVjdFJvdy5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uRmluYWwgJiYgKHRoaXMuY29sdW1uRmluYWwgPj0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2VsbHNbdGhpcy5jb2x1bW5GaW5hbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbmFsIGNvbHVtbiB1bmRlZmluZWQgb3IgbnVsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBjZWxsc1t0aGlzLmNvbHVtbkZpbmFsXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9tUmVjdFBvcG92ZXIud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IGRvbVJlY3RSb3cucmlnaHQgLSBkb21SZWN0UG9wb3Zlci53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNsaWVudFggPiBzdGFydFBvc2l0aW9uICsgMTUgJiYgZXZlbnQuY2xpZW50WCA8IGVuZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7ZXZlbnQuY2xpZW50WCAtIDE1fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2xpZW50WCA8PSBzdGFydFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7c3RhcnRQb3NpdGlvbn1weGA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPj0gZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLmxlZnQgPSBgJHtlbmRQb3NpdGlvbn1weGA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvd0hvdmVyLmVtaXQoZGF0YSk7XG4gICAgICAgIHRoaXMuX2NvbnRleHRQb3BvdmVyID0gZGF0YTtcbiAgICB9XG4gICAgKi9cblxuICAgIGNsb3NlUG9wb3Zlcih0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgb2YobnVsbCkucGlwZShkZWxheSh0aW1lKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5faXNQb3BvdmVySG92ZXIpICYmICF0aGlzLl9pc1BvcG92ZXJIb3Zlcikge1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5faXNQb3BvdmVySG92ZXIpICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmFjdGlvbnNQb3BvdmVyUmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZS1wb3BvdmVyJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocG9wb3ZlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRQb3BvdmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1BvcG92ZXJIb3ZlciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFNvcnRpbmdEYXRhQWNjZXNzb3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2Uuc29ydGluZ0RhdGFBY2Nlc3NvciA9IChkYXRhOiBhbnksIHNvcnRIZWFkZXJJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtzb3J0SGVhZGVySWRdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW3NvcnRIZWFkZXJJZF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhW3NvcnRIZWFkZXJJZF07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZ3JvdXAgaGVhZGVyXG4gICAgZ2VuZXJldGVHcm91cHNCeUNvbHVtbihkYXRhOiBhbnlbXSk6IFRhYmxlR3JvdXBIZWFkZXJEVE9bXSB7XG4gICAgICAgIGNvbnN0IGdyb3Vwczoge30gPSBkYXRhLnJlZHVjZSgoZ3JvdXAsIHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YUNvbHVtbjogc3RyaW5nID0gcm93W3RoaXMuZ3JvdXBCeUNvbHVtbl0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmICghZ3JvdXBbZGF0YUNvbHVtbl0pIHtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhQ29sdW1uXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBbZGF0YUNvbHVtbl0ucHVzaChyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGdyb3VwcykubWFwKGdyb3VwVmFsdWUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUdyb3VwSGVhZGVyRFRPKGdyb3VwVmFsdWUsIGdyb3Vwc1tncm91cFZhbHVlXSwgZ3JvdXBzW2dyb3VwVmFsdWVdLmxlbmd0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEhpZ2hsaWdodFJvdyhyb3c6IFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocm93KSkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmhpZ2hsaWdodFJvd0ZuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodFJvd0ZuKHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldEluZGV4Um93KHJvdzogVCB8IFRhYmxlR3JvdXBIZWFkZXJEVE8pOiBudW1iZXIge1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2RhdGFTb3VyY2UpICYmICFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLl9kYXRhU291cmNlLmRhdGEpICYmICFPYmplY3RVdGlsLmlzTnVsbChyb3cpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChyID0+IHIgPT09IHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbmZpbml0ZSBzY3JvbGxcbiAgICBoYXNNb3JlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2RhdGFTb3VyY2UgfHwgKHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5sZW5ndGggPCB0aGlzLnBhZ2luYXRvckxlbmd0aCk7XG4gICAgfVxuXG4gICAgaGFuZGxlU2Nyb2xsKHNjcm9sbGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChzY3JvbGxlZCAmJiB0aGlzLmhhc01vcmUoKSkge1xuICAgICAgICAgICAgdGhpcy5vblBhZ2Uoe1xuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLnBhZ2luYXRvckxlbmd0aCxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXgsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXggKz0gMTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
585
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SyxPQUFPLEVBQW1CLFlBQVksRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQXVCLE1BQU0sbUJBQW1CLENBQUM7QUFDcEgsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBZ0J0RixJQUFhLGNBQWMsR0FBM0IsTUFBYSxjQUFjO0lBd0h2QixZQUFvQixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQXRINUIsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFFeEIsc0JBQWlCLEdBQVcsR0FBRyxDQUFDO1FBQ2hDLG9CQUFlLEdBQVEsSUFBSSxDQUFDO1FBRTVCLHNCQUFpQixHQUFVLEVBQUUsQ0FBQztRQW1CNUIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV4QixZQUFPLEdBQXFCLEVBQUUsQ0FBQztRQVcv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QUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDN0UsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDekMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2FBQ3hGLENBQUM7U0FDTDs7S0FDSixDQUFDO3FDQXlIK0IsTUFBTTtHQXhIMUIsY0FBYyxDQXNjMUI7U0F0Y1ksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0SGVhZGVyUm93RGVmLCBNYXRQYWdpbmF0b3IsIE1hdFNvcnQsIE1hdFRhYmxlRGF0YVNvdXJjZSwgU29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXJyYXlVdGlsLCBPYmplY3RVdGlsLCBTdHJpbmdVdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbkRUTyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2R0by90YWJsZS1jb2x1bW4uZHRvJztcbmltcG9ydCB7IFRhYmxlR3JvdXBIZWFkZXJEVE8gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9kdG8vdGFibGUtZ3JvdXAtaGVhZGVyLmR0byc7XG5pbXBvcnQgeyBUYWJsZVBhZ2VFdmVudERUTyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2R0by90YWJsZS1wYWdlLWV2ZW50LmR0byc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpdHNzLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICAgICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJywgZGlzcGxheTogJ25vbmUnIH0pKSxcbiAgICAgICAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uSW5pdCB7XG5cbiAgICBwdWJsaWMgX2V4cGFuZGVkUm93czogVFtdID0gW107XG5cbiAgICBwdWJsaWMgX3Njcm9sbEhlaWdodENhbGM6IG51bWJlciA9IDQxMDtcbiAgICBwdWJsaWMgX2lzUG9wb3ZlckhvdmVyOiBhbnkgPSBudWxsO1xuICAgIHB1YmxpYyBfY29udGV4dFBvcG92ZXI6IFQ7XG4gICAgcHVibGljIF9kaXNwbGF5ZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBfZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPPjtcblxuICAgIEBWaWV3Q2hpbGQoTWF0U29ydCwgeyBzdGF0aWM6IHRydWUgfSkgbWF0U29ydDogTWF0U29ydDtcbiAgICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgbWF0UGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gICAgQFZpZXdDaGlsZCgnZnJvbnRlbmRQYWdpbmF0b3InLCB7IHN0YXRpYzogZmFsc2UgfSkgbWF0RnJvbnRlbmRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgICBAVmlld0NoaWxkKCdiYWNrZW5kUGFnaW5hdG9yJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1hdEJhY2tlbmRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICAgIEBWaWV3Q2hpbGQoJ21hdEhlYWRlclJvdycsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgX21hdEhlYWRlclJvd1JlZjogVGVtcGxhdGVSZWY8TWF0SGVhZGVyUm93RGVmPjtcbiAgICBAVmlld0NoaWxkKCdmcm9udGVuZFBhZ2luYXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgX21hdEZyb250ZW5kUGFnaW5hdG9yUm93UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2JhY2tlbmRQYWdpbmF0b3InLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIF9tYXRCYWNrZW5kUGFnaW5hdG9yUm93UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnYWN0aW9ucycsIHsgc3RhdGljOiBmYWxzZSB9KSBhY3Rpb25zUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2FjdGlvbnNQb3BvdmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGFjdGlvbnNQb3BvdmVyUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2Zvb3RlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBmb290ZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZXhwYW5kZWQnLCB7IHN0YXRpYzogZmFsc2UgfSkgZXhwYW5kZWRSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBIZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBIZWFkZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBGb290ZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBGb290ZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBzaGFkb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uRFRPW10gPSBbXTtcblxuICAgIHByaXZhdGUgX2RhdGFWYWx1ZTogKFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKVtdO1xuICAgIEBJbnB1dCgpIGdldCBkYXRhKCk6IChUIHwgVGFibGVHcm91cEhlYWRlckRUTylbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhVmFsdWU7XG4gICAgfVxuICAgIHNldCBkYXRhKGRhdGE6IChUIHwgVGFibGVHcm91cEhlYWRlckRUTylbXSkge1xuICAgICAgICB0aGlzLl9kYXRhVmFsdWUgPSBkYXRhO1xuICAgICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdCh0aGlzLl9kYXRhVmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgYmFja2VuZFBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZUluZGV4OiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yTGVuZ3RoOiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZVNpemU6IG51bWJlciA9IDEwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDMwXTtcblxuICAgIEBJbnB1dCgpIHNob3dQYWdlU2l6ZU9wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGV4cGFuZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNob3dIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgY29sdW1uSW5pdGlhbDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgY29sdW1uRmluYWw6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGhlYWRlclN0aWNreTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZ3JvdXBCeUNvbHVtbjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZ3JvdXBIZWFkZXJTdGlja3k6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGdyb3VwU3RhcnRFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaGlnaGxpZ2h0Um93Rm46IChyb3c6IFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKSA9PiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgaW5maW5pdGVTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNjcm9sbERlbGF5OiBudW1iZXIgPSAxMDAwO1xuXG4gICAgQElucHV0KCkgc2Nyb2xsT2Zmc2V0OiBudW1iZXIgPSAxMDAwO1xuXG4gICAgQElucHV0KCkgc2Nyb2xsSGVpZ3RoOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBpc0ZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCdjb2x1bW5FeHBhbmRhYmxlRml4ZWQnKSBzaG93Q29sdW1uRXhwYW5kYWJsZUZpeGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBleHBhbmRhYmxlT25lUm93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBpZ25vcmVDaGlsZHJlbkV4cGFuZFJvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgc29ydDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgY2xlYXJTb3J0OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgc29ydEFjdGl2ZTogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgc29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbiA9ICdhc2MnO1xuXG4gICAgQE91dHB1dCgpIHJvd0V4cGFuZGVkOiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjwoVCB8IFRhYmxlR3JvdXBIZWFkZXJEVE8pW10+ID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcbiAgICBAT3V0cHV0KCkgcGFnZTogRXZlbnRFbWl0dGVyPFRhYmxlUGFnZUV2ZW50RFRPPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcm93SG92ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIGdldCBtYXRUYWJsZUhlaWd0aCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICBsZXQgaGVhZGVyUm93SGVpZ2h0OiBudW1iZXI7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbWF0SGVhZGVyUm93UmVmKSkge1xuICAgICAgICAgICAgaGVhZGVyUm93SGVpZ2h0ID0gKHRoaXMuX21hdEhlYWRlclJvd1JlZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNsaWVudEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYWdpbmF0b3JSb3dIZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yUmVmID0gdGhpcy5iYWNrZW5kUGFnaW5hdGlvbiA/IHRoaXMuX21hdEJhY2tlbmRQYWdpbmF0b3JSb3dSZWYgOiB0aGlzLl9tYXRGcm9udGVuZFBhZ2luYXRvclJvd1JlZjtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChwYWdpbmF0b3JSZWYpKSB7XG4gICAgICAgICAgICBwYWdpbmF0b3JSb3dIZWlnaHQgPSAocGFnaW5hdG9yUmVmLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0SGVhZGVyd0hlaWdodDogbnVtYmVyID0gaGVhZGVyUm93SGVpZ2h0IHx8IDYwO1xuICAgICAgICBjb25zdCBtYXRQYWdpbmF0b3JIZWlnaHQ6IG51bWJlciA9IHBhZ2luYXRvclJvd0hlaWdodCB8fCA1NztcblxuICAgICAgICBjb25zdCBwYWdlU2l6ZTogbnVtYmVyID0gdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSAmJiAodGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSA8PSAxMCkgPyB0aGlzLnBhZ2luYXRvclBhZ2VTaXplIDogMTA7XG4gICAgICAgIGNvbnN0IHNldEhlaWd0aDogYm9vbGVhbiA9IHRoaXMuaGVhZGVyU3RpY2t5ICYmICh0aGlzLmRhdGEubGVuZ3RoID4gcGFnZVNpemUpO1xuXG4gICAgICAgIHJldHVybiBvZihzZXRIZWlndGggPyBgJHsoKDU3ICogcGFnZVNpemUpICsgbWF0SGVhZGVyd0hlaWdodCArIG1hdFBhZ2luYXRvckhlaWdodCl9cHhgIDogJ2F1dG8nKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLnNvcnQgPSB0aGlzLm1hdFNvcnQ7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IgJiYgIXRoaXMuYmFja2VuZFBhZ2luYXRpb24gJiYgIXRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLm1hdEZyb250ZW5kUGFnaW5hdG9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmICh0aGlzLmJhY2tlbmRQYWdpbmF0aW9uIHx8IHRoaXMuaW5maW5pdGVTY3JvbGwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFnaW5hdG9yUGFnZVNpemVPcHRpb25zOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IDAsXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUGFnZUluZGV4OiAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5hY3Rpb25zUG9wb3ZlclJlZikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0UG9wb3ZlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNQb3BvdmVySG92ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigwKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBvcG92ZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxlLXBvcG92ZXInKTtcbiAgICAgICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHBvcG92ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVEYXRhU291cmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZURhdGFTb3VyY2UoKTogdm9pZCB7XG4gICAgICAgIGxldCBjb2x1bW5zOiBzdHJpbmdbXSA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUpLm1hcChjID0+IGMucHJvcGVydHkpO1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZXhwYW5kZWRSZWYpKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gWydleHBhbmRlZENvbHVtbicsIC4uLmNvbHVtbnNdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5hY3Rpb25zUmVmKSkge1xuICAgICAgICAgICAgY29sdW1ucyA9IFsuLi5jb2x1bW5zLCAnYWN0aW9uc0NvbHVtbiddO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Rpc3BsYXllZENvbHVtbnMgPSBjb2x1bW5zO1xuXG4gICAgICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgICAgICBsZXQgZGF0YUFsbDogKFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc0ZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUFsbCA9IEFycmF5VXRpbC5jbG9uZSh0aGlzLl9kYXRhU291cmNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YUFsbC5wdXNoKC4uLnRoaXMuZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKFtdKTtcbiAgICAgICAgICAgIGlmICghU3RyaW5nVXRpbC5pc0VtcHR5KHRoaXMuZ3JvdXBCeUNvbHVtbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZ3JvdXBIZWFkZXJSZWYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5nZW5lcmV0ZUdyb3Vwc0J5Q29sdW1uKGRhdGFBbGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLmRhdGEgPSBkYXRhQWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhQWxsO1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQodGhpcy5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY1Njcm9sbEhlaWdodCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoW10pO1xuICAgICAgICAgICAgaWYgKCFTdHJpbmdVdGlsLmlzRW1wdHkodGhpcy5ncm91cEJ5Q29sdW1uKSAmJiAhT2JqZWN0VXRpbC5pc051bGwodGhpcy5ncm91cEhlYWRlclJlZikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLmRhdGEgPSB0aGlzLmdlbmVyZXRlR3JvdXBzQnlDb2x1bW4odGhpcy5kYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLl9kYXRhU291cmNlLmRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLnNvcnQgPSB0aGlzLm1hdFNvcnQ7XG4gICAgICAgICAgICB0aGlzLnNldFNvcnRpbmdEYXRhQWNjZXNzb3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRvciAmJiAhdGhpcy5iYWNrZW5kUGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLm1hdEZyb250ZW5kUGFnaW5hdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgKCF0aGlzLmdyb3VwU3RhcnRFeHBhbmRlZCAmJiAodGhpcy5ncm91cEhlYWRlclJlZiB8fCAodGhpcy5leHBhbmRhYmxlICYmIHRoaXMuZXhwYW5kZWRSZWYpKSAmJiAhQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5fZGF0YVNvdXJjZS5kYXRhKSkge1xuICAgICAgICAvLyB0aGlzLl9kYXRhU291cmNlLmRhdGEuZm9yRWFjaChyb3cgPT4gdGhpcy5hZGRDb2xsYXBzZShyb3cpKTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIGNhbGNTY3JvbGxIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIGlmICgodGhpcy5fZGF0YVNvdXJjZSAmJiAodGhpcy5fZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA+IDApKSAmJiAoTWF0aC5mbG9vcih0aGlzLl9zY3JvbGxIZWlnaHRDYWxjKSA8PSA3MDApKSB7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxIZWlnaHRDYWxjID0gMTMwICsgKHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5sZW5ndGggKiA0OCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblBhZ2UocGFnZUV2ZW50OiBUYWJsZVBhZ2VFdmVudERUTyk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhZ2luYXRvclBhZ2VTaXplID0gcGFnZUV2ZW50LnBhZ2VTaXplO1xuICAgICAgICBwYWdlRXZlbnQucGFnaW5hdG9yUGFnZVNpemVPcHRpb25zID0gQXJyYXlVdGlsLmlzRW1wdHkocGFnZUV2ZW50LnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucykgPyB0aGlzLnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucyA6IHBhZ2VFdmVudC5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnM7XG4gICAgICAgIHRoaXMucGFnZS5lbWl0KHBhZ2VFdmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRXhwYW5kZWRSb3cocm93OiBUKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGlmIChBcnJheVV0aWwuaXNFbXB0eSh0aGlzLl9leHBhbmRlZFJvd3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuX2V4cGFuZGVkUm93cy5maW5kSW5kZXgociA9PiByID09PSByb3cpO1xuICAgICAgICByZXR1cm4gb2YoaW5kZXggPj0gMCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUV4cGFuZFJvdyhyb3c6IFQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuX2V4cGFuZGVkUm93cy5maW5kSW5kZXgociA9PiByID09PSByb3cpO1xuICAgICAgICBpZiAoQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5fZXhwYW5kZWRSb3dzKSB8fCAoaW5kZXggPCAwKSkge1xuICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRSb3dzID0gW3Jvd107XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuZGVkLmVtaXQocm93KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IF9leHBhbmRlZFJvd3NBdXg6IFRbXSA9IEFycmF5VXRpbC5jbG9uZSh0aGlzLl9leHBhbmRlZFJvd3MpO1xuICAgICAgICBfZXhwYW5kZWRSb3dzQXV4LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkUm93cyA9IEFycmF5VXRpbC5jbG9uZShfZXhwYW5kZWRSb3dzQXV4KTtcbiAgICAgICAgdGhpcy5yb3dFeHBhbmRlZC5lbWl0KG51bGwpO1xuICAgIH1cblxuICAgIHNvcnREYXRhKHNvcnQ6IFNvcnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoW10pO1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoW10pO1xuICAgICAgICAgICAgdGhpcy5jYWxjU2Nyb2xsSGVpZ2h0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uUGFnZSh7XG4gICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSxcbiAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgICAgIHByZXZpb3VzUGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgcGFnaW5hdG9yUGFnZVNpemVPcHRpb25zOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucyxcbiAgICAgICAgICAgIHNvcnQ6IHNvcnRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dQb3BvdmVyKGV2ZW50OiBNb3VzZUV2ZW50LCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9wb3ZlcjogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFibGUtcG9wb3ZlcicpO1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHBvcG92ZXIpKSB7XG4gICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb21SZWN0UG9wb3ZlciA9IHBvcG92ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbVJlY3RSb3cgPSAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTFRhYmxlUm93RWxlbWVudCkuY2hpbGRyZW47XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbVJlY3RQb3BvdmVyICYmIGRvbVJlY3RSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudG9wID0gYCR7KGRvbVJlY3RSb3cudG9wICsgZG9tUmVjdFJvdy5oZWlnaHQpIC0gMX1weGA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGFydFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVuZFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5Jbml0aWFsICYmICh0aGlzLmNvbHVtbkluaXRpYWwgPj0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNlbGxzW3RoaXMuY29sdW1uSW5pdGlhbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbml0aWFsIGNvbHVtbiB1bmRlZmluZWQgb3IgbnVsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gY2VsbHNbdGhpcy5jb2x1bW5Jbml0aWFsXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gZG9tUmVjdFJvdy5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5GaW5hbCAmJiAodGhpcy5jb2x1bW5GaW5hbCA+PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2VsbHNbdGhpcy5jb2x1bW5GaW5hbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaW5hbCBjb2x1bW4gdW5kZWZpbmVkIG9yIG51bGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBjZWxsc1t0aGlzLmNvbHVtbkZpbmFsXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9tUmVjdFBvcG92ZXIud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gZG9tUmVjdFJvdy5yaWdodCAtIGRvbVJlY3RQb3BvdmVyLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY2xpZW50WCA+IHN0YXJ0UG9zaXRpb24gKyAxNSAmJiBldmVudC5jbGllbnRYIDwgZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7ZXZlbnQuY2xpZW50WCAtIDE1fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPD0gc3RhcnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLmxlZnQgPSBgJHtzdGFydFBvc2l0aW9ufXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPj0gZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7ZW5kUG9zaXRpb259cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dIb3Zlci5lbWl0KGRhdGEpO1xuICAgICAgICB0aGlzLl9jb250ZXh0UG9wb3ZlciA9IGRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgc2hvd1BvcG92ZXIoZXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3BvdmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZS1wb3BvdmVyJyk7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocG9wb3ZlcikpIHtcbiAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvbVJlY3RQb3BvdmVyID0gcG9wb3Zlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21SZWN0Um93ID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTFRhYmxlUm93RWxlbWVudCkuY2hpbGRyZW47XG5cbiAgICAgICAgICAgICAgICBpZiAoZG9tUmVjdFBvcG92ZXIgJiYgZG9tUmVjdFJvdykge1xuICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudG9wID0gYCR7KGRvbVJlY3RSb3cudG9wICsgZG9tUmVjdFJvdy5oZWlnaHQpIC0gMX1weGA7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXJ0UG9zaXRpb246IG51bWJlciA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlbmRQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5Jbml0aWFsICYmICh0aGlzLmNvbHVtbkluaXRpYWwgPj0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2VsbHNbdGhpcy5jb2x1bW5Jbml0aWFsXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5pdGlhbCBjb2x1bW4gdW5kZWZpbmVkIG9yIG51bGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBjZWxsc1t0aGlzLmNvbHVtbkluaXRpYWxdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gZG9tUmVjdFJvdy5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uRmluYWwgJiYgKHRoaXMuY29sdW1uRmluYWwgPj0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2VsbHNbdGhpcy5jb2x1bW5GaW5hbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbmFsIGNvbHVtbiB1bmRlZmluZWQgb3IgbnVsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBjZWxsc1t0aGlzLmNvbHVtbkZpbmFsXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZG9tUmVjdFBvcG92ZXIud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IGRvbVJlY3RSb3cucmlnaHQgLSBkb21SZWN0UG9wb3Zlci53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNsaWVudFggPiBzdGFydFBvc2l0aW9uICsgMTUgJiYgZXZlbnQuY2xpZW50WCA8IGVuZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7ZXZlbnQuY2xpZW50WCAtIDE1fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2xpZW50WCA8PSBzdGFydFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7c3RhcnRQb3NpdGlvbn1weGA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPj0gZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLmxlZnQgPSBgJHtlbmRQb3NpdGlvbn1weGA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvd0hvdmVyLmVtaXQoZGF0YSk7XG4gICAgICAgIHRoaXMuX2NvbnRleHRQb3BvdmVyID0gZGF0YTtcbiAgICB9XG4gICAgKi9cblxuICAgIGNsb3NlUG9wb3Zlcih0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgb2YobnVsbCkucGlwZShkZWxheSh0aW1lKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5faXNQb3BvdmVySG92ZXIpICYmICF0aGlzLl9pc1BvcG92ZXJIb3Zlcikge1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5faXNQb3BvdmVySG92ZXIpICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmFjdGlvbnNQb3BvdmVyUmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZS1wb3BvdmVyJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocG9wb3ZlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRQb3BvdmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1BvcG92ZXJIb3ZlciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFNvcnRpbmdEYXRhQWNjZXNzb3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2Uuc29ydGluZ0RhdGFBY2Nlc3NvciA9IChkYXRhOiBhbnksIHNvcnRIZWFkZXJJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtzb3J0SGVhZGVySWRdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW3NvcnRIZWFkZXJJZF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhW3NvcnRIZWFkZXJJZF07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZ3JvdXAgaGVhZGVyXG4gICAgZ2VuZXJldGVHcm91cHNCeUNvbHVtbihkYXRhOiBhbnlbXSk6IFRhYmxlR3JvdXBIZWFkZXJEVE9bXSB7XG4gICAgICAgIGNvbnN0IGdyb3Vwczoge30gPSBkYXRhLnJlZHVjZSgoZ3JvdXAsIHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YUNvbHVtbjogc3RyaW5nID0gcm93W3RoaXMuZ3JvdXBCeUNvbHVtbl0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmICghZ3JvdXBbZGF0YUNvbHVtbl0pIHtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhQ29sdW1uXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBbZGF0YUNvbHVtbl0ucHVzaChyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGdyb3VwcykubWFwKGdyb3VwVmFsdWUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUdyb3VwSGVhZGVyRFRPKGdyb3VwVmFsdWUsIGdyb3Vwc1tncm91cFZhbHVlXSwgZ3JvdXBzW2dyb3VwVmFsdWVdLmxlbmd0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEhpZ2hsaWdodFJvdyhyb3c6IFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocm93KSkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmhpZ2hsaWdodFJvd0ZuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodFJvd0ZuKHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldEluZGV4Um93KHJvdzogVCB8IFRhYmxlR3JvdXBIZWFkZXJEVE8pOiBudW1iZXIge1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2RhdGFTb3VyY2UpICYmICFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLl9kYXRhU291cmNlLmRhdGEpICYmICFPYmplY3RVdGlsLmlzTnVsbChyb3cpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChyID0+IHIgPT09IHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbmZpbml0ZSBzY3JvbGxcbiAgICBoYXNNb3JlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2RhdGFTb3VyY2UgfHwgKHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5sZW5ndGggPCB0aGlzLnBhZ2luYXRvckxlbmd0aCk7XG4gICAgfVxuXG4gICAgaGFuZGxlU2Nyb2xsKHNjcm9sbGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChzY3JvbGxlZCAmJiB0aGlzLmhhc01vcmUoKSkge1xuICAgICAgICAgICAgdGhpcy5vblBhZ2Uoe1xuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLnBhZ2luYXRvckxlbmd0aCxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXgsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXggKz0gMTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
@@ -99,7 +99,7 @@ GIPIAbstractFormComponent = GIPIAbstractFormComponent_1 = __decorate([
99
99
  Component({
100
100
  selector: `gipi-abstract-form`,
101
101
  exportAs: 'gipiAbstractForm',
102
- template: "<div [style.flex-direction]=\"flexDirection\"\n [style.align-items]=\"alignItems\"\n [style.justify-content]=\"justifyContent\"\n [style.gap]=\"getGap\"\n [style.padding]=\"getPadding\"\n class=\"form-content\"\n [class.space-bottom]=\"!dialog\"\n [class.form-dialog]=\"dialog\">\n <ng-content> </ng-content>\n</div>\n<div class=\"form-footer\"\n [style.margin-inline]=\"getPadding\"\n *ngIf=\"GIPIActionRowComponent\">\n <ng-content select=\"gipi-action-row\"> </ng-content>\n</div>",
102
+ template: "<div class=\"form-content\"\n [class.form-dialog]=\"dialog\"\n [class.space-bottom]=\"!dialog\"\n [style.flex-direction]=\"flexDirection\"\n [style.align-items]=\"alignItems\"\n [style.justify-content]=\"justifyContent\"\n [style.gap]=\"getGap\"\n [style.padding]=\"getPadding\">\n <ng-content> </ng-content>\n</div>\n<div class=\"form-footer\"\n [style.margin-inline]=\"getPadding\"\n *ngIf=\"GIPIActionRowComponent\">\n <ng-content select=\"gipi-action-row\"> </ng-content>\n</div>",
103
103
  providers: [
104
104
  {
105
105
  provide: NG_VALUE_ACCESSOR,
@@ -232,7 +232,7 @@ GIPIButtonComponent = GIPIButtonComponent_1 = __decorate([
232
232
  selector: `gipi-button[gipi-primary], gipi-button[gipi-primary-icon], gipi-button[gipi-secondary], gipi-button[gipi-secondary-icon],
233
233
  gipi-button[gipi-tertiary], gipi-button[gipi-link], gipi-button[gipi-icon], gipi-button[gipi-action]`,
234
234
  exportAs: 'gipiButton',
235
- template: "<button [attr.id]=\"id\"\n [attr.name]=\"name\"\n [attr.type]=\"type\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : label\"\n [attr.title]=\"title ? title : label\"\n [disabled]=\"disabled || loading\"\n [matTooltip]=\"tooltip\"\n role=\"button\"\n [class]=\"buttonClass\"\n [ngClass]=\"{'button-base': true,\n 'button-primary': (isButtonPrimary || isButtonPrimaryIcon),\n 'button-primary-icon': isButtonPrimaryIcon,\n 'button-secondary': (isButtonSecondary || isButtonSecondaryIcon),\n 'button-secondary-icon': isButtonSecondaryIcon,\n 'button-tertiary': (isButtonTertiary || isButtonTertiaryIcon),\n 'button-tertiary-icon': isButtonTertiaryIcon,\n 'button-link': isButtonLink,\n 'button-only-icon': isButtonIcon,\n 'button-for-input': isForInput,\n 'button-notification': notification,\n 'button-action': isButtonAction}\"\n [style.padding.px]=\"buttonPadding\"\n #popoverTrigger=\"popoverTrigger\"\n [popoverTriggerFor]=\"btnPopover\"\n [popoverTriggerOn]=\"popover ? 'click' : 'none'\"\n [popoverBackdropCloseOnClick]=\"true\"\n (opened)=\"onOpenPopover.emit()\"\n (closed)=\"onClosePopover.emit()\"\n (click)=\"handleClick($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\">\n\n <span [ngClass]=\"{'button-content': true,\n 'button-disabled': disabled,\n 'button-icon-left': ((iconPos === 'left') && label),\n 'button-icon-right': ((iconPos === 'right') && label),\n 'button-icon-top': ((iconPos === 'top') && label),\n 'button-icon-bottom': ((iconPos === 'bottom') && label),\n 'button-icon-center': (iconPos === 'center')}\">\n\n <mat-icon *ngIf=\"svgIcon || icon\"\n [svgIcon]=\"svgIcon\"\n [style.width.px]=\"iconWidth\"\n [style.height.px]=\"iconHeight\">\n {{ (!svgIcon && icon) ? icon : '' }}\n </mat-icon>\n\n <span class=\"button-label\"\n [attr.aria-hidden]=\"(icon || svgIcon) && !label\"\n *ngIf=\"!isButtonIcon && label\">\n {{ label }}\n </span>\n </span>\n\n</button>\n<gipi-overlay *ngIf=\"overlay && !popover\"\n [(visible)]=\"_overlayVisible\"\n [appendTo]=\"'body'\"\n (onShow)=\"onShowOverlay.emit()\">\n <ng-content> </ng-content>\n</gipi-overlay>\n\n<gipi-popover #btnPopover=\"gipiPopover\"\n [popoverOverlapTrigger]=\"false\"\n [popoverCloseOnClick]=\"false\"\n [popoverArrowWidth]=\"0\"\n [popoverOffsetY]=\"3\">\n <div class=\"btn-popover-content\">\n <ng-content> </ng-content>\n </div>\n</gipi-popover>",
235
+ template: "<button [attr.id]=\"id\"\n [attr.name]=\"name\"\n [attr.type]=\"type\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : label\"\n [attr.title]=\"title ? title : label\"\n [disabled]=\"disabled || loading\"\n [matTooltip]=\"tooltip\"\n role=\"button\"\n [class]=\"buttonClass\"\n [ngClass]=\"{'button-base': true,\n 'button-primary': (isButtonPrimary || isButtonPrimaryIcon),\n 'button-primary-icon': isButtonPrimaryIcon,\n 'button-secondary': (isButtonSecondary || isButtonSecondaryIcon),\n 'button-secondary-icon': isButtonSecondaryIcon,\n 'button-tertiary': (isButtonTertiary || isButtonTertiaryIcon),\n 'button-tertiary-icon': isButtonTertiaryIcon,\n 'button-link': isButtonLink,\n 'button-only-icon': isButtonIcon,\n 'button-for-input': isForInput,\n 'button-notification': notification,\n 'button-action': isButtonAction}\"\n [style.padding.px]=\"buttonPadding\"\n #popoverTrigger=\"popoverTrigger\"\n [popoverTriggerFor]=\"btnPopover\"\n [popoverTriggerOn]=\"popover ? 'click' : 'none'\"\n [popoverBackdropCloseOnClick]=\"true\"\n (opened)=\"onOpenPopover.emit()\"\n (closed)=\"onClosePopover.emit()\"\n (click)=\"handleClick($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\">\n\n <span [ngClass]=\"{'button-content': true,\n 'button-disabled': disabled,\n 'button-icon-left': ((iconPos === 'left') && label),\n 'button-icon-right': ((iconPos === 'right') && label),\n 'button-icon-top': ((iconPos === 'top') && label),\n 'button-icon-bottom': ((iconPos === 'bottom') && label),\n 'button-icon-center': (iconPos === 'center')}\">\n\n <mat-icon *ngIf=\"svgIcon || icon\"\n [svgIcon]=\"svgIcon\"\n [style.width.px]=\"iconWidth\"\n [style.height.px]=\"iconHeight\"\n [style.font-size.px]=\"iconWidth || iconHeight\">\n {{ (!svgIcon && icon) ? icon : '' }}\n </mat-icon>\n\n <span class=\"button-label\"\n [attr.aria-hidden]=\"(icon || svgIcon) && !label\"\n *ngIf=\"!isButtonIcon && label\">\n {{ label }}\n </span>\n </span>\n\n</button>\n<gipi-overlay *ngIf=\"overlay && !popover\"\n [(visible)]=\"_overlayVisible\"\n [appendTo]=\"'body'\"\n (onShow)=\"onShowOverlay.emit()\">\n <ng-content> </ng-content>\n</gipi-overlay>\n\n<gipi-popover #btnPopover=\"gipiPopover\"\n [popoverOverlapTrigger]=\"false\"\n [popoverCloseOnClick]=\"false\"\n [popoverArrowWidth]=\"0\"\n [popoverOffsetY]=\"3\"\n [fxHide]=\"!popover\">\n <div class=\"btn-popover-content\">\n <ng-content> </ng-content>\n </div>\n</gipi-popover>",
236
236
  providers: [
237
237
  {
238
238
  provide: NG_VALUE_ACCESSOR,
@@ -248,4 +248,4 @@ GIPIButtonComponent = GIPIButtonComponent_1 = __decorate([
248
248
  __metadata("design:paramtypes", [ElementRef])
249
249
  ], GIPIButtonComponent);
250
250
  export { GIPIButtonComponent };
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BnaXBpc2lzdGVtYXMvbmctY29yZS8iLCJzb3VyY2VzIjpbInNoYXJlZC9naXBpLWNvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNJLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBcUJ2RSxJQUFhLG1CQUFtQiwyQkFBaEMsTUFBYSxtQkFBbUI7SUE4RDVCLFlBQW9CLFdBQXVCO1FBQXZCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBNURsQyxvQkFBZSxHQUFZLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRSx3QkFBbUIsR0FBWSxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM1RSxzQkFBaUIsR0FBWSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RSwwQkFBcUIsR0FBWSxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNoRixxQkFBZ0IsR0FBWSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckUseUJBQW9CLEdBQVksSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDOUUsaUJBQVksR0FBWSxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0QsaUJBQVksR0FBWSxJQUFJLENBQUMsa0JB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QTlJWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgR0lQSVBvcG92ZXJUcmlnZ2VyIH0gZnJvbSAnLi4vcG9wb3Zlci9zaGFyZWQvcG9wb3Zlci10cmlnZ2VyJztcblxudHlwZSBCdXR0b25JY29uUG9zaXRpb24gPSAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJyB8ICdjZW50ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogYGdpcGktYnV0dG9uW2dpcGktcHJpbWFyeV0sIGdpcGktYnV0dG9uW2dpcGktcHJpbWFyeS1pY29uXSwgZ2lwaS1idXR0b25bZ2lwaS1zZWNvbmRhcnldLCBnaXBpLWJ1dHRvbltnaXBpLXNlY29uZGFyeS1pY29uXSxcbiAgICAgICAgICAgICAgIGdpcGktYnV0dG9uW2dpcGktdGVydGlhcnldLCBnaXBpLWJ1dHRvbltnaXBpLWxpbmtdLCBnaXBpLWJ1dHRvbltnaXBpLWljb25dLCBnaXBpLWJ1dHRvbltnaXBpLWFjdGlvbl1gLFxuICAgIGV4cG9ydEFzOiAnZ2lwaUJ1dHRvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCk6IHR5cGVvZiBHSVBJQnV0dG9uQ29tcG9uZW50ID0+IEdJUElCdXR0b25Db21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnY2xhc3MnOiAnZ2lwaS1idXR0b24nLFxuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgR0lQSUJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHJlYWRvbmx5IGlzQnV0dG9uUHJpbWFyeTogYm9vbGVhbiA9IHRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCdnaXBpLXByaW1hcnknKTtcbiAgICByZWFkb25seSBpc0J1dHRvblByaW1hcnlJY29uOiBib29sZWFuID0gdGhpcy5faGFzSG9zdEF0dHJpYnV0ZXMoJ2dpcGktcHJpbWFyeS1pY29uJyk7XG4gICAgcmVhZG9ubHkgaXNCdXR0b25TZWNvbmRhcnk6IGJvb2xlYW4gPSB0aGlzLl9oYXNIb3N0QXR0cmlidXRlcygnZ2lwaS1zZWNvbmRhcnknKTtcbiAgICByZWFkb25seSBpc0J1dHRvblNlY29uZGFyeUljb246IGJvb2xlYW4gPSB0aGlzLl9oYXNIb3N0QXR0cmlidXRlcygnZ2lwaS1zZWNvbmRhcnktaWNvbicpO1xuICAgIHJlYWRvbmx5IGlzQnV0dG9uVGVydGlhcnk6IGJvb2xlYW4gPSB0aGlzLl9oYXNIb3N0QXR0cmlidXRlcygnZ2lwaS10ZXJ0aWFyeScpO1xuICAgIHJlYWRvbmx5IGlzQnV0dG9uVGVydGlhcnlJY29uOiBib29sZWFuID0gdGhpcy5faGFzSG9zdEF0dHJpYnV0ZXMoJ2dpcGktdGVydGlhcnktaWNvbicpO1xuICAgIHJlYWRvbmx5IGlzQnV0dG9uTGluazogYm9vbGVhbiA9IHRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCdnaXBpLWxpbmsnKTtcbiAgICByZWFkb25seSBpc0J1dHRvbkljb246IGJvb2xlYW4gPSB0aGlzLl9oYXNIb3N0QXR0cmlidXRlcygnZ2lwaS1pY29uJyk7XG4gICAgcmVhZG9ubHkgaXNCdXR0b25BY3Rpb246IGJvb2xlYW4gPSB0aGlzLl9oYXNIb3N0QXR0cmlidXRlcygnZ2lwaS1hY3Rpb24nKTtcblxuICAgIF9vdmVybGF5VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQFZpZXdDaGlsZChHSVBJUG9wb3ZlclRyaWdnZXIsIHsgc3RhdGljOiBmYWxzZSB9KSBwb3BvdmVyVHJpZ2dlcjogR0lQSVBvcG92ZXJUcmlnZ2VyO1xuXG4gICAgQElucHV0KCkgaWQ6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHR5cGU6ICdidXR0b24nIHwgJ3N1Ym1pdCcgfCAncmVzZXQnID0gJ2J1dHRvbic7XG5cbiAgICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gICAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICcnO1xuXG4gICAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gICAgQElucHV0KCkgYnV0dG9uQ2xhc3M6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGJ1dHRvblBhZGRpbmc6IG51bWJlciB8IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGljb25XaWR0aDogbnVtYmVyIHwgc3RyaW5nO1xuICAgIEBJbnB1dCgpIGljb25IZWlnaHQ6IG51bWJlciB8IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGljb246IHN0cmluZyA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBzdmdJY29uOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgQElucHV0KCkgaWNvblBvczogQnV0dG9uSWNvblBvc2l0aW9uID0gJ2xlZnQnO1xuXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIG5vdGlmaWNhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgdG9vbHRpcDogc3RyaW5nID0gJyc7XG5cbiAgICBASW5wdXQoKSBwb3BvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBvdmVybGF5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoJ2ZvcklucHV0JykgaXNGb3JJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIG9uU2hvd092ZXJsYXk6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgb25PcGVuUG9wb3ZlcjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBvbkNsb3NlUG9wb3ZlcjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoJ2NsaWNrJykgb25DbGljazogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50Pih0cnVlKTtcbiAgICBAT3V0cHV0KCdmb2N1cycpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4odHJ1ZSk7XG4gICAgQE91dHB1dCgnYmx1cicpIG9uQmx1cjogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50Pih0cnVlKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wb3BvdmVyVHJpZ2dlcikge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyVHJpZ2dlci5kZXN0cm95UG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0SG9zdEVsZW1lbnQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYXNIb3N0QXR0cmlidXRlcyguLi5hdHRyaWJ1dGVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5zb21lKGF0dHJpYnV0ZSA9PiB0aGlzLmdldEhvc3RFbGVtZW50KCkuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkpO1xuICAgIH1cblxuICAgIHRvZ2dsZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVZpc2libGUgPSAhdGhpcy5fb3ZlcmxheVZpc2libGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93UG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJUcmlnZ2VyLm9wZW5Qb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyVHJpZ2dlci5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheSkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbkNsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVGb2N1cyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQmx1cihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25CbHVyLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgICBvblJlc2l6ZShldmVudDogVUlFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wb3BvdmVyVHJpZ2dlcikge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyVHJpZ2dlci5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BnaXBpc2lzdGVtYXMvbmctY29yZS8iLCJzb3VyY2VzIjpbInNoYXJlZC9naXBpLWNvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNJLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBcUJ2RSxJQUFhLG1CQUFtQiwyQkFBaEMsTUFBYSxtQkFBbUI7SUE4RDVCLFlBQW9CLFdBQXVCO1FBQXZCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBNURsQyxvQkFBZSxHQUFZLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRSx3QkFBbUIsR0FBWSxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM1RSxzQkFBaUIsR0FBWSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RSwwQkFBcUIsR0FBWSxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNoRixxQkFBZ0IsR0FBWSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckUseUJBQW9CLEdBQVksSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDOUUsaUJBQVksR0FBWSxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0QsaUJBQVksR0FBWSxJQUFJLENBQUMsa0JB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QTlJWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgR0lQSVBvcG92ZXJUcmlnZ2VyIH0gZnJvbSAnLi4vcG9wb3Zlci9zaGFyZWQvcG9wb3Zlci10cmlnZ2VyJztcblxudHlwZSBCdXR0b25JY29uUG9zaXRpb24gPSAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJyB8ICdjZW50ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogYGdpcGktYnV0dG9uW2dpcGktcHJpbWFyeV0sIGdpcGktYnV0dG9uW2dpcGktcHJpbWFyeS1pY29uXSwgZ2lwaS1idXR0b25bZ2lwaS1zZWNvbmRhcnldLCBnaXBpLWJ1dHRvbltnaXBpLXNlY29uZGFyeS1pY29uXSxcbiAgICAgICAgICAgICAgIGdpcGktYnV0dG9uW2dpcGktdGVydGlhcnldLCBnaXBpLWJ1dHRvbltnaXBpLWxpbmtdLCBnaXBpLWJ1dHRvbltnaXBpLWljb25dLCBnaXBpLWJ1dHRvbltnaXBpLWFjdGlvbl1gLFxuICAgIGV4cG9ydEFzOiAnZ2lwaUJ1dHRvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCk6IHR5cGVvZiBHSVBJQnV0dG9uQ29tcG9uZW50ID0+IEdJUElCdXR0b25Db21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnY2xhc3MnOiAnZ2lwaS1idXR0b24nLFxuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgR0lQSUJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHJlYWRvbmx5IGlzQnV0dG9uUHJpbWFyeTogYm9vbGVhbiA9IHRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCdnaXBpLXByaW1hcnknKTtcbiAgICByZWFkb25seSBpc0J1dHRvblByaW1hcnlJY29uOiBib29sZWFuID0gdGhpcy5faGFzSG9zdEF0dHJpYnV0ZXMoJ2dpcGktcHJpbWFyeS1pY29uJyk7XG4gICAgcmVhZG9ubHkgaXNCdXR0b25TZWNvbmRhcnk6IGJvb2xlYW4gPSB0aGlzLl9oYXNIb3N0QXR0cmlidXRlcygnZ2lwaS1zZWNvbmRhcnknKTtcbiAgICByZWFkb25seSBpc0J1dHRvblNlY29uZGFyeUljb246IGJvb2xlYW4gPSB0aGlzLl9oYXNIb3N0QXR0cmlidXRlcygnZ2lwaS1zZWNvbmRhcnktaWNvbicpO1xuICAgIHJlYWRvbmx5IGlzQnV0dG9uVGVydGlhcnk6IGJvb2xlYW4gPSB0aGlzLl9oYXNIb3N0QXR0cmlidXRlcygnZ2lwaS10ZXJ0aWFyeScpO1xuICAgIHJlYWRvbmx5IGlzQnV0dG9uVGVydGlhcnlJY29uOiBib29sZWFuID0gdGhpcy5faGFzSG9zdEF0dHJpYnV0ZXMoJ2dpcGktdGVydGlhcnktaWNvbicpO1xuICAgIHJlYWRvbmx5IGlzQnV0dG9uTGluazogYm9vbGVhbiA9IHRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCdnaXBpLWxpbmsnKTtcbiAgICByZWFkb25seSBpc0J1dHRvbkljb246IGJvb2xlYW4gPSB0aGlzLl9oYXNIb3N0QXR0cmlidXRlcygnZ2lwaS1pY29uJyk7XG4gICAgcmVhZG9ubHkgaXNCdXR0b25BY3Rpb246IGJvb2xlYW4gPSB0aGlzLl9oYXNIb3N0QXR0cmlidXRlcygnZ2lwaS1hY3Rpb24nKTtcblxuICAgIF9vdmVybGF5VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQFZpZXdDaGlsZChHSVBJUG9wb3ZlclRyaWdnZXIsIHsgc3RhdGljOiBmYWxzZSB9KSBwb3BvdmVyVHJpZ2dlcjogR0lQSVBvcG92ZXJUcmlnZ2VyO1xuXG4gICAgQElucHV0KCkgaWQ6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHR5cGU6ICdidXR0b24nIHwgJ3N1Ym1pdCcgfCAncmVzZXQnID0gJ2J1dHRvbic7XG5cbiAgICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gICAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICcnO1xuXG4gICAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gICAgQElucHV0KCkgYnV0dG9uQ2xhc3M6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGJ1dHRvblBhZGRpbmc6IG51bWJlciB8IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGljb25XaWR0aDogbnVtYmVyIHwgc3RyaW5nO1xuICAgIEBJbnB1dCgpIGljb25IZWlnaHQ6IG51bWJlciB8IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGljb246IHN0cmluZyA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBzdmdJY29uOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgQElucHV0KCkgaWNvblBvczogQnV0dG9uSWNvblBvc2l0aW9uID0gJ2xlZnQnO1xuXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIG5vdGlmaWNhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgdG9vbHRpcDogc3RyaW5nID0gJyc7XG5cbiAgICBASW5wdXQoKSBwb3BvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBvdmVybGF5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoJ2ZvcklucHV0JykgaXNGb3JJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIG9uU2hvd092ZXJsYXk6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgb25PcGVuUG9wb3ZlcjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBvbkNsb3NlUG9wb3ZlcjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoJ2NsaWNrJykgb25DbGljazogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50Pih0cnVlKTtcbiAgICBAT3V0cHV0KCdmb2N1cycpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4odHJ1ZSk7XG4gICAgQE91dHB1dCgnYmx1cicpIG9uQmx1cjogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50Pih0cnVlKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wb3BvdmVyVHJpZ2dlcikge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyVHJpZ2dlci5kZXN0cm95UG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0SG9zdEVsZW1lbnQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYXNIb3N0QXR0cmlidXRlcyguLi5hdHRyaWJ1dGVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5zb21lKGF0dHJpYnV0ZSA9PiB0aGlzLmdldEhvc3RFbGVtZW50KCkuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkpO1xuICAgIH1cblxuICAgIHRvZ2dsZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVZpc2libGUgPSAhdGhpcy5fb3ZlcmxheVZpc2libGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93UG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJUcmlnZ2VyLm9wZW5Qb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyVHJpZ2dlci5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheSkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbkNsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVGb2N1cyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQmx1cihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25CbHVyLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgICBvblJlc2l6ZShldmVudDogVUlFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wb3BvdmVyVHJpZ2dlcikge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyVHJpZ2dlci5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=