@one-paragon/angular-utilities 1.1.5 → 1.1.7

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 (91) hide show
  1. package/esm2022/action-state/action-state-spinner/action-state-spinner.component.mjs +3 -3
  2. package/esm2022/action-state/action-state-ui/action-state-ui.module.mjs +4 -4
  3. package/esm2022/action-state/ngrx-ext/ngrx-ext.module.mjs +4 -4
  4. package/esm2022/http-request-state/HttpRequestStateFactory.mjs +3 -3
  5. package/esm2022/http-request-state/HttpRequestStateStore.mjs +3 -3
  6. package/esm2022/http-request-state/directives/HttpStateDirectiveBase.mjs +3 -3
  7. package/esm2022/http-request-state/directives/http-error-state-directive.mjs +3 -3
  8. package/esm2022/http-request-state/directives/http-inProgress-state-directive.mjs +3 -3
  9. package/esm2022/http-request-state/directives/http-notStarted-state-directive.mjs +3 -3
  10. package/esm2022/http-request-state/directives/http-success-state-directive.mjs +3 -3
  11. package/esm2022/http-request-state/directives/request-state-directive.mjs +3 -3
  12. package/esm2022/http-request-state/http-state-module.mjs +4 -4
  13. package/esm2022/rxjs/subscriber.directive.mjs +14 -12
  14. package/esm2022/table-builder/classes/TableBuilderDataSource.mjs +19 -28
  15. package/esm2022/table-builder/classes/TableState.mjs +8 -5
  16. package/esm2022/table-builder/classes/table-builder-general-settings.mjs +24 -3
  17. package/esm2022/table-builder/classes/table-builder.mjs +42 -9
  18. package/esm2022/table-builder/classes/table-store.mjs +18 -17
  19. package/esm2022/table-builder/components/array-column.component.mjs +6 -6
  20. package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +3 -3
  21. package/esm2022/table-builder/components/date-filter/date-filter.component.mjs +3 -3
  22. package/esm2022/table-builder/components/date-time-filter/date-time-filter.component.mjs +3 -3
  23. package/esm2022/table-builder/components/filter/filter.component.mjs +3 -3
  24. package/esm2022/table-builder/components/filter/in-list/in-list-filter.component.mjs +3 -3
  25. package/esm2022/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +4 -4
  26. package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +24 -6
  27. package/esm2022/table-builder/components/generic-table/paginator.component.mjs +39 -25
  28. package/esm2022/table-builder/components/group-by-list/group-by-list.component.mjs +3 -3
  29. package/esm2022/table-builder/components/header-menu/header-menu.component.mjs +4 -4
  30. package/esm2022/table-builder/components/in-filter/in-filter.component.mjs +3 -3
  31. package/esm2022/table-builder/components/initialization-component/initialization-component.mjs +3 -3
  32. package/esm2022/table-builder/components/link-column.component.mjs +6 -6
  33. package/esm2022/table-builder/components/number-filter/number-filter.component.mjs +3 -3
  34. package/esm2022/table-builder/components/profiles-menu/profiles-menu.component.mjs +66 -0
  35. package/esm2022/table-builder/components/scroll-strategy.mjs +8 -3
  36. package/esm2022/table-builder/components/sort-menu/sort-menu.component-store.mjs +6 -5
  37. package/esm2022/table-builder/components/sort-menu/sort-menu.component.mjs +4 -4
  38. package/esm2022/table-builder/components/table-container/table-container-imports.mjs +5 -5
  39. package/esm2022/table-builder/components/table-container/table-container.mjs +24 -42
  40. package/esm2022/table-builder/components/table-container/virtual-scroll-container.mjs +68 -52
  41. package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +3 -3
  42. package/esm2022/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +3 -3
  43. package/esm2022/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +3 -3
  44. package/esm2022/table-builder/directives/custom-cell-directive.mjs +3 -3
  45. package/esm2022/table-builder/directives/multi-sort.directive.mjs +3 -3
  46. package/esm2022/table-builder/directives/resize-column.directive.mjs +3 -3
  47. package/esm2022/table-builder/directives/table-wrapper.directive.mjs +3 -3
  48. package/esm2022/table-builder/directives/tb-filter.directive.mjs +30 -30
  49. package/esm2022/table-builder/ngrx/tableBuilderStateStore.mjs +105 -66
  50. package/esm2022/table-builder/pipes/column-total.pipe.mjs +3 -3
  51. package/esm2022/table-builder/pipes/format-filter-type.pipe.mjs +3 -3
  52. package/esm2022/table-builder/pipes/format-filter-value.pipe.mjs +3 -3
  53. package/esm2022/table-builder/pipes/key-display.mjs +3 -3
  54. package/esm2022/table-builder/services/export-to-csv.service.mjs +3 -3
  55. package/esm2022/table-builder/services/table-template-service.mjs +3 -3
  56. package/esm2022/table-builder/services/transform-creator.mjs +3 -3
  57. package/esm2022/table-builder/table-builder.module.mjs +4 -4
  58. package/esm2022/utilities/directives/auto-focus.directive.mjs +3 -3
  59. package/esm2022/utilities/directives/clickEmitterDirective.mjs +3 -3
  60. package/esm2022/utilities/directives/clickSubject.mjs +3 -3
  61. package/esm2022/utilities/directives/conditional-classes.directive.mjs +3 -3
  62. package/esm2022/utilities/directives/dialog-service.mjs +3 -3
  63. package/esm2022/utilities/directives/dialog.mjs +28 -21
  64. package/esm2022/utilities/directives/mat-toggle-group-directive.mjs +3 -3
  65. package/esm2022/utilities/directives/prevent-enter.directive.mjs +3 -3
  66. package/esm2022/utilities/directives/stop-propagation.directive.mjs +3 -3
  67. package/esm2022/utilities/directives/styler.mjs +3 -3
  68. package/esm2022/utilities/directives/trim-whitespace.directive.mjs +3 -3
  69. package/esm2022/utilities/module.mjs +4 -4
  70. package/esm2022/utilities/pipes/function.pipe.mjs +4 -4
  71. package/esm2022/utilities/pipes/phone.pipe.mjs +3 -3
  72. package/esm2022/utilities/pipes/space-case.pipes.mjs +3 -3
  73. package/fesm2022/one-paragon-angular-utilities.mjs +658 -479
  74. package/fesm2022/one-paragon-angular-utilities.mjs.map +1 -1
  75. package/package.json +4 -4
  76. package/rxjs/subscriber.directive.d.ts +1 -0
  77. package/table-builder/classes/TableBuilderDataSource.d.ts +1 -0
  78. package/table-builder/classes/TableState.d.ts +5 -2
  79. package/table-builder/classes/table-builder-general-settings.d.ts +21 -4
  80. package/table-builder/classes/table-builder.d.ts +8 -2
  81. package/table-builder/classes/table-store.d.ts +3 -0
  82. package/table-builder/components/generic-table/generic-table.component.d.ts +2 -0
  83. package/table-builder/components/generic-table/paginator.component.d.ts +5 -1
  84. package/table-builder/components/profiles-menu/profiles-menu.component.d.ts +32 -0
  85. package/table-builder/components/scroll-strategy.d.ts +3 -1
  86. package/table-builder/components/table-container/table-container-imports.d.ts +2 -2
  87. package/table-builder/components/table-container/table-container.d.ts +6 -9
  88. package/table-builder/components/table-container/virtual-scroll-container.d.ts +8 -4
  89. package/table-builder/ngrx/tableBuilderStateStore.d.ts +42 -34
  90. package/utilities/directives/dialog.d.ts +8 -7
  91. package/utilities/pipes/function.pipe.d.ts +1 -1
@@ -5,16 +5,18 @@ import { GeneralTableSettings } from './table-builder-general-settings';
5
5
  import { defaultShareReplay } from '../../rxjs';
6
6
  import { initIndexSymbol } from '../components/table-container/table-container.helpers/sort-state.helpers';
7
7
  import { createDataCleaners } from '../components/table-container/table-container.helpers/data-state.helpers';
8
+ import { isSignal } from '@angular/core';
9
+ import { toObservable } from '@angular/core/rxjs-interop';
8
10
  export class TableBuilder {
9
- constructor(data$, metaData$, settings = new GeneralTableSettings()) {
10
- this.data$ = data$;
11
- this.data$ = this.data$.pipe(defaultShareReplay());
12
- this.metaData$ = metaData$ ?
13
- (isObservable(metaData$) ? metaData$ : of(metaData$)).pipe(defaultShareReplay())
11
+ constructor(data, metaData, settings = new GeneralTableSettings()) {
12
+ this.settings = this.coerceSettingsToObservable(settings)
13
+ .pipe(map(sett => new GeneralTableSettings(sett)), defaultShareReplay());
14
+ this.data$ = this.coerceToObservable(data, this.settings)
15
+ .pipe(defaultShareReplay());
16
+ this.metaData$ = metaData ?
17
+ this.coerceToObservable(metaData, this.settings).pipe(defaultShareReplay())
14
18
  :
15
- data$.pipe(first(), map(data => this.createMetaData(data[0])), defaultShareReplay());
16
- const s = isObservable(settings) ? settings : of(settings);
17
- this.settings = s.pipe(map(sett => new GeneralTableSettings(sett)), defaultShareReplay());
19
+ this.data$.pipe(first(), map(d => this.createMetaData(d[0])), defaultShareReplay());
18
20
  }
19
21
  getData$() {
20
22
  return this.metaData$.pipe(map(md => createDataCleaners(md)), switchMap(cleaner => this.data$.pipe(map((datas, ii) => {
@@ -33,9 +35,40 @@ export class TableBuilder {
33
35
  order: -1
34
36
  }));
35
37
  }
38
+ coerceToObservable(arg, settings) {
39
+ if (isObservable(arg)) {
40
+ return arg;
41
+ }
42
+ else if (isSignal(arg)) {
43
+ return settings.pipe(switchMap(s => {
44
+ this.assertInjector(s);
45
+ return toObservable(arg, { injector: s.injector });
46
+ }));
47
+ }
48
+ else {
49
+ return of(arg);
50
+ }
51
+ }
52
+ coerceSettingsToObservable(settings) {
53
+ if (isObservable(settings)) {
54
+ return settings;
55
+ }
56
+ else if (isSignal(settings)) {
57
+ this.assertInjector(settings());
58
+ return toObservable(settings, { injector: settings().injector });
59
+ }
60
+ else {
61
+ return of(settings);
62
+ }
63
+ }
64
+ assertInjector(s) {
65
+ if (!s.injector) {
66
+ throw new Error('Injector must be provided when passing a signal to table builder');
67
+ }
68
+ }
36
69
  }
37
70
  export const CreateTableBuilder = (reportDef$) => {
38
71
  reportDef$ = reportDef$.pipe(defaultShareReplay());
39
72
  return new TableBuilder(reportDef$.pipe(map(r => r.data)), reportDef$.pipe(map(r => r.metaData)));
40
73
  };
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2NsYXNzZXMvdGFibGUtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQVksU0FBUyxFQUFhLE1BQU0sMEJBQTBCLENBQUM7QUFDMUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUF3QixNQUFNLGtDQUFrQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDM0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFFOUcsTUFBTSxPQUFPLFlBQVk7SUFHdkIsWUFBb0IsS0FBc0IsRUFBRyxTQUE2RCxFQUFFLFdBQW9FLElBQUksb0JBQW9CLEVBQUU7UUFBdEwsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFDeEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUMxQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNqRixDQUFDO2dCQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBRSxFQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUN4RixNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFJRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDakMsU0FBUyxDQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ25DLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUNoQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO2dCQUM3QyxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBRSxDQUNKLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFRO1FBQ3JCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO2FBQzVCLEdBQUcsQ0FBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDWixHQUFHO1lBQ0gsU0FBUyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1lBQzVCLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDVixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsVUFBaUMsRUFBaUIsRUFBRTtJQUNyRixVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDbkQsT0FBTyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBRSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUUsR0FBRyxDQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFFLENBQUMsQ0FBQztBQUMxRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1ldGFEYXRhLCBGaWVsZFR5cGUsIFJlcG9ydERlZiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZic7XHJcbmltcG9ydCB7IGZpcnN0LCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgR2VuZXJhbFRhYmxlU2V0dGluZ3MsIFRhYmxlQnVpbGRlclNldHRpbmdzIH0gZnJvbSAnLi90YWJsZS1idWlsZGVyLWdlbmVyYWwtc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBkZWZhdWx0U2hhcmVSZXBsYXkgfSBmcm9tICcuLi8uLi9yeGpzJztcclxuaW1wb3J0IHsgaW5pdEluZGV4U3ltYm9sIH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmhlbHBlcnMvc29ydC1zdGF0ZS5oZWxwZXJzJztcclxuaW1wb3J0IHsgY3JlYXRlRGF0YUNsZWFuZXJzIH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZGF0YS1zdGF0ZS5oZWxwZXJzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUJ1aWxkZXI8VCA9IGFueT4ge1xyXG5cclxuICBtZXRhRGF0YSQ6IE9ic2VydmFibGU8TWV0YURhdGE8VD5bXT47XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhJDogT2JzZXJ2YWJsZTxUW10+LCAgbWV0YURhdGEkPzogT2JzZXJ2YWJsZTxNZXRhRGF0YTxULGFueT5bXT4gfCBNZXRhRGF0YTxULGFueT5bXSwgc2V0dGluZ3M6IFRhYmxlQnVpbGRlclNldHRpbmdzIHwgT2JzZXJ2YWJsZTxUYWJsZUJ1aWxkZXJTZXR0aW5ncz4gPSBuZXcgR2VuZXJhbFRhYmxlU2V0dGluZ3MoKSApIHtcclxuICAgIHRoaXMuZGF0YSQgPSB0aGlzLmRhdGEkLnBpcGUoZGVmYXVsdFNoYXJlUmVwbGF5KCkpO1xyXG4gICAgdGhpcy5tZXRhRGF0YSQgPSBtZXRhRGF0YSQgP1xyXG4gICAgICAoaXNPYnNlcnZhYmxlKG1ldGFEYXRhJCkgPyBtZXRhRGF0YSQgOiBvZihtZXRhRGF0YSQgKSkucGlwZShkZWZhdWx0U2hhcmVSZXBsYXkoKSkgXHJcbiAgICAgIDpcclxuICAgICAgZGF0YSQucGlwZShmaXJzdCgpLCBtYXAoIGRhdGEgPT4gdGhpcy5jcmVhdGVNZXRhRGF0YShkYXRhWzBdKSApLGRlZmF1bHRTaGFyZVJlcGxheSgpKTtcclxuICAgIGNvbnN0IHMgPSBpc09ic2VydmFibGUoc2V0dGluZ3MpID8gc2V0dGluZ3MgOiBvZihzZXR0aW5ncyk7XHJcbiAgICB0aGlzLnNldHRpbmdzID0gcy5waXBlKG1hcChzZXR0ID0+IG5ldyBHZW5lcmFsVGFibGVTZXR0aW5ncyhzZXR0KSksZGVmYXVsdFNoYXJlUmVwbGF5KCkpO1xyXG4gIH1cclxuICBzZXR0aW5ncyA6IE9ic2VydmFibGU8R2VuZXJhbFRhYmxlU2V0dGluZ3M+O1xyXG5cclxuXHJcbiAgZ2V0RGF0YSQoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWV0YURhdGEkLnBpcGUoXHJcbiAgICAgIG1hcChtZCA9PiBjcmVhdGVEYXRhQ2xlYW5lcnMobWQpKSxcclxuICAgICAgc3dpdGNoTWFwKCBjbGVhbmVyID0+IHRoaXMuZGF0YSQucGlwZShcclxuICAgICAgICBtYXAoKGRhdGFzLCBpaSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGRhdGFzLm1hcCgoZGF0YSwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjbGVhbmVkID0gY2xlYW5lcihkYXRhKTtcclxuICAgICAgICAgICAgY2xlYW5lZFtpbml0SW5kZXhTeW1ib2xdID0gaSAqICgoaWkgJSAyKSArIDEpXHJcbiAgICAgICAgICAgIHJldHVybiBjbGVhbmVkO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9ICksXHJcbiAgICAgICkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTWV0YURhdGEob2JqOiBhbnkpOiBNZXRhRGF0YSBbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqID8/IHt9KVxyXG4gICAgLm1hcCgga2V5ID0+ICh7XHJcbiAgICAgIGtleSxcclxuICAgICAgZmllbGRUeXBlOiBGaWVsZFR5cGUuVW5rbm93bixcclxuICAgICAgb3JkZXI6IC0xXHJcbiAgICB9KSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQ3JlYXRlVGFibGVCdWlsZGVyID0gKHJlcG9ydERlZiQ6IE9ic2VydmFibGU8UmVwb3J0RGVmPiApOiBUYWJsZUJ1aWxkZXIgPT4ge1xyXG4gIHJlcG9ydERlZiQgPSByZXBvcnREZWYkLnBpcGUoZGVmYXVsdFNoYXJlUmVwbGF5KCkpO1xyXG4gIHJldHVybiBuZXcgVGFibGVCdWlsZGVyKHJlcG9ydERlZiQucGlwZShtYXAoIHIgPT4gci5kYXRhKSApLCByZXBvcnREZWYkLnBpcGUoIG1hcCAoIHIgPT4gci5tZXRhRGF0YSkgKSk7XHJcbn07XHJcbiJdfQ==
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2NsYXNzZXMvdGFibGUtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQVksU0FBUyxFQUFhLE1BQU0sMEJBQTBCLENBQUM7QUFDMUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUF3QixNQUFNLGtDQUFrQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDM0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDOUcsT0FBTyxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsTUFBTSxPQUFPLFlBQVk7SUFNdkIsWUFDRSxJQUEyQixFQUMzQixRQUE4QyxFQUM5QyxXQUFtRCxJQUFJLG9CQUFvQixFQUFFO1FBRTdFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQzthQUN0RCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUUzRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxD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LFFBQVEsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLENBQXVCO1FBQ3BDLElBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxDQUFDLENBQUM7UUFDdEYsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsVUFBaUMsRUFBaUIsRUFBRTtJQUNyRixVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDbkQsT0FBTyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBRSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUUsR0FBRyxDQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFFLENBQUMsQ0FBQztBQUMxRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1ldGFEYXRhLCBGaWVsZFR5cGUsIFJlcG9ydERlZiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZic7XHJcbmltcG9ydCB7IGZpcnN0LCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgR2VuZXJhbFRhYmxlU2V0dGluZ3MsIFRhYmxlQnVpbGRlclNldHRpbmdzIH0gZnJvbSAnLi90YWJsZS1idWlsZGVyLWdlbmVyYWwtc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBkZWZhdWx0U2hhcmVSZXBsYXkgfSBmcm9tICcuLi8uLi9yeGpzJztcclxuaW1wb3J0IHsgaW5pdEluZGV4U3ltYm9sIH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmhlbHBlcnMvc29ydC1zdGF0ZS5oZWxwZXJzJztcclxuaW1wb3J0IHsgY3JlYXRlRGF0YUNsZWFuZXJzIH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZGF0YS1zdGF0ZS5oZWxwZXJzJztcclxuaW1wb3J0IHsgaXNTaWduYWwsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGFibGVCdWlsZGVyPFQgPSBhbnk+IHtcclxuXHJcbiAgbWV0YURhdGEkOiBPYnNlcnZhYmxlPE1ldGFEYXRhPFQ+W10+O1xyXG4gIGRhdGEkOiBPYnNlcnZhYmxlPFRbXT47XHJcbiAgc2V0dGluZ3MgOiBPYnNlcnZhYmxlPEdlbmVyYWxUYWJsZVNldHRpbmdzPjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBkYXRhOiBUYWJsZUJ1aWxkZXJBcmdzPFRbXT4sIFxyXG4gICAgbWV0YURhdGE/OiBUYWJsZUJ1aWxkZXJBcmdzPE1ldGFEYXRhPFQsYW55PltdPixcclxuICAgIHNldHRpbmdzOiBUYWJsZUJ1aWxkZXJBcmdzPFRhYmxlQnVpbGRlclNldHRpbmdzPiA9IG5ldyBHZW5lcmFsVGFibGVTZXR0aW5ncygpXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNldHRpbmdzID0gdGhpcy5jb2VyY2VTZXR0aW5nc1RvT2JzZXJ2YWJsZShzZXR0aW5ncylcclxuICAgICAgLnBpcGUobWFwKHNldHQgPT4gbmV3IEdlbmVyYWxUYWJsZVNldHRpbmdzKHNldHQpKSwgZGVmYXVsdFNoYXJlUmVwbGF5KCkpO1xyXG5cclxuICAgIHRoaXMuZGF0YSQgPSB0aGlzLmNvZXJjZVRvT2JzZXJ2YWJsZShkYXRhLCB0aGlzLnNldHRpbmdzKVxyXG4gICAgICAucGlwZShkZWZhdWx0U2hhcmVSZXBsYXkoKSk7XHJcblxyXG4gICAgdGhpcy5tZXRhRGF0YSQgPSBtZXRhRGF0YSA/XHJcbiAgICAgIHRoaXMuY29lcmNlVG9PYnNlcnZhYmxlKG1ldGFEYXRhLCB0aGlzLnNldHRpbmdzKS5waXBlKGRlZmF1bHRTaGFyZVJlcGxheSgpKSBcclxuICAgICAgOlxyXG4gICAgICB0aGlzLmRhdGEkLnBpcGUoZmlyc3QoKSwgbWFwKCBkPT4gdGhpcy5jcmVhdGVNZXRhRGF0YShkWzBdKSApLCBkZWZhdWx0U2hhcmVSZXBsYXkoKSk7XHJcbiAgfVxyXG5cclxuICBnZXREYXRhJCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5tZXRhRGF0YSQucGlwZShcclxuICAgICAgbWFwKG1kID0+IGNyZWF0ZURhdGFDbGVhbmVycyhtZCkpLFxyXG4gICAgICBzd2l0Y2hNYXAoIGNsZWFuZXIgPT4gdGhpcy5kYXRhJC5waXBlKFxyXG4gICAgICAgIG1hcCgoZGF0YXMsIGlpKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZGF0YXMubWFwKChkYXRhLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsZWFuZWQgPSBjbGVhbmVyKGRhdGEpO1xyXG4gICAgICAgICAgICBjbGVhbmVkW2luaXRJbmRleFN5bWJvbF0gPSBpICogKChpaSAlIDIpICsgMSlcclxuICAgICAgICAgICAgcmV0dXJuIGNsZWFuZWQ7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gKSxcclxuICAgICAgKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVNZXRhRGF0YShvYmo6IGFueSk6IE1ldGFEYXRhIFtdIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmogPz8ge30pXHJcbiAgICAubWFwKCBrZXkgPT4gKHtcclxuICAgICAga2V5LFxyXG4gICAgICBmaWVsZFR5cGU6IEZpZWxkVHlwZS5Vbmtub3duLFxyXG4gICAgICBvcmRlcjogLTFcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGNvZXJjZVRvT2JzZXJ2YWJsZTxUPihhcmc6IFRhYmxlQnVpbGRlckFyZ3M8VD4sIHNldHRpbmdzOiBPYnNlcnZhYmxlPFRhYmxlQnVpbGRlclNldHRpbmdzPil7XHJcbiAgICBpZihpc09ic2VydmFibGUoYXJnKSl7XHJcbiAgICAgIHJldHVybiBhcmc7XHJcbiAgICB9IGVsc2UgaWYoaXNTaWduYWwoYXJnKSl7XHJcbiAgICAgIHJldHVybiBzZXR0aW5ncy5waXBlKHN3aXRjaE1hcChzID0+IHtcclxuICAgICAgICB0aGlzLmFzc2VydEluamVjdG9yKHMpO1xyXG4gICAgICAgIHJldHVybiB0b09ic2VydmFibGUoYXJnLCB7IGluamVjdG9yOiBzLmluamVjdG9yIH0pXHJcbiAgICAgIH0pKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKGFyZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb2VyY2VTZXR0aW5nc1RvT2JzZXJ2YWJsZShzZXR0aW5nczogVGFibGVCdWlsZGVyQXJnczxUYWJsZUJ1aWxkZXJTZXR0aW5ncz4pe1xyXG4gICAgaWYoaXNPYnNlcnZhYmxlKHNldHRpbmdzKSl7XHJcbiAgICAgIHJldHVybiBzZXR0aW5ncztcclxuICAgIH0gZWxzZSBpZihpc1NpZ25hbChzZXR0aW5ncykpe1xyXG4gICAgICB0aGlzLmFzc2VydEluamVjdG9yKHNldHRpbmdzKCkpO1xyXG4gICAgICByZXR1cm4gdG9PYnNlcnZhYmxlKHNldHRpbmdzLCB7IGluamVjdG9yOiBzZXR0aW5ncygpLmluamVjdG9yIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKHNldHRpbmdzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzc2VydEluamVjdG9yKHM6IFRhYmxlQnVpbGRlclNldHRpbmdzKXtcclxuICAgIGlmKCFzLmluamVjdG9yKXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmplY3RvciBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gcGFzc2luZyBhIHNpZ25hbCB0byB0YWJsZSBidWlsZGVyJyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQ3JlYXRlVGFibGVCdWlsZGVyID0gKHJlcG9ydERlZiQ6IE9ic2VydmFibGU8UmVwb3J0RGVmPiApOiBUYWJsZUJ1aWxkZXIgPT4ge1xyXG4gIHJlcG9ydERlZiQgPSByZXBvcnREZWYkLnBpcGUoZGVmYXVsdFNoYXJlUmVwbGF5KCkpO1xyXG4gIHJldHVybiBuZXcgVGFibGVCdWlsZGVyKHJlcG9ydERlZiQucGlwZShtYXAoIHIgPT4gci5kYXRhKSApLCByZXBvcnREZWYkLnBpcGUoIG1hcCAoIHIgPT4gci5tZXRhRGF0YSkgKSk7XHJcbn07XHJcblxyXG50eXBlIFRhYmxlQnVpbGRlckFyZ3M8VD4gPSBUIHwgT2JzZXJ2YWJsZTxUPiB8IFNpZ25hbDxUPjsgXHJcbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { FieldType } from '../interfaces/report-def';
2
2
  import { v4 as uuid } from 'uuid';
3
3
  import { defaultTableState, InitializationState, keysToDelete } from './TableState';
4
- import { Injectable, Inject } from '@angular/core';
4
+ import { Injectable, Inject, computed } from '@angular/core';
5
5
  import { TableBuilderConfigToken } from './TableBuilderConfig';
6
6
  import { isCustomFilter, isFilterInfo } from './filter-info';
7
7
  import { ComponentStore } from '@ngrx/component-store';
@@ -19,6 +19,15 @@ export class TableStore extends ComponentStore {
19
19
  constructor(config) {
20
20
  super({ ...defaultTableState, ...config.defaultTableState });
21
21
  this.selectStateReady = this.select(state => state.initializationState).pipe(filter(i => i === InitializationState.Ready));
22
+ this.getSavableStateSignal = computed(() => {
23
+ const state = this.state();
24
+ return this.mapSaveableState(state);
25
+ });
26
+ this.mapSaveableState = (s) => {
27
+ const savableState = { ...s };
28
+ keysToDelete.forEach(key => delete savableState[key]);
29
+ return savableState;
30
+ };
22
31
  this.on = (srcObservable, func) => {
23
32
  this.effect(() => srcObservable.pipe(tap(func)));
24
33
  return this;
@@ -36,11 +45,8 @@ export class TableStore extends ComponentStore {
36
45
  this.getUserDefinedWidths = this.selectSignal(state => state.userDefined.widths);
37
46
  this.displayedColumns$ = this.select(orderedVisibleColumns);
38
47
  this.resetState = this.updater((state) => {
39
- const hiddenKeys = Object.values(state.metaData)
40
- .filter(md => md.fieldType === FieldType.Hidden)
41
- .map(md => md.key);
42
48
  const sorted = this.createPreSort(state.metaData);
43
- return ({ ...state, hiddenKeys, sorted, filters: {}, groupBy: [], userDefined: { widths: {}, order: {}, table: {} } });
49
+ return ({ ...state, hiddenKeys: [], sorted, filters: {}, groupBy: [], userDefined: { widths: {}, order: {}, table: {} } });
44
50
  });
45
51
  this.showColumn = this.updater((state, key) => ({
46
52
  ...state,
@@ -51,11 +57,7 @@ export class TableStore extends ComponentStore {
51
57
  hiddenKeys: [...state.hiddenKeys.filter(k => k !== key), key],
52
58
  }));
53
59
  this.setHiddenColumns = this.updater((state, displayCols) => {
54
- var hiddenKeysSet = new Set([
55
- ...displayCols.filter(col => !col.visible).map(col => col.key),
56
- ...Object.values(state.metaData).filter(md => md.fieldType === FieldType.Hidden).map(md => md.key)
57
- ]);
58
- return ({ ...state, hiddenKeys: [...hiddenKeysSet] });
60
+ return ({ ...state, hiddenKeys: displayCols.filter(d => !d.visible).map(d => d.key) });
59
61
  });
60
62
  this.setUserDefinedWidth = this.updater((state, colWidths) => {
61
63
  const userDefinedWidths = { ...state.userDefined.widths };
@@ -287,12 +289,11 @@ export class TableStore extends ComponentStore {
287
289
  this.getIsExpanded = (columnKey, groupHeaderKey) => {
288
290
  return this.select(state => !!state.groupBy.filter(g => g.key === columnKey && g.expandedHeaders.includes(groupHeaderKey)).length);
289
291
  };
292
+ this.$isVirtual = this.selectSignal(state => state.notPersistedTableSettings.useVirtualScroll === true || state.notPersistedTableSettings.useVirtualScroll?.virtualAsDefault || state.showAll);
290
293
  }
291
294
  getSavableState() {
292
295
  return this.state$.pipe(map(s => {
293
- const savableState = { ...s };
294
- keysToDelete.forEach(key => delete savableState[key]);
295
- return savableState;
296
+ return this.mapSaveableState(s);
296
297
  }));
297
298
  }
298
299
  onLast(callback) {
@@ -316,10 +317,10 @@ export class TableStore extends ComponentStore {
316
317
  onReady(func) {
317
318
  this.runOnceWhen(stateIs(InitializationState.Ready), func);
318
319
  }
319
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TableStore, deps: [{ token: TableBuilderConfigToken }], target: i0.ɵɵFactoryTarget.Injectable }); }
320
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TableStore }); }
320
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TableStore, deps: [{ token: TableBuilderConfigToken }], target: i0.ɵɵFactoryTarget.Injectable }); }
321
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TableStore }); }
321
322
  }
322
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TableStore, decorators: [{
323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: TableStore, decorators: [{
323
324
  type: Injectable
324
325
  }], ctorParameters: () => [{ type: undefined, decorators: [{
325
326
  type: Inject,
@@ -353,4 +354,4 @@ export const orderMetaData = (state) => {
353
354
  :
354
355
  Object.values(state.metaData).sort((a, b) => a.order - b.order);
355
356
  };
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jbGFzc2VzL3RhYmxlLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDeEUsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFzQixtQkFBbUIsRUFBRSxZQUFZLEVBQW1DLE1BQU0sY0FBYyxDQUFDO0FBQ3pJLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBc0IsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRixPQUFPLEVBQTRCLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFHO0FBRXpELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQXdCLHlCQUF5QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDM0gsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFNUMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxtQkFBd0M7SUFDOUQsT0FBTyxDQUFD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QUFJLElBQUksRUFBRSxDQUFDO2dCQUNsQixPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN4RSxDQUFDLENBQUM7UUFDRCxDQUFDO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQU0sR0FBRyxDQUFDLENBQUMsS0FBTSxDQUFDLENBQUE7QUFDbEUsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmllbGRUeXBlLCBNZXRhRGF0YSwgU29ydERlZiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZic7XHJcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWZhdWx0VGFibGVTdGF0ZSwgR3JvdXAsIEdyb3VwZWREYXRhLCBJbml0aWFsaXphdGlvblN0YXRlLCBrZXlzVG9EZWxldGUsIFBlcnNpc3RlZFRhYmxlU3RhdGUsIFRhYmxlU3RhdGUgfSBmcm9tICcuL1RhYmxlU3RhdGUnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIFByZWRpY2F0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXJDb25maWcsIFRhYmxlQnVpbGRlckNvbmZpZ1Rva2VuIH0gZnJvbSAnLi9UYWJsZUJ1aWxkZXJDb25maWcnO1xyXG5pbXBvcnQgeyBDdXN0b21GaWx0ZXIsIEZpbHRlckluZm8sIGlzQ3VzdG9tRmlsdGVyLCBpc0ZpbHRlckluZm8gfSBmcm9tICcuL2ZpbHRlci1pbmZvJztcclxuaW1wb3J0IHsgU29ydCwgU29ydERpcmVjdGlvbiB9ICBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JyA7XHJcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJyAgO1xyXG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9kaWN0aW9uYXJ5JztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbGFzdCwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IG5vdE51bGwsIG9uY2VXaGVuIH0gZnJvbSAnLi4vLi4vcnhqcy9yeGpzLW9wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEdlbmVyYWxUYWJsZVNldHRpbmdzLCBOb3RQZXJzaXN0ZWRUYWJsZVNldHRpbmdzLCBQZXJzaXN0ZWRUYWJsZVNldHRpbmdzIH0gZnJvbSAnLi90YWJsZS1idWlsZGVyLWdlbmVyYWwtc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyByZXBsYWNlSW5BcnJheVdpdGhDbG9uZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9hcnJheS1oZWxwZXJzJztcclxuaW1wb3J0IHsgaXNEaWZmZXJlbnQgfSBmcm9tICcuLi9kaXJlY3RpdmVzJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZUlzKGluaXRpYWxpemF0aW9uU3RhdGU6IEluaXRpYWxpemF0aW9uU3RhdGUpIHtcclxuICByZXR1cm4gKHN0YXRlOiBUYWJsZVN0YXRlKSA9PiBzdGF0ZS5pbml0aWFsaXphdGlvblN0YXRlID09PSBpbml0aWFsaXphdGlvblN0YXRlO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUYWJsZVN0b3JlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8VGFibGVTdGF0ZT4ge1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFRhYmxlQnVpbGRlckNvbmZpZ1Rva2VuKSBjb25maWc6IFRhYmxlQnVpbGRlckNvbmZpZykge1xyXG4gICBzdXBlciggeyAuLi5kZWZhdWx0VGFibGVTdGF0ZSwgLi4uY29uZmlnLmRlZmF1bHRUYWJsZVN0YXRlfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RTdGF0ZVJlYWR5ID0gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuaW5pdGlhbGl6YXRpb25TdGF0ZSkucGlwZShmaWx0ZXIoaSA9PiBpID09PSBJbml0aWFsaXphdGlvblN0YXRlLlJlYWR5KSk7XHJcbiAgZ2V0U2F2YWJsZVN0YXRlKCkgOiBPYnNlcnZhYmxlPFBlcnNpc3RlZFRhYmxlU3RhdGU+IHtcclxuICAgIHJldHVybiAgdGhpcy5zdGF0ZSQucGlwZShcclxuICAgICAgbWFwKCBzID0+IHtcclxuICAgICAgICBjb25zdCBzYXZhYmxlU3RhdGUgPSB7Li4uc30gYXMgUGFydGlhbDxUYWJsZVN0YXRlPjtcclxuICAgICAgICBrZXlzVG9EZWxldGUuZm9yRWFjaChrZXkgPT4gZGVsZXRlIHNhdmFibGVTdGF0ZVtrZXldKTtcclxuICAgICAgICByZXR1cm4gc2F2YWJsZVN0YXRlIGFzIFBlcnNpc3RlZFRhYmxlU3RhdGU7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb24gPSA8Vj4oc3JjT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxWPiwgZnVuYzogKG9iajogVikgPT4gdm9pZCkgPT4ge1xyXG4gICAgdGhpcy5lZmZlY3QoKCkgPT4gc3JjT2JzZXJ2YWJsZS5waXBlKFxyXG4gICAgICB0YXAoZnVuYylcclxuICAgICkpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBvbkxhc3QoY2FsbGJhY2s6IChzdGF0ZTogVGFibGVTdGF0ZSkgPT4gdm9pZCApIHtcclxuICAgIHRoaXMub24odGhpcy5zdGF0ZSQucGlwZShsYXN0KCkpLGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IG1ldGFEYXRhJCA9IHRoaXMuc2VsZWN0KCBzdGF0ZSA9PiBzdGF0ZS5tZXRhRGF0YSk7XHJcblxyXG4gIG1ldGFEYXRhQXJyYXkgPSB0aGlzLnNlbGVjdFNpZ25hbChcclxuICAgIHRoaXMuc3RhdGUsXHJcbiAgICBvcmRlck1ldGFEYXRhXHJcbiAgKVxyXG4gIHJlYWRvbmx5IG1ldGFEYXRhQXJyYXkkID0gdGhpcy5zZWxlY3QoXHJcbiAgICB0aGlzLnN0YXRlJCxcclxuICAgIG9yZGVyTWV0YURhdGFcclxuICApO1xyXG5cclxuICBnZXRNZXRhRGF0YSQgPSAoa2V5OiBzdHJpbmcpIDogT2JzZXJ2YWJsZTxNZXRhRGF0YT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KCBzdGF0ZSA9PiBzdGF0ZS5tZXRhRGF0YVtrZXldICApLnBpcGUoXHJcbiAgICAgIHRhcChtZXRhID0+IHtpZighbWV0YSljb25zb2xlLndhcm4oYE1ldGEgZGF0YSB3aXRoIGtleSAke2tleX0gbm90IGZvdW5kYCl9KSxcclxuICAgICAgbm90TnVsbCgpKVxyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckRlZmluZWRXaWR0aCQgPSAoa2V5OnN0cmluZykgPT4gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUudXNlckRlZmluZWQud2lkdGhzW2tleV0pO1xyXG4gIGdldFVzZXJEZWZpbmVkV2lkdGggPSAoa2V5OnN0cmluZykgPT4gdGhpcy5zZWxlY3RTaWduYWwoc3RhdGUgPT4gc3RhdGUudXNlckRlZmluZWQud2lkdGhzW2tleV0pO1xyXG4gIGdldFVzZXJEZWZpbmVkV2lkdGhzJCA9IHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnVzZXJEZWZpbmVkLndpZHRocyk7XHJcbiAgZ2V0VXNlckRlZmluZWRXaWR0aHMgPSB0aGlzLnNlbGVjdFNpZ25hbChzdGF0ZSA9PiBzdGF0ZS51c2VyRGVmaW5lZC53aWR0aHMpO1xyXG4gIHJlYWRvbmx5IGRpc3BsYXllZENvbHVtbnMkID0gdGhpcy5zZWxlY3Qob3JkZXJlZFZpc2libGVDb2x1bW5zKTtcclxuXHJcblxyXG4gIHJlYWRvbmx5IHJlc2V0U3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiB7XHJcbiAgICBjb25zdCBoaWRkZW5LZXlzID0gT2JqZWN0LnZhbHVlcyhzdGF0ZS5tZXRhRGF0YSlcclxuICAgICAgLmZpbHRlcihtZCA9PiBtZC5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5IaWRkZW4pXHJcbiAgICAgIC5tYXAobWQgPT4gbWQua2V5KTtcclxuICAgIGNvbnN0IHNvcnRlZCA9IHRoaXMuY3JlYXRlUHJlU29ydChzdGF0ZS5tZXRhRGF0YSk7XHJcbiAgICByZXR1cm4gKHsuLi5zdGF0ZSwgaGlkZGVuS2V5cywgc29ydGVkLCBmaWx0ZXJzOiB7fSAsIGdyb3VwQnk6IFtdLCAgdXNlckRlZmluZWQ6IHsgd2lkdGhzOiB7fSwgb3JkZXI6IHt9LCB0YWJsZToge30gfSB9KTtcclxuICB9KTtcclxuXHJcbiAgcmVhZG9ubHkgc2hvd0NvbHVtbiA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGtleTogc3RyaW5nKSA9PiAoe1xyXG4gICAgLi4uc3RhdGUsXHJcbiAgICBoaWRkZW5LZXlzOiBzdGF0ZS5oaWRkZW5LZXlzLmZpbHRlciggayA9PiBrICE9PSBrZXkpLFxyXG4gIH0pKTtcclxuXHJcbiAgcmVhZG9ubHkgaGlkZUNvbHVtbiA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGtleTogc3RyaW5nKSA9PiAoe1xyXG4gICAgLi4uc3RhdGUsXHJcbiAgICBoaWRkZW5LZXlzOiBbLi4uc3RhdGUuaGlkZGVuS2V5cy5maWx0ZXIoIGsgPT4gayAhPT0ga2V5KSwga2V5XSxcclxuICB9KSk7XHJcblxyXG4gIHJlYWRvbmx5IHNldEhpZGRlbkNvbHVtbnMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBkaXNwbGF5Q29sczoge2tleTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFufVtdKSA9PiB7XHJcblxyXG4gICAgdmFyIGhpZGRlbktleXNTZXQ9IG5ldyBTZXQ8c3RyaW5nPihcclxuICAgICAgW1xyXG4gICAgICAgIC4uLmRpc3BsYXlDb2xzLmZpbHRlcihjb2wgPT4gIWNvbC52aXNpYmxlKS5tYXAoY29sID0+IGNvbC5rZXkpLFxyXG4gICAgICAgIC4uLk9iamVjdC52YWx1ZXMoc3RhdGUubWV0YURhdGEpLmZpbHRlcihtZCA9PiBtZC5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5IaWRkZW4pLm1hcChtZCA9PiBtZC5rZXkpXHJcbiAgICAgIF1cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuICh7Li4uc3RhdGUsIGhpZGRlbktleXM6IFsgLi4uaGlkZGVuS2V5c1NldCBdfSlcclxuICB9KTtcclxuXHJcblxyXG4gIHNldFVzZXJEZWZpbmVkV2lkdGggPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLGNvbFdpZHRoczp7a2V5OiBzdHJpbmcsIHdpZHRoSW5QaXhlbDpudW1iZXJ9W10pID0+IHtcclxuICAgIGNvbnN0IHVzZXJEZWZpbmVkV2lkdGhzID0gey4uLnN0YXRlLnVzZXJEZWZpbmVkLndpZHRoc307XHJcbiAgICBjb2xXaWR0aHMuZm9yRWFjaChjdyA9PiB7XHJcbiAgICAgIHVzZXJEZWZpbmVkV2lkdGhzW2N3LmtleV0gPSBjdy53aWR0aEluUGl4ZWw7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7Li4uc3RhdGUsIHVzZXJEZWZpbmVkOiB7Li4uc3RhdGUudXNlckRlZmluZWQsIHdpZHRoczp1c2VyRGVmaW5lZFdpZHRoc319O1xyXG4gIH0pO1xyXG5cclxuICBzZXRVc2VyRGVmaW5lZE9yZGVyID0gdGhpcy51cGRhdGVyKChzdGF0ZSxtb3ZlZDogeyBuZXdPcmRlcjogbnVtYmVyLCBvbGRPcmRlcjogbnVtYmVyIH0pPT57XHJcbiAgICBjb25zdCB7IG5ld09yZGVyLCBvbGRPcmRlciB9ID0gbW92ZWQ7XHJcbiAgICBjb25zdCBtZHNBcnIgPSBvcmRlcmVkVmlzaWJsZU1ldGFEYXRhKHN0YXRlKTtcclxuICAgIG1vdmVJdGVtSW5BcnJheShtZHNBcnIsIG9sZE9yZGVyLCBuZXdPcmRlcik7XHJcblxyXG4gICAgY29uc3QgdXNlckRlZmluZWRPcmRlciA9IG1kc0Fyci5yZWR1Y2UoKGFnZ3JlZ2F0ZTogYW55LGN1cnJlbnQsaW5kZXgpID0+IHtcclxuICAgICAgYWdncmVnYXRlW2N1cnJlbnQua2V5XSA9IGluZGV4O1xyXG4gICAgICByZXR1cm4gYWdncmVnYXRlXHJcbiAgICB9LHt9KTtcclxuICAgIHJldHVybih7IC4uLnN0YXRlLCB1c2VyRGVmaW5lZDogeyAuLi5zdGF0ZS51c2VyRGVmaW5lZCwgb3JkZXI6IHVzZXJEZWZpbmVkT3JkZXIgfSB9KVxyXG4gIH0pXHJcblxyXG5cclxuICByZWFkb25seSBmaWx0ZXJzJCA9IHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLmZpbHRlcnMgKTtcclxuXHJcbiAgcmVhZG9ubHkgZ2V0RmlsdGVyJCA9IChmaWx0ZXJJZDogc3RyaW5nKSA6IE9ic2VydmFibGU8RmlsdGVySW5mbyB8IEN1c3RvbUZpbHRlciB8IHVuZGVmaW5lZD4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KCBzdGF0ZSA9PiBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkXSApO1xyXG4gIH1cclxuICByZWFkb25seSBhZGRGaWx0ZXIgPSB0aGlzLnVwZGF0ZXIoIChzdGF0ZSwgZmlsdGVyOiBGaWx0ZXJJbmZvIHwgQ3VzdG9tRmlsdGVyICkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyc1RvU3RhdGUoc3RhdGUsIFtmaWx0ZXJdKTtcclxuICB9KTtcclxuXHJcbiAgcmVhZG9ubHkgYWRkRmlsdGVycyA9IHRoaXMudXBkYXRlcigoc3RhdGUsZmlsdGVyczooRmlsdGVySW5mbyB8IEN1c3RvbUZpbHRlciApW10pPT57XHJcbiAgICByZXR1cm4gdGhpcy5hZGRGaWx0ZXJzVG9TdGF0ZShzdGF0ZSwgZmlsdGVycyk7XHJcbiAgfSlcclxuXHJcblxyXG4gIHByaXZhdGUgYWRkRmlsdGVyc1RvU3RhdGUgPSAoc3RhdGU6VGFibGVTdGF0ZSwgZmlsdGVyczooRmlsdGVySW5mbyB8IEN1c3RvbUZpbHRlcilbXSkgOiBUYWJsZVN0YXRlID0+IHtcclxuXHJcbiAgICB2YXIgY3VzdG9tRmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKCAgaXNDdXN0b21GaWx0ZXIgKTtcclxuXHJcbiAgICB2YXIgZmlsdGVySW5mb3MgPSBmaWx0ZXJzLmZpbHRlcihpc0ZpbHRlckluZm8pO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlcnNPYmogPSBmaWx0ZXJJbmZvc1xyXG4gICAgICAuZmlsdGVyKGZsdHIgPT4gT2JqZWN0LmtleXMoc3RhdGUubWV0YURhdGEpLnNvbWUoa2V5ID0+IGtleSA9PT0gZmx0ci5rZXkpIHx8IGNvbnNvbGUud2FybihgTWV0YSBkYXRhIHdpdGgga2V5ICR7Zmx0ci5rZXl9IG5vdCBmb3VuZGApKVxyXG4gICAgICAucmVkdWNlKChmaWx0ZXJzT2JqOiB7W2s6IHN0cmluZ106IGFueX0sZmlsdGVyKT0+e1xyXG4gICAgICAgIGlmICghZmlsdGVyLmZpbHRlcklkKSB7XHJcbiAgICAgICAgICBmaWx0ZXIuZmlsdGVySWQgPSB1dWlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbHRlcnNPYmpbZmlsdGVyLmZpbHRlcklkXSA9IGZpbHRlcjtcclxuICAgICAgICByZXR1cm4gZmlsdGVyc09iajtcclxuICAgICAgfSx7fSk7XHJcblxyXG4gICAgY3VzdG9tRmlsdGVycy5mb3JFYWNoKCBmbHRyID0+IHtcclxuICAgICAgaWYoIWZsdHIuZmlsdGVySWQpIHtcclxuICAgICAgICBmbHRyLmZpbHRlcklkID0gdXVpZCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGZpbHRlcnNPYmpbZmx0ci5maWx0ZXJJZF0gPSBmbHRyO1xyXG4gICAgfSlcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnN0YXRlLFxyXG4gICAgICBmaWx0ZXJzIDogey4uLnN0YXRlLmZpbHRlcnMsIC4uLmZpbHRlcnNPYmogfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IHJlbW92ZUZpbHRlciA9IHRoaXMudXBkYXRlciggKHN0YXRlLCBmaWx0ZXJJZDogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBmaWx0ZXJzQ29weSA9IHsgLi4uc3RhdGUuZmlsdGVycyB9O1xyXG4gICAgZGVsZXRlIGZpbHRlcnNDb3B5W2ZpbHRlcklkXTtcclxuICAgIHJldHVybiAoey4uLnN0YXRlLCBmaWx0ZXJzOiBmaWx0ZXJzQ29weSB9KTtcclxuICB9KTtcclxuXHJcbiAgcmVhZG9ubHkgcmVtb3ZlRmlsdGVycyA9IHRoaXMudXBkYXRlciggKHN0YXRlLCBmaWx0ZXJJZHM6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICBjb25zdCBmaWx0ZXJzQ29weSA9IHsgLi4uc3RhdGUuZmlsdGVycyB9O1xyXG4gICAgZmlsdGVySWRzLmZvckVhY2goaWQgPT4geyBkZWxldGUgZmlsdGVyc0NvcHlbaWRdIH0pXHJcbiAgICByZXR1cm4gKHsuLi5zdGF0ZSwgZmlsdGVyczogZmlsdGVyc0NvcHkgfSk7XHJcbiAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IGNsZWFyRmlsdGVycyA9IHRoaXMudXBkYXRlcigoc3RhdGUpPT5cclxuICAgICh7Li4uc3RhdGUsZmlsdGVyczp7fX0pKVxyXG5cclxuXHJcbiAgc2VsZWN0U29ydGVkID0gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc29ydGVkKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKChmLHMpID0+ICFpc0RpZmZlcmVudChmLHMpKSk7XHJcbiAgcmVhZG9ubHkgc29ydCQgPSB0aGlzLnNlbGVjdCh0aGlzLnNlbGVjdFN0YXRlUmVhZHksIHRoaXMuc2VsZWN0U29ydGVkLCAoXyxzKSA9PiBzICk7XHJcbiAgXHJcbiAgY3JlYXRlUHJlU29ydCA9IChtZXRhRGF0YXM6IERpY3Rpb25hcnk8TWV0YURhdGE+KTogU29ydFtdID0+IHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG1ldGFEYXRhcykuZmlsdGVyKCggbWV0YURhdGEgKSA6IG1ldGFEYXRhIGlzIE1ldGFEYXRhICYge3ByZVNvcnQ6IFNvcnREZWZ9ID0+ICEhbWV0YURhdGEucHJlU29ydClcclxuICAgICAgLnNvcnQoKHsgIHByZVNvcnQ6IHBzMSAgfSwgeyBwcmVTb3J0OiBwczIgfSApID0+IChwczEucHJlY2VkZW5jZSB8fCBOdW1iZXIuTUFYX1ZBTFVFKSAtICggcHMyLnByZWNlZGVuY2UgfHwgTnVtYmVyLk1BWF9WQUxVRSkpXHJcbiAgICAgIC5tYXAoKCB7a2V5LCBwcmVTb3J0fSApID0+ICh7IGFjdGl2ZToga2V5LCBkaXJlY3Rpb246IHByZVNvcnQuZGlyZWN0aW9uIH0pKVxyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgc2V0U29ydCA9IHRoaXMudXBkYXRlcjx7a2V5OiBzdHJpbmcsIGRpcmVjdGlvbj86IFNvcnREaXJlY3Rpb259Pigoc3RhdGUsIHtrZXksIGRpcmVjdGlvbn0gKSA9PiB7XHJcbiAgICBjb25zdCBzb3J0QXJyYXkgPSBzdGF0ZS5zb3J0ZWQuZmlsdGVyKCBzID0+IHMuYWN0aXZlICE9PSBrZXkgKTtcclxuICAgIGlmKGRpcmVjdGlvbikge1xyXG4gICAgICBzb3J0QXJyYXkudW5zaGlmdCh7YWN0aXZlOiBrZXksIGRpcmVjdGlvbn0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uc3RhdGUsXHJcbiAgICAgIHNvcnRlZDogc29ydEFycmF5LFxyXG4gICAgfTtcclxuICB9KTtcclxuXHJcbiAgcmVhZG9ubHkgc2V0QWxsU29ydCA9IHRoaXMudXBkYXRlcigoc3RhdGUsc29ydEFycmF5OlNvcnRbXSk9PntcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnN0YXRlLFxyXG4gICAgICBzb3J0ZWQ6IHNvcnRBcnJheSxcclxuICAgIH07XHJcbiAgfSk7XHJcblxyXG4gIHVwZGF0ZVN0YXRlRnVuYyA9IChzdGF0ZTogVGFibGVTdGF0ZSwgaW5jb21pbmdUYWJsZVN0YXRlOiBQYXJ0aWFsPFRhYmxlU3RhdGU+KSA6IFRhYmxlU3RhdGUgPT4ge1xyXG4gICAgY29uc3QgbWV0YURhdGEgPSBzdGF0ZS5tZXRhRGF0YTtcclxuICAgIGNvbnN0IHNvcnRlZCA9IGluY29taW5nVGFibGVTdGF0ZS5zb3J0ZWQ/Lmxlbmd0aCA/IGluY29taW5nVGFibGVTdGF0ZS5zb3J0ZWRcclxuICAgICAgOiBzdGF0ZS5pbml0aWFsaXphdGlvblN0YXRlID09PSBJbml0aWFsaXphdGlvblN0YXRlLkNyZWF0ZWQgPyB0aGlzLmNyZWF0ZVByZVNvcnQobWV0YURhdGEpIDogc3RhdGUuc29ydGVkO1xyXG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgLi4uaW5jb21pbmdUYWJsZVN0YXRlLCBtZXRhRGF0YSAsIHNvcnRlZH07XHJcbiAgfVxyXG5cclxuICByZWFkb25seSBzZXRQYWdlU2l6ZSA9IHRoaXMudXBkYXRlciggKHN0YXRlLCBwYWdlU2l6ZTogbnVtYmVyKT0+ICh7IC4uLnN0YXRlLCBwYWdlU2l6ZSwgdXNlckRlZmluZWQ6IHsgLi4uc3RhdGUudXNlckRlZmluZWQsIHBhZ2VTaXplIH0gfSkpO1xyXG4gIGdldFBhZ2VTaXplID0gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUudXNlckRlZmluZWQucGFnZVNpemUgfHwgc3RhdGUucGFnZVNpemUpO1xyXG4gIHJlYWRvbmx5IHVwZGF0ZVN0YXRlID0gdGhpcy51cGRhdGVyPFBhcnRpYWw8VGFibGVTdGF0ZT4+KHRoaXMudXBkYXRlU3RhdGVGdW5jKTtcclxuXHJcbiAgY2xlYW5QZXJzaXN0ZWRTdGF0ZShzdGF0ZTogVGFibGVTdGF0ZSxwU3RhdGU6IFBlcnNpc3RlZFRhYmxlU3RhdGUpIHtcclxuICAgIGNvbnN0IG1ldGFzID0gT2JqZWN0LnZhbHVlcyhzdGF0ZS5tZXRhRGF0YSk7XHJcbiAgICBjb25zdCBmaWx0ZXJzID0gT2JqZWN0LnZhbHVlcyhwU3RhdGUuZmlsdGVycykuZmlsdGVyKGZsdHIgPT4gaXNDdXN0b21GaWx0ZXIoZmx0cikgfHwgbWV0YXMuc29tZShtID0+IG0ua2V5ID09PSBmbHRyLmtleSkpLnJlZHVjZSgob2JqOiBhbnksIGZpbHRlcikgPT4ge1xyXG4gICAgICBvYmpbZmlsdGVyLmZpbHRlcklkIV0gPSBwU3RhdGUuZmlsdGVyc1tmaWx0ZXIuZmlsdGVySWQhXTtcclxuICAgICAgcmV0dXJuIG9iajtcclxuICAgIH0sIHt9KTtcclxuICAgIGNvbnN0IHNvcnRlZCA9IHBTdGF0ZS5zb3J0ZWQuZmlsdGVyKHMgPT4gbWV0YXMuc29tZShtID0+IG0ua2V5ID09PSBzLmFjdGl2ZSkpO1xyXG4gICAgcmV0dXJuICh7Li4ucFN0YXRlLGZpbHRlcnMsc29ydGVkfSlcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IHVwZGF0ZVN0YXRlRnJvbVBlcnNpc3RlZFN0YXRlID0gdGhpcy51cGRhdGVyKCAoIHN0YXRlOiBUYWJsZVN0YXRlLCBwZXJzaXN0ZWRTdGF0ZTogUGVyc2lzdGVkVGFibGVTdGF0ZSkgOiBUYWJsZVN0YXRlID0+IHtcclxuICAgIGNvbnN0IGluY29taW5nVGFibGVTdGF0ZTogUGFydGlhbDxUYWJsZVN0YXRlPiA9IHRoaXMuY2xlYW5QZXJzaXN0ZWRTdGF0ZShzdGF0ZSxwZXJzaXN0ZWRTdGF0ZSk7XHJcbiAgICBjb25zdCBuZXdTdGF0ZSA9ICB0aGlzLnVwZGF0ZVN0YXRlRnVuYyhzdGF0ZSxpbmNvbWluZ1RhYmxlU3RhdGUpO1xyXG4gICAgbmV3U3RhdGUuaW5pdGlhbGl6YXRpb25TdGF0ZSA9IHN0YXRlLmluaXRpYWxpemF0aW9uU3RhdGUgPT09IEluaXRpYWxpemF0aW9uU3RhdGUuTWV0YURhdGFMb2FkZWQgPyBJbml0aWFsaXphdGlvblN0YXRlLkxvYWRlZEZyb21TdG9yZSA6IHN0YXRlLmluaXRpYWxpemF0aW9uU3RhdGU7XHJcbiAgICByZXR1cm4gbmV3U3RhdGU7XHJcbiAgfSk7XHJcblxyXG4gIGdldFVzZXJEZWZpbmVkVGFibGVTaXplID0gdGhpcy5zZWxlY3RTaWduYWwoc3RhdGUgPT4gc3RhdGUudXNlckRlZmluZWQudGFibGUud2lkdGgpO1xyXG4gIGdldFVzZXJEZWZpbmVkVGFibGVTaXplJCA9IHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnVzZXJEZWZpbmVkLnRhYmxlLndpZHRoKTtcclxuICBzZXRUYWJsZVdpZHRoID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgd2lkdGhJblBpeGVsczpudW1iZXIpID0+ICh7Li4uc3RhdGUsIHVzZXJEZWZpbmVkOiB7IC4uLnN0YXRlLnVzZXJEZWZpbmVkLCB0YWJsZTogeyB3aWR0aDogd2lkdGhJblBpeGVscyB9IH0gfSkpIDtcclxuXHJcbiAgbWVyZ2VNZXRhID0gKG9yaWc6IE1ldGFEYXRhLCBtZXJnZTogTWV0YURhdGEpOiBNZXRhRGF0YSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGtleTogb3JpZy5rZXksXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IG1lcmdlLmRpc3BsYXlOYW1lID8/IG9yaWcuZGlzcGxheU5hbWUsXHJcbiAgICAgICAgZmllbGRUeXBlOiBtZXJnZS5maWVsZFR5cGUgfHwgb3JpZy5maWVsZFR5cGUsXHJcbiAgICAgICAgYWRkaXRpb25hbDogey4uLm9yaWcuYWRkaXRpb25hbCwgLi4ubWVyZ2UuYWRkaXRpb25hbH0sXHJcbiAgICAgICAgb3JkZXI6IG1lcmdlLm9yZGVyID8/IG9yaWcub3JkZXIsXHJcbiAgICAgICAgcHJlU29ydDogbWVyZ2UucHJlU29ydCA/PyBvcmlnLnByZVNvcnQsXHJcbiAgICAgICAgd2lkdGg6IG1lcmdlLndpZHRoID8/IG9yaWcud2lkdGgsXHJcbiAgICAgICAgbm9FeHBvcnQ6IG1lcmdlLm5vRXhwb3J0IHx8IG9yaWcubm9FeHBvcnQsXHJcbiAgICAgICAgbm9GaWx0ZXI6IG1lcmdlLm5vRmlsdGVyIHx8IG9yaWcubm9GaWx0ZXIsXHJcbiAgICAgICAgY3VzdG9tQ2VsbDogbWVyZ2UuY3VzdG9tQ2VsbCA/PyBvcmlnLmN1c3RvbUNlbGwsXHJcbiAgICAgICAgdHJhbnNmb3JtOiBtZXJnZS50cmFuc2Zvcm0gPz8gb3JpZy50cmFuc2Zvcm0sXHJcbiAgICAgICAgbWFwOiBtZXJnZS5tYXAgPz8gb3JpZy5tYXAsXHJcbiAgICAgICAgY2xpY2s6IG1lcmdlLmNsaWNrID8/IG9yaWcuY2xpY2ssXHJcbiAgICAgICAgY2xhc3NlczogbWVyZ2UuY2xhc3NlcyA/PyBvcmlnLmNsYXNzZXMsXHJcbiAgICAgICAgbm9Tb3J0OiBtZXJnZS5ub1NvcnQgPz8gb3JpZy5ub1NvcnQsXHJcbiAgICAgICAgdGVtcGxhdGU6IG1lcmdlLnRlbXBsYXRlID8/IG9yaWcudGVtcGxhdGUsXHJcbiAgICAgICAgdG9vbFRpcDogbWVyZ2UudG9vbFRpcCA/PyBvcmlnLnRvb2xUaXAsXHJcbiAgICAgICAgdXNlSWNvbjogbWVyZ2UudXNlSWNvbiA/PyBvcmlnLnVzZUljb24sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgc2V0SW5pdGlhbGl6YXRpb25TdGF0ZSA9IHRoaXMudXBkYXRlciggKHN0YXRlLCBpbml0aWFsaXphdGlvblN0YXRlOiAgSW5pdGlhbGl6YXRpb25TdGF0ZSkgPT4ge1xyXG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgaW5pdGlhbGl6YXRpb25TdGF0ZX07XHJcbiAgfSk7XHJcblxyXG4gIHJ1bk9uY2VXaGVuKHByZWRpY2F0ZTogUHJlZGljYXRlPFRhYmxlU3RhdGU+LCBmdW5jOiAoc3RhdGU6VGFibGVTdGF0ZSkgPT4gdm9pZCkge1xyXG4gICAgY29uc3Qgb2JzID0gdGhpcy5zdGF0ZSQucGlwZShvbmNlV2hlbihwcmVkaWNhdGUpKTtcclxuICAgIHRoaXMub24ob2JzLCAoc3RhdGUpID0+IHtcclxuICAgICAgZnVuYyhzdGF0ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUmVhZHkoIGZ1bmM6IChzdGF0ZTogVGFibGVTdGF0ZSkgPT4gdm9pZCApIHtcclxuICAgIHRoaXMucnVuT25jZVdoZW4oc3RhdGVJcyhJbml0aWFsaXphdGlvblN0YXRlLlJlYWR5KSxmdW5jKTtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IHNldE1ldGFEYXRhID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbWQ6IE1ldGFEYXRhW10gfCBNZXRhRGF0YSApID0+IHtcclxuICAgIGNvbnN0IG1ldGFEYXRhID0gKCBBcnJheS5pc0FycmF5KG1kKSA/IFsuLi5tZF0gOiBbbWRdIClcclxuICAgICAgLnJlZHVjZSgocHJldjogRGljdGlvbmFyeTxNZXRhRGF0YT4sY3VycikgPT4ge1xyXG4gICAgICAgIGlmKHByZXZbY3Vyci5rZXldKSB7XHJcbiAgICAgICAgICBwcmV2W2N1cnIua2V5XSA9IHRoaXMubWVyZ2VNZXRhKHByZXZbY3Vyci5rZXldLGN1cnIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwcmV2W2N1cnIua2V5XSA9IGN1cnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcmV2O1xyXG4gICAgICB9ICx7fSk7XHJcbiAgICBsZXQgc29ydGVkID0gc3RhdGUuc29ydGVkO1xyXG4gICAgaWYoc29ydGVkLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBzb3J0ZWQgPSB0aGlzLmNyZWF0ZVByZVNvcnQobWV0YURhdGEpO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb3JkZXIgPSB0aGlzLmluaXRpYWxpemVPcmRlcihzdGF0ZSwgbWV0YURhdGEpO1xyXG4gICAgY29uc3QgaW5pdGlhbGl6YXRpb25TdGF0ZSA9IHN0YXRlLmluaXRpYWxpemF0aW9uU3RhdGUgPT0gSW5pdGlhbGl6YXRpb25TdGF0ZS5DcmVhdGVkID8gIEluaXRpYWxpemF0aW9uU3RhdGUuTWV0YURhdGFMb2FkZWQgOiBzdGF0ZS5pbml0aWFsaXphdGlvblN0YXRlO1xyXG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsIGluaXRpYWxpemF0aW9uU3RhdGUsIG1ldGFEYXRhLCBzb3J0ZWQsIHVzZXJEZWZpbmVkOiB7IC4uLnN0YXRlLnVzZXJEZWZpbmVkLCBvcmRlcjogb3JkZXJ9IH07XHJcbiAgfSk7XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU9yZGVyID0gKHN0YXRlOlRhYmxlU3RhdGUsbWRzOiBEaWN0aW9uYXJ5PE1ldGFEYXRhPikgOiBEaWN0aW9uYXJ5PG51bWJlcj4gPT4ge1xyXG4gICAgY29uc3Qgdmlld2FibGVNZXRhRGF0YUFyciA9IE9iamVjdC52YWx1ZXMobWRzKS5maWx0ZXIoYSA9PiBhLmZpZWxkVHlwZSAhPT0gRmllbGRUeXBlLkhpZGRlbik7XHJcbiAgICBsZXQgdXNlckRlZmluZWRPcmRlciA9IHN0YXRlLnVzZXJEZWZpbmVkLm9yZGVyO1xyXG4gICAgaWYodmlld2FibGVNZXRhRGF0YUFyci5zb21lKG1ldGEgPT4gdXNlckRlZmluZWRPcmRlclttZXRhLmtleV0gPT0gbnVsbCkpe1xyXG4gICAgICByZXR1cm4ge31cclxuICAgIH1cclxuICAgIHJldHVybiB1c2VyRGVmaW5lZE9yZGVyO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ29sbGFwc2VIZWFkZXIgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKT0+e1xyXG4gICAgY29uc3QgdGFibGVTZXR0aW5ncyA9IHsuLi5zdGF0ZS5wZXJzaXN0ZWRUYWJsZVNldHRpbmdzfTtcclxuICAgIHRhYmxlU2V0dGluZ3MuY29sbGFwc2VIZWFkZXIgPSAhdGFibGVTZXR0aW5ncy5jb2xsYXBzZUhlYWRlcjtcclxuICAgIHJldHVybiAoey4uLnN0YXRlLHBlcnNpc3RlZFRhYmxlU2V0dGluZ3MgOiBuZXcgUGVyc2lzdGVkVGFibGVTZXR0aW5ncyh0YWJsZVNldHRpbmdzKX0pO1xyXG4gIH0pXHJcblxyXG4gIHRvZ2dsZUNvbGxhcHNlRm9vdGVyID0gdGhpcy51cGRhdGVyKChzdGF0ZSk9PntcclxuICAgIGNvbnN0IHRhYmxlU2V0dGluZ3MgPSB7Li4uc3RhdGUucGVyc2lzdGVkVGFibGVTZXR0aW5nc307XHJcbiAgICB0YWJsZVNldHRpbmdzLmNvbGxhcHNlRm9vdGVyID0gIXRhYmxlU2V0dGluZ3MuY29sbGFwc2VGb290ZXI7XHJcbiAgICByZXR1cm4gKHsuLi5zdGF0ZSxwZXJzaXN0ZWRUYWJsZVNldHRpbmdzIDogbmV3IFBlcnNpc3RlZFRhYmxlU2V0dGluZ3ModGFibGVTZXR0aW5ncyl9KTtcclxuICB9KVxyXG5cclxuICBhZGRHcm91cEJ5S2V5ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbWV0YURhdGFLZXk6IHN0cmluZykgPT4gKHtcclxuICAgIC4uLnN0YXRlLFxyXG4gICAgZ3JvdXBCeTogWy4uLnN0YXRlLmdyb3VwQnksIHsga2V5OiBtZXRhRGF0YUtleSwgZXhwYW5kZWRIZWFkZXJzOiBbXSB9XVxyXG4gIH0pKTtcclxuXHJcbiAgcmVtb3ZlR3JvdXBCeUtleSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGdyb3VwQnlLZXk6IHN0cmluZykgPT4gKHtcclxuICAgIC4uLnN0YXRlLFxyXG4gICAgZ3JvdXBCeTogc3RhdGUuZ3JvdXBCeS5maWx0ZXIoa2V5ID0+IGdyb3VwQnlLZXkgIT09IGtleS5rZXkpXHJcbiAgfSkpO1xyXG5cclxuICB1cGRhdGVFeHBhbmRlZEdyb3VwcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGRhdGE6IHtrZXk6IHN0cmluZywgZ3JvdXBLZXk6IHN0cmluZywgaXNFeHBhbmRlZDogYm9vbGVhbn0pID0+IHtcclxuICAgIGNvbnN0IGdiayA9IHJlcGxhY2VJbkFycmF5V2l0aENsb25lKHN0YXRlLmdyb3VwQnksIGsgPT4gay5rZXkgPT09IGRhdGEua2V5LCBnayA9PiB7XHJcbiAgICAgIGdrLmV4cGFuZGVkSGVhZGVycyA9IGRhdGEuaXNFeHBhbmRlZCA/IFsuLi5nay5leHBhbmRlZEhlYWRlcnMsIGRhdGEuZ3JvdXBLZXldIDogZ2suZXhwYW5kZWRIZWFkZXJzLmZpbHRlcihnID0+IGcgIT09IGRhdGEuZ3JvdXBLZXkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gKHtcclxuICAgICAgLi4uc3RhdGUsXHJcbiAgICAgIGdyb3VwQnk6IGdia1xyXG4gICAgfSl9XHJcbiAgKTtcclxuXHJcbiAgZXhwYW5kQWxsT2ZHcm91cCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGRhdGE6IHsgZ3JvdXBIZWFkZXJzQnlLZXk6IERpY3Rpb25hcnk8eyBncm91cE5hbWU6IHN0cmluZyB9W10+IH0pID0+IHtcclxuICAgIGNvbnN0IG5ld0dyb3VwZWREYXRhID0gc3RhdGUuZ3JvdXBCeS5tYXAoZ2IgPT4gKHtcclxuICAgICAga2V5OiBnYi5rZXksXHJcbiAgICAgIGV4cGFuZGVkSGVhZGVyczogZGF0YS5ncm91cEhlYWRlcnNCeUtleVtnYi5rZXldPy5tYXAoZyA9PiBnLmdyb3VwTmFtZSkgPz8gZ2IuZXhwYW5kZWRIZWFkZXJzXHJcbiAgICB9IGFzIEdyb3VwZWREYXRhKSk7XHJcbiAgICByZXR1cm4gKHsgLi4uc3RhdGUsIGdyb3VwQnk6IG5ld0dyb3VwZWREYXRhIH0pO1xyXG4gIH0pO1xyXG5cclxuICBjb2xsYXBzZUFsbCA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+ICh7XHJcbiAgICAuLi5zdGF0ZSxcclxuICAgIGdyb3VwQnk6IHN0YXRlLmdyb3VwQnkubWFwKGdiID0+ICh7IGtleTogZ2Iua2V5LCBleHBhbmRlZEhlYWRlcnM6IFtdIH0pKVxyXG4gIH0pKTtcclxuXHJcbiAgY29sbGFwc2VBbGxPZktleSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGRhdGE6IHsga2V5czogc3RyaW5nW10gfSkgPT4gKHtcclxuICAgIC4uLnN0YXRlLFxyXG4gICAgZ3JvdXBCeTogc3RhdGUuZ3JvdXBCeS5tYXAoZ2IgPT4gKHtcclxuICAgICAga2V5OiBnYi5rZXksXHJcbiAgICAgIGV4cGFuZGVkSGVhZGVyczogZGF0YS5rZXlzLmluY2x1ZGVzKGdiLmtleSkgPyBbXSA6IGdiLmV4cGFuZGVkSGVhZGVyc1xyXG4gICAgfSkpXHJcbiAgfSkpO1xyXG5cclxuICBncm91cEJ5S2V5cyQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5ncm91cEJ5Lm1hcChnYmsgPT4gZ2JrLmtleSkpXHJcbiAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZDxzdHJpbmdbXT4oKHByZXYsIGN1cnIpID0+IHByZXYubGVuZ3RoID09PSBjdXJyLmxlbmd0aCAmJiBjdXJyLmV2ZXJ5KChrLGkpID0+IHByZXZbaV0gPT09IGspKSk7XHJcblxyXG4gIGV4cGFuZGVkR3JvdXBzJCA9IHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLmdyb3VwQnkpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IHtcclxuICAgIGNvbnN0IGFhID0gYS5mbGF0TWFwKGcgPT4gZy5leHBhbmRlZEhlYWRlcnMpO1xyXG4gICAgY29uc3QgYmIgPSBiLmZsYXRNYXAoZyA9PiBnLmV4cGFuZGVkSGVhZGVycyk7XHJcbiAgICByZXR1cm4gYWEubGVuZ3RoID09PSBiYi5sZW5ndGggJiYgYWEuZXZlcnkoKGspID0+IGJiLmluY2x1ZGVzKGspKTtcclxuICB9KSk7XHJcbiAgXHJcbiAgc2V0VGFibGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlcigoc3RhdGUsc2V0dGluZ3M6R2VuZXJhbFRhYmxlU2V0dGluZ3MpPT57XHJcbiAgICBjb25zdCBzOlRhYmxlU3RhdGUgPSB7XHJcbiAgICAgIC4uLnN0YXRlLFxyXG4gICAgICBwZXJzaXN0ZWRUYWJsZVNldHRpbmdzIDogbmV3IFBlcnNpc3RlZFRhYmxlU2V0dGluZ3Moc2V0dGluZ3MpLFxyXG4gICAgICBub3RQZXJzaXN0ZWRUYWJsZVNldHRpbmdzIDogbmV3IE5vdFBlcnNpc3RlZFRhYmxlU2V0dGluZ3Moc2V0dGluZ3MpXHJcbiAgICAgIH07XHJcbiAgICByZXR1cm4gcztcclxuICB9KTtcclxuXHJcbiAgdGFibGVTZXR0aW5ncyA9IHRoaXMuc2VsZWN0U2lnbmFsKHN0YXRlID0+IHtcclxuICAgIGNvbnN0IHRzIDogUGVyc2lzdGVkVGFibGVTZXR0aW5ncyAmIE5vdFBlcnNpc3RlZFRhYmxlU2V0dGluZ3MgPVxyXG4gICAgICB7Li4uc3RhdGUucGVyc2lzdGVkVGFibGVTZXR0aW5ncywgLi4uc3RhdGUubm90UGVyc2lzdGVkVGFibGVTZXR0aW5nc307XHJcbiAgICByZXR1cm4gdHM7XHJcbiAgfSk7XHJcblxyXG4gIHRhYmxlU2V0dGluZ3MkID0gdGhpcy5zZWxlY3Qoc3RhdGUgPT4ge1xyXG4gICAgY29uc3QgdHMgOiBQZXJzaXN0ZWRUYWJsZVNldHRpbmdzICYgTm90UGVyc2lzdGVkVGFibGVTZXR0aW5ncyA9XHJcbiAgICAgIHsuLi5zdGF0ZS5wZXJzaXN0ZWRUYWJsZVNldHRpbmdzLC4uLnN0YXRlLm5vdFBlcnNpc3RlZFRhYmxlU2V0dGluZ3N9O1xyXG4gICAgcmV0dXJuIHRzO1xyXG4gIH0pXHJcblxyXG4gIHByb3BzID0gdGhpcy5zZWxlY3RTaWduYWwocyA9PiBzLnByb3BzKTtcclxuXHJcbiAgc2V0TGlua01hcHMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLG1hcHM6IGFueSk9PntcclxuICAgIHJldHVybiB7Li4uc3RhdGUsbGlua01hcHM6bWFwc307XHJcbiAgfSk7XHJcblxyXG4gIGdldExpbmtJbmZvID0gKG1kOk1ldGFEYXRhKSA9PiB0aGlzLnNlbGVjdFNpZ25hbChzdGF0ZSA9PiBzdGF0ZS5saW5rTWFwc1ttZC5rZXldKTtcclxuXHJcbiAgZ2V0SXNFeHBhbmRlZCA9IChjb2x1bW5LZXk6IHN0cmluZywgZ3JvdXBIZWFkZXJLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KHN0YXRlID0+ICEhc3RhdGUuZ3JvdXBCeS5maWx0ZXIoZyA9PiBnLmtleSA9PT0gY29sdW1uS2V5ICYmIGcuZXhwYW5kZWRIZWFkZXJzLmluY2x1ZGVzKGdyb3VwSGVhZGVyS2V5KSkubGVuZ3RoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBvcmRlcmVkVmlzaWJsZUNvbHVtbnMgPSAoc3RhdGU6IFRhYmxlU3RhdGUpID0+IG9yZGVyZWRWaXNpYmxlTWV0YURhdGEoc3RhdGUpLm1hcChtZCA9PiBtZC5rZXkpO1xyXG5cclxuZXhwb3J0IGNvbnN0IG9yZGVyZWRWaXNpYmxlTWV0YURhdGEgPSAoc3RhdGU6IFRhYmxlU3RhdGUpID0+IHtcclxuICBjb25zdCBvcmRlcmVkID0gb3JkZXJNZXRhRGF0YShzdGF0ZSk7XHJcbiAgY29uc3Qgb3JkZXJlZFZpc2libGUgPSBvcmRlcmVkXHJcbiAgICAuZmlsdGVyKG1ldGFEYXRhID0+ICFzdGF0ZS5oaWRkZW5LZXlzLmluY2x1ZGVzKG1ldGFEYXRhLmtleSkgJiYgc3RhdGUubWV0YURhdGFbbWV0YURhdGEua2V5XS5maWVsZFR5cGUgIT09IEZpZWxkVHlwZS5IaWRkZW4pO1xyXG4gIHJldHVybiBvcmRlcmVkVmlzaWJsZTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IG9yZGVyZWRDb2RlVmlzaWJsZU1ldGFEYXRhID0gKHN0YXRlOiBUYWJsZVN0YXRlKSA9PlxyXG4gIG9yZGVyTWV0YURhdGEoc3RhdGUpLmZpbHRlcihtZCA9PiBtZC5maWVsZFR5cGUgIT09IEZpZWxkVHlwZS5IaWRkZW4pO1xyXG5cclxuZXhwb3J0IGNvbnN0IG9yZGVyTWV0YURhdGEgPSAoc3RhdGU6VGFibGVTdGF0ZSkgPT4ge1xyXG4gIGNvbnN0IHVzZXJPcmRlckFyciA9IE9iamVjdC5lbnRyaWVzKHN0YXRlLnVzZXJEZWZpbmVkLm9yZGVyKTtcclxuICByZXR1cm4gdXNlck9yZGVyQXJyLmxlbmd0aCA/XHJcbiAgIE9iamVjdC52YWx1ZXMoc3RhdGUubWV0YURhdGEpLnNvcnQoKGEsYik9PiB7XHJcbiAgICBjb25zdCBvcmRlckEgPSBzdGF0ZS51c2VyRGVmaW5lZC5vcmRlclthLmtleV07XHJcbiAgICBjb25zdCBvcmRlckIgPSBzdGF0ZS51c2VyRGVmaW5lZC5vcmRlcltiLmtleV07XHJcbiAgICBpZihvcmRlckEgPT0gbnVsbCAmJiBvcmRlckIgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGlmKG9yZGVyQSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgaWYob3JkZXJCID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0YXRlLnVzZXJEZWZpbmVkLm9yZGVyW2Eua2V5XSAtIHN0YXRlLnVzZXJEZWZpbmVkLm9yZGVyW2Iua2V5XVxyXG4gIH0pXHJcbiAgIDpcclxuICAgT2JqZWN0LnZhbHVlcyhzdGF0ZS5tZXRhRGF0YSkuc29ydCgoYSxiKT0+IGEub3JkZXIhIC0gYi5vcmRlciEpXHJcbn0iXX0=
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jbGFzc2VzL3RhYmxlLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDeEUsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFlLG1CQUFtQixFQUFFLFlBQVksRUFBbUMsTUFBTSxjQUFjLENBQUM7QUFDbEksT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBc0IsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRixPQUFPLEVBQTRCLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFHO0FBRXpELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQXdCLHlCQUF5QixFQUFFLHNCQUFzQixFQUF3QixNQUFNLGtDQUFrQyxDQUFDO0FBQ2pKLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTVDLE1BQU0sVUFBVSxPQUFPLENBQUMsbUJBQXdDO0lBQzlE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Z0JBQ2xCLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hFLENBQUMsQ0FBQztRQUNELENBQUM7WUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBTSxHQUFHLENBQUMsQ0FBQyxLQUFNLENBQUMsQ0FBQTtBQUNsRSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWVsZFR5cGUsIE1ldGFEYXRhLCBTb3J0RGVmIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZGVmJztcclxuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlZmF1bHRUYWJsZVN0YXRlLCBHcm91cGVkRGF0YSwgSW5pdGlhbGl6YXRpb25TdGF0ZSwga2V5c1RvRGVsZXRlLCBQZXJzaXN0ZWRUYWJsZVN0YXRlLCBUYWJsZVN0YXRlIH0gZnJvbSAnLi9UYWJsZVN0YXRlJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBQcmVkaWNhdGUsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRhYmxlQnVpbGRlckNvbmZpZywgVGFibGVCdWlsZGVyQ29uZmlnVG9rZW4gfSBmcm9tICcuL1RhYmxlQnVpbGRlckNvbmZpZyc7XHJcbmltcG9ydCB7IEN1c3RvbUZpbHRlciwgRmlsdGVySW5mbywgaXNDdXN0b21GaWx0ZXIsIGlzRmlsdGVySW5mbyB9IGZyb20gJy4vZmlsdGVyLWluZm8nO1xyXG5pbXBvcnQgeyBTb3J0LCBTb3J0RGlyZWN0aW9uIH0gIGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnIDtcclxuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnICA7XHJcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RpY3Rpb25hcnknO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBsYXN0LCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgbm90TnVsbCwgb25jZVdoZW4gfSBmcm9tICcuLi8uLi9yeGpzL3J4anMtb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgR2VuZXJhbFRhYmxlU2V0dGluZ3MsIE5vdFBlcnNpc3RlZFRhYmxlU2V0dGluZ3MsIFBlcnNpc3RlZFRhYmxlU2V0dGluZ3MsIFZpcnR1YWxTY3JvbGxPcHRpb25zIH0gZnJvbSAnLi90YWJsZS1idWlsZGVyLWdlbmVyYWwtc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyByZXBsYWNlSW5BcnJheVdpdGhDbG9uZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9hcnJheS1oZWxwZXJzJztcclxuaW1wb3J0IHsgaXNEaWZmZXJlbnQgfSBmcm9tICcuLi9kaXJlY3RpdmVzJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZUlzKGluaXRpYWxpemF0aW9uU3RhdGU6IEluaXRpYWxpemF0aW9uU3RhdGUpIHtcclxuICByZXR1cm4gKHN0YXRlOiBUYWJsZVN0YXRlKSA9PiBzdGF0ZS5pbml0aWFsaXphdGlvblN0YXRlID09PSBpbml0aWFsaXphdGlvblN0YXRlO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUYWJsZVN0b3JlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8VGFibGVTdGF0ZT4ge1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFRhYmxlQnVpbGRlckNvbmZpZ1Rva2VuKSBjb25maWc6IFRhYmxlQnVpbGRlckNvbmZpZykge1xyXG4gICBzdXBlciggeyAuLi5kZWZhdWx0VGFibGVTdGF0ZSwgLi4uY29uZmlnLmRlZmF1bHRUYWJsZVN0YXRlfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RTdGF0ZVJlYWR5ID0gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuaW5pdGlhbGl6YXRpb25TdGF0ZSkucGlwZShmaWx0ZXIoaSA9PiBpID09PSBJbml0aWFsaXphdGlvblN0YXRlLlJlYWR5KSk7XHJcbiAgZ2V0U2F2YWJsZVN0YXRlKCkgOiBPYnNlcnZhYmxlPFBlcnNpc3RlZFRhYmxlU3RhdGU+IHtcclxuICAgIHJldHVybiAgdGhpcy5zdGF0ZSQucGlwZShcclxuICAgICAgbWFwKCBzID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXBTYXZlYWJsZVN0YXRlKHMpO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRTYXZhYmxlU3RhdGVTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGUoKTtcclxuICAgIHJldHVybiB0aGlzLm1hcFNhdmVhYmxlU3RhdGUoc3RhdGUpO1xyXG4gIH0pXHJcbiAgcHJpdmF0ZSBtYXBTYXZlYWJsZVN0YXRlID0gKHM6IFBlcnNpc3RlZFRhYmxlU3RhdGUpID0+IHtcclxuICAgIGNvbnN0IHNhdmFibGVTdGF0ZSA9IHsuLi5zfSBhcyBQYXJ0aWFsPFRhYmxlU3RhdGU+O1xyXG4gICAga2V5c1RvRGVsZXRlLmZvckVhY2goa2V5ID0+IGRlbGV0ZSBzYXZhYmxlU3RhdGVba2V5XSk7XHJcbiAgICByZXR1cm4gc2F2YWJsZVN0YXRlIGFzIFBlcnNpc3RlZFRhYmxlU3RhdGU7XHJcbiAgfVxyXG5cclxuICBvbiA9IDxWPihzcmNPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFY+LCBmdW5jOiAob2JqOiBWKSA9PiB2b2lkKSA9PiB7XHJcbiAgICB0aGlzLmVmZmVjdCgoKSA9PiBzcmNPYnNlcnZhYmxlLnBpcGUoXHJcbiAgICAgIHRhcChmdW5jKVxyXG4gICAgKSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIG9uTGFzdChjYWxsYmFjazogKHN0YXRlOiBUYWJsZVN0YXRlKSA9PiB2b2lkICkge1xyXG4gICAgdGhpcy5vbih0aGlzLnN0YXRlJC5waXBlKGxhc3QoKSksY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgbWV0YURhdGEkID0gdGhpcy5zZWxlY3QoIHN0YXRlID0+IHN0YXRlLm1ldGFEYXRhKTtcclxuXHJcbiAgbWV0YURhdGFBcnJheSA9IHRoaXMuc2VsZWN0U2lnbmFsKFxyXG4gICAgdGhpcy5zdGF0ZSxcclxuICAgIG9yZGVyTWV0YURhdGFcclxuICApXHJcbiAgcmVhZG9ubHkgbWV0YURhdGFBcnJheSQgPSB0aGlzLnNlbGVjdChcclxuICAgIHRoaXMuc3RhdGUkLFxyXG4gICAgb3JkZXJNZXRhRGF0YVxyXG4gICk7XHJcblxyXG4gIGdldE1ldGFEYXRhJCA9IChrZXk6IHN0cmluZykgOiBPYnNlcnZhYmxlPE1ldGFEYXRhPiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoIHN0YXRlID0+IHN0YXRlLm1ldGFEYXRhW2tleV0gICkucGlwZShcclxuICAgICAgdGFwKG1ldGEgPT4ge2lmKCFtZXRhKWNvbnNvbGUud2FybihgTWV0YSBkYXRhIHdpdGgga2V5ICR7a2V5fSBub3QgZm91bmRgKX0pLFxyXG4gICAgICBub3ROdWxsKCkpXHJcbiAgfVxyXG5cclxuICBnZXRVc2VyRGVmaW5lZFdpZHRoJCA9IChrZXk6c3RyaW5nKSA9PiB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS51c2VyRGVmaW5lZC53aWR0aHNba2V5XSk7XHJcbiAgZ2V0VXNlckRlZmluZWRXaWR0aCA9IChrZXk6c3RyaW5nKSA9PiB0aGlzLnNlbGVjdFNpZ25hbChzdGF0ZSA9PiBzdGF0ZS51c2VyRGVmaW5lZC53aWR0aHNba2V5XSk7XHJcbiAgZ2V0VXNlckRlZmluZWRXaWR0aHMkID0gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUudXNlckRlZmluZWQud2lkdGhzKTtcclxuICBnZXRVc2VyRGVmaW5lZFdpZHRocyA9IHRoaXMuc2VsZWN0U2lnbmFsKHN0YXRlID0+IHN0YXRlLnVzZXJEZWZpbmVkLndpZHRocyk7XHJcbiAgcmVhZG9ubHkgZGlzcGxheWVkQ29sdW1ucyQgPSB0aGlzLnNlbGVjdChvcmRlcmVkVmlzaWJsZUNvbHVtbnMpO1xyXG5cclxuXHJcbiAgcmVhZG9ubHkgcmVzZXRTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+IHtcclxuICAgIGNvbnN0IHNvcnRlZCA9IHRoaXMuY3JlYXRlUHJlU29ydChzdGF0ZS5tZXRhRGF0YSk7XHJcbiAgICByZXR1cm4gKHsuLi5zdGF0ZSwgaGlkZGVuS2V5czogW10sIHNvcnRlZCwgZmlsdGVyczoge30gLCBncm91cEJ5OiBbXSwgIHVzZXJEZWZpbmVkOiB7IHdpZHRoczoge30sIG9yZGVyOiB7fSwgdGFibGU6IHt9IH0gfSk7XHJcbiAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IHNob3dDb2x1bW4gPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBrZXk6IHN0cmluZykgPT4gKHtcclxuICAgIC4uLnN0YXRlLFxyXG4gICAgaGlkZGVuS2V5czogc3RhdGUuaGlkZGVuS2V5cy5maWx0ZXIoIGsgPT4gayAhPT0ga2V5KSxcclxuICB9KSk7XHJcblxyXG4gIHJlYWRvbmx5IGhpZGVDb2x1bW4gPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBrZXk6IHN0cmluZykgPT4gKHtcclxuICAgIC4uLnN0YXRlLFxyXG4gICAgaGlkZGVuS2V5czogWy4uLnN0YXRlLmhpZGRlbktleXMuZmlsdGVyKCBrID0+IGsgIT09IGtleSksIGtleV0sXHJcbiAgfSkpO1xyXG5cclxuICByZWFkb25seSBzZXRIaWRkZW5Db2x1bW5zID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgZGlzcGxheUNvbHM6IHtrZXk6IHN0cmluZywgdmlzaWJsZTogYm9vbGVhbn1bXSkgPT4ge1xyXG4gICAgcmV0dXJuICh7Li4uc3RhdGUsIGhpZGRlbktleXM6IGRpc3BsYXlDb2xzLmZpbHRlcihkID0+ICFkLnZpc2libGUpLm1hcChkID0+IGQua2V5KX0pXHJcbiAgfSk7XHJcblxyXG5cclxuICBzZXRVc2VyRGVmaW5lZFdpZHRoID0gdGhpcy51cGRhdGVyKChzdGF0ZSxjb2xXaWR0aHM6e2tleTogc3RyaW5nLCB3aWR0aEluUGl4ZWw6bnVtYmVyfVtdKSA9PiB7XHJcbiAgICBjb25zdCB1c2VyRGVmaW5lZFdpZHRocyA9IHsuLi5zdGF0ZS51c2VyRGVmaW5lZC53aWR0aHN9O1xyXG4gICAgY29sV2lkdGhzLmZvckVhY2goY3cgPT4ge1xyXG4gICAgICB1c2VyRGVmaW5lZFdpZHRoc1tjdy5rZXldID0gY3cud2lkdGhJblBpeGVsO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gey4uLnN0YXRlLCB1c2VyRGVmaW5lZDogey4uLnN0YXRlLnVzZXJEZWZpbmVkLCB3aWR0aHM6dXNlckRlZmluZWRXaWR0aHN9fTtcclxuICB9KTtcclxuXHJcbiAgc2V0VXNlckRlZmluZWRPcmRlciA9IHRoaXMudXBkYXRlcigoc3RhdGUsbW92ZWQ6IHsgbmV3T3JkZXI6IG51bWJlciwgb2xkT3JkZXI6IG51bWJlciB9KT0+e1xyXG4gICAgY29uc3QgeyBuZXdPcmRlciwgb2xkT3JkZXIgfSA9IG1vdmVkO1xyXG4gICAgY29uc3QgbWRzQXJyID0gb3JkZXJlZFZpc2libGVNZXRhRGF0YShzdGF0ZSk7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkobWRzQXJyLCBvbGRPcmRlciwgbmV3T3JkZXIpO1xyXG5cclxuICAgIGNvbnN0IHVzZXJEZWZpbmVkT3JkZXIgPSBtZHNBcnIucmVkdWNlKChhZ2dyZWdhdGU6IGFueSxjdXJyZW50LGluZGV4KSA9PiB7XHJcbiAgICAgIGFnZ3JlZ2F0ZVtjdXJyZW50LmtleV0gPSBpbmRleDtcclxuICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZVxyXG4gICAgfSx7fSk7XHJcbiAgICByZXR1cm4oeyAuLi5zdGF0ZSwgdXNlckRlZmluZWQ6IHsgLi4uc3RhdGUudXNlckRlZmluZWQsIG9yZGVyOiB1c2VyRGVmaW5lZE9yZGVyIH0gfSlcclxuICB9KVxyXG5cclxuXHJcbiAgcmVhZG9ubHkgZmlsdGVycyQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5maWx0ZXJzICk7XHJcblxyXG4gIHJlYWRvbmx5IGdldEZpbHRlciQgPSAoZmlsdGVySWQ6IHN0cmluZykgOiBPYnNlcnZhYmxlPEZpbHRlckluZm8gfCBDdXN0b21GaWx0ZXIgfCB1bmRlZmluZWQ+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdCggc3RhdGUgPT4gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZF0gKTtcclxuICB9XHJcbiAgcmVhZG9ubHkgYWRkRmlsdGVyID0gdGhpcy51cGRhdGVyKCAoc3RhdGUsIGZpbHRlcjogRmlsdGVySW5mbyB8IEN1c3RvbUZpbHRlciApID0+IHtcclxuICAgIHJldHVybiB0aGlzLmFkZEZpbHRlcnNUb1N0YXRlKHN0YXRlLCBbZmlsdGVyXSk7XHJcbiAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IGFkZEZpbHRlcnMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLGZpbHRlcnM6KEZpbHRlckluZm8gfCBDdXN0b21GaWx0ZXIgKVtdKT0+e1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyc1RvU3RhdGUoc3RhdGUsIGZpbHRlcnMpO1xyXG4gIH0pXHJcblxyXG5cclxuICBwcml2YXRlIGFkZEZpbHRlcnNUb1N0YXRlID0gKHN0YXRlOlRhYmxlU3RhdGUsIGZpbHRlcnM6KEZpbHRlckluZm8gfCBDdXN0b21GaWx0ZXIpW10pIDogVGFibGVTdGF0ZSA9PiB7XHJcblxyXG4gICAgdmFyIGN1c3RvbUZpbHRlcnMgPSBmaWx0ZXJzLmZpbHRlciggIGlzQ3VzdG9tRmlsdGVyICk7XHJcblxyXG4gICAgdmFyIGZpbHRlckluZm9zID0gZmlsdGVycy5maWx0ZXIoaXNGaWx0ZXJJbmZvKTtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJzT2JqID0gZmlsdGVySW5mb3NcclxuICAgICAgLmZpbHRlcihmbHRyID0+IE9iamVjdC5rZXlzKHN0YXRlLm1ldGFEYXRhKS5zb21lKGtleSA9PiBrZXkgPT09IGZsdHIua2V5KSB8fCBjb25zb2xlLndhcm4oYE1ldGEgZGF0YSB3aXRoIGtleSAke2ZsdHIua2V5fSBub3QgZm91bmRgKSlcclxuICAgICAgLnJlZHVjZSgoZmlsdGVyc09iajoge1trOiBzdHJpbmddOiBhbnl9LGZpbHRlcik9PntcclxuICAgICAgICBpZiAoIWZpbHRlci5maWx0ZXJJZCkge1xyXG4gICAgICAgICAgZmlsdGVyLmZpbHRlcklkID0gdXVpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaWx0ZXJzT2JqW2ZpbHRlci5maWx0ZXJJZF0gPSBmaWx0ZXI7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcnNPYmo7XHJcbiAgICAgIH0se30pO1xyXG5cclxuICAgIGN1c3RvbUZpbHRlcnMuZm9yRWFjaCggZmx0ciA9PiB7XHJcbiAgICAgIGlmKCFmbHRyLmZpbHRlcklkKSB7XHJcbiAgICAgICAgZmx0ci5maWx0ZXJJZCA9IHV1aWQoKTtcclxuICAgICAgfVxyXG4gICAgICBmaWx0ZXJzT2JqW2ZsdHIuZmlsdGVySWRdID0gZmx0cjtcclxuICAgIH0pXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5zdGF0ZSxcclxuICAgICAgZmlsdGVycyA6IHsuLi5zdGF0ZS5maWx0ZXJzLCAuLi5maWx0ZXJzT2JqIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZWFkb25seSByZW1vdmVGaWx0ZXIgPSB0aGlzLnVwZGF0ZXIoIChzdGF0ZSwgZmlsdGVySWQ6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgZmlsdGVyc0NvcHkgPSB7IC4uLnN0YXRlLmZpbHRlcnMgfTtcclxuICAgIGRlbGV0ZSBmaWx0ZXJzQ29weVtmaWx0ZXJJZF07XHJcbiAgICByZXR1cm4gKHsuLi5zdGF0ZSwgZmlsdGVyczogZmlsdGVyc0NvcHkgfSk7XHJcbiAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IHJlbW92ZUZpbHRlcnMgPSB0aGlzLnVwZGF0ZXIoIChzdGF0ZSwgZmlsdGVySWRzOiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgY29uc3QgZmlsdGVyc0NvcHkgPSB7IC4uLnN0YXRlLmZpbHRlcnMgfTtcclxuICAgIGZpbHRlcklkcy5mb3JFYWNoKGlkID0+IHsgZGVsZXRlIGZpbHRlcnNDb3B5W2lkXSB9KVxyXG4gICAgcmV0dXJuICh7Li4uc3RhdGUsIGZpbHRlcnM6IGZpbHRlcnNDb3B5IH0pO1xyXG4gIH0pO1xyXG5cclxuICByZWFkb25seSBjbGVhckZpbHRlcnMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKT0+XHJcbiAgICAoey4uLnN0YXRlLGZpbHRlcnM6e319KSlcclxuXHJcblxyXG4gIHNlbGVjdFNvcnRlZCA9IHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNvcnRlZCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgoZixzKSA9PiAhaXNEaWZmZXJlbnQoZixzKSkpO1xyXG4gIHJlYWRvbmx5IHNvcnQkID0gdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RTdGF0ZVJlYWR5LCB0aGlzLnNlbGVjdFNvcnRlZCwgKF8scykgPT4gcyApO1xyXG4gIFxyXG4gIGNyZWF0ZVByZVNvcnQgPSAobWV0YURhdGFzOiBEaWN0aW9uYXJ5PE1ldGFEYXRhPik6IFNvcnRbXSA9PiB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhtZXRhRGF0YXMpLmZpbHRlcigoIG1ldGFEYXRhICkgOiBtZXRhRGF0YSBpcyBNZXRhRGF0YSAmIHtwcmVTb3J0OiBTb3J0RGVmfSA9PiAhIW1ldGFEYXRhLnByZVNvcnQpXHJcbiAgICAgIC5zb3J0KCh7ICBwcmVTb3J0OiBwczEgIH0sIHsgcHJlU29ydDogcHMyIH0gKSA9PiAocHMxLnByZWNlZGVuY2UgfHwgTnVtYmVyLk1BWF9WQUxVRSkgLSAoIHBzMi5wcmVjZWRlbmNlIHx8IE51bWJlci5NQVhfVkFMVUUpKVxyXG4gICAgICAubWFwKCgge2tleSwgcHJlU29ydH0gKSA9PiAoeyBhY3RpdmU6IGtleSwgZGlyZWN0aW9uOiBwcmVTb3J0LmRpcmVjdGlvbiB9KSlcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IHNldFNvcnQgPSB0aGlzLnVwZGF0ZXI8e2tleTogc3RyaW5nLCBkaXJlY3Rpb24/OiBTb3J0RGlyZWN0aW9ufT4oKHN0YXRlLCB7a2V5LCBkaXJlY3Rpb259ICkgPT4ge1xyXG4gICAgY29uc3Qgc29ydEFycmF5ID0gc3RhdGUuc29ydGVkLmZpbHRlciggcyA9PiBzLmFjdGl2ZSAhPT0ga2V5ICk7XHJcbiAgICBpZihkaXJlY3Rpb24pIHtcclxuICAgICAgc29ydEFycmF5LnVuc2hpZnQoe2FjdGl2ZToga2V5LCBkaXJlY3Rpb259KTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnN0YXRlLFxyXG4gICAgICBzb3J0ZWQ6IHNvcnRBcnJheSxcclxuICAgIH07XHJcbiAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IHNldEFsbFNvcnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLHNvcnRBcnJheTpTb3J0W10pPT57XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5zdGF0ZSxcclxuICAgICAgc29ydGVkOiBzb3J0QXJyYXksXHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxuICB1cGRhdGVTdGF0ZUZ1bmMgPSAoc3RhdGU6IFRhYmxlU3RhdGUsIGluY29taW5nVGFibGVTdGF0ZTogUGFydGlhbDxUYWJsZVN0YXRlPikgOiBUYWJsZVN0YXRlID0+IHtcclxuICAgIGNvbnN0IG1ldGFEYXRhID0gc3RhdGUubWV0YURhdGE7XHJcbiAgICBjb25zdCBzb3J0ZWQgPSBpbmNvbWluZ1RhYmxlU3RhdGUuc29ydGVkPy5sZW5ndGggPyBpbmNvbWluZ1RhYmxlU3RhdGUuc29ydGVkXHJcbiAgICAgIDogc3RhdGUuaW5pdGlhbGl6YXRpb25TdGF0ZSA9PT0gSW5pdGlhbGl6YXRpb25TdGF0ZS5DcmVhdGVkID8gdGhpcy5jcmVhdGVQcmVTb3J0KG1ldGFEYXRhKSA6IHN0YXRlLnNvcnRlZDtcclxuICAgIHJldHVybiB7Li4uc3RhdGUsIC4uLmluY29taW5nVGFibGVTdGF0ZSwgbWV0YURhdGEgLCBzb3J0ZWR9O1xyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgc2V0UGFnZVNpemUgPSB0aGlzLnVwZGF0ZXIoIChzdGF0ZSwgcGFnZVNpemU6IG51bWJlcik9PiAoeyAuLi5zdGF0ZSwgcGFnZVNpemUsIHVzZXJEZWZpbmVkOiB7IC4uLnN0YXRlLnVzZXJEZWZpbmVkLCBwYWdlU2l6ZSB9IH0pKTtcclxuICBnZXRQYWdlU2l6ZSA9IHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnVzZXJEZWZpbmVkLnBhZ2VTaXplIHx8IHN0YXRlLnBhZ2VTaXplKTtcclxuICByZWFkb25seSB1cGRhdGVTdGF0ZSA9IHRoaXMudXBkYXRlcjxQYXJ0aWFsPFRhYmxlU3RhdGU+Pih0aGlzLnVwZGF0ZVN0YXRlRnVuYyk7XHJcblxyXG4gIGNsZWFuUGVyc2lzdGVkU3RhdGUoc3RhdGU6IFRhYmxlU3RhdGUscFN0YXRlOiBQZXJzaXN0ZWRUYWJsZVN0YXRlKSB7XHJcbiAgICBjb25zdCBtZXRhcyA9IE9iamVjdC52YWx1ZXMoc3RhdGUubWV0YURhdGEpO1xyXG4gICAgY29uc3QgZmlsdGVycyA9IE9iamVjdC52YWx1ZXMocFN0YXRlLmZpbHRlcnMpLmZpbHRlcihmbHRyID0+IGlzQ3VzdG9tRmlsdGVyKGZsdHIpIHx8IG1ldGFzLnNvbWUobSA9PiBtLmtleSA9PT0gZmx0ci5rZXkpKS5yZWR1Y2UoKG9iajogYW55LCBmaWx0ZXIpID0+IHtcclxuICAgICAgb2JqW2ZpbHRlci5maWx0ZXJJZCFdID0gcFN0YXRlLmZpbHRlcnNbZmlsdGVyLmZpbHRlcklkIV07XHJcbiAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9LCB7fSk7XHJcbiAgICBjb25zdCBzb3J0ZWQgPSBwU3RhdGUuc29ydGVkLmZpbHRlcihzID0+IG1ldGFzLnNvbWUobSA9PiBtLmtleSA9PT0gcy5hY3RpdmUpKTtcclxuICAgIHJldHVybiAoey4uLnBTdGF0ZSxmaWx0ZXJzLHNvcnRlZH0pXHJcbiAgfVxyXG5cclxuICByZWFkb25seSB1cGRhdGVTdGF0ZUZyb21QZXJzaXN0ZWRTdGF0ZSA9IHRoaXMudXBkYXRlciggKCBzdGF0ZTogVGFibGVTdGF0ZSwgcGVyc2lzdGVkU3RhdGU6IFBlcnNpc3RlZFRhYmxlU3RhdGUpIDogVGFibGVTdGF0ZSA9PiB7XHJcbiAgICBjb25zdCBpbmNvbWluZ1RhYmxlU3RhdGU6IFBhcnRpYWw8VGFibGVTdGF0ZT4gPSB0aGlzLmNsZWFuUGVyc2lzdGVkU3RhdGUoc3RhdGUscGVyc2lzdGVkU3RhdGUpO1xyXG4gICAgY29uc3QgbmV3U3RhdGUgPSAgdGhpcy51cGRhdGVTdGF0ZUZ1bmMoc3RhdGUsaW5jb21pbmdUYWJsZVN0YXRlKTtcclxuICAgIG5ld1N0YXRlLmluaXRpYWxpemF0aW9uU3RhdGUgPSBzdGF0ZS5pbml0aWFsaXphdGlvblN0YXRlID09PSBJbml0aWFsaXphdGlvblN0YXRlLk1ldGFEYXRhTG9hZGVkID8gSW5pdGlhbGl6YXRpb25TdGF0ZS5Mb2FkZWRGcm9tU3RvcmUgOiBzdGF0ZS5pbml0aWFsaXphdGlvblN0YXRlO1xyXG4gICAgcmV0dXJuIG5ld1N0YXRlO1xyXG4gIH0pO1xyXG5cclxuICBnZXRVc2VyRGVmaW5lZFRhYmxlU2l6ZSA9IHRoaXMuc2VsZWN0U2lnbmFsKHN0YXRlID0+IHN0YXRlLnVzZXJEZWZpbmVkLnRhYmxlLndpZHRoKTtcclxuICBnZXRVc2VyRGVmaW5lZFRhYmxlU2l6ZSQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS51c2VyRGVmaW5lZC50YWJsZS53aWR0aCk7XHJcbiAgc2V0VGFibGVXaWR0aCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHdpZHRoSW5QaXhlbHM6bnVtYmVyKSA9PiAoey4uLnN0YXRlLCB1c2VyRGVmaW5lZDogeyAuLi5zdGF0ZS51c2VyRGVmaW5lZCwgdGFibGU6IHsgd2lkdGg6IHdpZHRoSW5QaXhlbHMgfSB9IH0pKSA7XHJcblxyXG4gIG1lcmdlTWV0YSA9IChvcmlnOiBNZXRhRGF0YSwgbWVyZ2U6IE1ldGFEYXRhKTogTWV0YURhdGEgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBrZXk6IG9yaWcua2V5LFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBtZXJnZS5kaXNwbGF5TmFtZSA/PyBvcmlnLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgIGZpZWxkVHlwZTogbWVyZ2UuZmllbGRUeXBlIHx8IG9yaWcuZmllbGRUeXBlLFxyXG4gICAgICAgIGFkZGl0aW9uYWw6IHsuLi5vcmlnLmFkZGl0aW9uYWwsIC4uLm1lcmdlLmFkZGl0aW9uYWx9LFxyXG4gICAgICAgIG9yZGVyOiBtZXJnZS5vcmRlciA/PyBvcmlnLm9yZGVyLFxyXG4gICAgICAgIHByZVNvcnQ6IG1lcmdlLnByZVNvcnQgPz8gb3JpZy5wcmVTb3J0LFxyXG4gICAgICAgIHdpZHRoOiBtZXJnZS53aWR0aCA/PyBvcmlnLndpZHRoLFxyXG4gICAgICAgIG5vRXhwb3J0OiBtZXJnZS5ub0V4cG9ydCB8fCBvcmlnLm5vRXhwb3J0LFxyXG4gICAgICAgIG5vRmlsdGVyOiBtZXJnZS5ub0ZpbHRlciB8fCBvcmlnLm5vRmlsdGVyLFxyXG4gICAgICAgIGN1c3RvbUNlbGw6IG1lcmdlLmN1c3RvbUNlbGwgPz8gb3JpZy5jdXN0b21DZWxsLFxyXG4gICAgICAgIHRyYW5zZm9ybTogbWVyZ2UudHJhbnNmb3JtID8/IG9yaWcudHJhbnNmb3JtLFxyXG4gICAgICAgIG1hcDogbWVyZ2UubWFwID8/IG9yaWcubWFwLFxyXG4gICAgICAgIGNsaWNrOiBtZXJnZS5jbGljayA/PyBvcmlnLmNsaWNrLFxyXG4gICAgICAgIGNsYXNzZXM6IG1lcmdlLmNsYXNzZXMgPz8gb3JpZy5jbGFzc2VzLFxyXG4gICAgICAgIG5vU29ydDogbWVyZ2Uubm9Tb3J0ID8/IG9yaWcubm9Tb3J0LFxyXG4gICAgICAgIHRlbXBsYXRlOiBtZXJnZS50ZW1wbGF0ZSA/PyBvcmlnLnRlbXBsYXRlLFxyXG4gICAgICAgIHRvb2xUaXA6IG1lcmdlLnRvb2xUaXAgPz8gb3JpZy50b29sVGlwLFxyXG4gICAgICAgIHVzZUljb246IG1lcmdlLnVzZUljb24gPz8gb3JpZy51c2VJY29uLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IHNldEluaXRpYWxpemF0aW9uU3RhdGUgPSB0aGlzLnVwZGF0ZXIoIChzdGF0ZSwgaW5pdGlhbGl6YXRpb25TdGF0ZTogIEluaXRpYWxpemF0aW9uU3RhdGUpID0+IHtcclxuICAgIHJldHVybiB7Li4uc3RhdGUsIGluaXRpYWxpemF0aW9uU3RhdGV9O1xyXG4gIH0pO1xyXG5cclxuICBydW5PbmNlV2hlbihwcmVkaWNhdGU6IFByZWRpY2F0ZTxUYWJsZVN0YXRlPiwgZnVuYzogKHN0YXRlOlRhYmxlU3RhdGUpID0+IHZvaWQpIHtcclxuICAgIGNvbnN0IG9icyA9IHRoaXMuc3RhdGUkLnBpcGUob25jZVdoZW4ocHJlZGljYXRlKSk7XHJcbiAgICB0aGlzLm9uKG9icywgKHN0YXRlKSA9PiB7XHJcbiAgICAgIGZ1bmMoc3RhdGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblJlYWR5KCBmdW5jOiAoc3RhdGU6IFRhYmxlU3RhdGUpID0+IHZvaWQgKSB7XHJcbiAgICB0aGlzLnJ1bk9uY2VXaGVuKHN0YXRlSXMoSW5pdGlhbGl6YXRpb25TdGF0ZS5SZWFkeSksZnVuYyk7XHJcbiAgfVxyXG5cclxuICByZWFkb25seSBzZXRNZXRhRGF0YSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1kOiBNZXRhRGF0YVtdIHwgTWV0YURhdGEgKSA9PiB7XHJcbiAgICBjb25zdCBtZXRhRGF0YSA9ICggQXJyYXkuaXNBcnJheShtZCkgPyBbLi4ubWRdIDogW21kXSApXHJcbiAgICAgIC5yZWR1Y2UoKHByZXY6IERpY3Rpb25hcnk8TWV0YURhdGE+LGN1cnIpID0+IHtcclxuICAgICAgICBpZihwcmV2W2N1cnIua2V5XSkge1xyXG4gICAgICAgICAgcHJldltjdXJyLmtleV0gPSB0aGlzLm1lcmdlTWV0YShwcmV2W2N1cnIua2V5XSxjdXJyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcHJldltjdXJyLmtleV0gPSBjdXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJldjtcclxuICAgICAgfSAse30pO1xyXG4gICAgbGV0IHNvcnRlZCA9IHN0YXRlLnNvcnRlZDtcclxuICAgIGlmKHNvcnRlZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgc29ydGVkID0gdGhpcy5jcmVhdGVQcmVTb3J0KG1ldGFEYXRhKTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9yZGVyID0gdGhpcy5pbml0aWFsaXplT3JkZXIoc3RhdGUsIG1ldGFEYXRhKTtcclxuICAgIGNvbnN0IGluaXRpYWxpemF0aW9uU3RhdGUgPSBzdGF0ZS5pbml0aWFsaXphdGlvblN0YXRlID09IEluaXRpYWxpemF0aW9uU3RhdGUuQ3JlYXRlZCA/ICBJbml0aWFsaXphdGlvblN0YXRlLk1ldGFEYXRhTG9hZGVkIDogc3RhdGUuaW5pdGlhbGl6YXRpb25TdGF0ZTtcclxuICAgIHJldHVybiB7IC4uLnN0YXRlLCBpbml0aWFsaXphdGlvblN0YXRlLCBtZXRhRGF0YSwgc29ydGVkLCB1c2VyRGVmaW5lZDogeyAuLi5zdGF0ZS51c2VyRGVmaW5lZCwgb3JkZXI6IG9yZGVyfSB9O1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVPcmRlciA9IChzdGF0ZTpUYWJsZVN0YXRlLG1kczogRGljdGlvbmFyeTxNZXRhRGF0YT4pIDogRGljdGlvbmFyeTxudW1iZXI+ID0+IHtcclxuICAgIGNvbnN0IHZpZXdhYmxlTWV0YURhdGFBcnIgPSBPYmplY3QudmFsdWVzKG1kcykuZmlsdGVyKGEgPT4gYS5maWVsZFR5cGUgIT09IEZpZWxkVHlwZS5IaWRkZW4pO1xyXG4gICAgbGV0IHVzZXJEZWZpbmVkT3JkZXIgPSBzdGF0ZS51c2VyRGVmaW5lZC5vcmRlcjtcclxuICAgIGlmKHZpZXdhYmxlTWV0YURhdGFBcnIuc29tZShtZXRhID0+IHVzZXJEZWZpbmVkT3JkZXJbbWV0YS5rZXldID09IG51bGwpKXtcclxuICAgICAgcmV0dXJuIHt9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlckRlZmluZWRPcmRlcjtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNvbGxhcHNlSGVhZGVyID0gdGhpcy51cGRhdGVyKChzdGF0ZSk9PntcclxuICAgIGNvbnN0IHRhYmxlU2V0dGluZ3MgPSB7Li4uc3RhdGUucGVyc2lzdGVkVGFibGVTZXR0aW5nc307XHJcbiAgICB0YWJsZVNldHRpbmdzLmNvbGxhcHNlSGVhZGVyID0gIXRhYmxlU2V0dGluZ3MuY29sbGFwc2VIZWFkZXI7XHJcbiAgICByZXR1cm4gKHsuLi5zdGF0ZSxwZXJzaXN0ZWRUYWJsZVNldHRpbmdzIDogbmV3IFBlcnNpc3RlZFRhYmxlU2V0dGluZ3ModGFibGVTZXR0aW5ncyl9KTtcclxuICB9KVxyXG5cclxuICB0b2dnbGVDb2xsYXBzZUZvb3RlciA9IHRoaXMudXBkYXRlcigoc3RhdGUpPT57XHJcbiAgICBjb25zdCB0YWJsZVNldHRpbmdzID0gey4uLnN0YXRlLnBlcnNpc3RlZFRhYmxlU2V0dGluZ3N9O1xyXG4gICAgdGFibGVTZXR0aW5ncy5jb2xsYXBzZUZvb3RlciA9ICF0YWJsZVNldHRpbmdzLmNvbGxhcHNlRm9vdGVyO1xyXG4gICAgcmV0dXJuICh7Li4uc3RhdGUscGVyc2lzdGVkVGFibGVTZXR0aW5ncyA6IG5ldyBQZXJzaXN0ZWRUYWJsZVNldHRpbmdzKHRhYmxlU2V0dGluZ3MpfSk7XHJcbiAgfSlcclxuXHJcbiAgYWRkR3JvdXBCeUtleSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1ldGFEYXRhS2V5OiBzdHJpbmcpID0+ICh7XHJcbiAgICAuLi5zdGF0ZSxcclxuICAgIGdyb3VwQnk6IFsuLi5zdGF0ZS5ncm91cEJ5LCB7IGtleTogbWV0YURhdGFLZXksIGV4cGFuZGVkSGVhZGVyczogW10gfV1cclxuICB9KSk7XHJcblxyXG4gIHJlbW92ZUdyb3VwQnlLZXkgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBncm91cEJ5S2V5OiBzdHJpbmcpID0+ICh7XHJcbiAgICAuLi5zdGF0ZSxcclxuICAgIGdyb3VwQnk6IHN0YXRlLmdyb3VwQnkuZmlsdGVyKGtleSA9PiBncm91cEJ5S2V5ICE9PSBrZXkua2V5KVxyXG4gIH0pKTtcclxuXHJcbiAgdXBkYXRlRXhwYW5kZWRHcm91cHMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBkYXRhOiB7a2V5OiBzdHJpbmcsIGdyb3VwS2V5OiBzdHJpbmcsIGlzRXhwYW5kZWQ6IGJvb2xlYW59KSA9PiB7XHJcbiAgICBjb25zdCBnYmsgPSByZXBsYWNlSW5BcnJheVdpdGhDbG9uZShzdGF0ZS5ncm91cEJ5LCBrID0+IGsua2V5ID09PSBkYXRhLmtleSwgZ2sgPT4ge1xyXG4gICAgICBnay5leHBhbmRlZEhlYWRlcnMgPSBkYXRhLmlzRXhwYW5kZWQgPyBbLi4uZ2suZXhwYW5kZWRIZWFkZXJzLCBkYXRhLmdyb3VwS2V5XSA6IGdrLmV4cGFuZGVkSGVhZGVycy5maWx0ZXIoZyA9PiBnICE9PSBkYXRhLmdyb3VwS2V5KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgIC4uLnN0YXRlLFxyXG4gICAgICBncm91cEJ5OiBnYmtcclxuICAgIH0pfVxyXG4gICk7XHJcblxyXG4gIGV4cGFuZEFsbE9mR3JvdXAgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBkYXRhOiB7IGdyb3VwSGVhZGVyc0J5S2V5OiBEaWN0aW9uYXJ5PHsgZ3JvdXBOYW1lOiBzdHJpbmcgfVtdPiB9KSA9PiB7XHJcbiAgICBjb25zdCBuZXdHcm91cGVkRGF0YSA9IHN0YXRlLmdyb3VwQnkubWFwKGdiID0+ICh7XHJcbiAgICAgIGtleTogZ2Iua2V5LFxyXG4gICAgICBleHBhbmRlZEhlYWRlcnM6IGRhdGEuZ3JvdXBIZWFkZXJzQnlLZXlbZ2Iua2V5XT8ubWFwKGcgPT4gZy5ncm91cE5hbWUpID8/IGdiLmV4cGFuZGVkSGVhZGVyc1xyXG4gICAgfSBhcyBHcm91cGVkRGF0YSkpO1xyXG4gICAgcmV0dXJuICh7IC4uLnN0YXRlLCBncm91cEJ5OiBuZXdHcm91cGVkRGF0YSB9KTtcclxuICB9KTtcclxuXHJcbiAgY29sbGFwc2VBbGwgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiAoe1xyXG4gICAgLi4uc3RhdGUsXHJcbiAgICBncm91cEJ5OiBzdGF0ZS5ncm91cEJ5Lm1hcChnYiA9PiAoeyBrZXk6IGdiLmtleSwgZXhwYW5kZWRIZWFkZXJzOiBbXSB9KSlcclxuICB9KSk7XHJcblxyXG4gIGNvbGxhcHNlQWxsT2ZLZXkgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBkYXRhOiB7IGtleXM6IHN0cmluZ1tdIH0pID0+ICh7XHJcbiAgICAuLi5zdGF0ZSxcclxuICAgIGdyb3VwQnk6IHN0YXRlLmdyb3VwQnkubWFwKGdiID0+ICh7XHJcbiAgICAgIGtleTogZ2Iua2V5LFxyXG4gICAgICBleHBhbmRlZEhlYWRlcnM6IGRhdGEua2V5cy5pbmNsdWRlcyhnYi5rZXkpID8gW10gOiBnYi5leHBhbmRlZEhlYWRlcnNcclxuICAgIH0pKVxyXG4gIH0pKTtcclxuXHJcbiAgZ3JvdXBCeUtleXMkID0gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuZ3JvdXBCeS5tYXAoZ2JrID0+IGdiay5rZXkpKVxyXG4gICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQ8c3RyaW5nW10+KChwcmV2LCBjdXJyKSA9PiBwcmV2Lmxlbmd0aCA9PT0gY3Vyci5sZW5ndGggJiYgY3Vyci5ldmVyeSgoayxpKSA9PiBwcmV2W2ldID09PSBrKSkpO1xyXG5cclxuICBleHBhbmRlZEdyb3VwcyQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5ncm91cEJ5KS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiB7XHJcbiAgICBjb25zdCBhYSA9IGEuZmxhdE1hcChnID0+IGcuZXhwYW5kZWRIZWFkZXJzKTtcclxuICAgIGNvbnN0IGJiID0gYi5mbGF0TWFwKGcgPT4gZy5leHBhbmRlZEhlYWRlcnMpO1xyXG4gICAgcmV0dXJuIGFhLmxlbmd0aCA9PT0gYmIubGVuZ3RoICYmIGFhLmV2ZXJ5KChrKSA9PiBiYi5pbmNsdWRlcyhrKSk7XHJcbiAgfSkpO1xyXG4gIFxyXG4gIHNldFRhYmxlU2V0dGluZ3MgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLHNldHRpbmdzOkdlbmVyYWxUYWJsZVNldHRpbmdzKT0+e1xyXG4gICAgY29uc3QgczpUYWJsZVN0YXRlID0ge1xyXG4gICAgICAuLi5zdGF0ZSxcclxuICAgICAgcGVyc2lzdGVkVGFibGVTZXR0aW5ncyA6IG5ldyBQZXJzaXN0ZWRUYWJsZVNldHRpbmdzKHNldHRpbmdzKSxcclxuICAgICAgbm90UGVyc2lzdGVkVGFibGVTZXR0aW5ncyA6IG5ldyBOb3RQZXJzaXN0ZWRUYWJsZVNldHRpbmdzKHNldHRpbmdzKVxyXG4gICAgICB9O1xyXG4gICAgcmV0dXJuIHM7XHJcbiAgfSk7XHJcblxyXG4gIHRhYmxlU2V0dGluZ3MgPSB0aGlzLnNlbGVjdFNpZ25hbChzdGF0ZSA9PiB7XHJcbiAgICBjb25zdCB0cyA6IFBlcnNpc3RlZFRhYmxlU2V0dGluZ3MgJiBOb3RQZXJzaXN0ZWRUYWJsZVNldHRpbmdzID1cclxuICAgICAgey4uLnN0YXRlLnBlcnNpc3RlZFRhYmxlU2V0dGluZ3MsIC4uLnN0YXRlLm5vdFBlcnNpc3RlZFRhYmxlU2V0dGluZ3N9O1xyXG4gICAgcmV0dXJuIHRzO1xyXG4gIH0pO1xyXG5cclxuICB0YWJsZVNldHRpbmdzJCA9IHRoaXMuc2VsZWN0KHN0YXRlID0+IHtcclxuICAgIGNvbnN0IHRzIDogUGVyc2lzdGVkVGFibGVTZXR0aW5ncyAmIE5vdFBlcnNpc3RlZFRhYmxlU2V0dGluZ3MgPVxyXG4gICAgICB7Li4uc3RhdGUucGVyc2lzdGVkVGFibGVTZXR0aW5ncywuLi5zdGF0ZS5ub3RQZXJzaXN0ZWRUYWJsZVNldHRpbmdzfTtcclxuICAgIHJldHVybiB0cztcclxuICB9KVxyXG5cclxuICBwcm9wcyA9IHRoaXMuc2VsZWN0U2lnbmFsKHMgPT4gcy5wcm9wcyk7XHJcblxyXG4gIHNldExpbmtNYXBzID0gdGhpcy51cGRhdGVyKChzdGF0ZSxtYXBzOiBhbnkpPT57XHJcbiAgICByZXR1cm4gey4uLnN0YXRlLGxpbmtNYXBzOm1hcHN9O1xyXG4gIH0pO1xyXG5cclxuICBnZXRMaW5rSW5mbyA9IChtZDpNZXRhRGF0YSkgPT4gdGhpcy5zZWxlY3RTaWduYWwoc3RhdGUgPT4gc3RhdGUubGlua01hcHNbbWQua2V5XSk7XHJcblxyXG4gIGdldElzRXhwYW5kZWQgPSAoY29sdW1uS2V5OiBzdHJpbmcsIGdyb3VwSGVhZGVyS2V5OiBzdHJpbmcpID0+IHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdChzdGF0ZSA9PiAhIXN0YXRlLmdyb3VwQnkuZmlsdGVyKGcgPT4gZy5rZXkgPT09IGNvbHVtbktleSAmJiBnLmV4cGFuZGVkSGVhZGVycy5pbmNsdWRlcyhncm91cEhlYWRlcktleSkpLmxlbmd0aCk7XHJcbiAgfVxyXG4gICRpc1ZpcnR1YWwgPSB0aGlzLnNlbGVjdFNpZ25hbChzdGF0ZSA9PiBzdGF0ZS5ub3RQZXJzaXN0ZWRUYWJsZVNldHRpbmdzLnVzZVZpcnR1YWxTY3JvbGwgPT09IHRydWUgfHwgKHN0YXRlLm5vdFBlcnNpc3RlZFRhYmxlU2V0dGluZ3MudXNlVmlydHVhbFNjcm9sbCBhcyBWaXJ0dWFsU2Nyb2xsT3B0aW9ucyk/LnZpcnR1YWxBc0RlZmF1bHQgfHwgc3RhdGUuc2hvd0FsbCk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBvcmRlcmVkVmlzaWJsZUNvbHVtbnMgPSAoc3RhdGU6IFRhYmxlU3RhdGUpID0+IG9yZGVyZWRWaXNpYmxlTWV0YURhdGEoc3RhdGUpLm1hcChtZCA9PiBtZC5rZXkpO1xyXG5cclxuZXhwb3J0IGNvbnN0IG9yZGVyZWRWaXNpYmxlTWV0YURhdGEgPSAoc3RhdGU6IFRhYmxlU3RhdGUpID0+IHtcclxuICBjb25zdCBvcmRlcmVkID0gb3JkZXJNZXRhRGF0YShzdGF0ZSk7XHJcbiAgY29uc3Qgb3JkZXJlZFZpc2libGUgPSBvcmRlcmVkXHJcbiAgICAuZmlsdGVyKG1ldGFEYXRhID0+ICFzdGF0ZS5oaWRkZW5LZXlzLmluY2x1ZGVzKG1ldGFEYXRhLmtleSkgJiYgc3RhdGUubWV0YURhdGFbbWV0YURhdGEua2V5XS5maWVsZFR5cGUgIT09IEZpZWxkVHlwZS5IaWRkZW4pO1xyXG4gIHJldHVybiBvcmRlcmVkVmlzaWJsZTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IG9yZGVyZWRDb2RlVmlzaWJsZU1ldGFEYXRhID0gKHN0YXRlOiBUYWJsZVN0YXRlKSA9PlxyXG4gIG9yZGVyTWV0YURhdGEoc3RhdGUpLmZpbHRlcihtZCA9PiBtZC5maWVsZFR5cGUgIT09IEZpZWxkVHlwZS5IaWRkZW4pO1xyXG5cclxuZXhwb3J0IGNvbnN0IG9yZGVyTWV0YURhdGEgPSAoc3RhdGU6VGFibGVTdGF0ZSkgPT4ge1xyXG4gIGNvbnN0IHVzZXJPcmRlckFyciA9IE9iamVjdC5lbnRyaWVzKHN0YXRlLnVzZXJEZWZpbmVkLm9yZGVyKTtcclxuICByZXR1cm4gdXNlck9yZGVyQXJyLmxlbmd0aCA/XHJcbiAgIE9iamVjdC52YWx1ZXMoc3RhdGUubWV0YURhdGEpLnNvcnQoKGEsYik9PiB7XHJcbiAgICBjb25zdCBvcmRlckEgPSBzdGF0ZS51c2VyRGVmaW5lZC5vcmRlclthLmtleV07XHJcbiAgICBjb25zdCBvcmRlckIgPSBzdGF0ZS51c2VyRGVmaW5lZC5vcmRlcltiLmtleV07XHJcbiAgICBpZihvcmRlckEgPT0gbnVsbCAmJiBvcmRlckIgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGlmKG9yZGVyQSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgaWYob3JkZXJCID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0YXRlLnVzZXJEZWZpbmVkLm9yZGVyW2Eua2V5XSAtIHN0YXRlLnVzZXJEZWZpbmVkLm9yZGVyW2Iua2V5XVxyXG4gIH0pXHJcbiAgIDpcclxuICAgT2JqZWN0LnZhbHVlcyhzdGF0ZS5tZXRhRGF0YSkuc29ydCgoYSxiKT0+IGEub3JkZXIhIC0gYi5vcmRlciEpXHJcbn0iXX0=
@@ -6,14 +6,14 @@ export class ArrayCommaColumnComponent {
6
6
  this.additional = input(3);
7
7
  this.displayArray = computed(() => (this.value() || []).slice(0, this.additional()));
8
8
  }
9
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayCommaColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: ArrayCommaColumnComponent, isStandalone: true, selector: "tb-comma-array-column", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, additional: { classPropertyName: "additional", publicName: "additional", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ArrayCommaColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: ArrayCommaColumnComponent, isStandalone: true, selector: "tb-comma-array-column", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, additional: { classPropertyName: "additional", publicName: "additional", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
11
11
  @for(val of displayArray(); track $index){
12
12
  {{val + (!$last ? ',' : '')}}
13
13
  }
14
14
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
15
15
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayCommaColumnComponent, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ArrayCommaColumnComponent, decorators: [{
17
17
  type: Component,
18
18
  args: [{
19
19
  selector: 'tb-comma-array-column',
@@ -32,15 +32,15 @@ export class ArrayNewLineColumnComponent {
32
32
  this.additional = input(3);
33
33
  this.displayArray = computed(() => (this.value() || []).slice(0, this.additional()));
34
34
  }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayNewLineColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: ArrayNewLineColumnComponent, isStandalone: true, selector: "tb-new-line-array-column", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, additional: { classPropertyName: "additional", publicName: "additional", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ArrayNewLineColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: ArrayNewLineColumnComponent, isStandalone: true, selector: "tb-new-line-array-column", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, additional: { classPropertyName: "additional", publicName: "additional", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
37
37
  @for(val of displayArray(); track $index){
38
38
  {{val}}
39
39
  @if(!$last){ <br/> }
40
40
  }
41
41
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
42
42
  }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArrayNewLineColumnComponent, decorators: [{
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ArrayNewLineColumnComponent, decorators: [{
44
44
  type: Component,
45
45
  args: [{
46
46
  selector: 'tb-new-line-array-column',
@@ -101,12 +101,12 @@ export class ColumnBuilderComponent {
101
101
  this.metaData.click(element, key);
102
102
  }
103
103
  }
104
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ColumnBuilderComponent, deps: [{ token: i1.TransformCreator }, { token: i2.MatTable }, { token: i3.TableStore }, { token: i4.TableTemplateService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
105
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: ColumnBuilderComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles() as styles\" >\r\n\r\n <!-- header -->\r\n <ng-template matHeaderCellDef #myHeader>\r\n <mat-header-cell cdkDrag [style]='styles.header' resizeColumn [key]=\"metaData.key\" class=\"column-head\" \r\n [class]='metaData.additional?.columnPartClasses?.header'>\r\n <div class=\"header-container\" cdkDragHandle>\r\n @if(!customCell?.columnDef?.headerCell)\r\n {\r\n @if(metaData.fieldType !== FieldType.NotMapped && !customCell?.columnDef?.cell){\r\n <div mat-sort-header [disabled]=\"metaData.noSort\" style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n } @else if(metaData.fieldType === FieldType.NotMapped){\r\n <div style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n }\r\n @if(!customCell?.columnDef?.cell && (showFilters$ | async)){\r\n <tb-header-menu #menu [metaData]='metaData' />\r\n }\r\n }\r\n @else\r\n {\r\n <ng-container *ngTemplateOutlet=\"customCell!.columnDef.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\r\n </ng-container>\r\n }\r\n </div>\r\n </mat-header-cell>\r\n </ng-template>\r\n\r\n <!-- body -->\r\n <ng-container *matCellDef=\"let element;\">\r\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: { metaData: metaData, element: element , styles: styles.body, $implicit: element }\"/>\r\n </ng-container>\r\n <ng-template #body let-element='element' >\r\n <mat-cell [matTooltip]=\"metaData.toolTip ? (getTooltip | func : element) : ''\" [conditionalClasses]='metaData.classes' [element]='element' [styler]='styles.body' (click)='cellClicked(element, metaData.key)' >\r\n <ng-container *ngTemplateOutlet=\"innerTemplate; context: { value: (transform | func : element), element: element, additional: additional, $implicit: element }; Injector: injector\" />\r\n </mat-cell>\r\n </ng-template>\r\n \r\n <!-- footer -->\r\n <ng-template matFooterCellDef>\r\n @if(customCell?.columnDef?.footerCell){\r\n <ng-container\r\n *ngTemplateOutlet=\"customCell!.columnDef.footerCell.template;context: {metaData: metaData, data: data$, styles : styles.footer }\"/>\r\n } @else {\r\n <mat-footer-cell [style]='styles.footer' *ngrxLet=\"data$ as data\" [class]='metaData.additional?.columnPartClasses?.footer'>\r\n @if(!!data?.length && metaData.additional?.footer){\r\n <span class=\"bold\">\r\n @switch (metaData.fieldType) {\r\n @case (FieldType.Currency) { {{ data | columnTotal: metaData | currency }} }\r\n @case (FieldType.Number) { {{ data | columnTotal: metaData | number }} }\r\n }\r\n </span>\r\n }\r\n \r\n </mat-footer-cell>\r\n }\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:#fff;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i2.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ResizeColumnDirective, selector: "[resizeColumn]", inputs: ["resizeColumn", "key"] }, { kind: "pipe", type: FunctionPipe, name: "func" }, { kind: "directive", type: StylerDirective, selector: "[styler]", inputs: ["element", "styler"] }, { kind: "directive", type: ConditionalClassesDirective, selector: "[conditionalClasses]", inputs: ["element", "conditionalClasses"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "component", type: i6.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }, { kind: "component", type: HeaderMenuComponent, selector: "tb-header-menu", inputs: ["metaData"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "pipe", type: ColumnTotalPipe, name: "columnTotal" }, { kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: DecimalPipe, name: "number" }], viewProviders: [
104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ColumnBuilderComponent, deps: [{ token: i1.TransformCreator }, { token: i2.MatTable }, { token: i3.TableStore }, { token: i4.TableTemplateService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
105
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: ColumnBuilderComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"metaData.key\" *ngrxLet=\"styles() as styles\" >\r\n\r\n <!-- header -->\r\n <ng-template matHeaderCellDef #myHeader>\r\n <mat-header-cell cdkDrag [style]='styles.header' resizeColumn [key]=\"metaData.key\" class=\"column-head\" \r\n [class]='metaData.additional?.columnPartClasses?.header'>\r\n <div class=\"header-container\" cdkDragHandle>\r\n @if(!customCell?.columnDef?.headerCell)\r\n {\r\n @if(metaData.fieldType !== FieldType.NotMapped && !customCell?.columnDef?.cell){\r\n <div mat-sort-header [disabled]=\"metaData.noSort\" style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n } @else if(metaData.fieldType === FieldType.NotMapped){\r\n <div style=\"width: 100%\">\r\n {{ metaData.displayName ? metaData.displayName : ( metaData.key | spaceCase ) }}\r\n </div>\r\n }\r\n @if(!customCell?.columnDef?.cell && (showFilters$ | async)){\r\n <tb-header-menu #menu [metaData]='metaData' />\r\n }\r\n }\r\n @else\r\n {\r\n <ng-container *ngTemplateOutlet=\"customCell!.columnDef.headerCell.template; context: {metaData: metaData, styles: styles.header} \">\r\n </ng-container>\r\n }\r\n </div>\r\n </mat-header-cell>\r\n </ng-template>\r\n\r\n <!-- body -->\r\n <ng-container *matCellDef=\"let element;\">\r\n <ng-container *ngTemplateOutlet=\"outerTemplate; context: { metaData: metaData, element: element , styles: styles.body, $implicit: element }\"/>\r\n </ng-container>\r\n <ng-template #body let-element='element' >\r\n <mat-cell [matTooltip]=\"metaData.toolTip ? (getTooltip | func : element) : ''\" [conditionalClasses]='metaData.classes' [element]='element' [styler]='styles.body' (click)='cellClicked(element, metaData.key)' >\r\n <ng-container *ngTemplateOutlet=\"innerTemplate; context: { value: (transform | func : element), element: element, additional: additional, $implicit: element }; Injector: injector\" />\r\n </mat-cell>\r\n </ng-template>\r\n \r\n <!-- footer -->\r\n <ng-template matFooterCellDef>\r\n @if(customCell?.columnDef?.footerCell){\r\n <ng-container\r\n *ngTemplateOutlet=\"customCell!.columnDef.footerCell.template;context: {metaData: metaData, data: data$, styles : styles.footer }\"/>\r\n } @else {\r\n <mat-footer-cell [style]='styles.footer' *ngrxLet=\"data$ as data\" [class]='metaData.additional?.columnPartClasses?.footer'>\r\n @if(!!data?.length && metaData.additional?.footer){\r\n <span class=\"bold\">\r\n @switch (metaData.fieldType) {\r\n @case (FieldType.Currency) { {{ data | columnTotal: metaData | currency }} }\r\n @case (FieldType.Number) { {{ data | columnTotal: metaData | number }} }\r\n }\r\n </span>\r\n }\r\n \r\n </mat-footer-cell>\r\n }\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".header-container{display:flex;flex-direction:row;width:100%;align-items:center}.negative-currency{color:red}.column-head{position:relative}.bold,.group-footer{font-weight:900}.cdk-drag-preview{background:#fff;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:33%;border-right-width:0px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.drag-handle{color:#add8e6;cursor:move;margin-right:9px}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i2.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ResizeColumnDirective, selector: "[resizeColumn]", inputs: ["resizeColumn", "key"] }, { kind: "pipe", type: FunctionPipe, name: "func" }, { kind: "directive", type: StylerDirective, selector: "[styler]", inputs: ["element", "styler"] }, { kind: "directive", type: ConditionalClassesDirective, selector: "[conditionalClasses]", inputs: ["element", "conditionalClasses"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "component", type: i6.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: SpaceCasePipe, name: "spaceCase" }, { kind: "component", type: HeaderMenuComponent, selector: "tb-header-menu", inputs: ["metaData"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "pipe", type: ColumnTotalPipe, name: "columnTotal" }, { kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: DecimalPipe, name: "number" }], viewProviders: [
106
106
  { provide: CDK_DROP_LIST, useExisting: CdkDropList },
107
107
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
108
108
  }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ColumnBuilderComponent, decorators: [{
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ColumnBuilderComponent, decorators: [{
110
110
  type: Component,
111
111
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [
112
112
  { provide: CDK_DROP_LIST, useExisting: CdkDropList },
@@ -13,10 +13,10 @@ export class DateFilterComponent {
13
13
  constructor() {
14
14
  this.FilterType = FilterType;
15
15
  }
16
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: DateFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: DateFilterComponent, isStandalone: true, selector: "tb-date-filter", inputs: { info: "info", CurrentFilterType: "CurrentFilterType" }, ngImport: i0, template: "@if (CurrentFilterType !== FilterType.DateBetween && CurrentFilterType !== FilterType.IsNull) {\r\n <mat-form-field>\r\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" [matDatepicker]=\"cal\"/>\r\n <mat-datepicker-toggle class=\"small-button date-toggle\" matSuffix [for]=\"cal\" preventEnter />\r\n <mat-datepicker #cal />\r\n </mat-form-field>\r\n}\r\n@if(CurrentFilterType === FilterType.DateBetween){\r\n <ng-container ngModelGroup=\"filterValue\">\r\n <mat-form-field class=\"my-filter\" >\r\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"From\" [matDatepicker]=\"fromVal\"\r\n (click)=\"fromVal.open()\"/>\r\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"fromVal\" preventEnter />\r\n <mat-datepicker #fromVal></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"To\" [matDatepicker]=\"toVal\" (click)=\"toVal.open()\"/>\r\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"toVal\" preventEnter />\r\n <mat-datepicker #toVal />\r\n </mat-form-field>\r\n </ng-container>\r\n}\r\n\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: DateFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: DateFilterComponent, isStandalone: true, selector: "tb-date-filter", inputs: { info: "info", CurrentFilterType: "CurrentFilterType" }, ngImport: i0, template: "@if (CurrentFilterType !== FilterType.DateBetween && CurrentFilterType !== FilterType.IsNull) {\r\n <mat-form-field>\r\n <input matInput name=\"filterValue\" [ngModel]=\"info.filterValue\" [matDatepicker]=\"cal\"/>\r\n <mat-datepicker-toggle class=\"small-button date-toggle\" matSuffix [for]=\"cal\" preventEnter />\r\n <mat-datepicker #cal />\r\n </mat-form-field>\r\n}\r\n@if(CurrentFilterType === FilterType.DateBetween){\r\n <ng-container ngModelGroup=\"filterValue\">\r\n <mat-form-field class=\"my-filter\" >\r\n <input matInput name=\"Start\" [ngModel]=\"info.filterValue?.Start\" placeholder=\"From\" [matDatepicker]=\"fromVal\"\r\n (click)=\"fromVal.open()\"/>\r\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"fromVal\" preventEnter />\r\n <mat-datepicker #fromVal></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput name=\"End\" [ngModel]=\"info.filterValue?.End\" placeholder=\"To\" [matDatepicker]=\"toVal\" (click)=\"toVal.open()\"/>\r\n <mat-datepicker-toggle matSuffix class=\"small-button date-toggle\" [for]=\"toVal\" preventEnter />\r\n <mat-datepicker #toVal />\r\n </mat-form-field>\r\n </ng-container>\r\n}\r\n\r\n", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18
18
  }
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: DateFilterComponent, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: DateFilterComponent, decorators: [{
20
20
  type: Component,
21
21
  args: [{ selector: 'tb-date-filter', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], standalone: true, imports: [
22
22
  MatInputModule, FormsModule, MatDatepickerModule, PreventEnterDirective
@@ -8,10 +8,10 @@ export class DateTimeFilterComponent {
8
8
  constructor() {
9
9
  this.FilterType = FilterType;
10
10
  }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: DateTimeFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: DateTimeFilterComponent, isStandalone: true, selector: "tb-date-time-filter", inputs: { info: "info", CurrentFilterType: "CurrentFilterType" }, ngImport: i0, template: "@if(CurrentFilterType !== FilterType.DateTimeBetween && CurrentFilterType !== FilterType.IsNull){\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue\" preventEnter name=\"filterValue\" class=\"op-date-time-input\"/>\r\n}\r\n@if(CurrentFilterType === FilterType.DateTimeBetween){\r\n <ng-container ngModelGroup=\"filterValue\">\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.Start\" preventEnter name=\"Start\" class=\"op-date-time-input\"/>\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.End\" preventEnter name=\"End\" class=\"op-date-time-input\"/>\r\n </ng-container>\r\n}", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: DateTimeFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: DateTimeFilterComponent, isStandalone: true, selector: "tb-date-time-filter", inputs: { info: "info", CurrentFilterType: "CurrentFilterType" }, ngImport: i0, template: "@if(CurrentFilterType !== FilterType.DateTimeBetween && CurrentFilterType !== FilterType.IsNull){\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue\" preventEnter name=\"filterValue\" class=\"op-date-time-input\"/>\r\n}\r\n@if(CurrentFilterType === FilterType.DateTimeBetween){\r\n <ng-container ngModelGroup=\"filterValue\">\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.Start\" preventEnter name=\"Start\" class=\"op-date-time-input\"/>\r\n <input type=\"datetime-local\" [ngModel]=\"info.filterValue?.End\" preventEnter name=\"End\" class=\"op-date-time-input\"/>\r\n </ng-container>\r\n}", styles: [".filter-name{color:#6495ed;margin:10px 0;font-weight:600;display:inline-block}.switch{display:inline-block}.my-filter{margin-right:15px}.cancel-button{float:right}.head-row{width:100%}.filter-row{width:fit-content}mat-card.filter-card::ng-deep mat-form-field{width:150px}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper{line-height:0}mat-card.filter-card::ng-deep .mat-mdc-form-field-subscript-wrapper:before{height:0}.inline{display:inline-block}.small-button{height:18px;width:18px;font-size:18px;padding:0;margin:0}.small-button ::ng-deep *{line-height:initial;font-size:initial;height:18px;width:18px;font-size:18px;bottom:initial}.cancel-button{float:right;font-weight:700}.date-toggle ::ng-deep svg{position:absolute;left:0;top:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13
13
  }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: DateTimeFilterComponent, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: DateTimeFilterComponent, decorators: [{
15
15
  type: Component,
16
16
  args: [{ selector: 'tb-date-time-filter', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], standalone: true, imports: [
17
17
  FormsModule, PreventEnterDirective