@igo2/integration 18.0.0-next.1 → 18.0.0-next.11

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 (84) hide show
  1. package/esm2022/lib/about/about-tool/about-tool.component.mjs +4 -4
  2. package/esm2022/lib/about/about.module.mjs +5 -5
  3. package/esm2022/lib/analytics/analytics-listener.service.mjs +9 -5
  4. package/esm2022/lib/catalog/catalog-browser-tool/catalog-browser-tool.component.mjs +8 -4
  5. package/esm2022/lib/catalog/catalog-browser-tool/catalog-browser-tool.module.mjs +5 -5
  6. package/esm2022/lib/catalog/catalog-library-tool/catalog-library-tool.component.mjs +4 -4
  7. package/esm2022/lib/catalog/catalog-library-tool/catalog-library-tool.module.mjs +5 -5
  8. package/esm2022/lib/catalog/catalog.module.mjs +5 -5
  9. package/esm2022/lib/catalog/catalog.state.mjs +4 -4
  10. package/esm2022/lib/context/context-editor-tool/context-editor-tool.component.mjs +4 -4
  11. package/esm2022/lib/context/context-manager-tool/context-manager-tool.component.mjs +4 -4
  12. package/esm2022/lib/context/context-permission-manager-tool/context-permission-manager-tool.component.mjs +4 -4
  13. package/esm2022/lib/context/context-share-tool/context-share-tool.component.mjs +4 -4
  14. package/esm2022/lib/context/context.module.mjs +5 -5
  15. package/esm2022/lib/context/context.state.mjs +4 -4
  16. package/esm2022/lib/directions/directions-tool/directions-tool.component.mjs +6 -6
  17. package/esm2022/lib/directions/directions.module.mjs +5 -5
  18. package/esm2022/lib/directions/directions.state.mjs +9 -21
  19. package/esm2022/lib/draw/draw.module.mjs +5 -5
  20. package/esm2022/lib/draw/draw.state.mjs +6 -6
  21. package/esm2022/lib/draw/drawing-tool/drawing-tool.component.mjs +4 -4
  22. package/esm2022/lib/draw/drawing-tool/drawing-tool.module.mjs +5 -5
  23. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  24. package/esm2022/lib/filter/active-ogc-filter-tool/active-ogc-filter-tool.component.mjs +7 -7
  25. package/esm2022/lib/filter/active-time-filter-tool/active-time-filter-tool.component.mjs +7 -7
  26. package/esm2022/lib/filter/filter.module.mjs +5 -5
  27. package/esm2022/lib/filter/ogc-filter-tool/ogc-filter-tool.component.mjs +4 -4
  28. package/esm2022/lib/filter/spatial-filter-tool/spatial-filter-tool.component.mjs +106 -106
  29. package/esm2022/lib/filter/time-filter-tool/time-filter-tool.component.mjs +4 -4
  30. package/esm2022/lib/geometry-form/data-issue-reporter-tool/data-issue-reporter-tool.component.mjs +10 -6
  31. package/esm2022/lib/geometry-form/geometry-form.module.mjs +5 -5
  32. package/esm2022/lib/import-export/import-export-tool/import-export-tool.component.mjs +4 -4
  33. package/esm2022/lib/import-export/import-export.module.mjs +5 -5
  34. package/esm2022/lib/import-export/import-export.state.mjs +4 -4
  35. package/esm2022/lib/integration.module.mjs +5 -5
  36. package/esm2022/lib/map/advanced-map-tool/advanced-coordinates/advanced-coordinates.component.mjs +4 -4
  37. package/esm2022/lib/map/advanced-map-tool/advanced-map-tool.component.mjs +12 -6
  38. package/esm2022/lib/map/advanced-map-tool/advanced-swipe/advanced-swipe.component.mjs +23 -23
  39. package/esm2022/lib/map/layer-list-tool.state.mjs +4 -4
  40. package/esm2022/lib/map/map-details-tool/map-details-tool.component.mjs +50 -21
  41. package/esm2022/lib/map/map-legend/map-legend-tool.component.mjs +9 -9
  42. package/esm2022/lib/map/map-proximity-tool/map-proximity-tool.component.mjs +4 -4
  43. package/esm2022/lib/map/map-proximity.state.mjs +10 -11
  44. package/esm2022/lib/map/map-tool/map-tool.component.mjs +50 -14
  45. package/esm2022/lib/map/map-tools/map-tools.component.mjs +58 -25
  46. package/esm2022/lib/map/map.module.mjs +5 -5
  47. package/esm2022/lib/map/map.state.mjs +4 -6
  48. package/esm2022/lib/measure/measure.module.mjs +5 -5
  49. package/esm2022/lib/measure/measure.state.mjs +7 -6
  50. package/esm2022/lib/measure/measurer-tool/measurer-tool.component.mjs +4 -4
  51. package/esm2022/lib/measure/measurer-tool/measurer-tool.module.mjs +5 -5
  52. package/esm2022/lib/print/print-tool/print-tool.component.mjs +4 -4
  53. package/esm2022/lib/print/print.module.mjs +5 -5
  54. package/esm2022/lib/search/query.state.mjs +4 -4
  55. package/esm2022/lib/search/search-bar/search-bar-binding.directive.mjs +4 -4
  56. package/esm2022/lib/search/search-bar/search-bar.module.mjs +5 -5
  57. package/esm2022/lib/search/search-results-tool/search-results-tool.component.mjs +4 -4
  58. package/esm2022/lib/search/search-results-tool/search-results-tool.module.mjs +5 -5
  59. package/esm2022/lib/search/search.module.mjs +5 -5
  60. package/esm2022/lib/search/search.state.mjs +5 -5
  61. package/esm2022/lib/storage/storage.state.mjs +4 -4
  62. package/esm2022/lib/tool/tool.state.mjs +4 -4
  63. package/esm2022/lib/workspace/shared/edition-actions.service.mjs +4 -4
  64. package/esm2022/lib/workspace/shared/feature-actions.service.mjs +4 -4
  65. package/esm2022/lib/workspace/shared/wfs-actions.service.mjs +4 -4
  66. package/esm2022/lib/workspace/shared/workspace.utils.mjs +1 -1
  67. package/esm2022/lib/workspace/workspace-button/workspace-button.component.mjs +7 -6
  68. package/esm2022/lib/workspace/workspace.module.mjs +5 -5
  69. package/esm2022/lib/workspace/workspace.state.mjs +4 -4
  70. package/fesm2022/igo2-integration.mjs +525 -434
  71. package/fesm2022/igo2-integration.mjs.map +1 -1
  72. package/lib/directions/directions-tool/directions-tool.component.d.ts +3 -3
  73. package/lib/directions/directions.state.d.ts +2 -2
  74. package/lib/environment/environment.interface.d.ts +2 -1
  75. package/lib/filter/spatial-filter-tool/spatial-filter-tool.component.d.ts +4 -6
  76. package/lib/map/advanced-map-tool/advanced-swipe/advanced-swipe.component.d.ts +5 -6
  77. package/lib/map/map-details-tool/map-details-tool.component.d.ts +12 -4
  78. package/lib/map/map-legend/map-legend-tool.component.d.ts +4 -4
  79. package/lib/map/map-proximity.state.d.ts +4 -3
  80. package/lib/map/map-tool/map-tool.component.d.ts +14 -3
  81. package/lib/map/map-tools/map-tools.component.d.ts +15 -6
  82. package/lib/tool/tool.state.d.ts +2 -1
  83. package/lib/workspace/workspace-button/workspace-button.component.d.ts +4 -4
  84. package/package.json +4 -4
@@ -5,7 +5,7 @@ import { MatIconModule } from '@angular/material/icon';
5
5
  import { MatListModule } from '@angular/material/list';
6
6
  import { ToolComponent } from '@igo2/common/tool';
7
7
  import { IgoLanguageModule } from '@igo2/core/language';
8
- import { LayerLegendListBindingDirective, LayerLegendListComponent, SearchSourceService, sourceCanSearch } from '@igo2/geo';
8
+ import { LayerLegendListBindingDirective, LayerLegendListComponent, SearchSourceService, isBaseLayer, sourceCanSearch } from '@igo2/geo';
9
9
  import { BehaviorSubject, ReplaySubject, combineLatest } from 'rxjs';
10
10
  import { debounceTime, map } from 'rxjs/operators';
11
11
  import { ToolState } from './../../tool/tool.state';
@@ -37,10 +37,10 @@ let MapLegendToolComponent = class MapLegendToolComponent {
37
37
  return this.mapState.map;
38
38
  }
39
39
  get visibleOrInRangeLayers$() {
40
- return this.layers$.pipe(map((layers) => layers.filter((layer) => layer.visible$.value && layer.isInResolutionsRange$.value)));
40
+ return this.layers$.pipe(map((layers) => layers.filter((layer) => layer.displayed)));
41
41
  }
42
42
  get visibleLayers$() {
43
- return this.layers$.pipe(map((layers) => layers.filter((layer) => layer.visible$.value)));
43
+ return this.layers$.pipe(map((layers) => layers.filter((layer) => layer.visible)));
44
44
  }
45
45
  get excludeBaseLayers() {
46
46
  return this.layerListControls.excludeBaseLayers || false;
@@ -66,13 +66,13 @@ let MapLegendToolComponent = class MapLegendToolComponent {
66
66
  }
67
67
  ngOnInit() {
68
68
  this.resolution$$ = combineLatest([
69
- this.map.layers$,
69
+ this.map.layerController.all$,
70
70
  this.map.viewController.resolution$
71
71
  ])
72
72
  .pipe(debounceTime(10))
73
73
  .subscribe((bunch) => {
74
74
  this.layers$.next(bunch[0].filter((layer) => layer.showInLayerList !== false &&
75
- (!this.excludeBaseLayers || !layer.baseLayer)));
75
+ (!this.excludeBaseLayers || !isBaseLayer(layer))));
76
76
  });
77
77
  if (this.allowShowAllLegends) {
78
78
  this.mapState.showAllLegendsValue =
@@ -125,8 +125,8 @@ let MapLegendToolComponent = class MapLegendToolComponent {
125
125
  contextEmit() {
126
126
  this.toolState.toolbox.activateTool('contextManager');
127
127
  }
128
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MapLegendToolComponent, deps: [{ token: i1.MapState }, { token: i2.ToolState }, { token: i3.SearchSourceService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
129
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: MapLegendToolComponent, isStandalone: true, selector: "igo-map-legend-tool", inputs: { updateLegendOnResolutionChange: "updateLegendOnResolutionChange", layerAdditionAllowed: "layerAdditionAllowed", allowShowAllLegends: "allowShowAllLegends", showAllLegendsValue: "showAllLegendsValue", layerListControls: "layerListControls" }, ngImport: i0, template: "<igo-layer-legend-list\n *ngIf=\"showAllLegend()\"\n igoLayerLegendListBinding\n [excludeBaseLayers]=\"excludeBaseLayers\"\n [allowShowAllLegends]=\"allowShowAllLegends\"\n [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\n [showAllLegendsValue]=\"showAllLegendsValue$ | async\"\n (allLegendsShown)=\"onShowAllLegends($event)\"\n>\n</igo-layer-legend-list>\n<ng-template\n *ngIf=\"(layers$ | async).length !== 0; else emptyLayers\"\n></ng-template>\n\n<p\n class=\"map-empty mat-typography\"\n *ngIf=\"\n !allowShowAllLegends &&\n (layers$ | async).length !== 0 &&\n (visibleOrInRangeLayers$ | async).length === 0\n \"\n>\n {{\n (visibleLayers$ | async).length\n ? ('igo.integration.mapTool.noLayersInRange' | translate)\n : ('igo.integration.mapTool.noLayersVisible' | translate)\n }}\n</p>\n\n<ng-template #emptyLayers>\n <mat-list *ngIf=\"delayedShowEmptyMapContent\">\n <p class=\"map-empty mat-typography\">\n {{ 'igo.integration.mapTool.empty' | translate }}\n </p>\n <p\n *ngIf=\"\n layerAdditionAllowed &&\n (searchToolInToolbar || catalogToolInToolbar || contextToolInToolbar)\n \"\n class=\"map-empty mat-typography\"\n >\n {{ 'igo.integration.mapTool.customize' | translate }}\n </p>\n\n <mat-list-item *ngIf=\"layerAdditionAllowed && searchToolInToolbar\">\n <mat-icon matListItemIcon>search</mat-icon>\n <span\n matListItemTitle\n class=\"search-tool mat-typography\"\n (click)=\"searchEmit()\"\n >\n {{ 'igo.integration.mapTool.search-tool' | translate }}\n </span>\n </mat-list-item>\n <mat-list-item *ngIf=\"layerAdditionAllowed && catalogToolInToolbar\">\n <mat-icon matListItemIcon>library_add</mat-icon>\n <span\n matListItemTitle\n class=\"catalog-tool mat-typography\"\n (click)=\"catalogEmit()\"\n >\n {{ 'igo.integration.mapTool.catalog-tool' | translate }}\n </span>\n </mat-list-item>\n <mat-list-item *ngIf=\"layerAdditionAllowed && contextToolInToolbar\">\n <mat-icon matListItemIcon>star</mat-icon>\n <span\n matListItemTitle\n class=\"context-tool mat-typography\"\n (click)=\"contextEmit()\"\n >\n {{ 'igo.integration.mapTool.context-tool' | translate }}\n </span>\n </mat-list-item>\n </mat-list>\n</ng-template>\n", styles: [":host .map-empty,:host .search-tool,:host .catalog-tool,:host .context-tool{margin:10px}:host .map-empty{text-align:justify}:host .search-tool,:host .catalog-tool,:host .context-tool{cursor:pointer}:host mat-list mat-list-item h4{font-weight:700}:host mat-list-item ::ng-deep .mdc-list-item__primary-text{font-size:smaller}:host mat-list.mat-mdc-list-base mat-list-item.mat-mdc-list-item ::ng-deep div.mdc-list-item__content div.mdc-list-item__primary-text{padding-left:5px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LayerLegendListComponent, selector: "igo-layer-legend-list", inputs: ["layers", "excludeBaseLayers", "updateLegendOnResolutionChange", "allowShowAllLegends", "showAllLegendsValue"], outputs: ["allLegendsShown"] }, { kind: "directive", type: LayerLegendListBindingDirective, selector: "[igoLayerLegendListBinding]" }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i4.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i4.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i4.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
128
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapLegendToolComponent, deps: [{ token: i1.MapState }, { token: i2.ToolState }, { token: i3.SearchSourceService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
129
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapLegendToolComponent, isStandalone: true, selector: "igo-map-legend-tool", inputs: { updateLegendOnResolutionChange: "updateLegendOnResolutionChange", layerAdditionAllowed: "layerAdditionAllowed", allowShowAllLegends: "allowShowAllLegends", showAllLegendsValue: "showAllLegendsValue", layerListControls: "layerListControls" }, ngImport: i0, template: "<igo-layer-legend-list\n *ngIf=\"showAllLegend()\"\n igoLayerLegendListBinding\n [excludeBaseLayers]=\"excludeBaseLayers\"\n [allowShowAllLegends]=\"allowShowAllLegends\"\n [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\n [showAllLegendsValue]=\"showAllLegendsValue$ | async\"\n (allLegendsShown)=\"onShowAllLegends($event)\"\n>\n</igo-layer-legend-list>\n<ng-template\n *ngIf=\"(layers$ | async).length !== 0; else emptyLayers\"\n></ng-template>\n\n<p\n class=\"map-empty mat-typography\"\n *ngIf=\"\n !allowShowAllLegends &&\n (layers$ | async).length !== 0 &&\n (visibleOrInRangeLayers$ | async).length === 0\n \"\n>\n {{\n (visibleLayers$ | async).length\n ? ('igo.integration.mapTool.noLayersInRange' | translate)\n : ('igo.integration.mapTool.noLayersVisible' | translate)\n }}\n</p>\n\n<ng-template #emptyLayers>\n <mat-list *ngIf=\"delayedShowEmptyMapContent\">\n <p class=\"map-empty mat-typography\">\n {{ 'igo.integration.mapTool.empty' | translate }}\n </p>\n <p\n *ngIf=\"\n layerAdditionAllowed &&\n (searchToolInToolbar || catalogToolInToolbar || contextToolInToolbar)\n \"\n class=\"map-empty mat-typography\"\n >\n {{ 'igo.integration.mapTool.customize' | translate }}\n </p>\n\n <mat-list-item *ngIf=\"layerAdditionAllowed && searchToolInToolbar\">\n <mat-icon matListItemIcon>search</mat-icon>\n <span\n matListItemTitle\n class=\"search-tool mat-typography\"\n (click)=\"searchEmit()\"\n >\n {{ 'igo.integration.mapTool.search-tool' | translate }}\n </span>\n </mat-list-item>\n <mat-list-item *ngIf=\"layerAdditionAllowed && catalogToolInToolbar\">\n <mat-icon matListItemIcon>library_add</mat-icon>\n <span\n matListItemTitle\n class=\"catalog-tool mat-typography\"\n (click)=\"catalogEmit()\"\n >\n {{ 'igo.integration.mapTool.catalog-tool' | translate }}\n </span>\n </mat-list-item>\n <mat-list-item *ngIf=\"layerAdditionAllowed && contextToolInToolbar\">\n <mat-icon matListItemIcon>star</mat-icon>\n <span\n matListItemTitle\n class=\"context-tool mat-typography\"\n (click)=\"contextEmit()\"\n >\n {{ 'igo.integration.mapTool.context-tool' | translate }}\n </span>\n </mat-list-item>\n </mat-list>\n</ng-template>\n", styles: [":host .map-empty,:host .search-tool,:host .catalog-tool,:host .context-tool{margin:10px}:host .map-empty{text-align:justify}:host .search-tool,:host .catalog-tool,:host .context-tool{cursor:pointer}:host mat-list mat-list-item h4{font-weight:700}:host mat-list-item ::ng-deep .mdc-list-item__primary-text{font-size:smaller}:host mat-list.mat-mdc-list-base mat-list-item.mat-mdc-list-item ::ng-deep div.mdc-list-item__content div.mdc-list-item__primary-text{padding-left:5px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LayerLegendListComponent, selector: "igo-layer-legend-list", inputs: ["layers", "excludeBaseLayers", "updateLegendOnResolutionChange", "allowShowAllLegends", "showAllLegendsValue"], outputs: ["allLegendsShown"] }, { kind: "directive", type: LayerLegendListBindingDirective, selector: "[igoLayerLegendListBinding]" }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i4.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i4.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i4.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
130
130
  };
131
131
  MapLegendToolComponent = __decorate([
132
132
  ToolComponent({
@@ -140,7 +140,7 @@ MapLegendToolComponent = __decorate([
140
140
  ChangeDetectorRef])
141
141
  ], MapLegendToolComponent);
142
142
  export { MapLegendToolComponent };
143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MapLegendToolComponent, decorators: [{
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapLegendToolComponent, decorators: [{
144
144
  type: Component,
145
145
  args: [{ selector: 'igo-map-legend-tool', standalone: true, imports: [
146
146
  NgIf,
@@ -162,4 +162,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
162
162
  }], layerListControls: [{
163
163
  type: Input
164
164
  }] } });
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWxlZ2VuZC10b29sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ludGVncmF0aW9uL3NyYy9saWIvbWFwL21hcC1sZWdlbmQvbWFwLWxlZ2VuZC10b29sLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ludGVncmF0aW9uL3NyYy9saWIvbWFwL21hcC1sZWdlbmQvbWFwLWxlZ2VuZC10b29sLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULEtBQUssRUFHTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBR0wsK0JBQStCLEVBQy9CLHdCQUF3QixFQUV4QixtQkFBbUIsRUFDbkIsZUFBZSxFQUNoQixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQ0wsZUFBZSxFQUVmLGFBQWEsRUFFYixhQUFhLEVBQ2QsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBc0JuQyxJQUFNLHNCQUFzQixHQUE1QixNQUFNLHNC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QUFDO0lBQ2pELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDeEQsQ0FBQzt1R0FoSlUsc0JBQXNCOzJGQUF0QixzQkFBc0IsMlVDdkRuQyxtM0VBNEVBLHNoQkQ5QkksSUFBSSw2RkFDSix3QkFBd0IseU5BQ3hCLCtCQUErQix1RUFDL0IsYUFBYSx5YkFDYixhQUFhLCtLQUNiLFNBQVMsNkNBQ1QsaUJBQWlCOztBQUdSLHNCQUFzQjtJQXBCbEMsYUFBYSxDQUFDO1FBQ2IsSUFBSSxFQUFFLFdBQVc7UUFDakIsS0FBSyxFQUFFLDhCQUE4QjtRQUNyQyxJQUFJLEVBQUUsc0JBQXNCO0tBQzdCLENBQUM7cUNBOEVvQixRQUFRO1FBQ1AsU0FBUztRQUNDLG1CQUFtQjtRQUNqQyxpQkFBaUI7R0FqRXZCLHNCQUFzQixDQWlKbEM7OzJGQWpKWSxzQkFBc0I7a0JBZmxDLFNBQVM7K0JBQ0UscUJBQXFCLGNBR25CLElBQUksV0FDUDt3QkFDUCxJQUFJO3dCQUNKLHdCQUF3Qjt3QkFDeEIsK0JBQStCO3dCQUMvQixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsU0FBUzt3QkFDVCxpQkFBaUI7cUJBQ2xCO3VLQVlRLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFFRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuXG5pbXBvcnQgeyBUb29sQ29tcG9uZW50IH0gZnJvbSAnQGlnbzIvY29tbW9uL3Rvb2wnO1xuaW1wb3J0IHsgSWdvTGFuZ3VhZ2VNb2R1bGUgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcbmltcG9ydCB7XG4gIElnb01hcCxcbiAgTGF5ZXIsXG4gIExheWVyTGVnZW5kTGlzdEJpbmRpbmdEaXJlY3RpdmUsXG4gIExheWVyTGVnZW5kTGlzdENvbXBvbmVudCxcbiAgTGF5ZXJMaXN0Q29udHJvbHNPcHRpb25zLFxuICBTZWFyY2hTb3VyY2VTZXJ2aWNlLFxuICBzb3VyY2VDYW5TZWFyY2hcbn0gZnJvbSAnQGlnbzIvZ2VvJztcblxuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIGNvbWJpbmVMYXRlc3Rcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgVG9vbFN0YXRlIH0gZnJvbSAnLi8uLi8uLi90b29sL3Rvb2wuc3RhdGUnO1xuaW1wb3J0IHsgTWFwU3RhdGUgfSBmcm9tICcuLy4uL21hcC5zdGF0ZSc7XG5cbkBUb29sQ29tcG9uZW50KHtcbiAgbmFtZTogJ21hcExlZ2VuZCcsXG4gIHRpdGxlOiAnaWdvLmludGVncmF0aW9uLnRvb2xzLmxlZ2VuZCcsXG4gIGljb246ICdmb3JtYXRfbGlzdF9idWxsZXRlZCdcbn0pXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tbWFwLWxlZ2VuZC10b29sJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcC1sZWdlbmQtdG9vbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hcC1sZWdlbmQtdG9vbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBMYXllckxlZ2VuZExpc3RDb21wb25lbnQsXG4gICAgTGF5ZXJMZWdlbmRMaXN0QmluZGluZ0RpcmVjdGl2ZSxcbiAgICBNYXRMaXN0TW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIElnb0xhbmd1YWdlTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTWFwTGVnZW5kVG9vbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIGRlbGF5ZWRTaG93RW1wdHlNYXBDb250ZW50ID0gZmFsc2U7XG5cbiAgbGF5ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TGF5ZXJbXT4oW10pO1xuICBzaG93QWxsTGVnZW5kc1ZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBjaGFuZ2UkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XG5cbiAgcHJpdmF0ZSByZXNvbHV0aW9uJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB2aXNpYmxlT3JJblJhbmdlTGF5ZXJzJCQ6IFN1YnNjcmlwdGlvbjtcblxuICBASW5wdXQoKSB1cGRhdGVMZWdlbmRPblJlc29sdXRpb25DaGFuZ2UgPSBmYWxzZTtcblxuICBASW5wdXQoKSBsYXllckFkZGl0aW9uQWxsb3dlZCA9IHRydWU7XG5cbiAgQElucHV0KCkgYWxsb3dTaG93QWxsTGVnZW5kcyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dBbGxMZWdlbmRzVmFsdWUgPSBmYWxzZTtcblxuICBASW5wdXQoKSBsYXllckxpc3RDb250cm9sczogTGF5ZXJMaXN0Q29udHJvbHNPcHRpb25zID0ge307XG5cbiAgZ2V0IG1hcCgpOiBJZ29NYXAge1xuICAgIHJldHVybiB0aGlzLm1hcFN0YXRlLm1hcDtcbiAgfVxuXG4gIGdldCB2aXNpYmxlT3JJblJhbmdlTGF5ZXJzJCgpOiBPYnNlcnZhYmxlPExheWVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5sYXllcnMkLnBpcGUoXG4gICAgICBtYXAoKGxheWVycykgPT5cbiAgICAgICAgbGF5ZXJzLmZpbHRlcihcbiAgICAgICAgICAobGF5ZXIpID0+IGxheWVyLnZpc2libGUkLnZhbHVlICYmIGxheWVyLmlzSW5SZXNvbHV0aW9uc1JhbmdlJC52YWx1ZVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlTGF5ZXJzJCgpOiBPYnNlcnZhYmxlPExheWVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5sYXllcnMkLnBpcGUoXG4gICAgICBtYXAoKGxheWVycykgPT4gbGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnZpc2libGUkLnZhbHVlKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0IGV4Y2x1ZGVCYXNlTGF5ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxheWVyTGlzdENvbnRyb2xzLmV4Y2x1ZGVCYXNlTGF5ZXJzIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHNlYXJjaFRvb2xJblRvb2xiYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG9vbFN0YXRlLnRvb2xib3guZ2V0VG9vbGJhcigpLmluZGV4T2YoJ3NlYXJjaFJlc3VsdHMnKSAhPT0gLTEgJiZcbiAgICAgIHRoaXMuc2VhcmNoU291cmNlU2VydmljZVxuICAgICAgICAuZ2V0U291cmNlcygpXG4gICAgICAgIC5maWx0ZXIoc291cmNlQ2FuU2VhcmNoKVxuICAgICAgICAuZmlsdGVyKChzKSA9PiBzLmF2YWlsYWJsZSAmJiBzLmdldFR5cGUoKSA9PT0gJ0xheWVyJykubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBnZXQgY2F0YWxvZ1Rvb2xJblRvb2xiYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudG9vbFN0YXRlLnRvb2xib3guZ2V0VG9vbGJhcigpLmluZGV4T2YoJ2NhdGFsb2cnKSAhPT0gLTE7XG4gIH1cblxuICBnZXQgY29udGV4dFRvb2xJblRvb2xiYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudG9vbFN0YXRlLnRvb2xib3guZ2V0VG9vbGJhcigpLmluZGV4T2YoJ2NvbnRleHRNYW5hZ2VyJykgIT09IC0xO1xuICB9XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWFwU3RhdGU6IE1hcFN0YXRlLFxuICAgIHByaXZhdGUgdG9vbFN0YXRlOiBUb29sU3RhdGUsXG4gICAgcHJpdmF0ZSBzZWFyY2hTb3VyY2VTZXJ2aWNlOiBTZWFyY2hTb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc29sdXRpb24kJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5tYXAubGF5ZXJzJCxcbiAgICAgIHRoaXMubWFwLnZpZXdDb250cm9sbGVyLnJlc29sdXRpb24kXG4gICAgXSlcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMCkpXG4gICAgICAuc3Vic2NyaWJlKChidW5jaDogW0xheWVyW10sIG51bWJlcl0pID0+IHtcbiAgICAgICAgdGhpcy5sYXllcnMkLm5leHQoXG4gICAgICAgICAgYnVuY2hbMF0uZmlsdGVyKFxuICAgICAgICAgICAgKGxheWVyKSA9PlxuICAgICAgICAgICAgICBsYXllci5zaG93SW5MYXllckxpc3QgIT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICghdGhpcy5leGNsdWRlQmFzZUxheWVycyB8fCAhbGF5ZXIuYmFzZUxheWVyKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuYWxsb3dTaG93QWxsTGVnZW5kcykge1xuICAgICAgdGhpcy5tYXBTdGF0ZS5zaG93QWxsTGVnZW5kc1ZhbHVlID1cbiAgICAgICAgdGhpcy5tYXBTdGF0ZS5zaG93QWxsTGVnZW5kc1ZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMubWFwU3RhdGUuc2hvd0FsbExlZ2VuZHNWYWx1ZVxuICAgICAgICAgIDogdGhpcy5zaG93QWxsTGVnZW5kc1ZhbHVlIHx8IGZhbHNlO1xuICAgICAgdGhpcy5zaG93QWxsTGVnZW5kc1ZhbHVlJC5uZXh0KHRoaXMubWFwU3RhdGUuc2hvd0FsbExlZ2VuZHNWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd0FsbExlZ2VuZHNWYWx1ZSQubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gcHJldmVudCBtZXNzYWdlIHRvIGJlIHNob3duIHRvbyBxdWlja2x5LiBXYWl0aW5nIGZvciBsYXllcnNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGVsYXllZFNob3dFbXB0eU1hcENvbnRlbnQgPSB0cnVlO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMjUwKTtcbiAgfVxuXG4gIG9uU2hvd0FsbExlZ2VuZHMoZXZlbnQpIHtcbiAgICB0aGlzLm1hcFN0YXRlLnNob3dBbGxMZWdlbmRzVmFsdWUgPSBldmVudDtcbiAgICB0aGlzLnNob3dBbGxMZWdlbmRzVmFsdWUkLm5leHQoZXZlbnQpO1xuICB9XG5cbiAgc2hvd0FsbExlZ2VuZCgpIHtcbiAgICBpZiAodGhpcy5sYXllcnMkLmdldFZhbHVlKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMubGF5ZXJzJC5nZXRWYWx1ZSgpLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgdGhpcy5hbGxvd1Nob3dBbGxMZWdlbmRzID09PSBmYWxzZVxuICAgICkge1xuICAgICAgbGV0IHZpc2libGVPckluUmFuZ2VMYXllcnM7XG4gICAgICB0aGlzLnZpc2libGVPckluUmFuZ2VMYXllcnMkJCA9IHRoaXMudmlzaWJsZU9ySW5SYW5nZUxheWVycyQuc3Vic2NyaWJlKFxuICAgICAgICAodmFsdWUpID0+IHtcbiAgICAgICAgICB2aXNpYmxlT3JJblJhbmdlTGF5ZXJzID0gdmFsdWUubGVuZ3RoID09PSAwID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAodmlzaWJsZU9ySW5SYW5nZUxheWVycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVzb2x1dGlvbiQkLnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHRoaXMudmlzaWJsZU9ySW5SYW5nZUxheWVycyQkKSB7XG4gICAgICB0aGlzLnZpc2libGVPckluUmFuZ2VMYXllcnMkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNlYXJjaEVtaXQoKSB7XG4gICAgdGhpcy50b29sU3RhdGUudG9vbGJveC5hY3RpdmF0ZVRvb2woJ3NlYXJjaFJlc3VsdHMnKTtcbiAgfVxuXG4gIGNhdGFsb2dFbWl0KCkge1xuICAgIHRoaXMudG9vbFN0YXRlLnRvb2xib3guYWN0aXZhdGVUb29sKCdjYXRhbG9nJyk7XG4gIH1cblxuICBjb250ZXh0RW1pdCgpIHtcbiAgICB0aGlzLnRvb2xTdGF0ZS50b29sYm94LmFjdGl2YXRlVG9vbCgnY29udGV4dE1hbmFnZXInKTtcbiAgfVxufVxuIiwiPGlnby1sYXllci1sZWdlbmQtbGlzdFxuICAqbmdJZj1cInNob3dBbGxMZWdlbmQoKVwiXG4gIGlnb0xheWVyTGVnZW5kTGlzdEJpbmRpbmdcbiAgW2V4Y2x1ZGVCYXNlTGF5ZXJzXT1cImV4Y2x1ZGVCYXNlTGF5ZXJzXCJcbiAgW2FsbG93U2hvd0FsbExlZ2VuZHNdPVwiYWxsb3dTaG93QWxsTGVnZW5kc1wiXG4gIFt1cGRhdGVMZWdlbmRPblJlc29sdXRpb25DaGFuZ2VdPVwidXBkYXRlTGVnZW5kT25SZXNvbHV0aW9uQ2hhbmdlXCJcbiAgW3Nob3dBbGxMZWdlbmRzVmFsdWVdPVwic2hvd0FsbExlZ2VuZHNWYWx1ZSQgfCBhc3luY1wiXG4gIChhbGxMZWdlbmRzU2hvd24pPVwib25TaG93QWxsTGVnZW5kcygkZXZlbnQpXCJcbj5cbjwvaWdvLWxheWVyLWxlZ2VuZC1saXN0PlxuPG5nLXRlbXBsYXRlXG4gICpuZ0lmPVwiKGxheWVycyQgfCBhc3luYykubGVuZ3RoICE9PSAwOyBlbHNlIGVtcHR5TGF5ZXJzXCJcbj48L25nLXRlbXBsYXRlPlxuXG48cFxuICBjbGFzcz1cIm1hcC1lbXB0eSBtYXQtdHlwb2dyYXBoeVwiXG4gICpuZ0lmPVwiXG4gICAgIWFsbG93U2hvd0FsbExlZ2VuZHMgJiZcbiAgICAobGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggIT09IDAgJiZcbiAgICAodmlzaWJsZU9ySW5SYW5nZUxheWVycyQgfCBhc3luYykubGVuZ3RoID09PSAwXG4gIFwiXG4+XG4gIHt7XG4gICAgKHZpc2libGVMYXllcnMkIHwgYXN5bmMpLmxlbmd0aFxuICAgICAgPyAoJ2lnby5pbnRlZ3JhdGlvbi5tYXBUb29sLm5vTGF5ZXJzSW5SYW5nZScgfCB0cmFuc2xhdGUpXG4gICAgICA6ICgnaWdvLmludGVncmF0aW9uLm1hcFRvb2wubm9MYXllcnNWaXNpYmxlJyB8IHRyYW5zbGF0ZSlcbiAgfX1cbjwvcD5cblxuPG5nLXRlbXBsYXRlICNlbXB0eUxheWVycz5cbiAgPG1hdC1saXN0ICpuZ0lmPVwiZGVsYXllZFNob3dFbXB0eU1hcENvbnRlbnRcIj5cbiAgICA8cCBjbGFzcz1cIm1hcC1lbXB0eSBtYXQtdHlwb2dyYXBoeVwiPlxuICAgICAge3sgJ2lnby5pbnRlZ3JhdGlvbi5tYXBUb29sLmVtcHR5JyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvcD5cbiAgICA8cFxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgbGF5ZXJBZGRpdGlvbkFsbG93ZWQgJiZcbiAgICAgICAgKHNlYXJjaFRvb2xJblRvb2xiYXIgfHwgY2F0YWxvZ1Rvb2xJblRvb2xiYXIgfHwgY29udGV4dFRvb2xJblRvb2xiYXIpXG4gICAgICBcIlxuICAgICAgY2xhc3M9XCJtYXAtZW1wdHkgbWF0LXR5cG9ncmFwaHlcIlxuICAgID5cbiAgICAgIHt7ICdpZ28uaW50ZWdyYXRpb24ubWFwVG9vbC5jdXN0b21pemUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuXG4gICAgPG1hdC1saXN0LWl0ZW0gKm5nSWY9XCJsYXllckFkZGl0aW9uQWxsb3dlZCAmJiBzZWFyY2hUb29sSW5Ub29sYmFyXCI+XG4gICAgICA8bWF0LWljb24gbWF0TGlzdEl0ZW1JY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICA8c3BhblxuICAgICAgICBtYXRMaXN0SXRlbVRpdGxlXG4gICAgICAgIGNsYXNzPVwic2VhcmNoLXRvb2wgbWF0LXR5cG9ncmFwaHlcIlxuICAgICAgICAoY2xpY2spPVwic2VhcmNoRW1pdCgpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2lnby5pbnRlZ3JhdGlvbi5tYXBUb29sLnNlYXJjaC10b29sJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICA8bWF0LWxpc3QtaXRlbSAqbmdJZj1cImxheWVyQWRkaXRpb25BbGxvd2VkICYmIGNhdGFsb2dUb29sSW5Ub29sYmFyXCI+XG4gICAgICA8bWF0LWljb24gbWF0TGlzdEl0ZW1JY29uPmxpYnJhcnlfYWRkPC9tYXQtaWNvbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIG1hdExpc3RJdGVtVGl0bGVcbiAgICAgICAgY2xhc3M9XCJjYXRhbG9nLXRvb2wgbWF0LXR5cG9ncmFwaHlcIlxuICAgICAgICAoY2xpY2spPVwiY2F0YWxvZ0VtaXQoKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdpZ28uaW50ZWdyYXRpb24ubWFwVG9vbC5jYXRhbG9nLXRvb2wnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9tYXQtbGlzdC1pdGVtPlxuICAgIDxtYXQtbGlzdC1pdGVtICpuZ0lmPVwibGF5ZXJBZGRpdGlvbkFsbG93ZWQgJiYgY29udGV4dFRvb2xJblRvb2xiYXJcIj5cbiAgICAgIDxtYXQtaWNvbiBtYXRMaXN0SXRlbUljb24+c3RhcjwvbWF0LWljb24+XG4gICAgICA8c3BhblxuICAgICAgICBtYXRMaXN0SXRlbVRpdGxlXG4gICAgICAgIGNsYXNzPVwiY29udGV4dC10b29sIG1hdC10eXBvZ3JhcGh5XCJcbiAgICAgICAgKGNsaWNrKT1cImNvbnRleHRFbWl0KClcIlxuICAgICAgPlxuICAgICAgICB7eyAnaWdvLmludGVncmF0aW9uLm1hcFRvb2wuY29udGV4dC10b29sJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgPC9tYXQtbGlzdD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWxlZ2VuZC10b29sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ludGVncmF0aW9uL3NyYy9saWIvbWFwL21hcC1sZWdlbmQvbWFwLWxlZ2VuZC10b29sLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ludGVncmF0aW9uL3NyYy9saWIvbWFwL21hcC1sZWdlbmQvbWFwLWxlZ2VuZC10b29sLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULEtBQUssRUFHTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBR0wsK0JBQStCLEVBQy9CLHdCQUF3QixFQUV4QixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLGVBQWUsRUFDaEIsTUFBTSxXQUFXLENBQUM7QUFFbkIsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBRWIsYUFBYSxFQUNkLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQXNCbkMsSUFBTSxzQkFBc0IsR0FB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VCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RCxDQUFDO3dHQTVJVSxzQkFBc0I7NEZBQXRCLHNCQUFzQiwyVUN4RG5DLG0zRUE0RUEsc2hCRDdCSSxJQUFJLDZGQUNKLHdCQUF3Qix5TkFDeEIsK0JBQStCLHVFQUMvQixhQUFhLHliQUNiLGFBQWEsK0tBQ2IsU0FBUyw2Q0FDVCxpQkFBaUI7O0FBR1Isc0JBQXNCO0lBcEJsQyxhQUFhLENBQUM7UUFDYixJQUFJLEVBQUUsV0FBVztRQUNqQixLQUFLLEVBQUUsOEJBQThCO1FBQ3JDLElBQUksRUFBRSxzQkFBc0I7S0FDN0IsQ0FBQztxQ0EwRW9CLFFBQVE7UUFDUCxTQUFTO1FBQ0MsbUJBQW1CO1FBQ2pDLGlCQUFpQjtHQTdEdkIsc0JBQXNCLENBNklsQzs7NEZBN0lZLHNCQUFzQjtrQkFmbEMsU0FBUzsrQkFDRSxxQkFBcUIsY0FHbkIsSUFBSSxXQUNQO3dCQUNQLElBQUk7d0JBQ0osd0JBQXdCO3dCQUN4QiwrQkFBK0I7d0JBQy9CLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixTQUFTO3dCQUNULGlCQUFpQjtxQkFDbEI7dUtBWVEsOEJBQThCO3NCQUF0QyxLQUFLO2dCQUVHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XG5cbmltcG9ydCB7IFRvb2xDb21wb25lbnQgfSBmcm9tICdAaWdvMi9jb21tb24vdG9vbCc7XG5pbXBvcnQgeyBJZ29MYW5ndWFnZU1vZHVsZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuaW1wb3J0IHtcbiAgQW55TGF5ZXIsXG4gIElnb01hcCxcbiAgTGF5ZXJMZWdlbmRMaXN0QmluZGluZ0RpcmVjdGl2ZSxcbiAgTGF5ZXJMZWdlbmRMaXN0Q29tcG9uZW50LFxuICBMYXllckxpc3RDb250cm9sc09wdGlvbnMsXG4gIFNlYXJjaFNvdXJjZVNlcnZpY2UsXG4gIGlzQmFzZUxheWVyLFxuICBzb3VyY2VDYW5TZWFyY2hcbn0gZnJvbSAnQGlnbzIvZ2VvJztcblxuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIGNvbWJpbmVMYXRlc3Rcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgVG9vbFN0YXRlIH0gZnJvbSAnLi8uLi8uLi90b29sL3Rvb2wuc3RhdGUnO1xuaW1wb3J0IHsgTWFwU3RhdGUgfSBmcm9tICcuLy4uL21hcC5zdGF0ZSc7XG5cbkBUb29sQ29tcG9uZW50KHtcbiAgbmFtZTogJ21hcExlZ2VuZCcsXG4gIHRpdGxlOiAnaWdvLmludGVncmF0aW9uLnRvb2xzLmxlZ2VuZCcsXG4gIGljb246ICdmb3JtYXRfbGlzdF9idWxsZXRlZCdcbn0pXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tbWFwLWxlZ2VuZC10b29sJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcC1sZWdlbmQtdG9vbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hcC1sZWdlbmQtdG9vbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBMYXllckxlZ2VuZExpc3RDb21wb25lbnQsXG4gICAgTGF5ZXJMZWdlbmRMaXN0QmluZGluZ0RpcmVjdGl2ZSxcbiAgICBNYXRMaXN0TW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIElnb0xhbmd1YWdlTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTWFwTGVnZW5kVG9vbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIGRlbGF5ZWRTaG93RW1wdHlNYXBDb250ZW50ID0gZmFsc2U7XG5cbiAgbGF5ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QW55TGF5ZXJbXT4oW10pO1xuICBzaG93QWxsTGVnZW5kc1ZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBjaGFuZ2UkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XG5cbiAgcHJpdmF0ZSByZXNvbHV0aW9uJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB2aXNpYmxlT3JJblJhbmdlTGF5ZXJzJCQ6IFN1YnNjcmlwdGlvbjtcblxuICBASW5wdXQoKSB1cGRhdGVMZWdlbmRPblJlc29sdXRpb25DaGFuZ2UgPSBmYWxzZTtcblxuICBASW5wdXQoKSBsYXllckFkZGl0aW9uQWxsb3dlZCA9IHRydWU7XG5cbiAgQElucHV0KCkgYWxsb3dTaG93QWxsTGVnZW5kcyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dBbGxMZWdlbmRzVmFsdWUgPSBmYWxzZTtcblxuICBASW5wdXQoKSBsYXllckxpc3RDb250cm9sczogTGF5ZXJMaXN0Q29udHJvbHNPcHRpb25zID0ge307XG5cbiAgZ2V0IG1hcCgpOiBJZ29NYXAge1xuICAgIHJldHVybiB0aGlzLm1hcFN0YXRlLm1hcDtcbiAgfVxuXG4gIGdldCB2aXNpYmxlT3JJblJhbmdlTGF5ZXJzJCgpOiBPYnNlcnZhYmxlPEFueUxheWVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5sYXllcnMkLnBpcGUoXG4gICAgICBtYXAoKGxheWVycykgPT4gbGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmRpc3BsYXllZCkpXG4gICAgKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlTGF5ZXJzJCgpOiBPYnNlcnZhYmxlPEFueUxheWVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5sYXllcnMkLnBpcGUoXG4gICAgICBtYXAoKGxheWVycykgPT4gbGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnZpc2libGUpKVxuICAgICk7XG4gIH1cblxuICBnZXQgZXhjbHVkZUJhc2VMYXllcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGF5ZXJMaXN0Q29udHJvbHMuZXhjbHVkZUJhc2VMYXllcnMgfHwgZmFsc2U7XG4gIH1cblxuICBnZXQgc2VhcmNoVG9vbEluVG9vbGJhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy50b29sU3RhdGUudG9vbGJveC5nZXRUb29sYmFyKCkuaW5kZXhPZignc2VhcmNoUmVzdWx0cycpICE9PSAtMSAmJlxuICAgICAgdGhpcy5zZWFyY2hTb3VyY2VTZXJ2aWNlXG4gICAgICAgIC5nZXRTb3VyY2VzKClcbiAgICAgICAgLmZpbHRlcihzb3VyY2VDYW5TZWFyY2gpXG4gICAgICAgIC5maWx0ZXIoKHMpID0+IHMuYXZhaWxhYmxlICYmIHMuZ2V0VHlwZSgpID09PSAnTGF5ZXInKS5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIGdldCBjYXRhbG9nVG9vbEluVG9vbGJhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b29sU3RhdGUudG9vbGJveC5nZXRUb29sYmFyKCkuaW5kZXhPZignY2F0YWxvZycpICE9PSAtMTtcbiAgfVxuXG4gIGdldCBjb250ZXh0VG9vbEluVG9vbGJhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b29sU3RhdGUudG9vbGJveC5nZXRUb29sYmFyKCkuaW5kZXhPZignY29udGV4dE1hbmFnZXInKSAhPT0gLTE7XG4gIH1cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtYXBTdGF0ZTogTWFwU3RhdGUsXG4gICAgcHJpdmF0ZSB0b29sU3RhdGU6IFRvb2xTdGF0ZSxcbiAgICBwcml2YXRlIHNlYXJjaFNvdXJjZVNlcnZpY2U6IFNlYXJjaFNvdXJjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVzb2x1dGlvbiQkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm1hcC5sYXllckNvbnRyb2xsZXIuYWxsJCxcbiAgICAgIHRoaXMubWFwLnZpZXdDb250cm9sbGVyLnJlc29sdXRpb24kXG4gICAgXSlcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMCkpXG4gICAgICAuc3Vic2NyaWJlKChidW5jaCkgPT4ge1xuICAgICAgICB0aGlzLmxheWVycyQubmV4dChcbiAgICAgICAgICBidW5jaFswXS5maWx0ZXIoXG4gICAgICAgICAgICAobGF5ZXIpID0+XG4gICAgICAgICAgICAgIGxheWVyLnNob3dJbkxheWVyTGlzdCAhPT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgKCF0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzIHx8ICFpc0Jhc2VMYXllcihsYXllcikpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5hbGxvd1Nob3dBbGxMZWdlbmRzKSB7XG4gICAgICB0aGlzLm1hcFN0YXRlLnNob3dBbGxMZWdlbmRzVmFsdWUgPVxuICAgICAgICB0aGlzLm1hcFN0YXRlLnNob3dBbGxMZWdlbmRzVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5tYXBTdGF0ZS5zaG93QWxsTGVnZW5kc1ZhbHVlXG4gICAgICAgICAgOiB0aGlzLnNob3dBbGxMZWdlbmRzVmFsdWUgfHwgZmFsc2U7XG4gICAgICB0aGlzLnNob3dBbGxMZWdlbmRzVmFsdWUkLm5leHQodGhpcy5tYXBTdGF0ZS5zaG93QWxsTGVnZW5kc1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93QWxsTGVnZW5kc1ZhbHVlJC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBwcmV2ZW50IG1lc3NhZ2UgdG8gYmUgc2hvd24gdG9vIHF1aWNrbHkuIFdhaXRpbmcgZm9yIGxheWVyc1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kZWxheWVkU2hvd0VtcHR5TWFwQ29udGVudCA9IHRydWU7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgb25TaG93QWxsTGVnZW5kcyhldmVudCkge1xuICAgIHRoaXMubWFwU3RhdGUuc2hvd0FsbExlZ2VuZHNWYWx1ZSA9IGV2ZW50O1xuICAgIHRoaXMuc2hvd0FsbExlZ2VuZHNWYWx1ZSQubmV4dChldmVudCk7XG4gIH1cblxuICBzaG93QWxsTGVnZW5kKCkge1xuICAgIGlmICh0aGlzLmxheWVycyQuZ2V0VmFsdWUoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5sYXllcnMkLmdldFZhbHVlKCkubGVuZ3RoICE9PSAwICYmXG4gICAgICB0aGlzLmFsbG93U2hvd0FsbExlZ2VuZHMgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICBsZXQgdmlzaWJsZU9ySW5SYW5nZUxheWVycztcbiAgICAgIHRoaXMudmlzaWJsZU9ySW5SYW5nZUxheWVycyQkID0gdGhpcy52aXNpYmxlT3JJblJhbmdlTGF5ZXJzJC5zdWJzY3JpYmUoXG4gICAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHZpc2libGVPckluUmFuZ2VMYXllcnMgPSB2YWx1ZS5sZW5ndGggPT09IDAgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGlmICh2aXNpYmxlT3JJblJhbmdlTGF5ZXJzID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNvbHV0aW9uJCQudW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy52aXNpYmxlT3JJblJhbmdlTGF5ZXJzJCQpIHtcbiAgICAgIHRoaXMudmlzaWJsZU9ySW5SYW5nZUxheWVycyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgc2VhcmNoRW1pdCgpIHtcbiAgICB0aGlzLnRvb2xTdGF0ZS50b29sYm94LmFjdGl2YXRlVG9vbCgnc2VhcmNoUmVzdWx0cycpO1xuICB9XG5cbiAgY2F0YWxvZ0VtaXQoKSB7XG4gICAgdGhpcy50b29sU3RhdGUudG9vbGJveC5hY3RpdmF0ZVRvb2woJ2NhdGFsb2cnKTtcbiAgfVxuXG4gIGNvbnRleHRFbWl0KCkge1xuICAgIHRoaXMudG9vbFN0YXRlLnRvb2xib3guYWN0aXZhdGVUb29sKCdjb250ZXh0TWFuYWdlcicpO1xuICB9XG59XG4iLCI8aWdvLWxheWVyLWxlZ2VuZC1saXN0XG4gICpuZ0lmPVwic2hvd0FsbExlZ2VuZCgpXCJcbiAgaWdvTGF5ZXJMZWdlbmRMaXN0QmluZGluZ1xuICBbZXhjbHVkZUJhc2VMYXllcnNdPVwiZXhjbHVkZUJhc2VMYXllcnNcIlxuICBbYWxsb3dTaG93QWxsTGVnZW5kc109XCJhbGxvd1Nob3dBbGxMZWdlbmRzXCJcbiAgW3VwZGF0ZUxlZ2VuZE9uUmVzb2x1dGlvbkNoYW5nZV09XCJ1cGRhdGVMZWdlbmRPblJlc29sdXRpb25DaGFuZ2VcIlxuICBbc2hvd0FsbExlZ2VuZHNWYWx1ZV09XCJzaG93QWxsTGVnZW5kc1ZhbHVlJCB8IGFzeW5jXCJcbiAgKGFsbExlZ2VuZHNTaG93bik9XCJvblNob3dBbGxMZWdlbmRzKCRldmVudClcIlxuPlxuPC9pZ28tbGF5ZXItbGVnZW5kLWxpc3Q+XG48bmctdGVtcGxhdGVcbiAgKm5nSWY9XCIobGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggIT09IDA7IGVsc2UgZW1wdHlMYXllcnNcIlxuPjwvbmctdGVtcGxhdGU+XG5cbjxwXG4gIGNsYXNzPVwibWFwLWVtcHR5IG1hdC10eXBvZ3JhcGh5XCJcbiAgKm5nSWY9XCJcbiAgICAhYWxsb3dTaG93QWxsTGVnZW5kcyAmJlxuICAgIChsYXllcnMkIHwgYXN5bmMpLmxlbmd0aCAhPT0gMCAmJlxuICAgICh2aXNpYmxlT3JJblJhbmdlTGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggPT09IDBcbiAgXCJcbj5cbiAge3tcbiAgICAodmlzaWJsZUxheWVycyQgfCBhc3luYykubGVuZ3RoXG4gICAgICA/ICgnaWdvLmludGVncmF0aW9uLm1hcFRvb2wubm9MYXllcnNJblJhbmdlJyB8IHRyYW5zbGF0ZSlcbiAgICAgIDogKCdpZ28uaW50ZWdyYXRpb24ubWFwVG9vbC5ub0xheWVyc1Zpc2libGUnIHwgdHJhbnNsYXRlKVxuICB9fVxuPC9wPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5TGF5ZXJzPlxuICA8bWF0LWxpc3QgKm5nSWY9XCJkZWxheWVkU2hvd0VtcHR5TWFwQ29udGVudFwiPlxuICAgIDxwIGNsYXNzPVwibWFwLWVtcHR5IG1hdC10eXBvZ3JhcGh5XCI+XG4gICAgICB7eyAnaWdvLmludGVncmF0aW9uLm1hcFRvb2wuZW1wdHknIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxwXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBsYXllckFkZGl0aW9uQWxsb3dlZCAmJlxuICAgICAgICAoc2VhcmNoVG9vbEluVG9vbGJhciB8fCBjYXRhbG9nVG9vbEluVG9vbGJhciB8fCBjb250ZXh0VG9vbEluVG9vbGJhcilcbiAgICAgIFwiXG4gICAgICBjbGFzcz1cIm1hcC1lbXB0eSBtYXQtdHlwb2dyYXBoeVwiXG4gICAgPlxuICAgICAge3sgJ2lnby5pbnRlZ3JhdGlvbi5tYXBUb29sLmN1c3RvbWl6ZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3A+XG5cbiAgICA8bWF0LWxpc3QtaXRlbSAqbmdJZj1cImxheWVyQWRkaXRpb25BbGxvd2VkICYmIHNlYXJjaFRvb2xJblRvb2xiYXJcIj5cbiAgICAgIDxtYXQtaWNvbiBtYXRMaXN0SXRlbUljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIG1hdExpc3RJdGVtVGl0bGVcbiAgICAgICAgY2xhc3M9XCJzZWFyY2gtdG9vbCBtYXQtdHlwb2dyYXBoeVwiXG4gICAgICAgIChjbGljayk9XCJzZWFyY2hFbWl0KClcIlxuICAgICAgPlxuICAgICAgICB7eyAnaWdvLmludGVncmF0aW9uLm1hcFRvb2wuc2VhcmNoLXRvb2wnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9tYXQtbGlzdC1pdGVtPlxuICAgIDxtYXQtbGlzdC1pdGVtICpuZ0lmPVwibGF5ZXJBZGRpdGlvbkFsbG93ZWQgJiYgY2F0YWxvZ1Rvb2xJblRvb2xiYXJcIj5cbiAgICAgIDxtYXQtaWNvbiBtYXRMaXN0SXRlbUljb24+bGlicmFyeV9hZGQ8L21hdC1pY29uPlxuICAgICAgPHNwYW5cbiAgICAgICAgbWF0TGlzdEl0ZW1UaXRsZVxuICAgICAgICBjbGFzcz1cImNhdGFsb2ctdG9vbCBtYXQtdHlwb2dyYXBoeVwiXG4gICAgICAgIChjbGljayk9XCJjYXRhbG9nRW1pdCgpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2lnby5pbnRlZ3JhdGlvbi5tYXBUb29sLmNhdGFsb2ctdG9vbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L21hdC1saXN0LWl0ZW0+XG4gICAgPG1hdC1saXN0LWl0ZW0gKm5nSWY9XCJsYXllckFkZGl0aW9uQWxsb3dlZCAmJiBjb250ZXh0VG9vbEluVG9vbGJhclwiPlxuICAgICAgPG1hdC1pY29uIG1hdExpc3RJdGVtSWNvbj5zdGFyPC9tYXQtaWNvbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIG1hdExpc3RJdGVtVGl0bGVcbiAgICAgICAgY2xhc3M9XCJjb250ZXh0LXRvb2wgbWF0LXR5cG9ncmFwaHlcIlxuICAgICAgICAoY2xpY2spPVwiY29udGV4dEVtaXQoKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdpZ28uaW50ZWdyYXRpb24ubWFwVG9vbC5jb250ZXh0LXRvb2wnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9tYXQtbGlzdC1pdGVtPlxuICA8L21hdC1saXN0PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -112,8 +112,8 @@ let MapProximityToolComponent = class MapProximityToolComponent {
112
112
  this.messageService.success('igo.integration.map-proximity-tool.copyMsg', 'igo.integration.map-proximity-tool.copyTitle');
113
113
  }
114
114
  }
115
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MapProximityToolComponent, deps: [{ token: i1.MapState }, { token: i2.MapProximityState }, { token: i3.LanguageService }, { token: i4.MessageService }], target: i0.ɵɵFactoryTarget.Component });
116
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: MapProximityToolComponent, isStandalone: true, selector: "igo-map-proximity-tool", viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, static: true }], ngImport: i0, template: "<igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"mapProximityState.proximityFeatureStore\"\n [template]=\"tableTemplate\"\n></igo-entity-table>\n<br />\n<mat-form-field\n *ngIf=\"mapProximityState.currentPositionCoordinate$ | async as coord\"\n class=\"coordinates\"\n>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"1\"\n [placeholder]=\"'igo.integration.map-proximity-tool.lon' | translate\"\n [value]=\"coord[0]\"\n ></textarea>\n</mat-form-field>\n<mat-form-field\n *ngIf=\"mapProximityState.currentPositionCoordinate$ | async as coord2\"\n class=\"coordinates2\"\n>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"1\"\n [placeholder]=\"'igo.integration.map-proximity-tool.lat' | translate\"\n [value]=\"coord2[1]\"\n ></textarea>\n</mat-form-field>\n\n<button\n *ngIf=\"\n (mapProximityState.currentPositionCoordinate$ | async) &&\n (mapProximityState.currentPositionCoordinate$ | async).length\n \"\n mat-icon-button\n (click)=\"copyTextToClipboard()\"\n>\n <mat-icon>content_copy</mat-icon>\n</button>\n<div class=\"title-container\">\n <mat-label class=\"title mat-typography\">{{\n 'igo.integration.map-proximity-tool.method' | translate\n }}</mat-label>\n</div>\n<div class=\"igo-input-container mat-typography\">\n <mat-radio-group (change)=\"onLocationTypeChange($event)\">\n <mat-radio-button\n [checked]=\"\n (mapProximityState.proximitylocationType$ | async) === 'geolocation'\n \"\n value=\"geolocation\"\n >{{\n 'igo.integration.map-proximity-tool.geolocation' | translate\n }}</mat-radio-button\n >\n <mat-radio-button\n [checked]=\"\n (mapProximityState.proximitylocationType$ | async) === 'mapCenter'\n \"\n value=\"mapCenter\"\n >{{\n 'igo.integration.map-proximity-tool.mapCenter' | translate\n }}</mat-radio-button\n >\n </mat-radio-group>\n</div>\n\n<div class=\"radius-unit\">\n <mat-form-field class=\"radius-field\" floatLabel=\"always\">\n <mat-label>{{\n 'igo.integration.map-proximity-tool.radiusM' | translate\n }}</mat-label>\n <input\n type=\"number\"\n pattern=\"[0-9]*\"\n [(ngModel)]=\"maxDistance\"\n matInput\n placeholder=\"{{\n 'igo.integration.map-proximity-tool.radiusM' | translate\n }}\"\n />\n </mat-form-field>\n</div>\n", styles: [":host .table-compact{height:auto}:host .table-compact ::ng-deep .mat-mdc-header-cell.mat-column-selectionCheckbox{width:52px}:host textarea{resize:none}:host mat-form-field{padding:10px 15px}:host mat-form-field.coordinates{width:110px}:host mat-form-field.coordinates2{width:100px;padding:0 10px 0 3px}:host mat-form-field.igo-input-container{width:60%;padding:0 15px}:host .radius-unit{display:flex;width:90%;margin-left:2px;padding:5px}:host .radius-unit mat-form-field.radius-field{display:flex;flex-flow:column nowrap;width:100%}:host .title-container{padding:10px}:host .title{margin-left:5px;font-size:initial}:host .mat-mdc-radio-group{display:flex;flex-direction:column}:host .mat-mdc-radio-button{display:inline-flex;position:relative;margin-left:12px}\n"], dependencies: [{ kind: "component", type: EntityTableComponent, selector: "igo-entity-table", inputs: ["store", "paginator", "template", "scrollBehavior", "sortNullsFirst", "withPaginator", "paginatorOptions"], outputs: ["entityClick", "entitySelectChange", "entitySortChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.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: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i9.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i9.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i10.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: i10.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] });
115
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapProximityToolComponent, deps: [{ token: i1.MapState }, { token: i2.MapProximityState }, { token: i3.LanguageService }, { token: i4.MessageService }], target: i0.ɵɵFactoryTarget.Component });
116
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapProximityToolComponent, isStandalone: true, selector: "igo-map-proximity-tool", viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, static: true }], ngImport: i0, template: "<igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"mapProximityState.proximityFeatureStore\"\n [template]=\"tableTemplate\"\n></igo-entity-table>\n<br />\n<mat-form-field\n *ngIf=\"mapProximityState.currentPositionCoordinate$ | async as coord\"\n class=\"coordinates\"\n>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"1\"\n [placeholder]=\"'igo.integration.map-proximity-tool.lon' | translate\"\n [value]=\"coord[0]\"\n ></textarea>\n</mat-form-field>\n<mat-form-field\n *ngIf=\"mapProximityState.currentPositionCoordinate$ | async as coord2\"\n class=\"coordinates2\"\n>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"1\"\n [placeholder]=\"'igo.integration.map-proximity-tool.lat' | translate\"\n [value]=\"coord2[1]\"\n ></textarea>\n</mat-form-field>\n\n<button\n *ngIf=\"\n (mapProximityState.currentPositionCoordinate$ | async) &&\n (mapProximityState.currentPositionCoordinate$ | async).length\n \"\n mat-icon-button\n (click)=\"copyTextToClipboard()\"\n>\n <mat-icon>content_copy</mat-icon>\n</button>\n<div class=\"title-container\">\n <mat-label class=\"title mat-typography\">{{\n 'igo.integration.map-proximity-tool.method' | translate\n }}</mat-label>\n</div>\n<div class=\"igo-input-container mat-typography\">\n <mat-radio-group (change)=\"onLocationTypeChange($event)\">\n <mat-radio-button\n [checked]=\"\n (mapProximityState.proximitylocationType$ | async) === 'geolocation'\n \"\n value=\"geolocation\"\n >{{\n 'igo.integration.map-proximity-tool.geolocation' | translate\n }}</mat-radio-button\n >\n <mat-radio-button\n [checked]=\"\n (mapProximityState.proximitylocationType$ | async) === 'mapCenter'\n \"\n value=\"mapCenter\"\n >{{\n 'igo.integration.map-proximity-tool.mapCenter' | translate\n }}</mat-radio-button\n >\n </mat-radio-group>\n</div>\n\n<div class=\"radius-unit\">\n <mat-form-field class=\"radius-field\" floatLabel=\"always\">\n <mat-label>{{\n 'igo.integration.map-proximity-tool.radiusM' | translate\n }}</mat-label>\n <input\n type=\"number\"\n pattern=\"[0-9]*\"\n [(ngModel)]=\"maxDistance\"\n matInput\n placeholder=\"{{\n 'igo.integration.map-proximity-tool.radiusM' | translate\n }}\"\n />\n </mat-form-field>\n</div>\n", styles: [":host .table-compact{height:auto}:host .table-compact ::ng-deep .mat-mdc-header-cell.mat-column-selectionCheckbox{width:52px}:host textarea{resize:none}:host mat-form-field{padding:10px 15px}:host mat-form-field.coordinates{width:110px}:host mat-form-field.coordinates2{width:100px;padding:0 10px 0 3px}:host mat-form-field.igo-input-container{width:60%;padding:0 15px}:host .radius-unit{display:flex;width:90%;margin-left:2px;padding:5px}:host .radius-unit mat-form-field.radius-field{display:flex;flex-flow:column nowrap;width:100%}:host .title-container{padding:10px}:host .title{margin-left:5px;font-size:initial}:host .mat-mdc-radio-group{display:flex;flex-direction:column}:host .mat-mdc-radio-button{display:inline-flex;position:relative;margin-left:12px}\n"], dependencies: [{ kind: "component", type: EntityTableComponent, selector: "igo-entity-table", inputs: ["store", "paginator", "template", "scrollBehavior", "sortNullsFirst", "withPaginator", "paginatorOptions"], outputs: ["entityClick", "entitySelectChange", "entitySortChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.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: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i9.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i9.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i10.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: i10.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] });
117
117
  };
118
118
  MapProximityToolComponent = __decorate([
119
119
  ToolComponent({
@@ -131,7 +131,7 @@ MapProximityToolComponent = __decorate([
131
131
  MessageService])
132
132
  ], MapProximityToolComponent);
133
133
  export { MapProximityToolComponent };
134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MapProximityToolComponent, decorators: [{
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapProximityToolComponent, decorators: [{
135
135
  type: Component,
136
136
  args: [{ selector: 'igo-map-proximity-tool', standalone: true, imports: [
137
137
  EntityTableComponent,
@@ -149,4 +149,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
149
149
  type: ViewChild,
150
150
  args: ['table', { static: true }]
151
151
  }] } });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXByb3hpbWl0eS10b29sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ludGVncmF0aW9uL3NyYy9saWIvbWFwL21hcC1wcm94aW1pdHktdG9vbC9tYXAtcHJveGltaXR5LXRvb2wuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvaW50ZWdyYXRpb24vc3JjL2xpYi9tYXAvbWFwLXByb3hpbWl0eS10b29sL21hcC1wcm94aW1pdHktdG9vbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBa0IsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekUsT0FBTyxFQUFFLG9CQUFvQixFQUF1QixNQUFNLHFCQUFxQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFD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LGNBQWMsMFdBQ2QsZUFBZSwySUFDZixhQUFhLG1MQUNiLGNBQWMsb2xCQUNkLFdBQVcsMDZCQUNYLFNBQVMsNkNBQ1QsaUJBQWlCOztBQUdSLHlCQUF5QjtJQTFCckMsYUFBYSxDQUFDO1FBQ2IsSUFBSSxFQUFFLGVBQWU7UUFDckIsS0FBSyxFQUFFLHNDQUFzQztRQUM3QyxJQUFJLEVBQUUsT0FBTztLQUNkLENBQUM7SUFDRjs7T0FFRzs7cUNBMENrQixRQUFRO1FBQ0MsaUJBQWlCO1FBQ2xCLGVBQWU7UUFDaEIsY0FBYztHQTFCN0IseUJBQXlCLENBdUdyQzs7MkZBdkdZLHlCQUF5QjtrQkFsQnJDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBR3RCLElBQUksV0FDUDt3QkFDUCxvQkFBb0I7d0JBQ3BCLElBQUk7d0JBQ0osa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsU0FBUzt3QkFDVCxpQkFBaUI7cUJBQ2xCO3dLQUlxQyxLQUFLO3NCQUExQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0UmFkaW9DaGFuZ2UsIE1hdFJhZGlvTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xuXG5pbXBvcnQgeyBFbnRpdHlUYWJsZUNvbXBvbmVudCwgRW50aXR5VGFibGVUZW1wbGF0ZSB9IGZyb20gJ0BpZ28yL2NvbW1vbi9lbnRpdHknO1xuaW1wb3J0IHsgVG9vbENvbXBvbmVudCB9IGZyb20gJ0BpZ28yL2NvbW1vbi90b29sJztcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgSWdvTGFuZ3VhZ2VNb2R1bGUgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9tZXNzYWdlJztcbmltcG9ydCB7IEZlYXR1cmUsIElnb01hcCB9IGZyb20gJ0BpZ28yL2dlbyc7XG5pbXBvcnQgeyBDbGlwYm9hcmQsIE51bWJlclV0aWxzIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTWFwUHJveGltaXR5U3RhdGUgfSBmcm9tICcuLi9tYXAtcHJveGltaXR5LnN0YXRlJztcbmltcG9ydCB7IE1hcFN0YXRlIH0gZnJvbSAnLi4vbWFwLnN0YXRlJztcblxuQFRvb2xDb21wb25lbnQoe1xuICBuYW1lOiAnbWFwLXByb3hpbWl0eScsXG4gIHRpdGxlOiAnaWdvLmludGVncmF0aW9uLnRvb2xzLmNsb3Nlc3RGZWF0dXJlJyxcbiAgaWNvbjogJ3JhZGFyJ1xufSlcbi8qKlxuICogVG9vbCB0byBoYW5kbGUgdGhlIGFkdmFuY2VkIG1hcCB0b29sc1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tbWFwLXByb3hpbWl0eS10b29sJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcC1wcm94aW1pdHktdG9vbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hcC1wcm94aW1pdHktdG9vbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRW50aXR5VGFibGVDb21wb25lbnQsXG4gICAgTmdJZixcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0UmFkaW9Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIElnb0xhbmd1YWdlTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTWFwUHJveGltaXR5VG9vbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzdWJzJCQ6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyBzdGF0aWM6IHRydWUgfSkgdGFibGU6IEVudGl0eVRhYmxlQ29tcG9uZW50O1xuXG4gIGdldCBtYXhEaXN0YW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBQcm94aW1pdHlTdGF0ZS5wcm94aW1pdHlSYWRpdXNWYWx1ZSQudmFsdWU7XG4gIH1cbiAgc2V0IG1heERpc3RhbmNlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLm1hcFByb3hpbWl0eVN0YXRlLnByb3hpbWl0eVJhZGl1c1ZhbHVlJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBtYXAoKTogSWdvTWFwIHtcbiAgICByZXR1cm4gdGhpcy5tYXBTdGF0ZS5tYXA7XG4gIH1cbiAgcHVibGljIHVzZXJEZWZpbmVkTWFwQ2VudGVyOiBib29sZWFuO1xuICBwdWJsaWMgdXNlckRlZmluZWRGb2xsb3dQb3NpdGlvbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRhYmxlIHRlbXBsYXRlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHRhYmxlVGVtcGxhdGU6IEVudGl0eVRhYmxlVGVtcGxhdGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1hcFN0YXRlOiBNYXBTdGF0ZSxcbiAgICBwdWJsaWMgbWFwUHJveGltaXR5U3RhdGU6IE1hcFByb3hpbWl0eVN0YXRlLFxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy50YWJsZVRlbXBsYXRlID0ge1xuICAgICAgc2VsZWN0aW9uOiB0cnVlLFxuICAgICAgc2VsZWN0TWFueTogZmFsc2UsXG4gICAgICBzZWxlY3Rpb25DaGVja2JveDogZmFsc2UsXG4gICAgICBzb3J0OiB0cnVlLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2VsZW1lbnQnLFxuICAgICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdpZ28uaW50ZWdyYXRpb24ubWFwLXByb3hpbWl0eS10b29sLmZlYXR1cmUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZUFjY2Vzc29yOiAobG9jYWxGZWF0dXJlOiBGZWF0dXJlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxGZWF0dXJlLnByb3BlcnRpZXMuZWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZGlzdGFuY2UnLFxuICAgICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdpZ28uaW50ZWdyYXRpb24ubWFwLXByb3hpbWl0eS10b29sLmRpc3RhbmNlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWVBY2Nlc3NvcjogKGxvY2FsRmVhdHVyZTogRmVhdHVyZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke051bWJlclV0aWxzLnJvdW5kVG9ORGVjaW1hbChcbiAgICAgICAgICAgICAgbG9jYWxGZWF0dXJlLnByb3BlcnRpZXMuZGlzdGFuY2UsXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICl9bWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubWFwUHJveGltaXR5U3RhdGUuZW5hYmxlZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnVzZXJEZWZpbmVkRm9sbG93UG9zaXRpb24gPVxuICAgICAgdGhpcy5tYXAuZ2VvbG9jYXRpb25Db250cm9sbGVyLmZvbGxvd1Bvc2l0aW9uID09PSB0cnVlO1xuICAgIHRoaXMudXNlckRlZmluZWRNYXBDZW50ZXIgPSB0aGlzLm1hcC5tYXBDZW50ZXIkLnZhbHVlID09PSB0cnVlO1xuXG4gICAgdGhpcy5zdWJzJCQucHVzaChcbiAgICAgIHRoaXMubWFwUHJveGltaXR5U3RhdGUucHJveGltaXR5bG9jYXRpb25UeXBlJC5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgdGhpcy5tYXAubWFwQ2VudGVyJC5uZXh0KHYgIT09ICdnZW9sb2NhdGlvbicpO1xuICAgICAgICBpZiAodiA9PT0gJ2dlb2xvY2F0aW9uJykge1xuICAgICAgICAgIHRoaXMubWFwLmdlb2xvY2F0aW9uQ29udHJvbGxlci5mb2xsb3dQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tYXAuZ2VvbG9jYXRpb25Db250cm9sbGVyLmZvbGxvd1Bvc2l0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubWFwUHJveGltaXR5U3RhdGUuZW5hYmxlZCQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5tYXAubWFwQ2VudGVyJC5uZXh0KHRoaXMudXNlckRlZmluZWRNYXBDZW50ZXIpO1xuICAgIHRoaXMuc3VicyQkLm1hcCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLm1hcC5nZW9sb2NhdGlvbkNvbnRyb2xsZXIuZm9sbG93UG9zaXRpb24gPVxuICAgICAgdGhpcy51c2VyRGVmaW5lZEZvbGxvd1Bvc2l0aW9uO1xuICB9XG5cbiAgb25Mb2NhdGlvblR5cGVDaGFuZ2UoZTogTWF0UmFkaW9DaGFuZ2UpIHtcbiAgICB0aGlzLm1hcFByb3hpbWl0eVN0YXRlLnByb3hpbWl0eWxvY2F0aW9uVHlwZSQubmV4dChlLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IHRoZSBjb29yZGluYXRlcyB0byBhIGNsaXBib2FyZFxuICAgKi9cbiAgY29weVRleHRUb0NsaXBib2FyZCgpOiB2b2lkIHtcbiAgICBjb25zdCBzdWNjZXNzZnVsID0gQ2xpcGJvYXJkLmNvcHkoXG4gICAgICB0aGlzLm1hcFByb3hpbWl0eVN0YXRlLmN1cnJlbnRQb3NpdGlvbkNvb3JkaW5hdGUkPy52YWx1ZS50b1N0cmluZygpXG4gICAgKTtcbiAgICBpZiAoc3VjY2Vzc2Z1bCkge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKFxuICAgICAgICAnaWdvLmludGVncmF0aW9uLm1hcC1wcm94aW1pdHktdG9vbC5jb3B5TXNnJyxcbiAgICAgICAgJ2lnby5pbnRlZ3JhdGlvbi5tYXAtcHJveGltaXR5LXRvb2wuY29weVRpdGxlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxpZ28tZW50aXR5LXRhYmxlXG4gICN0YWJsZVxuICBjbGFzcz1cInRhYmxlLWNvbXBhY3RcIlxuICBbc3RvcmVdPVwibWFwUHJveGltaXR5U3RhdGUucHJveGltaXR5RmVhdHVyZVN0b3JlXCJcbiAgW3RlbXBsYXRlXT1cInRhYmxlVGVtcGxhdGVcIlxuPjwvaWdvLWVudGl0eS10YWJsZT5cbjxiciAvPlxuPG1hdC1mb3JtLWZpZWxkXG4gICpuZ0lmPVwibWFwUHJveGltaXR5U3RhdGUuY3VycmVudFBvc2l0aW9uQ29vcmRpbmF0ZSQgfCBhc3luYyBhcyBjb29yZFwiXG4gIGNsYXNzPVwiY29vcmRpbmF0ZXNcIlxuPlxuICA8dGV4dGFyZWFcbiAgICAjdGV4dEFyZWFcbiAgICBtYXRJbnB1dFxuICAgIHJlYWRvbmx5XG4gICAgcm93cz1cIjFcIlxuICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmludGVncmF0aW9uLm1hcC1wcm94aW1pdHktdG9vbC5sb24nIHwgdHJhbnNsYXRlXCJcbiAgICBbdmFsdWVdPVwiY29vcmRbMF1cIlxuICA+PC90ZXh0YXJlYT5cbjwvbWF0LWZvcm0tZmllbGQ+XG48bWF0LWZvcm0tZmllbGRcbiAgKm5nSWY9XCJtYXBQcm94aW1pdHlTdGF0ZS5jdXJyZW50UG9zaXRpb25Db29yZGluYXRlJCB8IGFzeW5jIGFzIGNvb3JkMlwiXG4gIGNsYXNzPVwiY29vcmRpbmF0ZXMyXCJcbj5cbiAgPHRleHRhcmVhXG4gICAgI3RleHRBcmVhXG4gICAgbWF0SW5wdXRcbiAgICByZWFkb25seVxuICAgIHJvd3M9XCIxXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5pbnRlZ3JhdGlvbi5tYXAtcHJveGltaXR5LXRvb2wubGF0JyB8IHRyYW5zbGF0ZVwiXG4gICAgW3ZhbHVlXT1cImNvb3JkMlsxXVwiXG4gID48L3RleHRhcmVhPlxuPC9tYXQtZm9ybS1maWVsZD5cblxuPGJ1dHRvblxuICAqbmdJZj1cIlxuICAgIChtYXBQcm94aW1pdHlTdGF0ZS5jdXJyZW50UG9zaXRpb25Db29yZGluYXRlJCB8IGFzeW5jKSAmJlxuICAgIChtYXBQcm94aW1pdHlTdGF0ZS5jdXJyZW50UG9zaXRpb25Db29yZGluYXRlJCB8IGFzeW5jKS5sZW5ndGhcbiAgXCJcbiAgbWF0LWljb24tYnV0dG9uXG4gIChjbGljayk9XCJjb3B5VGV4dFRvQ2xpcGJvYXJkKClcIlxuPlxuICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cbjwvYnV0dG9uPlxuPGRpdiBjbGFzcz1cInRpdGxlLWNvbnRhaW5lclwiPlxuICA8bWF0LWxhYmVsIGNsYXNzPVwidGl0bGUgbWF0LXR5cG9ncmFwaHlcIj57e1xuICAgICdpZ28uaW50ZWdyYXRpb24ubWFwLXByb3hpbWl0eS10b29sLm1ldGhvZCcgfCB0cmFuc2xhdGVcbiAgfX08L21hdC1sYWJlbD5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXIgbWF0LXR5cG9ncmFwaHlcIj5cbiAgPG1hdC1yYWRpby1ncm91cCAoY2hhbmdlKT1cIm9uTG9jYXRpb25UeXBlQ2hhbmdlKCRldmVudClcIj5cbiAgICA8bWF0LXJhZGlvLWJ1dHRvblxuICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgIChtYXBQcm94aW1pdHlTdGF0ZS5wcm94aW1pdHlsb2NhdGlvblR5cGUkIHwgYXN5bmMpID09PSAnZ2VvbG9jYXRpb24nXG4gICAgICBcIlxuICAgICAgdmFsdWU9XCJnZW9sb2NhdGlvblwiXG4gICAgICA+e3tcbiAgICAgICAgJ2lnby5pbnRlZ3JhdGlvbi5tYXAtcHJveGltaXR5LXRvb2wuZ2VvbG9jYXRpb24nIHwgdHJhbnNsYXRlXG4gICAgICB9fTwvbWF0LXJhZGlvLWJ1dHRvblxuICAgID5cbiAgICA8bWF0LXJhZGlvLWJ1dHRvblxuICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgIChtYXBQcm94aW1pdHlTdGF0ZS5wcm94aW1pdHlsb2NhdGlvblR5cGUkIHwgYXN5bmMpID09PSAnbWFwQ2VudGVyJ1xuICAgICAgXCJcbiAgICAgIHZhbHVlPVwibWFwQ2VudGVyXCJcbiAgICAgID57e1xuICAgICAgICAnaWdvLmludGVncmF0aW9uLm1hcC1wcm94aW1pdHktdG9vbC5tYXBDZW50ZXInIHwgdHJhbnNsYXRlXG4gICAgICB9fTwvbWF0LXJhZGlvLWJ1dHRvblxuICAgID5cbiAgPC9tYXQtcmFkaW8tZ3JvdXA+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInJhZGl1cy11bml0XCI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInJhZGl1cy1maWVsZFwiIGZsb2F0TGFiZWw9XCJhbHdheXNcIj5cbiAgICA8bWF0LWxhYmVsPnt7XG4gICAgICAnaWdvLmludGVncmF0aW9uLm1hcC1wcm94aW1pdHktdG9vbC5yYWRpdXNNJyB8IHRyYW5zbGF0ZVxuICAgIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxuICAgICAgWyhuZ01vZGVsKV09XCJtYXhEaXN0YW5jZVwiXG4gICAgICBtYXRJbnB1dFxuICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAnaWdvLmludGVncmF0aW9uLm1hcC1wcm94aW1pdHktdG9vbC5yYWRpdXNNJyB8IHRyYW5zbGF0ZVxuICAgICAgfX1cIlxuICAgIC8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbiJdfQ==
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXByb3hpbWl0eS10b29sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ludGVncmF0aW9uL3NyYy9saWIvbWFwL21hcC1wcm94aW1pdHktdG9vbC9tYXAtcHJveGltaXR5LXRvb2wuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvaW50ZWdyYXRpb24vc3JjL2xpYi9tYXAvbWFwLXByb3hpbWl0eS10b29sL21hcC1wcm94aW1pdHktdG9vbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBa0IsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekUsT0FBTyxFQUFFLG9CQUFvQixFQUF1QixNQUFNLHFCQUFxQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFD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LGNBQWMsMFdBQ2QsZUFBZSwySUFDZixhQUFhLG1MQUNiLGNBQWMsb2xCQUNkLFdBQVcsMDZCQUNYLFNBQVMsNkNBQ1QsaUJBQWlCOztBQUdSLHlCQUF5QjtJQTFCckMsYUFBYSxDQUFDO1FBQ2IsSUFBSSxFQUFFLGVBQWU7UUFDckIsS0FBSyxFQUFFLHNDQUFzQztRQUM3QyxJQUFJLEVBQUUsT0FBTztLQUNkLENBQUM7SUFDRjs7T0FFRzs7cUNBMENrQixRQUFRO1FBQ0MsaUJBQWlCO1FBQ2xCLGVBQWU7UUFDaEIsY0FBYztHQTFCN0IseUJBQXlCLENBdUdyQzs7NEZBdkdZLHlCQUF5QjtrQkFsQnJDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBR3RCLElBQUksV0FDUDt3QkFDUCxvQkFBb0I7d0JBQ3BCLElBQUk7d0JBQ0osa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsU0FBUzt3QkFDVCxpQkFBaUI7cUJBQ2xCO3dLQUlxQyxLQUFLO3NCQUExQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0UmFkaW9DaGFuZ2UsIE1hdFJhZGlvTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xuXG5pbXBvcnQgeyBFbnRpdHlUYWJsZUNvbXBvbmVudCwgRW50aXR5VGFibGVUZW1wbGF0ZSB9IGZyb20gJ0BpZ28yL2NvbW1vbi9lbnRpdHknO1xuaW1wb3J0IHsgVG9vbENvbXBvbmVudCB9IGZyb20gJ0BpZ28yL2NvbW1vbi90b29sJztcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgSWdvTGFuZ3VhZ2VNb2R1bGUgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9tZXNzYWdlJztcbmltcG9ydCB7IEZlYXR1cmUsIElnb01hcCB9IGZyb20gJ0BpZ28yL2dlbyc7XG5pbXBvcnQgeyBDbGlwYm9hcmQsIE51bWJlclV0aWxzIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTWFwUHJveGltaXR5U3RhdGUgfSBmcm9tICcuLi9tYXAtcHJveGltaXR5LnN0YXRlJztcbmltcG9ydCB7IE1hcFN0YXRlIH0gZnJvbSAnLi4vbWFwLnN0YXRlJztcblxuQFRvb2xDb21wb25lbnQoe1xuICBuYW1lOiAnbWFwLXByb3hpbWl0eScsXG4gIHRpdGxlOiAnaWdvLmludGVncmF0aW9uLnRvb2xzLmNsb3Nlc3RGZWF0dXJlJyxcbiAgaWNvbjogJ3JhZGFyJ1xufSlcbi8qKlxuICogVG9vbCB0byBoYW5kbGUgdGhlIGFkdmFuY2VkIG1hcCB0b29sc1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tbWFwLXByb3hpbWl0eS10b29sJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcC1wcm94aW1pdHktdG9vbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hcC1wcm94aW1pdHktdG9vbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRW50aXR5VGFibGVDb21wb25lbnQsXG4gICAgTmdJZixcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0UmFkaW9Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIElnb0xhbmd1YWdlTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTWFwUHJveGltaXR5VG9vbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzdWJzJCQ6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyBzdGF0aWM6IHRydWUgfSkgdGFibGU6IEVudGl0eVRhYmxlQ29tcG9uZW50O1xuXG4gIGdldCBtYXhEaXN0YW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBQcm94aW1pdHlTdGF0ZS5wcm94aW1pdHlSYWRpdXNWYWx1ZSQudmFsdWU7XG4gIH1cbiAgc2V0IG1heERpc3RhbmNlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLm1hcFByb3hpbWl0eVN0YXRlLnByb3hpbWl0eVJhZGl1c1ZhbHVlJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBtYXAoKTogSWdvTWFwIHtcbiAgICByZXR1cm4gdGhpcy5tYXBTdGF0ZS5tYXA7XG4gIH1cbiAgcHVibGljIHVzZXJEZWZpbmVkTWFwQ2VudGVyOiBib29sZWFuO1xuICBwdWJsaWMgdXNlckRlZmluZWRGb2xsb3dQb3NpdGlvbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRhYmxlIHRlbXBsYXRlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHRhYmxlVGVtcGxhdGU6IEVudGl0eVRhYmxlVGVtcGxhdGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1hcFN0YXRlOiBNYXBTdGF0ZSxcbiAgICBwdWJsaWMgbWFwUHJveGltaXR5U3RhdGU6IE1hcFByb3hpbWl0eVN0YXRlLFxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy50YWJsZVRlbXBsYXRlID0ge1xuICAgICAgc2VsZWN0aW9uOiB0cnVlLFxuICAgICAgc2VsZWN0TWFueTogZmFsc2UsXG4gICAgICBzZWxlY3Rpb25DaGVja2JveDogZmFsc2UsXG4gICAgICBzb3J0OiB0cnVlLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2VsZW1lbnQnLFxuICAgICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdpZ28uaW50ZWdyYXRpb24ubWFwLXByb3hpbWl0eS10b29sLmZlYXR1cmUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZUFjY2Vzc29yOiAobG9jYWxGZWF0dXJlOiBGZWF0dXJlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxGZWF0dXJlLnByb3BlcnRpZXMuZWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZGlzdGFuY2UnLFxuICAgICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdpZ28uaW50ZWdyYXRpb24ubWFwLXByb3hpbWl0eS10b29sLmRpc3RhbmNlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWVBY2Nlc3NvcjogKGxvY2FsRmVhdHVyZTogRmVhdHVyZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke051bWJlclV0aWxzLnJvdW5kVG9ORGVjaW1hbChcbiAgICAgICAgICAgICAgbG9jYWxGZWF0dXJlLnByb3BlcnRpZXMuZGlzdGFuY2UsXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICl9bWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubWFwUHJveGltaXR5U3RhdGUuZW5hYmxlZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnVzZXJEZWZpbmVkRm9sbG93UG9zaXRpb24gPVxuICAgICAgdGhpcy5tYXAuZ2VvbG9jYXRpb25Db250cm9sbGVyLmZvbGxvd1Bvc2l0aW9uID09PSB0cnVlO1xuICAgIHRoaXMudXNlckRlZmluZWRNYXBDZW50ZXIgPSB0aGlzLm1hcC5tYXBDZW50ZXIkLnZhbHVlID09PSB0cnVlO1xuXG4gICAgdGhpcy5zdWJzJCQucHVzaChcbiAgICAgIHRoaXMubWFwUHJveGltaXR5U3RhdGUucHJveGltaXR5bG9jYXRpb25UeXBlJC5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgdGhpcy5tYXAubWFwQ2VudGVyJC5uZXh0KHYgIT09ICdnZW9sb2NhdGlvbicpO1xuICAgICAgICBpZiAodiA9PT0gJ2dlb2xvY2F0aW9uJykge1xuICAgICAgICAgIHRoaXMubWFwLmdlb2xvY2F0aW9uQ29udHJvbGxlci5mb2xsb3dQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tYXAuZ2VvbG9jYXRpb25Db250cm9sbGVyLmZvbGxvd1Bvc2l0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubWFwUHJveGltaXR5U3RhdGUuZW5hYmxlZCQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5tYXAubWFwQ2VudGVyJC5uZXh0KHRoaXMudXNlckRlZmluZWRNYXBDZW50ZXIpO1xuICAgIHRoaXMuc3VicyQkLm1hcCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLm1hcC5nZW9sb2NhdGlvbkNvbnRyb2xsZXIuZm9sbG93UG9zaXRpb24gPVxuICAgICAgdGhpcy51c2VyRGVmaW5lZEZvbGxvd1Bvc2l0aW9uO1xuICB9XG5cbiAgb25Mb2NhdGlvblR5cGVDaGFuZ2UoZTogTWF0UmFkaW9DaGFuZ2UpIHtcbiAgICB0aGlzLm1hcFByb3hpbWl0eVN0YXRlLnByb3hpbWl0eWxvY2F0aW9uVHlwZSQubmV4dChlLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IHRoZSBjb29yZGluYXRlcyB0byBhIGNsaXBib2FyZFxuICAgKi9cbiAgY29weVRleHRUb0NsaXBib2FyZCgpOiB2b2lkIHtcbiAgICBjb25zdCBzdWNjZXNzZnVsID0gQ2xpcGJvYXJkLmNvcHkoXG4gICAgICB0aGlzLm1hcFByb3hpbWl0eVN0YXRlLmN1cnJlbnRQb3NpdGlvbkNvb3JkaW5hdGUkPy52YWx1ZS50b1N0cmluZygpXG4gICAgKTtcbiAgICBpZiAoc3VjY2Vzc2Z1bCkge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKFxuICAgICAgICAnaWdvLmludGVncmF0aW9uLm1hcC1wcm94aW1pdHktdG9vbC5jb3B5TXNnJyxcbiAgICAgICAgJ2lnby5pbnRlZ3JhdGlvbi5tYXAtcHJveGltaXR5LXRvb2wuY29weVRpdGxlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxpZ28tZW50aXR5LXRhYmxlXG4gICN0YWJsZVxuICBjbGFzcz1cInRhYmxlLWNvbXBhY3RcIlxuICBbc3RvcmVdPVwibWFwUHJveGltaXR5U3RhdGUucHJveGltaXR5RmVhdHVyZVN0b3JlXCJcbiAgW3RlbXBsYXRlXT1cInRhYmxlVGVtcGxhdGVcIlxuPjwvaWdvLWVudGl0eS10YWJsZT5cbjxiciAvPlxuPG1hdC1mb3JtLWZpZWxkXG4gICpuZ0lmPVwibWFwUHJveGltaXR5U3RhdGUuY3VycmVudFBvc2l0aW9uQ29vcmRpbmF0ZSQgfCBhc3luYyBhcyBjb29yZFwiXG4gIGNsYXNzPVwiY29vcmRpbmF0ZXNcIlxuPlxuICA8dGV4dGFyZWFcbiAgICAjdGV4dEFyZWFcbiAgICBtYXRJbnB1dFxuICAgIHJlYWRvbmx5XG4gICAgcm93cz1cIjFcIlxuICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmludGVncmF0aW9uLm1hcC1wcm94aW1pdHktdG9vbC5sb24nIHwgdHJhbnNsYXRlXCJcbiAgICBbdmFsdWVdPVwiY29vcmRbMF1cIlxuICA+PC90ZXh0YXJlYT5cbjwvbWF0LWZvcm0tZmllbGQ+XG48bWF0LWZvcm0tZmllbGRcbiAgKm5nSWY9XCJtYXBQcm94aW1pdHlTdGF0ZS5jdXJyZW50UG9zaXRpb25Db29yZGluYXRlJCB8IGFzeW5jIGFzIGNvb3JkMlwiXG4gIGNsYXNzPVwiY29vcmRpbmF0ZXMyXCJcbj5cbiAgPHRleHRhcmVhXG4gICAgI3RleHRBcmVhXG4gICAgbWF0SW5wdXRcbiAgICByZWFkb25seVxuICAgIHJvd3M9XCIxXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5pbnRlZ3JhdGlvbi5tYXAtcHJveGltaXR5LXRvb2wubGF0JyB8IHRyYW5zbGF0ZVwiXG4gICAgW3ZhbHVlXT1cImNvb3JkMlsxXVwiXG4gID48L3RleHRhcmVhPlxuPC9tYXQtZm9ybS1maWVsZD5cblxuPGJ1dHRvblxuICAqbmdJZj1cIlxuICAgIChtYXBQcm94aW1pdHlTdGF0ZS5jdXJyZW50UG9zaXRpb25Db29yZGluYXRlJCB8IGFzeW5jKSAmJlxuICAgIChtYXBQcm94aW1pdHlTdGF0ZS5jdXJyZW50UG9zaXRpb25Db29yZGluYXRlJCB8IGFzeW5jKS5sZW5ndGhcbiAgXCJcbiAgbWF0LWljb24tYnV0dG9uXG4gIChjbGljayk9XCJjb3B5VGV4dFRvQ2xpcGJvYXJkKClcIlxuPlxuICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cbjwvYnV0dG9uPlxuPGRpdiBjbGFzcz1cInRpdGxlLWNvbnRhaW5lclwiPlxuICA8bWF0LWxhYmVsIGNsYXNzPVwidGl0bGUgbWF0LXR5cG9ncmFwaHlcIj57e1xuICAgICdpZ28uaW50ZWdyYXRpb24ubWFwLXByb3hpbWl0eS10b29sLm1ldGhvZCcgfCB0cmFuc2xhdGVcbiAgfX08L21hdC1sYWJlbD5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXIgbWF0LXR5cG9ncmFwaHlcIj5cbiAgPG1hdC1yYWRpby1ncm91cCAoY2hhbmdlKT1cIm9uTG9jYXRpb25UeXBlQ2hhbmdlKCRldmVudClcIj5cbiAgICA8bWF0LXJhZGlvLWJ1dHRvblxuICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgIChtYXBQcm94aW1pdHlTdGF0ZS5wcm94aW1pdHlsb2NhdGlvblR5cGUkIHwgYXN5bmMpID09PSAnZ2VvbG9jYXRpb24nXG4gICAgICBcIlxuICAgICAgdmFsdWU9XCJnZW9sb2NhdGlvblwiXG4gICAgICA+e3tcbiAgICAgICAgJ2lnby5pbnRlZ3JhdGlvbi5tYXAtcHJveGltaXR5LXRvb2wuZ2VvbG9jYXRpb24nIHwgdHJhbnNsYXRlXG4gICAgICB9fTwvbWF0LXJhZGlvLWJ1dHRvblxuICAgID5cbiAgICA8bWF0LXJhZGlvLWJ1dHRvblxuICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgIChtYXBQcm94aW1pdHlTdGF0ZS5wcm94aW1pdHlsb2NhdGlvblR5cGUkIHwgYXN5bmMpID09PSAnbWFwQ2VudGVyJ1xuICAgICAgXCJcbiAgICAgIHZhbHVlPVwibWFwQ2VudGVyXCJcbiAgICAgID57e1xuICAgICAgICAnaWdvLmludGVncmF0aW9uLm1hcC1wcm94aW1pdHktdG9vbC5tYXBDZW50ZXInIHwgdHJhbnNsYXRlXG4gICAgICB9fTwvbWF0LXJhZGlvLWJ1dHRvblxuICAgID5cbiAgPC9tYXQtcmFkaW8tZ3JvdXA+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInJhZGl1cy11bml0XCI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInJhZGl1cy1maWVsZFwiIGZsb2F0TGFiZWw9XCJhbHdheXNcIj5cbiAgICA8bWF0LWxhYmVsPnt7XG4gICAgICAnaWdvLmludGVncmF0aW9uLm1hcC1wcm94aW1pdHktdG9vbC5yYWRpdXNNJyB8IHRyYW5zbGF0ZVxuICAgIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxuICAgICAgWyhuZ01vZGVsKV09XCJtYXhEaXN0YW5jZVwiXG4gICAgICBtYXRJbnB1dFxuICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAnaWdvLmludGVncmF0aW9uLm1hcC1wcm94aW1pdHktdG9vbC5yYWRpdXNNJyB8IHRyYW5zbGF0ZVxuICAgICAgfX1cIlxuICAgIC8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { StorageService } from '@igo2/core/storage';
3
- import { FEATURE, FeatureStore, featureFromOl, measureOlGeometryLength, roundCoordTo } from '@igo2/geo';
3
+ import { FEATURE, FeatureStore, featureFromOl, isLayerItem, measureOlGeometryLength, roundCoordTo } from '@igo2/geo';
4
4
  import { uuid } from '@igo2/utils';
5
5
  import GeoJSON from 'ol/format/GeoJSON';
6
6
  import olLineString from 'ol/geom/LineString';
@@ -52,7 +52,7 @@ export class MapProximityState {
52
52
  .subscribe((bunch) => {
53
53
  this.proximityFeatureStore.clear();
54
54
  const enabled = bunch[0];
55
- const layers = this.map.layers;
55
+ const layers = this.map.layerController.all;
56
56
  const currentPos = this.map.geolocationController.position$.value;
57
57
  const locationType = bunch[1];
58
58
  const proximityRadiusValue = bunch[2];
@@ -75,7 +75,8 @@ export class MapProximityState {
75
75
  const coordLonLat = olProj.transform(coord, this.map.projection, 'EPSG:4269');
76
76
  const roundedCoordLonLat = roundCoordTo(coordLonLat, 6);
77
77
  this.currentPositionCoordinate$.next(roundedCoordLonLat);
78
- const layersToMonitor = layers.filter((layer) => layer.ol instanceof olLayerVector &&
78
+ const layersToMonitor = layers.filter((layer) => isLayerItem(layer) &&
79
+ layer.ol instanceof olLayerVector &&
79
80
  layer.dataSource.options.queryable &&
80
81
  layer.visible &&
81
82
  layer.isInResolutionsRange);
@@ -146,15 +147,13 @@ export class MapProximityState {
146
147
  });
147
148
  }
148
149
  getQueryTitle(feature, layer) {
149
- let title;
150
- if (layer.options?.source?.options) {
150
+ if (isLayerItem(layer) && layer.options?.source?.options) {
151
151
  const dataSourceOptions = layer.options.source
152
152
  .options;
153
153
  if (dataSourceOptions.queryTitle) {
154
- title = this.getLabelMatch(feature, dataSourceOptions.queryTitle);
154
+ return this.getLabelMatch(feature, dataSourceOptions.queryTitle);
155
155
  }
156
156
  }
157
- return title;
158
157
  }
159
158
  getLabelMatch(feature, labelMatch) {
160
159
  let label = labelMatch;
@@ -168,13 +167,13 @@ export class MapProximityState {
168
167
  }
169
168
  return label;
170
169
  }
171
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MapProximityState, deps: [{ token: i1.MapState }, { token: i2.StorageService }], target: i0.ɵɵFactoryTarget.Injectable });
172
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MapProximityState, providedIn: 'root' });
170
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapProximityState, deps: [{ token: i1.MapState }, { token: i2.StorageService }], target: i0.ɵɵFactoryTarget.Injectable });
171
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapProximityState, providedIn: 'root' });
173
172
  }
174
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: MapProximityState, decorators: [{
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapProximityState, decorators: [{
175
174
  type: Injectable,
176
175
  args: [{
177
176
  providedIn: 'root'
178
177
  }]
179
178
  }], ctorParameters: () => [{ type: i1.MapState }, { type: i2.StorageService }] });
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXByb3hpbWl0eS5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ludGVncmF0aW9uL3NyYy9saWIvbWFwL21hcC1wcm94aW1pdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUNMLE9BQU8sRUFFUCxZQUFZLEVBTVosYUFBYSxFQUNiLHVCQUF1QixFQUN2QixZQUFZLEVBQ2IsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuQyxPQUFPLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQUV4QyxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLGFBQWEsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUdsQyxPQUFPLEVBQUUsZUFBZSxFQUFnQixhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFFNUM7O0dBRUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBb0JsQjtJQUNBO0lBcEJGLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztJQUVsQyxRQUFRLEdBQTZCLElBQUksZUFBZSxDQUM3RCxLQUFLLENBQ04sQ0FBQztJQUNLLHFCQUFxQixDQUEwQjtJQUMvQyxzQkFBc0IsR0FDM0IsSUFBSSxlQUFlLENBQVMsYUFBYSxDQUFDLENBQUM7SUFDdEMscUJBQXFCLENBQXdCO0lBQzVDLE1BQU0sR0FBbUIsRUFBRSxDQUFDO0lB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O1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFnQixFQUFFLFVBQVU7UUFDeEMsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDO1FBQ3ZCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFFeEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3ZCLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSCwwQ0FBMEM7UUFDMUMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEQsS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7dUdBeE9VLGlCQUFpQjsyR0FBakIsaUJBQWlCLGNBRmhCLE1BQU07OzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9zdG9yYWdlJztcbmltcG9ydCB7XG4gIEZFQVRVUkUsXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVTdG9yZSxcbiAgSWdvTWFwLFxuICBMYXllcixcbiAgTWFwR2VvbG9jYXRpb25TdGF0ZSxcbiAgUXVlcnlhYmxlRGF0YVNvdXJjZSxcbiAgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMsXG4gIGZlYXR1cmVGcm9tT2wsXG4gIG1lYXN1cmVPbEdlb21ldHJ5TGVuZ3RoLFxuICByb3VuZENvb3JkVG9cbn0gZnJvbSAnQGlnbzIvZ2VvJztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICdAaWdvMi91dGlscyc7XG5cbmltcG9ydCBHZW9KU09OIGZyb20gJ29sL2Zvcm1hdC9HZW9KU09OJztcbmltcG9ydCBHZW9tZXRyeSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCBvbExpbmVTdHJpbmcgZnJvbSAnb2wvZ2VvbS9MaW5lU3RyaW5nJztcbmltcG9ydCBvbExheWVyVmVjdG9yIGZyb20gJ29sL2xheWVyL1ZlY3Rvcic7XG5pbXBvcnQgKiBhcyBvbFByb2ogZnJvbSAnb2wvcHJvaic7XG5pbXBvcnQgb2xWZWN0b3JTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBNYXBTdGF0ZSB9IGZyb20gJy4uL21hcC9tYXAuc3RhdGUnO1xuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGRpcmVjdGlvbiBtb2R1bGVcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTWFwUHJveGltaXR5U3RhdGUge1xuICBwcml2YXRlIGRlZmF1bHRQcm94aW1pdHlSYWRpdXNWYWx1ZSA9IDMwO1xuXG4gIHB1YmxpYyBlbmFibGVkJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihcbiAgICBmYWxzZVxuICApO1xuICBwdWJsaWMgcHJveGltaXR5UmFkaXVzVmFsdWUkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcbiAgcHVibGljIHByb3hpbWl0eWxvY2F0aW9uVHlwZSQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ2dlb2xvY2F0aW9uJyk7XG4gIHB1YmxpYyBwcm94aW1pdHlGZWF0dXJlU3RvcmU6IEZlYXR1cmVTdG9yZTxGZWF0dXJlPjtcbiAgcHJpdmF0ZSBzdWJzJCQ6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHB1YmxpYyBjdXJyZW50UG9zaXRpb25Db29yZGluYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8W251bWJlciwgbnVtYmVyXT4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG5cbiAgZ2V0IG1hcCgpOiBJZ29NYXAge1xuICAgIHJldHVybiB0aGlzLm1hcFN0YXRlLm1hcDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWFwU3RhdGU6IE1hcFN0YXRlLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucHJveGltaXR5RmVhdHVyZVN0b3JlID0gbmV3IEZlYXR1cmVTdG9yZTxGZWF0dXJlPihbXSwge1xuICAgICAgbWFwOiB0aGlzLm1hcFN0YXRlLm1hcFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm94aW1pdHlSYWRpdXNWYWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oXG4gICAgICAodGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ21hcFByb3hpbWl0eVJhZGl1cycpIGFzIG51bWJlcikgfHxcbiAgICAgICAgdGhpcy5kZWZhdWx0UHJveGltaXR5UmFkaXVzVmFsdWVcbiAgICApO1xuXG4gICAgdGhpcy5tYXBTdGF0ZS5tYXAub2wub25jZSgncmVuZGVyY29tcGxldGUnLCAoKSA9PiB7XG4gICAgICB0aGlzLnN1YnNjcmliZVByb3hpbWl0eU1vbml0b3IoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN1YnNjcmliZVByb3hpbWl0eU1vbml0b3IoKSB7XG4gICAgdGhpcy5zdWJzJCQucHVzaChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmVuYWJsZWQkLFxuICAgICAgICB0aGlzLnByb3hpbWl0eWxvY2F0aW9uVHlwZSQsXG4gICAgICAgIHRoaXMucHJveGltaXR5UmFkaXVzVmFsdWUkLFxuICAgICAgICBpbnRlcnZhbCg1MDAwKSxcbiAgICAgICAgdGhpcy5tYXAuZ2VvbG9jYXRpb25Db250cm9sbGVyLnBvc2l0aW9uJFxuICAgICAgXSlcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGJ1bmNoOiBbYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIsIG51bWJlciwgTWFwR2VvbG9jYXRpb25TdGF0ZV0pID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJveGltaXR5RmVhdHVyZVN0b3JlLmNsZWFyKCk7XG4gICAgICAgICAgICBjb25zdCBlbmFibGVkID0gYnVuY2hbMF07XG4gICAgICAgICAgICBjb25zdCBsYXllcnMgPSB0aGlzLm1hcC5sYXllcnM7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UG9zID0gdGhpcy5tYXAuZ2VvbG9jYXRpb25Db250cm9sbGVyLnBvc2l0aW9uJC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uVHlwZSA9IGJ1bmNoWzFdO1xuICAgICAgICAgICAgY29uc3QgcHJveGltaXR5UmFkaXVzVmFsdWUgPSBidW5jaFsyXTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFxuICAgICAgICAgICAgICAnbWFwUHJveGltaXR5UmFkaXVzJyxcbiAgICAgICAgICAgICAgcHJveGltaXR5UmFkaXVzVmFsdWUgfHwgdGhpcy5kZWZhdWx0UHJveGltaXR5UmFkaXVzVmFsdWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjb29yZDogbnVtYmVyW107XG4gICAgICAgICAgICBpZiAobG9jYXRpb25UeXBlID09PSAnZ2VvbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgIGlmICghY3VycmVudFBvcyB8fCAhY3VycmVudFBvcy5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvb3JkID0gb2xQcm9qLnRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICBjdXJyZW50UG9zLnBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQb3MucHJvamVjdGlvbixcbiAgICAgICAgICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRoaXMubWFwLm1hcENlbnRlciQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb29yZCA9IHRoaXMubWFwLnZpZXdDb250cm9sbGVyLmdldENlbnRlcigpO1xuICAgICAgICAgICAgICB0aGlzLm1hcC5tYXBDZW50ZXIkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvb3JkTG9uTGF0ID0gb2xQcm9qLnRyYW5zZm9ybShcbiAgICAgICAgICAgICAgY29vcmQsXG4gICAgICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXG4gICAgICAgICAgICAgICdFUFNHOjQyNjknXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3Qgcm91bmRlZENvb3JkTG9uTGF0ID0gcm91bmRDb29yZFRvKFxuICAgICAgICAgICAgICBjb29yZExvbkxhdCBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICA2XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UG9zaXRpb25Db29yZGluYXRlJC5uZXh0KHJvdW5kZWRDb29yZExvbkxhdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxheWVyc1RvTW9uaXRvciA9IGxheWVycy5maWx0ZXIoXG4gICAgICAgICAgICAgIChsYXllcikgPT5cbiAgICAgICAgICAgICAgICBsYXllci5vbCBpbnN0YW5jZW9mIG9sTGF5ZXJWZWN0b3IgJiZcbiAgICAgICAgICAgICAgICAobGF5ZXIuZGF0YVNvdXJjZSBhcyBRdWVyeWFibGVEYXRhU291cmNlKS5vcHRpb25zLnF1ZXJ5YWJsZSAmJlxuICAgICAgICAgICAgICAgIGxheWVyLnZpc2libGUgJiZcbiAgICAgICAgICAgICAgICBsYXllci5pc0luUmVzb2x1dGlvbnNSYW5nZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbGF5ZXJzVG9Nb25pdG9yLm1hcCgobGF5ZXJUb01vbml0b3IpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGF5ZXJTb3VyY2UgPVxuICAgICAgICAgICAgICAgIGxheWVyVG9Nb25pdG9yLm9sLmdldFNvdXJjZSgpIGFzIG9sVmVjdG9yU291cmNlO1xuXG4gICAgICAgICAgICAgIC8vIE1vc3RseSBmb3IgcG9seWdvbiBmZWF0dXJlcy5cbiAgICAgICAgICAgICAgY29uc3Qgb2xGZWF0dXJlc0F0Q29vcmRpbmF0ZSA9XG4gICAgICAgICAgICAgICAgbGF5ZXJTb3VyY2UuZ2V0RmVhdHVyZXNBdENvb3JkaW5hdGUoY29vcmQpO1xuICAgICAgICAgICAgICBpZiAob2xGZWF0dXJlc0F0Q29vcmRpbmF0ZSAmJiBvbEZlYXR1cmVzQXRDb29yZGluYXRlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG9sRmVhdHVyZXNBdENvb3JkaW5hdGUubWFwKChvbEZlYXR1cmVBdENvb3JkaW5hdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVBdFRoaXNQb3NpdGlvbiA9IGZlYXR1cmVGcm9tT2woXG4gICAgICAgICAgICAgICAgICAgIG9sRmVhdHVyZUF0Q29vcmRpbmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvblxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5nZXRRdWVyeVRpdGxlKFxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlQXRUaGlzUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGxheWVyVG9Nb25pdG9yXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgLy8gdG9kbyBoYW5kbGUgaW1wb3J0ZWQgbGF5ZXJzIHdpdGhvdXQgcXVlcnl0aXRsZT8gcHJvbXB0IHRpdGxlIG9yIGRldGVjdCBmaXJzdCBjb2x1bW4/XG4gICAgICAgICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmVUb1N0b3JlKFxuICAgICAgICAgICAgICAgICAgICBsYXllclRvTW9uaXRvcixcbiAgICAgICAgICAgICAgICAgICAgY29vcmQsXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVBdFRoaXNQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBwcm94aW1pdHkgZm9yIHJlbWFpbmluZyBzb3VyY2VzXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdE9sRmVhdHVyZSA9XG4gICAgICAgICAgICAgICAgICBsYXllclNvdXJjZS5nZXRDbG9zZXN0RmVhdHVyZVRvQ29vcmRpbmF0ZShjb29yZCk7XG4gICAgICAgICAgICAgICAgaWYgKGNsb3Nlc3RPbEZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RPbEdlb20gPSBjbG9zZXN0T2xGZWF0dXJlLmdldEdlb21ldHJ5KCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjbG9zZXN0RmVhdHVyZSA9IGZlYXR1cmVGcm9tT2woXG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RPbEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBnZW9tZXRyeUNsb3Nlc3RQb2ludCA9XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RPbEdlb20uZ2V0Q2xvc2VzdFBvaW50KGNvb3JkKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmViZXR3ZWVuID0gbmV3IG9sTGluZVN0cmluZyhbXG4gICAgICAgICAgICAgICAgICAgIGNvb3JkLFxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeUNsb3Nlc3RQb2ludFxuICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsaW5lTGVuZ3RoID0gbWVhc3VyZU9sR2VvbWV0cnlMZW5ndGgoXG4gICAgICAgICAgICAgICAgICAgIGxpbmViZXR3ZWVuLFxuICAgICAgICAgICAgICAgICAgICAnRVBTRzozODU3J1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChsaW5lTGVuZ3RoIDw9IHByb3hpbWl0eVJhZGl1c1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5nZXRRdWVyeVRpdGxlKFxuICAgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgIGxheWVyVG9Nb25pdG9yXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRvZG8gaGFuZGxlIGltcG9ydGVkIGxheWVycyB3aXRob3V0IHF1ZXJ5dGl0bGU/IHByb21wdCB0aXRsZSBvciBkZXRlY3QgZmlyc3QgY29sdW1uP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmVUb1N0b3JlKFxuICAgICAgICAgICAgICAgICAgICAgIGxheWVyVG9Nb25pdG9yLFxuICAgICAgICAgICAgICAgICAgICAgIGNvb3JkLFxuICAgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgIGxpbmVMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZmVhdHVyZSB3aXRoIHByb3hpbWl0eSBwcm9wZXJ0aWVzIHRvIHRoZSBzdG9yZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgYWRkRmVhdHVyZVRvU3RvcmUoXG4gICAgbGF5ZXI6IExheWVyLFxuICAgIGNvb3JkRnJvbUNhbGN1bGF0ZWREaXN0YW5jZSxcbiAgICBmZWF0dXJlOiBGZWF0dXJlLFxuICAgIHRpdGxlLFxuICAgIGRpc3RhbmNlXG4gICkge1xuICAgIGNvbnN0IGZlYXR1cmVJZCA9IHV1aWQoKTtcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKTtcbiAgICBjb25zdCBvbEdlb21ldHJ5ID0gZmVhdHVyZS5vbC5nZXRHZW9tZXRyeSgpIGFzIEdlb21ldHJ5O1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEdlb0pTT04oKS53cml0ZUdlb21ldHJ5T2JqZWN0KG9sR2VvbWV0cnksIHtcbiAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiBwcm9qZWN0aW9uLFxuICAgICAgZGF0YVByb2plY3Rpb246IHByb2plY3Rpb25cbiAgICB9KSBhcyBhbnk7XG4gICAgdGhpcy5wcm94aW1pdHlGZWF0dXJlU3RvcmUudXBkYXRlKHtcbiAgICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgICBnZW9tZXRyeSxcbiAgICAgIHByb2plY3Rpb246IHByb2plY3Rpb24uZ2V0Q29kZSgpLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgIC4uLntcbiAgICAgICAgICBpZDogZmVhdHVyZUlkLFxuICAgICAgICAgIGVsZW1lbnQ6IHRpdGxlLFxuICAgICAgICAgIGRpc3RhbmNlLFxuICAgICAgICAgIGNvb3JkRnJvbUNhbGN1bGF0ZWREaXN0YW5jZSxcbiAgICAgICAgICBsYXllclNyY0lkOiBsYXllci5pZCxcbiAgICAgICAgICBsYXllclNyY1RpdGxlOiBsYXllci50aXRsZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbWV0YToge1xuICAgICAgICBpZDogZmVhdHVyZUlkXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRRdWVyeVRpdGxlKGZlYXR1cmU6IEZlYXR1cmUsIGxheWVyOiBMYXllcik6IHN0cmluZyB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmIChsYXllci5vcHRpb25zPy5zb3VyY2U/Lm9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VPcHRpb25zID0gbGF5ZXIub3B0aW9ucy5zb3VyY2VcbiAgICAgICAgLm9wdGlvbnMgYXMgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnM7XG4gICAgICBpZiAoZGF0YVNvdXJjZU9wdGlvbnMucXVlcnlUaXRsZSkge1xuICAgICAgICB0aXRsZSA9IHRoaXMuZ2V0TGFiZWxNYXRjaChmZWF0dXJlLCBkYXRhU291cmNlT3B0aW9ucy5xdWVyeVRpdGxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRpdGxlO1xuICB9XG5cbiAgZ2V0TGFiZWxNYXRjaChmZWF0dXJlOiBGZWF0dXJlLCBsYWJlbE1hdGNoKTogc3RyaW5nIHtcbiAgICBsZXQgbGFiZWwgPSBsYWJlbE1hdGNoO1xuICAgIGNvbnN0IGxhYmVsVG9HZXQgPSBBcnJheS5mcm9tKGxhYmVsTWF0Y2gubWF0Y2hBbGwoL1xcJFxceyhbXlxce1xcfV0rKVxcfS9nKSk7XG5cbiAgICBsYWJlbFRvR2V0LmZvckVhY2goKHYpID0+IHtcbiAgICAgIGxhYmVsID0gbGFiZWwucmVwbGFjZSh2WzBdLCBmZWF0dXJlLnByb3BlcnRpZXNbdlsxXV0pO1xuICAgIH0pO1xuXG4gICAgLy8gTm90aGluZyBkb25lPyBjaGVjayBmZWF0dXJlJ3MgYXR0cmlidXRlXG4gICAgaWYgKGxhYmVsVG9HZXQubGVuZ3RoID09PSAwICYmIGxhYmVsID09PSBsYWJlbE1hdGNoKSB7XG4gICAgICBsYWJlbCA9IGZlYXR1cmUucHJvcGVydGllc1tsYWJlbE1hdGNoXSB8fCBsYWJlbE1hdGNoO1xuICAgIH1cbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cbn1cbiJdfQ==
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXByb3hpbWl0eS5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ludGVncmF0aW9uL3NyYy9saWIvbWFwL21hcC1wcm94aW1pdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUVMLE9BQU8sRUFFUCxZQUFZLEVBTVosYUFBYSxFQUNiLFdBQVcsRUFDWCx1QkFBdUIsRUFDdkIsWUFBWSxFQUNiLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHbkMsT0FBTyxPQUFPLE1BQU0sbUJBQW1CLENBQUM7QUFFeEMsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFHbEMsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBRTVDOztHQUVHO0FBSUgsTUFBTSxPQUFPLGlCQUFpQjtJQW9CbEI7SUFDQTtJQXBCRiwyQkFBMkIsR0FBRyxFQUFFLENBQUM7SUFFbEMsUUFBUSxHQUE2QixJQUFJLGVBQWUsQ0FDN0QsS0FBSyxDQUNOLENBQUM7SUFDSyxxQkFBcUIsQ0FBMEI7SUFDL0Msc0JBQXNCLEdBQzNCLElBQUksZUFBZSxDQUFTLGFBQWEsQ0FBQyxDQUFDO0lBQ3RDLHFCQUFxQixDQUF3QjtJQUM1QyxNQUFNLEdBQW1CLEVB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T0FBTyxFQUFFLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25FLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFnQixFQUFFLFVBQVU7UUFDeEMsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDO1FBQ3ZCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFFeEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3ZCLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSCwwQ0FBMEM7UUFDMUMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEQsS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7d0dBdk9VLGlCQUFpQjs0R0FBakIsaUJBQWlCLGNBRmhCLE1BQU07OzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9zdG9yYWdlJztcbmltcG9ydCB7XG4gIEFueUxheWVyLFxuICBGRUFUVVJFLFxuICBGZWF0dXJlLFxuICBGZWF0dXJlU3RvcmUsXG4gIElnb01hcCxcbiAgTGF5ZXIsXG4gIE1hcEdlb2xvY2F0aW9uU3RhdGUsXG4gIFF1ZXJ5YWJsZURhdGFTb3VyY2UsXG4gIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zLFxuICBmZWF0dXJlRnJvbU9sLFxuICBpc0xheWVySXRlbSxcbiAgbWVhc3VyZU9sR2VvbWV0cnlMZW5ndGgsXG4gIHJvdW5kQ29vcmRUb1xufSBmcm9tICdAaWdvMi9nZW8nO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IHsgQ29vcmRpbmF0ZSB9IGZyb20gJ29sL2Nvb3JkaW5hdGUnO1xuaW1wb3J0IEdlb0pTT04gZnJvbSAnb2wvZm9ybWF0L0dlb0pTT04nO1xuaW1wb3J0IEdlb21ldHJ5IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IG9sTGluZVN0cmluZyBmcm9tICdvbC9nZW9tL0xpbmVTdHJpbmcnO1xuaW1wb3J0IG9sTGF5ZXJWZWN0b3IgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yJztcbmltcG9ydCAqIGFzIG9sUHJvaiBmcm9tICdvbC9wcm9qJztcbmltcG9ydCBvbFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1hcFN0YXRlIH0gZnJvbSAnLi4vbWFwL21hcC5zdGF0ZSc7XG5cbi8qKlxuICogU2VydmljZSB0aGF0IGhvbGRzIHRoZSBzdGF0ZSBvZiB0aGUgZGlyZWN0aW9uIG1vZHVsZVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNYXBQcm94aW1pdHlTdGF0ZSB7XG4gIHByaXZhdGUgZGVmYXVsdFByb3hpbWl0eVJhZGl1c1ZhbHVlID0gMzA7XG5cbiAgcHVibGljIGVuYWJsZWQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxuICAgIGZhbHNlXG4gICk7XG4gIHB1YmxpYyBwcm94aW1pdHlSYWRpdXNWYWx1ZSQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xuICBwdWJsaWMgcHJveGltaXR5bG9jYXRpb25UeXBlJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignZ2VvbG9jYXRpb24nKTtcbiAgcHVibGljIHByb3hpbWl0eUZlYXR1cmVTdG9yZTogRmVhdHVyZVN0b3JlPEZlYXR1cmU+O1xuICBwcml2YXRlIHN1YnMkJDogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHVibGljIGN1cnJlbnRQb3NpdGlvbkNvb3JkaW5hdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb29yZGluYXRlPihcbiAgICB1bmRlZmluZWRcbiAgKTtcblxuICBnZXQgbWFwKCk6IElnb01hcCB7XG4gICAgcmV0dXJuIHRoaXMubWFwU3RhdGUubWFwO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtYXBTdGF0ZTogTWFwU3RhdGUsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5wcm94aW1pdHlGZWF0dXJlU3RvcmUgPSBuZXcgRmVhdHVyZVN0b3JlPEZlYXR1cmU+KFtdLCB7XG4gICAgICBtYXA6IHRoaXMubWFwU3RhdGUubWFwXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb3hpbWl0eVJhZGl1c1ZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihcbiAgICAgICh0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnbWFwUHJveGltaXR5UmFkaXVzJykgYXMgbnVtYmVyKSB8fFxuICAgICAgICB0aGlzLmRlZmF1bHRQcm94aW1pdHlSYWRpdXNWYWx1ZVxuICAgICk7XG5cbiAgICB0aGlzLm1hcFN0YXRlLm1hcC5vbC5vbmNlKCdyZW5kZXJjb21wbGV0ZScsICgpID0+IHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlUHJveGltaXR5TW9uaXRvcigpO1xuICAgIH0pO1xuICB9XG5cbiAgc3Vic2NyaWJlUHJveGltaXR5TW9uaXRvcigpIHtcbiAgICB0aGlzLnN1YnMkJC5wdXNoKFxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZW5hYmxlZCQsXG4gICAgICAgIHRoaXMucHJveGltaXR5bG9jYXRpb25UeXBlJCxcbiAgICAgICAgdGhpcy5wcm94aW1pdHlSYWRpdXNWYWx1ZSQsXG4gICAgICAgIGludGVydmFsKDUwMDApLFxuICAgICAgICB0aGlzLm1hcC5nZW9sb2NhdGlvbkNvbnRyb2xsZXIucG9zaXRpb24kXG4gICAgICBdKVxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYnVuY2g6IFtib29sZWFuLCBzdHJpbmcsIG51bWJlciwgbnVtYmVyLCBNYXBHZW9sb2NhdGlvblN0YXRlXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm94aW1pdHlGZWF0dXJlU3RvcmUuY2xlYXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGVuYWJsZWQgPSBidW5jaFswXTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVycyA9IHRoaXMubWFwLmxheWVyQ29udHJvbGxlci5hbGw7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UG9zID0gdGhpcy5tYXAuZ2VvbG9jYXRpb25Db250cm9sbGVyLnBvc2l0aW9uJC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uVHlwZSA9IGJ1bmNoWzFdO1xuICAgICAgICAgICAgY29uc3QgcHJveGltaXR5UmFkaXVzVmFsdWUgPSBidW5jaFsyXTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFxuICAgICAgICAgICAgICAnbWFwUHJveGltaXR5UmFkaXVzJyxcbiAgICAgICAgICAgICAgcHJveGltaXR5UmFkaXVzVmFsdWUgfHwgdGhpcy5kZWZhdWx0UHJveGltaXR5UmFkaXVzVmFsdWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjb29yZDogbnVtYmVyW107XG4gICAgICAgICAgICBpZiAobG9jYXRpb25UeXBlID09PSAnZ2VvbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgIGlmICghY3VycmVudFBvcyB8fCAhY3VycmVudFBvcy5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvb3JkID0gb2xQcm9qLnRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICBjdXJyZW50UG9zLnBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQb3MucHJvamVjdGlvbixcbiAgICAgICAgICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRoaXMubWFwLm1hcENlbnRlciQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb29yZCA9IHRoaXMubWFwLnZpZXdDb250cm9sbGVyLmdldENlbnRlcigpO1xuICAgICAgICAgICAgICB0aGlzLm1hcC5tYXBDZW50ZXIkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvb3JkTG9uTGF0ID0gb2xQcm9qLnRyYW5zZm9ybShcbiAgICAgICAgICAgICAgY29vcmQsXG4gICAgICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXG4gICAgICAgICAgICAgICdFUFNHOjQyNjknXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3Qgcm91bmRlZENvb3JkTG9uTGF0ID0gcm91bmRDb29yZFRvKFxuICAgICAgICAgICAgICBjb29yZExvbkxhdCBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICA2XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UG9zaXRpb25Db29yZGluYXRlJC5uZXh0KHJvdW5kZWRDb29yZExvbkxhdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxheWVyc1RvTW9uaXRvciA9IGxheWVycy5maWx0ZXIoXG4gICAgICAgICAgICAgIChsYXllcikgPT5cbiAgICAgICAgICAgICAgICBpc0xheWVySXRlbShsYXllcikgJiZcbiAgICAgICAgICAgICAgICBsYXllci5vbCBpbnN0YW5jZW9mIG9sTGF5ZXJWZWN0b3IgJiZcbiAgICAgICAgICAgICAgICAobGF5ZXIuZGF0YVNvdXJjZSBhcyBRdWVyeWFibGVEYXRhU291cmNlKS5vcHRpb25zLnF1ZXJ5YWJsZSAmJlxuICAgICAgICAgICAgICAgIGxheWVyLnZpc2libGUgJiZcbiAgICAgICAgICAgICAgICBsYXllci5pc0luUmVzb2x1dGlvbnNSYW5nZVxuICAgICAgICAgICAgKSBhcyBMYXllcltdO1xuXG4gICAgICAgICAgICBsYXllcnNUb01vbml0b3IubWFwKChsYXllclRvTW9uaXRvcikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBsYXllclNvdXJjZSA9XG4gICAgICAgICAgICAgICAgbGF5ZXJUb01vbml0b3Iub2wuZ2V0U291cmNlKCkgYXMgb2xWZWN0b3JTb3VyY2U7XG5cbiAgICAgICAgICAgICAgLy8gTW9zdGx5IGZvciBwb2x5Z29uIGZlYXR1cmVzLlxuICAgICAgICAgICAgICBjb25zdCBvbEZlYXR1cmVzQXRDb29yZGluYXRlID1cbiAgICAgICAgICAgICAgICBsYXllclNvdXJjZS5nZXRGZWF0dXJlc0F0Q29vcmRpbmF0ZShjb29yZCk7XG4gICAgICAgICAgICAgIGlmIChvbEZlYXR1cmVzQXRDb29yZGluYXRlICYmIG9sRmVhdHVyZXNBdENvb3JkaW5hdGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb2xGZWF0dXJlc0F0Q29vcmRpbmF0ZS5tYXAoKG9sRmVhdHVyZUF0Q29vcmRpbmF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZUF0VGhpc1Bvc2l0aW9uID0gZmVhdHVyZUZyb21PbChcbiAgICAgICAgICAgICAgICAgICAgb2xGZWF0dXJlQXRDb29yZGluYXRlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmdldFF1ZXJ5VGl0bGUoXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVBdFRoaXNQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJUb01vbml0b3JcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAvLyB0b2RvIGhhbmRsZSBpbXBvcnRlZCBsYXllcnMgd2l0aG91dCBxdWVyeXRpdGxlPyBwcm9tcHQgdGl0bGUgb3IgZGV0ZWN0IGZpcnN0IGNvbHVtbj9cbiAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZVRvU3RvcmUoXG4gICAgICAgICAgICAgICAgICAgIGxheWVyVG9Nb25pdG9yLFxuICAgICAgICAgICAgICAgICAgICBjb29yZCxcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUF0VGhpc1Bvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIHByb3hpbWl0eSBmb3IgcmVtYWluaW5nIHNvdXJjZXNcbiAgICAgICAgICAgICAgICBjb25zdCBjbG9zZXN0T2xGZWF0dXJlID1cbiAgICAgICAgICAgICAgICAgIGxheWVyU291cmNlLmdldENsb3Nlc3RGZWF0dXJlVG9Db29yZGluYXRlKGNvb3JkKTtcbiAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdE9sRmVhdHVyZSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdE9sR2VvbSA9IGNsb3Nlc3RPbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RGZWF0dXJlID0gZmVhdHVyZUZyb21PbChcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdE9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvblxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5Q2xvc2VzdFBvaW50ID1cbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdE9sR2VvbS5nZXRDbG9zZXN0UG9pbnQoY29vcmQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGluZWJldHdlZW4gPSBuZXcgb2xMaW5lU3RyaW5nKFtcbiAgICAgICAgICAgICAgICAgICAgY29vcmQsXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5Q2xvc2VzdFBvaW50XG4gICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVMZW5ndGggPSBtZWFzdXJlT2xHZW9tZXRyeUxlbmd0aChcbiAgICAgICAgICAgICAgICAgICAgbGluZWJldHdlZW4sXG4gICAgICAgICAgICAgICAgICAgICdFUFNHOjM4NTcnXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKGxpbmVMZW5ndGggPD0gcHJveGltaXR5UmFkaXVzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmdldFF1ZXJ5VGl0bGUoXG4gICAgICAgICAgICAgICAgICAgICAgY2xvc2VzdEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgbGF5ZXJUb01vbml0b3JcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdG9kbyBoYW5kbGUgaW1wb3J0ZWQgbGF5ZXJzIHdpdGhvdXQgcXVlcnl0aXRsZT8gcHJvbXB0IHRpdGxlIG9yIGRldGVjdCBmaXJzdCBjb2x1bW4/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZVRvU3RvcmUoXG4gICAgICAgICAgICAgICAgICAgICAgbGF5ZXJUb01vbml0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgY29vcmQsXG4gICAgICAgICAgICAgICAgICAgICAgY2xvc2VzdEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgbGluZUxlbmd0aFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBmZWF0dXJlIHdpdGggcHJveGltaXR5IHByb3BlcnRpZXMgdG8gdGhlIHN0b3JlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBhZGRGZWF0dXJlVG9TdG9yZShcbiAgICBsYXllcjogTGF5ZXIsXG4gICAgY29vcmRGcm9tQ2FsY3VsYXRlZERpc3RhbmNlLFxuICAgIGZlYXR1cmU6IEZlYXR1cmUsXG4gICAgdGl0bGUsXG4gICAgZGlzdGFuY2VcbiAgKSB7XG4gICAgY29uc3QgZmVhdHVyZUlkID0gdXVpZCgpO1xuICAgIGNvbnN0IHByb2plY3Rpb24gPSB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpO1xuICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBmZWF0dXJlLm9sLmdldEdlb21ldHJ5KCkgYXMgR2VvbWV0cnk7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3Qob2xHZW9tZXRyeSwge1xuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb24sXG4gICAgICBkYXRhUHJvamVjdGlvbjogcHJvamVjdGlvblxuICAgIH0pIGFzIGFueTtcbiAgICB0aGlzLnByb3hpbWl0eUZlYXR1cmVTdG9yZS51cGRhdGUoe1xuICAgICAgdHlwZTogRkVBVFVSRSxcbiAgICAgIGdlb21ldHJ5LFxuICAgICAgcHJvamVjdGlvbjogcHJvamVjdGlvbi5nZXRDb2RlKCksXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgLi4ue1xuICAgICAgICAgIGlkOiBmZWF0dXJlSWQsXG4gICAgICAgICAgZWxlbWVudDogdGl0bGUsXG4gICAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgICAgY29vcmRGcm9tQ2FsY3VsYXRlZERpc3RhbmNlLFxuICAgICAgICAgIGxheWVyU3JjSWQ6IGxheWVyLmlkLFxuICAgICAgICAgIGxheWVyU3JjVGl0bGU6IGxheWVyLnRpdGxlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBtZXRhOiB7XG4gICAgICAgIGlkOiBmZWF0dXJlSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFF1ZXJ5VGl0bGUoZmVhdHVyZTogRmVhdHVyZSwgbGF5ZXI6IEFueUxheWVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoaXNMYXllckl0ZW0obGF5ZXIpICYmIGxheWVyLm9wdGlvbnM/LnNvdXJjZT8ub3B0aW9ucykge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZU9wdGlvbnMgPSBsYXllci5vcHRpb25zLnNvdXJjZVxuICAgICAgICAub3B0aW9ucyBhcyBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9ucztcbiAgICAgIGlmIChkYXRhU291cmNlT3B0aW9ucy5xdWVyeVRpdGxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExhYmVsTWF0Y2goZmVhdHVyZSwgZGF0YVNvdXJjZU9wdGlvbnMucXVlcnlUaXRsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0TGFiZWxNYXRjaChmZWF0dXJlOiBGZWF0dXJlLCBsYWJlbE1hdGNoKTogc3RyaW5nIHtcbiAgICBsZXQgbGFiZWwgPSBsYWJlbE1hdGNoO1xuICAgIGNvbnN0IGxhYmVsVG9HZXQgPSBBcnJheS5mcm9tKGxhYmVsTWF0Y2gubWF0Y2hBbGwoL1xcJFxceyhbXlxce1xcfV0rKVxcfS9nKSk7XG5cbiAgICBsYWJlbFRvR2V0LmZvckVhY2goKHYpID0+IHtcbiAgICAgIGxhYmVsID0gbGFiZWwucmVwbGFjZSh2WzBdLCBmZWF0dXJlLnByb3BlcnRpZXNbdlsxXV0pO1xuICAgIH0pO1xuXG4gICAgLy8gTm90aGluZyBkb25lPyBjaGVjayBmZWF0dXJlJ3MgYXR0cmlidXRlXG4gICAgaWYgKGxhYmVsVG9HZXQubGVuZ3RoID09PSAwICYmIGxhYmVsID09PSBsYWJlbE1hdGNoKSB7XG4gICAgICBsYWJlbCA9IGZlYXR1cmUucHJvcGVydGllc1tsYWJlbE1hdGNoXSB8fCBsYWJlbE1hdGNoO1xuICAgIH1cbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cbn1cbiJdfQ==