@ecodev/natural 57.0.6 → 57.0.8

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 (80) hide show
  1. package/esm2022/lib/classes/abstract-controller.mjs +3 -3
  2. package/esm2022/lib/classes/abstract-detail.mjs +3 -3
  3. package/esm2022/lib/classes/abstract-editable-list.mjs +3 -3
  4. package/esm2022/lib/classes/abstract-list.mjs +3 -3
  5. package/esm2022/lib/classes/abstract-navigable-list.mjs +3 -3
  6. package/esm2022/lib/classes/query-variable-manager.mjs +3 -3
  7. package/esm2022/lib/classes/utility.mjs +4 -4
  8. package/esm2022/lib/directives/http-prefix.directive.mjs +3 -3
  9. package/esm2022/lib/modules/alert/alert.service.mjs +3 -3
  10. package/esm2022/lib/modules/alert/confirm.component.mjs +3 -3
  11. package/esm2022/lib/modules/avatar/component/avatar.component.mjs +3 -3
  12. package/esm2022/lib/modules/avatar/service/avatar.service.mjs +3 -3
  13. package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +3 -3
  14. package/esm2022/lib/modules/common/directives/linkable-tab.directive.mjs +21 -6
  15. package/esm2022/lib/modules/common/directives/src-density.directive.mjs +3 -3
  16. package/esm2022/lib/modules/common/pipes/capitalize.pipe.mjs +3 -3
  17. package/esm2022/lib/modules/common/pipes/ellipsis.pipe.mjs +3 -3
  18. package/esm2022/lib/modules/common/pipes/enum.pipe.mjs +3 -3
  19. package/esm2022/lib/modules/common/pipes/swiss-date.pipe.mjs +3 -3
  20. package/esm2022/lib/modules/common/pipes/time-ago.pipe.mjs +3 -3
  21. package/esm2022/lib/modules/common/services/memory-storage.mjs +3 -3
  22. package/esm2022/lib/modules/common/services/seo.service.mjs +3 -3
  23. package/esm2022/lib/modules/detail-header/detail-header.component.mjs +3 -3
  24. package/esm2022/lib/modules/dialog-trigger/dialog-trigger.component.mjs +3 -3
  25. package/esm2022/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +3 -3
  26. package/esm2022/lib/modules/dropdown-components/type-boolean/type-boolean.component.mjs +3 -3
  27. package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +3 -3
  28. package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +3 -3
  29. package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +3 -3
  30. package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +3 -3
  31. package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +3 -3
  32. package/esm2022/lib/modules/dropdown-components/type-options/type-options.component.mjs +3 -3
  33. package/esm2022/lib/modules/dropdown-components/type-select/type-select.component.mjs +3 -3
  34. package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +3 -3
  35. package/esm2022/lib/modules/file/abstract-file.mjs +3 -3
  36. package/esm2022/lib/modules/file/component/file.component.mjs +3 -3
  37. package/esm2022/lib/modules/file/file-drop.directive.mjs +3 -3
  38. package/esm2022/lib/modules/file/file-select.directive.mjs +3 -3
  39. package/esm2022/lib/modules/file/file.service.mjs +3 -3
  40. package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +3 -3
  41. package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +3 -3
  42. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +3 -3
  43. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +3 -3
  44. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +3 -3
  45. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +3 -3
  46. package/esm2022/lib/modules/icon/icon.directive.mjs +3 -3
  47. package/esm2022/lib/modules/logger/error-handler.mjs +3 -3
  48. package/esm2022/lib/modules/matomo/matomo.service.mjs +3 -3
  49. package/esm2022/lib/modules/panels/abstract-panel.mjs +3 -3
  50. package/esm2022/lib/modules/panels/panels.component.mjs +3 -3
  51. package/esm2022/lib/modules/panels/panels.service.mjs +26 -26
  52. package/esm2022/lib/modules/relations/relations.component.mjs +4 -4
  53. package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +3 -3
  54. package/esm2022/lib/modules/search/dropdown-container/dropdown.service.mjs +3 -3
  55. package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +3 -3
  56. package/esm2022/lib/modules/search/group/group.component.mjs +3 -3
  57. package/esm2022/lib/modules/search/input/input.component.mjs +3 -3
  58. package/esm2022/lib/modules/search/search/search.component.mjs +3 -3
  59. package/esm2022/lib/modules/select/abstract-select.component.mjs +3 -3
  60. package/esm2022/lib/modules/select/select/select.component.mjs +3 -3
  61. package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +3 -3
  62. package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +3 -3
  63. package/esm2022/lib/modules/sidenav/sidenav/sidenav.component.mjs +3 -3
  64. package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +3 -3
  65. package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +3 -3
  66. package/esm2022/lib/modules/sidenav/sidenav-stack.service.mjs +3 -3
  67. package/esm2022/lib/modules/sidenav/sidenav.service.mjs +21 -17
  68. package/esm2022/lib/modules/stamp/stamp.component.mjs +3 -3
  69. package/esm2022/lib/modules/table-button/table-button.component.mjs +3 -3
  70. package/esm2022/lib/services/debounce.service.mjs +3 -3
  71. package/esm2022/lib/services/enum.service.mjs +3 -3
  72. package/esm2022/lib/services/link-mutation.service.mjs +3 -3
  73. package/esm2022/lib/services/persistence.service.mjs +3 -3
  74. package/esm2022/lib/services/swiss-parsing-date-adapter.service.mjs +3 -3
  75. package/fesm2022/ecodev-natural.mjs +270 -257
  76. package/fesm2022/ecodev-natural.mjs.map +1 -1
  77. package/lib/modules/common/directives/linkable-tab.directive.d.ts +3 -2
  78. package/lib/modules/panels/panels.service.d.ts +4 -4
  79. package/lib/modules/sidenav/sidenav.service.d.ts +4 -3
  80. package/package.json +11 -11
@@ -1,4 +1,6 @@
1
+ import { Breakpoints } from '@angular/cdk/layout';
1
2
  import { Inject, Injectable, runInInjectionContext } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
2
4
  import { DefaultUrlSerializer, NavigationError } from '@angular/router';
3
5
  import { differenceWith, flatten, isEqual } from 'lodash-es';
4
6
  import { forkJoin, of, Subject } from 'rxjs';
@@ -7,7 +9,7 @@ import { PanelsHooksConfig, } from './types';
7
9
  import * as i0 from "@angular/core";
8
10
  import * as i1 from "@angular/router";
9
11
  import * as i2 from "@angular/material/dialog";
10
- import * as i3 from "@ngbracket/ngx-layout";
12
+ import * as i3 from "@angular/cdk/layout";
11
13
  function segmentsToString(segments) {
12
14
  return segments.map(s => s.toString()).join('/');
13
15
  }
@@ -27,12 +29,12 @@ export class NaturalPanelsService {
27
29
  static get opened() {
28
30
  return this._opened;
29
31
  }
30
- constructor(router, dialog, injector, hooksConfig, mediaService) {
32
+ constructor(router, dialog, injector, hooksConfig, breakpointObserver) {
31
33
  this.router = router;
32
34
  this.dialog = dialog;
33
35
  this.injector = injector;
34
36
  this.hooksConfig = hooksConfig;
35
- this.mediaService = mediaService;
37
+ this.panelWidth = '960px';
36
38
  /**
37
39
  * Stream that emits when all open dialog have finished closing
38
40
  */
@@ -64,18 +66,14 @@ export class NaturalPanelsService {
64
66
  * Cache of previous screen size
65
67
  * Used to change panels stack orientation on small screens
66
68
  */
67
- this.media = null;
68
- // Watch media to know if display panels horizontally or vertically
69
- this.mediaService.asObservable().subscribe(medias => {
70
- for (const media of medias) {
71
- if (!this.media) {
72
- this.media = media.mqAlias;
73
- }
74
- else if (this.media !== media.mqAlias) {
75
- this.media = media.mqAlias;
76
- this.updateComponentsPosition();
77
- }
78
- }
69
+ this.isVertical = false;
70
+ // Watch media to know if display panels horizontally or vertically
71
+ breakpointObserver
72
+ .observe(Breakpoints.XSmall)
73
+ .pipe(takeUntilDestroyed())
74
+ .subscribe(result => {
75
+ this.isVertical = result.matches;
76
+ this.updateComponentsPosition();
79
77
  });
80
78
  }
81
79
  start(route) {
@@ -261,7 +259,7 @@ export class NaturalPanelsService {
261
259
  closeOnNavigation: false,
262
260
  hasBackdrop: this.dialog.openDialogs.length === 0,
263
261
  height: '100%',
264
- width: '960px',
262
+ width: this.panelWidth,
265
263
  position: {
266
264
  top: '0',
267
265
  right: '0',
@@ -301,19 +299,21 @@ export class NaturalPanelsService {
301
299
  // Assign offset
302
300
  const deep = affectedElements.length - 1 - i;
303
301
  let position = { right: deep * this.panelsOffsetH + 'px' };
304
- if (this.media === 'xs' && affectedElements.length > 1) {
305
- position = {
306
- top: i * this.panelsOffsetV + 'px',
307
- right: '0px',
308
- };
302
+ if (this.isVertical && affectedElements.length > 1) {
303
+ const top = i * this.panelsOffsetV + 'px';
304
+ position = { top: top, right: '0px' };
305
+ dialog.updateSize(this.panelWidth, `calc(100% - ${top})`); // call before updatePosition
306
+ }
307
+ else {
308
+ dialog.updateSize(this.panelWidth, `100%`);
309
309
  }
310
310
  dialog.updatePosition(position);
311
311
  }
312
312
  }
313
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalPanelsService, deps: [{ token: i1.Router }, { token: i2.MatDialog }, { token: i0.Injector }, { token: PanelsHooksConfig }, { token: i3.MediaObserver }], target: i0.ɵɵFactoryTarget.Injectable }); }
314
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalPanelsService, providedIn: 'root' }); }
313
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalPanelsService, deps: [{ token: i1.Router }, { token: i2.MatDialog }, { token: i0.Injector }, { token: PanelsHooksConfig }, { token: i3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable }); }
314
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalPanelsService, providedIn: 'root' }); }
315
315
  }
316
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalPanelsService, decorators: [{
316
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalPanelsService, decorators: [{
317
317
  type: Injectable,
318
318
  args: [{
319
319
  providedIn: 'root',
@@ -321,5 +321,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
321
321
  }], ctorParameters: () => [{ type: i1.Router }, { type: i2.MatDialog }, { type: i0.Injector }, { type: undefined, decorators: [{
322
322
  type: Inject,
323
323
  args: [PanelsHooksConfig]
324
- }] }, { type: i3.MediaObserver }] });
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvcGFuZWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQVkscUJBQXFCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHbEYsT0FBTyxFQUFpQixvQkFBb0IsRUFBRSxlQUFlLEVBQXFCLE1BQU0saUJBQWlCLENBQUM7QUFDMUcsT0FBTyxFQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzNELE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUVyRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQU1ILGlCQUFpQixHQUNwQixNQUFNLFNBQVMsQ0FBQzs7Ozs7QUFFakIsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFzQjtJQUM1QyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLENBQXFCLEVBQUUsQ0FBcUI7SUFDaEUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFFRDs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBQzdC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akIsTUFBTTs7MkZBRVQsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBOERRLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgcnVuSW5JbmplY3Rpb25Db250ZXh0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWVkaWFPYnNlcnZlcn0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0JztcbmltcG9ydCB7TWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWd9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBEZWZhdWx0VXJsU2VyaWFsaXplciwgTmF2aWdhdGlvbkVycm9yLCBSb3V0ZXIsIFVybFNlZ21lbnR9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2RpZmZlcmVuY2VXaXRoLCBmbGF0dGVuLCBpc0VxdWFsfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdFBhbmVsfSBmcm9tICcuL2Fic3RyYWN0LXBhbmVsJztcbmltcG9ydCB7Z2V0U3RhY2tDb25maWd9IGZyb20gJy4vcGFuZWxzLnVybG1hdGNoZXInO1xuaW1wb3J0IHtcbiAgICBOYXR1cmFsUGFuZWxDb25maWcsXG4gICAgTmF0dXJhbFBhbmVsRGF0YSxcbiAgICBOYXR1cmFsUGFuZWxzQmVmb3JlT3BlblBhbmVsLFxuICAgIE5hdHVyYWxQYW5lbHNIb29rc0NvbmZpZyxcbiAgICBOYXR1cmFsUGFuZWxzUm91dGVyUnVsZSxcbiAgICBQYW5lbHNIb29rc0NvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIHNlZ21lbnRzVG9TdHJpbmcoc2VnbWVudHM6IFVybFNlZ21lbnRbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNlZ21lbnRzLm1hcChzID0+IHMudG9TdHJpbmcoKSkuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlQ29uZmlncyhhOiBOYXR1cmFsUGFuZWxDb25maWcsIGI6IE5hdHVyYWxQYW5lbENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhLnJvdXRlLnBhdGggPT09IGIucm91dGUucGF0aCAmJiBhLnJ1bGUgPT09IGIucnVsZSAmJiBpc0VxdWFsKGEucGFyYW1zLCBiLnBhcmFtcyk7XG59XG5cbi8qKlxuICogVE9ETzogaW1wbGVtZW50IHJvdXRlIHVwZGF0ZSB3aGVuIGNsb3NpbmcgZGlhbG9nIHdpdGggZXNjYXBlXG4gKiBAZHluYW1pY1xuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsUGFuZWxzU2VydmljZSB7XG4gICAgLyoqXG4gICAgICogQmVjYXVzZSBvZiB0aGlzIHN0YXRpYyBwcm9wZXJ0eSBQYW5lbHMgYXJlICoqbm90KiogY29tcGF0aWJsZSB3aXRoIFNTUi5cbiAgICAgKiBBbmQgd2UgY2Fubm90IG1ha2UgaXQgbm9uLXN0YXRpYywgYmVjYXVzZSBgVXJsTWF0Y2hlcmAgY2Fubm90IGJlIGluamVjdGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIF9vcGVuZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVuZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhbGwgb3BlbiBkaWFsb2cgaGF2ZSBmaW5pc2hlZCBjbG9zaW5nXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGFmdGVyQWxsQ2xvc2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3IgcGFuZWxzIGNvdW50ZXIuIFdvcmtzIG1vcmUgbGlrZSBhbiBJRC5cbiAgICAgKiBJcyB1c2VkIHRvIGdpdmUgYW4gdW5pcXVlIGlkZW50aWZpZXIgdG8gbXVsdGlwbGUgc2ltaWxhciBwYW5lbHMgY29uZmlndXJhdGlvbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvdW50ZXIgPSAxO1xuICAgIC8qKlxuICAgICAqIENsYXNzIGFwcGxpZWQgdG8gZGlhbG9nIG92ZXJsYXkgcmVsYXRlZCB3aXRoIHBhbmVsc1xuICAgICAqIElmIGNoYW5nZSwgY2hhbmdlIENTUyB0b29cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsQ2xhc3MgPSAncGFuZWwnO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHBhbmVscyBzZXR1cCBiZWZvcmUgbmF2aWdhdGlvbiBjaGFuZ2UuXG4gICAgICogVXNlZCB0byBkZXRlY3QgcGFuZWxzIG9wZW5pbmdzL2Nsb3NpbmdzIGFuZCBhZGFwdCBmb3IgbmV3IGNvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIG9sZEZ1bGxDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3Igc3Vic2NyaXB0aW9uIHN0b3BcbiAgICAgKi9cbiAgICBwcml2YXRlIHJvdXRlU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHN1YnNjcmlwdGlvbiBzdG9wXG4gICAgICovXG4gICAgcHJpdmF0ZSBuYXZTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBIb3Jpem9udGFsIGdhcHMgYmV0d2VlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsc09mZnNldEggPSAzNTtcblxuICAgIC8qKlxuICAgICAqIFZlcnRpY2FsIGdhcHMgYmV0d2VlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsc09mZnNldFYgPSA0MDtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIG9mIHByZXZpb3VzIHNjcmVlbiBzaXplXG4gICAgICogVXNlZCB0byBjaGFuZ2UgcGFuZWxzIHN0YWNrIG9yaWVudGF0aW9uIG9uIHNtYWxsIHNjcmVlbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIG1lZGlhOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBJbmplY3QoUGFuZWxzSG9va3NDb25maWcpIHByaXZhdGUgaG9va3NDb25maWc6IE5hdHVyYWxQYW5lbHNIb29rc0NvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSBtZWRpYVNlcnZpY2U6IE1lZGlhT2JzZXJ2ZXIsXG4gICAgKSB7XG4gICAgICAgIC8vIFdhdGNoIG1lZGlhIHRvIGtub3cgaWYgZGlzcGxheSBwYW5lbHMgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHlcbiAgICAgICAgdGhpcy5tZWRpYVNlcnZpY2UuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKG1lZGlhcyA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1lZGlhIG9mIG1lZGlhcykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tZWRpYSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhID0gbWVkaWEubXFBbGlhcztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWVkaWEgIT09IG1lZGlhLm1xQWxpYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYSA9IG1lZGlhLm1xQWxpYXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhcnQocm91dGU6IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XG4gICAgICAgIE5hdHVyYWxQYW5lbHNTZXJ2aWNlLl9vcGVuZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJvdXRlU3ViID0gcm91dGUudXJsLnN1YnNjcmliZShzZWdtZW50cyA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBhbmVscyhzZWdtZW50cywgcm91dGUuc25hcHNob3QuZGF0YS5wYW5lbHNSb3V0ZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5hdlN1YiA9IHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXYgPT4ge1xuICAgICAgICAgICAgaWYgKCEoZXYgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBYm9ydCBhbmQgcHJvcGFnYXRlIG5hdmlnYXRpb24gZXJyb3JcbiAgICAgICAgICAgIGlmIChldi51cmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCBoYWNraXNoOiB3ZSBoYXJkY29kZSBhbiBpbXBvc3NpYmxlIHVybCB0byB0cmlnZ2VyIG5vcm1hbCBuYXZpZ2F0aW9uIGVycm9yIG1lY2hhbmlzbVxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJ3BhbmVscy1yZWFjaGVkLWludmFsaWQtdXJsJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY291bnRlcisrO1xuXG4gICAgICAgICAgICAvLyBwYyBzdGFuZHMgZm9yIFwicGFuZWwgY291bnRlclwiLCByZXF1aXJlZCB0byBnaXZlIGFuIGlkZW50aWZpY2F0aW9uIHRvIHBhbmVscyB3aXRoIGV4YWN0IHNhbWUgY29uZmlnXG4gICAgICAgICAgICAvLyBFLmcgL25ld1xuICAgICAgICAgICAgY29uc3Qgd2FudGVkVXJsID0gZXYudXJsICsgJztwYz0nICsgdGhpcy5jb3VudGVyO1xuXG4gICAgICAgICAgICAvLyBTZWdtZW50cyBtYXRjaGluZyBmcm9tIHdhbnRlZCB1cmwuIEUuZyB+IFsnbmV3J11cbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZFVyU2VnbWVudHMgPSBuZXcgRGVmYXVsdFVybFNlcmlhbGl6ZXIoKS5wYXJzZSh3YW50ZWRVcmwpLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50cztcblxuICAgICAgICAgICAgLy8gRG9uJ3QgbWF0Y2ggYW55IGNvbmZpZ1xuICAgICAgICAgICAgY29uc3Qgd2FudGVkQ29uZmlnID0gZ2V0U3RhY2tDb25maWcod2FudGVkVXJTZWdtZW50cywgcm91dGUuc25hcHNob3QuZGF0YS5wYW5lbHNSb3V0ZXMsIHRoaXMuaW5qZWN0b3IpO1xuXG4gICAgICAgICAgICBpZiAod2FudGVkQ29uZmlnLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGVuZENvbmZpZ1RvQ3VycmVudFVybCh3YW50ZWRDb25maWcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDdXJyZW50bHkgYWN0aXZhdGVkIHJvdXRlcy4gRS5nIFsnb2JqZWN0aXZlJywgJ29iamVjdGl2ZScsIDEyMywgJ3Jpc2snXVxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNlZ21lbnRzID0gZmxhdHRlbihcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5tYXAoZCA9PiBkLmNvbXBvbmVudEluc3RhbmNlLnBhbmVsRGF0YS5jb25maWcucm91dGUuc2VnbWVudHMpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gTGFzdCBzZWdtZW50LiBFLmcgWydyaXNrJ11cbiAgICAgICAgICAgIGNvbnN0IGxhc3RPZkN1cnJlbnRTZWdtZW50cyA9IGN1cnJlbnRTZWdtZW50cy5zbGljZSgtMSk7XG5cbiAgICAgICAgICAgIC8vIENvbmZpZyBmb3IgWydyaXNrJywgJ25ldyddXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50QW5kV2FudGVkQ29uZmlnID0gZ2V0U3RhY2tDb25maWcoXG4gICAgICAgICAgICAgICAgbGFzdE9mQ3VycmVudFNlZ21lbnRzLmNvbmNhdCh3YW50ZWRVclNlZ21lbnRzKSxcbiAgICAgICAgICAgICAgICByb3V0ZS5zbmFwc2hvdC5kYXRhLnBhbmVsc1JvdXRlcyxcbiAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kQ29uZmlnVG9DdXJyZW50VXJsKGN1cnJlbnRBbmRXYW50ZWRDb25maWcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VzIGdpdmVuIGNvbmZpZ3VyYXRpb24gdG8gYWRkIGluIHRoZSBlbmQgb2YgY3VycmVudCB1cmxcbiAgICAgKiBOZXV0cmFsaXplcyByb3V0ZXIgZXJyb3IgaGFuZGxpbmdcbiAgICAgKi9cbiAgICBwcml2YXRlIGFwcGVuZENvbmZpZ1RvQ3VycmVudFVybChjb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRXJyb3JIYW5kbGVyID0gdGhpcy5yb3V0ZXIuZXJyb3JIYW5kbGVyO1xuXG4gICAgICAgIC8vIE51bGxpZnkgZXJyb3IgaGFuZGxlciAod2lsbCBiZSBkZS1uZXV0cmFsaXplZCBhZnRlciByb3V0ZSByZWRpcmVjdGlvbilcbiAgICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIuZXJyb3JIYW5kbGVyID0gKCkgPT4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTmF2aWdhdGUgdG8gc2FtZSB1cmwgKyAvcmlzay9uZXcgUmVzdWx0IDogL3Jpc2svcmlzay9uZXdcbiAgICAgICAgY29uc3QgbmV3VXJsID0gY29uZmlnLm1hcChjb25mID0+IHNlZ21lbnRzVG9TdHJpbmcoY29uZi5yb3V0ZS5zZWdtZW50cykpLmpvaW4oJy8nKTtcblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMucm91dGVyLnVybCArICcvJyArIG5ld1VybCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvLyBBZnRlciBuYXZpZ2F0aW9uIGhhcyBlbmRlZCwgcmVzdG9yZSBvcmlnaW5hbCBlcnJvciBoYW5kbGVyIGJlY2F1c2UgaGUncyBub3QgYSBiYWQgZ3V5XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5lcnJvckhhbmRsZXIgPSBvcmlnaW5hbEVycm9ySGFuZGxlcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0b3AoKTogdm9pZCB7XG4gICAgICAgIE5hdHVyYWxQYW5lbHNTZXJ2aWNlLl9vcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yb3V0ZVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5uYXZTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZGlhbG9nLmNsb3NlQWxsKCk7XG4gICAgICAgIHRoaXMub2xkRnVsbENvbmZpZyA9IFtdO1xuICAgICAgICB0aGlzLmFmdGVyQWxsQ2xvc2VkLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHbyB0byBwYW5lbCBtYXRjaGluZyBnaXZlbiBjb21wb25lbnQuIENhdXNlcyBhbiB1cmwgY2hhbmdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnb1RvUGFuZWxCeUNvbXBvbmVudChjb21wb25lbnQ6IE5hdHVyYWxBYnN0cmFjdFBhbmVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhbmVsQnlJbmRleCh0aGlzLmdldFBhbmVsSW5kZXgoY29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR28gdG8gcGFuZWwgbWF0Y2hpbmcgZ2l2ZW4gY29tcG9uZW50LiBDYXVzZXMgYW4gdXJsIGNoYW5nZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ29Ub1BlbnVsdGltYXRlUGFuZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhbmVsQnlJbmRleCh0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgbmV3IHVybCB0aGF0IG9ubHkgaW5jbHVkZXMgdGhlIHNlZ21lbnRzIGZyb20gdGhlIHBhbmVscyB3ZSB3YW50IHRvIHN0YXkgb3BlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ29Ub1BhbmVsQnlJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIEV4dHJhY3RzIHVybCBzZWdtZW50cyBmcm9tIG5leHQgcGFuZWwgdW50aWwgbGFzdCBvbmVcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NcbiAgICAgICAgICAgIC5zbGljZShpbmRleCArIDEpXG4gICAgICAgICAgICAubWFwKGRpYWxvZyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRzVG9TdHJpbmcoZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlLnBhbmVsRGF0YS5jb25maWcucm91dGUuc2VnbWVudHMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcvJyk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGV4dHJhIHNlZ21lbnRzIGFuZCByZWRpcmVjdHMgdG8gcm9vdFxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMucm91dGVyLnVybC5yZXBsYWNlKCcvJyArIHVybCwgJycpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RpbmcgYSBwYW5lbCBpcyBlcXVpdmFsZW50IHRvIGNsb3NlIGFsbCB0aG9zZSB0aGF0IGFyZSBpbiBmcm9udCBvZiBoaW1cbiAgICAgKiBAcGFyYW0gaW5kZXggb2YgcGFuZWwgaW4gc3RhY2suIFRoZSBtb3N0IGJlaGluZCAodGhlIGZpcnN0IG9uZSkgaXMgMC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNlbGVjdFBhbmVsQnlJbmRleChpbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGxhc3REaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1t0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAxXTtcblxuICAgICAgICAvLyBVcGRhdGUgbmV3IHBhbmVscyBzZXQgcG9zaXRpb25zXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCAtIDE7IGkgPj0gaW5kZXggKyAxOyBpLS0pIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzW2ldLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGFzdERpYWxvZy5hZnRlckNsb3NlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gbmV3IHBhbmVscyBpZiB1cmwgaGFzIGNoYW5nZWQgd2l0aCBuZXcgc2VnbWVudHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVBhbmVscyhzZWdtZW50czogVXJsU2VnbWVudFtdLCByb3V0ZXM6IE5hdHVyYWxQYW5lbHNSb3V0ZXJSdWxlW10pOiB2b2lkIHtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHVybCBzZWdtZW50cyBpbnRvIGEgY29uZmlnIHdpdGggY29tcG9uZW50IG5hbWUgYW5kIElEIGlmIHByb3ZpZGVkIGluIG5leHQgc2VnbWVudFxuICAgICAgICAvLyBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbmZpZ3MsIGVhY2ggY29uZmlnIHJlcHJlc2VudHMgdGhlIGNvbnRlbnQgcmVsYXRpdmUgdG8gYSBwYW5lbFxuICAgICAgICBjb25zdCBuZXdGdWxsQ29uZmlnID0gZ2V0U3RhY2tDb25maWcoc2VnbWVudHMsIHJvdXRlcywgdGhpcy5pbmplY3Rvcik7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3NUb1JlbW92ZSA9IGRpZmZlcmVuY2VXaXRoKHRoaXMub2xkRnVsbENvbmZpZywgbmV3RnVsbENvbmZpZywgY29tcGFyZUNvbmZpZ3MpO1xuICAgICAgICBjb25zdCBjb25maWdzVG9BZGQgPSBkaWZmZXJlbmNlV2l0aChuZXdGdWxsQ29uZmlnLCB0aGlzLm9sZEZ1bGxDb25maWcsIGNvbXBhcmVDb25maWdzKTtcblxuICAgICAgICBjb25zdCBpbmRleE9mTmV4dFBhbmVsID0gdGhpcy5vbGRGdWxsQ29uZmlnLmxlbmd0aCAtIGNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggLSAxO1xuXG4gICAgICAgIGlmIChjb25maWdzVG9SZW1vdmUubGVuZ3RoICYmIGNvbmZpZ3NUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIEFkZCBhbmQgcmVtb3ZlIHBhbmVsc1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQYW5lbEJ5SW5kZXgoaW5kZXhPZk5leHRQYW5lbCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5QYW5lbHMoY29uZmlnc1RvQWRkLCBuZXdGdWxsQ29uZmlnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWdzVG9SZW1vdmUubGVuZ3RoICYmICFjb25maWdzVG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBvbmx5IHJlbW92ZSBwYW5lbHNcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UGFuZWxCeUluZGV4KGluZGV4T2ZOZXh0UGFuZWwpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpKTtcbiAgICAgICAgfSBlbHNlIGlmICghY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAmJiBjb25maWdzVG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBvbmx5IGFkZCBwYW5lbHNcbiAgICAgICAgICAgIHRoaXMub3BlblBhbmVscyhjb25maWdzVG9BZGQsIG5ld0Z1bGxDb25maWcpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2xkRnVsbENvbmZpZyA9IG5ld0Z1bGxDb25maWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBhbGwgc2VydmljZXMsIHRoZW4gb3BlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIG9wZW5QYW5lbHMoXG4gICAgICAgIG5ld0l0ZW1zQ29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSxcbiAgICAgICAgZnVsbENvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnW10sXG4gICAgKTogT2JzZXJ2YWJsZTxPYnNlcnZhYmxlPGFueT4gfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDxPYnNlcnZhYmxlPGFueT4gfCBudWxsPigpO1xuXG4gICAgICAgIC8vIFJlc29sdmUgZXZlcnl0aGluZyBiZWZvcmUgb3BlbmluZyBhIHNpbmdsZSBwYW5lbFxuICAgICAgICBjb25zdCByZXNvbHZlcyA9IG5ld0l0ZW1zQ29uZmlnLm1hcChjb25mID0+IHRoaXMuZ2V0UmVzb2x2ZWREYXRhKGNvbmYpKTtcblxuICAgICAgICAvLyBGb3JrSm9pbiBlbWl0cyB3aGVuIGFsbCBwcm9taXNlcyBhcmUgZXhlY3V0ZWQ7XG4gICAgICAgIGZvcmtKb2luKHJlc29sdmVzKS5zdWJzY3JpYmUocmVzb2x2ZWRSZXN1bHQgPT4ge1xuICAgICAgICAgICAgLy8gRm9yIGVhY2ggbmV3IGNvbmZpZyBlbnRyeSwgb3BlbiBhIG5ldyBwYW5lbFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdJdGVtc0NvbmZpZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IG5ld0l0ZW1zQ29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGxldCBpdGVtRGF0YTogTmF0dXJhbFBhbmVsRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29uZmlnIG9mIGFjdHVhbCBwYW5lbCByb3V0ZVxuICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcblxuICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIHJlc29sdmVkIGJ5IHNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGluIGNvbXBvbmVudCBieSBjYWxsaW5nIHRoaXMucGFuZWxEYXRhLmRhdGEueHl6XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlc29sdmVkUmVzdWx0W2ldLFxuICAgICAgICAgICAgICAgICAgICBsaW5rYWJsZU9iamVjdHM6IFtdLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ob29rc0NvbmZpZz8uYmVmb3JlT3BlblBhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50OiBOYXR1cmFsUGFuZWxzQmVmb3JlT3BlblBhbmVsID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkUmVzdWx0OiByZXNvbHZlZFJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxQYW5lbHNDb25maWc6IGZ1bGxDb25maWcsXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaXRlbURhdGEgPSB0aGlzLmhvb2tzQ29uZmlnLmJlZm9yZU9wZW5QYW5lbCh0aGlzLmluamVjdG9yLCBldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWwoY29uZmlnLmNvbXBvbmVudCwgaXRlbURhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1t0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAxXS5hZnRlck9wZW5lZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVzb2x2ZWREYXRhKGNvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnKTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgICAgICBpZiAoIWNvbmZpZy5yZXNvbHZlIHx8IChjb25maWcucmVzb2x2ZSAmJiBPYmplY3Qua2V5cyhjb25maWcucmVzb2x2ZSkubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc29sdmVLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnLnJlc29sdmUpO1xuICAgICAgICBjb25zdCByZXNvbHZlZERhdGE6IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8dW5rbm93bj4+ID0ge307XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gY29uZmlnLmluamVjdG9yO1xuXG4gICAgICAgIGlmIChpbmplY3Rvcikge1xuICAgICAgICAgICAgcmVzb2x2ZUtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmVkRGF0YVtrZXldID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiBjb25maWcucmVzb2x2ZVtrZXldKGNvbmZpZykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ya0pvaW4ocmVzb2x2ZWREYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5QYW5lbChjb21wb25lbnRPclRlbXBsYXRlUmVmOiBDb21wb25lbnRUeXBlPE5hdHVyYWxBYnN0cmFjdFBhbmVsPiwgZGF0YTogTmF0dXJhbFBhbmVsRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25mOiBNYXREaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICBwYW5lbENsYXNzOiB0aGlzLnBhbmVsQ2xhc3MsXG4gICAgICAgICAgICBjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoID09PSAwLFxuICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICB3aWR0aDogJzk2MHB4JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgdG9wOiAnMCcsXG4gICAgICAgICAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxOYXR1cmFsQWJzdHJhY3RQYW5lbD4oY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwgY29uZik7XG5cbiAgICAgICAgLy8gUGFuZWxpc2FibGUgaW50ZXJmYWNlIGF0dHJpYnV0ZXMvZnVuY3Rpb25zXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5pbml0UGFuZWwoZGF0YSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmJlZm9yZUNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0UGFuZWxJbmRleChkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFuZWxCeUluZGV4KGluZGV4IC0gMSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBwYW5lbCBwb3NpdGlvbiAoaW5kZXgpIGJ5IHNlYXJjaGluZyBtYXRjaGluZyBjb21wb25lbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFBhbmVsSW5kZXgoY29tcG9uZW50OiBOYXR1cmFsQWJzdHJhY3RQYW5lbCk6IG51bWJlciB7XG4gICAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MuZmluZEluZGV4KGRpYWxvZyA9PiBkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UgPT09IGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwb3NpdGlvbnMgcGFuZWxzIGZyb20gc3RhcnQgdW50aWwgZ2l2ZW4gaW5kZXhcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlbGVjdCB0aGUgcGFuZWxzIHRoYXQgYXJlIHN0aWxsIG9wZW5lZCwgaWdub3JlIHRoZSBvdGhlcnMgYmVjYXVzZSB0aGV5J2xsIGJlIGNsb3NlZFxuICAgICAgICBjb25zdCBhZmZlY3RlZEVsZW1lbnRzID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3M7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2cgPSBhZmZlY3RlZEVsZW1lbnRzW2ldO1xuXG4gICAgICAgICAgICAvLyBTZXQgYWxsIHBhbmVscyBhcyBcImhpZGRlblwiIGV4Y2VwdCBsYXN0IG9uZS4gSXNGcm9udFBhbmVsIGF0dHJpYnV0ZSBjYXVzZXMgYSBDU1MgdGhhdCBoaWRlcyBib2R5IHZpYSBob3N0YmluZGluZ1xuICAgICAgICAgICAgZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlLmlzRnJvbnRQYW5lbCA9IGkgPT09IGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZS5wYW5lbFNlcnZpY2UgPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyBBc3NpZ24gb2Zmc2V0XG4gICAgICAgICAgICBjb25zdCBkZWVwID0gYWZmZWN0ZWRFbGVtZW50cy5sZW5ndGggLSAxIC0gaTtcblxuICAgICAgICAgICAgbGV0IHBvc2l0aW9uOiBhbnkgPSB7cmlnaHQ6IGRlZXAgKiB0aGlzLnBhbmVsc09mZnNldEggKyAncHgnfTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1lZGlhID09PSAneHMnICYmIGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IGkgKiB0aGlzLnBhbmVsc09mZnNldFYgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICByaWdodDogJzBweCcsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGlhbG9nLnVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
324
+ }] }, { type: i3.BreakpointObserver }] });
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvcGFuZWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBWSxxQkFBcUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RCxPQUFPLEVBQWlCLG9CQUFvQixFQUFFLGVBQWUsRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRyxPQUFPLEVBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDM0QsT0FBTyxFQUFDLFFBQVEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRXJFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBTUgsaUJBQWlCLEdBQ3BCLE1BQU0sU0FBUyxDQUFDOzs7OztBQUVqQixTQUFTLGdCQUFnQixDQUFDLFFBQXNCO0lBQzVDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsQ0FBcUIsRUFBRSxDQUFxQjtJQUNoRSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxD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QUM7WUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDTCxDQUFDOzhHQWxYUSxvQkFBb0IseUZBK0RqQixpQkFBaUI7a0hBL0RwQixvQkFBb0IsY0FGakIsTUFBTTs7MkZBRVQsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBZ0VRLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7Q29tcG9uZW50VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIERlZmF1bHRVcmxTZXJpYWxpemVyLCBOYXZpZ2F0aW9uRXJyb3IsIFJvdXRlciwgVXJsU2VnbWVudH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7ZGlmZmVyZW5jZVdpdGgsIGZsYXR0ZW4sIGlzRXF1YWx9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge2ZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0UGFuZWx9IGZyb20gJy4vYWJzdHJhY3QtcGFuZWwnO1xuaW1wb3J0IHtnZXRTdGFja0NvbmZpZ30gZnJvbSAnLi9wYW5lbHMudXJsbWF0Y2hlcic7XG5pbXBvcnQge1xuICAgIE5hdHVyYWxQYW5lbENvbmZpZyxcbiAgICBOYXR1cmFsUGFuZWxEYXRhLFxuICAgIE5hdHVyYWxQYW5lbHNCZWZvcmVPcGVuUGFuZWwsXG4gICAgTmF0dXJhbFBhbmVsc0hvb2tzQ29uZmlnLFxuICAgIE5hdHVyYWxQYW5lbHNSb3V0ZXJSdWxlLFxuICAgIFBhbmVsc0hvb2tzQ29uZmlnLFxufSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gc2VnbWVudHNUb1N0cmluZyhzZWdtZW50czogVXJsU2VnbWVudFtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2VnbWVudHMubWFwKHMgPT4gcy50b1N0cmluZygpKS5qb2luKCcvJyk7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVDb25maWdzKGE6IE5hdHVyYWxQYW5lbENvbmZpZywgYjogTmF0dXJhbFBhbmVsQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGEucm91dGUucGF0aCA9PT0gYi5yb3V0ZS5wYXRoICYmIGEucnVsZSA9PT0gYi5ydWxlICYmIGlzRXF1YWwoYS5wYXJhbXMsIGIucGFyYW1zKTtcbn1cblxuLyoqXG4gKiBUT0RPOiBpbXBsZW1lbnQgcm91dGUgdXBkYXRlIHdoZW4gY2xvc2luZyBkaWFsb2cgd2l0aCBlc2NhcGVcbiAqIEBkeW5hbWljXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxQYW5lbHNTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhbmVsV2lkdGggPSAnOTYwcHgnO1xuXG4gICAgLyoqXG4gICAgICogQmVjYXVzZSBvZiB0aGlzIHN0YXRpYyBwcm9wZXJ0eSBQYW5lbHMgYXJlICoqbm90KiogY29tcGF0aWJsZSB3aXRoIFNTUi5cbiAgICAgKiBBbmQgd2UgY2Fubm90IG1ha2UgaXQgbm9uLXN0YXRpYywgYmVjYXVzZSBgVXJsTWF0Y2hlcmAgY2Fubm90IGJlIGluamVjdGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIF9vcGVuZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVuZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhbGwgb3BlbiBkaWFsb2cgaGF2ZSBmaW5pc2hlZCBjbG9zaW5nXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGFmdGVyQWxsQ2xvc2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3IgcGFuZWxzIGNvdW50ZXIuIFdvcmtzIG1vcmUgbGlrZSBhbiBJRC5cbiAgICAgKiBJcyB1c2VkIHRvIGdpdmUgYW4gdW5pcXVlIGlkZW50aWZpZXIgdG8gbXVsdGlwbGUgc2ltaWxhciBwYW5lbHMgY29uZmlndXJhdGlvbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvdW50ZXIgPSAxO1xuICAgIC8qKlxuICAgICAqIENsYXNzIGFwcGxpZWQgdG8gZGlhbG9nIG92ZXJsYXkgcmVsYXRlZCB3aXRoIHBhbmVsc1xuICAgICAqIElmIGNoYW5nZSwgY2hhbmdlIENTUyB0b29cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsQ2xhc3MgPSAncGFuZWwnO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHBhbmVscyBzZXR1cCBiZWZvcmUgbmF2aWdhdGlvbiBjaGFuZ2UuXG4gICAgICogVXNlZCB0byBkZXRlY3QgcGFuZWxzIG9wZW5pbmdzL2Nsb3NpbmdzIGFuZCBhZGFwdCBmb3IgbmV3IGNvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIG9sZEZ1bGxDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3Igc3Vic2NyaXB0aW9uIHN0b3BcbiAgICAgKi9cbiAgICBwcml2YXRlIHJvdXRlU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHN1YnNjcmlwdGlvbiBzdG9wXG4gICAgICovXG4gICAgcHJpdmF0ZSBuYXZTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBIb3Jpem9udGFsIGdhcHMgYmV0d2VlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsc09mZnNldEggPSAzNTtcblxuICAgIC8qKlxuICAgICAqIFZlcnRpY2FsIGdhcHMgYmV0d2VlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsc09mZnNldFYgPSA0MDtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIG9mIHByZXZpb3VzIHNjcmVlbiBzaXplXG4gICAgICogVXNlZCB0byBjaGFuZ2UgcGFuZWxzIHN0YWNrIG9yaWVudGF0aW9uIG9uIHNtYWxsIHNjcmVlbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmVydGljYWwgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBJbmplY3QoUGFuZWxzSG9va3NDb25maWcpIHByaXZhdGUgaG9va3NDb25maWc6IE5hdHVyYWxQYW5lbHNIb29rc0NvbmZpZyxcbiAgICAgICAgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIsXG4gICAgKSB7XG4gICAgICAgIC8vICBXYXRjaCBtZWRpYSB0byBrbm93IGlmIGRpc3BsYXkgcGFuZWxzIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5XG4gICAgICAgIGJyZWFrcG9pbnRPYnNlcnZlclxuICAgICAgICAgICAgLm9ic2VydmUoQnJlYWtwb2ludHMuWFNtYWxsKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZlcnRpY2FsID0gcmVzdWx0Lm1hdGNoZXM7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGFydChyb3V0ZTogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcbiAgICAgICAgTmF0dXJhbFBhbmVsc1NlcnZpY2UuX29wZW5lZCA9IHRydWU7XG4gICAgICAgIHRoaXMucm91dGVTdWIgPSByb3V0ZS51cmwuc3Vic2NyaWJlKHNlZ21lbnRzID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUGFuZWxzKHNlZ21lbnRzLCByb3V0ZS5zbmFwc2hvdC5kYXRhLnBhbmVsc1JvdXRlcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubmF2U3ViID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldiA9PiB7XG4gICAgICAgICAgICBpZiAoIShldiBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFib3J0IGFuZCBwcm9wYWdhdGUgbmF2aWdhdGlvbiBlcnJvclxuICAgICAgICAgICAgaWYgKGV2LnVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgYml0IGhhY2tpc2g6IHdlIGhhcmRjb2RlIGFuIGltcG9zc2libGUgdXJsIHRvIHRyaWdnZXIgbm9ybWFsIG5hdmlnYXRpb24gZXJyb3IgbWVjaGFuaXNtXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgncGFuZWxzLXJlYWNoZWQtaW52YWxpZC11cmwnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jb3VudGVyKys7XG5cbiAgICAgICAgICAgIC8vIHBjIHN0YW5kcyBmb3IgXCJwYW5lbCBjb3VudGVyXCIsIHJlcXVpcmVkIHRvIGdpdmUgYW4gaWRlbnRpZmljYXRpb24gdG8gcGFuZWxzIHdpdGggZXhhY3Qgc2FtZSBjb25maWdcbiAgICAgICAgICAgIC8vIEUuZyAvbmV3XG4gICAgICAgICAgICBjb25zdCB3YW50ZWRVcmwgPSBldi51cmwgKyAnO3BjPScgKyB0aGlzLmNvdW50ZXI7XG5cbiAgICAgICAgICAgIC8vIFNlZ21lbnRzIG1hdGNoaW5nIGZyb20gd2FudGVkIHVybC4gRS5nIH4gWyduZXcnXVxuICAgICAgICAgICAgY29uc3Qgd2FudGVkVXJTZWdtZW50cyA9IG5ldyBEZWZhdWx0VXJsU2VyaWFsaXplcigpLnBhcnNlKHdhbnRlZFVybCkucm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzO1xuXG4gICAgICAgICAgICAvLyBEb24ndCBtYXRjaCBhbnkgY29uZmlnXG4gICAgICAgICAgICBjb25zdCB3YW50ZWRDb25maWcgPSBnZXRTdGFja0NvbmZpZyh3YW50ZWRVclNlZ21lbnRzLCByb3V0ZS5zbmFwc2hvdC5kYXRhLnBhbmVsc1JvdXRlcywgdGhpcy5pbmplY3Rvcik7XG5cbiAgICAgICAgICAgIGlmICh3YW50ZWRDb25maWcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kQ29uZmlnVG9DdXJyZW50VXJsKHdhbnRlZENvbmZpZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSBhY3RpdmF0ZWQgcm91dGVzLiBFLmcgWydvYmplY3RpdmUnLCAnb2JqZWN0aXZlJywgMTIzLCAncmlzayddXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2VnbWVudHMgPSBmbGF0dGVuKFxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLm1hcChkID0+IGQuY29tcG9uZW50SW5zdGFuY2UucGFuZWxEYXRhLmNvbmZpZy5yb3V0ZS5zZWdtZW50cyksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBMYXN0IHNlZ21lbnQuIEUuZyBbJ3Jpc2snXVxuICAgICAgICAgICAgY29uc3QgbGFzdE9mQ3VycmVudFNlZ21lbnRzID0gY3VycmVudFNlZ21lbnRzLnNsaWNlKC0xKTtcblxuICAgICAgICAgICAgLy8gQ29uZmlnIGZvciBbJ3Jpc2snLCAnbmV3J11cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRBbmRXYW50ZWRDb25maWcgPSBnZXRTdGFja0NvbmZpZyhcbiAgICAgICAgICAgICAgICBsYXN0T2ZDdXJyZW50U2VnbWVudHMuY29uY2F0KHdhbnRlZFVyU2VnbWVudHMpLFxuICAgICAgICAgICAgICAgIHJvdXRlLnNuYXBzaG90LmRhdGEucGFuZWxzUm91dGVzLFxuICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRDb25maWdUb0N1cnJlbnRVcmwoY3VycmVudEFuZFdhbnRlZENvbmZpZyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZXMgZ2l2ZW4gY29uZmlndXJhdGlvbiB0byBhZGQgaW4gdGhlIGVuZCBvZiBjdXJyZW50IHVybFxuICAgICAqIE5ldXRyYWxpemVzIHJvdXRlciBlcnJvciBoYW5kbGluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgYXBwZW5kQ29uZmlnVG9DdXJyZW50VXJsKGNvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxFcnJvckhhbmRsZXIgPSB0aGlzLnJvdXRlci5lcnJvckhhbmRsZXI7XG5cbiAgICAgICAgLy8gTnVsbGlmeSBlcnJvciBoYW5kbGVyICh3aWxsIGJlIGRlLW5ldXRyYWxpemVkIGFmdGVyIHJvdXRlIHJlZGlyZWN0aW9uKVxuICAgICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5lcnJvckhhbmRsZXIgPSAoKSA9PiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOYXZpZ2F0ZSB0byBzYW1lIHVybCArIC9yaXNrL25ldyBSZXN1bHQgOiAvcmlzay9yaXNrL25ld1xuICAgICAgICBjb25zdCBuZXdVcmwgPSBjb25maWcubWFwKGNvbmYgPT4gc2VnbWVudHNUb1N0cmluZyhjb25mLnJvdXRlLnNlZ21lbnRzKSkuam9pbignLycpO1xuXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5yb3V0ZXIudXJsICsgJy8nICsgbmV3VXJsKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEFmdGVyIG5hdmlnYXRpb24gaGFzIGVuZGVkLCByZXN0b3JlIG9yaWdpbmFsIGVycm9yIGhhbmRsZXIgYmVjYXVzZSBoZSdzIG5vdCBhIGJhZCBndXlcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmVycm9ySGFuZGxlciA9IG9yaWdpbmFsRXJyb3JIYW5kbGVyO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcCgpOiB2b2lkIHtcbiAgICAgICAgTmF0dXJhbFBhbmVsc1NlcnZpY2UuX29wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvdXRlU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm5hdlN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5kaWFsb2cuY2xvc2VBbGwoKTtcbiAgICAgICAgdGhpcy5vbGRGdWxsQ29uZmlnID0gW107XG4gICAgICAgIHRoaXMuYWZ0ZXJBbGxDbG9zZWQubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdvIHRvIHBhbmVsIG1hdGNoaW5nIGdpdmVuIGNvbXBvbmVudC4gQ2F1c2VzIGFuIHVybCBjaGFuZ2UuXG4gICAgICovXG4gICAgcHVibGljIGdvVG9QYW5lbEJ5Q29tcG9uZW50KGNvbXBvbmVudDogTmF0dXJhbEFic3RyYWN0UGFuZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nb1RvUGFuZWxCeUluZGV4KHRoaXMuZ2V0UGFuZWxJbmRleChjb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHbyB0byBwYW5lbCBtYXRjaGluZyBnaXZlbiBjb21wb25lbnQuIENhdXNlcyBhbiB1cmwgY2hhbmdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnb1RvUGVudWx0aW1hdGVQYW5lbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nb1RvUGFuZWxCeUluZGV4KHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCAtIDIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxzIHRoZSBuZXcgdXJsIHRoYXQgb25seSBpbmNsdWRlcyB0aGUgc2VnbWVudHMgZnJvbSB0aGUgcGFuZWxzIHdlIHdhbnQgdG8gc3RheSBvcGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnb1RvUGFuZWxCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gRXh0cmFjdHMgdXJsIHNlZ21lbnRzIGZyb20gbmV4dCBwYW5lbCB1bnRpbCBsYXN0IG9uZVxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1xuICAgICAgICAgICAgLnNsaWNlKGluZGV4ICsgMSlcbiAgICAgICAgICAgIC5tYXAoZGlhbG9nID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VnbWVudHNUb1N0cmluZyhkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UucGFuZWxEYXRhLmNvbmZpZy5yb3V0ZS5zZWdtZW50cyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJy8nKTtcblxuICAgICAgICAvLyBSZW1vdmUgZXh0cmEgc2VnbWVudHMgYW5kIHJlZGlyZWN0cyB0byByb290XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5yb3V0ZXIudXJsLnJlcGxhY2UoJy8nICsgdXJsLCAnJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGluZyBhIHBhbmVsIGlzIGVxdWl2YWxlbnQgdG8gY2xvc2UgYWxsIHRob3NlIHRoYXQgYXJlIGluIGZyb250IG9mIGhpbVxuICAgICAqIEBwYXJhbSBpbmRleCBvZiBwYW5lbCBpbiBzdGFjay4gVGhlIG1vc3QgYmVoaW5kICh0aGUgZmlyc3Qgb25lKSBpcyAwLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2VsZWN0UGFuZWxCeUluZGV4KGluZGV4OiBudW1iZXIpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgbGFzdERpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzW3RoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBuZXcgcGFuZWxzIHNldCBwb3NpdGlvbnNcbiAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMTsgaSA+PSBpbmRleCArIDE7IGktLSkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NbaV0uY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYXN0RGlhbG9nLmFmdGVyQ2xvc2VkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbiBuZXcgcGFuZWxzIGlmIHVybCBoYXMgY2hhbmdlZCB3aXRoIG5ldyBzZWdtZW50c1xuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlUGFuZWxzKHNlZ21lbnRzOiBVcmxTZWdtZW50W10sIHJvdXRlczogTmF0dXJhbFBhbmVsc1JvdXRlclJ1bGVbXSk6IHZvaWQge1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdXJsIHNlZ21lbnRzIGludG8gYSBjb25maWcgd2l0aCBjb21wb25lbnQgbmFtZSBhbmQgSUQgaWYgcHJvdmlkZWQgaW4gbmV4dCBzZWdtZW50XG4gICAgICAgIC8vIFJldHVybnMgYW4gYXJyYXkgb2YgY29uZmlncywgZWFjaCBjb25maWcgcmVwcmVzZW50cyB0aGUgY29udGVudCByZWxhdGl2ZSB0byBhIHBhbmVsXG4gICAgICAgIGNvbnN0IG5ld0Z1bGxDb25maWcgPSBnZXRTdGFja0NvbmZpZyhzZWdtZW50cywgcm91dGVzLCB0aGlzLmluamVjdG9yKTtcbiAgICAgICAgY29uc3QgY29uZmlnc1RvUmVtb3ZlID0gZGlmZmVyZW5jZVdpdGgodGhpcy5vbGRGdWxsQ29uZmlnLCBuZXdGdWxsQ29uZmlnLCBjb21wYXJlQ29uZmlncyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3NUb0FkZCA9IGRpZmZlcmVuY2VXaXRoKG5ld0Z1bGxDb25maWcsIHRoaXMub2xkRnVsbENvbmZpZywgY29tcGFyZUNvbmZpZ3MpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4T2ZOZXh0UGFuZWwgPSB0aGlzLm9sZEZ1bGxDb25maWcubGVuZ3RoIC0gY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgaWYgKGNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggJiYgY29uZmlnc1RvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gQWRkIGFuZCByZW1vdmUgcGFuZWxzXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFBhbmVsQnlJbmRleChpbmRleE9mTmV4dFBhbmVsKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlblBhbmVscyhjb25maWdzVG9BZGQsIG5ld0Z1bGxDb25maWcpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggJiYgIWNvbmZpZ3NUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgcmVtb3ZlIHBhbmVsc1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQYW5lbEJ5SW5kZXgoaW5kZXhPZk5leHRQYW5lbCkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb25maWdzVG9SZW1vdmUubGVuZ3RoICYmIGNvbmZpZ3NUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgYWRkIHBhbmVsc1xuICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWxzKGNvbmZpZ3NUb0FkZCwgbmV3RnVsbENvbmZpZykuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbGRGdWxsQ29uZmlnID0gbmV3RnVsbENvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIGFsbCBzZXJ2aWNlcywgdGhlbiBvcGVuIHBhbmVsc1xuICAgICAqL1xuICAgIHByaXZhdGUgb3BlblBhbmVscyhcbiAgICAgICAgbmV3SXRlbXNDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdLFxuICAgICAgICBmdWxsQ29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSxcbiAgICApOiBPYnNlcnZhYmxlPE9ic2VydmFibGU8YW55PiB8IG51bGw+IHtcbiAgICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PE9ic2VydmFibGU8YW55PiB8IG51bGw+KCk7XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBldmVyeXRoaW5nIGJlZm9yZSBvcGVuaW5nIGEgc2luZ2xlIHBhbmVsXG4gICAgICAgIGNvbnN0IHJlc29sdmVzID0gbmV3SXRlbXNDb25maWcubWFwKGNvbmYgPT4gdGhpcy5nZXRSZXNvbHZlZERhdGEoY29uZikpO1xuXG4gICAgICAgIC8vIEZvcmtKb2luIGVtaXRzIHdoZW4gYWxsIHByb21pc2VzIGFyZSBleGVjdXRlZDtcbiAgICAgICAgZm9ya0pvaW4ocmVzb2x2ZXMpLnN1YnNjcmliZShyZXNvbHZlZFJlc3VsdCA9PiB7XG4gICAgICAgICAgICAvLyBGb3IgZWFjaCBuZXcgY29uZmlnIGVudHJ5LCBvcGVuIGEgbmV3IHBhbmVsXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld0l0ZW1zQ29uZmlnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gbmV3SXRlbXNDb25maWdbaV07XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1EYXRhOiBOYXR1cmFsUGFuZWxEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb25maWcgb2YgYWN0dWFsIHBhbmVsIHJvdXRlXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuXG4gICAgICAgICAgICAgICAgICAgIC8vIERhdGEgcmVzb2x2ZWQgYnkgc2VydmljZVxuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgaW4gY29tcG9uZW50IGJ5IGNhbGxpbmcgdGhpcy5wYW5lbERhdGEuZGF0YS54eXpcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcmVzb2x2ZWRSZXN1bHRbaV0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmthYmxlT2JqZWN0czogW10sXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhvb2tzQ29uZmlnPy5iZWZvcmVPcGVuUGFuZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnQ6IE5hdHVyYWxQYW5lbHNCZWZvcmVPcGVuUGFuZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRSZXN1bHQ6IHJlc29sdmVkUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFBhbmVsc0NvbmZpZzogZnVsbENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YSA9IHRoaXMuaG9va3NDb25maWcuYmVmb3JlT3BlblBhbmVsKHRoaXMuaW5qZWN0b3IsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5QYW5lbChjb25maWcuY29tcG9uZW50LCBpdGVtRGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzW3RoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCAtIDFdLmFmdGVyT3BlbmVkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZXNvbHZlZERhdGEoY29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWcpOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgICAgIGlmICghY29uZmlnLnJlc29sdmUgfHwgKGNvbmZpZy5yZXNvbHZlICYmIE9iamVjdC5rZXlzKGNvbmZpZy5yZXNvbHZlKS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb2x2ZUtleXMgPSBPYmplY3Qua2V5cyhjb25maWcucmVzb2x2ZSk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkRGF0YTogUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZTx1bmtub3duPj4gPSB7fTtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBjb25maWcuaW5qZWN0b3I7XG5cbiAgICAgICAgaWYgKGluamVjdG9yKSB7XG4gICAgICAgICAgICByZXNvbHZlS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWREYXRhW2tleV0gPSBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IGNvbmZpZy5yZXNvbHZlW2tleV0oY29uZmlnKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihyZXNvbHZlZERhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3BlblBhbmVsKGNvbXBvbmVudE9yVGVtcGxhdGVSZWY6IENvbXBvbmVudFR5cGU8TmF0dXJhbEFic3RyYWN0UGFuZWw+LCBkYXRhOiBOYXR1cmFsUGFuZWxEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmY6IE1hdERpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IHRoaXMucGFuZWxDbGFzcyxcbiAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggPT09IDAsXG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnBhbmVsV2lkdGgsXG4gICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHRvcDogJzAnLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiAnMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW48TmF0dXJhbEFic3RyYWN0UGFuZWw+KGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsIGNvbmYpO1xuXG4gICAgICAgIC8vIFBhbmVsaXNhYmxlIGludGVyZmFjZSBhdHRyaWJ1dGVzL2Z1bmN0aW9uc1xuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuaW5pdFBhbmVsKGRhdGEpO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5iZWZvcmVDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFBhbmVsSW5kZXgoZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhbmVsQnlJbmRleChpbmRleCAtIDEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gcGFuZWwgcG9zaXRpb24gKGluZGV4KSBieSBzZWFyY2hpbmcgbWF0Y2hpbmcgY29tcG9uZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQYW5lbEluZGV4KGNvbXBvbmVudDogTmF0dXJhbEFic3RyYWN0UGFuZWwpOiBudW1iZXIge1xuICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmZpbmRJbmRleChkaWFsb2cgPT4gZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlID09PSBjb21wb25lbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcG9zaXRpb25zIHBhbmVscyBmcm9tIHN0YXJ0IHVudGlsIGdpdmVuIGluZGV4XG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWxlY3QgdGhlIHBhbmVscyB0aGF0IGFyZSBzdGlsbCBvcGVuZWQsIGlnbm9yZSB0aGUgb3RoZXJzIGJlY2F1c2UgdGhleSdsbCBiZSBjbG9zZWRcbiAgICAgICAgY29uc3QgYWZmZWN0ZWRFbGVtZW50cyA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IGFmZmVjdGVkRWxlbWVudHNbaV07XG5cbiAgICAgICAgICAgIC8vIFNldCBhbGwgcGFuZWxzIGFzIFwiaGlkZGVuXCIgZXhjZXB0IGxhc3Qgb25lLiBJc0Zyb250UGFuZWwgYXR0cmlidXRlIGNhdXNlcyBhIENTUyB0aGF0IGhpZGVzIGJvZHkgdmlhIGhvc3RiaW5kaW5nXG4gICAgICAgICAgICBkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UuaXNGcm9udFBhbmVsID0gaSA9PT0gYWZmZWN0ZWRFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlLnBhbmVsU2VydmljZSA9IHRoaXM7XG5cbiAgICAgICAgICAgIC8vIEFzc2lnbiBvZmZzZXRcbiAgICAgICAgICAgIGNvbnN0IGRlZXAgPSBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aCAtIDEgLSBpO1xuXG4gICAgICAgICAgICBsZXQgcG9zaXRpb246IGFueSA9IHtyaWdodDogZGVlcCAqIHRoaXMucGFuZWxzT2Zmc2V0SCArICdweCd9O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCAmJiBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3AgPSBpICogdGhpcy5wYW5lbHNPZmZzZXRWICsgJ3B4JztcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHt0b3A6IHRvcCwgcmlnaHQ6ICcwcHgnfTtcbiAgICAgICAgICAgICAgICBkaWFsb2cudXBkYXRlU2l6ZSh0aGlzLnBhbmVsV2lkdGgsIGBjYWxjKDEwMCUgLSAke3RvcH0pYCk7IC8vIGNhbGwgYmVmb3JlIHVwZGF0ZVBvc2l0aW9uXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpYWxvZy51cGRhdGVTaXplKHRoaXMucGFuZWxXaWR0aCwgYDEwMCVgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGlhbG9nLnVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -173,10 +173,10 @@ export class NaturalRelationsComponent extends NaturalAbstractController {
173
173
  }
174
174
  return this.hierarchicSelectorConfig.filter(c => !!c.selectableAtKey)[0].selectableAtKey;
175
175
  }
176
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalRelationsComponent, deps: [{ token: i1.NaturalLinkMutationService }, { token: i2.NaturalHierarchicSelectorDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
177
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.2", type: NaturalRelationsComponent, isStandalone: true, selector: "natural-relations", inputs: { service: "service", placeholder: "placeholder", autocompleteSelectorFilter: "autocompleteSelectorFilter", displayWith: "displayWith", disabled: "disabled", main: "main", hierarchicSelectorFilters: "hierarchicSelectorFilters", hierarchicSelectorConfig: "hierarchicSelectorConfig", otherName: "otherName", filter: "filter" }, outputs: { selectionChange: "selectionChange" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "select", first: true, predicate: NaturalSelectComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"body\">\n <ng-template #defaultNameCell let-item=\"item\">\n {{ getDisplayFn()(item) }}\n </ng-template>\n\n <table [dataSource]=\"dataSource\" class=\"natural-row-click\" mat-table>\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row style=\"display: none\"></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row></tr>\n\n <ng-container matColumnDef=\"name\">\n <th *matHeaderCellDef i18n mat-header-cell>Titre</th>\n <td *matCellDef=\"let item\" mat-cell>\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultNameCell\"\n />\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"unlink\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let element\" mat-cell>\n @if (!disabled) {\n <button\n (click)=\"removeRelation(element)\"\n [disabled]=\"removing.has(element)\"\n color=\"warn\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Dissocier\"\n >\n <mat-icon naturalIcon=\"link_off\" />\n </button>\n }\n </td>\n </ng-container>\n </table>\n\n @if (dataSource.data && (dataSource.data.length || 0) > (dataSource.data.pageSize || 0)) {\n <mat-paginator\n (page)=\"pagination($event)\"\n [length]=\"dataSource.data.length || 0\"\n [pageIndex]=\"dataSource.data.pageIndex || 0\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"dataSource.data.pageSize || 0\"\n />\n }\n\n @if (!loading && dataSource.data?.length === 0) {\n <div class=\"margin-v mat-body\">\n <span i18n>Aucun r\u00E9sultat</span>\n </div>\n }\n\n @if (loading) {\n <mat-progress-spinner [diameter]=\"40\" class=\"loading\" mode=\"indeterminate\" />\n }\n</div>\n\n@if (!disabled) {\n @if (hierarchicSelectorConfig) {\n <div>\n <button (click)=\"openNaturalHierarchicSelector()\" color=\"primary\" mat-flat-button>{{ placeholder }}</button>\n </div>\n } @else {\n <natural-select\n (selectionChange)=\"addRelations([$event])\"\n [displayWith]=\"$any(getDisplayFn())\"\n [filter]=\"autocompleteSelectorFilter\"\n [placeholder]=\"placeholder\"\n [service]=\"service\"\n [showIcon]=\"false\"\n />\n }\n}\n", styles: [":host{display:flex;flex-direction:column}:host>*:not(:last-child){margin-bottom:20px}:host .body{display:flex;flex-direction:column}:host .loading{margin:20px auto}:host .mat-column-unlink{width:2.5em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: NaturalSelectComponent, selector: "natural-select", inputs: ["service", "optionRequired", "searchField", "searchOperator", "filter", "disabled"] }] }); }
176
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalRelationsComponent, deps: [{ token: i1.NaturalLinkMutationService }, { token: i2.NaturalHierarchicSelectorDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
177
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: NaturalRelationsComponent, isStandalone: true, selector: "natural-relations", inputs: { service: "service", placeholder: "placeholder", autocompleteSelectorFilter: "autocompleteSelectorFilter", displayWith: "displayWith", disabled: "disabled", main: "main", hierarchicSelectorFilters: "hierarchicSelectorFilters", hierarchicSelectorConfig: "hierarchicSelectorConfig", otherName: "otherName", filter: "filter" }, outputs: { selectionChange: "selectionChange" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "select", first: true, predicate: NaturalSelectComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"body\">\n <ng-template #defaultNameCell let-item=\"item\">\n {{ getDisplayFn()(item) }}\n </ng-template>\n\n <table [dataSource]=\"dataSource\" class=\"natural-row-click\" mat-table>\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row style=\"display: none\"></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row></tr>\n\n <ng-container matColumnDef=\"name\">\n <th *matHeaderCellDef i18n mat-header-cell>Titre</th>\n <td *matCellDef=\"let item\" mat-cell>\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultNameCell\"\n />\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"unlink\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let element\" mat-cell>\n @if (!disabled) {\n <button\n (click)=\"removeRelation(element)\"\n [disabled]=\"removing.has(element)\"\n color=\"warn\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Dissocier\"\n >\n <mat-icon naturalIcon=\"link_off\" />\n </button>\n }\n </td>\n </ng-container>\n </table>\n\n @if (dataSource.data && (dataSource.data.length || 0) > (dataSource.data.pageSize || 0)) {\n <mat-paginator\n (page)=\"pagination($event)\"\n [length]=\"dataSource.data.length || 0\"\n [pageIndex]=\"dataSource.data.pageIndex || 0\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"dataSource.data.pageSize || 0\"\n />\n }\n\n @if (!loading && dataSource.data?.length === 0) {\n <div class=\"margin-v mat-body\">\n <span i18n>Aucun r\u00E9sultat</span>\n </div>\n }\n\n @if (loading) {\n <mat-progress-spinner [diameter]=\"40\" class=\"loading\" mode=\"indeterminate\" />\n }\n</div>\n\n@if (!disabled) {\n @if (hierarchicSelectorConfig) {\n <div>\n <button (click)=\"openNaturalHierarchicSelector()\" color=\"primary\" mat-flat-button>{{ placeholder }}</button>\n </div>\n } @else {\n <natural-select\n (selectionChange)=\"addRelations([$event])\"\n [displayWith]=\"$any(getDisplayFn())\"\n [filter]=\"autocompleteSelectorFilter\"\n [placeholder]=\"placeholder\"\n [service]=\"service\"\n [showIcon]=\"false\"\n />\n }\n}\n", styles: [":host{display:flex;flex-direction:column}:host>*:not(:last-child){margin-bottom:20px}:host .body{display:flex;flex-direction:column}:host .loading{margin:20px auto}:host .mat-column-unlink{width:2.5em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: NaturalSelectComponent, selector: "natural-select", inputs: ["service", "optionRequired", "searchField", "searchOperator", "filter", "disabled"] }] }); }
178
178
  }
179
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalRelationsComponent, decorators: [{
179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalRelationsComponent, decorators: [{
180
180
  type: Component,
181
181
  args: [{ selector: 'natural-relations', standalone: true, imports: [
182
182
  CommonModule,
@@ -220,4 +220,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
220
220
  }], filter: [{
221
221
  type: Input
222
222
  }] } });
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3JlbGF0aW9ucy9yZWxhdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvcmVsYXRpb25zL3JlbGF0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxrQkFBa0IsRUFBWSxNQUFNLDZCQUE2QixDQUFDO0FBQzFFLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxpQkFBaUIsRUFBZ0IsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUMsNEJBQTRCLEVBQWtDLE1BQU0sc0NBQXNDLENBQUM7QUFNbkgsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFHekUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixD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R2pCLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3FCQUN6QjtvSkFtQjBDLE1BQU07c0JBQWhELFNBQVM7dUJBQUMsc0JBQXNCO2dCQUNDLFlBQVk7c0JBQTdDLFlBQVk7dUJBQUMsV0FBVztnQkFTZCxPQUFPO3NCQURqQixLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFtQlAsV0FBVztzQkFBMUIsS0FBSztnQkFLVSwwQkFBMEI7c0JBQXpDLEtBQUs7Z0JBS1UsV0FBVztzQkFBMUIsS0FBSztnQkFLVSxRQUFRO3NCQUF2QixLQUFLO2dCQUswQixJQUFJO3NCQUFuQyxLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFLRyxlQUFlO3NCQUF4QyxNQUFNO2dCQUtTLHlCQUF5QjtzQkFBeEMsS0FBSztnQkFLVSx3QkFBd0I7c0JBQXZDLEtBQUs7Z0JBS1UsU0FBUztzQkFBeEIsS0FBSztnQkF3Q0ssTUFBTTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0UGFnaW5hdG9yTW9kdWxlLCBQYWdlRXZlbnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXJ9IGZyb20gJy4uLy4uL2NsYXNzZXMvYWJzdHJhY3QtY29udHJvbGxlcic7XG5pbXBvcnQge05hdHVyYWxEYXRhU291cmNlLCBQYWdpbmF0ZWREYXRhfSBmcm9tICcuLi8uLi9jbGFzc2VzL2RhdGEtc291cmNlJztcbmltcG9ydCB7TmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlciwgUGFnaW5hdGlvbklucHV0LCBRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi4vLi4vY2xhc3Nlcy9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7SGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9ufSBmcm9tICcuLi8uLi9tb2R1bGVzL2hpZXJhcmNoaWMtc2VsZWN0b3IvY2xhc3Nlcy9oaWVyYXJjaGljLWZpbHRlcnMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0xpbmthYmxlT2JqZWN0LCBOYXR1cmFsTGlua011dGF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGluay1tdXRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9ufSBmcm9tICcuLi9oaWVyYXJjaGljLXNlbGVjdG9yL2NsYXNzZXMvaGllcmFyY2hpYy1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7SGllcmFyY2hpY0RpYWxvZ0NvbmZpZ30gZnJvbSAnLi4vaGllcmFyY2hpYy1zZWxlY3Rvci9oaWVyYXJjaGljLXNlbGVjdG9yLWRpYWxvZy9oaWVyYXJjaGljLXNlbGVjdG9yLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHtOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yRGlhbG9nU2VydmljZX0gZnJvbSAnLi4vaGllcmFyY2hpYy1zZWxlY3Rvci9oaWVyYXJjaGljLXNlbGVjdG9yLWRpYWxvZy9oaWVyYXJjaGljLXNlbGVjdG9yLWRpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbFNlbGVjdENvbXBvbmVudH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlJztcbmltcG9ydCB7RXh0cmFjdFRhbGxPbmUsIEV4dHJhY3RWYWxsfSBmcm9tICcuLi8uLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQge05hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICcuLi9pY29uL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge01hdFRvb2x0aXBNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge01hdFRhYmxlTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7ZmluYWxpemUsIGZvcmtKb2luLCB0YWtlVW50aWwsIHRhcH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQ3VzdG9tIHRlbXBsYXRlIHVzYWdlIDpcbiAqIDxuYXR1cmFsLXJlbGF0aW9ucyBbbWFpbl09XCJvd25lclwiIFtzZXJ2aWNlXT1cInN2Y1wiIFtmaWx0ZXJdPVwie31cIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBhbiBpdGVtXCI+XG4gKiAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICogICAgICAgICA8c3Bhbj57eyBpdGVtLnh4eCB9fTwvc3Bhbj5cbiAqICAgICA8L25nLXRlbXBsYXRlPlxuICogPC9uYXR1cmFsLXJlbGF0aW9ucz5cbiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25hdHVyYWwtcmVsYXRpb25zJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVsYXRpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vcmVsYXRpb25zLmNvbXBvbmVudC5zY3NzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBOYXR1cmFsSWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgTWF0UGFnaW5hdG9yTW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIE5hdHVyYWxTZWxlY3RDb21wb25lbnQsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFJlbGF0aW9uc0NvbXBvbmVudDxcbiAgICAgICAgVFNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2U8XG4gICAgICAgICAgICB1bmtub3duLFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgUGFnaW5hdGVkRGF0YTxMaW5rYWJsZU9iamVjdD4sXG4gICAgICAgICAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgICAgIHVua25vd24sXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICB1bmtub3duLFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgdW5rbm93bixcbiAgICAgICAgICAgIGFueVxuICAgICAgICA+LFxuICAgID5cbiAgICBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzXG57XG4gICAgQFZpZXdDaGlsZChOYXR1cmFsU2VsZWN0Q29tcG9uZW50KSBwcml2YXRlIHNlbGVjdD86IE5hdHVyYWxTZWxlY3RDb21wb25lbnQ8VFNlcnZpY2U+O1xuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIHB1YmxpYyBpdGVtVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgICNzZXJ2aWNlITogVFNlcnZpY2U7XG5cbiAgICBwdWJsaWMgZ2V0IHNlcnZpY2UoKTogVFNlcnZpY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy4jc2VydmljZTtcbiAgICB9XG5cbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSlcbiAgICBwdWJsaWMgc2V0IHNlcnZpY2Uoc2VydmljZTogVFNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy4jc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGl0ZW1zJCA9IHRoaXMuI3NlcnZpY2Uud2F0Y2hBbGwodGhpcy52YXJpYWJsZXNNYW5hZ2VyKS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICB0YXAoe1xuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTmF0dXJhbERhdGFTb3VyY2UoaXRlbXMkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGxhY2Vob2xkZXIgdXNlZCBpbiB0aGUgYnV0dG9uIHRvIGFkZCBhIG5ldyByZWxhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlciA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogRmlsdGVyIGZvciBhdXRvY29tcGxldGUgc2VsZWN0b3JcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYXV0b2NvbXBsZXRlU2VsZWN0b3JGaWx0ZXI/OiBFeHRyYWN0VmFsbDxUU2VydmljZT5bJ2ZpbHRlciddIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSB0aGUgcmVuZGVyaW5nIG9mIHRoZSBzZWxlY3RlZCBpdGVtIGFzIHRleHQgaW4gaW5wdXRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzcGxheVdpdGg/OiAoaXRlbTogRXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+IHwgbnVsbCkgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVsYXRpb25zIGNhbiBiZSBjaGFuZ2VkXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBvYmplY3QgdG8gd2hpY2ggYWxsIHJlbGF0aW9ucyBiZWxvbmcgdG9cbiAgICAgKi9cbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIG1haW4hOiBMaW5rYWJsZU9iamVjdCAmIHtwZXJtaXNzaW9ucz86IHt1cGRhdGU6IGJvb2xlYW59fTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFmdGVyIHJlbGF0aW9ucyB3ZXJlIHN1Y2Nlc3NmdWxseSBhZGRlZCBvbiB0aGUgc2VydmVyXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJzIGZvciBoaWVyYXJjaGljIHNlbGVjdG9yXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGhpZXJhcmNoaWNTZWxlY3RvckZpbHRlcnM/OiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBpbiBjYXNlIHdlIHByZWZlciBoaWVyYXJjaGljIHNlbGVjdGlvbiBvdmVyIGF1dG9jb21wbGV0ZSBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaGllcmFyY2hpY1NlbGVjdG9yQ29uZmlnPzogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW107XG5cbiAgICAvKipcbiAgICAgKiBMaW5rIG11dGF0aW9uIHNlbWFudGljXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG90aGVyTmFtZT86IHN0cmluZyB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0aW5nIHNlcnZpY2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZGF0YVNvdXJjZSE6IE5hdHVyYWxEYXRhU291cmNlPFBhZ2luYXRlZERhdGE8TGlua2FibGVPYmplY3Q+PjtcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGFibGUgY29sdW1uc1xuICAgICAqL1xuICAgIHB1YmxpYyBkaXNwbGF5ZWRDb2x1bW5zID0gWyduYW1lJ107XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFnZVNpemVPcHRpb25zID0gWzUsIDI1LCA1MCwgMTAwXTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdFBhZ2luYXRpb24gPSB7XG4gICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgcGFnZVNpemU6IDI1LFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPYnNlcnZhYmxlIHZhcmlhYmxlcy9vcHRpb25zIGZvciBsaXN0aW5nIHNlcnZpY2UgdXNhZ2UgYW5kIGFwb2xsbyB3YXRjaFF1ZXJ5XG4gICAgICovXG4gICAgcHJpdmF0ZSB2YXJpYWJsZXNNYW5hZ2VyID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8UXVlcnlWYXJpYWJsZXM+KCk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVtb3ZpbmcgPSBuZXcgU2V0PExpbmthYmxlT2JqZWN0PigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxpbmtNdXRhdGlvblNlcnZpY2U6IE5hdHVyYWxMaW5rTXV0YXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGhpZXJhcmNoaWNTZWxlY3RvckRpYWxvZzogTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvckRpYWxvZ1NlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGZpbHRlciB1c2VkIHRvIGZpbHRlciByZWxhdGlvbnNcbiAgICAgKlxuICAgICAqIFNvIGlmIHRoZSByZWxhdGlvbnMgYXJlIGZyb20gb25lIGFjdGlvbiAtPiB0byBtYW55IG9iamVjdGl2ZXMsIHRoZW4gdGhlIGZpbHRlciBtdXN0IGZpbHRlclxuICAgICAqIHRoZSBvYmplY3RpdmVzIHRoYXQgaGF2ZSBpbmRlZWQgYSByZWxhdGlvbiB0byB0aGUgcGFydGljdWxhciBhY3Rpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGZpbHRlcihmaWx0ZXI6IEV4dHJhY3RWYWxsPFRTZXJ2aWNlPlsnZmlsdGVyJ10pIHtcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgncmVsYXRpb25zLWZpbHRlcicsIHtmaWx0ZXI6IGZpbHRlcn0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgJiYgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmluY2x1ZGVzKCd1bmxpbmsnKSkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnBvcCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5jbHVkZXMoJ3VubGluaycpKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCgndW5saW5rJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbigpO1xuXG4gICAgICAgIC8vIEZvcmNlIGRpc2FibGVkIGlmIGNhbm5vdCB1cGRhdGUgb2JqZWN0XG4gICAgICAgIGlmICh0aGlzLm1haW4gJiYgdGhpcy5tYWluLnBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5tYWluLnBlcm1pc3Npb25zLnVwZGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVubGluayBhY3Rpb25cbiAgICAgKiBSZWZldGNoIHJlc3VsdCB0byBkaXNwbGF5IGl0IGluIHRhYmxlXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZVJlbGF0aW9uKHJlbGF0aW9uOiBMaW5rYWJsZU9iamVjdCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92aW5nLmFkZChyZWxhdGlvbik7XG5cbiAgICAgICAgdGhpcy5saW5rTXV0YXRpb25TZXJ2aWNlXG4gICAgICAgICAgICAudW5saW5rKHRoaXMubWFpbiwgcmVsYXRpb24sIHRoaXMub3RoZXJOYW1lKVxuICAgICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5yZW1vdmluZy5kZWxldGUocmVsYXRpb24pKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kYXRhU291cmNlPy5yZW1vdmUocmVsYXRpb24pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaW5rIGFjdGlvblxuICAgICAqIFJlZmV0Y2ggcmVzdWx0IHRvIGRpc3BsYXkgaXQgaW4gdGFibGVcbiAgICAgKiBUT0RPIDogY291bGQgbWF5YmUgdXNlIFwidXBkYXRlXCIgYXR0cmlidXRlIG9mIGFwb2xsby5tdXRhdGUgZnVuY3Rpb24gdG8gdXBkYXRlIHRhYmxlIGZhc3RlciAoYnV0IGhhcmQgdG8gZG8gaXQgaGVyZSlcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkUmVsYXRpb25zKHJlbGF0aW9uczogKExpbmthYmxlT2JqZWN0IHwgRXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+IHwgc3RyaW5nIHwgbnVsbClbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IHJlbGF0aW9uc1xuICAgICAgICAgICAgLmZpbHRlcigocmVsYXRpb24pOiByZWxhdGlvbiBpcyBMaW5rYWJsZU9iamVjdCA9PiAhIXJlbGF0aW9uICYmIHR5cGVvZiByZWxhdGlvbiA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICAubWFwKHJlbGF0aW9uID0+IHRoaXMubGlua011dGF0aW9uU2VydmljZS5saW5rKHRoaXMubWFpbiwgcmVsYXRpb24sIHRoaXMub3RoZXJOYW1lKSk7XG5cbiAgICAgICAgZm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdD8uY2xlYXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHBhZ2luYXRpb24oZXZlbnQ/OiBQYWdlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHBhZ2luYXRpb246IFBhZ2luYXRpb25JbnB1dCB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBldmVudCAmJlxuICAgICAgICAgICAgKGV2ZW50LnBhZ2VJbmRleCAhPT0gdGhpcy5kZWZhdWx0UGFnaW5hdGlvbi5wYWdlSW5kZXggfHwgZXZlbnQucGFnZVNpemUgIT09IHRoaXMuZGVmYXVsdFBhZ2luYXRpb24ucGFnZVNpemUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcGFnaW5hdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IGV2ZW50LnBhZ2VJbmRleCxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogZXZlbnQucGFnZVNpemUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgncGFnaW5hdGlvbicsIHtwYWdpbmF0aW9uOiBwYWdpbmF0aW9uID8gcGFnaW5hdGlvbiA6IHRoaXMuZGVmYXVsdFBhZ2luYXRpb259KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGlzcGxheUZuKCk6IChpdGVtOiBFeHRyYWN0VGFsbE9uZTxUU2VydmljZT4gfCBudWxsKSA9PiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5V2l0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheVdpdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKGl0ZW06IGFueSkgPT4gKGl0ZW0gPyBpdGVtLmZ1bGxOYW1lIHx8IGl0ZW0ubmFtZSA6ICcnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3Blbk5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3IoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEF0S2V5ID0gdGhpcy5nZXRTZWxlY3RLZXkoKTtcblxuICAgICAgICBpZiAoIXNlbGVjdEF0S2V5IHx8ICF0aGlzLmhpZXJhcmNoaWNTZWxlY3RvckNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB7fTtcblxuICAgICAgICBjb25zdCBoaWVyYXJjaGljQ29uZmlnOiBIaWVyYXJjaGljRGlhbG9nQ29uZmlnID0ge1xuICAgICAgICAgICAgaGllcmFyY2hpY0NvbmZpZzogdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JDb25maWcsXG4gICAgICAgICAgICBoaWVyYXJjaGljU2VsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgICAgIGhpZXJhcmNoaWNGaWx0ZXJzOiB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvckZpbHRlcnMsXG4gICAgICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvckRpYWxvZ1xuICAgICAgICAgICAgLm9wZW4oaGllcmFyY2hpY0NvbmZpZylcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdD8uaGllcmFyY2hpY1NlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHJlc3VsdC5oaWVyYXJjaGljU2VsZWN0aW9uW3NlbGVjdEF0S2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkUmVsYXRpb25zKHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdEtleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuaGllcmFyY2hpY1NlbGVjdG9yQ29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JDb25maWcuZmlsdGVyKGMgPT4gISFjLnNlbGVjdGFibGVBdEtleSlbMF0uc2VsZWN0YWJsZUF0S2V5O1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJib2R5XCI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TmFtZUNlbGwgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgIHt7IGdldERpc3BsYXlGbigpKGl0ZW0pIH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDx0YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgY2xhc3M9XCJuYXR1cmFsLXJvdy1jbGlja1wiIG1hdC10YWJsZT5cbiAgICAgICAgPHRyICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCIgbWF0LWhlYWRlci1yb3cgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+PC90cj5cbiAgICAgICAgPHRyICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCIgbWF0LXJvdz48L3RyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibmFtZVwiPlxuICAgICAgICAgICAgPHRoICptYXRIZWFkZXJDZWxsRGVmIGkxOG4gbWF0LWhlYWRlci1jZWxsPlRpdHJlPC90aD5cbiAgICAgICAgICAgIDx0ZCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgbWF0LWNlbGw+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogaXRlbX1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGUgPyBpdGVtVGVtcGxhdGUgOiBkZWZhdWx0TmFtZUNlbGxcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInVubGlua1wiPlxuICAgICAgICAgICAgPHRoICptYXRIZWFkZXJDZWxsRGVmIG1hdC1oZWFkZXItY2VsbD48L3RoPlxuICAgICAgICAgICAgPHRkICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBtYXQtY2VsbD5cbiAgICAgICAgICAgICAgICBAaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUmVsYXRpb24oZWxlbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlbW92aW5nLmhhcyhlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEaXNzb2NpZXJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbmF0dXJhbEljb249XCJsaW5rX29mZlwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdGFibGU+XG5cbiAgICBAaWYgKGRhdGFTb3VyY2UuZGF0YSAmJiAoZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCB8fCAwKSA+IChkYXRhU291cmNlLmRhdGEucGFnZVNpemUgfHwgMCkpIHtcbiAgICAgICAgPG1hdC1wYWdpbmF0b3JcbiAgICAgICAgICAgIChwYWdlKT1cInBhZ2luYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICBbbGVuZ3RoXT1cImRhdGFTb3VyY2UuZGF0YS5sZW5ndGggfHwgMFwiXG4gICAgICAgICAgICBbcGFnZUluZGV4XT1cImRhdGFTb3VyY2UuZGF0YS5wYWdlSW5kZXggfHwgMFwiXG4gICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgICAgICAgICBbcGFnZVNpemVdPVwiZGF0YVNvdXJjZS5kYXRhLnBhZ2VTaXplIHx8IDBcIlxuICAgICAgICAvPlxuICAgIH1cblxuICAgIEBpZiAoIWxvYWRpbmcgJiYgZGF0YVNvdXJjZS5kYXRhPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hcmdpbi12IG1hdC1ib2R5XCI+XG4gICAgICAgICAgICA8c3BhbiBpMThuPkF1Y3VuIHLDqXN1bHRhdDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiNDBcIiBjbGFzcz1cImxvYWRpbmdcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIC8+XG4gICAgfVxuPC9kaXY+XG5cbkBpZiAoIWRpc2FibGVkKSB7XG4gICAgQGlmIChoaWVyYXJjaGljU2VsZWN0b3JDb25maWcpIHtcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9wZW5OYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yKClcIiBjb2xvcj1cInByaW1hcnlcIiBtYXQtZmxhdC1idXR0b24+e3sgcGxhY2Vob2xkZXIgfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIDxuYXR1cmFsLXNlbGVjdFxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJhZGRSZWxhdGlvbnMoWyRldmVudF0pXCJcbiAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCIkYW55KGdldERpc3BsYXlGbigpKVwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImF1dG9jb21wbGV0ZVNlbGVjdG9yRmlsdGVyXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbc2VydmljZV09XCJzZXJ2aWNlXCJcbiAgICAgICAgICAgIFtzaG93SWNvbl09XCJmYWxzZVwiXG4gICAgICAgIC8+XG4gICAgfVxufVxuIl19
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3JlbGF0aW9ucy9yZWxhdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvcmVsYXRpb25zL3JlbGF0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxrQkFBa0IsRUFBWSxNQUFNLDZCQUE2QixDQUFDO0FBQzFFLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxpQkFBaUIsRUFBZ0IsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUMsNEJBQTRCLEVBQWtDLE1BQU0sc0NBQXNDLENBQUM7QUFNbkgsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFHekUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixD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R2pCLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3FCQUN6QjtvSkFtQjBDLE1BQU07c0JBQWhELFNBQVM7dUJBQUMsc0JBQXNCO2dCQUNDLFlBQVk7c0JBQTdDLFlBQVk7dUJBQUMsV0FBVztnQkFTZCxPQUFPO3NCQURqQixLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFtQlAsV0FBVztzQkFBMUIsS0FBSztnQkFLVSwwQkFBMEI7c0JBQXpDLEtBQUs7Z0JBS1UsV0FBVztzQkFBMUIsS0FBSztnQkFLVSxRQUFRO3NCQUF2QixLQUFLO2dCQUswQixJQUFJO3NCQUFuQyxLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFLRyxlQUFlO3NCQUF4QyxNQUFNO2dCQUtTLHlCQUF5QjtzQkFBeEMsS0FBSztnQkFLVSx3QkFBd0I7c0JBQXZDLEtBQUs7Z0JBS1UsU0FBUztzQkFBeEIsS0FBSztnQkF3Q0ssTUFBTTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0UGFnaW5hdG9yTW9kdWxlLCBQYWdlRXZlbnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXJ9IGZyb20gJy4uLy4uL2NsYXNzZXMvYWJzdHJhY3QtY29udHJvbGxlcic7XG5pbXBvcnQge05hdHVyYWxEYXRhU291cmNlLCBQYWdpbmF0ZWREYXRhfSBmcm9tICcuLi8uLi9jbGFzc2VzL2RhdGEtc291cmNlJztcbmltcG9ydCB7TmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlciwgUGFnaW5hdGlvbklucHV0LCBRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi4vLi4vY2xhc3Nlcy9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7SGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9ufSBmcm9tICcuLi8uLi9tb2R1bGVzL2hpZXJhcmNoaWMtc2VsZWN0b3IvY2xhc3Nlcy9oaWVyYXJjaGljLWZpbHRlcnMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0xpbmthYmxlT2JqZWN0LCBOYXR1cmFsTGlua011dGF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGluay1tdXRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9ufSBmcm9tICcuLi9oaWVyYXJjaGljLXNlbGVjdG9yL2NsYXNzZXMvaGllcmFyY2hpYy1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7SGllcmFyY2hpY0RpYWxvZ0NvbmZpZ30gZnJvbSAnLi4vaGllcmFyY2hpYy1zZWxlY3Rvci9oaWVyYXJjaGljLXNlbGVjdG9yLWRpYWxvZy9oaWVyYXJjaGljLXNlbGVjdG9yLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHtOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yRGlhbG9nU2VydmljZX0gZnJvbSAnLi4vaGllcmFyY2hpYy1zZWxlY3Rvci9oaWVyYXJjaGljLXNlbGVjdG9yLWRpYWxvZy9oaWVyYXJjaGljLXNlbGVjdG9yLWRpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbFNlbGVjdENvbXBvbmVudH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlJztcbmltcG9ydCB7RXh0cmFjdFRhbGxPbmUsIEV4dHJhY3RWYWxsfSBmcm9tICcuLi8uLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQge05hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICcuLi9pY29uL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge01hdFRvb2x0aXBNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge01hdFRhYmxlTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7ZmluYWxpemUsIGZvcmtKb2luLCB0YWtlVW50aWwsIHRhcH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQ3VzdG9tIHRlbXBsYXRlIHVzYWdlIDpcbiAqIDxuYXR1cmFsLXJlbGF0aW9ucyBbbWFpbl09XCJvd25lclwiIFtzZXJ2aWNlXT1cInN2Y1wiIFtmaWx0ZXJdPVwie31cIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBhbiBpdGVtXCI+XG4gKiAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICogICAgICAgICA8c3Bhbj57eyBpdGVtLnh4eCB9fTwvc3Bhbj5cbiAqICAgICA8L25nLXRlbXBsYXRlPlxuICogPC9uYXR1cmFsLXJlbGF0aW9ucz5cbiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25hdHVyYWwtcmVsYXRpb25zJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVsYXRpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vcmVsYXRpb25zLmNvbXBvbmVudC5zY3NzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBOYXR1cmFsSWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgTWF0UGFnaW5hdG9yTW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIE5hdHVyYWxTZWxlY3RDb21wb25lbnQsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFJlbGF0aW9uc0NvbXBvbmVudDxcbiAgICAgICAgVFNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2U8XG4gICAgICAgICAgICB1bmtub3duLFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgUGFnaW5hdGVkRGF0YTxMaW5rYWJsZU9iamVjdD4sXG4gICAgICAgICAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgICAgIHVua25vd24sXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICB1bmtub3duLFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgdW5rbm93bixcbiAgICAgICAgICAgIGFueVxuICAgICAgICA+LFxuICAgID5cbiAgICBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzXG57XG4gICAgQFZpZXdDaGlsZChOYXR1cmFsU2VsZWN0Q29tcG9uZW50KSBwcml2YXRlIHNlbGVjdD86IE5hdHVyYWxTZWxlY3RDb21wb25lbnQ8VFNlcnZpY2U+O1xuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIHB1YmxpYyBpdGVtVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgICNzZXJ2aWNlITogVFNlcnZpY2U7XG5cbiAgICBwdWJsaWMgZ2V0IHNlcnZpY2UoKTogVFNlcnZpY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy4jc2VydmljZTtcbiAgICB9XG5cbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSlcbiAgICBwdWJsaWMgc2V0IHNlcnZpY2Uoc2VydmljZTogVFNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy4jc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGl0ZW1zJCA9IHRoaXMuI3NlcnZpY2Uud2F0Y2hBbGwodGhpcy52YXJpYWJsZXNNYW5hZ2VyKS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICB0YXAoe1xuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTmF0dXJhbERhdGFTb3VyY2UoaXRlbXMkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGxhY2Vob2xkZXIgdXNlZCBpbiB0aGUgYnV0dG9uIHRvIGFkZCBhIG5ldyByZWxhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlciA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogRmlsdGVyIGZvciBhdXRvY29tcGxldGUgc2VsZWN0b3JcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYXV0b2NvbXBsZXRlU2VsZWN0b3JGaWx0ZXI/OiBFeHRyYWN0VmFsbDxUU2VydmljZT5bJ2ZpbHRlciddIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSB0aGUgcmVuZGVyaW5nIG9mIHRoZSBzZWxlY3RlZCBpdGVtIGFzIHRleHQgaW4gaW5wdXRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzcGxheVdpdGg/OiAoaXRlbTogRXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+IHwgbnVsbCkgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVsYXRpb25zIGNhbiBiZSBjaGFuZ2VkXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBvYmplY3QgdG8gd2hpY2ggYWxsIHJlbGF0aW9ucyBiZWxvbmcgdG9cbiAgICAgKi9cbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIG1haW4hOiBMaW5rYWJsZU9iamVjdCAmIHtwZXJtaXNzaW9ucz86IHt1cGRhdGU6IGJvb2xlYW59fTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFmdGVyIHJlbGF0aW9ucyB3ZXJlIHN1Y2Nlc3NmdWxseSBhZGRlZCBvbiB0aGUgc2VydmVyXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJzIGZvciBoaWVyYXJjaGljIHNlbGVjdG9yXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGhpZXJhcmNoaWNTZWxlY3RvckZpbHRlcnM/OiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBpbiBjYXNlIHdlIHByZWZlciBoaWVyYXJjaGljIHNlbGVjdGlvbiBvdmVyIGF1dG9jb21wbGV0ZSBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaGllcmFyY2hpY1NlbGVjdG9yQ29uZmlnPzogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW107XG5cbiAgICAvKipcbiAgICAgKiBMaW5rIG11dGF0aW9uIHNlbWFudGljXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG90aGVyTmFtZT86IHN0cmluZyB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0aW5nIHNlcnZpY2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZGF0YVNvdXJjZSE6IE5hdHVyYWxEYXRhU291cmNlPFBhZ2luYXRlZERhdGE8TGlua2FibGVPYmplY3Q+PjtcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGFibGUgY29sdW1uc1xuICAgICAqL1xuICAgIHB1YmxpYyBkaXNwbGF5ZWRDb2x1bW5zID0gWyduYW1lJ107XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFnZVNpemVPcHRpb25zID0gWzUsIDI1LCA1MCwgMTAwXTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdFBhZ2luYXRpb24gPSB7XG4gICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgcGFnZVNpemU6IDI1LFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPYnNlcnZhYmxlIHZhcmlhYmxlcy9vcHRpb25zIGZvciBsaXN0aW5nIHNlcnZpY2UgdXNhZ2UgYW5kIGFwb2xsbyB3YXRjaFF1ZXJ5XG4gICAgICovXG4gICAgcHJpdmF0ZSB2YXJpYWJsZXNNYW5hZ2VyID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8UXVlcnlWYXJpYWJsZXM+KCk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVtb3ZpbmcgPSBuZXcgU2V0PExpbmthYmxlT2JqZWN0PigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxpbmtNdXRhdGlvblNlcnZpY2U6IE5hdHVyYWxMaW5rTXV0YXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGhpZXJhcmNoaWNTZWxlY3RvckRpYWxvZzogTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvckRpYWxvZ1NlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGZpbHRlciB1c2VkIHRvIGZpbHRlciByZWxhdGlvbnNcbiAgICAgKlxuICAgICAqIFNvIGlmIHRoZSByZWxhdGlvbnMgYXJlIGZyb20gb25lIGFjdGlvbiAtPiB0byBtYW55IG9iamVjdGl2ZXMsIHRoZW4gdGhlIGZpbHRlciBtdXN0IGZpbHRlclxuICAgICAqIHRoZSBvYmplY3RpdmVzIHRoYXQgaGF2ZSBpbmRlZWQgYSByZWxhdGlvbiB0byB0aGUgcGFydGljdWxhciBhY3Rpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGZpbHRlcihmaWx0ZXI6IEV4dHJhY3RWYWxsPFRTZXJ2aWNlPlsnZmlsdGVyJ10pIHtcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgncmVsYXRpb25zLWZpbHRlcicsIHtmaWx0ZXI6IGZpbHRlcn0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgJiYgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmluY2x1ZGVzKCd1bmxpbmsnKSkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnBvcCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5jbHVkZXMoJ3VubGluaycpKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCgndW5saW5rJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbigpO1xuXG4gICAgICAgIC8vIEZvcmNlIGRpc2FibGVkIGlmIGNhbm5vdCB1cGRhdGUgb2JqZWN0XG4gICAgICAgIGlmICh0aGlzLm1haW4gJiYgdGhpcy5tYWluLnBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5tYWluLnBlcm1pc3Npb25zLnVwZGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVubGluayBhY3Rpb25cbiAgICAgKiBSZWZldGNoIHJlc3VsdCB0byBkaXNwbGF5IGl0IGluIHRhYmxlXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZVJlbGF0aW9uKHJlbGF0aW9uOiBMaW5rYWJsZU9iamVjdCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92aW5nLmFkZChyZWxhdGlvbik7XG5cbiAgICAgICAgdGhpcy5saW5rTXV0YXRpb25TZXJ2aWNlXG4gICAgICAgICAgICAudW5saW5rKHRoaXMubWFpbiwgcmVsYXRpb24sIHRoaXMub3RoZXJOYW1lKVxuICAgICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5yZW1vdmluZy5kZWxldGUocmVsYXRpb24pKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kYXRhU291cmNlPy5yZW1vdmUocmVsYXRpb24pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaW5rIGFjdGlvblxuICAgICAqIFJlZmV0Y2ggcmVzdWx0IHRvIGRpc3BsYXkgaXQgaW4gdGFibGVcbiAgICAgKiBUT0RPIDogY291bGQgbWF5YmUgdXNlIFwidXBkYXRlXCIgYXR0cmlidXRlIG9mIGFwb2xsby5tdXRhdGUgZnVuY3Rpb24gdG8gdXBkYXRlIHRhYmxlIGZhc3RlciAoYnV0IGhhcmQgdG8gZG8gaXQgaGVyZSlcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkUmVsYXRpb25zKHJlbGF0aW9uczogKExpbmthYmxlT2JqZWN0IHwgRXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+IHwgc3RyaW5nIHwgbnVsbClbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IHJlbGF0aW9uc1xuICAgICAgICAgICAgLmZpbHRlcigocmVsYXRpb24pOiByZWxhdGlvbiBpcyBMaW5rYWJsZU9iamVjdCA9PiAhIXJlbGF0aW9uICYmIHR5cGVvZiByZWxhdGlvbiA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICAubWFwKHJlbGF0aW9uID0+IHRoaXMubGlua011dGF0aW9uU2VydmljZS5saW5rKHRoaXMubWFpbiwgcmVsYXRpb24sIHRoaXMub3RoZXJOYW1lKSk7XG5cbiAgICAgICAgZm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdD8uY2xlYXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHBhZ2luYXRpb24oZXZlbnQ/OiBQYWdlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHBhZ2luYXRpb246IFBhZ2luYXRpb25JbnB1dCB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBldmVudCAmJlxuICAgICAgICAgICAgKGV2ZW50LnBhZ2VJbmRleCAhPT0gdGhpcy5kZWZhdWx0UGFnaW5hdGlvbi5wYWdlSW5kZXggfHwgZXZlbnQucGFnZVNpemUgIT09IHRoaXMuZGVmYXVsdFBhZ2luYXRpb24ucGFnZVNpemUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcGFnaW5hdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IGV2ZW50LnBhZ2VJbmRleCxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogZXZlbnQucGFnZVNpemUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgncGFnaW5hdGlvbicsIHtwYWdpbmF0aW9uOiBwYWdpbmF0aW9uID8gcGFnaW5hdGlvbiA6IHRoaXMuZGVmYXVsdFBhZ2luYXRpb259KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGlzcGxheUZuKCk6IChpdGVtOiBFeHRyYWN0VGFsbE9uZTxUU2VydmljZT4gfCBudWxsKSA9PiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5V2l0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheVdpdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKGl0ZW06IGFueSkgPT4gKGl0ZW0gPyBpdGVtLmZ1bGxOYW1lIHx8IGl0ZW0ubmFtZSA6ICcnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3Blbk5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3IoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEF0S2V5ID0gdGhpcy5nZXRTZWxlY3RLZXkoKTtcblxuICAgICAgICBpZiAoIXNlbGVjdEF0S2V5IHx8ICF0aGlzLmhpZXJhcmNoaWNTZWxlY3RvckNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB7fTtcblxuICAgICAgICBjb25zdCBoaWVyYXJjaGljQ29uZmlnOiBIaWVyYXJjaGljRGlhbG9nQ29uZmlnID0ge1xuICAgICAgICAgICAgaGllcmFyY2hpY0NvbmZpZzogdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JDb25maWcsXG4gICAgICAgICAgICBoaWVyYXJjaGljU2VsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgICAgIGhpZXJhcmNoaWNGaWx0ZXJzOiB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvckZpbHRlcnMsXG4gICAgICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvckRpYWxvZ1xuICAgICAgICAgICAgLm9wZW4oaGllcmFyY2hpY0NvbmZpZylcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdD8uaGllcmFyY2hpY1NlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHJlc3VsdC5oaWVyYXJjaGljU2VsZWN0aW9uW3NlbGVjdEF0S2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkUmVsYXRpb25zKHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdEtleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuaGllcmFyY2hpY1NlbGVjdG9yQ29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JDb25maWcuZmlsdGVyKGMgPT4gISFjLnNlbGVjdGFibGVBdEtleSlbMF0uc2VsZWN0YWJsZUF0S2V5O1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJib2R5XCI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TmFtZUNlbGwgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgIHt7IGdldERpc3BsYXlGbigpKGl0ZW0pIH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDx0YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgY2xhc3M9XCJuYXR1cmFsLXJvdy1jbGlja1wiIG1hdC10YWJsZT5cbiAgICAgICAgPHRyICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCIgbWF0LWhlYWRlci1yb3cgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+PC90cj5cbiAgICAgICAgPHRyICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCIgbWF0LXJvdz48L3RyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibmFtZVwiPlxuICAgICAgICAgICAgPHRoICptYXRIZWFkZXJDZWxsRGVmIGkxOG4gbWF0LWhlYWRlci1jZWxsPlRpdHJlPC90aD5cbiAgICAgICAgICAgIDx0ZCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgbWF0LWNlbGw+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogaXRlbX1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGUgPyBpdGVtVGVtcGxhdGUgOiBkZWZhdWx0TmFtZUNlbGxcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInVubGlua1wiPlxuICAgICAgICAgICAgPHRoICptYXRIZWFkZXJDZWxsRGVmIG1hdC1oZWFkZXItY2VsbD48L3RoPlxuICAgICAgICAgICAgPHRkICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBtYXQtY2VsbD5cbiAgICAgICAgICAgICAgICBAaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUmVsYXRpb24oZWxlbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlbW92aW5nLmhhcyhlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEaXNzb2NpZXJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbmF0dXJhbEljb249XCJsaW5rX29mZlwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdGFibGU+XG5cbiAgICBAaWYgKGRhdGFTb3VyY2UuZGF0YSAmJiAoZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCB8fCAwKSA+IChkYXRhU291cmNlLmRhdGEucGFnZVNpemUgfHwgMCkpIHtcbiAgICAgICAgPG1hdC1wYWdpbmF0b3JcbiAgICAgICAgICAgIChwYWdlKT1cInBhZ2luYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICBbbGVuZ3RoXT1cImRhdGFTb3VyY2UuZGF0YS5sZW5ndGggfHwgMFwiXG4gICAgICAgICAgICBbcGFnZUluZGV4XT1cImRhdGFTb3VyY2UuZGF0YS5wYWdlSW5kZXggfHwgMFwiXG4gICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgICAgICAgICBbcGFnZVNpemVdPVwiZGF0YVNvdXJjZS5kYXRhLnBhZ2VTaXplIHx8IDBcIlxuICAgICAgICAvPlxuICAgIH1cblxuICAgIEBpZiAoIWxvYWRpbmcgJiYgZGF0YVNvdXJjZS5kYXRhPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hcmdpbi12IG1hdC1ib2R5XCI+XG4gICAgICAgICAgICA8c3BhbiBpMThuPkF1Y3VuIHLDqXN1bHRhdDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiNDBcIiBjbGFzcz1cImxvYWRpbmdcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIC8+XG4gICAgfVxuPC9kaXY+XG5cbkBpZiAoIWRpc2FibGVkKSB7XG4gICAgQGlmIChoaWVyYXJjaGljU2VsZWN0b3JDb25maWcpIHtcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9wZW5OYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yKClcIiBjb2xvcj1cInByaW1hcnlcIiBtYXQtZmxhdC1idXR0b24+e3sgcGxhY2Vob2xkZXIgfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIDxuYXR1cmFsLXNlbGVjdFxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJhZGRSZWxhdGlvbnMoWyRldmVudF0pXCJcbiAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCIkYW55KGdldERpc3BsYXlGbigpKVwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImF1dG9jb21wbGV0ZVNlbGVjdG9yRmlsdGVyXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbc2VydmljZV09XCJzZXJ2aWNlXCJcbiAgICAgICAgICAgIFtzaG93SWNvbl09XCJmYWxzZVwiXG4gICAgICAgIC8+XG4gICAgfVxufVxuIl19
@@ -69,10 +69,10 @@ export class NaturalDropdownContainerComponent extends BasePortalOutlet {
69
69
  this.focusTrap.destroy();
70
70
  }
71
71
  }
72
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalDropdownContainerComponent, deps: [{ token: i0.ElementRef }, { token: i1.ConfigurableFocusTrapFactory }, { token: NATURAL_DROPDOWN_CONTAINER_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
73
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.2", type: NaturalDropdownContainerComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }, { propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div\n (@transformMenu.done)=\"onAnimationDone($event)\"\n [@transformMenu]=\"panelAnimationState\"\n class=\"natural-dropdown-container mat-elevation-z2\"\n role=\"menu\"\n tabindex=\"-1\"\n>\n <div class=\"natural-dropdown-container-content\">\n <ng-template cdkPortalOutlet />\n </div>\n\n @if (data.showValidateButton) {\n <div class=\"natural-dropdown-validate-button\">\n <button (click)=\"close()\" color=\"primary\" mat-raised-button i18n>Valider</button>\n </div>\n }\n</div>\n", styles: [".natural-dropdown-container{display:flex;flex-direction:column;border-radius:2px;height:100%}.natural-dropdown-container-content{flex:1;padding:5px;overflow:auto}.natural-dropdown-container .natural-dropdown-validate-button{flex:none;display:flex;flex-direction:row;justify-content:flex-end;margin:5px}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], animations: [naturalDropdownAnimations.transformMenu, naturalDropdownAnimations.fadeInItems], encapsulation: i0.ViewEncapsulation.None }); }
72
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalDropdownContainerComponent, deps: [{ token: i0.ElementRef }, { token: i1.ConfigurableFocusTrapFactory }, { token: NATURAL_DROPDOWN_CONTAINER_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
73
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: NaturalDropdownContainerComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }, { propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div\n (@transformMenu.done)=\"onAnimationDone($event)\"\n [@transformMenu]=\"panelAnimationState\"\n class=\"natural-dropdown-container mat-elevation-z2\"\n role=\"menu\"\n tabindex=\"-1\"\n>\n <div class=\"natural-dropdown-container-content\">\n <ng-template cdkPortalOutlet />\n </div>\n\n @if (data.showValidateButton) {\n <div class=\"natural-dropdown-validate-button\">\n <button (click)=\"close()\" color=\"primary\" mat-raised-button i18n>Valider</button>\n </div>\n }\n</div>\n", styles: [".natural-dropdown-container{display:flex;flex-direction:column;border-radius:2px;height:100%}.natural-dropdown-container-content{flex:1;padding:5px;overflow:auto}.natural-dropdown-container .natural-dropdown-validate-button{flex:none;display:flex;flex-direction:row;justify-content:flex-end;margin:5px}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], animations: [naturalDropdownAnimations.transformMenu, naturalDropdownAnimations.fadeInItems], encapsulation: i0.ViewEncapsulation.None }); }
74
74
  }
75
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalDropdownContainerComponent, decorators: [{
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalDropdownContainerComponent, decorators: [{
76
76
  type: Component,
77
77
  args: [{ encapsulation: ViewEncapsulation.None, preserveWhitespaces: false, animations: [naturalDropdownAnimations.transformMenu, naturalDropdownAnimations.fadeInItems], standalone: true, imports: [PortalModule, MatButtonModule], template: "<div\n (@transformMenu.done)=\"onAnimationDone($event)\"\n [@transformMenu]=\"panelAnimationState\"\n class=\"natural-dropdown-container mat-elevation-z2\"\n role=\"menu\"\n tabindex=\"-1\"\n>\n <div class=\"natural-dropdown-container-content\">\n <ng-template cdkPortalOutlet />\n </div>\n\n @if (data.showValidateButton) {\n <div class=\"natural-dropdown-validate-button\">\n <button (click)=\"close()\" color=\"primary\" mat-raised-button i18n>Valider</button>\n </div>\n }\n</div>\n", styles: [".natural-dropdown-container{display:flex;flex-direction:column;border-radius:2px;height:100%}.natural-dropdown-container-content{flex:1;padding:5px;overflow:auto}.natural-dropdown-container .natural-dropdown-validate-button{flex:none;display:flex;flex-direction:row;justify-content:flex-end;margin:5px}\n"] }]
78
78
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.ConfigurableFocusTrapFactory }, { type: undefined, decorators: [{
@@ -81,10 +81,10 @@ export class NaturalDropdownService {
81
81
  },
82
82
  ]);
83
83
  }
84
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalDropdownService, deps: [{ token: i1.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
85
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalDropdownService, providedIn: 'root' }); }
84
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalDropdownService, deps: [{ token: i1.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
85
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalDropdownService, providedIn: 'root' }); }
86
86
  }
87
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalDropdownService, decorators: [{
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalDropdownService, decorators: [{
88
88
  type: Injectable,
89
89
  args: [{
90
90
  providedIn: 'root',
@@ -37,10 +37,10 @@ export class FacetSelectorComponent {
37
37
  isDirty() {
38
38
  return true;
39
39
  }
40
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: FacetSelectorComponent, deps: [{ token: NATURAL_DROPDOWN_DATA }, { token: i1.NaturalDropdownRef }], target: i0.ɵɵFactoryTarget.Component }); }
41
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.2", type: FacetSelectorComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "@if (data.title) {\n <div class=\"dropdown-title mat-body-2\">{{ data.title }}</div>\n}\n<mat-nav-list>\n @for (facet of facets; track facet) {\n <mat-list-item (click)=\"selection = facet; close()\">\n <a>{{ facet.display }}</a>\n </mat-list-item>\n }\n</mat-nav-list>\n", styles: [".mat-nav-list{padding:0}.dropdown-title{padding:5px;font-variant:all-small-caps;font-size:18px;opacity:.7}\n"], dependencies: [{ kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }] }); }
40
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FacetSelectorComponent, deps: [{ token: NATURAL_DROPDOWN_DATA }, { token: i1.NaturalDropdownRef }], target: i0.ɵɵFactoryTarget.Component }); }
41
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: FacetSelectorComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "@if (data.title) {\n <div class=\"dropdown-title mat-body-2\">{{ data.title }}</div>\n}\n<mat-nav-list>\n @for (facet of facets; track facet) {\n <mat-list-item (click)=\"selection = facet; close()\">\n <a>{{ facet.display }}</a>\n </mat-list-item>\n }\n</mat-nav-list>\n", styles: [".mat-nav-list{padding:0}.dropdown-title{padding:5px;font-variant:all-small-caps;font-size:18px;opacity:.7}\n"], dependencies: [{ kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }] }); }
42
42
  }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: FacetSelectorComponent, decorators: [{
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FacetSelectorComponent, decorators: [{
44
44
  type: Component,
45
45
  args: [{ standalone: true, imports: [MatListModule], template: "@if (data.title) {\n <div class=\"dropdown-title mat-body-2\">{{ data.title }}</div>\n}\n<mat-nav-list>\n @for (facet of facets; track facet) {\n <mat-list-item (click)=\"selection = facet; close()\">\n <a>{{ facet.display }}</a>\n </mat-list-item>\n }\n</mat-nav-list>\n", styles: [".mat-nav-list{padding:0}.dropdown-title{padding:5px;font-variant:all-small-caps;font-size:18px;opacity:.7}\n"] }]
46
46
  }], ctorParameters: () => [{ type: undefined, decorators: [{
@@ -27,10 +27,10 @@ export class NaturalGroupComponent {
27
27
  this.innerSelections.splice(index, 1);
28
28
  this.selectionChange.emit(this.innerSelections);
29
29
  }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.2", type: NaturalGroupComponent, isStandalone: true, selector: "natural-group", inputs: { dropdownTitle: "dropdownTitle", placeholder: "placeholder", facets: "facets", selections: "selections" }, outputs: { selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "newValueInput", first: true, predicate: ["newValueInput"], descendants: true }], ngImport: i0, template: "@for (selection of innerSelections; track selection) {\n <natural-input\n (cleared)=\"removeInput($index)\"\n (selectionChange)=\"updateInput($event, $index)\"\n [facets]=\"facets\"\n [selection]=\"selection\"\n />\n}\n\n<natural-input\n #newValueInput\n (selectionChange)=\"addInput($event)\"\n [facets]=\"facets\"\n [placeholder]=\"placeholder\"\n tabIndex=\"10\"\n cdkFocusInitial\n [dropdownTitle]=\"dropdownTitle\"\n/>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap}:host natural-input{flex:auto;display:inline-flex;margin-right:10px;margin-bottom:10px}:host natural-input:last-of-type{flex:1;min-width:250px}\n"], dependencies: [{ kind: "component", type: NaturalInputComponent, selector: "natural-input", inputs: ["placeholder", "searchFieldName", "selection", "facets", "dropdownTitle"], outputs: ["selectionChange", "cleared"] }] }); }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: NaturalGroupComponent, isStandalone: true, selector: "natural-group", inputs: { dropdownTitle: "dropdownTitle", placeholder: "placeholder", facets: "facets", selections: "selections" }, outputs: { selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "newValueInput", first: true, predicate: ["newValueInput"], descendants: true }], ngImport: i0, template: "@for (selection of innerSelections; track selection) {\n <natural-input\n (cleared)=\"removeInput($index)\"\n (selectionChange)=\"updateInput($event, $index)\"\n [facets]=\"facets\"\n [selection]=\"selection\"\n />\n}\n\n<natural-input\n #newValueInput\n (selectionChange)=\"addInput($event)\"\n [facets]=\"facets\"\n [placeholder]=\"placeholder\"\n tabIndex=\"10\"\n cdkFocusInitial\n [dropdownTitle]=\"dropdownTitle\"\n/>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap}:host natural-input{flex:auto;display:inline-flex;margin-right:10px;margin-bottom:10px}:host natural-input:last-of-type{flex:1;min-width:250px}\n"], dependencies: [{ kind: "component", type: NaturalInputComponent, selector: "natural-input", inputs: ["placeholder", "searchFieldName", "selection", "facets", "dropdownTitle"], outputs: ["selectionChange", "cleared"] }] }); }
32
32
  }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalGroupComponent, decorators: [{
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalGroupComponent, decorators: [{
34
34
  type: Component,
35
35
  args: [{ selector: 'natural-group', standalone: true, imports: [NaturalInputComponent], template: "@for (selection of innerSelections; track selection) {\n <natural-input\n (cleared)=\"removeInput($index)\"\n (selectionChange)=\"updateInput($event, $index)\"\n [facets]=\"facets\"\n [selection]=\"selection\"\n />\n}\n\n<natural-input\n #newValueInput\n (selectionChange)=\"addInput($event)\"\n [facets]=\"facets\"\n [placeholder]=\"placeholder\"\n tabIndex=\"10\"\n cdkFocusInitial\n [dropdownTitle]=\"dropdownTitle\"\n/>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap}:host natural-input{flex:auto;display:inline-flex;margin-right:10px;margin-bottom:10px}:host natural-input:last-of-type{flex:1;min-width:250px}\n"] }]
36
36
  }], propDecorators: { newValueInput: [{
@@ -306,10 +306,10 @@ export class NaturalInputComponent {
306
306
  }
307
307
  return selection;
308
308
  }
309
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalInputComponent, deps: [{ token: i0.ElementRef }, { token: i1.NaturalDropdownService }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Component }); }
310
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.2", type: NaturalInputComponent, isStandalone: true, selector: "natural-input", inputs: { placeholder: "placeholder", searchFieldName: "searchFieldName", selection: "selection", facets: "facets", dropdownTitle: "dropdownTitle" }, outputs: { selectionChange: "selectionChange", cleared: "cleared" }, host: { listeners: { "focus": "focus()" } }, viewQueries: [{ propertyName: "ripple", first: true, predicate: MatRipple, descendants: true, static: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<!-- click condition should match to allow click action only when no other button is visible -->\n<mat-form-field #field matRipple (click)=\"!selection && !(facet && !selection) ? openDropdown() : null\">\n @if (facet) {\n <mat-label>{{ facet.display }}</mat-label>\n }\n @if (!facet) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n\n <input\n #input\n (blur)=\"search($event)\"\n (keydown.enter)=\"search($event)\"\n [attr.size]=\"length\"\n [errorStateMatcher]=\"errorMatcher\"\n [formControl]=\"formCtrl\"\n [readonly]=\"(isDropdown() && !!selection) || isFlag()\"\n autocomplete=\"off\"\n matInput\n type=\"text\"\n />\n\n @if (!facet && !selection) {\n <mat-icon naturalIcon=\"search\" matIconPrefix />\n }\n\n @if (selection) {\n <button (click)=\"clear()\" mat-icon-button matIconSuffix>\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n\n @if (facet && !selection) {\n <button (click)=\"clear()\" mat-icon-button matIconSuffix>\n <mat-icon naturalIcon=\"undo\" />\n </button>\n }\n</mat-form-field>\n<div class=\"hide\">{{ formCtrl.value ? formCtrl.value : facet ? facet.display : placeholder }}</div>\n", styles: [":host{position:relative;overflow:hidden;border-top-left-radius:4px;border-top-right-radius:4px;display:flex;flex-direction:column}:host .hide{color:transparent;height:0;margin:0 50px 0 10px;font-size:inherit;white-space:nowrap;font-family:Roboto,Helvetica Neue,sans-serif}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i3.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.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: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }] }); }
309
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalInputComponent, deps: [{ token: i0.ElementRef }, { token: i1.NaturalDropdownService }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Component }); }
310
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: NaturalInputComponent, isStandalone: true, selector: "natural-input", inputs: { placeholder: "placeholder", searchFieldName: "searchFieldName", selection: "selection", facets: "facets", dropdownTitle: "dropdownTitle" }, outputs: { selectionChange: "selectionChange", cleared: "cleared" }, host: { listeners: { "focus": "focus()" } }, viewQueries: [{ propertyName: "ripple", first: true, predicate: MatRipple, descendants: true, static: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<!-- click condition should match to allow click action only when no other button is visible -->\n<mat-form-field #field matRipple (click)=\"!selection && !(facet && !selection) ? openDropdown() : null\">\n @if (facet) {\n <mat-label>{{ facet.display }}</mat-label>\n }\n @if (!facet) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n\n <input\n #input\n (blur)=\"search($event)\"\n (keydown.enter)=\"search($event)\"\n [attr.size]=\"length\"\n [errorStateMatcher]=\"errorMatcher\"\n [formControl]=\"formCtrl\"\n [readonly]=\"(isDropdown() && !!selection) || isFlag()\"\n autocomplete=\"off\"\n matInput\n type=\"text\"\n />\n\n @if (!facet && !selection) {\n <mat-icon naturalIcon=\"search\" matIconPrefix />\n }\n\n @if (selection) {\n <button (click)=\"clear()\" mat-icon-button matIconSuffix>\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n\n @if (facet && !selection) {\n <button (click)=\"clear()\" mat-icon-button matIconSuffix>\n <mat-icon naturalIcon=\"undo\" />\n </button>\n }\n</mat-form-field>\n<div class=\"hide\">{{ formCtrl.value ? formCtrl.value : facet ? facet.display : placeholder }}</div>\n", styles: [":host{position:relative;overflow:hidden;border-top-left-radius:4px;border-top-right-radius:4px;display:flex;flex-direction:column}:host .hide{color:transparent;height:0;margin:0 50px 0 10px;font-size:inherit;white-space:nowrap;font-family:Roboto,Helvetica Neue,sans-serif}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i3.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.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: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }] }); }
311
311
  }
312
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalInputComponent, decorators: [{
312
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NaturalInputComponent, decorators: [{
313
313
  type: Component,
314
314
  args: [{ selector: 'natural-input', standalone: true, imports: [
315
315
  MatFormFieldModule,