@one-paragon/angular-utilities 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/esm2022/action-state/action-state-spinner/action-state-spinner.component.mjs +7 -7
  2. package/esm2022/action-state/action-state-ui/action-state-ui.module.mjs +5 -5
  3. package/esm2022/action-state/ngrx-ext/ngrx-ext.module.mjs +6 -6
  4. package/esm2022/action-state/ngrx.mjs +6 -1
  5. package/esm2022/http-request-state/HttpRequestStateFactory.mjs +6 -7
  6. package/esm2022/http-request-state/HttpRequestStateStore.mjs +41 -37
  7. package/esm2022/http-request-state/directives/HttpStateDirectiveBase.mjs +17 -21
  8. package/esm2022/http-request-state/directives/http-error-state-directive.mjs +12 -18
  9. package/esm2022/http-request-state/directives/http-inProgress-state-directive.mjs +12 -18
  10. package/esm2022/http-request-state/directives/http-notStarted-state-directive.mjs +12 -18
  11. package/esm2022/http-request-state/directives/http-success-state-directive.mjs +13 -18
  12. package/esm2022/http-request-state/directives/request-state-directive.mjs +20 -19
  13. package/esm2022/http-request-state/http-state-module.mjs +6 -6
  14. package/esm2022/ngrx/actionable-selector.mjs +12 -14
  15. package/esm2022/rxjs/subjectifier.mjs +6 -6
  16. package/esm2022/rxjs/subscriber.directive.mjs +11 -13
  17. package/esm2022/table-builder/classes/MatTableObservableDataSource.mjs +3 -1
  18. package/esm2022/table-builder/classes/TableBuilderDataSource.mjs +10 -8
  19. package/esm2022/table-builder/classes/TableState.mjs +13 -15
  20. package/esm2022/table-builder/classes/table-builder-general-settings.mjs +46 -54
  21. package/esm2022/table-builder/classes/table-builder.mjs +4 -1
  22. package/esm2022/table-builder/classes/table-store.mjs +280 -282
  23. package/esm2022/table-builder/components/array-column.component.mjs +15 -19
  24. package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +44 -35
  25. package/esm2022/table-builder/components/date-filter/date-filter.component.mjs +7 -7
  26. package/esm2022/table-builder/components/date-time-filter/date-time-filter.component.mjs +7 -7
  27. package/esm2022/table-builder/components/filter/filter.component.mjs +24 -24
  28. package/esm2022/table-builder/components/filter/in-list/in-list-filter.component.mjs +19 -18
  29. package/esm2022/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +15 -15
  30. package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +100 -86
  31. package/esm2022/table-builder/components/generic-table/paginator.component.mjs +20 -18
  32. package/esm2022/table-builder/components/group-by-list/group-by-list.component.mjs +5 -7
  33. package/esm2022/table-builder/components/header-menu/header-menu.component.mjs +24 -21
  34. package/esm2022/table-builder/components/in-filter/in-filter.component.mjs +14 -13
  35. package/esm2022/table-builder/components/initialization-component/initialization-component.mjs +11 -4
  36. package/esm2022/table-builder/components/link-column.component.mjs +19 -23
  37. package/esm2022/table-builder/components/number-filter/number-filter.component.mjs +8 -8
  38. package/esm2022/table-builder/components/profiles-menu/profiles-menu.component.mjs +26 -28
  39. package/esm2022/table-builder/components/scroll-strategy.mjs +11 -7
  40. package/esm2022/table-builder/components/sort-menu/sort-menu.component-store.mjs +31 -31
  41. package/esm2022/table-builder/components/sort-menu/sort-menu.component.mjs +23 -22
  42. package/esm2022/table-builder/components/table-container/table-container.mjs +90 -80
  43. package/esm2022/table-builder/components/table-container/virtual-scroll-container.mjs +49 -51
  44. package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +8 -10
  45. package/esm2022/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +17 -15
  46. package/esm2022/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +14 -14
  47. package/esm2022/table-builder/directives/custom-cell-directive.mjs +24 -20
  48. package/esm2022/table-builder/directives/multi-sort.directive.mjs +10 -10
  49. package/esm2022/table-builder/directives/resize-column.directive.mjs +13 -14
  50. package/esm2022/table-builder/directives/table-wrapper.directive.mjs +5 -7
  51. package/esm2022/table-builder/directives/tb-filter.directive.mjs +105 -110
  52. package/esm2022/table-builder/ngrx/tableBuilderStateStore.mjs +124 -124
  53. package/esm2022/table-builder/pipes/column-total.pipe.mjs +4 -4
  54. package/esm2022/table-builder/pipes/format-filter-type.pipe.mjs +4 -4
  55. package/esm2022/table-builder/pipes/format-filter-value.pipe.mjs +10 -12
  56. package/esm2022/table-builder/pipes/key-display.mjs +8 -10
  57. package/esm2022/table-builder/services/export-to-csv.service.mjs +57 -63
  58. package/esm2022/table-builder/services/table-template-service.mjs +11 -8
  59. package/esm2022/table-builder/services/transform-creator.mjs +35 -40
  60. package/esm2022/table-builder/table-builder.module.mjs +7 -7
  61. package/esm2022/utilities/directives/auto-focus.directive.mjs +8 -10
  62. package/esm2022/utilities/directives/clickEmitterDirective.mjs +4 -4
  63. package/esm2022/utilities/directives/clickSubject.mjs +5 -4
  64. package/esm2022/utilities/directives/conditional-classes.directive.mjs +11 -11
  65. package/esm2022/utilities/directives/dialog-service.mjs +5 -7
  66. package/esm2022/utilities/directives/dialog.mjs +38 -39
  67. package/esm2022/utilities/directives/mat-toggle-group-directive.mjs +7 -8
  68. package/esm2022/utilities/directives/prevent-enter.directive.mjs +4 -4
  69. package/esm2022/utilities/directives/stop-propagation.directive.mjs +4 -4
  70. package/esm2022/utilities/directives/styler.mjs +10 -11
  71. package/esm2022/utilities/directives/trim-whitespace.directive.mjs +7 -9
  72. package/esm2022/utilities/module.mjs +7 -7
  73. package/esm2022/utilities/pipes/function.pipe.mjs +4 -4
  74. package/esm2022/utilities/pipes/phone.pipe.mjs +4 -4
  75. package/esm2022/utilities/pipes/space-case.pipes.mjs +4 -4
  76. package/fesm2022/one-paragon-angular-utilities.mjs +1666 -1678
  77. package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -1
  78. package/http-request-state/HttpRequestStateStore.d.ts +2 -2
  79. package/http-request-state/directives/HttpStateDirectiveBase.d.ts +5 -7
  80. package/http-request-state/directives/http-error-state-directive.d.ts +1 -4
  81. package/http-request-state/directives/http-inProgress-state-directive.d.ts +3 -6
  82. package/http-request-state/directives/http-notStarted-state-directive.d.ts +1 -4
  83. package/http-request-state/directives/http-success-state-directive.d.ts +1 -6
  84. package/http-request-state/directives/request-state-directive.d.ts +0 -1
  85. package/package.json +8 -8
  86. package/rxjs/subjectifier.d.ts +0 -1
  87. package/table-builder/classes/TableBuilderDataSource.d.ts +0 -1
  88. package/table-builder/classes/table-store.d.ts +1 -2
  89. package/table-builder/components/column-builder/column-builder.component.d.ts +2 -6
  90. package/table-builder/components/filter/filter.component.d.ts +1 -2
  91. package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +0 -3
  92. package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +1 -2
  93. package/table-builder/components/generic-table/generic-table.component.d.ts +4 -4
  94. package/table-builder/components/generic-table/paginator.component.d.ts +0 -2
  95. package/table-builder/components/header-menu/header-menu.component.d.ts +1 -2
  96. package/table-builder/components/in-filter/in-filter.component.d.ts +1 -2
  97. package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +1 -2
  98. package/table-builder/components/sort-menu/sort-menu.component.d.ts +2 -3
  99. package/table-builder/components/table-container/table-container-imports.d.ts +1 -1
  100. package/table-builder/components/table-container/virtual-scroll-container.d.ts +0 -2
  101. package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +3 -3
  102. package/table-builder/directives/custom-cell-directive.d.ts +3 -3
  103. package/table-builder/directives/multi-sort.directive.d.ts +1 -2
  104. package/table-builder/directives/resize-column.directive.d.ts +1 -2
  105. package/table-builder/directives/tb-filter.directive.d.ts +19 -23
  106. package/table-builder/pipes/format-filter-value.pipe.d.ts +0 -2
  107. package/table-builder/pipes/key-display.d.ts +0 -1
  108. package/table-builder/services/export-to-csv.service.d.ts +0 -3
  109. package/table-builder/services/table-template-service.d.ts +1 -2
  110. package/table-builder/services/transform-creator.d.ts +0 -5
  111. package/utilities/directives/auto-focus.directive.d.ts +1 -2
  112. package/utilities/directives/conditional-classes.directive.d.ts +1 -2
  113. package/utilities/directives/dialog.d.ts +2 -5
  114. package/utilities/directives/styler.d.ts +0 -2
  115. package/utilities/directives/trim-whitespace.directive.d.ts +0 -2
@@ -1,53 +1,46 @@
1
- import { Directive, Input, Optional } from "@angular/core";
1
+ import { Directive, Input, inject } from "@angular/core";
2
2
  import { BehaviorSubject, ReplaySubject, takeUntil, tap } from "rxjs";
3
3
  import { v4 as uuid } from 'uuid';
4
4
  import { FilterType } from "../enums/filterTypes";
5
+ import { MatSlideToggle } from "@angular/material/slide-toggle";
6
+ import { MatRadioButton } from "@angular/material/radio";
7
+ import { MatButtonToggle } from '@angular/material/button-toggle';
8
+ import { MatCheckbox } from "@angular/material/checkbox";
5
9
  import { FieldType } from "../interfaces/report-def";
10
+ import { NgControl } from "@angular/forms";
6
11
  import { ComponentStore } from "@ngrx/component-store";
12
+ import { TableWrapperDirective } from "./table-wrapper.directive";
13
+ import { MatOption } from "@angular/material/core";
7
14
  import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/forms";
9
- import * as i2 from "./table-wrapper.directive";
10
- import * as i3 from "rxjs";
11
- import * as i4 from "@angular/material/checkbox";
12
- import * as i5 from "@angular/material/slide-toggle";
13
- import * as i6 from "@angular/material/radio";
14
- import * as i7 from "@angular/material/core";
15
- import * as i8 from "@angular/material/button-toggle";
15
+ import * as i1 from "rxjs";
16
16
  const inputs = [
17
17
  'predicate: tbCustomFilter',
18
18
  'filterId: filterId',
19
19
  ];
20
20
  export class TableCustomFilterDirective {
21
- constructor() {
22
- this.savable = false;
23
- this.used = false;
24
- }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TableCustomFilterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
26
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.2", type: TableCustomFilterDirective, selector: " ", ngImport: i0 }); }
21
+ filterId;
22
+ savable = false;
23
+ used = false;
24
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableCustomFilterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
25
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: TableCustomFilterDirective, selector: " ", ngImport: i0 });
27
26
  }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TableCustomFilterDirective, decorators: [{
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableCustomFilterDirective, decorators: [{
29
28
  type: Directive,
30
29
  args: [{
31
30
  selector: ' '
32
31
  }]
33
32
  }] });
34
33
  export class TableFilterDirective extends ComponentStore {
35
- constructor(model, wrapper) {
34
+ model = inject(NgControl, { optional: true });
35
+ wrapper = inject(TableWrapperDirective, { optional: true });
36
+ constructor() {
36
37
  super();
37
- this.model = model;
38
- this.filter$ = this.state$;
39
- this.active = true;
40
- this.filterValue = null;
41
- this.used = false;
42
- this.savable = false;
43
- this.ready = false;
44
- this._userActive = true;
45
- if (wrapper) {
46
- wrapper.register(this);
38
+ if (this.wrapper) {
39
+ this.wrapper.register(this);
47
40
  }
48
- if (model) {
41
+ if (this.model) {
49
42
  this.effect(() => {
50
- return model.valueChanges.pipe(tap(val => {
43
+ return this.model.valueChanges.pipe(tap(val => {
51
44
  this.filterValue = val;
52
45
  this.update();
53
46
  }));
@@ -57,6 +50,13 @@ export class TableFilterDirective extends ComponentStore {
57
50
  reset() {
58
51
  this.filterValue = undefined;
59
52
  }
53
+ filter$ = this.state$;
54
+ filterType;
55
+ key;
56
+ fieldType;
57
+ filterId;
58
+ active = true;
59
+ filterValue = null;
60
60
  setFilterValue(value) {
61
61
  if (this.model) {
62
62
  setTimeout(() => {
@@ -67,6 +67,10 @@ export class TableFilterDirective extends ComponentStore {
67
67
  this.filterValue = value;
68
68
  }
69
69
  }
70
+ used = false;
71
+ savable = false;
72
+ ready = false;
73
+ _userActive = true;
70
74
  ngOnChanges(changes) {
71
75
  this.update();
72
76
  }
@@ -96,20 +100,16 @@ export class TableFilterDirective extends ComponentStore {
96
100
  });
97
101
  }
98
102
  }
99
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TableFilterDirective, deps: [{ token: i1.NgControl, optional: true }, { token: i2.TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
100
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.2", type: TableFilterDirective, isStandalone: true, selector: "[tbFilter]", inputs: { filterType: "filterType", key: "key", fieldType: "fieldType", filterId: "filterId", active: "active", filterValue: "filterValue" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
103
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableFilterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
104
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: TableFilterDirective, isStandalone: true, selector: "[tbFilter]", inputs: { filterType: "filterType", key: "key", fieldType: "fieldType", filterId: "filterId", active: "active", filterValue: "filterValue" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
101
105
  }
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TableFilterDirective, decorators: [{
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableFilterDirective, decorators: [{
103
107
  type: Directive,
104
108
  args: [{
105
109
  selector: "[tbFilter]",
106
110
  standalone: true,
107
111
  }]
108
- }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
109
- type: Optional
110
- }] }, { type: i2.TableWrapperDirective, decorators: [{
111
- type: Optional
112
- }] }], propDecorators: { filterType: [{
112
+ }], ctorParameters: () => [], propDecorators: { filterType: [{
113
113
  type: Input
114
114
  }], key: [{
115
115
  type: Input
@@ -123,12 +123,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
123
123
  type: Input
124
124
  }] } });
125
125
  export class TableFilterStringContainsDirective extends TableFilterDirective {
126
- constructor(model, wrapper) {
127
- super(model, wrapper);
126
+ constructor() {
127
+ super();
128
128
  this.filterType = FilterType.StringContains;
129
129
  this.fieldType = FieldType.String;
130
130
  this.effect(() => {
131
- return model.valueChanges.pipe(tap(val => {
131
+ return this.model.valueChanges.pipe(tap(val => {
132
132
  this.filterValue = val;
133
133
  this.update();
134
134
  }));
@@ -150,10 +150,10 @@ export class TableFilterStringContainsDirective extends TableFilterDirective {
150
150
  }
151
151
  super.ngOnChanges(changes);
152
152
  }
153
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TableFilterStringContainsDirective, deps: [{ token: i1.NgControl, optional: true }, { token: i2.TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
154
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.2", type: TableFilterStringContainsDirective, isStandalone: true, selector: "[tbFilterStringContains]", inputs: { key: ["tbFilterStringContains", "key"], filterValue: "filterValue", filterId: "filterId", active: "active" }, providers: [{ provide: TableFilterDirective, useExisting: TableFilterStringContainsDirective }], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
153
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableFilterStringContainsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
154
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: TableFilterStringContainsDirective, isStandalone: true, selector: "[tbFilterStringContains]", inputs: { key: ["tbFilterStringContains", "key"], filterValue: "filterValue", filterId: "filterId", active: "active" }, providers: [{ provide: TableFilterDirective, useExisting: TableFilterStringContainsDirective }], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
155
155
  }
156
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TableFilterStringContainsDirective, decorators: [{
156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableFilterStringContainsDirective, decorators: [{
157
157
  type: Directive,
158
158
  args: [{
159
159
  selector: '[tbFilterStringContains]',
@@ -166,21 +166,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
166
166
  ],
167
167
  standalone: true,
168
168
  }]
169
- }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
170
- type: Optional
171
- }] }, { type: i2.TableWrapperDirective, decorators: [{
172
- type: Optional
173
- }] }] });
169
+ }], ctorParameters: () => [] });
174
170
  export class TableCustomFilterDirectiveBase extends TableCustomFilterDirective {
175
- constructor() {
176
- super(...arguments);
177
- this._active = false;
178
- this.ready = false;
179
- }
171
+ filter$;
172
+ filter;
173
+ _predicate;
180
174
  set predicate(val) {
181
175
  this._predicate = val;
182
176
  this.update({ predicate: val });
183
177
  }
178
+ _active = false;
179
+ ready = false;
184
180
  update(val) {
185
181
  if (this.ready) {
186
182
  this.filter = { ...this.filter, ...val };
@@ -212,35 +208,36 @@ export class TableCustomFilterDirectiveBase extends TableCustomFilterDirective {
212
208
  this.ready = true;
213
209
  this.filter$ = new BehaviorSubject(this.filter);
214
210
  }
215
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TableCustomFilterDirectiveBase, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
216
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.2", type: TableCustomFilterDirectiveBase, selector: "[tbCustomFilter]", inputs: { filterId: "filterId", predicate: ["tbCustomFilter", "predicate"], active: "active" }, usesInheritance: true, ngImport: i0 }); }
211
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableCustomFilterDirectiveBase, deps: null, target: i0.ɵɵFactoryTarget.Directive });
212
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: TableCustomFilterDirectiveBase, selector: "[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], active: "active" }, usesInheritance: true, ngImport: i0 });
217
213
  }
218
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TableCustomFilterDirectiveBase, decorators: [{
214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TableCustomFilterDirectiveBase, decorators: [{
219
215
  type: Directive,
220
216
  args: [{
221
217
  selector: "[tbCustomFilter]",
222
218
  }]
223
- }], propDecorators: { filterId: [{
224
- type: Input
225
- }], predicate: [{
219
+ }], propDecorators: { predicate: [{
226
220
  type: Input,
227
221
  args: ['tbCustomFilter']
228
222
  }], active: [{
229
223
  type: Input
230
224
  }] } });
231
225
  export class TbSelectedFilterDirective extends TableCustomFilterDirectiveBase {
232
- constructor(change, isActive, wrapper) {
226
+ change;
227
+ isActive;
228
+ wrapper = inject(TableWrapperDirective, { optional: true });
229
+ constructor(change, isActive) {
233
230
  super();
234
231
  this.change = change;
235
232
  this.isActive = isActive;
236
- this.destroySubject$ = new ReplaySubject(1);
237
- if (wrapper) {
238
- wrapper.register(this);
233
+ if (this.wrapper) {
234
+ this.wrapper.register(this);
239
235
  }
240
236
  }
241
237
  reset() {
242
238
  this.active = false;
243
239
  }
240
+ destroySubject$ = new ReplaySubject(1);
244
241
  ngOnDestroy() {
245
242
  this.destroySubject$.next();
246
243
  }
@@ -251,28 +248,28 @@ export class TbSelectedFilterDirective extends TableCustomFilterDirectiveBase {
251
248
  this.active = this.isActive();
252
249
  });
253
250
  }
254
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TbSelectedFilterDirective, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
255
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.2", type: TbSelectedFilterDirective, usesInheritance: true, ngImport: i0 }); }
251
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TbSelectedFilterDirective, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
252
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: TbSelectedFilterDirective, usesInheritance: true, ngImport: i0 });
256
253
  }
257
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TbSelectedFilterDirective, decorators: [{
254
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: TbSelectedFilterDirective, decorators: [{
258
255
  type: Directive
259
- }], ctorParameters: () => [{ type: i3.Observable }, { type: undefined }, { type: i2.TableWrapperDirective, decorators: [{
260
- type: Optional
261
- }] }] });
256
+ }], ctorParameters: () => [{ type: i1.Observable }, { type: undefined }] });
262
257
  // Checkbox
263
258
  export class MatCheckboxTbFilterDirective extends TbSelectedFilterDirective {
259
+ matCheckbox = inject(MatCheckbox);
264
260
  set active(val) {
265
261
  this.matCheckbox.checked = val;
266
262
  super.active = val;
267
263
  }
268
- constructor(matCheckbox, wrapper) {
269
- super(matCheckbox.change, () => matCheckbox.checked, wrapper);
264
+ constructor() {
265
+ const matCheckbox = inject(MatCheckbox);
266
+ super(matCheckbox.change, () => matCheckbox.checked);
270
267
  this.matCheckbox = matCheckbox;
271
268
  }
272
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MatCheckboxTbFilterDirective, deps: [{ token: i4.MatCheckbox }, { token: i2.TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
273
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.2", type: MatCheckboxTbFilterDirective, isStandalone: true, selector: "mat-checkbox[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatCheckboxTbFilterDirective }], usesInheritance: true, ngImport: i0 }); }
269
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MatCheckboxTbFilterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
270
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: MatCheckboxTbFilterDirective, isStandalone: true, selector: "mat-checkbox[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatCheckboxTbFilterDirective }], usesInheritance: true, ngImport: i0 });
274
271
  }
275
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MatCheckboxTbFilterDirective, decorators: [{
272
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MatCheckboxTbFilterDirective, decorators: [{
276
273
  type: Directive,
277
274
  args: [{
278
275
  selector: 'mat-checkbox[tbCustomFilter]',
@@ -282,25 +279,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
282
279
  providers: [{ provide: TableCustomFilterDirective, useExisting: MatCheckboxTbFilterDirective }],
283
280
  standalone: true,
284
281
  }]
285
- }], ctorParameters: () => [{ type: i4.MatCheckbox }, { type: i2.TableWrapperDirective, decorators: [{
286
- type: Optional
287
- }] }] });
282
+ }], ctorParameters: () => [] });
288
283
  export class MatSlideToggleTbFilterDirective extends TbSelectedFilterDirective {
284
+ matSlideToggle;
289
285
  set active(val) {
290
286
  this.matSlideToggle.checked = val;
291
287
  super.active = val;
292
288
  }
293
- constructor(matSlideToggle, wrapper) {
294
- super(matSlideToggle.change, () => matSlideToggle.checked, wrapper);
289
+ constructor() {
290
+ const matSlideToggle = inject(MatSlideToggle);
291
+ super(matSlideToggle.change, () => matSlideToggle.checked);
295
292
  this.matSlideToggle = matSlideToggle;
296
293
  }
297
294
  ngOnInit() {
298
295
  super.ngOnInit();
299
296
  }
300
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MatSlideToggleTbFilterDirective, deps: [{ token: i5.MatSlideToggle }, { token: i2.TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
301
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.2", type: MatSlideToggleTbFilterDirective, isStandalone: true, selector: "mat-slide-toggle[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatSlideToggleTbFilterDirective }], usesInheritance: true, ngImport: i0 }); }
297
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MatSlideToggleTbFilterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
298
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: MatSlideToggleTbFilterDirective, isStandalone: true, selector: "mat-slide-toggle[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatSlideToggleTbFilterDirective }], usesInheritance: true, ngImport: i0 });
302
299
  }
303
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MatSlideToggleTbFilterDirective, decorators: [{
300
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MatSlideToggleTbFilterDirective, decorators: [{
304
301
  type: Directive,
305
302
  args: [{
306
303
  selector: 'mat-slide-toggle[tbCustomFilter]',
@@ -310,26 +307,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
310
307
  providers: [{ provide: TableCustomFilterDirective, useExisting: MatSlideToggleTbFilterDirective }],
311
308
  standalone: true,
312
309
  }]
313
- }], ctorParameters: () => [{ type: i5.MatSlideToggle }, { type: i2.TableWrapperDirective, decorators: [{
314
- type: Optional
315
- }] }] });
310
+ }], ctorParameters: () => [] });
316
311
  // Radio button
317
312
  export class MatRadioButtonTbFilterDirective extends TbSelectedFilterDirective {
313
+ matRadioButton;
318
314
  set active(val) {
319
315
  this.matRadioButton.checked = val;
320
316
  super.active = val;
321
317
  }
322
- constructor(matRadioButton, wrapper) {
323
- super(matRadioButton.change, () => matRadioButton.checked, wrapper);
318
+ constructor() {
319
+ const matRadioButton = inject(MatRadioButton);
320
+ super(matRadioButton.change, () => matRadioButton.checked);
324
321
  this.matRadioButton = matRadioButton;
325
322
  }
326
323
  ngOnInit() {
327
324
  super.ngOnInit();
328
325
  }
329
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MatRadioButtonTbFilterDirective, deps: [{ token: i6.MatRadioButton }, { token: i2.TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
330
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.2", type: MatRadioButtonTbFilterDirective, isStandalone: true, selector: "mat-radio-button[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"] }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatRadioButtonTbFilterDirective }], usesInheritance: true, ngImport: i0 }); }
326
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MatRadioButtonTbFilterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
327
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: MatRadioButtonTbFilterDirective, isStandalone: true, selector: "mat-radio-button[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"] }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatRadioButtonTbFilterDirective }], usesInheritance: true, ngImport: i0 });
331
328
  }
332
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MatRadioButtonTbFilterDirective, decorators: [{
329
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MatRadioButtonTbFilterDirective, decorators: [{
333
330
  type: Directive,
334
331
  args: [{
335
332
  selector: 'mat-radio-button[tbCustomFilter]',
@@ -337,11 +334,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
337
334
  providers: [{ provide: TableCustomFilterDirective, useExisting: MatRadioButtonTbFilterDirective }],
338
335
  standalone: true,
339
336
  }]
340
- }], ctorParameters: () => [{ type: i6.MatRadioButton }, { type: i2.TableWrapperDirective, decorators: [{
341
- type: Optional
342
- }] }] });
337
+ }], ctorParameters: () => [] });
343
338
  // Option (select)
344
339
  export class MatOptionTbFilterDirective extends TbSelectedFilterDirective {
340
+ matOption;
345
341
  set active(val) {
346
342
  if (val) {
347
343
  this.matOption.select();
@@ -351,21 +347,22 @@ export class MatOptionTbFilterDirective extends TbSelectedFilterDirective {
351
347
  }
352
348
  super.active = val;
353
349
  }
354
- constructor(matOption, wrapper) {
350
+ constructor() {
351
+ const matOption = inject(MatOption);
355
352
  super(matOption.onSelectionChange.pipe(tap(d => {
356
353
  if (!matOption.value) {
357
354
  matOption.value = uuid();
358
355
  }
359
- })), () => matOption.selected, wrapper);
356
+ })), () => matOption.selected);
360
357
  this.matOption = matOption;
361
358
  }
362
359
  ngOnInit() {
363
360
  super.ngOnInit();
364
361
  }
365
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MatOptionTbFilterDirective, deps: [{ token: i7.MatOption }, { token: i2.TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
366
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.2", type: MatOptionTbFilterDirective, isStandalone: true, selector: "mat-option[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatOptionTbFilterDirective }], usesInheritance: true, ngImport: i0 }); }
362
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MatOptionTbFilterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
363
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: MatOptionTbFilterDirective, isStandalone: true, selector: "mat-option[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatOptionTbFilterDirective }], usesInheritance: true, ngImport: i0 });
367
364
  }
368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MatOptionTbFilterDirective, decorators: [{
365
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MatOptionTbFilterDirective, decorators: [{
369
366
  type: Directive,
370
367
  args: [{
371
368
  selector: 'mat-option[tbCustomFilter]',
@@ -375,26 +372,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
375
372
  providers: [{ provide: TableCustomFilterDirective, useExisting: MatOptionTbFilterDirective }],
376
373
  standalone: true,
377
374
  }]
378
- }], ctorParameters: () => [{ type: i7.MatOption }, { type: i2.TableWrapperDirective, decorators: [{
379
- type: Optional
380
- }] }] });
375
+ }], ctorParameters: () => [] });
381
376
  // Button toggle
382
377
  export class MatButtonToggleFilterDirective extends TbSelectedFilterDirective {
378
+ matButtonToggle;
383
379
  set active(val) {
384
380
  this.matButtonToggle.checked = val;
385
381
  super.active = val;
386
382
  }
387
- constructor(matButtonToggle, wrapper) {
388
- super(matButtonToggle.change, () => matButtonToggle.checked, wrapper);
383
+ constructor() {
384
+ const matButtonToggle = inject(MatButtonToggle);
385
+ super(matButtonToggle.change, () => matButtonToggle.checked);
389
386
  this.matButtonToggle = matButtonToggle;
390
387
  }
391
388
  ngOnInit() {
392
389
  super.ngOnInit();
393
390
  }
394
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MatButtonToggleFilterDirective, deps: [{ token: i8.MatButtonToggle }, { token: i2.TableWrapperDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
395
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.2", type: MatButtonToggleFilterDirective, isStandalone: true, selector: "mat-button-toggle[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatButtonToggleFilterDirective }], usesInheritance: true, ngImport: i0 }); }
391
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MatButtonToggleFilterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
392
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: MatButtonToggleFilterDirective, isStandalone: true, selector: "mat-button-toggle[tbCustomFilter]", inputs: { predicate: ["tbCustomFilter", "predicate"], filterId: "filterId" }, providers: [{ provide: TableCustomFilterDirective, useExisting: MatButtonToggleFilterDirective }], usesInheritance: true, ngImport: i0 });
396
393
  }
397
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: MatButtonToggleFilterDirective, decorators: [{
394
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MatButtonToggleFilterDirective, decorators: [{
398
395
  type: Directive,
399
396
  args: [{
400
397
  selector: 'mat-button-toggle[tbCustomFilter]',
@@ -404,7 +401,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
404
401
  providers: [{ provide: TableCustomFilterDirective, useExisting: MatButtonToggleFilterDirective }],
405
402
  standalone: true,
406
403
  }]
407
- }], ctorParameters: () => [{ type: i8.MatButtonToggle }, { type: i2.TableWrapperDirective, decorators: [{
408
- type: Optional
409
- }] }] });
410
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGItZmlsdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2RpcmVjdGl2ZXMvdGItZmlsdGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFXLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0YsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBS2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7QUFLdkQsTUFBTSxNQUFNLEdBQUc7SUFDYiwyQkFBMkI7SUFDM0Isb0JBQW9CO0NBQ3JCLENBQUM7QUFNRixNQUFNLE9BQWdCLDBCQUEwQjtJQUhoRDtRQU1FLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsU0FBSSxHQUFHLEtBQUssQ0FBQztLQUdkOzhHQVBxQiwwQkFBMEI7a0dBQTFCLDBCQUEwQjs7MkZBQTFCLDBCQUEwQjtrQkFIL0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsR0FBRztpQkFDZDs7QUFnQkUsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGNBQTBCO0lBRXJFLFlBQW1DLEtBQWdCLEVBQWMsT0FBOEI7UUFDN0YsS0FBSyxFQUFFLENBQUM7UUFEeUIsVUFBSyxHQUFMLEtBQUssQ0FBVztRQW1CbkQsWUFBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFNYixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2QsZ0JBQVcsR0FBUSxJQUFJLENBQUM7UUFhakMsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNiLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVkLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBekNqQixJQUFHLE9BQU8sRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBRyxLQUFLLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxNQUFNLENBQUUsR0FBRyxFQUFFO2dCQUNoQixPQUFPLEtBQUssQ0FBQyxZQUFhLENBQUMsSUFBSSxDQUM3QixHQUFHLENBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUM7SUFDRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQVVELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2QsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBUUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVTLFNBQVMsQ0FBQyxNQUFrQjtRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsU0FBUyxDQUNaO2dCQUNFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO2dCQUNiLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUztnQkFDckQsb0JBQW9CLEVBQUUsSUFBSTthQUMzQixDQUNGLENBQUM7UUFFSixDQUFDO0lBQ0gsQ0FBQzs4R0EvRWEsb0JBQW9CO2tHQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBRWMsUUFBUTs7MEJBQWlDLFFBQVE7eUNBcUJyRCxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7O0FBZ0VMLE1BQU0sT0FBTyxrQ0FBbUMsU0FBUSxvQkFBb0I7SUFDN0UsWUFBeUIsS0FBZ0IsRUFBYyxPQUE4QjtRQUNuRixLQUFLLENBQUMsS0FBSyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQztRQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBRSxHQUFHLEVBQUU7WUFDaEIsT0FBTyxLQUFLLENBQUMsWUFBYSxDQUFDLElBQUksQ0FDN0IsR0FBRyxDQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNULElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO2dCQUN2QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVRLEtBQUs7UUFDWixJQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUNELEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRVEsU0FBUyxDQUFDLE1BQWtCO1FBQ25DLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3ZELEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNwRCxDQUFDO1FBQ0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDOzhHQWhDYSxrQ0FBa0M7a0dBQWxDLGtDQUFrQywrTEFSckMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQzs7MkZBUWpGLGtDQUFrQztrQkFWakQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLG9DQUFvQyxFQUFFLENBQUM7b0JBQy9GLE1BQU0sRUFBRTt3QkFDTiw0QkFBNEI7d0JBQzVCLHlCQUF5Qjt3QkFDekIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7cUJBQ2pCO29CQUNELFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBQ2MsUUFBUTs7MEJBQXVCLFFBQVE7O0FBcUN0RCxNQUFNLE9BQWdCLDhCQUF3QyxTQUFRLDBCQUE2QjtJQUhuRzs7UUFlRSxZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLFVBQUssR0FBRyxLQUFLLENBQUM7S0FtQ2Y7SUF6Q0MsSUFBNkIsU0FBUyxDQUFFLEdBQWlCO1FBQ3ZELElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQyxTQUFTLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBS0QsTUFBTSxDQUFDLEdBQTBCO1FBQy9CLElBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBQyxHQUFHLEdBQUcsRUFBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQWEsTUFBTSxDQUFDLEdBQVk7UUFDOUIsSUFBRyxJQUFJLENBQUMsT0FBTyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQyxNQUFNLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osVUFBVSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzNCLENBQUM7UUFDRixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDOzhHQS9DbUIsOEJBQThCO2tHQUE5Qiw4QkFBOEI7OzJGQUE5Qiw4QkFBOEI7a0JBSG5ELFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7OEJBS1UsUUFBUTtzQkFBaEIsS0FBSztnQkFHdUIsU0FBUztzQkFBckMsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBZVYsTUFBTTtzQkFBbEIsS0FBSzs7QUE2QlIsTUFBTSxPQUFnQix5QkFBb0MsU0FBUSw4QkFBaUM7SUFHakcsWUFBOEIsTUFBdUIsRUFBVSxRQUF1QixFQUFjLE9BQThCO1FBQ2hJLEtBQUssRUFBRSxDQUFDO1FBRG9CLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBZTtRQVd0RixvQkFBZSxHQUFHLElBQUksYUFBYSxDQUFPLENBQUMsQ0FBQyxDQUFDO1FBVDNDLElBQUcsT0FBTyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFHRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFFLEdBQUcsRUFBRTtZQUNoRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBekJtQix5QkFBeUI7a0dBQXpCLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFEOUMsU0FBUzs7MEJBSWlGLFFBQVE7O0FBeUJuRyxXQUFXO0FBU1gsTUFBTSxPQUFPLDRCQUE2QixTQUFRLHlCQUF5QjtJQUV6RSxJQUFhLE1BQU0sQ0FBQyxHQUFZO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUMvQixLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBQ0QsWUFBb0IsV0FBd0IsRUFBYyxPQUE4QjtRQUN0RixLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRDVDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBRTVDLENBQUM7OEdBUlUsNEJBQTRCO2tHQUE1Qiw0QkFBNEIseUpBSDVCLENBQUMsRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLENBQUM7OzJGQUdwRiw0QkFBNEI7a0JBUnhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsTUFBTSxFQUFFO3dCQUNOLEdBQUcsTUFBTTtxQkFDVjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxXQUFXLDhCQUE4QixFQUFFLENBQUM7b0JBQy9GLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBT2dELFFBQVE7O0FBY3pELE1BQU0sT0FBTywrQkFBeUMsU0FBUSx5QkFBNEI7SUFDeEYsSUFBYSxNQUFNLENBQUMsR0FBWTtRQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbEMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDckIsQ0FBQztJQUNELFlBQW9CLGNBQThCLEVBQWMsT0FBOEI7UUFDNUYsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBQyxPQUFPLENBQUMsQ0FBQztRQURqRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFFbEQsQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQzs4R0FYVSwrQkFBK0I7a0dBQS9CLCtCQUErQiw2SkFIL0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxXQUFXLEVBQUUsK0JBQStCLEVBQUUsQ0FBQzs7MkZBR3ZGLCtCQUErQjtrQkFSM0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0NBQWtDO29CQUM1QyxNQUFNLEVBQUU7d0JBQ04sR0FBRyxNQUFNO3FCQUNWO29CQUNELFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFdBQVcsaUNBQWlDLEVBQUUsQ0FBQztvQkFDbEcsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkFNc0QsUUFBUTs7QUFTL0QsZUFBZTtBQU9mLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSx5QkFBeUI7SUFFNUUsSUFBYSxNQUFNLENBQUMsR0FBWTtRQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbEMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDckIsQ0FBQztJQUNELFlBQW9CLGNBQThCLEVBQWMsT0FBOEI7UUFDNUYsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQURsRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFFbEQsQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQzs4R0FaVSwrQkFBK0I7a0dBQS9CLCtCQUErQix1SUFIL0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxXQUFXLEVBQUUsK0JBQStCLEVBQUUsQ0FBQzs7MkZBR3ZGLCtCQUErQjtrQkFOM0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0NBQWtDO29CQUM1QyxNQUFNLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztvQkFDckMsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsV0FBVyxpQ0FBaUMsRUFBRSxDQUFDO29CQUNsRyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQU9zRCxRQUFROztBQVMvRCxrQkFBa0I7QUFTbEIsTUFBTSxPQUFPLDBCQUEyQixTQUFRLHlCQUF5QjtJQUV2RSxJQUFhLE1BQU0sQ0FBQyxHQUFZO1FBQzlCLElBQUcsR0FBRyxFQUFFLENBQUM7WUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDckIsQ0FBQztJQUNELFlBQW9CLFNBQW9CLEVBQWMsT0FBOEI7UUFDbEYsS0FBSyxDQUFFLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFFLENBQUMsQ0FBQyxFQUFFO1lBQy9DLElBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUMsQ0FFQSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQVByQixjQUFTLEdBQVQsU0FBUyxDQUFXO0lBUXhDLENBQUM7SUFFRCxRQUFRO1FBQ04sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25CLENBQUM7OEdBdEJVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLHVKQUgxQixDQUFDLEVBQUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFdBQVcsRUFBRSwwQkFBMEIsRUFBRSxDQUFDOzsyRkFHbEYsMEJBQTBCO2tCQVJ0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLE1BQU0sRUFBRTt3QkFDTixHQUFHLE1BQU07cUJBQ1Y7b0JBQ0QsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsV0FBVyw0QkFBNEIsRUFBRSxDQUFDO29CQUM3RixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQVc0QyxRQUFROztBQWVyRCxnQkFBZ0I7QUFTaEIsTUFBTSxPQUFPLDhCQUErQixTQUFRLHlCQUF5QjtJQUMzRSxJQUFhLE1BQU0sQ0FBQyxHQUFZO1FBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBQ0QsWUFBb0IsZUFBZ0MsRUFBYyxPQUE4QjtRQUM5RixLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRG5ELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUVwRCxDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDOzhHQVhVLDhCQUE4QjtrR0FBOUIsOEJBQThCLDhKQUg5QixDQUFDLEVBQUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFdBQVcsRUFBRSw4QkFBOEIsRUFBRSxDQUFDOzsyRkFHdEYsOEJBQThCO2tCQVIxQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQ0FBbUM7b0JBQzdDLE1BQU0sRUFBRTt3QkFDTixHQUFHLE1BQU07cUJBQ1Y7b0JBQ0QsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsV0FBVyxnQ0FBZ0MsRUFBRSxDQUFDO29CQUNqRyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQU13RCxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT3B0aW9uYWwsIFByZWRpY2F0ZSwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBDdXN0b21GaWx0ZXIsIEZpbHRlckluZm8gfSBmcm9tIFwiLi4vY2xhc3Nlcy9maWx0ZXItaW5mb1wiO1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7IEZpbHRlclR5cGUgfSBmcm9tIFwiLi4vZW51bXMvZmlsdGVyVHlwZXNcIjtcclxuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlXCI7XHJcbmltcG9ydCB7IE1hdFJhZGlvQnV0dG9uIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3JhZGlvXCI7XHJcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveFwiO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9yZXBvcnQtZGVmXCI7XHJcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRTdG9yZSB9IGZyb20gXCJAbmdyeC9jb21wb25lbnQtc3RvcmVcIjtcclxuaW1wb3J0IHsgVGFibGVXcmFwcGVyRGlyZWN0aXZlIH0gZnJvbSBcIi4vdGFibGUtd3JhcHBlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgTWF0T3B0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NvcmVcIjtcclxuXHJcblxyXG5jb25zdCBpbnB1dHMgPSBbXHJcbiAgJ3ByZWRpY2F0ZTogdGJDdXN0b21GaWx0ZXInLFxyXG4gICdmaWx0ZXJJZDogZmlsdGVySWQnLFxyXG5dO1xyXG5cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnICdcclxufSlcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlPFQgPSBhbnk+IHtcclxuICBhYnN0cmFjdCBmaWx0ZXIkIDogT2JzZXJ2YWJsZTxDdXN0b21GaWx0ZXI+O1xyXG4gIGZpbHRlcklkITogc3RyaW5nO1xyXG4gIHNhdmFibGUgPSBmYWxzZTtcclxuICB1c2VkID0gZmFsc2U7XHJcbiAgYWJzdHJhY3QgYWN0aXZlOiBib29sZWFuO1xyXG4gIGFic3RyYWN0IHJlc2V0KCk6IHZvaWQ7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiBcIlt0YkZpbHRlcl1cIixcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KSBleHBvcnQgY2xhc3MgVGFibGVGaWx0ZXJEaXJlY3RpdmUgZXh0ZW5kcyBDb21wb25lbnRTdG9yZTxGaWx0ZXJJbmZvPiB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByb3RlY3RlZCAgbW9kZWw6IE5nQ29udHJvbCwgQE9wdGlvbmFsKCkgd3JhcHBlcjogVGFibGVXcmFwcGVyRGlyZWN0aXZlKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgaWYod3JhcHBlcikge1xyXG4gICAgICB3cmFwcGVyLnJlZ2lzdGVyKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaWYobW9kZWwpIHtcclxuICAgICAgdGhpcy5lZmZlY3QoICgpID0+IHtcclxuICAgICAgICByZXR1cm4gbW9kZWwudmFsdWVDaGFuZ2VzIS5waXBlKFxyXG4gICAgICAgICAgdGFwKCB2YWwgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5maWx0ZXJWYWx1ZSA9IHVuZGVmaW5lZDtcclxuICB9XHJcbiAgZmlsdGVyJCA9IHRoaXMuc3RhdGUkO1xyXG5cclxuICBASW5wdXQoKSBmaWx0ZXJUeXBlITogRmlsdGVyVHlwZTtcclxuICBASW5wdXQoKSBrZXkhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZmllbGRUeXBlITogRmllbGRUeXBlO1xyXG4gIEBJbnB1dCgpIGZpbHRlcklkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFjdGl2ZSA9IHRydWU7XHJcbiAgQElucHV0KCkgZmlsdGVyVmFsdWU6IGFueSA9IG51bGw7XHJcblxyXG4gIHNldEZpbHRlclZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmKHRoaXMubW9kZWwpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5yZXNldCh2YWx1ZSk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHVzZWQgPSBmYWxzZTtcclxuICBzYXZhYmxlID0gZmFsc2U7XHJcbiAgcmVhZHkgPSBmYWxzZTtcclxuXHJcbiAgX3VzZXJBY3RpdmUgPSB0cnVlO1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMgKSB7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZighdGhpcy5maWx0ZXJJZCkge1xyXG4gICAgICB0aGlzLmZpbHRlcklkID0gdXVpZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZhYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXRGaWx0ZXIoZmlsdGVyOiBGaWx0ZXJJbmZvICkge1xyXG4gICAgdGhpcy5zZXRTdGF0ZShmaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgaWYgKHRoaXMucmVhZHkpIHtcclxuICAgICAgdGhpcy5zZXRGaWx0ZXIoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmlsdGVySWQ6IHRoaXMuZmlsdGVySWQsXHJcbiAgICAgICAgICBrZXk6IHRoaXMua2V5LFxyXG4gICAgICAgICAgZmlsdGVyVHlwZTogdGhpcy5maWx0ZXJUeXBlLFxyXG4gICAgICAgICAgZmllbGRUeXBlOiB0aGlzLmZpZWxkVHlwZSxcclxuICAgICAgICAgIGZpbHRlclZhbHVlOiB0aGlzLmZpbHRlclZhbHVlLFxyXG4gICAgICAgICAgYWN0aXZlOiB0aGlzLmFjdGl2ZSAmJiB0aGlzLmZpbHRlclZhbHVlICE9PSB1bmRlZmluZWQsXHJcbiAgICAgICAgICBfaXNFeHRlcm5hbGx5TWFuYWdlZDogdHJ1ZSxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbdGJGaWx0ZXJTdHJpbmdDb250YWluc10nLFxyXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogVGFibGVGaWx0ZXJEaXJlY3RpdmUsIHVzZUV4aXN0aW5nOiBUYWJsZUZpbHRlclN0cmluZ0NvbnRhaW5zRGlyZWN0aXZlIH1dLFxyXG4gIGlucHV0czogW1xyXG4gICAgJ2tleTp0YkZpbHRlclN0cmluZ0NvbnRhaW5zJyxcclxuICAgICdmaWx0ZXJWYWx1ZTpmaWx0ZXJWYWx1ZScsXHJcbiAgICAnZmlsdGVySWQ6IGZpbHRlcklkJyxcclxuICAgICdhY3RpdmU6IGFjdGl2ZScsXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KSBleHBvcnQgY2xhc3MgVGFibGVGaWx0ZXJTdHJpbmdDb250YWluc0RpcmVjdGl2ZSBleHRlbmRzIFRhYmxlRmlsdGVyRGlyZWN0aXZlIHtcclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSAgbW9kZWw6IE5nQ29udHJvbCwgQE9wdGlvbmFsKCkgd3JhcHBlcjogVGFibGVXcmFwcGVyRGlyZWN0aXZlKSB7XHJcbiAgICBzdXBlcihtb2RlbCx3cmFwcGVyKTtcclxuICAgIHRoaXMuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuU3RyaW5nQ29udGFpbnM7XHJcbiAgICB0aGlzLmZpZWxkVHlwZSA9IEZpZWxkVHlwZS5TdHJpbmc7XHJcbiAgICB0aGlzLmVmZmVjdCggKCkgPT4ge1xyXG4gICAgICByZXR1cm4gbW9kZWwudmFsdWVDaGFuZ2VzIS5waXBlKFxyXG4gICAgICAgIHRhcCggdmFsID0+IHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSByZXNldCgpIHtcclxuICAgIGlmKHRoaXMubW9kZWwpIHtcclxuICAgICAgdGhpcy5tb2RlbC5yZXNldCgpO1xyXG4gICAgfVxyXG4gICAgc3VwZXIucmVzZXQoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNldEZpbHRlcihmaWx0ZXI6IEZpbHRlckluZm8pIHtcclxuICAgIGZpbHRlci5hY3RpdmUgPSBmaWx0ZXIuZmlsdGVyVmFsdWUgJiYgdGhpcy5fdXNlckFjdGl2ZTtcclxuICAgIHN1cGVyLnNldEZpbHRlcihmaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYoY2hhbmdlc1snYWN0aXZlJ10pIHtcclxuICAgICAgdGhpcy5fdXNlckFjdGl2ZSA9IGNoYW5nZXNbJ2FjdGl2ZSddLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6IFwiW3RiQ3VzdG9tRmlsdGVyXVwiLFxyXG59KVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmVCYXNlPFQgPSBhbnk+IGV4dGVuZHMgVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmU8VD4ge1xyXG5cclxuICBmaWx0ZXIkISA6IFN1YmplY3Q8Q3VzdG9tRmlsdGVyPjtcclxuICBmaWx0ZXIhOiBDdXN0b21GaWx0ZXI7XHJcbiAgQElucHV0KCkgZmlsdGVySWQhIDogc3RyaW5nO1xyXG5cclxuICBfcHJlZGljYXRlITogUHJlZGljYXRlPFQ+O1xyXG4gIEBJbnB1dCgndGJDdXN0b21GaWx0ZXInKSBzZXQgcHJlZGljYXRlKCB2YWw6IFByZWRpY2F0ZTxUPiApIHtcclxuICAgIHRoaXMuX3ByZWRpY2F0ZSA9IHZhbDtcclxuICAgIHRoaXMudXBkYXRlKHtwcmVkaWNhdGU6dmFsfSk7XHJcbiAgfVxyXG5cclxuICBfYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcmVhZHkgPSBmYWxzZTtcclxuXHJcbiAgdXBkYXRlKHZhbDogUGFydGlhbDxDdXN0b21GaWx0ZXI+ICkge1xyXG4gICAgaWYodGhpcy5yZWFkeSkge1xyXG4gICAgICB0aGlzLmZpbHRlciA9IHsuLi50aGlzLmZpbHRlciwuLi52YWx9O1xyXG4gICAgICB0aGlzLmZpbHRlciQubmV4dCh0aGlzLmZpbHRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgYWN0aXZlKHZhbDogYm9vbGVhbikge1xyXG4gICAgaWYodGhpcy5fYWN0aXZlICE9PSB2YWwpIHtcclxuICAgICAgdGhpcy5fYWN0aXZlID0gdmFsO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh7YWN0aXZlOnZhbH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYoIXRoaXMuZmlsdGVySWQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJJZCA9IHV1aWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2YWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWx0ZXIgPSB7XHJcbiAgICAgIGZpbHRlclR5cGU6IEZpbHRlclR5cGUuQ3VzdG9tLFxyXG4gICAgICBmaWx0ZXJJZDogdGhpcy5maWx0ZXJJZCxcclxuICAgICAgYWN0aXZlOiB0aGlzLl9hY3RpdmUsXHJcbiAgICAgIHByZWRpY2F0ZTogdGhpcy5fcHJlZGljYXRlLFxyXG4gICAgfTtcclxuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xyXG4gICAgdGhpcy5maWx0ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLmZpbHRlcik7XHJcbiAgfVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRiU2VsZWN0ZWRGaWx0ZXJEaXJlY3RpdmU8VCA9IGFueT4gIGV4dGVuZHMgVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmVCYXNlPFQ+IHtcclxuXHJcblxyXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZTogT2JzZXJ2YWJsZTxhbnk+LCBwcml2YXRlIGlzQWN0aXZlOiAoKSA9PiBib29sZWFuLCBAT3B0aW9uYWwoKSB3cmFwcGVyOiBUYWJsZVdyYXBwZXJEaXJlY3RpdmUpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBpZih3cmFwcGVyKSB7XHJcbiAgICAgIHdyYXBwZXIucmVnaXN0ZXIodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95U3ViamVjdCQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigxKTtcclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZGVzdHJveVN1YmplY3QkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fYWN0aXZlID0gdGhpcy5pc0FjdGl2ZSgpO1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIHRoaXMuY2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSkuc3Vic2NyaWJlKCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5pc0FjdGl2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBDaGVja2JveFxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ21hdC1jaGVja2JveFt0YkN1c3RvbUZpbHRlcl0nLFxyXG4gIGlucHV0czogW1xyXG4gICAgLi4uaW5wdXRzXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCB1c2VFeGlzdGluZzogTWF0Q2hlY2tib3hUYkZpbHRlckRpcmVjdGl2ZSB9XSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0Q2hlY2tib3hUYkZpbHRlckRpcmVjdGl2ZSBleHRlbmRzIFRiU2VsZWN0ZWRGaWx0ZXJEaXJlY3RpdmUge1xyXG5cclxuICBvdmVycmlkZSBzZXQgYWN0aXZlKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5tYXRDaGVja2JveC5jaGVja2VkID0gdmFsO1xyXG4gICAgc3VwZXIuYWN0aXZlID0gdmFsO1xyXG4gIH1cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1hdENoZWNrYm94OiBNYXRDaGVja2JveCwgQE9wdGlvbmFsKCkgd3JhcHBlcjogVGFibGVXcmFwcGVyRGlyZWN0aXZlKSB7XHJcbiAgICBzdXBlcihtYXRDaGVja2JveC5jaGFuZ2UsICgpID0+IG1hdENoZWNrYm94LmNoZWNrZWQsIHdyYXBwZXIpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnbWF0LXNsaWRlLXRvZ2dsZVt0YkN1c3RvbUZpbHRlcl0nLFxyXG4gIGlucHV0czogW1xyXG4gICAgLi4uaW5wdXRzXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCB1c2VFeGlzdGluZzogTWF0U2xpZGVUb2dnbGVUYkZpbHRlckRpcmVjdGl2ZSB9XSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0U2xpZGVUb2dnbGVUYkZpbHRlckRpcmVjdGl2ZTxUID0gYW55PiBleHRlbmRzIFRiU2VsZWN0ZWRGaWx0ZXJEaXJlY3RpdmU8VD4ge1xyXG4gIG92ZXJyaWRlIHNldCBhY3RpdmUodmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm1hdFNsaWRlVG9nZ2xlLmNoZWNrZWQgPSB2YWw7XHJcbiAgICBzdXBlci5hY3RpdmUgPSB2YWw7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWF0U2xpZGVUb2dnbGU6IE1hdFNsaWRlVG9nZ2xlLCBAT3B0aW9uYWwoKSB3cmFwcGVyOiBUYWJsZVdyYXBwZXJEaXJlY3RpdmUpIHtcclxuICAgIHN1cGVyKG1hdFNsaWRlVG9nZ2xlLmNoYW5nZSwgKCkgPT4gbWF0U2xpZGVUb2dnbGUuY2hlY2tlZCx3cmFwcGVyKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIFJhZGlvIGJ1dHRvblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ21hdC1yYWRpby1idXR0b25bdGJDdXN0b21GaWx0ZXJdJyxcclxuICBpbnB1dHM6IFsncHJlZGljYXRlOiB0YkN1c3RvbUZpbHRlciddLFxyXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsIHVzZUV4aXN0aW5nOiBNYXRSYWRpb0J1dHRvblRiRmlsdGVyRGlyZWN0aXZlIH1dLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRSYWRpb0J1dHRvblRiRmlsdGVyRGlyZWN0aXZlIGV4dGVuZHMgVGJTZWxlY3RlZEZpbHRlckRpcmVjdGl2ZSB7XHJcblxyXG4gIG92ZXJyaWRlIHNldCBhY3RpdmUodmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm1hdFJhZGlvQnV0dG9uLmNoZWNrZWQgPSB2YWw7XHJcbiAgICBzdXBlci5hY3RpdmUgPSB2YWw7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWF0UmFkaW9CdXR0b246IE1hdFJhZGlvQnV0dG9uLCBAT3B0aW9uYWwoKSB3cmFwcGVyOiBUYWJsZVdyYXBwZXJEaXJlY3RpdmUpIHtcclxuICAgIHN1cGVyKG1hdFJhZGlvQnV0dG9uLmNoYW5nZSwgKCkgPT4gbWF0UmFkaW9CdXR0b24uY2hlY2tlZCwgd3JhcHBlcik7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBPcHRpb24gKHNlbGVjdClcclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdtYXQtb3B0aW9uW3RiQ3VzdG9tRmlsdGVyXScsXHJcbiAgaW5wdXRzOiBbXHJcbiAgICAuLi5pbnB1dHNcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsIHVzZUV4aXN0aW5nOiBNYXRPcHRpb25UYkZpbHRlckRpcmVjdGl2ZSB9XSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0T3B0aW9uVGJGaWx0ZXJEaXJlY3RpdmUgZXh0ZW5kcyBUYlNlbGVjdGVkRmlsdGVyRGlyZWN0aXZlIHtcclxuXHJcbiAgb3ZlcnJpZGUgc2V0IGFjdGl2ZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIGlmKHZhbCkge1xyXG4gICAgICB0aGlzLm1hdE9wdGlvbi5zZWxlY3QoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWF0T3B0aW9uLmRlc2VsZWN0KCk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5hY3RpdmUgPSB2YWw7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWF0T3B0aW9uOiBNYXRPcHRpb24sIEBPcHRpb25hbCgpIHdyYXBwZXI6IFRhYmxlV3JhcHBlckRpcmVjdGl2ZSkge1xyXG4gICAgc3VwZXIoIG1hdE9wdGlvbi5vblNlbGVjdGlvbkNoYW5nZS5waXBlKHRhcCggZCA9PiB7XHJcbiAgICAgIGlmKCFtYXRPcHRpb24udmFsdWUpIHtcclxuICAgICAgICBtYXRPcHRpb24udmFsdWUgPSB1dWlkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICApKSwgKCkgPT4gbWF0T3B0aW9uLnNlbGVjdGVkLCB3cmFwcGVyKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIEJ1dHRvbiB0b2dnbGVcclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdtYXQtYnV0dG9uLXRvZ2dsZVt0YkN1c3RvbUZpbHRlcl0nLFxyXG4gIGlucHV0czogW1xyXG4gICAgLi4uaW5wdXRzXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCB1c2VFeGlzdGluZzogTWF0QnV0dG9uVG9nZ2xlRmlsdGVyRGlyZWN0aXZlIH1dLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRCdXR0b25Ub2dnbGVGaWx0ZXJEaXJlY3RpdmUgZXh0ZW5kcyBUYlNlbGVjdGVkRmlsdGVyRGlyZWN0aXZlIHtcclxuICBvdmVycmlkZSBzZXQgYWN0aXZlKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5tYXRCdXR0b25Ub2dnbGUuY2hlY2tlZCA9IHZhbDtcclxuICAgIHN1cGVyLmFjdGl2ZSA9IHZhbDtcclxuICB9XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXRCdXR0b25Ub2dnbGU6IE1hdEJ1dHRvblRvZ2dsZSwgQE9wdGlvbmFsKCkgd3JhcHBlcjogVGFibGVXcmFwcGVyRGlyZWN0aXZlKSB7XHJcbiAgICBzdXBlcihtYXRCdXR0b25Ub2dnbGUuY2hhbmdlLCAoKSA9PiBtYXRCdXR0b25Ub2dnbGUuY2hlY2tlZCx3cmFwcGVyKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICB9XHJcbn1cclxuIl19
404
+ }], ctorParameters: () => [] });
405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGItZmlsdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2RpcmVjdGl2ZXMvdGItZmlsdGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFXLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0YsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQUduRCxNQUFNLE1BQU0sR0FBRztJQUNiLDJCQUEyQjtJQUMzQixvQkFBb0I7Q0FDckIsQ0FBQztBQU1GLE1BQU0sT0FBZ0IsMEJBQTBCO0lBRTlDLFFBQVEsQ0FBVTtJQUNsQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLElBQUksR0FBRyxLQUFLLENBQUM7dUdBSk8sMEJBQTBCOzJGQUExQiwwQkFBMEI7OzJGQUExQiwwQkFBMEI7a0JBSC9DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEdBQUc7aUJBQ2Q7O0FBZ0JFLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxjQUEwQjtJQUMzRCxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRTtRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUNELElBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBRSxHQUFHLEVBQUU7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQU0sQ0FBQyxZQUFhLENBQUMsSUFBSSxDQUNuQyxHQUFHLENBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUM7SUFDRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUNELE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBRWIsVUFBVSxDQUFjO0lBQ3hCLEdBQUcsQ0FBVTtJQUNiLFNBQVMsQ0FBYTtJQUN0QixRQUFRLENBQVU7SUFDbEIsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNkLFdBQVcsR0FBUSxJQUFJLENBQUM7SUFFakMsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxLQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ2IsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBRWQsV0FBVyxHQUFHLElBQUksQ0FBQztJQUNuQixXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRVMsU0FBUyxDQUFDLE1BQWtCO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxTQUFTLENBQ1o7Z0JBQ0UsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTO2dCQUNyRCxvQkFBb0IsRUFBRSxJQUFJO2FBQzNCLENBQ0YsQ0FBQztRQUVKLENBQUM7SUFDSCxDQUFDO3VHQS9FYSxvQkFBb0I7MkZBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFIbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3dEQXdCVSxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7O0FBK0RMLE1BQU0sT0FBTyxrQ0FBbUMsU0FBUSxvQkFBb0I7SUFDN0U7UUFFRSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQztRQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBRSxHQUFHLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBTSxDQUFDLFlBQWEsQ0FBQyxJQUFJLENBQ25DLEdBQUcsQ0FBRSxHQUFHLENBQUMsRUFBRTtnQkFDVCxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFUSxLQUFLO1FBQ1osSUFBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVRLFNBQVMsQ0FBQyxNQUFrQjtRQUNuQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN2RCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDcEQsQ0FBQztRQUNELEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQzt1R0FqQ2Esa0NBQWtDOzJGQUFsQyxrQ0FBa0MsK0xBUnJDLENBQUMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLGtDQUFrQyxFQUFFLENBQUM7OzJGQVFqRixrQ0FBa0M7a0JBVmpELFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxvQ0FBb0MsRUFBRSxDQUFDO29CQUMvRixNQUFNLEVBQUU7d0JBQ04sNEJBQTRCO3dCQUM1Qix5QkFBeUI7d0JBQ3pCLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3FCQUNqQjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7O0FBdUNELE1BQU0sT0FBZ0IsOEJBQXdDLFNBQVEsMEJBQTZCO0lBRWpHLE9BQU8sQ0FBMEI7SUFDakMsTUFBTSxDQUFnQjtJQUV0QixVQUFVLENBQWdCO0lBQzFCLElBQTZCLFNBQVMsQ0FBRSxHQUFpQjtRQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUMsU0FBUyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sR0FBWSxLQUFLLENBQUM7SUFDekIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUVkLE1BQU0sQ0FBQyxHQUEwQjtRQUMvQixJQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUMsR0FBRyxHQUFHLEVBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFhLE1BQU0sQ0FBQyxHQUFZO1FBQzlCLElBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUMsTUFBTSxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLFVBQVUsRUFBRSxVQUFVLENBQUMsTUFBTTtZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3BCLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtTQUMzQixDQUFDO1FBQ0YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQzt1R0E5Q21CLDhCQUE4QjsyRkFBOUIsOEJBQThCOzsyRkFBOUIsOEJBQThCO2tCQUhuRCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7aUJBQzdCOzhCQU84QixTQUFTO3NCQUFyQyxLQUFLO3VCQUFDLGdCQUFnQjtnQkFlVixNQUFNO3NCQUFsQixLQUFLOztBQTZCUixNQUFNLE9BQWdCLHlCQUFvQyxTQUFRLDhCQUFpQztJQUduRTtJQUFpQztJQURyRCxPQUFPLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsWUFBOEIsTUFBdUIsRUFBVSxRQUF1QjtRQUNwRixLQUFLLEVBQUUsQ0FBQztRQURvQixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQWU7UUFFcEYsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELGVBQWUsR0FBRyxJQUFJLGFBQWEsQ0FBTyxDQUFDLENBQUMsQ0FBQztJQUM3QyxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFFLEdBQUcsRUFBRTtZQUNoRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7dUdBekJtQix5QkFBeUI7MkZBQXpCLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFEOUMsU0FBUzs7QUE2QlYsV0FBVztBQVNYLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSx5QkFBeUI7SUFDakUsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUcxQyxJQUFhLE1BQU0sQ0FBQyxHQUFZO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUMvQixLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBQ0Q7UUFDRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7dUdBWlUsNEJBQTRCOzJGQUE1Qiw0QkFBNEIseUpBSDVCLENBQUMsRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLENBQUM7OzJGQUdwRiw0QkFBNEI7a0JBUnhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsTUFBTSxFQUFFO3dCQUNOLEdBQUcsTUFBTTtxQkFDVjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxXQUFXLDhCQUE4QixFQUFFLENBQUM7b0JBQy9GLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7QUF5QkQsTUFBTSxPQUFPLCtCQUF5QyxTQUFRLHlCQUE0QjtJQUNoRixjQUFjLENBQWlCO0lBRXZDLElBQWEsTUFBTSxDQUFDLEdBQVk7UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQ3JCLENBQUM7SUFDRDtRQUNFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU5QyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFFdkMsQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQzt1R0FqQlUsK0JBQStCOzJGQUEvQiwrQkFBK0IsNkpBSC9CLENBQUMsRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLCtCQUErQixFQUFFLENBQUM7OzJGQUd2RiwrQkFBK0I7a0JBUjNDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtDQUFrQztvQkFDNUMsTUFBTSxFQUFFO3dCQUNOLEdBQUcsTUFBTTtxQkFDVjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxXQUFXLGlDQUFpQyxFQUFFLENBQUM7b0JBQ2xHLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7QUFxQkQsZUFBZTtBQU9mLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSx5QkFBeUI7SUFDcEUsY0FBYyxDQUFpQjtJQUd2QyxJQUFhLE1BQU0sQ0FBQyxHQUFZO1FBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNsQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBQ0Q7UUFDRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFOUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxRQUFRO1FBQ04sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25CLENBQUM7dUdBakJVLCtCQUErQjsyRkFBL0IsK0JBQStCLHVJQUgvQixDQUFDLEVBQUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFdBQVcsRUFBRSwrQkFBK0IsRUFBRSxDQUFDOzsyRkFHdkYsK0JBQStCO2tCQU4zQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQ0FBa0M7b0JBQzVDLE1BQU0sRUFBRSxDQUFDLDJCQUEyQixDQUFDO29CQUNyQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxXQUFXLGlDQUFpQyxFQUFFLENBQUM7b0JBQ2xHLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7QUFxQkQsa0JBQWtCO0FBU2xCLE1BQU0sT0FBTywwQkFBMkIsU0FBUSx5QkFBeUI7SUFDL0QsU0FBUyxDQUFZO0lBRzdCLElBQWEsTUFBTSxDQUFDLEdBQVk7UUFDOUIsSUFBRyxHQUFHLEVBQUUsQ0FBQztZQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBQ0Q7UUFDRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFcEMsS0FBSyxDQUFFLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFFLENBQUMsQ0FBQyxFQUFFO1lBQy9DLElBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUMsQ0FFQSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRO1FBQ04sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25CLENBQUM7dUdBM0JVLDBCQUEwQjsyRkFBMUIsMEJBQTBCLHVKQUgxQixDQUFDLEVBQUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFdBQVcsRUFBRSwwQkFBMEIsRUFBRSxDQUFDOzsyRkFHbEYsMEJBQTBCO2tCQVJ0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLE1BQU0sRUFBRTt3QkFDTixHQUFHLE1BQU07cUJBQ1Y7b0JBQ0QsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsV0FBVyw0QkFBNEIsRUFBRSxDQUFDO29CQUM3RixVQUFVLEVBQUUsSUFBSTtpQkFDakI7O0FBK0JELGdCQUFnQjtBQVNoQixNQUFNLE9BQU8sOEJBQStCLFNBQVEseUJBQXlCO0lBQ25FLGVBQWUsQ0FBa0I7SUFFekMsSUFBYSxNQUFNLENBQUMsR0FBWTtRQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbkMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDckIsQ0FBQztJQUNEO1FBQ0UsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWhELEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUV6QyxDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDO3VHQWpCVSw4QkFBOEI7MkZBQTlCLDhCQUE4Qiw4SkFIOUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxXQUFXLEVBQUUsOEJBQThCLEVBQUUsQ0FBQzs7MkZBR3RGLDhCQUE4QjtrQkFSMUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUNBQW1DO29CQUM3QyxNQUFNLEVBQUU7d0JBQ04sR0FBRyxNQUFNO3FCQUNWO29CQUNELFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFdBQVcsZ0NBQWdDLEVBQUUsQ0FBQztvQkFDakcsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgUHJlZGljYXRlLCBTaW1wbGVDaGFuZ2VzLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRmlsdGVyLCBGaWx0ZXJJbmZvIH0gZnJvbSBcIi4uL2NsYXNzZXMvZmlsdGVyLWluZm9cIjtcclxuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL2VudW1zL2ZpbHRlclR5cGVzXCI7XHJcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZVwiO1xyXG5pbXBvcnQgeyBNYXRSYWRpb0J1dHRvbiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9yYWRpb1wiO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3ggfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3hcIjtcclxuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZlwiO1xyXG5pbXBvcnQgeyBOZ0NvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tIFwiQG5ncngvY29tcG9uZW50LXN0b3JlXCI7XHJcbmltcG9ydCB7IFRhYmxlV3JhcHBlckRpcmVjdGl2ZSB9IGZyb20gXCIuL3RhYmxlLXdyYXBwZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XHJcblxyXG5cclxuY29uc3QgaW5wdXRzID0gW1xyXG4gICdwcmVkaWNhdGU6IHRiQ3VzdG9tRmlsdGVyJyxcclxuICAnZmlsdGVySWQ6IGZpbHRlcklkJyxcclxuXTtcclxuXHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJyAnXHJcbn0pXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZTxUID0gYW55PiB7XHJcbiAgYWJzdHJhY3QgZmlsdGVyJCA6IE9ic2VydmFibGU8Q3VzdG9tRmlsdGVyPjtcclxuICBmaWx0ZXJJZCE6IHN0cmluZztcclxuICBzYXZhYmxlID0gZmFsc2U7XHJcbiAgdXNlZCA9IGZhbHNlO1xyXG4gIGFic3RyYWN0IGFjdGl2ZTogYm9vbGVhbjtcclxuICBhYnN0cmFjdCByZXNldCgpOiB2b2lkO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogXCJbdGJGaWx0ZXJdXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSkgZXhwb3J0IGNsYXNzIFRhYmxlRmlsdGVyRGlyZWN0aXZlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8RmlsdGVySW5mbz4ge1xyXG4gIHByb3RlY3RlZCBtb2RlbCA9IGluamVjdChOZ0NvbnRyb2wsIHsgb3B0aW9uYWw6IHRydWUgfSk7XHJcbiAgcHJpdmF0ZSB3cmFwcGVyID0gaW5qZWN0KFRhYmxlV3JhcHBlckRpcmVjdGl2ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBpZih0aGlzLndyYXBwZXIpIHtcclxuICAgICAgdGhpcy53cmFwcGVyLnJlZ2lzdGVyKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5tb2RlbCkge1xyXG4gICAgICB0aGlzLmVmZmVjdCggKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsIS52YWx1ZUNoYW5nZXMhLnBpcGUoXHJcbiAgICAgICAgICB0YXAoIHZhbCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLmZpbHRlclZhbHVlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBmaWx0ZXIkID0gdGhpcy5zdGF0ZSQ7XHJcblxyXG4gIEBJbnB1dCgpIGZpbHRlclR5cGUhOiBGaWx0ZXJUeXBlO1xyXG4gIEBJbnB1dCgpIGtleSE6IHN0cmluZztcclxuICBASW5wdXQoKSBmaWVsZFR5cGUhOiBGaWVsZFR5cGU7XHJcbiAgQElucHV0KCkgZmlsdGVySWQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYWN0aXZlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBmaWx0ZXJWYWx1ZTogYW55ID0gbnVsbDtcclxuXHJcbiAgc2V0RmlsdGVyVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYodGhpcy5tb2RlbCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGVsIS5yZXNldCh2YWx1ZSk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXNlZCA9IGZhbHNlO1xyXG4gIHNhdmFibGUgPSBmYWxzZTtcclxuICByZWFkeSA9IGZhbHNlO1xyXG5cclxuICBfdXNlckFjdGl2ZSA9IHRydWU7XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYoIXRoaXMuZmlsdGVySWQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJJZCA9IHV1aWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2YWJsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0RmlsdGVyKGZpbHRlcjogRmlsdGVySW5mbyApIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoZmlsdGVyKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLnJlYWR5KSB7XHJcbiAgICAgIHRoaXMuc2V0RmlsdGVyKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpbHRlcklkOiB0aGlzLmZpbHRlcklkLFxyXG4gICAgICAgICAga2V5OiB0aGlzLmtleSxcclxuICAgICAgICAgIGZpbHRlclR5cGU6IHRoaXMuZmlsdGVyVHlwZSxcclxuICAgICAgICAgIGZpZWxkVHlwZTogdGhpcy5maWVsZFR5cGUsXHJcbiAgICAgICAgICBmaWx0ZXJWYWx1ZTogdGhpcy5maWx0ZXJWYWx1ZSxcclxuICAgICAgICAgIGFjdGl2ZTogdGhpcy5hY3RpdmUgJiYgdGhpcy5maWx0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgX2lzRXh0ZXJuYWxseU1hbmFnZWQ6IHRydWUsXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3RiRmlsdGVyU3RyaW5nQ29udGFpbnNdJyxcclxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFRhYmxlRmlsdGVyRGlyZWN0aXZlLCB1c2VFeGlzdGluZzogVGFibGVGaWx0ZXJTdHJpbmdDb250YWluc0RpcmVjdGl2ZSB9XSxcclxuICBpbnB1dHM6IFtcclxuICAgICdrZXk6dGJGaWx0ZXJTdHJpbmdDb250YWlucycsXHJcbiAgICAnZmlsdGVyVmFsdWU6ZmlsdGVyVmFsdWUnLFxyXG4gICAgJ2ZpbHRlcklkOiBmaWx0ZXJJZCcsXHJcbiAgICAnYWN0aXZlOiBhY3RpdmUnLFxyXG4gIF0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSkgZXhwb3J0IGNsYXNzIFRhYmxlRmlsdGVyU3RyaW5nQ29udGFpbnNEaXJlY3RpdmUgZXh0ZW5kcyBUYWJsZUZpbHRlckRpcmVjdGl2ZSB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuU3RyaW5nQ29udGFpbnM7XHJcbiAgICB0aGlzLmZpZWxkVHlwZSA9IEZpZWxkVHlwZS5TdHJpbmc7XHJcbiAgICB0aGlzLmVmZmVjdCggKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5tb2RlbCEudmFsdWVDaGFuZ2VzIS5waXBlKFxyXG4gICAgICAgIHRhcCggdmFsID0+IHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB2YWw7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSByZXNldCgpIHtcclxuICAgIGlmKHRoaXMubW9kZWwpIHtcclxuICAgICAgdGhpcy5tb2RlbC5yZXNldCgpO1xyXG4gICAgfVxyXG4gICAgc3VwZXIucmVzZXQoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNldEZpbHRlcihmaWx0ZXI6IEZpbHRlckluZm8pIHtcclxuICAgIGZpbHRlci5hY3RpdmUgPSBmaWx0ZXIuZmlsdGVyVmFsdWUgJiYgdGhpcy5fdXNlckFjdGl2ZTtcclxuICAgIHN1cGVyLnNldEZpbHRlcihmaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYoY2hhbmdlc1snYWN0aXZlJ10pIHtcclxuICAgICAgdGhpcy5fdXNlckFjdGl2ZSA9IGNoYW5nZXNbJ2FjdGl2ZSddLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6IFwiW3RiQ3VzdG9tRmlsdGVyXVwiLFxyXG59KVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmVCYXNlPFQgPSBhbnk+IGV4dGVuZHMgVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmU8VD4ge1xyXG5cclxuICBmaWx0ZXIkISA6IFN1YmplY3Q8Q3VzdG9tRmlsdGVyPjtcclxuICBmaWx0ZXIhOiBDdXN0b21GaWx0ZXI7XHJcblxyXG4gIF9wcmVkaWNhdGUhOiBQcmVkaWNhdGU8VD47XHJcbiAgQElucHV0KCd0YkN1c3RvbUZpbHRlcicpIHNldCBwcmVkaWNhdGUoIHZhbDogUHJlZGljYXRlPFQ+ICkge1xyXG4gICAgdGhpcy5fcHJlZGljYXRlID0gdmFsO1xyXG4gICAgdGhpcy51cGRhdGUoe3ByZWRpY2F0ZTp2YWx9KTtcclxuICB9XHJcblxyXG4gIF9hY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICByZWFkeSA9IGZhbHNlO1xyXG5cclxuICB1cGRhdGUodmFsOiBQYXJ0aWFsPEN1c3RvbUZpbHRlcj4gKSB7XHJcbiAgICBpZih0aGlzLnJlYWR5KSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyID0gey4uLnRoaXMuZmlsdGVyLC4uLnZhbH07XHJcbiAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KHRoaXMuZmlsdGVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBhY3RpdmUodmFsOiBib29sZWFuKSB7XHJcbiAgICBpZih0aGlzLl9hY3RpdmUgIT09IHZhbCkge1xyXG4gICAgICB0aGlzLl9hY3RpdmUgPSB2YWw7XHJcbiAgICAgIHRoaXMudXBkYXRlKHthY3RpdmU6dmFsfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBhY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZighdGhpcy5maWx0ZXJJZCkge1xyXG4gICAgICB0aGlzLmZpbHRlcklkID0gdXVpZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZhYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlciA9IHtcclxuICAgICAgZmlsdGVyVHlwZTogRmlsdGVyVHlwZS5DdXN0b20sXHJcbiAgICAgIGZpbHRlcklkOiB0aGlzLmZpbHRlcklkLFxyXG4gICAgICBhY3RpdmU6IHRoaXMuX2FjdGl2ZSxcclxuICAgICAgcHJlZGljYXRlOiB0aGlzLl9wcmVkaWNhdGUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZWFkeSA9IHRydWU7XHJcbiAgICB0aGlzLmZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuZmlsdGVyKTtcclxuICB9XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGJTZWxlY3RlZEZpbHRlckRpcmVjdGl2ZTxUID0gYW55PiAgZXh0ZW5kcyBUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZUJhc2U8VD4ge1xyXG5cclxuICBwcm90ZWN0ZWQgd3JhcHBlciA9IGluamVjdChUYWJsZVdyYXBwZXJEaXJlY3RpdmUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XHJcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlOiBPYnNlcnZhYmxlPGFueT4sIHByaXZhdGUgaXNBY3RpdmU6ICgpID0+IGJvb2xlYW4pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBpZih0aGlzLndyYXBwZXIpIHtcclxuICAgICAgdGhpcy53cmFwcGVyLnJlZ2lzdGVyKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveVN1YmplY3QkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3lTdWJqZWN0JC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FjdGl2ZSA9IHRoaXMuaXNBY3RpdmUoKTtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpLnN1YnNjcmliZSggKCkgPT4ge1xyXG4gICAgICB0aGlzLmFjdGl2ZSA9IHRoaXMuaXNBY3RpdmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuLy8gQ2hlY2tib3hcclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdtYXQtY2hlY2tib3hbdGJDdXN0b21GaWx0ZXJdJyxcclxuICBpbnB1dHM6IFtcclxuICAgIC4uLmlucHV0c1xyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwgdXNlRXhpc3Rpbmc6IE1hdENoZWNrYm94VGJGaWx0ZXJEaXJlY3RpdmUgfV0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdENoZWNrYm94VGJGaWx0ZXJEaXJlY3RpdmUgZXh0ZW5kcyBUYlNlbGVjdGVkRmlsdGVyRGlyZWN0aXZlIHtcclxuICBwcml2YXRlIG1hdENoZWNrYm94ID0gaW5qZWN0KE1hdENoZWNrYm94KTtcclxuXHJcblxyXG4gIG92ZXJyaWRlIHNldCBhY3RpdmUodmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm1hdENoZWNrYm94LmNoZWNrZWQgPSB2YWw7XHJcbiAgICBzdXBlci5hY3RpdmUgPSB2YWw7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgY29uc3QgbWF0Q2hlY2tib3ggPSBpbmplY3QoTWF0Q2hlY2tib3gpO1xyXG4gICAgc3VwZXIobWF0Q2hlY2tib3guY2hhbmdlLCAoKSA9PiBtYXRDaGVja2JveC5jaGVja2VkKTtcclxuICAgIHRoaXMubWF0Q2hlY2tib3ggPSBtYXRDaGVja2JveDtcclxuICB9XHJcbn1cclxuXHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ21hdC1zbGlkZS10b2dnbGVbdGJDdXN0b21GaWx0ZXJdJyxcclxuICBpbnB1dHM6IFtcclxuICAgIC4uLmlucHV0c1xyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwgdXNlRXhpc3Rpbmc6IE1hdFNsaWRlVG9nZ2xlVGJGaWx0ZXJEaXJlY3RpdmUgfV0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdFNsaWRlVG9nZ2xlVGJGaWx0ZXJEaXJlY3RpdmU8VCA9IGFueT4gZXh0ZW5kcyBUYlNlbGVjdGVkRmlsdGVyRGlyZWN0aXZlPFQ+IHtcclxuICBwcml2YXRlIG1hdFNsaWRlVG9nZ2xlOiBNYXRTbGlkZVRvZ2dsZTtcclxuXHJcbiAgb3ZlcnJpZGUgc2V0IGFjdGl2ZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMubWF0U2xpZGVUb2dnbGUuY2hlY2tlZCA9IHZhbDtcclxuICAgIHN1cGVyLmFjdGl2ZSA9IHZhbDtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBjb25zdCBtYXRTbGlkZVRvZ2dsZSA9IGluamVjdChNYXRTbGlkZVRvZ2dsZSk7XHJcblxyXG4gICAgc3VwZXIobWF0U2xpZGVUb2dnbGUuY2hhbmdlLCAoKSA9PiBtYXRTbGlkZVRvZ2dsZS5jaGVja2VkKTtcclxuICAgIHRoaXMubWF0U2xpZGVUb2dnbGUgPSBtYXRTbGlkZVRvZ2dsZTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBSYWRpbyBidXR0b25cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdtYXQtcmFkaW8tYnV0dG9uW3RiQ3VzdG9tRmlsdGVyXScsXHJcbiAgaW5wdXRzOiBbJ3ByZWRpY2F0ZTogdGJDdXN0b21GaWx0ZXInXSxcclxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCB1c2VFeGlzdGluZzogTWF0UmFkaW9CdXR0b25UYkZpbHRlckRpcmVjdGl2ZSB9XSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0UmFkaW9CdXR0b25UYkZpbHRlckRpcmVjdGl2ZSBleHRlbmRzIFRiU2VsZWN0ZWRGaWx0ZXJEaXJlY3RpdmUge1xyXG4gIHByaXZhdGUgbWF0UmFkaW9CdXR0b246IE1hdFJhZGlvQnV0dG9uO1xyXG5cclxuXHJcbiAgb3ZlcnJpZGUgc2V0IGFjdGl2ZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMubWF0UmFkaW9CdXR0b24uY2hlY2tlZCA9IHZhbDtcclxuICAgIHN1cGVyLmFjdGl2ZSA9IHZhbDtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBjb25zdCBtYXRSYWRpb0J1dHRvbiA9IGluamVjdChNYXRSYWRpb0J1dHRvbik7XHJcblxyXG4gICAgc3VwZXIobWF0UmFkaW9CdXR0b24uY2hhbmdlLCAoKSA9PiBtYXRSYWRpb0J1dHRvbi5jaGVja2VkKTtcclxuICAgIHRoaXMubWF0UmFkaW9CdXR0b24gPSBtYXRSYWRpb0J1dHRvbjtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIE9wdGlvbiAoc2VsZWN0KVxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ21hdC1vcHRpb25bdGJDdXN0b21GaWx0ZXJdJyxcclxuICBpbnB1dHM6IFtcclxuICAgIC4uLmlucHV0c1xyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwgdXNlRXhpc3Rpbmc6IE1hdE9wdGlvblRiRmlsdGVyRGlyZWN0aXZlIH1dLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRPcHRpb25UYkZpbHRlckRpcmVjdGl2ZSBleHRlbmRzIFRiU2VsZWN0ZWRGaWx0ZXJEaXJlY3RpdmUge1xyXG4gIHByaXZhdGUgbWF0T3B0aW9uOiBNYXRPcHRpb247XHJcblxyXG5cclxuICBvdmVycmlkZSBzZXQgYWN0aXZlKHZhbDogYm9vbGVhbikge1xyXG4gICAgaWYodmFsKSB7XHJcbiAgICAgIHRoaXMubWF0T3B0aW9uLnNlbGVjdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tYXRPcHRpb24uZGVzZWxlY3QoKTtcclxuICAgIH1cclxuICAgIHN1cGVyLmFjdGl2ZSA9IHZhbDtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBjb25zdCBtYXRPcHRpb24gPSBpbmplY3QoTWF0T3B0aW9uKTtcclxuXHJcbiAgICBzdXBlciggbWF0T3B0aW9uLm9uU2VsZWN0aW9uQ2hhbmdlLnBpcGUodGFwKCBkID0+IHtcclxuICAgICAgaWYoIW1hdE9wdGlvbi52YWx1ZSkge1xyXG4gICAgICAgIG1hdE9wdGlvbi52YWx1ZSA9IHV1aWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICkpLCAoKSA9PiBtYXRPcHRpb24uc2VsZWN0ZWQpO1xyXG4gICAgdGhpcy5tYXRPcHRpb24gPSBtYXRPcHRpb247XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBCdXR0b24gdG9nZ2xlXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnbWF0LWJ1dHRvbi10b2dnbGVbdGJDdXN0b21GaWx0ZXJdJyxcclxuICBpbnB1dHM6IFtcclxuICAgIC4uLmlucHV0c1xyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwgdXNlRXhpc3Rpbmc6IE1hdEJ1dHRvblRvZ2dsZUZpbHRlckRpcmVjdGl2ZSB9XSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0QnV0dG9uVG9nZ2xlRmlsdGVyRGlyZWN0aXZlIGV4dGVuZHMgVGJTZWxlY3RlZEZpbHRlckRpcmVjdGl2ZSB7XHJcbiAgcHJpdmF0ZSBtYXRCdXR0b25Ub2dnbGU6IE1hdEJ1dHRvblRvZ2dsZTtcclxuXHJcbiAgb3ZlcnJpZGUgc2V0IGFjdGl2ZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMubWF0QnV0dG9uVG9nZ2xlLmNoZWNrZWQgPSB2YWw7XHJcbiAgICBzdXBlci5hY3RpdmUgPSB2YWw7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgY29uc3QgbWF0QnV0dG9uVG9nZ2xlID0gaW5qZWN0KE1hdEJ1dHRvblRvZ2dsZSk7XHJcblxyXG4gICAgc3VwZXIobWF0QnV0dG9uVG9nZ2xlLmNoYW5nZSwgKCkgPT4gbWF0QnV0dG9uVG9nZ2xlLmNoZWNrZWQpO1xyXG4gICAgdGhpcy5tYXRCdXR0b25Ub2dnbGUgPSBtYXRCdXR0b25Ub2dnbGU7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gIH1cclxufVxyXG4iXX0=