raain-app 1.4.6 → 1.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,14 @@
1
1
  import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
2
2
  import { ChartScaleColors, ElementsFactory, FrameContainer, MapLatLng, ScaleElementInput, TimeframeContainer, TimeframeContainers } from 'raain-ui';
3
3
  import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "@angular/forms";
6
- import * as i3 from "@ionic/angular";
4
+ import * as i1 from "../storage.service";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/forms";
7
+ import * as i4 from "@ionic/angular";
7
8
  export class RaainMapComponent {
8
- constructor(ngZone) {
9
+ constructor(ngZone, storage) {
9
10
  this.ngZone = ngZone;
11
+ this.storage = storage;
10
12
  this.autoplay = false;
11
13
  this.showMarkers = true;
12
14
  this.showCumulative = false;
@@ -97,6 +99,19 @@ export class RaainMapComponent {
97
99
  }
98
100
  this.updateTimeframe();
99
101
  }
102
+ changeAlpha() {
103
+ console.log('changeAlpha', this.alpha);
104
+ this.storage.set('map-alpha', this.alpha);
105
+ if (!this.mapElement || !this.mapElement.mapLeaflet) {
106
+ return;
107
+ }
108
+ this.mapElement.alpha = 0.3 + this.alpha * 0.7;
109
+ this.mapElement.mapLeaflet.eachLayer((layer) => {
110
+ if (layer._container?.style) {
111
+ layer._container.style.filter = `brightness(${(10 - this.alpha * 10) * 10}%)`; // invert(1) ?
112
+ }
113
+ });
114
+ }
100
115
  create() {
101
116
  const created = this.created;
102
117
  if (created) {
@@ -120,6 +135,7 @@ export class RaainMapComponent {
120
135
  return;
121
136
  }
122
137
  this.mapElement = factory.createMap(this.mapDivRef.nativeElement, { timeframeContainers: this.timeframeContainers, markers });
138
+ this.changeAlpha();
123
139
  this.mapElement.mapLeaflet?.on('mousemove', (evt) => this.onMapMouseMove(evt));
124
140
  this.mapElement.markersProduced?.forEach(m => m.on('click', evt => this.onMapClick(evt)));
125
141
  this.onSizeChanged = () => {
@@ -148,6 +164,7 @@ export class RaainMapComponent {
148
164
  };
149
165
  this.currentFrameContainer = null;
150
166
  this.created = false;
167
+ this.alpha = this.storage.get('map-alpha', 1);
151
168
  }
152
169
  change(changes) {
153
170
  let possibleNewDefaultDate;
@@ -300,6 +317,7 @@ export class RaainMapComponent {
300
317
  new TimeframeContainer(this.defaultDate.toISOString(), [this.currentFrameContainer], 'cumulative')
301
318
  ]));
302
319
  }
320
+ this.changeAlpha();
303
321
  }
304
322
  createScale(factory, label) {
305
323
  this.deleteScale();
@@ -319,12 +337,12 @@ export class RaainMapComponent {
319
337
  }
320
338
  }
321
339
  }
322
- RaainMapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainMapComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
323
- RaainMapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainMapComponent, selector: "raain-map", inputs: { coordinates: "coordinates", markers: "markers", timeframeContainers: "timeframeContainers", autoplay: "autoplay", showMarkers: "showMarkers", showCumulative: "showCumulative", currentHeight: "currentHeight", timeframeDates: "timeframeDates", defaultDate: "defaultDate", sumValues: "sumValues", sumFn: "sumFn" }, outputs: { selectedMarker: "selectedMarker", changedDate: "changedDate" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "mapDivRef", first: true, predicate: ["primaryMap"], descendants: true }, { propertyName: "scaleCanvasRef", first: true, predicate: ["canvasScale"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-xs=\"4\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-start\" id=\"map-date\" size-md=\"4\" size-xs=\"8\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col class=\"ion-hide-md-down\" size-xs=\"4\">\n <ion-button color=\"medium\" fill=\"clear\">\n Gauges\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-col>\n <!-- <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\n <ion-button color=\"medium\" fill=\"clear\">\n Cumulative\n <ion-toggle (ionChange)=\"changeCumulative()\" [(ngModel)]=\"showCumulative\" [checked]=\"showCumulative\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-col>-->\n </ion-row>\n\n <ion-row>\n <ion-col size-lg=\"10\" size-xs=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\" size-lg=\"2\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"100\">\n <canvas #canvasScale></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-hide-sm-down\" size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\" size-xs=\"12\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col class=\"ion-hide-sm-down\" size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative}#map-div{position:absolute;inset:0}ion-select{width:100%;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSelect, selector: "ion-select", inputs: ["cancelText", "compareWith", "disabled", "interface", "interfaceOptions", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "value"] }, { kind: "component", type: i3.IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: i3.IonToggle, selector: "ion-toggle", inputs: ["checked", "color", "disabled", "enableOnOffLabels", "mode", "name", "value"] }, { kind: "directive", type: i3.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i3.SelectValueAccessor, selector: "ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
340
+ RaainMapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainMapComponent, deps: [{ token: i0.NgZone }, { token: i1.Storage }], target: i0.ɵɵFactoryTarget.Component });
341
+ RaainMapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainMapComponent, selector: "raain-map", inputs: { coordinates: "coordinates", markers: "markers", timeframeContainers: "timeframeContainers", autoplay: "autoplay", showMarkers: "showMarkers", showCumulative: "showCumulative", currentHeight: "currentHeight", timeframeDates: "timeframeDates", defaultDate: "defaultDate", sumValues: "sumValues", sumFn: "sumFn" }, outputs: { selectedMarker: "selectedMarker", changedDate: "changedDate" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "mapDivRef", first: true, predicate: ["primaryMap"], descendants: true }, { propertyName: "scaleCanvasRef", first: true, predicate: ["canvasScale"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-xs=\"3\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-start\" id=\"map-date\" size-md=\"4\" size-xs=\"5\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\n <ion-button color=\"medium\" fill=\"clear\">\n Gauges\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\n <ion-range (ionChange)=\"changeAlpha()\" [(ngModel)]=\"alpha\" [max]=\"1\" [min]=\"0.2\" [snaps]=\"true\" [step]=\"0.2\"\n [ticks]=\"true\"\n color=\"medium\"></ion-range>\n </ion-col>\n\n <!-- <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\n <ion-button color=\"medium\" fill=\"clear\">\n Cumulative\n <ion-toggle (ionChange)=\"changeCumulative()\" [(ngModel)]=\"showCumulative\" [checked]=\"showCumulative\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-col>-->\n </ion-row>\n\n <ion-row>\n <ion-col size-lg=\"10\" size-xs=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\" size-lg=\"2\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"100\">\n <canvas #canvasScale></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-hide-sm-down\" size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\" size-xs=\"12\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col class=\"ion-hide-sm-down\" size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative}#map-div{position:absolute;inset:0}ion-select{width:100%;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}ion-range{padding:0 0 0 20px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i4.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonRange, selector: "ion-range", inputs: ["activeBarStart", "color", "debounce", "disabled", "dualKnobs", "max", "min", "mode", "name", "pin", "pinFormatter", "snaps", "step", "ticks", "value"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }, { kind: "component", type: i4.IonSelect, selector: "ion-select", inputs: ["cancelText", "compareWith", "disabled", "interface", "interfaceOptions", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "value"] }, { kind: "component", type: i4.IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: i4.IonToggle, selector: "ion-toggle", inputs: ["checked", "color", "disabled", "enableOnOffLabels", "mode", "name", "value"] }, { kind: "directive", type: i4.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i4.SelectValueAccessor, selector: "ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
324
342
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainMapComponent, decorators: [{
325
343
  type: Component,
326
- args: [{ selector: 'raain-map', template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-xs=\"4\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-start\" id=\"map-date\" size-md=\"4\" size-xs=\"8\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col class=\"ion-hide-md-down\" size-xs=\"4\">\n <ion-button color=\"medium\" fill=\"clear\">\n Gauges\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-col>\n <!-- <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\n <ion-button color=\"medium\" fill=\"clear\">\n Cumulative\n <ion-toggle (ionChange)=\"changeCumulative()\" [(ngModel)]=\"showCumulative\" [checked]=\"showCumulative\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-col>-->\n </ion-row>\n\n <ion-row>\n <ion-col size-lg=\"10\" size-xs=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\" size-lg=\"2\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"100\">\n <canvas #canvasScale></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-hide-sm-down\" size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\" size-xs=\"12\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col class=\"ion-hide-sm-down\" size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative}#map-div{position:absolute;inset:0}ion-select{width:100%;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}\n"] }]
327
- }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { coordinates: [{
344
+ args: [{ selector: 'raain-map', template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-xs=\"3\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-start\" id=\"map-date\" size-md=\"4\" size-xs=\"5\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\n <ion-button color=\"medium\" fill=\"clear\">\n Gauges\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\n <ion-range (ionChange)=\"changeAlpha()\" [(ngModel)]=\"alpha\" [max]=\"1\" [min]=\"0.2\" [snaps]=\"true\" [step]=\"0.2\"\n [ticks]=\"true\"\n color=\"medium\"></ion-range>\n </ion-col>\n\n <!-- <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\n <ion-button color=\"medium\" fill=\"clear\">\n Cumulative\n <ion-toggle (ionChange)=\"changeCumulative()\" [(ngModel)]=\"showCumulative\" [checked]=\"showCumulative\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-col>-->\n </ion-row>\n\n <ion-row>\n <ion-col size-lg=\"10\" size-xs=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\" size-lg=\"2\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"100\">\n <canvas #canvasScale></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-hide-sm-down\" size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\" size-xs=\"12\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col class=\"ion-hide-sm-down\" size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative}#map-div{position:absolute;inset:0}ion-select{width:100%;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}ion-range{padding:0 0 0 20px}\n"] }]
345
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.Storage }]; }, propDecorators: { coordinates: [{
328
346
  type: Input
329
347
  }], markers: [{
330
348
  type: Input
@@ -360,4 +378,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
360
378
  type: HostListener,
361
379
  args: ['window:resize', ['$event']]
362
380
  }] } });
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3JhYWluLW1hcC9yYWFpbi1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcmFhaW4tbWFwL3JhYWluLW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsY0FBYyxFQUVkLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNwQixNQUFNLFVBQVUsQ0FBQzs7Ozs7QUFPbEIsTUFBTSxPQUFPLGlCQUFpQjtJQXdFNUIsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUF4RDNCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFFbkIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFNdkIsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFXNUIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO1FBRy9DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQWlDNUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRWQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFDOUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQywrREFBK0Q7UUFDNUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0IsTUFBTSxXQUFXLEdBQUcs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c0JBRGpCLEtBQUs7Z0JBR0MsT0FBTztzQkFEYixLQUFLO2dCQVVDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFHQyxRQUFRO3NCQURkLEtBQUs7Z0JBR0MsV0FBVztzQkFEakIsS0FBSztnQkFHQyxjQUFjO3NCQURwQixLQUFLO2dCQUdDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBS0MsY0FBYztzQkFEcEIsS0FBSztnQkFHQyxXQUFXO3NCQURqQixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFHQyxLQUFLO3NCQURYLEtBQUs7Z0JBS0MsY0FBYztzQkFEcEIsTUFBTTtnQkFJQSxXQUFXO3NCQURqQixNQUFNO2dCQWNHLFNBQVM7c0JBRGxCLFNBQVM7dUJBQUMsWUFBWTtnQkFJYixjQUFjO3NCQUR2QixTQUFTO3VCQUFDLGFBQWE7Z0JBNFRoQixRQUFRO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJY29uT3B0aW9uc30gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQge1xuICBDYXJ0ZXNpYW5NYXBWYWx1ZSxcbiAgQ2hhcnRTY2FsZUNvbG9ycyxcbiAgRWxlbWVudHNGYWN0b3J5LFxuICBGcmFtZUNvbnRhaW5lcixcbiAgTWFwRWxlbWVudCxcbiAgTWFwTGF0TG5nLFxuICBTY2FsZUVsZW1lbnQsXG4gIFNjYWxlRWxlbWVudElucHV0LFxuICBUaW1lZnJhbWVDb250YWluZXIsXG4gIFRpbWVmcmFtZUNvbnRhaW5lcnNcbn0gZnJvbSAncmFhaW4tdWknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyYWFpbi1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFhaW4tbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFhaW4tbWFwLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFJhYWluTWFwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb29yZGluYXRlczogTWFwTGF0TG5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWFya2Vyczoge1xuICAgIGdhdWdlczogTWFwTGF0TG5nW10sXG4gICAgc2VsZWN0ZWRHYXVnZXM6IE1hcExhdExuZ1tdLFxuICAgIHBpeGVsczogTWFwTGF0TG5nW10sXG4gICAgYm9yZGVyczogTWFwTGF0TG5nW10sXG4gICAgZ2F1Z2VzSW5Db21wYXJlOiBNYXBMYXRMbmdbXSxcbiAgICBwaXhlbHNTb2x1dGlvbjogTWFwTGF0TG5nW10sXG4gIH07XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0aW1lZnJhbWVDb250YWluZXJzOiBUaW1lZnJhbWVDb250YWluZXJzO1xuICBASW5wdXQoKVxuICBwdWJsaWMgYXV0b3BsYXkgPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIHNob3dNYXJrZXJzID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgcHVibGljIHNob3dDdW11bGF0aXZlID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXJyZW50SGVpZ2h0OiBudW1iZXI7XG4gIHB1YmxpYyBjdXJyZW50V2lkdGg6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdGltZWZyYW1lRGF0ZXM6IERhdGVbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGVmYXVsdERhdGU6IERhdGU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHN1bVZhbHVlczogYW55O1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3VtRm46IGFueTtcbiAgcHVibGljIHN1bVJlc3VsdDogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRNYXJrZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE1hcExhdExuZz4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNoYW5nZWREYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gIHB1YmxpYyBtY1RleHQ7XG4gIHB1YmxpYyBuZXh0RGF0ZTogRGF0ZTtcbiAgcHVibGljIHBvc3NpYmxlTmFtZXM6IHN0cmluZ1tdO1xuICBwdWJsaWMgcG9zc2libGVEYXRlczogRGF0ZVtdO1xuICBwdWJsaWMgZGF0ZVRvU2hvdzogRGF0ZTtcbiAgcHVibGljIGRhdGVUb1Nob3dBc1N0cmluZzogc3RyaW5nO1xuICBwdWJsaWMgdGltZWZyYW1lTmFtZVRvU2hvdzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgY3VycmVudEZyYW1lQ29udGFpbmVyOiBGcmFtZUNvbnRhaW5lcjtcbiAgcHJvdGVjdGVkIGN1bXVsYXRpdmVUaW1lZnJhbWVDb250YWluZXJzOiBUaW1lZnJhbWVDb250YWluZXJzO1xuXG4gIEBWaWV3Q2hpbGQoJ3ByaW1hcnlNYXAnKVxuICBwcm90ZWN0ZWQgbWFwRGl2UmVmOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2NhbnZhc1NjYWxlJylcbiAgcHJvdGVjdGVkIHNjYWxlQ2FudmFzUmVmOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgbWFwRWxlbWVudDogTWFwRWxlbWVudDtcbiAgcHJpdmF0ZSBzY2FsZUVsZW1lbnQ6IFNjYWxlRWxlbWVudDtcblxuICBwcml2YXRlIG9uU2l6ZUNoYW5nZWQ7XG4gIHByaXZhdGUgY3JlYXRlZDtcbiAgcHJpdmF0ZSBpY29uT3B0aW9uczoge1xuICAgIGdhdWdlczogSWNvbk9wdGlvbnMsXG4gICAgc2VsZWN0ZWRHYXVnZXM6IEljb25PcHRpb25zLFxuICAgIHBpeGVsczogSWNvbk9wdGlvbnMsXG4gICAgYm9yZGVyczogSWNvbk9wdGlvbnMsXG4gICAgZ2F1Z2VzSW5Db21wYXJlOiBJY29uT3B0aW9ucyxcbiAgICBwaXhlbHNTb2x1dGlvbjogSWNvbk9wdGlvbnMsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMuZGVsZXRlKCk7XG5cbiAgICBjb25zdCBpY29uU2l6ZSA9IFs0MCwgNDBdOyAvLyBzaXplIG9mIHRoZSBpY29uXG4gICAgY29uc3QgaWNvbkFuY2hvciA9IFsyMCwgMjBdOyAvLyBwb2ludCBvZiB0aGUgaWNvbiB3aGljaCB3aWxsIGNvcnJlc3BvbmQgdG8gbWFya2VyJ3MgbG9jYXRpb25cbiAgICBjb25zdCBwaXhlbFNpemUgPSBbNDEsIDQxXTtcbiAgICBjb25zdCBwaXhlbEFuY2hvciA9IFsyMCwgMjBdO1xuICAgIGNvbnN0IHBvcHVwQW5jaG9yID0gWzAsIC0yMF07IC8vIHBvaW50IGZyb20gd2hpY2ggdGhlIHBvcHVwIHNob3VsZCBvcGVuIHJlbGF0aXZlIHRvIHRoZSBpY29uQW5jaG9yXG4gICAgdGhpcy5pY29uT3B0aW9ucyA9IHtcbiAgICAgIGdhdWdlczoge2ljb25Vcmw6ICcuL2Fzc2V0cy9tYXBzL21hcmtlci1wbHV2aW8ucG5nJywgaWNvblNpemUsIGljb25BbmNob3IsIHBvcHVwQW5jaG9yfSxcbiAgICAgIGdhdWdlc0luQ29tcGFyZToge2ljb25Vcmw6ICcuL2Fzc2V0cy9tYXBzL21hcmtlci1wbHV2aW8tZGlhZy5wbmcnLCBpY29uU2l6ZSwgaWNvbkFuY2hvciwgcG9wdXBBbmNob3J9LFxuICAgICAgc2VsZWN0ZWRHYXVnZXM6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcGx1dmlvLWRpYWctc2VsZWN0LnBuZycsIGljb25TaXplLCBpY29uQW5jaG9yLCBwb3B1cEFuY2hvcn0sXG4gICAgICBwaXhlbHM6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcmFpbi5wbmcnLCBpY29uU2l6ZSwgaWNvbkFuY2hvciwgcG9wdXBBbmNob3J9LFxuICAgICAgcGl4ZWxzU29sdXRpb246IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcmFpbjIucG5nJywgaWNvblNpemU6IHBpeGVsU2l6ZSwgaWNvbkFuY2hvcjogcGl4ZWxBbmNob3IsIHBvcHVwQW5jaG9yfSxcbiAgICAgIGJvcmRlcnM6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItc2hhZG93LnBuZycsIGljb25TaXplLCBpY29uQW5jaG9yLCBwb3B1cEFuY2hvcn0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2UoY2hhbmdlcyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93VGltZWZyYW1lKGZvcmNlID0gZmFsc2UpIHtcbiAgICBpZiAoIXRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nXG4gICAgICB8fCAoIWZvcmNlICYmIG5ldyBEYXRlKHRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nKS5nZXRUaW1lKCkgPT09IHRoaXMuZGF0ZVRvU2hvdz8uZ2V0VGltZSgpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGF0ZVRvU2hvdyA9IG5ldyBEYXRlKHRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nKTtcbiAgICB0aGlzLmNoYW5nZWREYXRlLmVtaXQodGhpcy5kYXRlVG9TaG93KTtcbiAgfVxuXG4gIHB1YmxpYyBuZXh0KCkge1xuICAgIGlmICghdGhpcy5wb3NzaWJsZURhdGVzIHx8IHRoaXMucG9zc2libGVEYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RGF0ZVRvU2hvd0luZGV4KCk7XG4gICAgdGhpcy5kYXRlVG9TaG93ID0gKGluZGV4ICsgMSkgPCB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoID8gdGhpcy5wb3NzaWJsZURhdGVzW2luZGV4ICsgMV0gOiB0aGlzLnBvc3NpYmxlRGF0ZXNbMF07XG4gICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB0aGlzLmRhdGVUb1Nob3cudG9JU09TdHJpbmcoKTtcblxuICAgIHRoaXMuc2hvd1RpbWVmcmFtZSh0cnVlKTtcbiAgICBpZiAodGhpcy5hdXRvcGxheSkge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy5uZXh0KCksIDIwMDApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcmV2aW91cygpIHtcbiAgICB0aGlzLnN0b3AoKTtcbiAgICBpZiAoIXRoaXMucG9zc2libGVEYXRlcyB8fCB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldERhdGVUb1Nob3dJbmRleCgpO1xuICAgIHRoaXMuZGF0ZVRvU2hvdyA9IGluZGV4ID4gMCA/IHRoaXMucG9zc2libGVEYXRlc1tpbmRleCAtIDFdIDogdGhpcy5wb3NzaWJsZURhdGVzWzBdO1xuICAgIHRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nID0gdGhpcy5kYXRlVG9TaG93LnRvSVNPU3RyaW5nKCk7XG5cbiAgICB0aGlzLnNob3dUaW1lZnJhbWUodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgcGxheSgpIHtcbiAgICB0aGlzLmF1dG9wbGF5ID0gdHJ1ZTtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wKCkge1xuICAgIHRoaXMuYXV0b3BsYXkgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VTaG93TWFya2VycygpIHtcbiAgICBpZiAoIXRoaXMubWFwRWxlbWVudD8ubWFya2Vyc0xheWVyIHx8ICF0aGlzLm1hcEVsZW1lbnQ/Lm1hcExlYWZsZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG93TWFya2Vycykge1xuICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5hZGRUb01hcCh0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIucmVtb3ZlRnJvbU1hcCh0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNoYW5nZUN1bXVsYXRpdmUoKSB7XG4gICAgaWYgKHRoaXMuc2hvd0N1bXVsYXRpdmUpIHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgRWxlbWVudHNGYWN0b3J5KHRoaXMuY29vcmRpbmF0ZXMsIHRydWUpO1xuICAgICAgdGhpcy5jcmVhdGVTY2FsZShmYWN0b3J5LCAnbW0nKTtcbiAgICAgIHRoaXMuY3VtdWxhdGl2ZVRpbWVmcmFtZUNvbnRhaW5lcnMgPSB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgRWxlbWVudHNGYWN0b3J5KHRoaXMuY29vcmRpbmF0ZXMsIHRydWUpO1xuICAgICAgdGhpcy5jcmVhdGVTY2FsZShmYWN0b3J5LCAnbW0vaCcpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGltZWZyYW1lKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZSgpIHtcblxuICAgIGNvbnN0IGNyZWF0ZWQgPSB0aGlzLmNyZWF0ZWQ7XG4gICAgaWYgKGNyZWF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVkID0gdHJ1ZTtcbiAgICBjb25zdCBtYXJrZXJzID0gW1xuICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuZ2F1Z2VzLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuZ2F1Z2VzfSxcbiAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuc2VsZWN0ZWRHYXVnZXN9LFxuICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuZ2F1Z2VzSW5Db21wYXJlLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuZ2F1Z2VzSW5Db21wYXJlfSxcbiAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnBpeGVscywgaWNvbnNPcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnBpeGVsc30sXG4gICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5waXhlbHNTb2x1dGlvbiwgaWNvbnNPcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnBpeGVsc1NvbHV0aW9ufSxcbiAgICAgIC8vIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLmJvcmRlcnMsIGljb25zT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5ib3JkZXJzfSxcbiAgICBdO1xuXG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBFbGVtZW50c0ZhY3RvcnkodGhpcy5jb29yZGluYXRlcywgdHJ1ZSk7XG4gICAgdGhpcy5jcmVhdGVTY2FsZShmYWN0b3J5LCAnbW0vaCcpO1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgY29uc3QgY3JlYXRlZE91dHNpZGUgPSB0aGlzLmNyZWF0ZWQ7XG4gICAgICAgIGlmICghY3JlYXRlZE91dHNpZGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1hcEVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZU1hcCh0aGlzLm1hcERpdlJlZi5uYXRpdmVFbGVtZW50LCB7dGltZWZyYW1lQ29udGFpbmVyczogdGhpcy50aW1lZnJhbWVDb250YWluZXJzLCBtYXJrZXJzfSk7XG5cbiAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQ/Lm9uKCdtb3VzZW1vdmUnLCAoZXZ0KSA9PiB0aGlzLm9uTWFwTW91c2VNb3ZlKGV2dCkpO1xuICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc1Byb2R1Y2VkPy5mb3JFYWNoKG0gPT4gbS5vbignY2xpY2snLCBldnQgPT4gdGhpcy5vbk1hcENsaWNrKGV2dCkpKTtcbiAgICAgICAgdGhpcy5vblNpemVDaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXI/LnNldEN1cnJlbnRXaWR0aCh0aGlzLmN1cnJlbnRXaWR0aCk7XG4gICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllcj8uc2V0Q3VycmVudEhlaWdodCh0aGlzLmN1cnJlbnRIZWlnaHQpO1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5jb21wb3NpdGVMYXllcj8uc2V0Q3VycmVudFdpZHRoKHRoaXMuY3VycmVudFdpZHRoKTtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQuY29tcG9zaXRlTGF5ZXI/LnNldEN1cnJlbnRIZWlnaHQodGhpcy5jdXJyZW50SGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldD8uaW52YWxpZGF0ZVNpemUoe2FuaW1hdGU6IHRydWV9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZU1hcFNpemUoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VOYXZpZ2F0aW9uKHRoaXMuZGVmYXVsdERhdGUpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcblxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGUoKSB7XG4gICAgdGhpcy5tYXBFbGVtZW50Py5tYXBMZWFmbGV0Py5yZW1vdmUoKTtcbiAgICB0aGlzLm1hcEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tY1RleHQgPSAnJztcbiAgICB0aGlzLm5leHREYXRlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9zc2libGVOYW1lcyA9IFtdO1xuICAgIHRoaXMucG9zc2libGVEYXRlcyA9IFtdO1xuICAgIHRoaXMudGltZWZyYW1lTmFtZVRvU2hvdyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRhdGVUb1Nob3cgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vblNpemVDaGFuZ2VkID0gKCkgPT4ge1xuICAgIH07XG4gICAgdGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIgPSBudWxsO1xuXG4gICAgdGhpcy5jcmVhdGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgbGV0IHBvc3NpYmxlTmV3RGVmYXVsdERhdGU6IERhdGU7XG4gICAgaWYgKGNoYW5nZXMuZGVmYXVsdERhdGUpIHtcbiAgICAgIGlmIChuZXcgRGF0ZShjaGFuZ2VzLmRlZmF1bHREYXRlLmN1cnJlbnRWYWx1ZSkuZ2V0VGltZSgpID09PSBuZXcgRGF0ZShjaGFuZ2VzLmRlZmF1bHREYXRlLnByZXZpb3VzVmFsdWUpLmdldFRpbWUoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwb3NzaWJsZU5ld0RlZmF1bHREYXRlID0gdGhpcy5kZWZhdWx0RGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5tYXJrZXJzICYmIHRoaXMubWFwRWxlbWVudD8ubWFya2Vyc0xheWVyKSB7XG5cbiAgICAgIGNvbnN0IG1hcmtlcnMgPSBbXG4gICAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLmdhdWdlcywgaWNvbk9wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuZ2F1Z2VzfSxcbiAgICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuc2VsZWN0ZWRHYXVnZXMsIGljb25PcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnNlbGVjdGVkR2F1Z2VzfSxcbiAgICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuZ2F1Z2VzSW5Db21wYXJlLCBpY29uT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5nYXVnZXNJbkNvbXBhcmV9LFxuICAgICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5waXhlbHMsIGljb25PcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnBpeGVsc30sXG4gICAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnBpeGVsc1NvbHV0aW9uLCBpY29uT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5waXhlbHNTb2x1dGlvbn0sXG4gICAgICAgIC8vICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5ib3JkZXJzLCBpY29uT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5ib3JkZXJzfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBtYXJrZXJzUHJvZHVjZWQgPSB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLnJlbmRlcihtYXJrZXJzKS5tYXJrZXJzO1xuICAgICAgaWYgKG1hcmtlcnNQcm9kdWNlZCkge1xuICAgICAgICBtYXJrZXJzUHJvZHVjZWQuZm9yRWFjaChtID0+IG0ub24oJ2NsaWNrJywgZXZ0ID0+IHRoaXMub25NYXBDbGljayhldnQpKSk7XG4gICAgICAgIGlmICh0aGlzLnNob3dNYXJrZXJzKSB7XG4gICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5yZW1vdmVGcm9tTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLmFkZFRvTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLm1hcmtlcnMgJiYgdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRHYXVnZSA9IHRoaXMubWFya2Vycy5zZWxlY3RlZEdhdWdlc1swXTtcbiAgICAgIHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0LnNldFZpZXcoc2VsZWN0ZWRHYXVnZSwgMTApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1hcEVsZW1lbnQgJiYgY2hhbmdlcy50aW1lZnJhbWVDb250YWluZXJzKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRpbWVmcmFtZSgpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFwRWxlbWVudD8uY29tcG9zaXRlTGF5ZXIgJiYgY2hhbmdlcy5zdW1WYWx1ZXMpIHtcbiAgICAgIGNvbnN0IGRyYXdlciA9IHRoaXMubWFwRWxlbWVudC5jb21wb3NpdGVMYXllci5nZXRGaXJzdERyYXdlcigpO1xuICAgICAgdGhpcy5zdW1SZXN1bHQgPSBkcmF3ZXI/LmdldEV4ZWNPZlZpc2libGVQb2ludHModGhpcy5zdW1WYWx1ZXMsIHRoaXMuc3VtRm4pO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlTmF2aWdhdGlvbihwb3NzaWJsZU5ld0RlZmF1bHREYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlTmF2aWdhdGlvbihkZWZhdWx0RGF0ZT86IERhdGUpIHtcbiAgICAvLyB1cGRhdGUgcG9zc2libGUgbmFtZXNcbiAgICBpZiAodGhpcy50aW1lZnJhbWVDb250YWluZXJzICYmIHRoaXMudGltZWZyYW1lQ29udGFpbmVycy5jb250YWluZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5wb3NzaWJsZU5hbWVzID0gW107XG4gICAgICB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnM/LmNvbnRhaW5lcnMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgaWYgKHRoaXMucG9zc2libGVOYW1lcy5pbmRleE9mKGMubmFtZSkgPCAwKSB7XG4gICAgICAgICAgdGhpcy5wb3NzaWJsZU5hbWVzLnB1c2goYy5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnRpbWVmcmFtZU5hbWVUb1Nob3cgPSB0aGlzLnBvc3NpYmxlTmFtZXMubGVuZ3RoID4gMCA/IHRoaXMucG9zc2libGVOYW1lc1swXSA6IG51bGw7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHBvc3NpYmxlIGRhdGVzXG4gICAgdGhpcy5wb3NzaWJsZURhdGVzID0gdGhpcy50aW1lZnJhbWVEYXRlcztcbiAgICBpZiAoIXRoaXMucG9zc2libGVEYXRlcyB8fCB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGRhdGVUb1Nob3dcbiAgICBpZiAoZGVmYXVsdERhdGUgJiYgdGhpcy5wb3NzaWJsZURhdGVzLmZpbHRlcihkID0+IGQuZ2V0VGltZSgpID09PSBkZWZhdWx0RGF0ZS5nZXRUaW1lKCkpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5kYXRlVG9TaG93ID0gZGVmYXVsdERhdGU7XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRlVG9TaG93ICYmIHRoaXMucG9zc2libGVEYXRlcy5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLnBvc3NpYmxlRGF0ZXMuZmlsdGVyKGQgPT4gZC5nZXRUaW1lKCkgPT09IHRoaXMuZGF0ZVRvU2hvdz8uZ2V0VGltZSgpKS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRoaXMuZGF0ZVRvU2hvdyA9IHRoaXMucG9zc2libGVEYXRlc1swXTtcbiAgICB9XG4gICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB0aGlzLmRhdGVUb1Nob3cudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVRvU2hvd0luZGV4KCk6IG51bWJlciB7XG5cbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgZGF0ZSBvZiB0aGlzLnBvc3NpYmxlRGF0ZXMpIHtcbiAgICAgIGlmIChkYXRlLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDE5KSA9PT0gdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcuc3Vic3RyaW5nKDAsIDE5KSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHByaXZhdGUgb25NYXBNb3VzZU1vdmUoZXZ0OiB7IGxhdGxuZzogeyBsYXQ6IG51bWJlciwgbG5nOiBudW1iZXIgfSB9KTogdm9pZCB7XG5cbiAgICBjb25zdCBsYXQ6IHN0cmluZyA9IGV2dC5sYXRsbmcubGF0LnRvRml4ZWQoMyk7XG4gICAgY29uc3QgbG5nOiBzdHJpbmcgPSBldnQubGF0bG5nLmxuZy50b0ZpeGVkKDMpO1xuXG4gICAgbGV0IHZhbHVlID0gTmFOO1xuICAgIGxldCB2YWx1ZUxhdCA9IE5hTiwgdmFsdWVMbmcgPSBOYU4sIHZhbHVlTGF0MiA9IE5hTiwgdmFsdWVMbmcyID0gTmFOO1xuICAgIGlmICh0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lcikge1xuICAgICAgY29uc3QgdmFsdWVTZWxlY3RlZCA9ICh0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lci52YWx1ZXMgYXMgQ2FydGVzaWFuTWFwVmFsdWVbXSlcbiAgICAgICAgLmZpbHRlcigodjogQ2FydGVzaWFuTWFwVmFsdWUpID0+IHtcbiAgICAgICAgICByZXR1cm4gdi5sYXQgPD0gZXZ0LmxhdGxuZy5sYXQgJiYgZXZ0LmxhdGxuZy5sYXQgPCB2LmxhdDIgJiZcbiAgICAgICAgICAgIHYubG5nIDw9IGV2dC5sYXRsbmcubG5nICYmIGV2dC5sYXRsbmcubG5nIDwgdi5sbmcyO1xuICAgICAgICB9KTtcblxuICAgICAgaWYgKHZhbHVlU2VsZWN0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLnZhbHVlICogMTAwMCkgLyAxMDAwO1xuICAgICAgICB2YWx1ZUxhdCA9IE1hdGgucm91bmQodmFsdWVTZWxlY3RlZFswXS5sYXQgKiAxMDAwKSAvIDEwMDA7XG4gICAgICAgIHZhbHVlTG5nID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLmxuZyAqIDEwMDApIC8gMTAwMDtcbiAgICAgICAgdmFsdWVMYXQyID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLmxhdDIgKiAxMDAwKSAvIDEwMDA7XG4gICAgICAgIHZhbHVlTG5nMiA9IE1hdGgucm91bmQodmFsdWVTZWxlY3RlZFswXS5sbmcyICogMTAwMCkgLyAxMDAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY29uc29sZS53YXJuKCd2YWx1ZVNlbGVjdGVkIGlzc3VlID8nLCB2YWx1ZVNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgLy8gdGhpcy5tY1RleHQgPSBgTGF0aXR1ZGU6ICR7bGF0fSAmbmJzcDsgJm5ic3A7IExvbmdpdHVkZTogJHtsbmd9ICZuYnNwOyAmbmJzcDtcbiAgICAgIC8vICAgIFZhbHVlOiBbJHt2YWx1ZUxhdH0gJHt2YWx1ZUxuZ30gfCAke3ZhbHVlTGF0Mn0gJHt2YWx1ZUxuZzJ9XSAke3ZhbHVlfWA7XG4gICAgICB0aGlzLm1jVGV4dCA9IGBMYXRpdHVkZTogJHtsYXR9ICZuYnNwOyAmbmJzcDsgTG9uZ2l0dWRlOiAke2xuZ30gJm5ic3A7ICZuYnNwOyBWYWx1ZTogJHt2YWx1ZX1gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1hcENsaWNrKGV2dDogYW55KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBnYXVnZSBvZiB0aGlzLm1hcmtlcnMuZ2F1Z2VzKSB7XG4gICAgICBpZiAoZ2F1Z2UuaWQgPT09IGV2dD8udGFyZ2V0Py5vcHRpb25zPy5hbHQpIHtcbiAgICAgICAgdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzID0gW2dhdWdlXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZE1hcmtlci5lbWl0KG5ldyBNYXBMYXRMbmcoXG4gICAgICBldnQubGF0bG5nPy5sYXQsIGV2dC5sYXRsbmc/LmxuZywgdW5kZWZpbmVkLFxuICAgICAgZXZ0LmlkLCBldnQubmFtZSkpO1xuXG4gICAgdGhpcy5jaGFuZ2Uoe21hcmtlcnM6IFsnY2hhbmdlZCddfSBhcyBhbnkpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgb25SZXNpemUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTWFwU2l6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXBTaXplKCk6IHZvaWQge1xuXG4gICAgY29uc3QgbWFwRGl2V2lkdGggPSB0aGlzLm1hcERpdlJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU/LnBhcmVudE5vZGVbJ2NsaWVudFdpZHRoJ107XG4gICAgY29uc3QgcGFkZGluZyA9IDIxO1xuICAgIGxldCBjdXJyZW50V2lkdGggPSBtYXBEaXZXaWR0aCB8fFxuICAgICAgKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKTtcbiAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gdGhpcy5jdXJyZW50SGVpZ2h0IHx8XG4gICAgICAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQpO1xuICAgIGN1cnJlbnRXaWR0aCAtPSBwYWRkaW5nO1xuICAgIHRoaXMuY3VycmVudFdpZHRoID0gY3VycmVudFdpZHRoO1xuICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5vblNpemVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRpbWVmcmFtZSgpIHtcblxuICAgIGlmICghdGhpcy5zaG93Q3VtdWxhdGl2ZSkge1xuXG4gICAgICB0aGlzLm1hcEVsZW1lbnQudXBkYXRlTWFwVGltZWZyYW1lKHRoaXMudGltZWZyYW1lQ29udGFpbmVycyk7XG4gICAgICB0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lciA9IHRoaXMudGltZWZyYW1lQ29udGFpbmVycz8uY29udGFpbmVyc1swXT8udGltZWZyYW1lWzBdO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnMuY29udGFpbmVyc1swXT8udGltZWZyYW1lKSB7XG5cbiAgICAgIGZvciAoY29uc3QgY29udGFpbmVyIG9mIHRoaXMudGltZWZyYW1lQ29udGFpbmVycy5jb250YWluZXJzWzBdLnRpbWVmcmFtZSkge1xuICAgICAgICBjb25zdCBhbHJlYWR5RXhpc3QgPSB0aGlzLmN1bXVsYXRpdmVUaW1lZnJhbWVDb250YWluZXJzLmNvbnRhaW5lcnNbMF0udGltZWZyYW1lXG4gICAgICAgICAgLmZpbHRlcihjID0+IG5ldyBEYXRlKGMuZGF0ZSkuZ2V0VGltZSgpID09PSBuZXcgRGF0ZShjb250YWluZXIuZGF0ZSkuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKGFscmVhZHlFeGlzdC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgdGhpcy5jdW11bGF0aXZlVGltZWZyYW1lQ29udGFpbmVycy5jb250YWluZXJzWzBdLnRpbWVmcmFtZS5wdXNoKGNvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgJ2NhcnRlc2lhbk1hcFZhbHVlczogY29tcHV0aW5nLi4uJyk7XG4gICAgICBjb25zdCBjYXJ0ZXNpYW5NYXBWYWx1ZXMgPSB0aGlzLmN1bXVsYXRpdmVUaW1lZnJhbWVDb250YWluZXJzLmdldEN1bXVsYXRpdmVDYXJ0ZXNpYW5WYWx1ZXMoKTtcbiAgICAgIGNvbnNvbGUubG9nKG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgJ2NhcnRlc2lhbk1hcFZhbHVlczonLCBjYXJ0ZXNpYW5NYXBWYWx1ZXMubGVuZ3RoKTtcbiAgICAgIHRoaXMuY3VycmVudEZyYW1lQ29udGFpbmVyID0gbmV3IEZyYW1lQ29udGFpbmVyKHRoaXMuZGVmYXVsdERhdGUsIGNhcnRlc2lhbk1hcFZhbHVlcywgZmFsc2UsIHRydWUpO1xuXG4gICAgICB0aGlzLm1hcEVsZW1lbnQudXBkYXRlTWFwVGltZWZyYW1lKFxuICAgICAgICBuZXcgVGltZWZyYW1lQ29udGFpbmVycyhbXG4gICAgICAgICAgbmV3IFRpbWVmcmFtZUNvbnRhaW5lcih0aGlzLmRlZmF1bHREYXRlLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICBbdGhpcy5jdXJyZW50RnJhbWVDb250YWluZXJdLFxuICAgICAgICAgICAgJ2N1bXVsYXRpdmUnKVxuICAgICAgICBdKSk7XG5cbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2NhbGUoZmFjdG9yeTogRWxlbWVudHNGYWN0b3J5LCBsYWJlbDogc3RyaW5nKSB7XG4gICAgdGhpcy5kZWxldGVTY2FsZSgpO1xuXG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKENoYXJ0U2NhbGVDb2xvcnMpO1xuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gcGFyc2VGbG9hdChhWzBdKSAtIHBhcnNlRmxvYXQoYlswXSkpO1xuICAgIGNvbnN0IHNvcnRlZE1hcCA9IG5ldyBNYXAoZW50cmllcyk7XG4gICAgY29uc3Qgc29ydGVkQXJyYXkgPSBbLi4uc29ydGVkTWFwLmVudHJpZXMoKV07XG4gICAgY29uc3Qgc2NhbGVDb2xvcnMgPSBzb3J0ZWRBcnJheS5tYXAoZW50cnkgPT4ge1xuICAgICAgcmV0dXJuIHtjb2xvcjogZW50cnlbMV19XG4gICAgfSk7XG4gICAgY29uc3Qgc2NhbGVMYWJlbHMgPSBzb3J0ZWRBcnJheS5tYXAoZW50cnkgPT4gZW50cnlbMF0pO1xuICAgIHRoaXMuc2NhbGVFbGVtZW50ID0gZmFjdG9yeS5jcmVhdGVTY2FsZSh0aGlzLnNjYWxlQ2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBuZXcgU2NhbGVFbGVtZW50SW5wdXQoc2NhbGVDb2xvcnMsIHNjYWxlTGFiZWxzLCBsYWJlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTY2FsZSgpIHtcbiAgICBpZiAodGhpcy5zY2FsZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc2NhbGVFbGVtZW50Py5jaGFydD8uZGVzdHJveSgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGlvbi1ncmlkPlxuXG4gIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWVuZFwiPlxuICAgIDxpb24tY29sIGlkPVwibWFwLWJ1dHRvbnNcIiBzaXplLXhzPVwiNFwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInByZXZpb3VzKClcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJvdXRsaW5lXCIgc2hhcGU9XCJyb3VuZFwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInBsYXktYmFja1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInN0b3AoKVwiIFtoaWRkZW5dPVwiIWF1dG9wbGF5XCIgY29sb3I9XCJtZWRpdW1cIiBmaWxsPVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwic3RvcFwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIm5leHQoKVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cIm91dGxpbmVcIiBzaGFwZT1cInJvdW5kXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwicGxheS1mb3J3YXJkXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtc3RhcnRcIiBpZD1cIm1hcC1kYXRlXCIgc2l6ZS1tZD1cIjRcIiBzaXplLXhzPVwiOFwiPlxuICAgICAgPGlvbi1zZWxlY3QgKGlvbkRpc21pc3MpPVwic2hvd1RpbWVmcmFtZSgpXCIgWyhuZ01vZGVsKV09XCJkYXRlVG9TaG93QXNTdHJpbmdcIiBpbnRlcmZhY2U9XCJwb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVyaW9kXCIgdmFsdWU9XCJ7e2RhdGVUb1Nob3dBc1N0cmluZ319XCI+XG4gICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZGF0ZVRvU2VsZWN0IG9mIHBvc3NpYmxlRGF0ZXNcIiB2YWx1ZT1cInt7ZGF0ZVRvU2VsZWN0LnRvSVNPU3RyaW5nKCl9fVwiPlxuICAgICAgICAgIHt7IGRhdGVUb1NlbGVjdCB8IGRhdGU6J3l5eXktTU0tZGQgSEg6bW0nIH19XG4gICAgICAgIDwvaW9uLXNlbGVjdC1vcHRpb24+XG4gICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLWhpZGUtbWQtZG93blwiIHNpemUteHM9XCI0XCI+XG4gICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJjbGVhclwiPlxuICAgICAgICBHYXVnZXNcbiAgICAgICAgPGlvbi10b2dnbGUgKGlvbkNoYW5nZSk9XCJjaGFuZ2VTaG93TWFya2VycygpXCIgWyhuZ01vZGVsKV09XCJzaG93TWFya2Vyc1wiIFtjaGVja2VkXT1cInNob3dNYXJrZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJtZWRpdW1cIj48L2lvbi10b2dnbGU+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuICAgIDwhLS0gPGlvbi1jb2wgY2xhc3M9XCJpb24taGlkZS1tZC1kb3duXCIgc2l6ZS14cz1cIjJcIj5cbiAgICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJjbGVhclwiPlxuICAgICAgICAgQ3VtdWxhdGl2ZVxuICAgICAgICAgPGlvbi10b2dnbGUgKGlvbkNoYW5nZSk9XCJjaGFuZ2VDdW11bGF0aXZlKClcIiBbKG5nTW9kZWwpXT1cInNob3dDdW11bGF0aXZlXCIgW2NoZWNrZWRdPVwic2hvd0N1bXVsYXRpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJtZWRpdW1cIj48L2lvbi10b2dnbGU+XG4gICAgICAgPC9pb24tYnV0dG9uPlxuICAgICA8L2lvbi1jb2w+LS0+XG4gIDwvaW9uLXJvdz5cblxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBzaXplLWxnPVwiMTBcIiBzaXplLXhzPVwiMTJcIj5cbiAgICAgIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJjdXJyZW50SGVpZ2h0XCIgaWQ9XCJtYXAtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgI3ByaW1hcnlNYXAgaWQ9XCJtYXAtZGl2XCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJpb24taGlkZS14bC1kb3duXCIgc2l6ZS1sZz1cIjJcIj5cbiAgICAgIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJjdXJyZW50SGVpZ2h0XCIgW3N0eWxlLndpZHRoLnB4XT1cIjEwMFwiPlxuICAgICAgICA8Y2FudmFzICNjYW52YXNTY2FsZT48L2NhbnZhcz5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLWhpZGUtc20tZG93blwiIHNpemUtc209XCI4XCI+XG4gICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIm1jVGV4dFwiPjwvc3Bhbj5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgc2l6ZS1zbT1cIjFcIiBzaXplLXhzPVwiMTJcIj5cbiAgICAgIDxpb24tYnV0dG9uIGRpc2FibGVkPVwidHJ1ZVwiIGZpbGw9XCJjbGVhclwiPnt7IHN1bVJlc3VsdCB9fTwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJpb24taGlkZS1zbS1kb3duXCIgc2l6ZS1zbT1cIjNcIj5cbiAgICAgIDxpb24tYnV0dG9uIGRpc2FibGVkPVwidHJ1ZVwiIGZpbGw9XCJjbGVhclwiPnt7IGRhdGVUb1Nob3c/LnRvSVNPU3RyaW5nKCkgfX08L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbjwvaW9uLWdyaWQ+XG4iXX0=
381
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3JhYWluLW1hcC9yYWFpbi1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcmFhaW4tbWFwL3JhYWluLW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsY0FBYyxFQUVkLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNwQixNQUFNLFVBQVUsQ0FBQzs7Ozs7O0FBUWxCLE1BQU0sT0FBTyxpQkFBaUI7SUEwRTVCLFlBQW9CLE1BQWMsRUFDZCxPQUFnQjtRQURoQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQTNEN0IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUVuQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQU12QixtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQVk1QixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFHL0MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBbUM1QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFZCxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUM5QyxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtEQUErRDtRQUM1RixNQUFNLFNBQVMsR0FBRyxDQUFDLEVBQUUsRUFB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QixLQUFLO2dCQUtDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBR0MsV0FBVztzQkFEakIsS0FBSztnQkFJQyxTQUFTO3NCQURmLEtBQUs7Z0JBR0MsS0FBSztzQkFEWCxLQUFLO2dCQU1DLGNBQWM7c0JBRHBCLE1BQU07Z0JBSUEsV0FBVztzQkFEakIsTUFBTTtnQkFlRyxTQUFTO3NCQURsQixTQUFTO3VCQUFDLFlBQVk7Z0JBSWIsY0FBYztzQkFEdkIsU0FBUzt1QkFBQyxhQUFhO2dCQWlWaEIsUUFBUTtzQkFEZixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SWNvbk9wdGlvbnN9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHtcbiAgQ2FydGVzaWFuTWFwVmFsdWUsXG4gIENoYXJ0U2NhbGVDb2xvcnMsXG4gIEVsZW1lbnRzRmFjdG9yeSxcbiAgRnJhbWVDb250YWluZXIsXG4gIE1hcEVsZW1lbnQsXG4gIE1hcExhdExuZyxcbiAgU2NhbGVFbGVtZW50LFxuICBTY2FsZUVsZW1lbnRJbnB1dCxcbiAgVGltZWZyYW1lQ29udGFpbmVyLFxuICBUaW1lZnJhbWVDb250YWluZXJzXG59IGZyb20gJ3JhYWluLXVpJztcbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnLi4vc3RvcmFnZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmFhaW4tbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhYWluLW1hcC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhYWluLW1hcC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSYWFpbk1hcENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29vcmRpbmF0ZXM6IE1hcExhdExuZztcbiAgQElucHV0KClcbiAgcHVibGljIG1hcmtlcnM6IHtcbiAgICBnYXVnZXM6IE1hcExhdExuZ1tdLFxuICAgIHNlbGVjdGVkR2F1Z2VzOiBNYXBMYXRMbmdbXSxcbiAgICBwaXhlbHM6IE1hcExhdExuZ1tdLFxuICAgIGJvcmRlcnM6IE1hcExhdExuZ1tdLFxuICAgIGdhdWdlc0luQ29tcGFyZTogTWFwTGF0TG5nW10sXG4gICAgcGl4ZWxzU29sdXRpb246IE1hcExhdExuZ1tdLFxuICB9O1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGltZWZyYW1lQ29udGFpbmVyczogVGltZWZyYW1lQ29udGFpbmVycztcbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9wbGF5ID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93TWFya2VycyA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93Q3VtdWxhdGl2ZSA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgY3VycmVudEhlaWdodDogbnVtYmVyO1xuICBwdWJsaWMgY3VycmVudFdpZHRoOiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRpbWVmcmFtZURhdGVzOiBEYXRlW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGRlZmF1bHREYXRlOiBEYXRlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdW1WYWx1ZXM6IGFueTtcbiAgQElucHV0KClcbiAgcHVibGljIHN1bUZuOiBhbnk7XG4gIHB1YmxpYyBzdW1SZXN1bHQ6IHN0cmluZztcblxuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRNYXJrZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE1hcExhdExuZz4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNoYW5nZWREYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gIHB1YmxpYyBhbHBoYTogbnVtYmVyO1xuICBwdWJsaWMgbWNUZXh0O1xuICBwdWJsaWMgbmV4dERhdGU6IERhdGU7XG4gIHB1YmxpYyBwb3NzaWJsZU5hbWVzOiBzdHJpbmdbXTtcbiAgcHVibGljIHBvc3NpYmxlRGF0ZXM6IERhdGVbXTtcbiAgcHVibGljIGRhdGVUb1Nob3c6IERhdGU7XG4gIHB1YmxpYyBkYXRlVG9TaG93QXNTdHJpbmc6IHN0cmluZztcbiAgcHVibGljIHRpbWVmcmFtZU5hbWVUb1Nob3c6IHN0cmluZztcbiAgcHJvdGVjdGVkIGN1cnJlbnRGcmFtZUNvbnRhaW5lcjogRnJhbWVDb250YWluZXI7XG4gIHByb3RlY3RlZCBjdW11bGF0aXZlVGltZWZyYW1lQ29udGFpbmVyczogVGltZWZyYW1lQ29udGFpbmVycztcblxuICBAVmlld0NoaWxkKCdwcmltYXJ5TWFwJylcbiAgcHJvdGVjdGVkIG1hcERpdlJlZjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdjYW52YXNTY2FsZScpXG4gIHByb3RlY3RlZCBzY2FsZUNhbnZhc1JlZjogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIG1hcEVsZW1lbnQ6IE1hcEVsZW1lbnQ7XG4gIHByaXZhdGUgc2NhbGVFbGVtZW50OiBTY2FsZUVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSBvblNpemVDaGFuZ2VkO1xuICBwcml2YXRlIGNyZWF0ZWQ7XG4gIHByaXZhdGUgaWNvbk9wdGlvbnM6IHtcbiAgICBnYXVnZXM6IEljb25PcHRpb25zLFxuICAgIHNlbGVjdGVkR2F1Z2VzOiBJY29uT3B0aW9ucyxcbiAgICBwaXhlbHM6IEljb25PcHRpb25zLFxuICAgIGJvcmRlcnM6IEljb25PcHRpb25zLFxuICAgIGdhdWdlc0luQ29tcGFyZTogSWNvbk9wdGlvbnMsXG4gICAgcGl4ZWxzU29sdXRpb246IEljb25PcHRpb25zLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgICAgICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSwpIHtcbiAgICB0aGlzLmRlbGV0ZSgpO1xuXG4gICAgY29uc3QgaWNvblNpemUgPSBbNDAsIDQwXTsgLy8gc2l6ZSBvZiB0aGUgaWNvblxuICAgIGNvbnN0IGljb25BbmNob3IgPSBbMjAsIDIwXTsgLy8gcG9pbnQgb2YgdGhlIGljb24gd2hpY2ggd2lsbCBjb3JyZXNwb25kIHRvIG1hcmtlcidzIGxvY2F0aW9uXG4gICAgY29uc3QgcGl4ZWxTaXplID0gWzQxLCA0MV07XG4gICAgY29uc3QgcGl4ZWxBbmNob3IgPSBbMjAsIDIwXTtcbiAgICBjb25zdCBwb3B1cEFuY2hvciA9IFswLCAtMjBdOyAvLyBwb2ludCBmcm9tIHdoaWNoIHRoZSBwb3B1cCBzaG91bGQgb3BlbiByZWxhdGl2ZSB0byB0aGUgaWNvbkFuY2hvclxuICAgIHRoaXMuaWNvbk9wdGlvbnMgPSB7XG4gICAgICBnYXVnZXM6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcGx1dmlvLnBuZycsIGljb25TaXplLCBpY29uQW5jaG9yLCBwb3B1cEFuY2hvcn0sXG4gICAgICBnYXVnZXNJbkNvbXBhcmU6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcGx1dmlvLWRpYWcucG5nJywgaWNvblNpemUsIGljb25BbmNob3IsIHBvcHVwQW5jaG9yfSxcbiAgICAgIHNlbGVjdGVkR2F1Z2VzOiB7aWNvblVybDogJy4vYXNzZXRzL21hcHMvbWFya2VyLXBsdXZpby1kaWFnLXNlbGVjdC5wbmcnLCBpY29uU2l6ZSwgaWNvbkFuY2hvciwgcG9wdXBBbmNob3J9LFxuICAgICAgcGl4ZWxzOiB7aWNvblVybDogJy4vYXNzZXRzL21hcHMvbWFya2VyLXJhaW4ucG5nJywgaWNvblNpemUsIGljb25BbmNob3IsIHBvcHVwQW5jaG9yfSxcbiAgICAgIHBpeGVsc1NvbHV0aW9uOiB7aWNvblVybDogJy4vYXNzZXRzL21hcHMvbWFya2VyLXJhaW4yLnBuZycsIGljb25TaXplOiBwaXhlbFNpemUsIGljb25BbmNob3I6IHBpeGVsQW5jaG9yLCBwb3B1cEFuY2hvcn0sXG4gICAgICBib3JkZXJzOiB7aWNvblVybDogJy4vYXNzZXRzL21hcHMvbWFya2VyLXNoYWRvdy5wbmcnLCBpY29uU2l6ZSwgaWNvbkFuY2hvciwgcG9wdXBBbmNob3J9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlKGNoYW5nZXMpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2hvd1RpbWVmcmFtZShmb3JjZSA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLmRhdGVUb1Nob3dBc1N0cmluZ1xuICAgICAgfHwgKCFmb3JjZSAmJiBuZXcgRGF0ZSh0aGlzLmRhdGVUb1Nob3dBc1N0cmluZykuZ2V0VGltZSgpID09PSB0aGlzLmRhdGVUb1Nob3c/LmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGVUb1Nob3cgPSBuZXcgRGF0ZSh0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyk7XG4gICAgdGhpcy5jaGFuZ2VkRGF0ZS5lbWl0KHRoaXMuZGF0ZVRvU2hvdyk7XG4gIH1cblxuICBwdWJsaWMgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucG9zc2libGVEYXRlcyB8fCB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldERhdGVUb1Nob3dJbmRleCgpO1xuICAgIHRoaXMuZGF0ZVRvU2hvdyA9IChpbmRleCArIDEpIDwgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA/IHRoaXMucG9zc2libGVEYXRlc1tpbmRleCArIDFdIDogdGhpcy5wb3NzaWJsZURhdGVzWzBdO1xuICAgIHRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nID0gdGhpcy5kYXRlVG9TaG93LnRvSVNPU3RyaW5nKCk7XG5cbiAgICB0aGlzLnNob3dUaW1lZnJhbWUodHJ1ZSk7XG4gICAgaWYgKHRoaXMuYXV0b3BsYXkpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMubmV4dCgpLCAyMDAwKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJldmlvdXMoKSB7XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgaWYgKCF0aGlzLnBvc3NpYmxlRGF0ZXMgfHwgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXREYXRlVG9TaG93SW5kZXgoKTtcbiAgICB0aGlzLmRhdGVUb1Nob3cgPSBpbmRleCA+IDAgPyB0aGlzLnBvc3NpYmxlRGF0ZXNbaW5kZXggLSAxXSA6IHRoaXMucG9zc2libGVEYXRlc1swXTtcbiAgICB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyA9IHRoaXMuZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuXG4gICAgdGhpcy5zaG93VGltZWZyYW1lKHRydWUpO1xuICB9XG5cbiAgcHVibGljIHBsYXkoKSB7XG4gICAgdGhpcy5hdXRvcGxheSA9IHRydWU7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgc3RvcCgpIHtcbiAgICB0aGlzLmF1dG9wbGF5ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlU2hvd01hcmtlcnMoKSB7XG4gICAgaWYgKCF0aGlzLm1hcEVsZW1lbnQ/Lm1hcmtlcnNMYXllciB8fCAhdGhpcy5tYXBFbGVtZW50Py5tYXBMZWFmbGV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvd01hcmtlcnMpIHtcbiAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIuYWRkVG9NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLnJlbW92ZUZyb21NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VDdW11bGF0aXZlKCkge1xuICAgIGlmICh0aGlzLnNob3dDdW11bGF0aXZlKSB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEVsZW1lbnRzRmFjdG9yeSh0aGlzLmNvb3JkaW5hdGVzLCB0cnVlKTtcbiAgICAgIHRoaXMuY3JlYXRlU2NhbGUoZmFjdG9yeSwgJ21tJyk7XG4gICAgICB0aGlzLmN1bXVsYXRpdmVUaW1lZnJhbWVDb250YWluZXJzID0gdGhpcy50aW1lZnJhbWVDb250YWluZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEVsZW1lbnRzRmFjdG9yeSh0aGlzLmNvb3JkaW5hdGVzLCB0cnVlKTtcbiAgICAgIHRoaXMuY3JlYXRlU2NhbGUoZmFjdG9yeSwgJ21tL2gnKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRpbWVmcmFtZSgpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZUFscGhhKCkge1xuICAgIGNvbnNvbGUubG9nKCdjaGFuZ2VBbHBoYScsIHRoaXMuYWxwaGEpO1xuICAgIHRoaXMuc3RvcmFnZS5zZXQoJ21hcC1hbHBoYScsIHRoaXMuYWxwaGEpO1xuICAgIGlmICghdGhpcy5tYXBFbGVtZW50IHx8ICF0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWFwRWxlbWVudC5hbHBoYSA9IDAuMyArIHRoaXMuYWxwaGEgKiAwLjc7XG4gICAgdGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQuZWFjaExheWVyKChsYXllcjogYW55KSA9PiB7XG4gICAgICBpZiAobGF5ZXIuX2NvbnRhaW5lcj8uc3R5bGUpIHtcbiAgICAgICAgbGF5ZXIuX2NvbnRhaW5lci5zdHlsZS5maWx0ZXIgPSBgYnJpZ2h0bmVzcygkeygxMCAtIHRoaXMuYWxwaGEgKiAxMCkgKiAxMH0lKWA7IC8vIGludmVydCgxKSA/XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZSgpIHtcblxuICAgIGNvbnN0IGNyZWF0ZWQgPSB0aGlzLmNyZWF0ZWQ7XG4gICAgaWYgKGNyZWF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVkID0gdHJ1ZTtcbiAgICBjb25zdCBtYXJrZXJzID0gW1xuICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuZ2F1Z2VzLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuZ2F1Z2VzfSxcbiAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuc2VsZWN0ZWRHYXVnZXN9LFxuICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuZ2F1Z2VzSW5Db21wYXJlLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuZ2F1Z2VzSW5Db21wYXJlfSxcbiAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnBpeGVscywgaWNvbnNPcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnBpeGVsc30sXG4gICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5waXhlbHNTb2x1dGlvbiwgaWNvbnNPcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnBpeGVsc1NvbHV0aW9ufSxcbiAgICAgIC8vIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLmJvcmRlcnMsIGljb25zT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5ib3JkZXJzfSxcbiAgICBdO1xuXG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBFbGVtZW50c0ZhY3RvcnkodGhpcy5jb29yZGluYXRlcywgdHJ1ZSk7XG4gICAgdGhpcy5jcmVhdGVTY2FsZShmYWN0b3J5LCAnbW0vaCcpO1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgY29uc3QgY3JlYXRlZE91dHNpZGUgPSB0aGlzLmNyZWF0ZWQ7XG4gICAgICAgIGlmICghY3JlYXRlZE91dHNpZGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1hcEVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZU1hcCh0aGlzLm1hcERpdlJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgIHt0aW1lZnJhbWVDb250YWluZXJzOiB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnMsIG1hcmtlcnN9KTtcblxuICAgICAgICB0aGlzLmNoYW5nZUFscGhhKCk7XG5cbiAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQ/Lm9uKCdtb3VzZW1vdmUnLCAoZXZ0KSA9PiB0aGlzLm9uTWFwTW91c2VNb3ZlKGV2dCkpO1xuICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc1Byb2R1Y2VkPy5mb3JFYWNoKG0gPT4gbS5vbignY2xpY2snLCBldnQgPT4gdGhpcy5vbk1hcENsaWNrKGV2dCkpKTtcbiAgICAgICAgdGhpcy5vblNpemVDaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXI/LnNldEN1cnJlbnRXaWR0aCh0aGlzLmN1cnJlbnRXaWR0aCk7XG4gICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllcj8uc2V0Q3VycmVudEhlaWdodCh0aGlzLmN1cnJlbnRIZWlnaHQpO1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5jb21wb3NpdGVMYXllcj8uc2V0Q3VycmVudFdpZHRoKHRoaXMuY3VycmVudFdpZHRoKTtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQuY29tcG9zaXRlTGF5ZXI/LnNldEN1cnJlbnRIZWlnaHQodGhpcy5jdXJyZW50SGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldD8uaW52YWxpZGF0ZVNpemUoe2FuaW1hdGU6IHRydWV9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZU1hcFNpemUoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VOYXZpZ2F0aW9uKHRoaXMuZGVmYXVsdERhdGUpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcblxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGUoKSB7XG4gICAgdGhpcy5tYXBFbGVtZW50Py5tYXBMZWFmbGV0Py5yZW1vdmUoKTtcbiAgICB0aGlzLm1hcEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tY1RleHQgPSAnJztcbiAgICB0aGlzLm5leHREYXRlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9zc2libGVOYW1lcyA9IFtdO1xuICAgIHRoaXMucG9zc2libGVEYXRlcyA9IFtdO1xuICAgIHRoaXMudGltZWZyYW1lTmFtZVRvU2hvdyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRhdGVUb1Nob3cgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vblNpemVDaGFuZ2VkID0gKCkgPT4ge1xuICAgIH07XG4gICAgdGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIgPSBudWxsO1xuXG4gICAgdGhpcy5jcmVhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5hbHBoYSA9IHRoaXMuc3RvcmFnZS5nZXQoJ21hcC1hbHBoYScsIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2UoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGxldCBwb3NzaWJsZU5ld0RlZmF1bHREYXRlOiBEYXRlO1xuXG4gICAgaWYgKGNoYW5nZXMuZGVmYXVsdERhdGUpIHtcbiAgICAgIGlmIChuZXcgRGF0ZShjaGFuZ2VzLmRlZmF1bHREYXRlLmN1cnJlbnRWYWx1ZSkuZ2V0VGltZSgpID09PSBuZXcgRGF0ZShjaGFuZ2VzLmRlZmF1bHREYXRlLnByZXZpb3VzVmFsdWUpLmdldFRpbWUoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwb3NzaWJsZU5ld0RlZmF1bHREYXRlID0gdGhpcy5kZWZhdWx0RGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5tYXJrZXJzICYmIHRoaXMubWFwRWxlbWVudD8ubWFya2Vyc0xheWVyKSB7XG5cbiAgICAgIGNvbnN0IG1hcmtlcnMgPSBbXG4gICAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLmdhdWdlcywgaWNvbk9wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuZ2F1Z2VzfSxcbiAgICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuc2VsZWN0ZWRHYXVnZXMsIGljb25PcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnNlbGVjdGVkR2F1Z2VzfSxcbiAgICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuZ2F1Z2VzSW5Db21wYXJlLCBpY29uT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5nYXVnZXNJbkNvbXBhcmV9LFxuICAgICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5waXhlbHMsIGljb25PcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnBpeGVsc30sXG4gICAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnBpeGVsc1NvbHV0aW9uLCBpY29uT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5waXhlbHNTb2x1dGlvbn0sXG4gICAgICAgIC8vICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5ib3JkZXJzLCBpY29uT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5ib3JkZXJzfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBtYXJrZXJzUHJvZHVjZWQgPSB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLnJlbmRlcihtYXJrZXJzKS5tYXJrZXJzO1xuICAgICAgaWYgKG1hcmtlcnNQcm9kdWNlZCkge1xuICAgICAgICBtYXJrZXJzUHJvZHVjZWQuZm9yRWFjaChtID0+IG0ub24oJ2NsaWNrJywgZXZ0ID0+IHRoaXMub25NYXBDbGljayhldnQpKSk7XG4gICAgICAgIGlmICh0aGlzLnNob3dNYXJrZXJzKSB7XG4gICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5yZW1vdmVGcm9tTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLmFkZFRvTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLm1hcmtlcnMgJiYgdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRHYXVnZSA9IHRoaXMubWFya2Vycy5zZWxlY3RlZEdhdWdlc1swXTtcbiAgICAgIHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0LnNldFZpZXcoc2VsZWN0ZWRHYXVnZSwgMTApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1hcEVsZW1lbnQgJiYgY2hhbmdlcy50aW1lZnJhbWVDb250YWluZXJzKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRpbWVmcmFtZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1hcEVsZW1lbnQ/LmNvbXBvc2l0ZUxheWVyICYmIGNoYW5nZXMuc3VtVmFsdWVzKSB7XG4gICAgICBjb25zdCBkcmF3ZXIgPSB0aGlzLm1hcEVsZW1lbnQuY29tcG9zaXRlTGF5ZXIuZ2V0Rmlyc3REcmF3ZXIoKTtcbiAgICAgIHRoaXMuc3VtUmVzdWx0ID0gZHJhd2VyPy5nZXRFeGVjT2ZWaXNpYmxlUG9pbnRzKHRoaXMuc3VtVmFsdWVzLCB0aGlzLnN1bUZuKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZU5hdmlnYXRpb24ocG9zc2libGVOZXdEZWZhdWx0RGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZU5hdmlnYXRpb24oZGVmYXVsdERhdGU/OiBEYXRlKSB7XG4gICAgLy8gdXBkYXRlIHBvc3NpYmxlIG5hbWVzXG4gICAgaWYgKHRoaXMudGltZWZyYW1lQ29udGFpbmVycyAmJiB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnMuY29udGFpbmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucG9zc2libGVOYW1lcyA9IFtdO1xuICAgICAgdGhpcy50aW1lZnJhbWVDb250YWluZXJzPy5jb250YWluZXJzLmZvckVhY2goYyA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBvc3NpYmxlTmFtZXMuaW5kZXhPZihjLm5hbWUpIDwgMCkge1xuICAgICAgICAgIHRoaXMucG9zc2libGVOYW1lcy5wdXNoKGMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy50aW1lZnJhbWVOYW1lVG9TaG93ID0gdGhpcy5wb3NzaWJsZU5hbWVzLmxlbmd0aCA+IDAgPyB0aGlzLnBvc3NpYmxlTmFtZXNbMF0gOiBudWxsO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBwb3NzaWJsZSBkYXRlc1xuICAgIHRoaXMucG9zc2libGVEYXRlcyA9IHRoaXMudGltZWZyYW1lRGF0ZXM7XG4gICAgaWYgKCF0aGlzLnBvc3NpYmxlRGF0ZXMgfHwgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBkYXRlVG9TaG93XG4gICAgaWYgKGRlZmF1bHREYXRlICYmIHRoaXMucG9zc2libGVEYXRlcy5maWx0ZXIoZCA9PiBkLmdldFRpbWUoKSA9PT0gZGVmYXVsdERhdGUuZ2V0VGltZSgpKS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuZGF0ZVRvU2hvdyA9IGRlZmF1bHREYXRlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZGF0ZVRvU2hvdyAmJiB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5wb3NzaWJsZURhdGVzLmZpbHRlcihkID0+IGQuZ2V0VGltZSgpID09PSB0aGlzLmRhdGVUb1Nob3c/LmdldFRpbWUoKSkubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aGlzLmRhdGVUb1Nob3cgPSB0aGlzLnBvc3NpYmxlRGF0ZXNbMF07XG4gICAgfVxuICAgIHRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nID0gdGhpcy5kYXRlVG9TaG93LnRvSVNPU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGVUb1Nob3dJbmRleCgpOiBudW1iZXIge1xuXG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBmb3IgKGNvbnN0IGRhdGUgb2YgdGhpcy5wb3NzaWJsZURhdGVzKSB7XG4gICAgICBpZiAoZGF0ZS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxOSkgPT09IHRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nLnN1YnN0cmluZygwLCAxOSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBwcml2YXRlIG9uTWFwTW91c2VNb3ZlKGV2dDogeyBsYXRsbmc6IHsgbGF0OiBudW1iZXIsIGxuZzogbnVtYmVyIH0gfSk6IHZvaWQge1xuXG4gICAgY29uc3QgbGF0OiBzdHJpbmcgPSBldnQubGF0bG5nLmxhdC50b0ZpeGVkKDMpO1xuICAgIGNvbnN0IGxuZzogc3RyaW5nID0gZXZ0LmxhdGxuZy5sbmcudG9GaXhlZCgzKTtcblxuICAgIGxldCB2YWx1ZSA9IE5hTjtcbiAgICBsZXQgdmFsdWVMYXQgPSBOYU4sIHZhbHVlTG5nID0gTmFOLCB2YWx1ZUxhdDIgPSBOYU4sIHZhbHVlTG5nMiA9IE5hTjtcbiAgICBpZiAodGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIpIHtcbiAgICAgIGNvbnN0IHZhbHVlU2VsZWN0ZWQgPSAodGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIudmFsdWVzIGFzIENhcnRlc2lhbk1hcFZhbHVlW10pXG4gICAgICAgIC5maWx0ZXIoKHY6IENhcnRlc2lhbk1hcFZhbHVlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHYubGF0IDw9IGV2dC5sYXRsbmcubGF0ICYmIGV2dC5sYXRsbmcubGF0IDwgdi5sYXQyICYmXG4gICAgICAgICAgICB2LmxuZyA8PSBldnQubGF0bG5nLmxuZyAmJiBldnQubGF0bG5nLmxuZyA8IHYubG5nMjtcbiAgICAgICAgfSk7XG5cbiAgICAgIGlmICh2YWx1ZVNlbGVjdGVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWVTZWxlY3RlZFswXS52YWx1ZSAqIDEwMDApIC8gMTAwMDtcbiAgICAgICAgdmFsdWVMYXQgPSBNYXRoLnJvdW5kKHZhbHVlU2VsZWN0ZWRbMF0ubGF0ICogMTAwMCkgLyAxMDAwO1xuICAgICAgICB2YWx1ZUxuZyA9IE1hdGgucm91bmQodmFsdWVTZWxlY3RlZFswXS5sbmcgKiAxMDAwKSAvIDEwMDA7XG4gICAgICAgIHZhbHVlTGF0MiA9IE1hdGgucm91bmQodmFsdWVTZWxlY3RlZFswXS5sYXQyICogMTAwMCkgLyAxMDAwO1xuICAgICAgICB2YWx1ZUxuZzIgPSBNYXRoLnJvdW5kKHZhbHVlU2VsZWN0ZWRbMF0ubG5nMiAqIDEwMDApIC8gMTAwMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNvbnNvbGUud2FybigndmFsdWVTZWxlY3RlZCBpc3N1ZSA/JywgdmFsdWVTZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIC8vIHRoaXMubWNUZXh0ID0gYExhdGl0dWRlOiAke2xhdH0gJm5ic3A7ICZuYnNwOyBMb25naXR1ZGU6ICR7bG5nfSAmbmJzcDsgJm5ic3A7XG4gICAgICAvLyAgICBWYWx1ZTogWyR7dmFsdWVMYXR9ICR7dmFsdWVMbmd9IHwgJHt2YWx1ZUxhdDJ9ICR7dmFsdWVMbmcyfV0gJHt2YWx1ZX1gO1xuICAgICAgdGhpcy5tY1RleHQgPSBgTGF0aXR1ZGU6ICR7bGF0fSAmbmJzcDsgJm5ic3A7IExvbmdpdHVkZTogJHtsbmd9ICZuYnNwOyAmbmJzcDsgVmFsdWU6ICR7dmFsdWV9YDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25NYXBDbGljayhldnQ6IGFueSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgdGhpcy5tYXJrZXJzLmdhdWdlcykge1xuICAgICAgaWYgKGdhdWdlLmlkID09PSBldnQ/LnRhcmdldD8ub3B0aW9ucz8uYWx0KSB7XG4gICAgICAgIHRoaXMubWFya2Vycy5zZWxlY3RlZEdhdWdlcyA9IFtnYXVnZV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRNYXJrZXIuZW1pdChuZXcgTWFwTGF0TG5nKFxuICAgICAgZXZ0LmxhdGxuZz8ubGF0LCBldnQubGF0bG5nPy5sbmcsIHVuZGVmaW5lZCxcbiAgICAgIGV2dC5pZCwgZXZ0Lm5hbWUpKTtcblxuICAgIHRoaXMuY2hhbmdlKHttYXJrZXJzOiBbJ2NoYW5nZWQnXX0gYXMgYW55KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBwcml2YXRlIG9uUmVzaXplKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZU1hcFNpemUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWFwU2l6ZSgpOiB2b2lkIHtcblxuICAgIGNvbnN0IG1hcERpdldpZHRoID0gdGhpcy5tYXBEaXZSZWYubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlPy5wYXJlbnROb2RlWydjbGllbnRXaWR0aCddO1xuICAgIGNvbnN0IHBhZGRpbmcgPSAyMTtcbiAgICBsZXQgY3VycmVudFdpZHRoID0gbWFwRGl2V2lkdGggfHxcbiAgICAgICh3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCk7XG4gICAgY29uc3QgY3VycmVudEhlaWdodCA9IHRoaXMuY3VycmVudEhlaWdodCB8fFxuICAgICAgKHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0KTtcbiAgICBjdXJyZW50V2lkdGggLT0gcGFkZGluZztcbiAgICB0aGlzLmN1cnJlbnRXaWR0aCA9IGN1cnJlbnRXaWR0aDtcbiAgICB0aGlzLmN1cnJlbnRIZWlnaHQgPSBjdXJyZW50SGVpZ2h0O1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMub25TaXplQ2hhbmdlZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUaW1lZnJhbWUoKSB7XG5cbiAgICBpZiAoIXRoaXMuc2hvd0N1bXVsYXRpdmUpIHtcbiAgICAgIHRoaXMubWFwRWxlbWVudC51cGRhdGVNYXBUaW1lZnJhbWUodGhpcy50aW1lZnJhbWVDb250YWluZXJzKTtcbiAgICAgIHRoaXMuY3VycmVudEZyYW1lQ29udGFpbmVyID0gdGhpcy50aW1lZnJhbWVDb250YWluZXJzPy5jb250YWluZXJzWzBdPy50aW1lZnJhbWVbMF07XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZWZyYW1lQ29udGFpbmVycy5jb250YWluZXJzWzBdPy50aW1lZnJhbWUpIHtcblxuICAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgdGhpcy50aW1lZnJhbWVDb250YWluZXJzLmNvbnRhaW5lcnNbMF0udGltZWZyYW1lKSB7XG4gICAgICAgIGNvbnN0IGFscmVhZHlFeGlzdCA9IHRoaXMuY3VtdWxhdGl2ZVRpbWVmcmFtZUNvbnRhaW5lcnMuY29udGFpbmVyc1swXS50aW1lZnJhbWVcbiAgICAgICAgICAuZmlsdGVyKGMgPT4gbmV3IERhdGUoYy5kYXRlKS5nZXRUaW1lKCkgPT09IG5ldyBEYXRlKGNvbnRhaW5lci5kYXRlKS5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoYWxyZWFkeUV4aXN0Lmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICB0aGlzLmN1bXVsYXRpdmVUaW1lZnJhbWVDb250YWluZXJzLmNvbnRhaW5lcnNbMF0udGltZWZyYW1lLnB1c2goY29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2cobmV3IERhdGUoKS50b0lTT1N0cmluZygpLCAnY2FydGVzaWFuTWFwVmFsdWVzOiBjb21wdXRpbmcuLi4nKTtcbiAgICAgIGNvbnN0IGNhcnRlc2lhbk1hcFZhbHVlcyA9IHRoaXMuY3VtdWxhdGl2ZVRpbWVmcmFtZUNvbnRhaW5lcnMuZ2V0Q3VtdWxhdGl2ZUNhcnRlc2lhblZhbHVlcygpO1xuICAgICAgY29uc29sZS5sb2cobmV3IERhdGUoKS50b0lTT1N0cmluZygpLCAnY2FydGVzaWFuTWFwVmFsdWVzOicsIGNhcnRlc2lhbk1hcFZhbHVlcy5sZW5ndGgpO1xuICAgICAgdGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIgPSBuZXcgRnJhbWVDb250YWluZXIodGhpcy5kZWZhdWx0RGF0ZSwgY2FydGVzaWFuTWFwVmFsdWVzLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgICAgIHRoaXMubWFwRWxlbWVudC51cGRhdGVNYXBUaW1lZnJhbWUoXG4gICAgICAgIG5ldyBUaW1lZnJhbWVDb250YWluZXJzKFtcbiAgICAgICAgICBuZXcgVGltZWZyYW1lQ29udGFpbmVyKHRoaXMuZGVmYXVsdERhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIFt0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lcl0sXG4gICAgICAgICAgICAnY3VtdWxhdGl2ZScpXG4gICAgICAgIF0pKTtcblxuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlQWxwaGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2NhbGUoZmFjdG9yeTogRWxlbWVudHNGYWN0b3J5LCBsYWJlbDogc3RyaW5nKSB7XG4gICAgdGhpcy5kZWxldGVTY2FsZSgpO1xuXG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKENoYXJ0U2NhbGVDb2xvcnMpO1xuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gcGFyc2VGbG9hdChhWzBdKSAtIHBhcnNlRmxvYXQoYlswXSkpO1xuICAgIGNvbnN0IHNvcnRlZE1hcCA9IG5ldyBNYXAoZW50cmllcyk7XG4gICAgY29uc3Qgc29ydGVkQXJyYXkgPSBbLi4uc29ydGVkTWFwLmVudHJpZXMoKV07XG4gICAgY29uc3Qgc2NhbGVDb2xvcnMgPSBzb3J0ZWRBcnJheS5tYXAoZW50cnkgPT4ge1xuICAgICAgcmV0dXJuIHtjb2xvcjogZW50cnlbMV19XG4gICAgfSk7XG4gICAgY29uc3Qgc2NhbGVMYWJlbHMgPSBzb3J0ZWRBcnJheS5tYXAoZW50cnkgPT4gZW50cnlbMF0pO1xuICAgIHRoaXMuc2NhbGVFbGVtZW50ID0gZmFjdG9yeS5jcmVhdGVTY2FsZSh0aGlzLnNjYWxlQ2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBuZXcgU2NhbGVFbGVtZW50SW5wdXQoc2NhbGVDb2xvcnMsIHNjYWxlTGFiZWxzLCBsYWJlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTY2FsZSgpIHtcbiAgICBpZiAodGhpcy5zY2FsZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc2NhbGVFbGVtZW50Py5jaGFydD8uZGVzdHJveSgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGlvbi1ncmlkPlxuXG4gIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWVuZFwiPlxuICAgIDxpb24tY29sIGlkPVwibWFwLWJ1dHRvbnNcIiBzaXplLXhzPVwiM1wiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInByZXZpb3VzKClcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJvdXRsaW5lXCIgc2hhcGU9XCJyb3VuZFwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInBsYXktYmFja1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInN0b3AoKVwiIFtoaWRkZW5dPVwiIWF1dG9wbGF5XCIgY29sb3I9XCJtZWRpdW1cIiBmaWxsPVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwic3RvcFwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIm5leHQoKVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cIm91dGxpbmVcIiBzaGFwZT1cInJvdW5kXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwicGxheS1mb3J3YXJkXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtc3RhcnRcIiBpZD1cIm1hcC1kYXRlXCIgc2l6ZS1tZD1cIjRcIiBzaXplLXhzPVwiNVwiPlxuICAgICAgPGlvbi1zZWxlY3QgKGlvbkRpc21pc3MpPVwic2hvd1RpbWVmcmFtZSgpXCIgWyhuZ01vZGVsKV09XCJkYXRlVG9TaG93QXNTdHJpbmdcIiBpbnRlcmZhY2U9XCJwb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVyaW9kXCIgdmFsdWU9XCJ7e2RhdGVUb1Nob3dBc1N0cmluZ319XCI+XG4gICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZGF0ZVRvU2VsZWN0IG9mIHBvc3NpYmxlRGF0ZXNcIiB2YWx1ZT1cInt7ZGF0ZVRvU2VsZWN0LnRvSVNPU3RyaW5nKCl9fVwiPlxuICAgICAgICAgIHt7IGRhdGVUb1NlbGVjdCB8IGRhdGU6J3l5eXktTU0tZGQgSEg6bW0nIH19XG4gICAgICAgIDwvaW9uLXNlbGVjdC1vcHRpb24+XG4gICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLWhpZGUtbWQtZG93blwiIHNpemUteHM9XCIyXCI+XG4gICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJjbGVhclwiPlxuICAgICAgICBHYXVnZXNcbiAgICAgICAgPGlvbi10b2dnbGUgKGlvbkNoYW5nZSk9XCJjaGFuZ2VTaG93TWFya2VycygpXCIgWyhuZ01vZGVsKV09XCJzaG93TWFya2Vyc1wiIFtjaGVja2VkXT1cInNob3dNYXJrZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJtZWRpdW1cIj48L2lvbi10b2dnbGU+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLWhpZGUtbWQtZG93blwiIHNpemUteHM9XCIyXCI+XG4gICAgICA8aW9uLXJhbmdlIChpb25DaGFuZ2UpPVwiY2hhbmdlQWxwaGEoKVwiIFsobmdNb2RlbCldPVwiYWxwaGFcIiBbbWF4XT1cIjFcIiBbbWluXT1cIjAuMlwiIFtzbmFwc109XCJ0cnVlXCIgW3N0ZXBdPVwiMC4yXCJcbiAgICAgICAgICAgICAgICAgW3RpY2tzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICBjb2xvcj1cIm1lZGl1bVwiPjwvaW9uLXJhbmdlPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDwhLS0gPGlvbi1jb2wgY2xhc3M9XCJpb24taGlkZS1tZC1kb3duXCIgc2l6ZS14cz1cIjJcIj5cbiAgICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJjbGVhclwiPlxuICAgICAgICAgQ3VtdWxhdGl2ZVxuICAgICAgICAgPGlvbi10b2dnbGUgKGlvbkNoYW5nZSk9XCJjaGFuZ2VDdW11bGF0aXZlKClcIiBbKG5nTW9kZWwpXT1cInNob3dDdW11bGF0aXZlXCIgW2NoZWNrZWRdPVwic2hvd0N1bXVsYXRpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJtZWRpdW1cIj48L2lvbi10b2dnbGU+XG4gICAgICAgPC9pb24tYnV0dG9uPlxuICAgICA8L2lvbi1jb2w+LS0+XG4gIDwvaW9uLXJvdz5cblxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBzaXplLWxnPVwiMTBcIiBzaXplLXhzPVwiMTJcIj5cbiAgICAgIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJjdXJyZW50SGVpZ2h0XCIgaWQ9XCJtYXAtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgI3ByaW1hcnlNYXAgaWQ9XCJtYXAtZGl2XCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJpb24taGlkZS14bC1kb3duXCIgc2l6ZS1sZz1cIjJcIj5cbiAgICAgIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJjdXJyZW50SGVpZ2h0XCIgW3N0eWxlLndpZHRoLnB4XT1cIjEwMFwiPlxuICAgICAgICA8Y2FudmFzICNjYW52YXNTY2FsZT48L2NhbnZhcz5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLWhpZGUtc20tZG93blwiIHNpemUtc209XCI4XCI+XG4gICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIm1jVGV4dFwiPjwvc3Bhbj5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgc2l6ZS1zbT1cIjFcIiBzaXplLXhzPVwiMTJcIj5cbiAgICAgIDxpb24tYnV0dG9uIGRpc2FibGVkPVwidHJ1ZVwiIGZpbGw9XCJjbGVhclwiPnt7IHN1bVJlc3VsdCB9fTwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJpb24taGlkZS1zbS1kb3duXCIgc2l6ZS1zbT1cIjNcIj5cbiAgICAgIDxpb24tYnV0dG9uIGRpc2FibGVkPVwidHJ1ZVwiIGZpbGw9XCJjbGVhclwiPnt7IGRhdGVUb1Nob3c/LnRvSVNPU3RyaW5nKCkgfX08L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbjwvaW9uLWdyaWQ+XG4iXX0=
@@ -141,8 +141,8 @@ export class CompareManager {
141
141
  async buildComparesTimeline(targetsOrdered, withCompareDuplicate) {
142
142
  const dates = targetsOrdered.map(t => t.date);
143
143
  const qualities = dates
144
- .map(d => this.getRainComputationQuality(d))
145
- .filter(d => !!d);
144
+ .filter(d => !!d)
145
+ .map(d => this.getRainComputationQuality(d));
146
146
  this.buildCompares = SpeedMatrixContainer.BuildCompares(qualities, !withCompareDuplicate);
147
147
  return this.buildCompares;
148
148
  }
@@ -209,4 +209,4 @@ export class CompareManager {
209
209
  this.selectGaugeInCompare();
210
210
  }
211
211
  }
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9Db21wYXJlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBNEYsb0JBQW9CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDNUksT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQWtCakMsTUFBTSxPQUFPLGNBQWM7SUE0QnpCLFlBQ1ksUUFBa0IsRUFDbEIsY0FBOEIsRUFDakMsWUFBd0IsR0FBRyxFQUFFO0lBQ3BDLENBQUM7UUFIUyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUNmO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFUyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQVcsRUFBRSxLQUFXLEVBQUUsT0FBZTtRQUVwRSxNQUFNLFdBQVcsR0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM1QyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckYsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFF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QUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01hcExhdExuZ30gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtJQ29tcGFyZVBlckRhdGUsIElDb21wYXJlcywgUG9zaXRpb25WYWx1ZSwgUXVhbGl0eVBvaW50LCBSYWluQ29tcHV0YXRpb25RdWFsaXR5LCBSYWluTm9kZSwgU3BlZWRNYXRyaXhDb250YWluZXJ9IGZyb20gJ3JhYWluLW1vZGVsJztcbmltcG9ydCB7WFlUeXBlfSBmcm9tICcuLi94eXR5cGUnO1xuaW1wb3J0IHtQcm9maWxlU2VydmljZX0gZnJvbSAnLi4vcHJvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7RnJhbWVTZXR9IGZyb20gJy4vRnJhbWVTZXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb21wYXJlVGFyZ2V0IHtcbiAgZGF0ZTogRGF0ZTtcbiAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZztcbiAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVJQ29tcGFyZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgY29tcGFyZVBvaW50czogWFlUeXBlW107XG4gIGNvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcbiAgY29tcGFyZVBvaW50c0hpc3Rvcnk6IFF1YWxpdHlQb2ludFtdO1xuICByZW1hcmtzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYXJlTWFuYWdlciB7XG5cbiAgLy8gcHVibGljIGNvbXB1dGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBwdWJsaWMgZ2F1Z2VzSW5Db21wYXJlOiBNYXBMYXRMbmdbXTtcbiAgcHVibGljIHNlbGVjdGVkR2F1Z2VzOiBNYXBMYXRMbmdbXTtcbiAgcHVibGljIHNlbGVjdGVkUGl4ZWxzOiBNYXBMYXRMbmdbXTtcbiAgcHVibGljIHBpeGVsc1NvbHV0aW9uczogTWFwTGF0TG5nW11bXTtcblxuICAvLyBmcm9tIGNvbXBhcmVzVGltZWxpbmVcbiAgcHVibGljIGNvbXBhcmVOYW1lczogc3RyaW5nW107XG4gIHB1YmxpYyB1aUNvbXBhcmVzOiBJVUlDb21wYXJlW107XG4gIHB1YmxpYyBjb21wYXJlU3BlZWRNYXRyaXg6IFBvc2l0aW9uVmFsdWVbXTtcbiAgcHVibGljIGNvbXBhcmVWZXJzaW9uOiBzdHJpbmc7XG4gIHB1YmxpYyBjb21wYXJlVHJ1c3RlZEluZGljYXRvcjogbnVtYmVyO1xuXG4gIHB1YmxpYyBjdXJyZW50UXVhbGl0eURvbmVEYXRlOiBEYXRlO1xuICBwdWJsaWMgY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5OiBzdHJpbmc7XG4gIHB1YmxpYyBjdXJyZW50UXVhbGl0eVRpbWVTcGVudEluTXM6IG51bWJlcjtcbiAgcHVibGljIGdsb2JhbENvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuXG4gIHByb3RlY3RlZCBidWlsZENvbXBhcmVzOiBJQ29tcGFyZXM7XG4gIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlOiBRdWFsaXR5UG9pbnQ7XG4gIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHM6IFF1YWxpdHlQb2ludDtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2VJblBvaW50c0RldGFpbDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByYWluTm9kZTogUmFpbk5vZGUsXG4gICAgcHJvdGVjdGVkIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZSxcbiAgICBwdWJsaWMgb25DaGFuZ2VzOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIH1cbiAgKSB7XG4gICAgdGhpcy5jbGVhbkFsbCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBDb21wYXJlRGF0ZShkYXRlMTogRGF0ZSwgZGF0ZTI6IERhdGUsIG1pbnV0ZXM6IG51bWJlcik6IGJvb2xlYW4ge1xuXG4gICAgY29uc3QgZGF0ZTFBc0RhdGU6IERhdGUgPSBuZXcgRGF0ZShkYXRlMS5nZXRUaW1lKCkpO1xuICAgIGNvbnN0IGRhdGUyRGlmZiA9IG5ldyBEYXRlKGRhdGUyLmdldFRpbWUoKSk7XG4gICAgZGF0ZTJEaWZmLnNldE1pbnV0ZXMoZGF0ZTJEaWZmLmdldE1pbnV0ZXMoKSArIG1pbnV0ZXMpO1xuICAgIGNvbnN0IGRpZmYgPSBNYXRoLnJvdW5kKChkYXRlMUFzRGF0ZS5nZXRUaW1lKCkgLSBkYXRlMkRpZmYuZ2V0VGltZSgpKSAvICg2MCAqIDEwMDApKTtcbiAgICByZXR1cm4gZGlmZiA9PT0gMDtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhbkFsbCgpIHtcbiAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcblxuICAgIHRoaXMuYnVpbGRDb21wYXJlcyA9IHtcbiAgICAgIGNvbXBhcmVzUGVyRGF0ZTogW10sXG4gICAgICBjb21wYXJlQ3VtdWxhdGl2ZTogbnVsbFxuICAgIH07XG4gICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzID0gW107XG4gICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzTWF4ID0gbmV3IFhZVHlwZSgwLCAwKTtcbiAgICB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGUgPSB7fTtcblxuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgIHRoaXMuY2xlYW5Db21wYXJlUXVhbGl0eSgnbm8gY29tcGFyZSB5ZXQnKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQpIHtcblxuICAgIGNvbnN0IGNvbXBhcmVQZXJEYXRlID0gdGhpcy5nZXRDb21wYXJlUGVyRGF0ZShmcmFtZVNldC5kYXRlKTtcblxuICAgIGlmICghY29tcGFyZVBlckRhdGUgfHwgIWNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHk/LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lcikge1xuICAgICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjdXJyZW50IHF1YWxpdHkgJyArIE9iamVjdC5rZXlzKHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSkpO1xuICAgICAgdGhpcy5vbkNoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1aUNvbXBhcmVzOiBJVUlDb21wYXJlW10gPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmUubWFwKGMgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICBjb21wYXJlUG9pbnRzOiBjLnF1YWxpdHlQb2ludHMubWFwKHAgPT4gbmV3IFhZVHlwZShwLmdldEdhdWdlVmFsdWUoKSwgcC5nZXRSYWluVmFsdWUoKSwgMiwgcC5nYXVnZUxhYmVsLCBwLmdhdWdlSWQpKSxcbiAgICAgICAgY29tcGFyZVBvaW50c01heDogbmV3IFhZVHlwZShjLm1heFZhbHVlICogMS4yLCBjLm1heFZhbHVlICogMS4yKSxcbiAgICAgICAgY29tcGFyZVBvaW50c0hpc3Rvcnk6IGMucXVhbGl0eVBvaW50c0xlZ2FjeSxcbiAgICAgICAgcmVtYXJrczogYy5yZW1hcmtzXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5jdXJyZW50UXVhbGl0eURvbmVEYXRlID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5pc0RvbmVEYXRlO1xuICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS50aW1lU3BlbnRJbk1zO1xuICAgIHRoaXMuY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5ID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5sYXVuY2hlZEJ5O1xuICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmdldFZlcnNpb24oKTtcbiAgICB0aGlzLmNvbXBhcmVTcGVlZE1hdHJpeCA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLnJlbmRlck1lcmdlZE1hdHJpeCh7bm9ybWFsaXplOiB0cnVlfSk7XG4gICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldFRydXN0ZWRJbmRpY2F0b3JzKClbMF07XG4gICAgdGhpcy5jb21wYXJlTmFtZXMgPSB1aUNvbXBhcmVzLm1hcChjID0+IGMubmFtZSk7XG4gICAgdGhpcy51aUNvbXBhcmVzID0gdWlDb21wYXJlcztcblxuICAgIHRoaXMub25DaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkodGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhbikge1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQpO1xuXG4gICAgICBhd2FpdCB0aGlzLmJ1aWxkQ29tcGFyZXNUaW1lbGluZSh0YXJnZXRzT3JkZXJlZCwgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuXG4gICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAvLyB0aHJvdyBFcnJvcignbmVlZHMgY3VtdWxhdGl2ZSBjb21wYXJlJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY291bnRGb3JBdmVyYWdlID0gdGFyZ2V0c09yZGVyZWQubGVuZ3RoO1xuICAgICAgY29uc3QgbWF4VmFsdWUgPSAodGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLm1heFZhbHVlIC8gY291bnRGb3JBdmVyYWdlKSAqIDEuMjtcbiAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5xdWFsaXR5UG9pbnRzXG4gICAgICAgIC5tYXAocXAgPT4gbmV3IFhZVHlwZShxcC5nZXRHYXVnZVZhbHVlKCkgLyBjb3VudEZvckF2ZXJhZ2UsXG4gICAgICAgICAgcXAuZ2V0UmFpblZhbHVlKCkgLyBjb3VudEZvckF2ZXJhZ2UsXG4gICAgICAgICAgMiwgcXAuZ2F1Z2VMYWJlbCwgcXAuZ2F1Z2VJZCkpO1xuICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzTWF4ID0gbmV3IFhZVHlwZShtYXhWYWx1ZSwgbWF4VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZXRHYXVnZXMoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3NldEdhdWdlcycpO1xuXG4gICAgY29uc3QgcXVhbGl0eVBvaW50czogUXVhbGl0eVBvaW50W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbXBhcmUgb2YgdGhpcy51aUNvbXBhcmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHF1YWxpdHlQb2ludCBvZiBjb21wYXJlLmNvbXBhcmVQb2ludHNIaXN0b3J5KSB7XG4gICAgICAgIGNvbnN0IGFscmVhZHlBZGRlZCA9IHF1YWxpdHlQb2ludHMuZmlsdGVyKHAgPT4gcD8uZ2F1Z2VJZCA9PT0gcXVhbGl0eVBvaW50LmdhdWdlSWQpO1xuICAgICAgICBpZiAoYWxyZWFkeUFkZGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHF1YWxpdHlQb2ludHMucHVzaChxdWFsaXR5UG9pbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBxdWFsaXR5UG9pbnRzLm1hcChwID0+IHtcbiAgICAgIHJldHVybiBuZXcgTWFwTGF0TG5nKHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sYXQsIHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsIDAsXG4gICAgICAgIHAuZ2F1Z2VJZCwgcC5nYXVnZUxhYmVsICsgJz4nICsgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgIHAuZ2V0R2F1Z2VWYWx1ZSgpKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nLCBjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgIC8vIGNvbnNvbGUubG9nKCdzZWxlY3RHYXVnZScsIGdhdWdlSWQsIGNvbXBhcmVJbmRleCk7XG5cbiAgICBpZiAoZ2F1Z2VJZCkge1xuICAgICAgY29uc3QgeHlzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihwID0+IHAuZ2F1Z2VJZCA9PT0gZ2F1Z2VJZCk7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSB4eXMubGVuZ3RoID09PSAxID8geHlzWzBdIDogbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHYXVnZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHRoaXMuZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4KS5maWx0ZXIocCA9PiBwLmdhdWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZS5nYXVnZUlkKTtcbiAgICBsZXQgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdID0gW107XG5cbiAgICBpZiAoc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgcmVtYXJrcyA9IEpTT04ucGFyc2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLnJlbWFyaylcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuY3JpdGVyaWFBdHRlbXB0ZWRUb0JlTWluaW11bSAtIGIuY3JpdGVyaWFBdHRlbXB0ZWRUb0JlTWluaW11bSk7XG4gICAgICBjb25zb2xlLmxvZyhyZW1hcmtzKTtcbiAgICAgIHBpeGVsc1NvbHV0aW9ucyA9IHJlbWFya3NcbiAgICAgICAgLm1hcChyZW1hcmsgPT4gcmVtYXJrLnNvbHV0aW9uRm9yR2F1Z2UucGl4ZWxzXG4gICAgICAgICAgLm1hcChwID0+IG5ldyBNYXBMYXRMbmcocC55ICsgMC4wMDUsIHAueCArIDAuMDEsIDAsICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSwgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLCAxKSkpO1xuXG4gICAgICBjb25zdCB0aW1lRGVsdGFJbk1pbnV0ZXMgPSBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0VGltZURlbHRhSW5NaW51dGVzKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50c0RldGFpbCA9ICcnICsgc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdhdWdlTGFiZWwgKyAnID4gJ1xuICAgICAgICArIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldEdhdWdlVmFsdWUoKSAqIDEwMCkgLyAxMDAgKyAnIC8gJ1xuICAgICAgICArIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldFJhaW5WYWx1ZSgpICogMTAwKSAvIDEwMFxuICAgICAgICArICcgZFQ9JyArIHRpbWVEZWx0YUluTWludXRlcztcblxuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF07XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW1xuICAgICAgbmV3IE1hcExhdExuZyh0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCwgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsIHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VJZCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VMYWJlbCArICc+JyArIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUudmFsdWUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUudmFsdWUpLFxuICAgIF07XG5cbiAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG5cbiAgICBjb25zdCBwaXhlbHM6IE1hcExhdExuZ1tdID0gW107XG4gICAgZm9yIChjb25zdCByYWluQ2FydGVzaWFuVmFsdWUgb2YgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMucmFpbkNhcnRlc2lhblZhbHVlcykge1xuICAgICAgcGl4ZWxzLnB1c2gobmV3IE1hcExhdExuZyhyYWluQ2FydGVzaWFuVmFsdWUubGF0ICsgMC4wMDUsIHJhaW5DYXJ0ZXNpYW5WYWx1ZS5sbmcgKyAwLjAxKSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBwaXhlbHM7XG5cbiAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IHBpeGVsc1NvbHV0aW9ucztcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZENvbXBhcmVzVGltZWxpbmUodGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10sIHdpdGhDb21wYXJlRHVwbGljYXRlOiBib29sZWFuKTogUHJvbWlzZTxJQ29tcGFyZXM+IHtcbiAgICBjb25zdCBkYXRlczogRGF0ZVtdID0gdGFyZ2V0c09yZGVyZWQubWFwKHQgPT4gdC5kYXRlKTtcbiAgICBjb25zdCBxdWFsaXRpZXM6IFJhaW5Db21wdXRhdGlvblF1YWxpdHlbXSA9IGRhdGVzXG4gICAgICAubWFwKGQgPT4gdGhpcy5nZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5KGQpKVxuICAgICAgLmZpbHRlcihkID0+ICEhZCk7XG4gICAgdGhpcy5idWlsZENvbXBhcmVzID0gU3BlZWRNYXRyaXhDb250YWluZXIuQnVpbGRDb21wYXJlcyhxdWFsaXRpZXMsICF3aXRoQ29tcGFyZUR1cGxpY2F0ZSk7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb21wYXJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb21wYXJlUGVyRGF0ZShkYXRlOiBEYXRlKTogSUNvbXBhcmVQZXJEYXRlIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlc1BlckRhdGUuZmlsdGVyKGMgPT4gYy5kYXRlLmdldFRpbWUoKSA9PT0gZGF0ZS5nZXRUaW1lKCkpO1xuICAgIGlmIChleGlzdGluZy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBleGlzdGluZ1swXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoY29tcGFyZUluZGV4IDwgMCB8fCB0aGlzLmNvbXBhcmVOYW1lcy5sZW5ndGggPCBjb21wYXJlSW5kZXgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51aUNvbXBhcmVzW2NvbXBhcmVJbmRleF0uY29tcGFyZVBvaW50c0hpc3Rvcnk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYW5Db21wYXJlUXVhbGl0eShkZXRhaWxzPzogc3RyaW5nKSB7XG4gICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGRldGFpbHM7XG4gICAgdGhpcy5jb21wYXJlTmFtZXMgPSBbXTtcbiAgICB0aGlzLnVpQ29tcGFyZXMgPSBbXTtcbiAgICB0aGlzLmNvbXBhcmVTcGVlZE1hdHJpeCA9IFtdO1xuICAgIHRoaXMuY29tcGFyZVRydXN0ZWRJbmRpY2F0b3IgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBuZXcgRGF0ZSgtMSk7XG4gICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSAnJztcbiAgICB0aGlzLmN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NcyA9IC0xO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKHRhcmdldHNPcmRlcmVkOiBJQ29tcGFyZVRhcmdldFtdKSB7XG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0c09yZGVyZWQpIHtcbiAgICAgIGlmICghdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldICYmIHRhcmdldC5yYWluQ29tcHV0YXRpb25RdWFsaXR5SWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGVbdGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKV0gPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0UmFpbkNvbXBhcmVCeUlkKHRoaXMucmFpbk5vZGUuZ2V0SWQoKSwgdGFyZ2V0LnJhaW5Db21wdXRhdGlvbklkLCB0YXJnZXQucmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5KGRhdGU6IERhdGUpOiBSYWluQ29tcHV0YXRpb25RdWFsaXR5IHtcbiAgICByZXR1cm4gdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW2RhdGUudG9JU09TdHJpbmcoKV07XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKSB7XG4gICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMudWlDb21wYXJlcykge1xuICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2gocCA9PiB7XG4gICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHAuciA9IDM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29tcGFyZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50cztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncmVzZXRTZWxlY3RlZEdhdWdlcyByZXNldCcpO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG4gIH1cbn1cbiJdfQ==
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9Db21wYXJlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBNEYsb0JBQW9CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDNUksT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQWtCakMsTUFBTSxPQUFPLGNBQWM7SUE0QnpCLFlBQ1ksUUFBa0IsRUFDbEIsY0FBOEIsRUFDakMsWUFBd0IsR0FBRyxFQUFFO0lBQ3BDLENBQUM7UUFIUyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUNmO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFUyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQVcsRUFBRSxLQUFXLEVBQUUsT0FBZTtRQUVwRSxNQUFNLFdBQVcsR0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM1QyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckYsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFF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QUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01hcExhdExuZ30gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtJQ29tcGFyZVBlckRhdGUsIElDb21wYXJlcywgUG9zaXRpb25WYWx1ZSwgUXVhbGl0eVBvaW50LCBSYWluQ29tcHV0YXRpb25RdWFsaXR5LCBSYWluTm9kZSwgU3BlZWRNYXRyaXhDb250YWluZXJ9IGZyb20gJ3JhYWluLW1vZGVsJztcbmltcG9ydCB7WFlUeXBlfSBmcm9tICcuLi94eXR5cGUnO1xuaW1wb3J0IHtQcm9maWxlU2VydmljZX0gZnJvbSAnLi4vcHJvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7RnJhbWVTZXR9IGZyb20gJy4vRnJhbWVTZXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb21wYXJlVGFyZ2V0IHtcbiAgZGF0ZTogRGF0ZTtcbiAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZztcbiAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVJQ29tcGFyZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgY29tcGFyZVBvaW50czogWFlUeXBlW107XG4gIGNvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcbiAgY29tcGFyZVBvaW50c0hpc3Rvcnk6IFF1YWxpdHlQb2ludFtdO1xuICByZW1hcmtzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYXJlTWFuYWdlciB7XG5cbiAgLy8gcHVibGljIGNvbXB1dGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBwdWJsaWMgZ2F1Z2VzSW5Db21wYXJlOiBNYXBMYXRMbmdbXTtcbiAgcHVibGljIHNlbGVjdGVkR2F1Z2VzOiBNYXBMYXRMbmdbXTtcbiAgcHVibGljIHNlbGVjdGVkUGl4ZWxzOiBNYXBMYXRMbmdbXTtcbiAgcHVibGljIHBpeGVsc1NvbHV0aW9uczogTWFwTGF0TG5nW11bXTtcblxuICAvLyBmcm9tIGNvbXBhcmVzVGltZWxpbmVcbiAgcHVibGljIGNvbXBhcmVOYW1lczogc3RyaW5nW107XG4gIHB1YmxpYyB1aUNvbXBhcmVzOiBJVUlDb21wYXJlW107XG4gIHB1YmxpYyBjb21wYXJlU3BlZWRNYXRyaXg6IFBvc2l0aW9uVmFsdWVbXTtcbiAgcHVibGljIGNvbXBhcmVWZXJzaW9uOiBzdHJpbmc7XG4gIHB1YmxpYyBjb21wYXJlVHJ1c3RlZEluZGljYXRvcjogbnVtYmVyO1xuXG4gIHB1YmxpYyBjdXJyZW50UXVhbGl0eURvbmVEYXRlOiBEYXRlO1xuICBwdWJsaWMgY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5OiBzdHJpbmc7XG4gIHB1YmxpYyBjdXJyZW50UXVhbGl0eVRpbWVTcGVudEluTXM6IG51bWJlcjtcbiAgcHVibGljIGdsb2JhbENvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuXG4gIHByb3RlY3RlZCBidWlsZENvbXBhcmVzOiBJQ29tcGFyZXM7XG4gIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlOiBRdWFsaXR5UG9pbnQ7XG4gIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHM6IFF1YWxpdHlQb2ludDtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2VJblBvaW50c0RldGFpbDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByYWluTm9kZTogUmFpbk5vZGUsXG4gICAgcHJvdGVjdGVkIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZSxcbiAgICBwdWJsaWMgb25DaGFuZ2VzOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIH1cbiAgKSB7XG4gICAgdGhpcy5jbGVhbkFsbCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBDb21wYXJlRGF0ZShkYXRlMTogRGF0ZSwgZGF0ZTI6IERhdGUsIG1pbnV0ZXM6IG51bWJlcik6IGJvb2xlYW4ge1xuXG4gICAgY29uc3QgZGF0ZTFBc0RhdGU6IERhdGUgPSBuZXcgRGF0ZShkYXRlMS5nZXRUaW1lKCkpO1xuICAgIGNvbnN0IGRhdGUyRGlmZiA9IG5ldyBEYXRlKGRhdGUyLmdldFRpbWUoKSk7XG4gICAgZGF0ZTJEaWZmLnNldE1pbnV0ZXMoZGF0ZTJEaWZmLmdldE1pbnV0ZXMoKSArIG1pbnV0ZXMpO1xuICAgIGNvbnN0IGRpZmYgPSBNYXRoLnJvdW5kKChkYXRlMUFzRGF0ZS5nZXRUaW1lKCkgLSBkYXRlMkRpZmYuZ2V0VGltZSgpKSAvICg2MCAqIDEwMDApKTtcbiAgICByZXR1cm4gZGlmZiA9PT0gMDtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhbkFsbCgpIHtcbiAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcblxuICAgIHRoaXMuYnVpbGRDb21wYXJlcyA9IHtcbiAgICAgIGNvbXBhcmVzUGVyRGF0ZTogW10sXG4gICAgICBjb21wYXJlQ3VtdWxhdGl2ZTogbnVsbFxuICAgIH07XG4gICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzID0gW107XG4gICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzTWF4ID0gbmV3IFhZVHlwZSgwLCAwKTtcbiAgICB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGUgPSB7fTtcblxuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgIHRoaXMuY2xlYW5Db21wYXJlUXVhbGl0eSgnbm8gY29tcGFyZSB5ZXQnKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQpIHtcblxuICAgIGNvbnN0IGNvbXBhcmVQZXJEYXRlID0gdGhpcy5nZXRDb21wYXJlUGVyRGF0ZShmcmFtZVNldC5kYXRlKTtcblxuICAgIGlmICghY29tcGFyZVBlckRhdGUgfHwgIWNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHk/LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lcikge1xuICAgICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjdXJyZW50IHF1YWxpdHkgJyArIE9iamVjdC5rZXlzKHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSkpO1xuICAgICAgdGhpcy5vbkNoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1aUNvbXBhcmVzOiBJVUlDb21wYXJlW10gPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmUubWFwKGMgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICBjb21wYXJlUG9pbnRzOiBjLnF1YWxpdHlQb2ludHMubWFwKHAgPT4gbmV3IFhZVHlwZShwLmdldEdhdWdlVmFsdWUoKSwgcC5nZXRSYWluVmFsdWUoKSwgMiwgcC5nYXVnZUxhYmVsLCBwLmdhdWdlSWQpKSxcbiAgICAgICAgY29tcGFyZVBvaW50c01heDogbmV3IFhZVHlwZShjLm1heFZhbHVlICogMS4yLCBjLm1heFZhbHVlICogMS4yKSxcbiAgICAgICAgY29tcGFyZVBvaW50c0hpc3Rvcnk6IGMucXVhbGl0eVBvaW50c0xlZ2FjeSxcbiAgICAgICAgcmVtYXJrczogYy5yZW1hcmtzXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5jdXJyZW50UXVhbGl0eURvbmVEYXRlID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5pc0RvbmVEYXRlO1xuICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS50aW1lU3BlbnRJbk1zO1xuICAgIHRoaXMuY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5ID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5sYXVuY2hlZEJ5O1xuICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmdldFZlcnNpb24oKTtcbiAgICB0aGlzLmNvbXBhcmVTcGVlZE1hdHJpeCA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLnJlbmRlck1lcmdlZE1hdHJpeCh7bm9ybWFsaXplOiB0cnVlfSk7XG4gICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldFRydXN0ZWRJbmRpY2F0b3JzKClbMF07XG4gICAgdGhpcy5jb21wYXJlTmFtZXMgPSB1aUNvbXBhcmVzLm1hcChjID0+IGMubmFtZSk7XG4gICAgdGhpcy51aUNvbXBhcmVzID0gdWlDb21wYXJlcztcblxuICAgIHRoaXMub25DaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkodGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhbikge1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQpO1xuXG4gICAgICBhd2FpdCB0aGlzLmJ1aWxkQ29tcGFyZXNUaW1lbGluZSh0YXJnZXRzT3JkZXJlZCwgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuXG4gICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAvLyB0aHJvdyBFcnJvcignbmVlZHMgY3VtdWxhdGl2ZSBjb21wYXJlJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY291bnRGb3JBdmVyYWdlID0gdGFyZ2V0c09yZGVyZWQubGVuZ3RoO1xuICAgICAgY29uc3QgbWF4VmFsdWUgPSAodGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLm1heFZhbHVlIC8gY291bnRGb3JBdmVyYWdlKSAqIDEuMjtcbiAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5xdWFsaXR5UG9pbnRzXG4gICAgICAgIC5tYXAocXAgPT4gbmV3IFhZVHlwZShxcC5nZXRHYXVnZVZhbHVlKCkgLyBjb3VudEZvckF2ZXJhZ2UsXG4gICAgICAgICAgcXAuZ2V0UmFpblZhbHVlKCkgLyBjb3VudEZvckF2ZXJhZ2UsXG4gICAgICAgICAgMiwgcXAuZ2F1Z2VMYWJlbCwgcXAuZ2F1Z2VJZCkpO1xuICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzTWF4ID0gbmV3IFhZVHlwZShtYXhWYWx1ZSwgbWF4VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZXRHYXVnZXMoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3NldEdhdWdlcycpO1xuXG4gICAgY29uc3QgcXVhbGl0eVBvaW50czogUXVhbGl0eVBvaW50W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbXBhcmUgb2YgdGhpcy51aUNvbXBhcmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHF1YWxpdHlQb2ludCBvZiBjb21wYXJlLmNvbXBhcmVQb2ludHNIaXN0b3J5KSB7XG4gICAgICAgIGNvbnN0IGFscmVhZHlBZGRlZCA9IHF1YWxpdHlQb2ludHMuZmlsdGVyKHAgPT4gcD8uZ2F1Z2VJZCA9PT0gcXVhbGl0eVBvaW50LmdhdWdlSWQpO1xuICAgICAgICBpZiAoYWxyZWFkeUFkZGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHF1YWxpdHlQb2ludHMucHVzaChxdWFsaXR5UG9pbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBxdWFsaXR5UG9pbnRzLm1hcChwID0+IHtcbiAgICAgIHJldHVybiBuZXcgTWFwTGF0TG5nKHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sYXQsIHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsIDAsXG4gICAgICAgIHAuZ2F1Z2VJZCwgcC5nYXVnZUxhYmVsICsgJz4nICsgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgIHAuZ2V0R2F1Z2VWYWx1ZSgpKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nLCBjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgIC8vIGNvbnNvbGUubG9nKCdzZWxlY3RHYXVnZScsIGdhdWdlSWQsIGNvbXBhcmVJbmRleCk7XG5cbiAgICBpZiAoZ2F1Z2VJZCkge1xuICAgICAgY29uc3QgeHlzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihwID0+IHAuZ2F1Z2VJZCA9PT0gZ2F1Z2VJZCk7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSB4eXMubGVuZ3RoID09PSAxID8geHlzWzBdIDogbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHYXVnZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHRoaXMuZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4KS5maWx0ZXIocCA9PiBwLmdhdWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZS5nYXVnZUlkKTtcbiAgICBsZXQgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdID0gW107XG5cbiAgICBpZiAoc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgcmVtYXJrcyA9IEpTT04ucGFyc2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLnJlbWFyaylcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuY3JpdGVyaWFBdHRlbXB0ZWRUb0JlTWluaW11bSAtIGIuY3JpdGVyaWFBdHRlbXB0ZWRUb0JlTWluaW11bSk7XG4gICAgICBjb25zb2xlLmxvZyhyZW1hcmtzKTtcbiAgICAgIHBpeGVsc1NvbHV0aW9ucyA9IHJlbWFya3NcbiAgICAgICAgLm1hcChyZW1hcmsgPT4gcmVtYXJrLnNvbHV0aW9uRm9yR2F1Z2UucGl4ZWxzXG4gICAgICAgICAgLm1hcChwID0+IG5ldyBNYXBMYXRMbmcocC55ICsgMC4wMDUsIHAueCArIDAuMDEsIDAsICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSwgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLCAxKSkpO1xuXG4gICAgICBjb25zdCB0aW1lRGVsdGFJbk1pbnV0ZXMgPSBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0VGltZURlbHRhSW5NaW51dGVzKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50c0RldGFpbCA9ICcnICsgc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdhdWdlTGFiZWwgKyAnID4gJ1xuICAgICAgICArIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldEdhdWdlVmFsdWUoKSAqIDEwMCkgLyAxMDAgKyAnIC8gJ1xuICAgICAgICArIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldFJhaW5WYWx1ZSgpICogMTAwKSAvIDEwMFxuICAgICAgICArICcgZFQ9JyArIHRpbWVEZWx0YUluTWludXRlcztcblxuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF07XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW1xuICAgICAgbmV3IE1hcExhdExuZyh0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCwgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsIHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VJZCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VMYWJlbCArICc+JyArIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUudmFsdWUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUudmFsdWUpLFxuICAgIF07XG5cbiAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG5cbiAgICBjb25zdCBwaXhlbHM6IE1hcExhdExuZ1tdID0gW107XG4gICAgZm9yIChjb25zdCByYWluQ2FydGVzaWFuVmFsdWUgb2YgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMucmFpbkNhcnRlc2lhblZhbHVlcykge1xuICAgICAgcGl4ZWxzLnB1c2gobmV3IE1hcExhdExuZyhyYWluQ2FydGVzaWFuVmFsdWUubGF0ICsgMC4wMDUsIHJhaW5DYXJ0ZXNpYW5WYWx1ZS5sbmcgKyAwLjAxKSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBwaXhlbHM7XG5cbiAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IHBpeGVsc1NvbHV0aW9ucztcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZENvbXBhcmVzVGltZWxpbmUodGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10sIHdpdGhDb21wYXJlRHVwbGljYXRlOiBib29sZWFuKTogUHJvbWlzZTxJQ29tcGFyZXM+IHtcbiAgICBjb25zdCBkYXRlczogRGF0ZVtdID0gdGFyZ2V0c09yZGVyZWQubWFwKHQgPT4gdC5kYXRlKTtcbiAgICBjb25zdCBxdWFsaXRpZXM6IFJhaW5Db21wdXRhdGlvblF1YWxpdHlbXSA9IGRhdGVzXG4gICAgICAuZmlsdGVyKGQgPT4gISFkKVxuICAgICAgLm1hcChkID0+IHRoaXMuZ2V0UmFpbkNvbXB1dGF0aW9uUXVhbGl0eShkKSk7XG4gICAgdGhpcy5idWlsZENvbXBhcmVzID0gU3BlZWRNYXRyaXhDb250YWluZXIuQnVpbGRDb21wYXJlcyhxdWFsaXRpZXMsICF3aXRoQ29tcGFyZUR1cGxpY2F0ZSk7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb21wYXJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb21wYXJlUGVyRGF0ZShkYXRlOiBEYXRlKTogSUNvbXBhcmVQZXJEYXRlIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlc1BlckRhdGUuZmlsdGVyKGMgPT4gYy5kYXRlLmdldFRpbWUoKSA9PT0gZGF0ZS5nZXRUaW1lKCkpO1xuICAgIGlmIChleGlzdGluZy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBleGlzdGluZ1swXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoY29tcGFyZUluZGV4IDwgMCB8fCB0aGlzLmNvbXBhcmVOYW1lcy5sZW5ndGggPCBjb21wYXJlSW5kZXgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51aUNvbXBhcmVzW2NvbXBhcmVJbmRleF0uY29tcGFyZVBvaW50c0hpc3Rvcnk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYW5Db21wYXJlUXVhbGl0eShkZXRhaWxzPzogc3RyaW5nKSB7XG4gICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGRldGFpbHM7XG4gICAgdGhpcy5jb21wYXJlTmFtZXMgPSBbXTtcbiAgICB0aGlzLnVpQ29tcGFyZXMgPSBbXTtcbiAgICB0aGlzLmNvbXBhcmVTcGVlZE1hdHJpeCA9IFtdO1xuICAgIHRoaXMuY29tcGFyZVRydXN0ZWRJbmRpY2F0b3IgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBuZXcgRGF0ZSgtMSk7XG4gICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSAnJztcbiAgICB0aGlzLmN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NcyA9IC0xO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKHRhcmdldHNPcmRlcmVkOiBJQ29tcGFyZVRhcmdldFtdKSB7XG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0c09yZGVyZWQpIHtcbiAgICAgIGlmICghdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldICYmIHRhcmdldC5yYWluQ29tcHV0YXRpb25RdWFsaXR5SWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGVbdGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKV0gPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0UmFpbkNvbXBhcmVCeUlkKHRoaXMucmFpbk5vZGUuZ2V0SWQoKSwgdGFyZ2V0LnJhaW5Db21wdXRhdGlvbklkLCB0YXJnZXQucmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5KGRhdGU6IERhdGUpOiBSYWluQ29tcHV0YXRpb25RdWFsaXR5IHtcbiAgICByZXR1cm4gdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW2RhdGUudG9JU09TdHJpbmcoKV07XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKSB7XG4gICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMudWlDb21wYXJlcykge1xuICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2gocCA9PiB7XG4gICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHAuciA9IDM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29tcGFyZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50cztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncmVzZXRTZWxlY3RlZEdhdWdlcyByZXNldCcpO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG4gIH1cbn1cbiJdfQ==