@igo2/integration 1.9.3 → 1.11.0

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.
@@ -1,4 +1,5 @@
1
1
  import { Component, Input } from '@angular/core';
2
+ import { formatScale } from '@igo2/geo';
2
3
  import { Clipboard } from '@igo2/utils';
3
4
  import { StorageScope } from '@igo2/core';
4
5
  import { BehaviorSubject, combineLatest } from 'rxjs';
@@ -82,6 +83,7 @@ export class AdvancedCoordinatesComponent {
82
83
  this.storageService = storageService;
83
84
  this.config = config;
84
85
  this.formBuilder = formBuilder;
86
+ this.formattedScale$ = new BehaviorSubject('');
85
87
  this.projections$ = new BehaviorSubject([]);
86
88
  this.center = this.storageService.get('centerToggle');
87
89
  this.inMtmZone = true;
@@ -117,6 +119,7 @@ export class AdvancedCoordinatesComponent {
117
119
  ngOnInit() {
118
120
  this.mapState$$ = combineLatest([this.map.viewController.state$.pipe(debounceTime(50)), this.form.valueChanges])
119
121
  .subscribe(() => {
122
+ this.setScaleValue(this.map);
120
123
  this.currentCenterDefaultProj = this.map.viewController.getCenter(this.defaultProj.code);
121
124
  const currentMtmZone = zoneMtm(this.currentCenterDefaultProj[0]);
122
125
  const currentUtmZone = zoneUtm(this.currentCenterDefaultProj[0]);
@@ -155,6 +158,9 @@ export class AdvancedCoordinatesComponent {
155
158
  this.map.mapCenter$.next(false);
156
159
  this.mapState$$.unsubscribe();
157
160
  }
161
+ setScaleValue(map) {
162
+ this.formattedScale$.next(': ~ 1 / ' + formatScale(map.viewController.getScale()));
163
+ }
158
164
  /**
159
165
  * Coordinates of the center of the map on the appropriate systeme of coordinates
160
166
  * @returns Array of two numbers
@@ -392,7 +398,7 @@ export class AdvancedCoordinatesComponent {
392
398
  }
393
399
  }
394
400
  AdvancedCoordinatesComponent.ɵfac = function AdvancedCoordinatesComponent_Factory(t) { return new (t || AdvancedCoordinatesComponent)(i0.ɵɵdirectiveInject(i1.MapState), i0.ɵɵdirectiveInject(i2.LanguageService), i0.ɵɵdirectiveInject(i2.MessageService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i2.StorageService), i0.ɵɵdirectiveInject(i2.ConfigService), i0.ɵɵdirectiveInject(i3.FormBuilder)); };
395
- AdvancedCoordinatesComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdvancedCoordinatesComponent, selectors: [["igo-advanced-coordinates"]], inputs: { projectionsLimitations: "projectionsLimitations" }, decls: 24, vars: 24, consts: [["class", "coordinates", 4, "ngIf", "ngIfElse"], ["elseBlock", ""], ["class", "coordinates2", 4, "ngIf", "ngIfElse"], ["elseBlock2", ""], ["mat-raised-button", "", 1, "igo-form-button-group", 3, "click"], ["svgIcon", "content-copy"], [1, "igo-form", 3, "formGroup"], [1, "igo-input-container"], [3, "value", "valueChange"], ["matTooltipShowDelay", "500", 3, "value", "click", 4, "ngFor", "ngForOf"], [1, "center-toggle", "mat-typography", 3, "checked", "labelPosition", "change"], [1, "igo-zoom", "mat-typography"], [1, "coordinates"], ["matInput", "", "readonly", "", "rows", "1", 3, "placeholder", "value"], ["textArea", ""], [1, "coordinates2"], ["matTooltipShowDelay", "500", 3, "value", "click"]], template: function AdvancedCoordinatesComponent_Template(rf, ctx) { if (rf & 1) {
401
+ AdvancedCoordinatesComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdvancedCoordinatesComponent, selectors: [["igo-advanced-coordinates"]], inputs: { projectionsLimitations: "projectionsLimitations" }, decls: 32, vars: 37, consts: [["class", "coordinates", 4, "ngIf", "ngIfElse"], ["elseBlock", ""], ["class", "coordinates2", 4, "ngIf", "ngIfElse"], ["elseBlock2", ""], ["mat-raised-button", "", 1, "igo-form-button-group", 3, "click"], ["svgIcon", "content-copy"], [1, "igo-form", 3, "formGroup"], [1, "igo-input-container"], [3, "value", "valueChange"], ["matTooltipShowDelay", "500", 3, "value", "click", 4, "ngFor", "ngForOf"], [1, "center-toggle", "mat-typography", 3, "checked", "labelPosition", "change"], [1, "igo-zoom", "mat-typography"], [1, "coordinates"], ["matInput", "", "readonly", "", "rows", "1", 3, "placeholder", "value"], ["textArea", ""], [1, "coordinates2"], ["matTooltipShowDelay", "500", 3, "value", "click"]], template: function AdvancedCoordinatesComponent_Template(rf, ctx) { if (rf & 1) {
396
402
  i0.ɵɵtemplate(0, AdvancedCoordinatesComponent_mat_form_field_0_Template, 4, 4, "mat-form-field", 0);
397
403
  i0.ɵɵtemplate(1, AdvancedCoordinatesComponent_ng_template_1_Template, 4, 4, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
398
404
  i0.ɵɵtemplate(3, AdvancedCoordinatesComponent_mat_form_field_3_Template, 4, 4, "mat-form-field", 2);
@@ -425,6 +431,16 @@ AdvancedCoordinatesComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type
425
431
  i0.ɵɵtext(22);
426
432
  i0.ɵɵpipe(23, "translate");
427
433
  i0.ɵɵelementEnd();
434
+ i0.ɵɵelementStart(24, "p", 11);
435
+ i0.ɵɵtext(25);
436
+ i0.ɵɵpipe(26, "translate");
437
+ i0.ɵɵpipe(27, "async");
438
+ i0.ɵɵelementEnd();
439
+ i0.ɵɵelementStart(28, "p", 11);
440
+ i0.ɵɵtext(29);
441
+ i0.ɵɵpipe(30, "translate");
442
+ i0.ɵɵpipe(31, "number");
443
+ i0.ɵɵelementEnd();
428
444
  } if (rf & 2) {
429
445
  const _r1 = i0.ɵɵreference(2);
430
446
  const _r4 = i0.ɵɵreference(5);
@@ -432,22 +448,26 @@ AdvancedCoordinatesComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type
432
448
  i0.ɵɵadvance(3);
433
449
  i0.ɵɵproperty("ngIf", ctx.units)("ngIfElse", _r4);
434
450
  i0.ɵɵadvance(5);
435
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 14, "igo.integration.advanced-map-tool.advanced-coordinates.copy"), "\n");
451
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 18, "igo.integration.advanced-map-tool.advanced-coordinates.copy"), "\n");
436
452
  i0.ɵɵadvance(2);
437
453
  i0.ɵɵproperty("formGroup", ctx.form);
438
454
  i0.ɵɵadvance(3);
439
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 16, "igo.integration.advanced-map-tool.advanced-coordinates.coordSystem"));
455
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 20, "igo.integration.advanced-map-tool.advanced-coordinates.coordSystem"));
440
456
  i0.ɵɵadvance(2);
441
457
  i0.ɵɵproperty("value", ctx.inputProj);
442
458
  i0.ɵɵadvance(1);
443
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(17, 18, ctx.projections$));
459
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(17, 22, ctx.projections$));
444
460
  i0.ɵɵadvance(2);
445
461
  i0.ɵɵproperty("checked", ctx.center)("labelPosition", "before");
446
462
  i0.ɵɵadvance(1);
447
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(20, 20, "igo.integration.advanced-map-tool.advanced-coordinates.center"), " ");
463
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(20, 24, "igo.integration.advanced-map-tool.advanced-coordinates.center"), " ");
464
+ i0.ɵɵadvance(3);
465
+ i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind1(23, 26, "igo.integration.advanced-map-tool.advanced-coordinates.zoom"), " ", ctx.map.viewController.getZoom(), "");
448
466
  i0.ɵɵadvance(3);
449
- i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind1(23, 22, "igo.integration.advanced-map-tool.advanced-coordinates.zoom"), " ", ctx.map.getZoom(), "");
450
- } }, directives: [i4.NgIf, i5.MatButton, i6.MatIcon, i3.ɵNgNoValidate, i3.NgControlStatusGroup, i3.FormGroupDirective, i7.MatFormField, i7.MatLabel, i8.MatSelect, i4.NgForOf, i9.MatSlideToggle, i10.MatInput, i11.MatOption], pipes: [i12.TranslatePipe, i4.AsyncPipe], styles: ["textarea[_ngcontent-%COMP%]{resize:none}mat-form-field[_ngcontent-%COMP%]{padding:10px 15px}mat-form-field.coordinates[_ngcontent-%COMP%]{width:120px}mat-form-field.coordinates2[_ngcontent-%COMP%]{width:120px;padding:0 10px 0 3px}mat-form-field.igo-input-container[_ngcontent-%COMP%]{width:60%;padding:0 15px}.igo-form-button-group[_ngcontent-%COMP%]{padding:0 10px;margin:0 10px}.center-toggle[_ngcontent-%COMP%]{padding:10px 15px 35px}mat-slide-toggle[_ngcontent-%COMP%]{font-size:small}.igo-zoom[_ngcontent-%COMP%]{padding:0 15px}"] });
467
+ i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind1(26, 28, "igo.integration.advanced-map-tool.advanced-coordinates.scale"), " ", i0.ɵɵpipeBind1(27, 30, ctx.formattedScale$), "");
468
+ i0.ɵɵadvance(4);
469
+ i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind1(30, 32, "igo.integration.advanced-map-tool.advanced-coordinates.resolution"), " ", i0.ɵɵpipeBind2(31, 34, ctx.map.viewController.getResolution(), "1.0-0"), "");
470
+ } }, directives: [i4.NgIf, i5.MatButton, i6.MatIcon, i3.ɵNgNoValidate, i3.NgControlStatusGroup, i3.FormGroupDirective, i7.MatFormField, i7.MatLabel, i8.MatSelect, i4.NgForOf, i9.MatSlideToggle, i10.MatInput, i11.MatOption], pipes: [i12.TranslatePipe, i4.AsyncPipe, i4.DecimalPipe], styles: ["textarea[_ngcontent-%COMP%]{resize:none}mat-form-field[_ngcontent-%COMP%]{padding:10px 15px}mat-form-field.coordinates[_ngcontent-%COMP%]{width:120px}mat-form-field.coordinates2[_ngcontent-%COMP%]{width:120px;padding:0 10px 0 3px}mat-form-field.igo-input-container[_ngcontent-%COMP%]{width:60%;padding:0 15px}.igo-form-button-group[_ngcontent-%COMP%]{padding:0 10px;margin:0 10px}.center-toggle[_ngcontent-%COMP%]{padding:10px 15px 35px}mat-slide-toggle[_ngcontent-%COMP%]{font-size:small}.igo-zoom[_ngcontent-%COMP%]{padding:0 15px}"] });
451
471
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AdvancedCoordinatesComponent, [{
452
472
  type: Component,
453
473
  args: [{
@@ -458,4 +478,4 @@ AdvancedCoordinatesComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type
458
478
  }], function () { return [{ type: i1.MapState }, { type: i2.LanguageService }, { type: i2.MessageService }, { type: i0.ChangeDetectorRef }, { type: i2.StorageService }, { type: i2.ConfigService }, { type: i3.FormBuilder }]; }, { projectionsLimitations: [{
459
479
  type: Input
460
480
  }] }); })();
461
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvaW50ZWdyYXRpb24vc3JjL2xpYi9tYXAvYWR2YW5jZWQtbWFwLXRvb2wvYWR2YW5jZWQtY29vcmRpbmF0ZXMvYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvaW50ZWdyYXRpb24vc3JjL2xpYi9tYXAvYWR2YW5jZWQtbWFwLXRvb2wvYWR2YW5jZWQtY29vcmRpbmF0ZXMvYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQXFCLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBbUQsWUFBWSxFQUFpQixNQUFNLFlBQVksQ0FBQztBQUMxRyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUUsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ1RsQywwQ0FBa0U7SUFDOUQsbUNBRXNDOztJQUMxQyxpQkFBaUI7OztJQUZYLGVBQXdGO0lBQXhGLGdIQUF3RixnQ0FBQTs7O0lBSTVGLDBDQUFvQztJQUNsQyxtQ0FFa0M7O0lBQUEsaUJBQWlCOzs7SUFEckQsZUFBd0Y7SUFBeEYsZ0hBQXdGLGdDQUFB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O1FBQUEsaUJBQUk7Ozs7UUFsRHRILGdDQUFhLGlCQUFBO1FBWWIsZUFBYTtRQUFiLGdDQUFhLGlCQUFBO1FBZTFCLGVBQ0o7UUFESSxzSEFDSjtRQUV1QixlQUFrQjtRQUFsQixvQ0FBa0I7UUFFMUIsZUFBb0Y7UUFBcEYsa0hBQW9GO1FBQ25GLGVBQXFCO1FBQXJCLHFDQUFxQjtRQUVOLGVBQXlCO1FBQXpCLGtFQUF5QjtRQVFwRCxlQUFrQjtRQUFsQixvQ0FBa0IsMkJBQUE7UUFHbEIsZUFDRjtRQURFLHdIQUNGO1FBR2lDLGVBQWdHO1FBQWhHLDRJQUFnRzs7dUZEaEN0SCw0QkFBNEI7Y0FMeEMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSwwQkFBMEI7Z0JBQ3BDLFdBQVcsRUFBRSx1Q0FBdUM7Z0JBQ3BELFNBQVMsRUFBRSxDQUFDLHVDQUF1QyxDQUFDO2FBQ3JEO3lPQWlDSyxzQkFBc0I7a0JBRHpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSWdvTWFwLCBJbnB1dFByb2plY3Rpb25zLCBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyB9IGZyb20gJ0BpZ28yL2dlbyc7XHJcbmltcG9ydCB7IE1hcFN0YXRlIH0gZnJvbSAnLi4vLi4vbWFwLnN0YXRlJztcclxuaW1wb3J0IHsgQ2xpcGJvYXJkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSwgTGFuZ3VhZ2VTZXJ2aWNlLCBTdG9yYWdlU2VydmljZSwgU3RvcmFnZVNjb3BlLCBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgem9uZU10bSwgem9uZVV0bSwgY29tcHV0ZVByb2plY3Rpb25zQ29uc3RyYWludHMgfSBmcm9tICdAaWdvMi9nZW8nO1xyXG5pbXBvcnQgKiBhcyBvbHByb2ogZnJvbSAnb2wvcHJvaic7XHJcbi8qKlxyXG4gKiBUb29sIHRvIGRpc3BsYXkgdGhlIGNvb3JkaW5hdGVzIGFuZCBhIGN1cnNvciBvZiB0aGUgY2VudGVyIG9mIHRoZSBtYXBcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWFkdmFuY2VkLWNvb3JkaW5hdGVzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FkdmFuY2VkLWNvb3JkaW5hdGVzLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQ29vcmRpbmF0ZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIHByb2plY3Rpb25zJDogQmVoYXZpb3JTdWJqZWN0PElucHV0UHJvamVjdGlvbnNbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG4gIHB1YmxpYyBjb29yZGluYXRlczogc3RyaW5nW107XHJcbiAgcHJpdmF0ZSBjdXJyZW50Q2VudGVyRGVmYXVsdFByb2o6IFtudW1iZXIsIG51bWJlcl07XHJcbiAgcHVibGljIGNlbnRlcjogYm9vbGVhbiA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdjZW50ZXJUb2dnbGUnKSBhcyBib29sZWFuO1xyXG4gIHByaXZhdGUgaW5NdG1ab25lOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIGluTGFtYmVydDIgPSB7MzIxOTg6IHRydWUsIDM3OTg6IHRydWV9O1xyXG4gIHByaXZhdGUgbWFwU3RhdGUkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgX3Byb2plY3Rpb25zTGltaXRhdGlvbnM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zID0ge307XHJcbiAgcHJpdmF0ZSBwcm9qZWN0aW9uc0NvbnN0cmFpbnRzOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucztcclxuICBwcml2YXRlIGRlZmF1bHRQcm9qOiBJbnB1dFByb2plY3Rpb25zID0ge1xyXG4gICAgdHJhbnNsYXRlZFZhbHVlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLndnczg0JywgeyBjb2RlOiAnRVBTRzo0MzI2JyB9KSxcclxuICAgIHRyYW5zbGF0ZUtleTogJ3dnczg0JywgYWxpYXM6ICdXR1M4NCcsIGNvZGU6ICdFUFNHOjQzMjYnLCB6b25lOiAnJ1xyXG4gIH07XHJcbiAgcHJpdmF0ZSBjdXJyZW50Wm9uZXMgPSB7IHV0bTogdW5kZWZpbmVkLCBtdG06IHVuZGVmaW5lZCB9O1xyXG4gIHB1YmxpYyB1bml0czogYm9vbGVhbiA9IHRydWU7XHJcbiAgZ2V0IG1hcCgpOiBJZ29NYXAge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwU3RhdGUubWFwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlucHV0UHJvaigpOiBJbnB1dFByb2plY3Rpb25zIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdpbnB1dFByb2onKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGlucHV0UHJvaih2YWx1ZTogSW5wdXRQcm9qZWN0aW9ucykge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHZhbHVlIH0pO1xyXG4gIH1cclxuICBnZXQgcHJvamVjdGlvbnNMaW1pdGF0aW9ucygpOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbnNMaW1pdGF0aW9ucyB8fCB7fTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHByb2plY3Rpb25zTGltaXRhdGlvbnModmFsdWU6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zKSB7XHJcbiAgICB0aGlzLl9wcm9qZWN0aW9uc0xpbWl0YXRpb25zID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBtYXBTdGF0ZTogTWFwU3RhdGUsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcikge1xyXG4gICAgICB0aGlzLmNvbXB1dGVQcm9qZWN0aW9ucygpO1xyXG4gICAgICB0aGlzLmJ1aWxkRm9ybSgpO1xyXG4gICAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gYSBzdGF0ZSBvZiB0aGUgbWFwLCBhIHN0YXRlIG9mIGEgZm9ybSwgdXBkYXRlIHRoZSBjb29yZGluYXRlc1xyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5tYXBTdGF0ZSQkID0gY29tYmluZUxhdGVzdChbdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuc3RhdGUkLnBpcGUoZGVib3VuY2VUaW1lKDUwKSksIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXNdKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvaiA9IHRoaXMubWFwLnZpZXdDb250cm9sbGVyLmdldENlbnRlcih0aGlzLmRlZmF1bHRQcm9qLmNvZGUpO1xyXG4gICAgICBjb25zdCBjdXJyZW50TXRtWm9uZSA9IHpvbmVNdG0odGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2pbMF0pO1xyXG4gICAgICBjb25zdCBjdXJyZW50VXRtWm9uZSA9IHpvbmVVdG0odGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2pbMF0pO1xyXG4gICAgICBpZiAoIXRoaXMuaW5NdG1ab25lICYmIGN1cnJlbnRNdG1ab25lICE9PSB0aGlzLmN1cnJlbnRab25lcy5tdG0pIHtcclxuICAgICAgICB0aGlzLmJhY2sycXVlYmVjKCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHpvbmVDaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgaWYgKGN1cnJlbnRNdG1ab25lICE9PSB0aGlzLmN1cnJlbnRab25lcy5tdG0pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRab25lcy5tdG0gPSBjdXJyZW50TXRtWm9uZTtcclxuICAgICAgICB6b25lQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY3VycmVudFV0bVpvbmUgIT09IHRoaXMuY3VycmVudFpvbmVzLnV0bSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFpvbmVzLnV0bSA9IGN1cnJlbnRVdG1ab25lO1xyXG4gICAgICAgIHpvbmVDaGFuZ2UgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh6b25lQ2hhbmdlKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQcm9qZWN0aW9uc1pvbmVDaGFuZ2UoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoZWNrTGFtYmVydCh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvaik7XHJcbiAgICAgIHRoaXMuY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKCk7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldCgnY3VycmVudFByb2plY3Rpb24nLCB0aGlzLmlucHV0UHJvaiwgU3RvcmFnZVNjb3BlLlNFU1NJT04pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdGVtcElucHV0UHJvaiA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdjdXJyZW50UHJvamVjdGlvbicpIGFzIElucHV0UHJvamVjdGlvbnM7XHJcbiAgICB0aGlzLmlucHV0UHJvaiA9IHRoaXMucHJvamVjdGlvbnMkLnZhbHVlWzBdO1xyXG4gICAgaWYgKHRlbXBJbnB1dFByb2ogIT09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHBvcyA9IHRoaXMucG9zaXRpb25Jbkxpc3QodGVtcElucHV0UHJvaik7XHJcbiAgICAgIHRoaXMuaW5wdXRQcm9qID0gdGhpcy5wcm9qZWN0aW9ucyQudmFsdWVbcG9zXTtcclxuICAgICAgdGhpcy51cGRhdGVab25lTXRtVXRtKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1hcC5tYXBDZW50ZXIkLm5leHQodGhpcy5jZW50ZXIpO1xyXG4gICAgdGhpcy5jb29yZGluYXRlcyA9IHRoaXMuZ2V0Q29vcmRpbmF0ZXMoKTtcclxuICAgIHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuZ2V0Q2VudGVyKHRoaXMuZGVmYXVsdFByb2ouY29kZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMubWFwLm1hcENlbnRlciQubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLm1hcFN0YXRlJCQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvb3JkaW5hdGVzIG9mIHRoZSBjZW50ZXIgb2YgdGhlIG1hcCBvbiB0aGUgYXBwcm9wcmlhdGUgc3lzdGVtZSBvZiBjb29yZGluYXRlc1xyXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHR3byBudW1iZXJzXHJcbiAgICovXHJcbiAgZ2V0Q29vcmRpbmF0ZXMoKTogc3RyaW5nW10ge1xyXG4gICAgdGhpcy5jdXJyZW50Wm9uZXMubXRtID0gem9uZU10bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XHJcbiAgICB0aGlzLmN1cnJlbnRab25lcy51dG0gPSB6b25lVXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgIGxldCBjb29yZDtcclxuICAgIGNvbnN0IGNvZGUgPSB0aGlzLmlucHV0UHJvai5jb2RlO1xyXG4gICAgbGV0IGRlY2ltYWwgPSAyO1xyXG4gICAgaWYgKGNvZGUuaW5jbHVkZXMoJ0VQU0c6NDMyNicpIHx8IGNvZGUuaW5jbHVkZXMoJ0VQU0c6NDI2OScpKSB7XHJcbiAgICAgIGRlY2ltYWwgPSA1O1xyXG4gICAgfVxyXG4gICAgdGhpcy51bml0cyA9IChjb2RlID09PSAnRVBTRzo0MzI2JyB8fCBjb2RlID09PSAnRVBTRzo0MjY5Jyk7XHJcbiAgICBjb29yZCA9IHRoaXMubWFwLnZpZXdDb250cm9sbGVyLmdldENlbnRlcihjb2RlKS5tYXAoYyA9PiBjLnRvRml4ZWQoZGVjaW1hbCkpO1xyXG4gICAgcmV0dXJuIGNvb3JkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29weSB0aGUgY29vcmRpbmF0ZXMgdG8gYSBjbGlwYm9hcmRcclxuICAgKi9cclxuICBjb3B5VGV4dFRvQ2xpcGJvYXJkKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3VjY2Vzc2Z1bCA9IENsaXBib2FyZC5jb3B5KHRoaXMuY29vcmRpbmF0ZXMudG9TdHJpbmcoKSk7XHJcbiAgICBpZiAoc3VjY2Vzc2Z1bCkge1xyXG4gICAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XHJcbiAgICAgIGNvbnN0IHRpdGxlID0gdHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgJ2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5jb3B5VGl0bGUnXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IG1zZyA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29weU1zZycpO1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3MobXNnLCB0aXRsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGEgY3Vyc29yIG9uIHRoZSBjZW50ZXIgb2YgdGhlIG1hcFxyXG4gICAqL1xyXG4gIGRpc3BsYXlDZW50ZXIodG9nZ2xlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmNlbnRlciA9IHRvZ2dsZTtcclxuICAgIHRoaXMubWFwLm1hcENlbnRlciQubmV4dCh0b2dnbGUpO1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2NlbnRlclRvZ2dsZScsIHRvZ2dsZSwgU3RvcmFnZVNjb3BlLlNFU1NJT04pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGRlciBvZiB0aGUgZm9ybVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYnVpbGRGb3JtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIGlucHV0UHJvajogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBsaXN0IG9mIHByb2plY3Rpb25zIGFmdGVyIGNoYW5naW5nIG9mIHRoZSBzdGF0ZSBvZiB0aGUgbWFwXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVQcm9qZWN0aW9uc1pvbmVDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICBsZXQgbW9kaWZpZWRQcm9qID0gdGhpcy5wcm9qZWN0aW9ucyQudmFsdWU7XHJcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XHJcbiAgICBtb2RpZmllZFByb2oubWFwKHAgPT4ge1xyXG4gICAgICBpZiAocC50cmFuc2xhdGVLZXkgPT09ICdtdG0nKSB7XHJcbiAgICAgICAgY29uc3Qgem9uZSA9IHpvbmVNdG0odGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2pbMF0pO1xyXG4gICAgICAgIGlmICh6b25lKSB7XHJcbiAgICAgICAgICBjb25zdCBjb2RlID0gem9uZSA8IDEwID8gYEVQU0c6MzIxOCR7em9uZX1gIDogYEVQU0c6MzIxJHs4MCArIHpvbmV9YDtcclxuICAgICAgICAgIHAuYWxpYXMgPSBgTVRNICR7em9uZX1gO1xyXG4gICAgICAgICAgcC5jb2RlID0gY29kZTtcclxuICAgICAgICAgIHAuem9uZSA9IGAke3pvbmV9YDtcclxuICAgICAgICAgIHAudHJhbnNsYXRlZFZhbHVlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5tdG0nLCBwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBwLmFsaWFzID0gJyc7XHJcbiAgICAgICAgICB0aGlzLmluTXRtWm9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuaW5wdXRQcm9qLnRyYW5zbGF0ZUtleSA9PT0gJ210bScpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dFByb2ogPSB0aGlzLnByb2plY3Rpb25zJC52YWx1ZVswXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHAudHJhbnNsYXRlS2V5ID09PSAndXRtJykge1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSB6b25lVXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgICBjb25zdCBjb2RlID0gYEVQU0c6MzI2JHt6b25lfWA7XHJcbiAgICAgICAgcC5hbGlhcyA9IGBVVE0gJHt6b25lfWA7XHJcbiAgICAgICAgcC5jb2RlID0gY29kZTtcclxuICAgICAgICBwLnpvbmUgPSBgJHt6b25lfWA7XHJcbiAgICAgICAgcC50cmFuc2xhdGVkVmFsdWUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLnV0bScsIHApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIG1vZGlmaWVkUHJvaiA9IG1vZGlmaWVkUHJvai5maWx0ZXIocCA9PiBwLmFsaWFzICE9PSAnJyk7XHJcbiAgICB0aGlzLnByb2plY3Rpb25zJC5uZXh0KG1vZGlmaWVkUHJvaik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBsaXN0IG9mIGN1cnJlbnRzIHByb2plY3Rpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb21wdXRlUHJvamVjdGlvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMgPSBjb21wdXRlUHJvamVjdGlvbnNDb25zdHJhaW50cyh0aGlzLnByb2plY3Rpb25zTGltaXRhdGlvbnMpO1xyXG4gICAgY29uc3QgcHJvamVjdGlvbnM6IElucHV0UHJvamVjdGlvbnNbXSA9IFtdO1xyXG5cclxuICAgIGlmICghdGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2opIHtcclxuICAgICAgdGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2ogPSB0aGlzLm1hcC52aWV3Q29udHJvbGxlci5nZXRDZW50ZXIodGhpcy5kZWZhdWx0UHJvai5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XHJcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLndnczg0KSB7XHJcbiAgICAgIHByb2plY3Rpb25zLnB1c2goe1xyXG4gICAgICAgIHRyYW5zbGF0ZWRWYWx1ZTogdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy53Z3M4NCcsIHsgY29kZTogJ0VQU0c6NDMyNicgfSksXHJcbiAgICAgICAgdHJhbnNsYXRlS2V5OiAnd2dzODQnLCBhbGlhczogJ1dHUzg0JywgY29kZTogJ0VQU0c6NDMyNicsIHpvbmU6ICcnXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubmFkODMpIHtcclxuICAgICAgcHJvamVjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgdHJhbnNsYXRlZFZhbHVlOiB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLm5hZDgzJywgeyBjb2RlOiAnRVBTRzo0MjY5JyB9KSxcclxuICAgICAgICB0cmFuc2xhdGVLZXk6ICduYWQ4MycsIGFsaWFzOiAnTkFEODMnLCBjb2RlOiAnRVBTRzo0MjY5Jywgem9uZTogJydcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy53ZWJNZXJjYXRvcikge1xyXG4gICAgICBwcm9qZWN0aW9ucy5wdXNoKHtcclxuICAgICAgICB0cmFuc2xhdGVkVmFsdWU6IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMud2ViTWVyY2F0b3InLCB7IGNvZGU6ICdFUFNHOjM4NTcnIH0pLFxyXG4gICAgICAgIHRyYW5zbGF0ZUtleTogJ3dlYk1lcmNhdG9yJywgYWxpYXM6ICdXZWIgTWVyY2F0b3InLCBjb2RlOiAnRVBTRzozODU3Jywgem9uZTogJydcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm10bSkge1xyXG4gICAgICAvLyBRdWViZWNcclxuICAgICAgY29uc3Qgem9uZSA9IHpvbmVNdG0odGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2pbMF0pO1xyXG4gICAgICBpZiAoem9uZSkge1xyXG4gICAgICAgIHRoaXMuaW5NdG1ab25lID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBjb2RlID0gem9uZSA8IDEwID8gYEVQU0c6MzIxOCR7em9uZX1gIDogYEVQU0c6MzIxJHs4MCArIHpvbmV9YDtcclxuICAgICAgICBwcm9qZWN0aW9ucy5zcGxpY2UoMywgMCwge1xyXG4gICAgICAgICAgdHJhbnNsYXRlZFZhbHVlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLm10bScsIHsgY29kZSwgem9uZSB9KSxcclxuICAgICAgICAgIHRyYW5zbGF0ZUtleTogJ210bScsIGFsaWFzOiBgTVRNICR7em9uZX1gLCBjb2RlLCB6b25lOiBgJHt6b25lfWBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmluTXRtWm9uZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLnV0bSkge1xyXG4gICAgICBjb25zdCBvcmRlciA9IHRoaXMuaW5NdG1ab25lID8gNCA6IDM7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSB6b25lVXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgY29uc3QgY29kZSA9IHpvbmUgPCAxMCA/IGBFUFNHOjMyNjAke3pvbmV9YCA6IGBFUFNHOjMyNiR7em9uZX1gO1xyXG4gICAgICBwcm9qZWN0aW9ucy5zcGxpY2Uob3JkZXIsIDAsIHtcclxuICAgICAgICB0cmFuc2xhdGVkVmFsdWU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMudXRtJywgeyBjb2RlLCB6b25lIH0pLFxyXG4gICAgICAgIHRyYW5zbGF0ZUtleTogJ3V0bScsIGFsaWFzOiBgVVRNICR7em9uZX1gLCBjb2RlLCB6b25lOiBgJHt6b25lfWBcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBsZXQgY29uZmlnUHJvamVjdGlvbiA9IFtdO1xyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5wcm9qRnJvbUNvbmZpZykge1xyXG4gICAgICBjb25maWdQcm9qZWN0aW9uID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdwcm9qZWN0aW9ucycpIHx8IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9qZWN0aW9ucyQubmV4dChwcm9qZWN0aW9ucy5jb25jYXQoY29uZmlnUHJvamVjdGlvbikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHVzaCB0aGUgTVRNIGluIHRoZSBhcnJheSBvZiBzeXN0ZW1lIG9mIGNvb3JkaW5hdGVzXHJcbiAgICogQHBhcmFtIHByb2plY3Rpb25zIEFycmF5IG9mIHRoZSBJbnB1dFByb2plY3Rpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwdXNoTXRtKHByb2plY3Rpb25zOiBBcnJheTxJbnB1dFByb2plY3Rpb25zPik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG0pIHtcclxuICAgICAgY29uc3Qgem9uZSA9IHpvbmVNdG0odGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2pbMF0pO1xyXG4gICAgICBjb25zdCBjb2RlID0gem9uZSA8IDEwID8gYEVQU0c6MzIxOCR7em9uZX1gIDogYEVQU0c6MzIxJHs4MCArIHpvbmV9YDtcclxuICAgICAgcHJvamVjdGlvbnMuc3BsaWNlKDMsIDAsIHtcclxuICAgICAgICAgIHRyYW5zbGF0ZWRWYWx1ZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5tdG0nLCB7IGNvZGUsIHpvbmUgfSksXHJcbiAgICAgICAgICB0cmFuc2xhdGVLZXk6ICdtdG0nLCBhbGlhczogYE1UTSAke3pvbmV9YCwgY29kZSwgem9uZTogYCR7em9uZX1gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIHN5c3RlbXMgb2YgY29vcmRpbmF0ZXMgZm9yIHRlcnJpdG9yeSBvZiBRdWViZWNcclxuICAgKiBwdXNoIE1UTSBhbmQgVVRNIGluIHRoZSBBcnJheVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYmFjazJxdWViZWMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwcm9qZWN0aW9ucyA9IHRoaXMucHJvamVjdGlvbnMkLnZhbHVlO1xyXG4gICAgdGhpcy5wdXNoTXRtKHByb2plY3Rpb25zKTtcclxuICAgIHRoaXMuaW5NdG1ab25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgbnVtYmVycyBvZiB0aGUgem9uZXMgd2hlbiBhcHBsaWNhdGlvbiBpcyByZXN0YXJ0ZWRcclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZVpvbmVNdG1VdG0oKSB7XHJcbiAgICBpZiAodGhpcy5pbnB1dFByb2oudHJhbnNsYXRlS2V5ID09PSAnbXRtJykge1xyXG4gICAgICBjb25zdCB6b25lID0gem9uZU10bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XHJcbiAgICAgIHRoaXMuaW5wdXRQcm9qLmFsaWFzID0gYE1UTSAke3pvbmV9YDtcclxuICAgICAgY29uc3QgY29kZSA9IHpvbmUgPCAxMCA/IGBFUFNHOjMyMTgke3pvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyB6b25lfWA7XHJcbiAgICAgIHRoaXMuaW5wdXRQcm9qLmNvZGUgPSBjb2RlO1xyXG4gICAgICB0aGlzLmlucHV0UHJvai56b25lID0gYCR7em9uZX1gO1xyXG4gICAgICB0aGlzLmlucHV0UHJvai50cmFuc2xhdGVkVmFsdWUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLm10bScsIHsgY29kZSwgem9uZSB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlucHV0UHJvai50cmFuc2xhdGVLZXkgPT09ICd1dG0nKSB7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSB6b25lVXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgdGhpcy5pbnB1dFByb2ouYWxpYXMgPSBgVVRNICR7em9uZX1gO1xyXG4gICAgICBjb25zdCBjb2RlID0gem9uZSA8IDEwID8gYEVQU0c6MzI2MCR7em9uZX1gIDogYEVQU0c6MzI2JHt6b25lfWA7XHJcbiAgICAgIHRoaXMuaW5wdXRQcm9qLmNvZGUgPSBjb2RlO1xyXG4gICAgICB0aGlzLmlucHV0UHJvai56b25lID0gYCR7em9uZX1gO1xyXG4gICAgICB0aGlzLmlucHV0UHJvai50cmFuc2xhdGVkVmFsdWUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLnV0bScsIHsgY29kZSwgem9uZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXB1dGUgdGhlIHBvc2l0aW9uIG9mIGEgY3VycmVudCBwcm9qZWN0aW9uIGluIGEgbGlzdC4gMCBpZiB0aGUgcHJvamVjdGlvbiBpcyBub3QgaW4gdGhlIGxpc3RcclxuICAgKiBAcGFyYW0gdHJhbnNsYXRlS2V5IHN0cmluZywgdHJhbnNsYXRlIGtleSBvZiBhIHByb2plY3Rpb25cclxuICAgKiBAcmV0dXJucyBudW1lcmljLCBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IGluIHRoZSBhcnJheVxyXG4gICAqL1xyXG4gIHBvc2l0aW9uSW5MaXN0KHRlbXBJbnB1dFByb2o6IElucHV0UHJvamVjdGlvbnMpOiBudW1iZXIge1xyXG4gICAgY29uc3QgdGsgPSB0ZW1wSW5wdXRQcm9qLnRyYW5zbGF0ZUtleTtcclxuICAgIGNvbnN0IGFsaWFzID0gdGVtcElucHV0UHJvai5hbGlhcztcclxuICAgIGxldCBwb3NpdGlvbjsgLy8gPSB1bmRlZmluZWQ7XHJcbiAgICBsZXQgaXRlciA9IDA7XHJcbiAgICB0aGlzLnByb2plY3Rpb25zJC52YWx1ZS5tYXAoKHByb2plY3Rpb24pID0+IHtcclxuICAgICAgaWYgKHRrKSB7XHJcbiAgICAgICAgaWYgKHRrID09PSBwcm9qZWN0aW9uLnRyYW5zbGF0ZUtleSkge1xyXG4gICAgICAgICAgcG9zaXRpb24gPSBpdGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhbGlhcyA9PT0gcHJvamVjdGlvbi5hbGlhcykge1xyXG4gICAgICAgIHBvc2l0aW9uID0gaXRlcjtcclxuICAgICAgfVxyXG4gICAgICBpdGVyKys7XHJcbiAgICB9KTtcclxuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gPyBwb3NpdGlvbiA6IDA7XHJcbiAgICByZXR1cm4gcG9zaXRpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgdGhlIGxpc3Qgb2YgcHJvamVjdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBwcm9qZWN0aW9ucyBvZiBMYW1iZXJ0XHJcbiAgICogQHBhcmFtIGNvb3JkaW5hdGVzIEFuIGFycmF5IG9mIG51bWJlcnMsIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGVcclxuICAgKi9cclxuICBjaGVja0xhbWJlcnQoY29vcmRpbmF0ZXM6IFtudW1iZXIsIG51bWJlcl0pIHtcclxuICAgIGNvbnN0IGxhbWJlcnRQcm9qZWN0aW9ucyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygncHJvamVjdGlvbnMnKTtcclxuICAgIGxhbWJlcnRQcm9qZWN0aW9ucy5mb3JFYWNoKHByb2plY3Rpb24gPT4ge1xyXG4gICAgICAgIGxldCBtb2RpZmllZFByb2ogPSB0aGlzLnByb2plY3Rpb25zJC52YWx1ZTtcclxuICAgICAgICBjb25zdCBleHRlbnQgPSBwcm9qZWN0aW9uLmV4dGVudDtcclxuICAgICAgICBjb25zdCBjb2RlID0gcHJvamVjdGlvbi5jb2RlLm1hdGNoKC9cXGQrLyk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEV4dGVudFdHUyA9IG9scHJvai50cmFuc2Zvcm1FeHRlbnQoZXh0ZW50LCBwcm9qZWN0aW9uLmNvZGUsIHRoaXMuZGVmYXVsdFByb2ouY29kZSk7XHJcbiAgICAgICAgaWYgKGNvb3JkaW5hdGVzWzBdIDwgY3VycmVudEV4dGVudFdHU1swXSB8fCBjb29yZGluYXRlc1swXSA+IGN1cnJlbnRFeHRlbnRXR1NbMl0gfHxcclxuICAgICAgICAgICAgY29vcmRpbmF0ZXNbMV0gPCBjdXJyZW50RXh0ZW50V0dTWzFdIHx8IGNvb3JkaW5hdGVzWzFdID4gY3VycmVudEV4dGVudFdHU1szXSkge1xyXG4gICAgICAgICAgICB0aGlzLmluTGFtYmVydDJbY29kZV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRQcm9qLmFsaWFzID09PSBwcm9qZWN0aW9uLmFsaWFzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dFByb2ogPSB0aGlzLnByb2plY3Rpb25zJC52YWx1ZVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtb2RpZmllZFByb2ogPSBtb2RpZmllZFByb2ouZmlsdGVyKHAgPT4gcC5hbGlhcyAhPT0gcHJvamVjdGlvbi5hbGlhcyk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbnMkLm5leHQobW9kaWZpZWRQcm9qKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbkxhbWJlcnQyW2NvZGVdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3Rpb25zJC5uZXh0KG1vZGlmaWVkUHJvai5jb25jYXQocHJvamVjdGlvbikpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbkxhbWJlcnQyW2NvZGVdID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJ1bml0czsgZWxzZSBlbHNlQmxvY2tcIiBjbGFzcz1cImNvb3JkaW5hdGVzXCI+XHJcbiAgICA8dGV4dGFyZWEgICN0ZXh0QXJlYSBtYXRJbnB1dCByZWFkb25seSByb3dzPVwiMVwiXHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLmxvbicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBbdmFsdWVdPVwiY29vcmRpbmF0ZXNbMF1cIj48L3RleHRhcmVhPlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG48bmctdGVtcGxhdGUgI2Vsc2VCbG9jayA+XHJcbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29vcmRpbmF0ZXNcIj5cclxuICAgIDx0ZXh0YXJlYSAjdGV4dEFyZWEgbWF0SW5wdXQgcmVhZG9ubHkgcm93cz1cIjFcIlxyXG4gIFtwbGFjZWhvbGRlcl09XCInaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLmVzdCcgfCB0cmFuc2xhdGVcIlxyXG4gIFt2YWx1ZV09XCJjb29yZGluYXRlc1swXVwiPjwvdGV4dGFyZWE+PC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxtYXQtZm9ybS1maWVsZCAqbmdJZj1cInVuaXRzOyBlbHNlIGVsc2VCbG9jazJcIiBjbGFzcz1cImNvb3JkaW5hdGVzMlwiPlxyXG4gICAgPHRleHRhcmVhICN0ZXh0QXJlYSBtYXRJbnB1dCByZWFkb25seSByb3dzPVwiMVwiXHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLmxhdCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBbdmFsdWVdPVwiY29vcmRpbmF0ZXNbMV1cIj48L3RleHRhcmVhPlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG48bmctdGVtcGxhdGUgI2Vsc2VCbG9jazIgPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvb3JkaW5hdGVzMlwiPiAgPHRleHRhcmVhICN0ZXh0QXJlYSBtYXRJbnB1dCByZWFkb25seSByb3dzPVwiMVwiXHJcbiAgW3BsYWNlaG9sZGVyXT1cIidpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMubm9yZCcgfCB0cmFuc2xhdGVcIlxyXG4gIFt2YWx1ZV09XCJjb29yZGluYXRlc1sxXVwiPjwvdGV4dGFyZWE+PC9tYXQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxidXR0b24gY2xhc3M9XCJpZ28tZm9ybS1idXR0b24tZ3JvdXBcIlxyXG4gICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgIChjbGljayk9XCJjb3B5VGV4dFRvQ2xpcGJvYXJkKClcIj5cclxuICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiY29udGVudC1jb3B5XCI+PC9tYXQtaWNvbj5cclxuICAgIHt7ICdpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29weScgfCB0cmFuc2xhdGUgfX1cclxuPC9idXR0b24+XHJcblxyXG48Zm9ybSBjbGFzcz1cImlnby1mb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1sYWJlbD57eydpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29vcmRTeXN0ZW0nIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cImlucHV0UHJvalwiPlxyXG4gICAgICA8bWF0LW9wdGlvbiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgcHJvamVjdGlvbiBvZiAocHJvamVjdGlvbnMkIHwgYXN5bmMpXCJcclxuICAgICAgICBbdmFsdWVdPVwicHJvamVjdGlvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgIHt7cHJvamVjdGlvbi50cmFuc2xhdGVkVmFsdWUgfHwgcHJvamVjdGlvbi5hbGlhcyB9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImNlbnRlci10b2dnbGUgbWF0LXR5cG9ncmFwaHlcIlxyXG4gICAgW2NoZWNrZWRdPVwiY2VudGVyXCJcclxuICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcclxuICAgIChjaGFuZ2UpPVwiZGlzcGxheUNlbnRlcigkZXZlbnQuY2hlY2tlZClcIj5cclxuICAgIHt7J2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5jZW50ZXInIHwgdHJhbnNsYXRlfX1cclxuICA8L21hdC1zbGlkZS10b2dnbGU+IFxyXG48L2Zvcm0+XHJcblxyXG48cCBjbGFzcz1cImlnby16b29tIG1hdC10eXBvZ3JhcGh5XCI+e3snaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLnpvb20nIHwgdHJhbnNsYXRlfX0ge3ttYXAuZ2V0Wm9vbSgpIH19PC9wPlxyXG4iXX0=
481
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvaW50ZWdyYXRpb24vc3JjL2xpYi9tYXAvYWR2YW5jZWQtbWFwLXRvb2wvYWR2YW5jZWQtY29vcmRpbmF0ZXMvYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvaW50ZWdyYXRpb24vc3JjL2xpYi9tYXAvYWR2YW5jZWQtbWFwLXRvb2wvYWR2YW5jZWQtY29vcmRpbmF0ZXMvYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQXFCLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsV0FBVyxFQUEyRCxNQUFNLFdBQVcsQ0FBQztBQUVqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBbUQsWUFBWSxFQUFpQixNQUFNLFlBQVksQ0FBQztBQUMxRyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUUsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ1RsQywwQ0FBa0U7SUFDOUQsbUNBRXNDOztJQUMxQyxpQkFBaUI7OztJQUZYLGVBQXdGO0lBQXhGLGdIQUF3RixnQ0FBQTs7O0lBSTVGLDBDQUFvQztJQUNsQyxtQ0FFa0M7O0lB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LHlHQUFTLHlCQUFxQixJQUFDO1FBQy9CLDhCQUE0QztRQUM1QyxZQUNKOztRQUFBLGlCQUFTO1FBRVQsZ0NBQTBDO1FBQ3hDLDBDQUE0QztRQUMxQyxrQ0FBVztRQUFBLGFBQW9GOztRQUFBLGlCQUFZO1FBQzNHLHNDQUFrQztRQUF0QiwwSkFBcUI7UUFDL0IsNkZBS2E7O1FBQ2YsaUJBQWE7UUFDZixpQkFBaUI7UUFDakIsNkNBRzJDO1FBQXpDLDRIQUFVLGlDQUE2QixJQUFDO1FBQ3hDLGFBQ0Y7O1FBQUEsaUJBQW1CO1FBQ3JCLGlCQUFPO1FBRVAsOEJBQW1DO1FBQUEsYUFBK0c7O1FBQUEsaUJBQUk7UUFDdEosOEJBQW1DO1FBQUEsYUFBNEc7OztRQUFBLGlCQUFJO1FBQ25KLDhCQUFtQztRQUFBLGFBQTZJOzs7UUFBQSxpQkFBSTs7OztRQXBEbkssZ0NBQWEsaUJBQUE7UUFZYixlQUFhO1FBQWIsZ0NBQWEsaUJBQUE7UUFlMUIsZUFDSjtRQURJLHNIQUNKO1FBRXVCLGVBQWtCO1FBQWxCLG9DQUFrQjtRQUUxQixlQUFvRjtRQUFwRixrSEFBb0Y7UUFDbkYsZUFBcUI7UUFBckIscUNBQXFCO1FBRU4sZUFBeUI7UUFBekIsa0VBQXlCO1FBUXBELGVBQWtCO1FBQWxCLG9DQUFrQiwyQkFBQTtRQUdsQixlQUNGO1FBREUsd0hBQ0Y7UUFHaUMsZUFBK0c7UUFBL0csMkpBQStHO1FBQy9HLGVBQTRHO1FBQTVHLHVLQUE0RztRQUM1RyxlQUE2STtRQUE3SSx3TUFBNkk7O3VGRGxDbkssNEJBQTRCO2NBTHhDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsMEJBQTBCO2dCQUNwQyxXQUFXLEVBQUUsdUNBQXVDO2dCQUNwRCxTQUFTLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQzthQUNyRDt5T0FrQ0ssc0JBQXNCO2tCQUR6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZvcm1hdFNjYWxlLCBJZ29NYXAsIElucHV0UHJvamVjdGlvbnMsIFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zIH0gZnJvbSAnQGlnbzIvZ2VvJztcclxuaW1wb3J0IHsgTWFwU3RhdGUgfSBmcm9tICcuLi8uLi9tYXAuc3RhdGUnO1xyXG5pbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICdAaWdvMi91dGlscyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlLCBMYW5ndWFnZVNlcnZpY2UsIFN0b3JhZ2VTZXJ2aWNlLCBTdG9yYWdlU2NvcGUsIENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyB6b25lTXRtLCB6b25lVXRtLCBjb21wdXRlUHJvamVjdGlvbnNDb25zdHJhaW50cyB9IGZyb20gJ0BpZ28yL2dlbyc7XHJcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcclxuLyoqXHJcbiAqIFRvb2wgdG8gZGlzcGxheSB0aGUgY29vcmRpbmF0ZXMgYW5kIGEgY3Vyc29yIG9mIHRoZSBjZW50ZXIgb2YgdGhlIG1hcFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tYWR2YW5jZWQtY29vcmRpbmF0ZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1jb29yZGluYXRlcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRDb29yZGluYXRlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwdWJsaWMgZm9ybWF0dGVkU2NhbGUkOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xyXG4gIHB1YmxpYyBwcm9qZWN0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxJbnB1dFByb2plY3Rpb25zW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcclxuICBwdWJsaWMgY29vcmRpbmF0ZXM6IHN0cmluZ1tdO1xyXG4gIHByaXZhdGUgY3VycmVudENlbnRlckRlZmF1bHRQcm9qOiBbbnVtYmVyLCBudW1iZXJdO1xyXG4gIHB1YmxpYyBjZW50ZXI6IGJvb2xlYW4gPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnY2VudGVyVG9nZ2xlJykgYXMgYm9vbGVhbjtcclxuICBwcml2YXRlIGluTXRtWm9uZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBpbkxhbWJlcnQyID0gezMyMTk4OiB0cnVlLCAzNzk4OiB0cnVlfTtcclxuICBwcml2YXRlIG1hcFN0YXRlJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9wcm9qZWN0aW9uc0xpbWl0YXRpb25zOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyA9IHt9O1xyXG4gIHByaXZhdGUgcHJvamVjdGlvbnNDb25zdHJhaW50czogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnM7XHJcbiAgcHJpdmF0ZSBkZWZhdWx0UHJvajogSW5wdXRQcm9qZWN0aW9ucyA9IHtcclxuICAgIHRyYW5zbGF0ZWRWYWx1ZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy53Z3M4NCcsIHsgY29kZTogJ0VQU0c6NDMyNicgfSksXHJcbiAgICB0cmFuc2xhdGVLZXk6ICd3Z3M4NCcsIGFsaWFzOiAnV0dTODQnLCBjb2RlOiAnRVBTRzo0MzI2Jywgem9uZTogJydcclxuICB9O1xyXG4gIHByaXZhdGUgY3VycmVudFpvbmVzID0geyB1dG06IHVuZGVmaW5lZCwgbXRtOiB1bmRlZmluZWQgfTtcclxuICBwdWJsaWMgdW5pdHM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGdldCBtYXAoKTogSWdvTWFwIHtcclxuICAgIHJldHVybiB0aGlzLm1hcFN0YXRlLm1hcDtcclxuICB9XHJcblxyXG4gIGdldCBpbnB1dFByb2ooKTogSW5wdXRQcm9qZWN0aW9ucyB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnaW5wdXRQcm9qJykudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBpbnB1dFByb2oodmFsdWU6IElucHV0UHJvamVjdGlvbnMpIHtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgaW5wdXRQcm9qOiB2YWx1ZSB9KTtcclxuICB9XHJcbiAgZ2V0IHByb2plY3Rpb25zTGltaXRhdGlvbnMoKTogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb25zTGltaXRhdGlvbnMgfHwge307XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKHZhbHVlOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucykge1xyXG4gICAgdGhpcy5fcHJvamVjdGlvbnNMaW1pdGF0aW9ucyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgbWFwU3RhdGU6IE1hcFN0YXRlLFxyXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcclxuICAgICAgdGhpcy5jb21wdXRlUHJvamVjdGlvbnMoKTtcclxuICAgICAgdGhpcy5idWlsZEZvcm0oKTtcclxuICAgIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGEgc3RhdGUgb2YgdGhlIG1hcCwgYSBzdGF0ZSBvZiBhIGZvcm0sIHVwZGF0ZSB0aGUgY29vcmRpbmF0ZXNcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWFwU3RhdGUkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMubWFwLnZpZXdDb250cm9sbGVyLnN0YXRlJC5waXBlKGRlYm91bmNlVGltZSg1MCkpLCB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzXSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5zZXRTY2FsZVZhbHVlKHRoaXMubWFwKTtcclxuICAgICAgdGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2ogPSB0aGlzLm1hcC52aWV3Q29udHJvbGxlci5nZXRDZW50ZXIodGhpcy5kZWZhdWx0UHJvai5jb2RlKTtcclxuICAgICAgY29uc3QgY3VycmVudE10bVpvbmUgPSB6b25lTXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgY29uc3QgY3VycmVudFV0bVpvbmUgPSB6b25lVXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgaWYgKCF0aGlzLmluTXRtWm9uZSAmJiBjdXJyZW50TXRtWm9uZSAhPT0gdGhpcy5jdXJyZW50Wm9uZXMubXRtKSB7XHJcbiAgICAgICAgdGhpcy5iYWNrMnF1ZWJlYygpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCB6b25lQ2hhbmdlID0gZmFsc2U7XHJcbiAgICAgIGlmIChjdXJyZW50TXRtWm9uZSAhPT0gdGhpcy5jdXJyZW50Wm9uZXMubXRtKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Wm9uZXMubXRtID0gY3VycmVudE10bVpvbmU7XHJcbiAgICAgICAgem9uZUNoYW5nZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGN1cnJlbnRVdG1ab25lICE9PSB0aGlzLmN1cnJlbnRab25lcy51dG0pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRab25lcy51dG0gPSBjdXJyZW50VXRtWm9uZTtcclxuICAgICAgICB6b25lQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoem9uZUNoYW5nZSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvamVjdGlvbnNab25lQ2hhbmdlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGVja0xhbWJlcnQodGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2opO1xyXG4gICAgICB0aGlzLmNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2N1cnJlbnRQcm9qZWN0aW9uJywgdGhpcy5pbnB1dFByb2osIFN0b3JhZ2VTY29wZS5TRVNTSU9OKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRlbXBJbnB1dFByb2ogPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnY3VycmVudFByb2plY3Rpb24nKSBhcyBJbnB1dFByb2plY3Rpb25zO1xyXG4gICAgdGhpcy5pbnB1dFByb2ogPSB0aGlzLnByb2plY3Rpb25zJC52YWx1ZVswXTtcclxuICAgIGlmICh0ZW1wSW5wdXRQcm9qICE9PSBudWxsKVxyXG4gICAge1xyXG4gICAgICBjb25zdCBwb3MgPSB0aGlzLnBvc2l0aW9uSW5MaXN0KHRlbXBJbnB1dFByb2opO1xyXG4gICAgICB0aGlzLmlucHV0UHJvaiA9IHRoaXMucHJvamVjdGlvbnMkLnZhbHVlW3Bvc107XHJcbiAgICAgIHRoaXMudXBkYXRlWm9uZU10bVV0bSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tYXAubWFwQ2VudGVyJC5uZXh0KHRoaXMuY2VudGVyKTtcclxuICAgIHRoaXMuY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvaiA9IHRoaXMubWFwLnZpZXdDb250cm9sbGVyLmdldENlbnRlcih0aGlzLmRlZmF1bHRQcm9qLmNvZGUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLm1hcC5tYXBDZW50ZXIkLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5tYXBTdGF0ZSQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRTY2FsZVZhbHVlKG1hcDogSWdvTWFwKSB7XHJcbiAgICB0aGlzLmZvcm1hdHRlZFNjYWxlJC5uZXh0KCc6IH4gMSAvICcgKyBmb3JtYXRTY2FsZShtYXAudmlld0NvbnRyb2xsZXIuZ2V0U2NhbGUoKSkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDb29yZGluYXRlcyBvZiB0aGUgY2VudGVyIG9mIHRoZSBtYXAgb24gdGhlIGFwcHJvcHJpYXRlIHN5c3RlbWUgb2YgY29vcmRpbmF0ZXNcclxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB0d28gbnVtYmVyc1xyXG4gICAqL1xyXG4gIGdldENvb3JkaW5hdGVzKCk6IHN0cmluZ1tdIHtcclxuICAgIHRoaXMuY3VycmVudFpvbmVzLm10bSA9IHpvbmVNdG0odGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2pbMF0pO1xyXG4gICAgdGhpcy5jdXJyZW50Wm9uZXMudXRtID0gem9uZVV0bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XHJcbiAgICBsZXQgY29vcmQ7XHJcbiAgICBjb25zdCBjb2RlID0gdGhpcy5pbnB1dFByb2ouY29kZTtcclxuICAgIGxldCBkZWNpbWFsID0gMjtcclxuICAgIGlmIChjb2RlLmluY2x1ZGVzKCdFUFNHOjQzMjYnKSB8fCBjb2RlLmluY2x1ZGVzKCdFUFNHOjQyNjknKSkge1xyXG4gICAgICBkZWNpbWFsID0gNTtcclxuICAgIH1cclxuICAgIHRoaXMudW5pdHMgPSAoY29kZSA9PT0gJ0VQU0c6NDMyNicgfHwgY29kZSA9PT0gJ0VQU0c6NDI2OScpO1xyXG4gICAgY29vcmQgPSB0aGlzLm1hcC52aWV3Q29udHJvbGxlci5nZXRDZW50ZXIoY29kZSkubWFwKGMgPT4gYy50b0ZpeGVkKGRlY2ltYWwpKTtcclxuICAgIHJldHVybiBjb29yZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvcHkgdGhlIGNvb3JkaW5hdGVzIHRvIGEgY2xpcGJvYXJkXHJcbiAgICovXHJcbiAgY29weVRleHRUb0NsaXBib2FyZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSBDbGlwYm9hcmQuY29weSh0aGlzLmNvb3JkaW5hdGVzLnRvU3RyaW5nKCkpO1xyXG4gICAgaWYgKHN1Y2Nlc3NmdWwpIHtcclxuICAgICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgICBjb25zdCB0aXRsZSA9IHRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICdpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29weVRpdGxlJ1xyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBtc2cgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLmNvcHlNc2cnKTtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKG1zZywgdGl0bGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIGN1cnNvciBvbiB0aGUgY2VudGVyIG9mIHRoZSBtYXBcclxuICAgKi9cclxuICBkaXNwbGF5Q2VudGVyKHRvZ2dsZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5jZW50ZXIgPSB0b2dnbGU7XHJcbiAgICB0aGlzLm1hcC5tYXBDZW50ZXIkLm5leHQodG9nZ2xlKTtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCdjZW50ZXJUb2dnbGUnLCB0b2dnbGUsIFN0b3JhZ2VTY29wZS5TRVNTSU9OKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkZXIgb2YgdGhlIGZvcm1cclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkRm9ybSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBpbnB1dFByb2o6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgbGlzdCBvZiBwcm9qZWN0aW9ucyBhZnRlciBjaGFuZ2luZyBvZiB0aGUgc3RhdGUgb2YgdGhlIG1hcFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlUHJvamVjdGlvbnNab25lQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgbGV0IG1vZGlmaWVkUHJvaiA9IHRoaXMucHJvamVjdGlvbnMkLnZhbHVlO1xyXG4gICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgbW9kaWZpZWRQcm9qLm1hcChwID0+IHtcclxuICAgICAgaWYgKHAudHJhbnNsYXRlS2V5ID09PSAnbXRtJykge1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSB6b25lTXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgICBpZiAoem9uZSkge1xyXG4gICAgICAgICAgY29uc3QgY29kZSA9IHpvbmUgPCAxMCA/IGBFUFNHOjMyMTgke3pvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyB6b25lfWA7XHJcbiAgICAgICAgICBwLmFsaWFzID0gYE1UTSAke3pvbmV9YDtcclxuICAgICAgICAgIHAuY29kZSA9IGNvZGU7XHJcbiAgICAgICAgICBwLnpvbmUgPSBgJHt6b25lfWA7XHJcbiAgICAgICAgICBwLnRyYW5zbGF0ZWRWYWx1ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMubXRtJywgcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcC5hbGlhcyA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5pbk10bVpvbmUgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLmlucHV0UHJvai50cmFuc2xhdGVLZXkgPT09ICdtdG0nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXRQcm9qID0gdGhpcy5wcm9qZWN0aW9ucyQudmFsdWVbMF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwLnRyYW5zbGF0ZUtleSA9PT0gJ3V0bScpIHtcclxuICAgICAgICBjb25zdCB6b25lID0gem9uZVV0bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XHJcbiAgICAgICAgY29uc3QgY29kZSA9IGBFUFNHOjMyNiR7em9uZX1gO1xyXG4gICAgICAgIHAuYWxpYXMgPSBgVVRNICR7em9uZX1gO1xyXG4gICAgICAgIHAuY29kZSA9IGNvZGU7XHJcbiAgICAgICAgcC56b25lID0gYCR7em9uZX1gO1xyXG4gICAgICAgIHAudHJhbnNsYXRlZFZhbHVlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy51dG0nLCBwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBtb2RpZmllZFByb2ogPSBtb2RpZmllZFByb2ouZmlsdGVyKHAgPT4gcC5hbGlhcyAhPT0gJycpO1xyXG4gICAgdGhpcy5wcm9qZWN0aW9ucyQubmV4dChtb2RpZmllZFByb2opO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbGlzdCBvZiBjdXJyZW50cyBwcm9qZWN0aW9uc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgY29tcHV0ZVByb2plY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzID0gY29tcHV0ZVByb2plY3Rpb25zQ29uc3RyYWludHModGhpcy5wcm9qZWN0aW9uc0xpbWl0YXRpb25zKTtcclxuICAgIGNvbnN0IHByb2plY3Rpb25zOiBJbnB1dFByb2plY3Rpb25zW10gPSBbXTtcclxuXHJcbiAgICBpZiAoIXRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuZ2V0Q2VudGVyKHRoaXMuZGVmYXVsdFByb2ouY29kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy53Z3M4NCkge1xyXG4gICAgICBwcm9qZWN0aW9ucy5wdXNoKHtcclxuICAgICAgICB0cmFuc2xhdGVkVmFsdWU6IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMud2dzODQnLCB7IGNvZGU6ICdFUFNHOjQzMjYnIH0pLFxyXG4gICAgICAgIHRyYW5zbGF0ZUtleTogJ3dnczg0JywgYWxpYXM6ICdXR1M4NCcsIGNvZGU6ICdFUFNHOjQzMjYnLCB6b25lOiAnJ1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm5hZDgzKSB7XHJcbiAgICAgIHByb2plY3Rpb25zLnB1c2goe1xyXG4gICAgICAgIHRyYW5zbGF0ZWRWYWx1ZTogdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5uYWQ4MycsIHsgY29kZTogJ0VQU0c6NDI2OScgfSksXHJcbiAgICAgICAgdHJhbnNsYXRlS2V5OiAnbmFkODMnLCBhbGlhczogJ05BRDgzJywgY29kZTogJ0VQU0c6NDI2OScsIHpvbmU6ICcnXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2ViTWVyY2F0b3IpIHtcclxuICAgICAgcHJvamVjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgdHJhbnNsYXRlZFZhbHVlOiB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLndlYk1lcmNhdG9yJywgeyBjb2RlOiAnRVBTRzozODU3JyB9KSxcclxuICAgICAgICB0cmFuc2xhdGVLZXk6ICd3ZWJNZXJjYXRvcicsIGFsaWFzOiAnV2ViIE1lcmNhdG9yJywgY29kZTogJ0VQU0c6Mzg1NycsIHpvbmU6ICcnXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG0pIHtcclxuICAgICAgLy8gUXVlYmVjXHJcbiAgICAgIGNvbnN0IHpvbmUgPSB6b25lTXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgaWYgKHpvbmUpIHtcclxuICAgICAgICB0aGlzLmluTXRtWm9uZSA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgY29kZSA9IHpvbmUgPCAxMCA/IGBFUFNHOjMyMTgke3pvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyB6b25lfWA7XHJcbiAgICAgICAgcHJvamVjdGlvbnMuc3BsaWNlKDMsIDAsIHtcclxuICAgICAgICAgIHRyYW5zbGF0ZWRWYWx1ZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5tdG0nLCB7IGNvZGUsIHpvbmUgfSksXHJcbiAgICAgICAgICB0cmFuc2xhdGVLZXk6ICdtdG0nLCBhbGlhczogYE1UTSAke3pvbmV9YCwgY29kZSwgem9uZTogYCR7em9uZX1gXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbk10bVpvbmUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy51dG0pIHtcclxuICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLmluTXRtWm9uZSA/IDQgOiAzO1xyXG4gICAgICBjb25zdCB6b25lID0gem9uZVV0bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XHJcbiAgICAgIGNvbnN0IGNvZGUgPSB6b25lIDwgMTAgPyBgRVBTRzozMjYwJHt6b25lfWAgOiBgRVBTRzozMjYke3pvbmV9YDtcclxuICAgICAgcHJvamVjdGlvbnMuc3BsaWNlKG9yZGVyLCAwLCB7XHJcbiAgICAgICAgdHJhbnNsYXRlZFZhbHVlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLnV0bScsIHsgY29kZSwgem9uZSB9KSxcclxuICAgICAgICB0cmFuc2xhdGVLZXk6ICd1dG0nLCBhbGlhczogYFVUTSAke3pvbmV9YCwgY29kZSwgem9uZTogYCR7em9uZX1gXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgbGV0IGNvbmZpZ1Byb2plY3Rpb24gPSBbXTtcclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMucHJvakZyb21Db25maWcpIHtcclxuICAgICAgY29uZmlnUHJvamVjdGlvbiA9IHRoaXMuY29uZmlnLmdldENvbmZpZygncHJvamVjdGlvbnMnKSB8fCBbXTtcclxuICAgIH1cclxuICAgIHRoaXMucHJvamVjdGlvbnMkLm5leHQocHJvamVjdGlvbnMuY29uY2F0KGNvbmZpZ1Byb2plY3Rpb24pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFB1c2ggdGhlIE1UTSBpbiB0aGUgYXJyYXkgb2Ygc3lzdGVtZSBvZiBjb29yZGluYXRlc1xyXG4gICAqIEBwYXJhbSBwcm9qZWN0aW9ucyBBcnJheSBvZiB0aGUgSW5wdXRQcm9qZWN0aW9uc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgcHVzaE10bShwcm9qZWN0aW9uczogQXJyYXk8SW5wdXRQcm9qZWN0aW9ucz4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubXRtKSB7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSB6b25lTXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgY29uc3QgY29kZSA9IHpvbmUgPCAxMCA/IGBFUFNHOjMyMTgke3pvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyB6b25lfWA7XHJcbiAgICAgIHByb2plY3Rpb25zLnNwbGljZSgzLCAwLCB7XHJcbiAgICAgICAgICB0cmFuc2xhdGVkVmFsdWU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMubXRtJywgeyBjb2RlLCB6b25lIH0pLFxyXG4gICAgICAgICAgdHJhbnNsYXRlS2V5OiAnbXRtJywgYWxpYXM6IGBNVE0gJHt6b25lfWAsIGNvZGUsIHpvbmU6IGAke3pvbmV9YH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgbGlzdCBvZiBzeXN0ZW1zIG9mIGNvb3JkaW5hdGVzIGZvciB0ZXJyaXRvcnkgb2YgUXVlYmVjXHJcbiAgICogcHVzaCBNVE0gYW5kIFVUTSBpbiB0aGUgQXJyYXlcclxuICAgKi9cclxuICBwcml2YXRlIGJhY2sycXVlYmVjKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcHJvamVjdGlvbnMgPSB0aGlzLnByb2plY3Rpb25zJC52YWx1ZTtcclxuICAgIHRoaXMucHVzaE10bShwcm9qZWN0aW9ucyk7XHJcbiAgICB0aGlzLmluTXRtWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIG51bWJlcnMgb2YgdGhlIHpvbmVzIHdoZW4gYXBwbGljYXRpb24gaXMgcmVzdGFydGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVab25lTXRtVXRtKCkge1xyXG4gICAgaWYgKHRoaXMuaW5wdXRQcm9qLnRyYW5zbGF0ZUtleSA9PT0gJ210bScpIHtcclxuICAgICAgY29uc3Qgem9uZSA9IHpvbmVNdG0odGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2pbMF0pO1xyXG4gICAgICB0aGlzLmlucHV0UHJvai5hbGlhcyA9IGBNVE0gJHt6b25lfWA7XHJcbiAgICAgIGNvbnN0IGNvZGUgPSB6b25lIDwgMTAgPyBgRVBTRzozMjE4JHt6b25lfWAgOiBgRVBTRzozMjEkezgwICsgem9uZX1gO1xyXG4gICAgICB0aGlzLmlucHV0UHJvai5jb2RlID0gY29kZTtcclxuICAgICAgdGhpcy5pbnB1dFByb2ouem9uZSA9IGAke3pvbmV9YDtcclxuICAgICAgdGhpcy5pbnB1dFByb2oudHJhbnNsYXRlZFZhbHVlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5tdG0nLCB7IGNvZGUsIHpvbmUgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pbnB1dFByb2oudHJhbnNsYXRlS2V5ID09PSAndXRtJykge1xyXG4gICAgICBjb25zdCB6b25lID0gem9uZVV0bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XHJcbiAgICAgIHRoaXMuaW5wdXRQcm9qLmFsaWFzID0gYFVUTSAke3pvbmV9YDtcclxuICAgICAgY29uc3QgY29kZSA9IHpvbmUgPCAxMCA/IGBFUFNHOjMyNjAke3pvbmV9YCA6IGBFUFNHOjMyNiR7em9uZX1gO1xyXG4gICAgICB0aGlzLmlucHV0UHJvai5jb2RlID0gY29kZTtcclxuICAgICAgdGhpcy5pbnB1dFByb2ouem9uZSA9IGAke3pvbmV9YDtcclxuICAgICAgdGhpcy5pbnB1dFByb2oudHJhbnNsYXRlZFZhbHVlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy51dG0nLCB7IGNvZGUsIHpvbmUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wdXRlIHRoZSBwb3NpdGlvbiBvZiBhIGN1cnJlbnQgcHJvamVjdGlvbiBpbiBhIGxpc3QuIDAgaWYgdGhlIHByb2plY3Rpb24gaXMgbm90IGluIHRoZSBsaXN0XHJcbiAgICogQHBhcmFtIHRyYW5zbGF0ZUtleSBzdHJpbmcsIHRyYW5zbGF0ZSBrZXkgb2YgYSBwcm9qZWN0aW9uXHJcbiAgICogQHJldHVybnMgbnVtZXJpYywgcG9zaXRpb24gb2YgYW4gZWxlbWVudCBpbiB0aGUgYXJyYXlcclxuICAgKi9cclxuICBwb3NpdGlvbkluTGlzdCh0ZW1wSW5wdXRQcm9qOiBJbnB1dFByb2plY3Rpb25zKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHRrID0gdGVtcElucHV0UHJvai50cmFuc2xhdGVLZXk7XHJcbiAgICBjb25zdCBhbGlhcyA9IHRlbXBJbnB1dFByb2ouYWxpYXM7XHJcbiAgICBsZXQgcG9zaXRpb247IC8vID0gdW5kZWZpbmVkO1xyXG4gICAgbGV0IGl0ZXIgPSAwO1xyXG4gICAgdGhpcy5wcm9qZWN0aW9ucyQudmFsdWUubWFwKChwcm9qZWN0aW9uKSA9PiB7XHJcbiAgICAgIGlmICh0aykge1xyXG4gICAgICAgIGlmICh0ayA9PT0gcHJvamVjdGlvbi50cmFuc2xhdGVLZXkpIHtcclxuICAgICAgICAgIHBvc2l0aW9uID0gaXRlcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYWxpYXMgPT09IHByb2plY3Rpb24uYWxpYXMpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IGl0ZXI7XHJcbiAgICAgIH1cclxuICAgICAgaXRlcisrO1xyXG4gICAgfSk7XHJcbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID8gcG9zaXRpb24gOiAwO1xyXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIHRoZSBsaXN0IG9mIHByb2plY3Rpb25zIGRlcGVuZGluZyBvbiB0aGUgcHJvamVjdGlvbnMgb2YgTGFtYmVydFxyXG4gICAqIEBwYXJhbSBjb29yZGluYXRlcyBBbiBhcnJheSBvZiBudW1iZXJzLCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlXHJcbiAgICovXHJcbiAgY2hlY2tMYW1iZXJ0KGNvb3JkaW5hdGVzOiBbbnVtYmVyLCBudW1iZXJdKSB7XHJcbiAgICBjb25zdCBsYW1iZXJ0UHJvamVjdGlvbnMgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ3Byb2plY3Rpb25zJyk7XHJcbiAgICBsYW1iZXJ0UHJvamVjdGlvbnMuZm9yRWFjaChwcm9qZWN0aW9uID0+IHtcclxuICAgICAgICBsZXQgbW9kaWZpZWRQcm9qID0gdGhpcy5wcm9qZWN0aW9ucyQudmFsdWU7XHJcbiAgICAgICAgY29uc3QgZXh0ZW50ID0gcHJvamVjdGlvbi5leHRlbnQ7XHJcbiAgICAgICAgY29uc3QgY29kZSA9IHByb2plY3Rpb24uY29kZS5tYXRjaCgvXFxkKy8pO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFeHRlbnRXR1MgPSBvbHByb2oudHJhbnNmb3JtRXh0ZW50KGV4dGVudCwgcHJvamVjdGlvbi5jb2RlLCB0aGlzLmRlZmF1bHRQcm9qLmNvZGUpO1xyXG4gICAgICAgIGlmIChjb29yZGluYXRlc1swXSA8IGN1cnJlbnRFeHRlbnRXR1NbMF0gfHwgY29vcmRpbmF0ZXNbMF0gPiBjdXJyZW50RXh0ZW50V0dTWzJdIHx8XHJcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzWzFdIDwgY3VycmVudEV4dGVudFdHU1sxXSB8fCBjb29yZGluYXRlc1sxXSA+IGN1cnJlbnRFeHRlbnRXR1NbM10pIHtcclxuICAgICAgICAgICAgdGhpcy5pbkxhbWJlcnQyW2NvZGVdID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0UHJvai5hbGlhcyA9PT0gcHJvamVjdGlvbi5hbGlhcykge1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5wdXRQcm9qID0gdGhpcy5wcm9qZWN0aW9ucyQudmFsdWVbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbW9kaWZpZWRQcm9qID0gbW9kaWZpZWRQcm9qLmZpbHRlcihwID0+IHAuYWxpYXMgIT09IHByb2plY3Rpb24uYWxpYXMpO1xyXG4gICAgICAgICAgICB0aGlzLnByb2plY3Rpb25zJC5uZXh0KG1vZGlmaWVkUHJvaik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5MYW1iZXJ0Mltjb2RlXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9ucyQubmV4dChtb2RpZmllZFByb2ouY29uY2F0KHByb2plY3Rpb24pKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5MYW1iZXJ0Mltjb2RlXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwidW5pdHM7IGVsc2UgZWxzZUJsb2NrXCIgY2xhc3M9XCJjb29yZGluYXRlc1wiPlxyXG4gICAgPHRleHRhcmVhICAjdGV4dEFyZWEgbWF0SW5wdXQgcmVhZG9ubHkgcm93cz1cIjFcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5sb24nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW3ZhbHVlXT1cImNvb3JkaW5hdGVzWzBdXCI+PC90ZXh0YXJlYT5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuPG5nLXRlbXBsYXRlICNlbHNlQmxvY2sgPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvb3JkaW5hdGVzXCI+XHJcbiAgICA8dGV4dGFyZWEgI3RleHRBcmVhIG1hdElucHV0IHJlYWRvbmx5IHJvd3M9XCIxXCJcclxuICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5lc3QnIHwgdHJhbnNsYXRlXCJcclxuICBbdmFsdWVdPVwiY29vcmRpbmF0ZXNbMF1cIj48L3RleHRhcmVhPjwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJ1bml0czsgZWxzZSBlbHNlQmxvY2syXCIgY2xhc3M9XCJjb29yZGluYXRlczJcIj5cclxuICAgIDx0ZXh0YXJlYSAjdGV4dEFyZWEgbWF0SW5wdXQgcmVhZG9ubHkgcm93cz1cIjFcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5sYXQnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW3ZhbHVlXT1cImNvb3JkaW5hdGVzWzFdXCI+PC90ZXh0YXJlYT5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuPG5nLXRlbXBsYXRlICNlbHNlQmxvY2syID5cclxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb29yZGluYXRlczJcIj4gIDx0ZXh0YXJlYSAjdGV4dEFyZWEgbWF0SW5wdXQgcmVhZG9ubHkgcm93cz1cIjFcIlxyXG4gIFtwbGFjZWhvbGRlcl09XCInaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLm5vcmQnIHwgdHJhbnNsYXRlXCJcclxuICBbdmFsdWVdPVwiY29vcmRpbmF0ZXNbMV1cIj48L3RleHRhcmVhPjwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48YnV0dG9uIGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCJcclxuICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAoY2xpY2spPVwiY29weVRleHRUb0NsaXBib2FyZCgpXCI+XHJcbiAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNvbnRlbnQtY29weVwiPjwvbWF0LWljb24+XHJcbiAgICB7eyAnaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLmNvcHknIHwgdHJhbnNsYXRlIH19XHJcbjwvYnV0dG9uPlxyXG5cclxuPGZvcm0gY2xhc3M9XCJpZ28tZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cclxuICAgIDxtYXQtbGFiZWw+e3snaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLmNvb3JkU3lzdGVtJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJpbnB1dFByb2pcIj5cclxuICAgICAgPG1hdC1vcHRpb24gbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHByb2plY3Rpb24gb2YgKHByb2plY3Rpb25zJCB8IGFzeW5jKVwiXHJcbiAgICAgICAgW3ZhbHVlXT1cInByb2plY3Rpb25cIlxyXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICB7e3Byb2plY3Rpb24udHJhbnNsYXRlZFZhbHVlIHx8IHByb2plY3Rpb24uYWxpYXMgfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0PlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjZW50ZXItdG9nZ2xlIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgIFtjaGVja2VkXT1cImNlbnRlclwiXHJcbiAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICAoY2hhbmdlKT1cImRpc3BsYXlDZW50ZXIoJGV2ZW50LmNoZWNrZWQpXCI+XHJcbiAgICB7eydpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMuY2VudGVyJyB8IHRyYW5zbGF0ZX19XHJcbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPiBcclxuPC9mb3JtPlxyXG5cclxuPHAgY2xhc3M9XCJpZ28tem9vbSBtYXQtdHlwb2dyYXBoeVwiPnt7J2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy56b29tJyB8IHRyYW5zbGF0ZX19IHt7bWFwLnZpZXdDb250cm9sbGVyLmdldFpvb20oKSB9fTwvcD5cclxuPHAgY2xhc3M9XCJpZ28tem9vbSBtYXQtdHlwb2dyYXBoeVwiPnt7J2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5zY2FsZScgfCB0cmFuc2xhdGV9fSB7eyBmb3JtYXR0ZWRTY2FsZSQgfCBhc3luYyB9fTwvcD5cclxuPHAgY2xhc3M9XCJpZ28tem9vbSBtYXQtdHlwb2dyYXBoeVwiPnt7J2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5yZXNvbHV0aW9uJyB8IHRyYW5zbGF0ZX19IHt7bWFwLnZpZXdDb250cm9sbGVyLmdldFJlc29sdXRpb24oKSB8IG51bWJlcjogJzEuMC0wJyB9fTwvcD4iXX0=
@@ -0,0 +1,157 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { EntityStoreFilterCustomFuncStrategy, EntityStoreFilterSelectionStrategy } from '@igo2/common';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ import { mapExtentStrategyActiveToolTip, noElementSelected, OgcFilterWidget, } from '@igo2/geo';
5
+ import { StorageServiceEventEnum } from '@igo2/core';
6
+ import { map, skipWhile } from 'rxjs/operators';
7
+ import { handleZoomAuto } from './workspace.utils';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../../storage/storage.state";
10
+ import * as i2 from "@igo2/core";
11
+ import * as i3 from "../../tool/tool.state";
12
+ import * as i4 from "@igo2/common";
13
+ export class EditionActionsService {
14
+ constructor(ogcFilterWidget, storageState, languageService, mediaService, toolState) {
15
+ this.ogcFilterWidget = ogcFilterWidget;
16
+ this.storageState = storageState;
17
+ this.languageService = languageService;
18
+ this.mediaService = mediaService;
19
+ this.toolState = toolState;
20
+ this.maximize$ = new BehaviorSubject(this.storageService.get('workspaceMaximize'));
21
+ this.zoomAuto$ = new BehaviorSubject(false);
22
+ }
23
+ get storageService() {
24
+ return this.storageState.storageService;
25
+ }
26
+ get zoomAuto() {
27
+ return this.storageService.get('zoomAuto');
28
+ }
29
+ ngOnDestroy() {
30
+ if (this.storageChange$$) {
31
+ this.storageChange$$.unsubscribe();
32
+ }
33
+ }
34
+ loadActions(workspace, rowsInMapExtentCheckCondition$, selectOnlyCheckCondition$) {
35
+ const actions = this.buildActions(workspace, rowsInMapExtentCheckCondition$, selectOnlyCheckCondition$);
36
+ workspace.actionStore.load(actions);
37
+ }
38
+ buildActions(workspace, rowsInMapExtentCheckCondition$, selectOnlyCheckCondition$) {
39
+ var _a, _b;
40
+ this.zoomAuto$.next(this.zoomAuto);
41
+ this.storageChange$$ = this.storageService.storageChange$
42
+ .pipe(skipWhile((storageChange) => storageChange.key !== 'zoomAuto' || storageChange.event === StorageServiceEventEnum.CLEARED))
43
+ .subscribe(() => {
44
+ this.zoomAuto$.next(this.zoomAuto);
45
+ handleZoomAuto(workspace, this.storageService);
46
+ });
47
+ const actions = [
48
+ {
49
+ id: 'zoomAuto',
50
+ checkbox: true,
51
+ title: 'igo.integration.workspace.zoomAuto.title',
52
+ tooltip: 'igo.integration.workspace.zoomAuto.tooltip',
53
+ checkCondition: this.zoomAuto$,
54
+ handler: () => {
55
+ handleZoomAuto(workspace, this.storageService);
56
+ this.storageService.set('zoomAuto', !this.storageService.get('zoomAuto'));
57
+ }
58
+ },
59
+ {
60
+ id: 'filterInMapExtent',
61
+ checkbox: true,
62
+ title: 'igo.integration.workspace.inMapExtent.title',
63
+ tooltip: mapExtentStrategyActiveToolTip(workspace),
64
+ checkCondition: rowsInMapExtentCheckCondition$,
65
+ handler: () => rowsInMapExtentCheckCondition$.next(!rowsInMapExtentCheckCondition$.value)
66
+ },
67
+ {
68
+ id: 'selectedOnly',
69
+ checkbox: true,
70
+ title: 'igo.integration.workspace.selected.title',
71
+ tooltip: 'igo.integration.workspace.selected.title',
72
+ checkCondition: selectOnlyCheckCondition$,
73
+ handler: () => selectOnlyCheckCondition$.next(!selectOnlyCheckCondition$.value)
74
+ },
75
+ {
76
+ id: 'clearselection',
77
+ icon: 'select-off',
78
+ title: 'igo.integration.workspace.clearSelection.title',
79
+ tooltip: 'igo.integration.workspace.clearSelection.tooltip',
80
+ handler: (ws) => {
81
+ ws.entityStore.state.updateMany(ws.entityStore.view.all(), { selected: false });
82
+ },
83
+ args: [workspace],
84
+ availability: (ws) => noElementSelected(ws)
85
+ },
86
+ {
87
+ id: 'wfsDownload',
88
+ icon: 'file-export',
89
+ title: 'igo.integration.workspace.download.title',
90
+ tooltip: 'igo.integration.workspace.download.tooltip',
91
+ handler: (ws) => {
92
+ const filterStrategy = ws.entityStore.getStrategyOfType(EntityStoreFilterCustomFuncStrategy);
93
+ const filterSelectionStrategy = ws.entityStore.getStrategyOfType(EntityStoreFilterSelectionStrategy);
94
+ const layersWithSelection = filterSelectionStrategy.active ? [ws.layer.id] : [];
95
+ this.toolState.toolToActivateFromOptions({
96
+ tool: 'importExport',
97
+ options: { layers: [ws.layer.id], featureInMapExtent: filterStrategy.active, layersWithSelection }
98
+ });
99
+ },
100
+ args: [workspace]
101
+ },
102
+ {
103
+ id: 'ogcFilter',
104
+ icon: 'filter',
105
+ title: 'igo.integration.workspace.ogcFilter.title',
106
+ tooltip: 'igo.integration.workspace.ogcFilter.tooltip',
107
+ handler: (widget, ws) => {
108
+ ws.activateWidget(widget, {
109
+ map: ws.map,
110
+ layer: ws.layer
111
+ });
112
+ },
113
+ args: [this.ogcFilterWidget, workspace]
114
+ },
115
+ {
116
+ id: 'maximize',
117
+ title: this.languageService.translate.instant('igo.integration.workspace.maximize'),
118
+ tooltip: this.languageService.translate.instant('igo.integration.workspace.maximizeTooltip'),
119
+ icon: 'resize',
120
+ display: () => {
121
+ return this.maximize$.pipe(map((v) => !v && !this.mediaService.isMobile()));
122
+ },
123
+ handler: () => {
124
+ if (!this.mediaService.isMobile()) {
125
+ this.maximize$.next(true);
126
+ }
127
+ },
128
+ },
129
+ {
130
+ id: 'standardExtent',
131
+ title: this.languageService.translate.instant('igo.integration.workspace.standardExtent'),
132
+ tooltip: this.languageService.translate.instant('igo.integration.workspace.standardExtentTooltip'),
133
+ icon: 'resize',
134
+ display: () => {
135
+ return this.maximize$.pipe(map((v) => v && !this.mediaService.isMobile()));
136
+ },
137
+ handler: () => {
138
+ this.maximize$.next(false);
139
+ }
140
+ }
141
+ ];
142
+ return ((_b = (_a = workspace.layer.dataSource.ogcFilters$) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.enabled) ?
143
+ actions : actions.filter(action => action.id !== 'ogcFilter');
144
+ }
145
+ }
146
+ EditionActionsService.ɵfac = function EditionActionsService_Factory(t) { return new (t || EditionActionsService)(i0.ɵɵinject(OgcFilterWidget), i0.ɵɵinject(i1.StorageState), i0.ɵɵinject(i2.LanguageService), i0.ɵɵinject(i2.MediaService), i0.ɵɵinject(i3.ToolState)); };
147
+ EditionActionsService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EditionActionsService, factory: EditionActionsService.ɵfac, providedIn: 'root' });
148
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EditionActionsService, [{
149
+ type: Injectable,
150
+ args: [{
151
+ providedIn: 'root'
152
+ }]
153
+ }], function () { return [{ type: i4.Widget, decorators: [{
154
+ type: Inject,
155
+ args: [OgcFilterWidget]
156
+ }] }, { type: i1.StorageState }, { type: i2.LanguageService }, { type: i2.MediaService }, { type: i3.ToolState }]; }, null); })();
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGlvbi1hY3Rpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9pbnRlZ3JhdGlvbi9zcmMvbGliL3dvcmtzcGFjZS9zaGFyZWQvZWRpdGlvbi1hY3Rpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUVMLG1DQUFtQyxFQUNuQyxrQ0FBa0MsRUFFbkMsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUVMLDhCQUE4QixFQUM5QixpQkFBaUIsRUFFakIsZUFBZSxHQUVoQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQXVDLHVCQUF1QixFQUFnQyxNQUFNLFlBQVksQ0FBQztBQUV4SCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7O0FBS25ELE1BQU0sT0FBTyxxQkFBcUI7SUFpQmhDLFlBQ21DLGVBQXVCLEVBQ2hELFlBQTBCLEVBQzNCLGVBQWdDLEVBQy9CLFlBQTBCLEVBQzFCLFNBQW9CO1FBSkssb0JBQWUsR0FBZixlQUFlLENBQVE7UUFDaEQsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQy9CLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFwQnZCLGNBQVMsR0FBNkIsSUFBSSxlQUFlLENBQzlELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFZLENBQ3hELENBQUM7UUFFRixjQUFTLEdBQTZCLElBQUksZUFBZSxDQUFDLEtB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Q0FBQyxTQUFTLENBQUMsT0FBTyxDQUMzQywwQ0FBMEMsQ0FDM0M7Z0JBQ0QsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDN0MsaURBQWlELENBQ2xEO2dCQUNELElBQUksRUFBRSxRQUFRO2dCQUNkLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM3RSxDQUFDO2dCQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLENBQUM7YUFDRjtTQUNGLENBQUM7UUFDRixPQUFPLENBQUEsTUFBQSxNQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBc0MsQ0FBQyxXQUFXLDBDQUFFLEtBQUssMENBQUUsT0FBTyxFQUFDLENBQUM7WUFDNUYsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxXQUFXLENBQUMsQ0FBQztJQUNoRSxDQUFDOzswRkEvSlUscUJBQXFCLGNBa0J0QixlQUFlOzJFQWxCZCxxQkFBcUIsV0FBckIscUJBQXFCLG1CQUZwQixNQUFNO3VGQUVQLHFCQUFxQjtjQUhqQyxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7O3NCQW1CSSxNQUFNO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHtcclxuICBBY3Rpb24sXHJcbiAgRW50aXR5U3RvcmVGaWx0ZXJDdXN0b21GdW5jU3RyYXRlZ3ksXHJcbiAgRW50aXR5U3RvcmVGaWx0ZXJTZWxlY3Rpb25TdHJhdGVneSxcclxuICBXaWRnZXRcclxufSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBFZGl0aW9uV29ya3NwYWNlLFxyXG4gIG1hcEV4dGVudFN0cmF0ZWd5QWN0aXZlVG9vbFRpcCxcclxuICBub0VsZW1lbnRTZWxlY3RlZCxcclxuICBFeHBvcnRPcHRpb25zLFxyXG4gIE9nY0ZpbHRlcldpZGdldCxcclxuICBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZSxcclxufSBmcm9tICdAaWdvMi9nZW8nO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSwgU3RvcmFnZVNlcnZpY2VFdmVudCwgU3RvcmFnZVNlcnZpY2VFdmVudEVudW0sIExhbmd1YWdlU2VydmljZSwgTWVkaWFTZXJ2aWNlfSBmcm9tICdAaWdvMi9jb3JlJztcclxuaW1wb3J0IHsgU3RvcmFnZVN0YXRlIH0gZnJvbSAnLi4vLi4vc3RvcmFnZS9zdG9yYWdlLnN0YXRlJztcclxuaW1wb3J0IHsgbWFwLCBza2lwV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRvb2xTdGF0ZSB9IGZyb20gJy4uLy4uL3Rvb2wvdG9vbC5zdGF0ZSc7XHJcbmltcG9ydCB7IGhhbmRsZVpvb21BdXRvIH0gZnJvbSAnLi93b3Jrc3BhY2UudXRpbHMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRWRpdGlvbkFjdGlvbnNTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIG1heGltaXplJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCd3b3Jrc3BhY2VNYXhpbWl6ZScpIGFzIGJvb2xlYW5cclxuICApO1xyXG5cclxuICB6b29tQXV0byQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHByaXZhdGUgc3RvcmFnZUNoYW5nZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGdldCBzdG9yYWdlU2VydmljZSgpOiBTdG9yYWdlU2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlU3RhdGUuc3RvcmFnZVNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICBnZXQgem9vbUF1dG8oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ3pvb21BdXRvJykgYXMgYm9vbGVhbjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChPZ2NGaWx0ZXJXaWRnZXQpIHByaXZhdGUgb2djRmlsdGVyV2lkZ2V0OiBXaWRnZXQsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTdGF0ZTogU3RvcmFnZVN0YXRlLFxyXG4gICAgcHVibGljIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZWRpYVNlcnZpY2U6IE1lZGlhU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9vbFN0YXRlOiBUb29sU3RhdGUpIHt9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3RvcmFnZUNoYW5nZSQkKSB7XHJcbiAgICAgIHRoaXMuc3RvcmFnZUNoYW5nZSQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkQWN0aW9ucyhcclxuICAgIHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSxcclxuICAgIHJvd3NJbk1hcEV4dGVudENoZWNrQ29uZGl0aW9uJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxyXG4gICAgc2VsZWN0T25seUNoZWNrQ29uZGl0aW9uJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgICApIHtcclxuICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLmJ1aWxkQWN0aW9ucyhcclxuICAgICAgd29ya3NwYWNlLFxyXG4gICAgICByb3dzSW5NYXBFeHRlbnRDaGVja0NvbmRpdGlvbiQsXHJcbiAgICAgIHNlbGVjdE9ubHlDaGVja0NvbmRpdGlvbiRcclxuICAgICAgKTtcclxuICAgIHdvcmtzcGFjZS5hY3Rpb25TdG9yZS5sb2FkKGFjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRBY3Rpb25zKFxyXG4gICAgd29ya3NwYWNlOiBFZGl0aW9uV29ya3NwYWNlLFxyXG4gICAgcm93c0luTWFwRXh0ZW50Q2hlY2tDb25kaXRpb24kOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXHJcbiAgICBzZWxlY3RPbmx5Q2hlY2tDb25kaXRpb24kOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICAgICk6IEFjdGlvbltdIHtcclxuICAgIHRoaXMuem9vbUF1dG8kLm5leHQodGhpcy56b29tQXV0byk7XHJcbiAgICB0aGlzLnN0b3JhZ2VDaGFuZ2UkJCA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc3RvcmFnZUNoYW5nZSRcclxuICAgICAgLnBpcGUoc2tpcFdoaWxlKChzdG9yYWdlQ2hhbmdlOiBTdG9yYWdlU2VydmljZUV2ZW50KSA9PlxyXG4gICAgICAgIHN0b3JhZ2VDaGFuZ2Uua2V5ICE9PSAnem9vbUF1dG8nIHx8IHN0b3JhZ2VDaGFuZ2UuZXZlbnQgPT09IFN0b3JhZ2VTZXJ2aWNlRXZlbnRFbnVtLkNMRUFSRUQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnpvb21BdXRvJC5uZXh0KHRoaXMuem9vbUF1dG8pO1xyXG4gICAgICAgIGhhbmRsZVpvb21BdXRvKHdvcmtzcGFjZSwgdGhpcy5zdG9yYWdlU2VydmljZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgY29uc3QgYWN0aW9ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAnem9vbUF1dG8nLFxyXG4gICAgICAgIGNoZWNrYm94OiB0cnVlLFxyXG4gICAgICAgIHRpdGxlOiAnaWdvLmludGVncmF0aW9uLndvcmtzcGFjZS56b29tQXV0by50aXRsZScsXHJcbiAgICAgICAgdG9vbHRpcDogJ2lnby5pbnRlZ3JhdGlvbi53b3Jrc3BhY2Uuem9vbUF1dG8udG9vbHRpcCcsXHJcbiAgICAgICAgY2hlY2tDb25kaXRpb246IHRoaXMuem9vbUF1dG8kLFxyXG4gICAgICAgIGhhbmRsZXI6ICgpID0+IHtcclxuICAgICAgICAgIGhhbmRsZVpvb21BdXRvKHdvcmtzcGFjZSwgdGhpcy5zdG9yYWdlU2VydmljZSk7XHJcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldCgnem9vbUF1dG8nLCAhdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ3pvb21BdXRvJykgYXMgYm9vbGVhbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6ICdmaWx0ZXJJbk1hcEV4dGVudCcsXHJcbiAgICAgICAgY2hlY2tib3g6IHRydWUsXHJcbiAgICAgICAgdGl0bGU6ICdpZ28uaW50ZWdyYXRpb24ud29ya3NwYWNlLmluTWFwRXh0ZW50LnRpdGxlJyxcclxuICAgICAgICB0b29sdGlwOiBtYXBFeHRlbnRTdHJhdGVneUFjdGl2ZVRvb2xUaXAod29ya3NwYWNlKSxcclxuICAgICAgICBjaGVja0NvbmRpdGlvbjogcm93c0luTWFwRXh0ZW50Q2hlY2tDb25kaXRpb24kLFxyXG4gICAgICAgIGhhbmRsZXI6ICgpID0+IHJvd3NJbk1hcEV4dGVudENoZWNrQ29uZGl0aW9uJC5uZXh0KCFyb3dzSW5NYXBFeHRlbnRDaGVja0NvbmRpdGlvbiQudmFsdWUpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogJ3NlbGVjdGVkT25seScsXHJcbiAgICAgICAgY2hlY2tib3g6IHRydWUsXHJcbiAgICAgICAgdGl0bGU6ICdpZ28uaW50ZWdyYXRpb24ud29ya3NwYWNlLnNlbGVjdGVkLnRpdGxlJyxcclxuICAgICAgICB0b29sdGlwOiAnaWdvLmludGVncmF0aW9uLndvcmtzcGFjZS5zZWxlY3RlZC50aXRsZScsXHJcbiAgICAgICAgY2hlY2tDb25kaXRpb246IHNlbGVjdE9ubHlDaGVja0NvbmRpdGlvbiQsXHJcbiAgICAgICAgaGFuZGxlcjogKCkgPT4gc2VsZWN0T25seUNoZWNrQ29uZGl0aW9uJC5uZXh0KCFzZWxlY3RPbmx5Q2hlY2tDb25kaXRpb24kLnZhbHVlKVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6ICdjbGVhcnNlbGVjdGlvbicsXHJcbiAgICAgICAgaWNvbjogJ3NlbGVjdC1vZmYnLFxyXG4gICAgICAgIHRpdGxlOiAnaWdvLmludGVncmF0aW9uLndvcmtzcGFjZS5jbGVhclNlbGVjdGlvbi50aXRsZScsXHJcbiAgICAgICAgdG9vbHRpcDogJ2lnby5pbnRlZ3JhdGlvbi53b3Jrc3BhY2UuY2xlYXJTZWxlY3Rpb24udG9vbHRpcCcsXHJcbiAgICAgICAgaGFuZGxlcjogKHdzOiBFZGl0aW9uV29ya3NwYWNlKSA9PiB7XHJcbiAgICAgICAgICB3cy5lbnRpdHlTdG9yZS5zdGF0ZS51cGRhdGVNYW55KHdzLmVudGl0eVN0b3JlLnZpZXcuYWxsKCksIHsgc2VsZWN0ZWQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYXJnczogW3dvcmtzcGFjZV0sXHJcbiAgICAgICAgYXZhaWxhYmlsaXR5OiAod3M6IEVkaXRpb25Xb3Jrc3BhY2UpID0+IG5vRWxlbWVudFNlbGVjdGVkKHdzKVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6ICd3ZnNEb3dubG9hZCcsXHJcbiAgICAgICAgaWNvbjogJ2ZpbGUtZXhwb3J0JyxcclxuICAgICAgICB0aXRsZTogJ2lnby5pbnRlZ3JhdGlvbi53b3Jrc3BhY2UuZG93bmxvYWQudGl0bGUnLFxyXG4gICAgICAgIHRvb2x0aXA6ICdpZ28uaW50ZWdyYXRpb24ud29ya3NwYWNlLmRvd25sb2FkLnRvb2x0aXAnLFxyXG4gICAgICAgIGhhbmRsZXI6ICh3czogRWRpdGlvbldvcmtzcGFjZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyU3RyYXRlZ3kgPSB3cy5lbnRpdHlTdG9yZS5nZXRTdHJhdGVneU9mVHlwZShFbnRpdHlTdG9yZUZpbHRlckN1c3RvbUZ1bmNTdHJhdGVneSk7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXJTZWxlY3Rpb25TdHJhdGVneSA9IHdzLmVudGl0eVN0b3JlLmdldFN0cmF0ZWd5T2ZUeXBlKEVudGl0eVN0b3JlRmlsdGVyU2VsZWN0aW9uU3RyYXRlZ3kpO1xyXG4gICAgICAgICAgY29uc3QgbGF5ZXJzV2l0aFNlbGVjdGlvbiA9IGZpbHRlclNlbGVjdGlvblN0cmF0ZWd5LmFjdGl2ZSA/IFt3cy5sYXllci5pZF0gOiBbXTtcclxuICAgICAgICAgIHRoaXMudG9vbFN0YXRlLnRvb2xUb0FjdGl2YXRlRnJvbU9wdGlvbnMoe1xyXG4gICAgICAgICAgICB0b29sOiAnaW1wb3J0RXhwb3J0JyxcclxuICAgICAgICAgICAgb3B0aW9uczogeyBsYXllcnM6IFt3cy5sYXllci5pZF0sIGZlYXR1cmVJbk1hcEV4dGVudDogZmlsdGVyU3RyYXRlZ3kuYWN0aXZlLCBsYXllcnNXaXRoU2VsZWN0aW9uIH0gYXMgRXhwb3J0T3B0aW9uc1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhcmdzOiBbd29ya3NwYWNlXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6ICdvZ2NGaWx0ZXInLFxyXG4gICAgICAgIGljb246ICdmaWx0ZXInLFxyXG4gICAgICAgIHRpdGxlOiAnaWdvLmludGVncmF0aW9uLndvcmtzcGFjZS5vZ2NGaWx0ZXIudGl0bGUnLFxyXG4gICAgICAgIHRvb2x0aXA6ICdpZ28uaW50ZWdyYXRpb24ud29ya3NwYWNlLm9nY0ZpbHRlci50b29sdGlwJyxcclxuICAgICAgICBoYW5kbGVyOiAod2lkZ2V0OiBXaWRnZXQsIHdzOiBFZGl0aW9uV29ya3NwYWNlKSA9PiB7XHJcbiAgICAgICAgICB3cy5hY3RpdmF0ZVdpZGdldCh3aWRnZXQsIHtcclxuICAgICAgICAgICAgbWFwOiB3cy5tYXAsXHJcbiAgICAgICAgICAgIGxheWVyOiB3cy5sYXllclxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhcmdzOiBbdGhpcy5vZ2NGaWx0ZXJXaWRnZXQsIHdvcmtzcGFjZV1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAnbWF4aW1pemUnLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmludGVncmF0aW9uLndvcmtzcGFjZS5tYXhpbWl6ZScpLFxyXG4gICAgICAgIHRvb2x0aXA6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ2lnby5pbnRlZ3JhdGlvbi53b3Jrc3BhY2UubWF4aW1pemVUb29sdGlwJ1xyXG4gICAgICAgICksXHJcbiAgICAgICAgaWNvbjogJ3Jlc2l6ZScsXHJcbiAgICAgICAgZGlzcGxheTogKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubWF4aW1pemUkLnBpcGUobWFwKCh2KSA9PiAhdiAmJiAhdGhpcy5tZWRpYVNlcnZpY2UuaXNNb2JpbGUoKSkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLm1lZGlhU2VydmljZS5pc01vYmlsZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF4aW1pemUkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAnc3RhbmRhcmRFeHRlbnQnLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICdpZ28uaW50ZWdyYXRpb24ud29ya3NwYWNlLnN0YW5kYXJkRXh0ZW50J1xyXG4gICAgICAgICksXHJcbiAgICAgICAgdG9vbHRpcDogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmludGVncmF0aW9uLndvcmtzcGFjZS5zdGFuZGFyZEV4dGVudFRvb2x0aXAnXHJcbiAgICAgICAgKSxcclxuICAgICAgICBpY29uOiAncmVzaXplJyxcclxuICAgICAgICBkaXNwbGF5OiAoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYXhpbWl6ZSQucGlwZShtYXAoKHYpID0+IHYgJiYgIXRoaXMubWVkaWFTZXJ2aWNlLmlzTW9iaWxlKCkpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRsZXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubWF4aW1pemUkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXTtcclxuICAgIHJldHVybiAod29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2UgYXMgT2djRmlsdGVyYWJsZURhdGFTb3VyY2UpLm9nY0ZpbHRlcnMkPy52YWx1ZT8uZW5hYmxlZCA/XHJcbiAgICBhY3Rpb25zIDogYWN0aW9ucy5maWx0ZXIoYWN0aW9uID0+IGFjdGlvbi5pZCAhPT0gJ29nY0ZpbHRlcicpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -4,4 +4,4 @@ export function handleZoomAuto(workspace, storageService) {
4
4
  .getStrategyOfType(FeatureStoreSelectionStrategy);
5
5
  zoomStrategy.setMotion(storageService.get('zoomAuto') ? FeatureMotion.Default : FeatureMotion.None);
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvaW50ZWdyYXRpb24vc3JjL2xpYi93b3Jrc3BhY2Uvc2hhcmVkL3dvcmtzcGFjZS51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsYUFBYSxFQUNiLDZCQUE2QixFQUdoQyxNQUFNLFdBQVcsQ0FBQztBQUduQixNQUFNLFVBQVUsY0FBYyxDQUFDLFNBQTBDLEVBQUUsY0FBYztJQUNyRixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsV0FBVztTQUNyQyxpQkFBaUIsQ0FBQyw2QkFBNkIsQ0FBa0MsQ0FBQztJQUN2RixZQUFZLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFZLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEZlYXR1cmVNb3Rpb24sXHJcbiAgICBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSxcclxuICAgIEZlYXR1cmVXb3Jrc3BhY2UsXHJcbiAgICBXZnNXb3Jrc3BhY2VcclxufSBmcm9tICdAaWdvMi9nZW8nO1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVab29tQXV0byh3b3Jrc3BhY2U6IEZlYXR1cmVXb3Jrc3BhY2UgfCBXZnNXb3Jrc3BhY2UsIHN0b3JhZ2VTZXJ2aWNlKSB7XHJcbiAgICBjb25zdCB6b29tU3RyYXRlZ3kgPSB3b3Jrc3BhY2UuZW50aXR5U3RvcmVcclxuICAgICAgICAuZ2V0U3RyYXRlZ3lPZlR5cGUoRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3kpIGFzIEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5O1xyXG4gICAgem9vbVN0cmF0ZWd5LnNldE1vdGlvbihzdG9yYWdlU2VydmljZS5nZXQoJ3pvb21BdXRvJykgYXMgYm9vbGVhbiA/IEZlYXR1cmVNb3Rpb24uRGVmYXVsdCA6IEZlYXR1cmVNb3Rpb24uTm9uZSk7XHJcbn1cclxuXHJcblxyXG4iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvaW50ZWdyYXRpb24vc3JjL2xpYi93b3Jrc3BhY2Uvc2hhcmVkL3dvcmtzcGFjZS51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsYUFBYSxFQUNiLDZCQUE2QixFQUloQyxNQUFNLFdBQVcsQ0FBQztBQUduQixNQUFNLFVBQVUsY0FBYyxDQUFDLFNBQTZELEVBQUUsY0FBYztJQUN4RyxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsV0FBVztTQUNyQyxpQkFBaUIsQ0FBQyw2QkFBNkIsQ0FBa0MsQ0FBQztJQUN2RixZQUFZLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFZLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEZlYXR1cmVNb3Rpb24sXHJcbiAgICBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSxcclxuICAgIEZlYXR1cmVXb3Jrc3BhY2UsXHJcbiAgICBXZnNXb3Jrc3BhY2UsXHJcbiAgICBFZGl0aW9uV29ya3NwYWNlXHJcbn0gZnJvbSAnQGlnbzIvZ2VvJztcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlWm9vbUF1dG8od29ya3NwYWNlOiBGZWF0dXJlV29ya3NwYWNlIHwgV2ZzV29ya3NwYWNlIHwgRWRpdGlvbldvcmtzcGFjZSwgc3RvcmFnZVNlcnZpY2UpIHtcclxuICAgIGNvbnN0IHpvb21TdHJhdGVneSA9IHdvcmtzcGFjZS5lbnRpdHlTdG9yZVxyXG4gICAgICAgIC5nZXRTdHJhdGVneU9mVHlwZShGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSkgYXMgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3k7XHJcbiAgICB6b29tU3RyYXRlZ3kuc2V0TW90aW9uKHN0b3JhZ2VTZXJ2aWNlLmdldCgnem9vbUF1dG8nKSBhcyBib29sZWFuID8gRmVhdHVyZU1vdGlvbi5EZWZhdWx0IDogRmVhdHVyZU1vdGlvbi5Ob25lKTtcclxufVxyXG5cclxuXHJcbiJdfQ==