@spicainternational/ngx-sds-components 8.6.1 → 8.7.1

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.
@@ -23,7 +23,7 @@ export class SdsActiveRoutePatternPipe {
23
23
  .replace(/\*\*/g, '[^?#]*')
24
24
  .replace(/[#]/g, '\\#')
25
25
  .replace(/\//g, '\\/'));
26
- return `^\\/(${patterns.join('|')})([?#]|$)`;
26
+ return `^\\/(${patterns.join('|')})(\\/[^?#]*)*([?#]|$)`;
27
27
  }
28
28
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SdsActiveRoutePatternPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
29
29
  static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: SdsActiveRoutePatternPipe, isStandalone: true, name: "sdsActiveRoutePattern" }); }
@@ -35,4 +35,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
35
35
  standalone: true,
36
36
  }]
37
37
  }] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLXJvdXRlLXBhdHRlcm4ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL25hdmlnYXRpb24vcGlwZXMvYWN0aXZlLXJvdXRlLXBhdHRlcm4ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFFcEQ7Ozs7Ozs7Ozs7OztHQVlHO0FBS0gsTUFBTSxPQUFPLHlCQUF5QjtJQUNsQyxTQUFTLENBQUMsS0FBd0I7UUFDOUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxNQUFnQjtRQUNwQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ2hDLEtBQUs7YUFDQSxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQzthQUMxQixPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQzthQUN0QixPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUM3QixDQUFDO1FBQ0YsT0FBTyxRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztJQUNqRCxDQUFDOytHQWRRLHlCQUF5Qjs2R0FBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUpyQyxJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSx1QkFBdUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBIHN0YW5kYWxvbmUgQW5ndWxhciBwaXBlIHRoYXQgZHluYW1pY2FsbHkgZ2VuZXJhdGVzIGEgc3RyaWN0IFJlZ3VsYXIgRXhwcmVzc2lvbiBzdHJpbmcgXG4gKiB1c2VkIHRvIGRldGVybWluZSBhY3RpdmUgcm91dGUgc3RhdGVzLiBJdCB0cmFuc2Zvcm1zIGEgc2luZ2xlIHJvdXRlIG9yIGFycmF5IG9mIHJvdXRlcyBcbiAqIGludG8gYSB1bmlmaWVkLCBVUkwtc2FmZSByZWdleCBwYXR0ZXJuLlxuICogKiAjIyMgS2V5IFRlY2huaWNhbCBCZWhhdmlvcnM6XG4gKiAtICoqU3RyaWN0IEJvdW5kYXJ5IEVuZm9yY2VtZW50OioqIFdyYXBzIHRoZSByZXN1bHRpbmcgcGF0dGVybiB3aXRoIGBeXFwvYCAoc3RhcnQpIGFuZCBcbiAqIGAoWz8jXXwkKWAgKGVuZCwgcXVlcnkgcGFyYW0sIG9yIGhhc2ggZnJhZ21lbnQpIHRvIGVuc3VyZSBleGFjdCBwYXRoIG1hdGNoaW5nIGFuZCBwcmV2ZW50IGZhbHNlIHBvc2l0aXZlcy5cbiAqIC0gKipXaWxkY2FyZCBTdXBwb3J0OioqIEludGVyY2VwdHMgdGhlIGAqKmAgc3ludGF4IGFuZCBjb21waWxlcyBpdCBpbnRvIGEgc2FmZSByZWdleCB3aWxkY2FyZCAoYFtePyNdKmApLCBcbiAqIGFsbG93aW5nIGZvciBlYXN5IG1hdGNoaW5nIG9mIGEgYmFzZSByb3V0ZSBhbmQgYWxsIGRlZXBseSBuZXN0ZWQgY2hpbGQgcm91dGVzLlxuICogLSAqKkF1dG8tRXNjYXBpbmc6KiogQXV0b21hdGljYWxseSBzYW5pdGl6ZXMgaW5wdXQgYnkgZXNjYXBpbmcgZm9yd2FyZCBzbGFzaGVzIChgL2ApIGFuZCBoYXNoIHN5bWJvbHMgKGAjYCkuXG4gKiAqIEBwYXJhbSByb3V0ZSBBIHNpbmdsZSByb3V0ZSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygcm91dGUgc3RyaW5ncyAoZS5nLiwgYCduYXYtc2hvd2Nhc2UnYCBvciBgWydyb3V0ZScsICdyb3V0ZS8qKiddYClcbiAqIEByZXR1cm5zIEEgc3RyaWN0bHkgYm91bmRlZCByZWdleCBwYXR0ZXJuIHN0cmluZyAoZS5nLiwgYF5cXC8ocm91dGV8cm91dGVcXC9bXj8jXSopKFs/I118JClgKVxuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ3Nkc0FjdGl2ZVJvdXRlUGF0dGVybicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU2RzQWN0aXZlUm91dGVQYXR0ZXJuUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShyb3V0ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByb3V0ZXMgPSBBcnJheS5pc0FycmF5KHJvdXRlKSA/IHJvdXRlIDogW3JvdXRlXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRBY3RpdmVSb3V0ZVBhdHRlcm4ocm91dGVzKTtcbiAgICB9XG5cbiAgICBidWlsZEFjdGl2ZVJvdXRlUGF0dGVybihyb3V0ZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSByb3V0ZXMubWFwKHJvdXRlID0+IFxuICAgICAgICAgICAgcm91dGVcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwqXFwqL2csICdbXj8jXSonKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bI10vZywgJ1xcXFwjJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICdcXFxcLycpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBgXlxcXFwvKCR7cGF0dGVybnMuam9pbignfCcpfSkoWz8jXXwkKWA7XG4gICAgfVxufSJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLXJvdXRlLXBhdHRlcm4ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL25hdmlnYXRpb24vcGlwZXMvYWN0aXZlLXJvdXRlLXBhdHRlcm4ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFFcEQ7Ozs7Ozs7Ozs7OztHQVlHO0FBS0gsTUFBTSxPQUFPLHlCQUF5QjtJQUNsQyxTQUFTLENBQUMsS0FBd0I7UUFDOUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxNQUFnQjtRQUNwQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ2hDLEtBQUs7YUFDQSxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQzthQUMxQixPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQzthQUN0QixPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUM3QixDQUFDO1FBQ0YsT0FBTyxRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDO0lBQzdELENBQUM7K0dBZFEseUJBQXlCOzZHQUF6Qix5QkFBeUI7OzRGQUF6Qix5QkFBeUI7a0JBSnJDLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLHVCQUF1QjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEEgc3RhbmRhbG9uZSBBbmd1bGFyIHBpcGUgdGhhdCBkeW5hbWljYWxseSBnZW5lcmF0ZXMgYSBzdHJpY3QgUmVndWxhciBFeHByZXNzaW9uIHN0cmluZyBcbiAqIHVzZWQgdG8gZGV0ZXJtaW5lIGFjdGl2ZSByb3V0ZSBzdGF0ZXMuIEl0IHRyYW5zZm9ybXMgYSBzaW5nbGUgcm91dGUgb3IgYXJyYXkgb2Ygcm91dGVzIFxuICogaW50byBhIHVuaWZpZWQsIFVSTC1zYWZlIHJlZ2V4IHBhdHRlcm4uXG4gKiAqICMjIyBLZXkgVGVjaG5pY2FsIEJlaGF2aW9yczpcbiAqIC0gKipTdHJpY3QgQm91bmRhcnkgRW5mb3JjZW1lbnQ6KiogV3JhcHMgdGhlIHJlc3VsdGluZyBwYXR0ZXJuIHdpdGggYF5cXC9gIChzdGFydCkgYW5kIFxuICogYChbPyNdfCQpYCAoZW5kLCBxdWVyeSBwYXJhbSwgb3IgaGFzaCBmcmFnbWVudCkgdG8gZW5zdXJlIGV4YWN0IHBhdGggbWF0Y2hpbmcgYW5kIHByZXZlbnQgZmFsc2UgcG9zaXRpdmVzLlxuICogLSAqKldpbGRjYXJkIFN1cHBvcnQ6KiogSW50ZXJjZXB0cyB0aGUgYCoqYCBzeW50YXggYW5kIGNvbXBpbGVzIGl0IGludG8gYSBzYWZlIHJlZ2V4IHdpbGRjYXJkIChgW14/I10qYCksIFxuICogYWxsb3dpbmcgZm9yIGVhc3kgbWF0Y2hpbmcgb2YgYSBiYXNlIHJvdXRlIGFuZCBhbGwgZGVlcGx5IG5lc3RlZCBjaGlsZCByb3V0ZXMuXG4gKiAtICoqQXV0by1Fc2NhcGluZzoqKiBBdXRvbWF0aWNhbGx5IHNhbml0aXplcyBpbnB1dCBieSBlc2NhcGluZyBmb3J3YXJkIHNsYXNoZXMgKGAvYCkgYW5kIGhhc2ggc3ltYm9scyAoYCNgKS5cbiAqICogQHBhcmFtIHJvdXRlIEEgc2luZ2xlIHJvdXRlIHN0cmluZyBvciBhbiBhcnJheSBvZiByb3V0ZSBzdHJpbmdzIChlLmcuLCBgJ25hdi1zaG93Y2FzZSdgIG9yIGBbJ3JvdXRlJywgJ3JvdXRlLyoqJ11gKVxuICogQHJldHVybnMgQSBzdHJpY3RseSBib3VuZGVkIHJlZ2V4IHBhdHRlcm4gc3RyaW5nIChlLmcuLCBgXlxcLyhyb3V0ZXxyb3V0ZVxcL1tePyNdKikoWz8jXXwkKWApXG4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnc2RzQWN0aXZlUm91dGVQYXR0ZXJuJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBTZHNBY3RpdmVSb3V0ZVBhdHRlcm5QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHJvdXRlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJvdXRlcyA9IEFycmF5LmlzQXJyYXkocm91dGUpID8gcm91dGUgOiBbcm91dGVdO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZEFjdGl2ZVJvdXRlUGF0dGVybihyb3V0ZXMpO1xuICAgIH1cblxuICAgIGJ1aWxkQWN0aXZlUm91dGVQYXR0ZXJuKHJvdXRlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBwYXR0ZXJucyA9IHJvdXRlcy5tYXAocm91dGUgPT4gXG4gICAgICAgICAgICByb3V0ZVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCpcXCovZywgJ1tePyNdKicpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1sjXS9nLCAnXFxcXCMnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8vZywgJ1xcXFwvJylcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGBeXFxcXC8oJHtwYXR0ZXJucy5qb2luKCd8Jyl9KShcXFxcL1tePyNdKikqKFs/I118JClgO1xuICAgIH1cbn0iXX0=
@@ -314,7 +314,7 @@ export class SdsTimelineComponent {
314
314
  });
315
315
  }
316
316
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SdsTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
317
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SdsTimelineComponent, isStandalone: true, selector: "sds-timeline", inputs: { start: "start", end: "end", items: "items", pointInTimeItems: "pointInTimeItems", itemTemplate: "itemTemplate", pointInTimeTemplate: "pointInTimeTemplate", dayLabelTemplate: "dayLabelTemplate", dayLabelCustomDataFn: "dayLabelCustomDataFn", tickFrequency: "tickFrequency", hourLabelFrequency: "hourLabelFrequency", zoomPercent: "zoomPercent", viewOffsetPercent: "viewOffsetPercent", maxZoomPercent: "maxZoomPercent", showHourLabels: "showHourLabels", hourLabelClass: "hourLabelClass", showDayLabels: "showDayLabels", dayLabelClass: "dayLabelClass", showTimeline: "showTimeline", hourTickClass: "hourTickClass", timelineHeight: "timelineHeight", enableZoomAndDrag: "enableZoomAndDrag", offSetMinutes: "offSetMinutes", locales: "locales", cutOffset: "cutOffset", defaultCursor: "defaultCursor" }, outputs: { zoomPercentChange: "zoomPercentChange", viewOffsetPercentChange: "viewOffsetPercentChange" }, host: { listeners: { "window:mousemove": "onDragMove($event)", "window:touchmove": "onDragMoveTouch($event)", "window:mouseup": "onDragEnd($event)", "window:touchend": "onDragEnd($event)" } }, viewQueries: [{ propertyName: "_viewport", first: true, predicate: ["viewport"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #defaultItemTemplate let-item=\"item\">\n <div \n class=\"sds-timeline-item h-100\"\n [title]=\"item.hint\"\n >\n </div>\n</ng-template>\n\n<ng-template #defaultPointInTimeItemTemplate let-item=\"item\">\n <div \n class=\"sds-timeline-item h-100\"\n [title]=\"item.hint\"\n >\n </div>\n</ng-template>\n\n<ng-template #defaultDayLabelTemplate let-label=\"label\">\n {{label.label}}\n</ng-template>\n\n<div \n #viewport\n class=\"sds-timeline-viewport\"\n (wheel)=\"onScroll($event)\"\n\n (mousedown)=\"onDragStart($event)\"\n (touchstart)=\"onDragStart($event)\"\n >\n\n <div \n class=\"sds-timeline-container d-flex flex-column\"\n [style.left.%]=\"viewOffsetPercent\"\n [style.width.%]=\"zoomPercent\"\n [style.cursor]=\"isDragging ? 'ew-resize' : defaultCursor\"\n >\n\n <div\n *ngIf=\"showDayLabels\" \n class=\"sds-timeline-day-header\">\n\n <div \n *ngFor=\"let label of dayLabels\"\n class=\"sds-day-label\" \n [ngClass]=\"dayLabelClass ?? null\"\n [style.left.%]=\"label.x\"\n [style.width.%]=\"label.width\"\n >\n <ng-container \n [ngTemplateOutlet]=\"dayLabelTemplate ? dayLabelTemplate : defaultDayLabelTemplate\"\n [ngTemplateOutletContext]=\"{label: label}\">\n </ng-container> \n </div>\n </div>\n\n <div \n *ngIf=\"showHourLabels\" \n class=\"sds-timeline-hour-header\">\n\n <div \n *ngFor=\"let label of hourLabels;\"\n class=\"sds-hour-label\" \n [ngClass]=\"hourLabelClass ?? null\"\n [style.left.%]=\"label.x\"\n [style.width.rem]=\"1.2\"\n [ngStyle]=\"{'left': 'calc(' + label.x + '% - 0.6rem)'}\"\n >\n \n {{label.label}}\n \n </div>\n </div>\n\n <div \n *ngIf=\"showTimeline\"\n class=\"sds-timeline flex-grow-1\"\n [style.height]=\"timelineHeight\"\n >\n\n <div \n *ngFor=\"let tick of hourTicks\"\n class=\"sds-timeline-tick\" \n [ngClass]=\"hourTickClass ?? null\"\t\n [ngStyle]=\"tick.x == 100 ? {'left': 'calc(' + tick.x +'% - 1px)'} : {'left': 'calc(' + tick.x + '% - 0.5px)'}\"\n >\n </div>\n\n <div \n *ngFor=\"let item of presentationItems\"\n class=\"sds-timeline-item-container\"\n [ngClass]=\"item.class ?? null\"\n [ngStyle]=\"{\n 'width': 'max(' + item.width +'%, 1px)',\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \n }\"\n\n [style.left.%]=\"item.x\"\n [style.height]=\"item.height\"\n [style.backgroundColor]=\"item.backgroundColor\"\n >\n\n <ng-container \n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{item: item}\">\n </ng-container> \n </div>\n\n\n <!-- [ngClass]=\"item.class\"\t -->\n <div *ngFor=\"let item of presentationPointInTimeItems\"\n class=`sds-timeline-point-in-time-item-container ${item.class}`\n [style.height]=\"item.height\"\n [style.width]=\"item.width\"\n [ngStyle]=\"{\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \n 'left': 'calc(' + item.x + '% - max( calc(' + item.width +'/2), 1px))',\n \n }\"\n [style.backgroundColor]=\"item.backgroundColor\"\n >\n\n <ng-container \n [ngTemplateOutlet]=\"pointInTimeTemplate ? pointInTimeTemplate : defaultPointInTimeItemTemplate\"\n [ngTemplateOutletContext]=\"{item: item}\">\n </ng-container> \n\n </div>\n\n </div>\n </div>\n</div>\n", styles: [".sds-timeline-viewport{overflow:hidden}.sds-timeline-viewport .sds-timeline-container{width:100%;min-height:0;position:relative;-webkit-user-select:none;user-select:none}.sds-timeline-viewport .sds-timeline-container .sds-timeline-day-header{height:1.6rem;position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline-day-header .sds-day-label{position:absolute;display:inline;text-align:center;font-size:.875rem}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header{height:1.6rem;position:relative;font-size:.8em}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header .sds-hour-label{position:absolute;display:inline;text-align:center;font-size:.875rem}.sds-timeline-viewport .sds-timeline-container .sds-timeline{position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-tick{border-left:1px solid rgb(187,187,187);height:100%;position:absolute;display:inline}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-item-container{height:100%;position:absolute;display:inline;top:20%;height:60%}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-item-container .sds-timeline-item{position:relative;width:100%}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-point-in-time-item-container{width:1px;height:1px;position:absolute}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-point-in-time-item-container .sds-timeline-item{position:relative;width:100%}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
317
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SdsTimelineComponent, isStandalone: true, selector: "sds-timeline", inputs: { start: "start", end: "end", items: "items", pointInTimeItems: "pointInTimeItems", itemTemplate: "itemTemplate", pointInTimeTemplate: "pointInTimeTemplate", dayLabelTemplate: "dayLabelTemplate", dayLabelCustomDataFn: "dayLabelCustomDataFn", tickFrequency: "tickFrequency", hourLabelFrequency: "hourLabelFrequency", zoomPercent: "zoomPercent", viewOffsetPercent: "viewOffsetPercent", maxZoomPercent: "maxZoomPercent", showHourLabels: "showHourLabels", hourLabelClass: "hourLabelClass", showDayLabels: "showDayLabels", dayLabelClass: "dayLabelClass", showTimeline: "showTimeline", hourTickClass: "hourTickClass", timelineHeight: "timelineHeight", enableZoomAndDrag: "enableZoomAndDrag", offSetMinutes: "offSetMinutes", locales: "locales", cutOffset: "cutOffset", defaultCursor: "defaultCursor" }, outputs: { zoomPercentChange: "zoomPercentChange", viewOffsetPercentChange: "viewOffsetPercentChange" }, host: { listeners: { "window:mousemove": "onDragMove($event)", "window:touchmove": "onDragMoveTouch($event)", "window:mouseup": "onDragEnd($event)", "window:touchend": "onDragEnd($event)" } }, viewQueries: [{ propertyName: "_viewport", first: true, predicate: ["viewport"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #defaultItemTemplate let-item=\"item\">\n <div \n class=\"sds-timeline-item h-100\"\n [title]=\"item.hint\"\n >\n </div>\n</ng-template>\n\n<ng-template #defaultPointInTimeItemTemplate let-item=\"item\">\n <div \n class=\"sds-timeline-item h-100\"\n [title]=\"item.hint\"\n >\n </div>\n</ng-template>\n\n<ng-template #defaultDayLabelTemplate let-label=\"label\">\n {{label.label}}\n</ng-template>\n\n<div \n #viewport\n class=\"sds-timeline-viewport\"\n (wheel)=\"onScroll($event)\"\n\n (mousedown)=\"onDragStart($event)\"\n (touchstart)=\"onDragStart($event)\"\n >\n\n <div \n class=\"sds-timeline-container d-flex flex-column\"\n [style.left.%]=\"viewOffsetPercent\"\n [style.width.%]=\"zoomPercent\"\n [style.cursor]=\"isDragging ? 'ew-resize' : defaultCursor\"\n >\n\n <div\n *ngIf=\"showDayLabels\" \n class=\"sds-timeline-day-header\">\n\n <div \n *ngFor=\"let label of dayLabels\"\n class=\"sds-day-label\" \n [ngClass]=\"dayLabelClass ?? null\"\n [style.left.%]=\"label.x\"\n [style.width.%]=\"label.width\"\n >\n <ng-container \n [ngTemplateOutlet]=\"dayLabelTemplate ? dayLabelTemplate : defaultDayLabelTemplate\"\n [ngTemplateOutletContext]=\"{label: label}\">\n </ng-container> \n </div>\n </div>\n\n <div \n *ngIf=\"showHourLabels\" \n class=\"sds-timeline-hour-header\">\n\n <div \n *ngFor=\"let label of hourLabels;\"\n class=\"sds-hour-label\" \n [ngClass]=\"hourLabelClass ?? null\"\n [style.left.%]=\"label.x\"\n [style.width.rem]=\"1.2\"\n [ngStyle]=\"{'left': 'calc(' + label.x + '% - 0.6rem)'}\"\n >\n \n {{label.label}}\n \n </div>\n </div>\n\n <div \n *ngIf=\"showTimeline\"\n class=\"sds-timeline flex-grow-1\"\n [style.height]=\"timelineHeight\"\n >\n\n <div \n *ngFor=\"let tick of hourTicks\"\n class=\"sds-timeline-tick\" \n [ngClass]=\"hourTickClass ?? null\"\t\n [ngStyle]=\"tick.x == 100 ? {'left': 'calc(' + tick.x +'% - 1px)'} : {'left': 'calc(' + tick.x + '% - 0.5px)'}\"\n >\n </div>\n\n <div \n *ngFor=\"let item of presentationItems\"\n class=\"sds-timeline-item-container\"\n [ngClass]=\"item.class ?? null\"\n [ngStyle]=\"{\n 'width': 'max(' + item.width +'%, 1px)',\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \n }\"\n\n [style.left.%]=\"item.x\"\n [style.height]=\"item.height\"\n [style.backgroundColor]=\"item.backgroundColor\"\n >\n\n <ng-container \n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{item: item}\">\n </ng-container> \n </div>\n\n\n <!-- [ngClass]=\"item.class\"\t -->\n <div *ngFor=\"let item of presentationPointInTimeItems\"\n class=\"sds-timeline-point-in-time-item-container\"\n [ngClass]=\"item.class ?? null\"\n [style.height]=\"item.height\"\n [style.width]=\"item.width\"\n [ngStyle]=\"{\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \n 'left': 'calc(' + item.x + '% - max( calc(' + item.width +'/2), 1px))',\n \n }\"\n [style.backgroundColor]=\"item.backgroundColor\"\n >\n\n <ng-container \n [ngTemplateOutlet]=\"pointInTimeTemplate ? pointInTimeTemplate : defaultPointInTimeItemTemplate\"\n [ngTemplateOutletContext]=\"{item: item}\">\n </ng-container> \n\n </div>\n\n </div>\n </div>\n</div>\n", styles: [".sds-timeline-viewport{overflow:hidden}.sds-timeline-viewport .sds-timeline-container{width:100%;min-height:0;position:relative;-webkit-user-select:none;user-select:none}.sds-timeline-viewport .sds-timeline-container .sds-timeline-day-header{height:1.6rem;position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline-day-header .sds-day-label{position:absolute;display:inline;text-align:center;font-size:.875rem}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header{height:1.6rem;position:relative;font-size:.8em}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header .sds-hour-label{position:absolute;display:inline;text-align:center;font-size:.875rem}.sds-timeline-viewport .sds-timeline-container .sds-timeline{position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-tick{border-left:1px solid rgb(187,187,187);height:100%;position:absolute;display:inline}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-item-container{height:100%;position:absolute;display:inline;top:20%;height:60%}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-item-container .sds-timeline-item{position:relative;width:100%}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-point-in-time-item-container{width:1px;height:1px;position:absolute}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-point-in-time-item-container .sds-timeline-item{position:relative;width:100%}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
318
318
  }
319
319
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SdsTimelineComponent, decorators: [{
320
320
  type: Component,
@@ -324,7 +324,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
324
324
  NgStyle,
325
325
  NgClass,
326
326
  NgTemplateOutlet,
327
- ], template: "<ng-template #defaultItemTemplate let-item=\"item\">\n <div \n class=\"sds-timeline-item h-100\"\n [title]=\"item.hint\"\n >\n </div>\n</ng-template>\n\n<ng-template #defaultPointInTimeItemTemplate let-item=\"item\">\n <div \n class=\"sds-timeline-item h-100\"\n [title]=\"item.hint\"\n >\n </div>\n</ng-template>\n\n<ng-template #defaultDayLabelTemplate let-label=\"label\">\n {{label.label}}\n</ng-template>\n\n<div \n #viewport\n class=\"sds-timeline-viewport\"\n (wheel)=\"onScroll($event)\"\n\n (mousedown)=\"onDragStart($event)\"\n (touchstart)=\"onDragStart($event)\"\n >\n\n <div \n class=\"sds-timeline-container d-flex flex-column\"\n [style.left.%]=\"viewOffsetPercent\"\n [style.width.%]=\"zoomPercent\"\n [style.cursor]=\"isDragging ? 'ew-resize' : defaultCursor\"\n >\n\n <div\n *ngIf=\"showDayLabels\" \n class=\"sds-timeline-day-header\">\n\n <div \n *ngFor=\"let label of dayLabels\"\n class=\"sds-day-label\" \n [ngClass]=\"dayLabelClass ?? null\"\n [style.left.%]=\"label.x\"\n [style.width.%]=\"label.width\"\n >\n <ng-container \n [ngTemplateOutlet]=\"dayLabelTemplate ? dayLabelTemplate : defaultDayLabelTemplate\"\n [ngTemplateOutletContext]=\"{label: label}\">\n </ng-container> \n </div>\n </div>\n\n <div \n *ngIf=\"showHourLabels\" \n class=\"sds-timeline-hour-header\">\n\n <div \n *ngFor=\"let label of hourLabels;\"\n class=\"sds-hour-label\" \n [ngClass]=\"hourLabelClass ?? null\"\n [style.left.%]=\"label.x\"\n [style.width.rem]=\"1.2\"\n [ngStyle]=\"{'left': 'calc(' + label.x + '% - 0.6rem)'}\"\n >\n \n {{label.label}}\n \n </div>\n </div>\n\n <div \n *ngIf=\"showTimeline\"\n class=\"sds-timeline flex-grow-1\"\n [style.height]=\"timelineHeight\"\n >\n\n <div \n *ngFor=\"let tick of hourTicks\"\n class=\"sds-timeline-tick\" \n [ngClass]=\"hourTickClass ?? null\"\t\n [ngStyle]=\"tick.x == 100 ? {'left': 'calc(' + tick.x +'% - 1px)'} : {'left': 'calc(' + tick.x + '% - 0.5px)'}\"\n >\n </div>\n\n <div \n *ngFor=\"let item of presentationItems\"\n class=\"sds-timeline-item-container\"\n [ngClass]=\"item.class ?? null\"\n [ngStyle]=\"{\n 'width': 'max(' + item.width +'%, 1px)',\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \n }\"\n\n [style.left.%]=\"item.x\"\n [style.height]=\"item.height\"\n [style.backgroundColor]=\"item.backgroundColor\"\n >\n\n <ng-container \n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{item: item}\">\n </ng-container> \n </div>\n\n\n <!-- [ngClass]=\"item.class\"\t -->\n <div *ngFor=\"let item of presentationPointInTimeItems\"\n class=`sds-timeline-point-in-time-item-container ${item.class}`\n [style.height]=\"item.height\"\n [style.width]=\"item.width\"\n [ngStyle]=\"{\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \n 'left': 'calc(' + item.x + '% - max( calc(' + item.width +'/2), 1px))',\n \n }\"\n [style.backgroundColor]=\"item.backgroundColor\"\n >\n\n <ng-container \n [ngTemplateOutlet]=\"pointInTimeTemplate ? pointInTimeTemplate : defaultPointInTimeItemTemplate\"\n [ngTemplateOutletContext]=\"{item: item}\">\n </ng-container> \n\n </div>\n\n </div>\n </div>\n</div>\n", styles: [".sds-timeline-viewport{overflow:hidden}.sds-timeline-viewport .sds-timeline-container{width:100%;min-height:0;position:relative;-webkit-user-select:none;user-select:none}.sds-timeline-viewport .sds-timeline-container .sds-timeline-day-header{height:1.6rem;position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline-day-header .sds-day-label{position:absolute;display:inline;text-align:center;font-size:.875rem}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header{height:1.6rem;position:relative;font-size:.8em}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header .sds-hour-label{position:absolute;display:inline;text-align:center;font-size:.875rem}.sds-timeline-viewport .sds-timeline-container .sds-timeline{position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-tick{border-left:1px solid rgb(187,187,187);height:100%;position:absolute;display:inline}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-item-container{height:100%;position:absolute;display:inline;top:20%;height:60%}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-item-container .sds-timeline-item{position:relative;width:100%}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-point-in-time-item-container{width:1px;height:1px;position:absolute}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-point-in-time-item-container .sds-timeline-item{position:relative;width:100%}\n"] }]
327
+ ], template: "<ng-template #defaultItemTemplate let-item=\"item\">\n <div \n class=\"sds-timeline-item h-100\"\n [title]=\"item.hint\"\n >\n </div>\n</ng-template>\n\n<ng-template #defaultPointInTimeItemTemplate let-item=\"item\">\n <div \n class=\"sds-timeline-item h-100\"\n [title]=\"item.hint\"\n >\n </div>\n</ng-template>\n\n<ng-template #defaultDayLabelTemplate let-label=\"label\">\n {{label.label}}\n</ng-template>\n\n<div \n #viewport\n class=\"sds-timeline-viewport\"\n (wheel)=\"onScroll($event)\"\n\n (mousedown)=\"onDragStart($event)\"\n (touchstart)=\"onDragStart($event)\"\n >\n\n <div \n class=\"sds-timeline-container d-flex flex-column\"\n [style.left.%]=\"viewOffsetPercent\"\n [style.width.%]=\"zoomPercent\"\n [style.cursor]=\"isDragging ? 'ew-resize' : defaultCursor\"\n >\n\n <div\n *ngIf=\"showDayLabels\" \n class=\"sds-timeline-day-header\">\n\n <div \n *ngFor=\"let label of dayLabels\"\n class=\"sds-day-label\" \n [ngClass]=\"dayLabelClass ?? null\"\n [style.left.%]=\"label.x\"\n [style.width.%]=\"label.width\"\n >\n <ng-container \n [ngTemplateOutlet]=\"dayLabelTemplate ? dayLabelTemplate : defaultDayLabelTemplate\"\n [ngTemplateOutletContext]=\"{label: label}\">\n </ng-container> \n </div>\n </div>\n\n <div \n *ngIf=\"showHourLabels\" \n class=\"sds-timeline-hour-header\">\n\n <div \n *ngFor=\"let label of hourLabels;\"\n class=\"sds-hour-label\" \n [ngClass]=\"hourLabelClass ?? null\"\n [style.left.%]=\"label.x\"\n [style.width.rem]=\"1.2\"\n [ngStyle]=\"{'left': 'calc(' + label.x + '% - 0.6rem)'}\"\n >\n \n {{label.label}}\n \n </div>\n </div>\n\n <div \n *ngIf=\"showTimeline\"\n class=\"sds-timeline flex-grow-1\"\n [style.height]=\"timelineHeight\"\n >\n\n <div \n *ngFor=\"let tick of hourTicks\"\n class=\"sds-timeline-tick\" \n [ngClass]=\"hourTickClass ?? null\"\t\n [ngStyle]=\"tick.x == 100 ? {'left': 'calc(' + tick.x +'% - 1px)'} : {'left': 'calc(' + tick.x + '% - 0.5px)'}\"\n >\n </div>\n\n <div \n *ngFor=\"let item of presentationItems\"\n class=\"sds-timeline-item-container\"\n [ngClass]=\"item.class ?? null\"\n [ngStyle]=\"{\n 'width': 'max(' + item.width +'%, 1px)',\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \n }\"\n\n [style.left.%]=\"item.x\"\n [style.height]=\"item.height\"\n [style.backgroundColor]=\"item.backgroundColor\"\n >\n\n <ng-container \n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{item: item}\">\n </ng-container> \n </div>\n\n\n <!-- [ngClass]=\"item.class\"\t -->\n <div *ngFor=\"let item of presentationPointInTimeItems\"\n class=\"sds-timeline-point-in-time-item-container\"\n [ngClass]=\"item.class ?? null\"\n [style.height]=\"item.height\"\n [style.width]=\"item.width\"\n [ngStyle]=\"{\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \n 'left': 'calc(' + item.x + '% - max( calc(' + item.width +'/2), 1px))',\n \n }\"\n [style.backgroundColor]=\"item.backgroundColor\"\n >\n\n <ng-container \n [ngTemplateOutlet]=\"pointInTimeTemplate ? pointInTimeTemplate : defaultPointInTimeItemTemplate\"\n [ngTemplateOutletContext]=\"{item: item}\">\n </ng-container> \n\n </div>\n\n </div>\n </div>\n</div>\n", styles: [".sds-timeline-viewport{overflow:hidden}.sds-timeline-viewport .sds-timeline-container{width:100%;min-height:0;position:relative;-webkit-user-select:none;user-select:none}.sds-timeline-viewport .sds-timeline-container .sds-timeline-day-header{height:1.6rem;position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline-day-header .sds-day-label{position:absolute;display:inline;text-align:center;font-size:.875rem}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header{height:1.6rem;position:relative;font-size:.8em}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header .sds-hour-label{position:absolute;display:inline;text-align:center;font-size:.875rem}.sds-timeline-viewport .sds-timeline-container .sds-timeline{position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-tick{border-left:1px solid rgb(187,187,187);height:100%;position:absolute;display:inline}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-item-container{height:100%;position:absolute;display:inline;top:20%;height:60%}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-item-container .sds-timeline-item{position:relative;width:100%}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-point-in-time-item-container{width:1px;height:1px;position:absolute}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-point-in-time-item-container .sds-timeline-item{position:relative;width:100%}\n"] }]
328
328
  }], ctorParameters: () => [], propDecorators: { start: [{
329
329
  type: Input
330
330
  }], end: [{
@@ -395,4 +395,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
395
395
  type: HostListener,
396
396
  args: ['window:touchend', ['$event']]
397
397
  }] } });
398
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNkcy1jb21wb25lbnRzL3NyYy9saWIvdGltZWxpbmUvY29tcG9uZW50cy90aW1lbGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2RzLWNvbXBvbmVudHMvc3JjL2xpYi90aW1lbGluZS9jb21wb25lbnRzL3RpbWVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVNsRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBZWxGLE1BQU0sT0FBTyxvQkFBb0I7SUF1TzdCO1FBdE9BOzs7OztXQUtHO1FBQ00sVUFBSyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFFbEM7Ozs7O1dBS0c7UUFDTSxRQUFHLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVoQzs7Ozs7O1dBTUc7UUFDTSxVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUVwQzs7Ozs7O1dBTUc7UUFDTSxxQkFBZ0IsR0FBOEIsRUFBRSxDQUFDO1FBRTFEOzs7OztXQUtHO1FBQ00saUJBQVksR0FBaUMsU0FBUyxDQUFDO1FBRWhFOzs7OztXQUtHO1FBQ00sd0JBQW1CLEdBQWlDLFNBQVMsQ0FBQztRQUV2RTs7Ozs7V0FLRztRQUNNLHFCQUFnQixHQUFpQyxTQUFTLENBQUM7UUFFcEU7Ozs7O1dBS0c7UUFDTSx5QkFBb0IsR0FBK0MsU0FB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LE9BQU87c0JBQWYsS0FBSztnQkFTRyxTQUFTO3NCQUFqQixLQUFLO2dCQVNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBc0JtQyxTQUFTO3NCQUFqRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBNEZoQyxVQUFVO3NCQURoQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVc1QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBWXJDLFNBQVM7c0JBRmYsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3pDLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIEV2ZW50RW1pdHRlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRpbWVsaW5lQ3VzdG9tRGF0ZURhdGFQcm92aWRlciwgVGltZWxpbmVUaWNrRnJlcXVlbmN5IH0gZnJvbSAnLi4vdHlwZXMvdGltZWxpbmUudHlwZXMnO1xuaW1wb3J0IHsgU2RzVGltZWxpbmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGltZWxpbmUuc2VydmljZSc7XG5pbXBvcnQge1xuICAgIFRpbWVsaW5lSW50ZXJ2YWxMYWJlbCxcbiAgICBUaW1lbGluZUl0ZW0sXG4gICAgVGltZWxpbmVJdGVtUHJlc2VudGF0aW9uLFxuICAgIFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtLFxuICAgIFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtUHJlc2VudGF0aW9uLFxuICAgIFRpbWVsaW5lVGljayxcbn0gZnJvbSAnLi4vbW9kZWxzL3RpbWVsaW5lLm1vZGVsJztcbmltcG9ydCB7IE5nSWYsIE5nRm9yLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzZHMtdGltZWxpbmUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90aW1lbGluZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGltZWxpbmUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIE5nU3R5bGUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2RzVGltZWxpbmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0YXJ0IGRhdGUgYW5kIHRpbWUgZm9yIHRoZSB0aW1lbGluZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtEYXRlfVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0YXJ0OiBEYXRlID0gbmV3IERhdGUoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlbmQgZGF0ZSBhbmQgdGltZSBmb3IgdGhlIHRpbWVsaW5lLlxuICAgICAqXG4gICAgICogQHR5cGUge0RhdGV9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgZW5kOiBEYXRlID0gbmV3IERhdGUoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwZXJpb2QgYmFzZWQgaXRlbXMgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSB0aW1lbGluZS4gU3BlY2lmeSBkYXRhIGlmIHlvdSBuZWVkIFxuICAgICAqIGFkZGl0aW9uYWwgZGF0YSBmb3IgY3VzdG9tIHJlbmRlcmluZyBvZiB0aGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7VGltZWxpbmVJdGVtW119XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgaXRlbXM6IFRpbWVsaW5lSXRlbVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBJdGVtcyB0byBiZSBkaXNwbGF5ZWQgb24gdGhlIHRpbWVsaW5lIGF0IGEgc3BlY2lmaWMgcG9pbnQgaW4gdGltZS5cbiAgICAgKiBTcGVjaWZ5IGRhdGEgaWYgeW91IG5lZWQgYWRkaXRpb25hbCBkYXRhIGZvciBjdXN0b20gcmVuZGVyaW5nIG9mIHRoZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtUaW1lbGluZVBvaW50SW5UaW1lSXRlbVtdfVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBvaW50SW5UaW1lSXRlbXM6IFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZW1wbGF0ZSB0byBiZSB1c2VkIGZvciBjdXN0b20gcmVuZGVyaW5nIG9mIHRoZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHsoVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCl9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRlbXBsYXRlIHRvIGJlIHVzZWQgZm9yIGN1c3RvbSByZW5kZXJpbmcgb2YgdGhlIHBvaW4taW4tdGltZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHsoVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCl9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcG9pbnRJblRpbWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZW1wbGF0ZSB0byBiZSB1c2VkIGZvciBjdXN0b20gcmVuZGVyaW5nIG9mIHRoZSBkYXkgbGFiZWxzLlxuICAgICAqXG4gICAgICogQHR5cGUgeyhUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkKX1cbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkYXlMYWJlbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIFxuICAgIC8qKlxuICAgICAqIEEgY3VzdG9tIGRhdGEgZnVuY3Rpb24gZm9yIHRoZSBkYXkgbGFiZWxzLiBcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgRGF0ZSBvYmplY3QgYXMgaW5wdXQgYW5kIHJldHVybnMgYW55IGN1c3RvbSBkYXRhIHRoYXQgd2lsbCBiZSBhdmFpbGFibGUgZm9yIHRoZSBjdXN0b20gdGVtcGxhdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGRheUxhYmVsQ3VzdG9tRGF0YUZuOiBUaW1lbGluZUN1c3RvbURhdGVEYXRhUHJvdmlkZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJlcXVlbmN5IG9mIHRoZSB0aWNrcyBvbiB0aGUgdGltZWxpbmUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7VGltZWxpbmVUaWNrRnJlcXVlbmN5fVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRpY2tGcmVxdWVuY3k6IFRpbWVsaW5lVGlja0ZyZXF1ZW5jeSA9ICdob3VybHknO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyZXF1ZW5jeSBvZiB0aGUgaG91ciBsYWJlbHMgb24gdGhlIHRpbWVsaW5lLlxuICAgICAqXG4gICAgICogQHR5cGUge1RpbWVsaW5lVGlja0ZyZXF1ZW5jeX1cbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBob3VyTGFiZWxGcmVxdWVuY3k6IFRpbWVsaW5lVGlja0ZyZXF1ZW5jeSA9ICczaHJzJztcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgem9vbSBsZXZlbCBvZiB0aGUgdGltZWxpbmUuIEluIHBlcmNlbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHpvb21QZXJjZW50OiBudW1iZXIgPSAxMDA7XG4gICAgQE91dHB1dCgpIHpvb21QZXJjZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsIG9mZnNldCBvZiB0aGUgdmlld3BvcnQgaW4gcGVyY2VudC4gVGhpcyBpcyB1c2VkIGluIHNjZW5hcmlvcyBcbiAgICAgKiB3aXRoIG11bHRpcGxlIGRheXMgd2hlbiB5b3Ugd2FudCB0byBzaG93IG5vbi1maXJzdCBkYXkgYXMgZGVmdWx0LlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSB2aWV3T2Zmc2V0UGVyY2VudDogbnVtYmVyID0gMDtcbiAgICBAT3V0cHV0KCkgdmlld09mZnNldFBlcmNlbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIGFsbG93ZWQgem9vbSBsZXZlbCBvZiB0aGUgdGltZWxpbmUuIEluIHBlcmNlbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIG1heFpvb21QZXJjZW50OiBudW1iZXIgPSA1MDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgaG91ciBsYWJlbHMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzaG93SG91ckxhYmVsczogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQ1NTIGNsYXNzIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGhvdXIgbGFiZWxzLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBob3VyTGFiZWxDbGFzcz86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc2hvdyBkYXkgbGFiZWxzLiBcbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNob3dEYXlMYWJlbHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBDU1MgY2xhc3MgdG8gYmUgYXBwbGllZCB0byB0aGUgZGF5IGxhYmVscy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgZGF5TGFiZWxDbGFzcz86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc2hvdyB0aW1lbGluZS4gVXNlZnVsIGZvciBoaWRpbmcgdGhlIHRpbWVsaW5lIHdoZW4gd2Ugb25seSBuZWVkIGhlYWRlci5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNob3dUaW1lbGluZTogYm9vbGVhbiA9IHRydWU7ICAgIFxuXG4gICAgLyoqXG4gICAgICogVGhlIENTUyBjbGFzcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBob3VyIHRpY2tzLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBob3VyVGlja0NsYXNzPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGltZWxpbmUuIERlZmF1bHQgaXMgMnJlbS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgdGltZWxpbmVIZWlnaHQ6IHN0cmluZyA9ICcycmVtJztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIHpvb20gYW5kIGRyYWcgZnVuY3Rpb25hbGl0eS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZVpvb21BbmREcmFnOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBtaW51dGVzIGFkZGVkIHRvIHN0YXJ0IGFuZCBzdG9wIHRvIGZpdCB0aGUgZGF0YSBvbiB0aGUgZWRnZXNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgb2ZmU2V0TWludXRlczogbnVtYmVyID0gMTU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbG9jYWxlcyB0byBiZSB1c2VkIGZvciBmb3JtYXR0aW5nIHRoZSB0aW1lbGluZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHsoc3RyaW5nIHwgQXJyYXk8c3RyaW5nPil9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgbG9jYWxlcz86IHN0cmluZyB8IEFycmF5PHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9sIGlmIHRob3NlIHBhcnRzIG9mIHNlZ21lbnRzIChvciB3aG9sZSBzZWdtZW50cykgdGhhdCBmYWxsIGludG8gdGhlIE9mZnNldCBcbiAgICAgKiBwZXJpb2QgYXJlIGRpc3BsYXllZCBvciBub3RcbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGN1dE9mZnNldDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyBkZWZhdWx0IGN1cnNvciwgdGhhdCBzaG91bGQgYmUgc2hvd24gd2hlbiBob3ZlcmluZyBvdmVyIHRpbWVsaW5lIGNvbXBvbmVudC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzICdkZWZhdWx0Jy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgZGVmYXVsdEN1cnNvcjogc3RyaW5nID0gXCJkZWZhdWx0XCI7XG5cbiAgICAvLyBwcm90ZWN0ZWRcbiAgICBob3VyVGlja3M6IFRpbWVsaW5lVGlja1tdID0gW107XG4gICAgaG91ckxhYmVsczogVGltZWxpbmVJbnRlcnZhbExhYmVsW10gPSBbXTtcbiAgICBkYXlMYWJlbHM6IFRpbWVsaW5lSW50ZXJ2YWxMYWJlbFtdID0gW107XG5cbiAgICBwcml2YXRlIF90aW1lbGluZVNlcnZpY2U6IFNkc1RpbWVsaW5lU2VydmljZSA9IG5ldyBTZHNUaW1lbGluZVNlcnZpY2UoXG4gICAgICAgIHRoaXMuc3RhcnQsXG4gICAgICAgIHRoaXMuZW5kLFxuICAgICAgICB0aGlzLm9mZlNldE1pbnV0ZXMsXG4gICAgICAgIHRoaXMuY3V0T2Zmc2V0XG4gICAgKTtcblxuICAgIHB1YmxpYyBwcmVzZW50YXRpb25JdGVtczogVGltZWxpbmVJdGVtUHJlc2VudGF0aW9uW10gPSBbXTtcbiAgICBwdWJsaWMgcHJlc2VudGF0aW9uUG9pbnRJblRpbWVJdGVtczogVGltZWxpbmVQb2ludEluVGltZUl0ZW1QcmVzZW50YXRpb25bXSA9IFtdO1xuXG4gICAgcHVibGljIGlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICBwdWJsaWMgaW5pdGlhbERyYWdYID0gMDtcblxuICAgIHByaXZhdGUgdmlld09mZnNldFBlcmNlbnREcmFnU3RhcnQgPSAwO1xuXG4gICAgQFZpZXdDaGlsZCgndmlld3BvcnQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBfdmlld3BvcnQ6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVUaWNrcygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnQgJiYgdGhpcy5lbmQpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lU2VydmljZSA9IG5ldyBTZHNUaW1lbGluZVNlcnZpY2UoXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydCxcbiAgICAgICAgICAgICAgICB0aGlzLmVuZCxcbiAgICAgICAgICAgICAgICB0aGlzLm9mZlNldE1pbnV0ZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5jdXRPZmZzZXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVGlja3MoKTtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lSXRlbXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydzdGFydCddIHx8IGNoYW5nZXNbJ2VuZCddIHx8IGNoYW5nZXNbJ29mZlNldE1pbnV0ZXMnXSB8fCBjaGFuZ2VzWydjdXRPZmZzZXQnXSkge1xuICAgICAgICAgICAgdGhpcy5fdGltZWxpbmVTZXJ2aWNlID0gbmV3IFNkc1RpbWVsaW5lU2VydmljZShcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LFxuICAgICAgICAgICAgICAgIHRoaXMuZW5kLFxuICAgICAgICAgICAgICAgIHRoaXMub2ZmU2V0TWludXRlcyxcbiAgICAgICAgICAgICAgICB0aGlzLmN1dE9mZnNldFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVUaWNrcygpO1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUludGVybmFsVGltZWxpbmVJdGVtcygpOyAgICAgICAgICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10pIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lSXRlbXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydwb2ludEluVGltZUl0ZW1zJ10pIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ3pvb21QZXJjZW50J10pIHtcbiAgICAgICAgICAgIC8vIHRoaXMudmlld09mZnNldFBlcmNlbnQgPSAodGhpcy56b29tUGVyY2VudCAtIDEwMCkgLyAtMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydzaG93RGF5TGFiZWxzJ10gfHwgY2hhbmdlc1snc2hvd0hvdXJMYWJlbHMnXSkge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVRpY2tzKCk7XG4gICAgICAgIH0gICAgICBcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgICAvLyNyZWdpb24gbW91c2Ugd2hlZWwgem9vbVxuICAgIG9uU2Nyb2xsKGV2ZW50OiBXaGVlbEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb21BbmREcmFnKSB7XG5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gTWF0aC5zaWduKGV2ZW50LmRlbHRhWSk7XG4gICAgICAgICAgICBjb25zdCBuZXdab29tUGVyY2VudCA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgIE1hdGgubWF4KHRoaXMuem9vbVBlcmNlbnQgKyAtZGVsdGEgKiAyMCwgMTAwKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1heFpvb21QZXJjZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgZGVsdGFab29tUGVyY2VudCA9IG5ld1pvb21QZXJjZW50IC0gdGhpcy56b29tUGVyY2VudDtcbiAgICAgICAgICAgIHRoaXMuem9vbVBlcmNlbnQgPSBuZXdab29tUGVyY2VudDtcbiAgICAgICAgICAgIHRoaXMuem9vbVBlcmNlbnRDaGFuZ2UuZW1pdCh0aGlzLnpvb21QZXJjZW50KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gZ2V0IHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yIG9uIHRoZSB2aWV3cG9ydCBzbyB3ZSBjYW4gem9vbSBpbiBpbnRvIHRoaXMgcG9zaXRpb25cbiAgICAgICAgICAgIGNvbnN0IHggPSBldmVudC5jbGllbnRYIC0gdGhpcy5fdmlld3BvcnQ/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvclJlbGF0aXZlUG9zaXRpb24gPSB4IC8gdGhpcy5fdmlld3BvcnQ/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICAvLyB0aGlzLnZpZXdPZmZzZXRQZXJjZW50ID0gdGhpcy52aWV3T2Zmc2V0UGVyY2VudCAtIGRlbHRhWm9vbVBlcmNlbnQgKiBjdXJzb3JSZWxhdGl2ZVBvc2l0aW9uO1xuXG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbk9mZnNldCh0aGlzLnZpZXdPZmZzZXRQZXJjZW50IC0gZGVsdGFab29tUGVyY2VudCAqIGN1cnNvclJlbGF0aXZlUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIGRyYWdnaW5nXG4gICAgXG4gICAgcHVibGljIG9uRHJhZ1N0YXJ0KGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbmFibGVab29tQW5kRHJhZyAmJiB0aGlzLnpvb21QZXJjZW50ID4gMTAwKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld09mZnNldFBlcmNlbnREcmFnU3RhcnQgPSB0aGlzLnZpZXdPZmZzZXRQZXJjZW50O1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRHJhZ1ggPSBldmVudC5jbGllbnRYO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFRvdWNoRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxEcmFnWCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZW1vdmUnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkRyYWdNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb21BbmREcmFnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFggPSBldmVudC5jbGllbnRYO1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoY3VycmVudFgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnRvdWNobW92ZScsIFsnJGV2ZW50J10pXG4gICAgb25EcmFnTW92ZVRvdWNoKGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb21BbmREcmFnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChjdXJyZW50WCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnRvdWNoZW5kJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25EcmFnRW5kKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbmFibGVab29tQW5kRHJhZykge1xuICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVFbGVtZW50KGN1cnJlbnRYOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlmZiA9IGN1cnJlbnRYIC0gdGhpcy5pbml0aWFsRHJhZ1g7XG4gICAgICAgIGlmICh0aGlzLl92aWV3cG9ydCAmJiB0aGlzLl92aWV3cG9ydC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBkaWZmSW5QZXJjZW50ID0gKGRpZmYgLyB0aGlzLl92aWV3cG9ydD8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCkgKiAxMDA7XG4gICAgICAgICAgICAvLyB0aGlzLnZpZXdPZmZzZXRQZXJjZW50ID0gdGhpcy52aWV3T2Zmc2V0UGVyY2VudERyYWdTdGFydCArIGRpZmZJblBlcmNlbnQ7XG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbk9mZnNldCh0aGlzLnZpZXdPZmZzZXRQZXJjZW50RHJhZ1N0YXJ0ICsgZGlmZkluUGVyY2VudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIHByaXZhdGUgY29uc3RyYWluT2Zmc2V0KG5ld09mZnNldDogbnVtYmVyKTogdm9pZCB7ICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuem9vbVBlcmNlbnQgKyBuZXdPZmZzZXQgPCAxMDApIHtcbiAgICAgICAgICAgIG5ld09mZnNldCA9IC10aGlzLnpvb21QZXJjZW50ICsgMTAwO1xuICAgICAgICB9XG4gICAgICAgIG5ld09mZnNldCA9IE1hdGgubWluKDAsIG5ld09mZnNldCk7XG4gICAgICAgIGlmIChuZXdPZmZzZXQgIT0gdGhpcy52aWV3T2Zmc2V0UGVyY2VudCkge1xuICAgICAgICAgICAgdGhpcy52aWV3T2Zmc2V0UGVyY2VudCA9IG5ld09mZnNldDtcbiAgICAgICAgICAgIHRoaXMudmlld09mZnNldFBlcmNlbnRDaGFuZ2UuZW1pdCh0aGlzLnZpZXdPZmZzZXRQZXJjZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVUaWNrcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3VyVGlja3MgPSB0aGlzLl90aW1lbGluZVNlcnZpY2UuZ2V0SG91clRpY2tzKHRoaXMudGlja0ZyZXF1ZW5jeSk7XG4gICAgICAgIHRoaXMuZGF5TGFiZWxzID0gdGhpcy5fdGltZWxpbmVTZXJ2aWNlLmdldERheUxhYmVscyh0aGlzLmxvY2FsZXMsIHRoaXMuZGF5TGFiZWxDdXN0b21EYXRhRm4pO1xuICAgICAgICB0aGlzLmhvdXJMYWJlbHMgPSB0aGlzLl90aW1lbGluZVNlcnZpY2UuZ2V0SG91ckxhYmVscyh0aGlzLmhvdXJMYWJlbEZyZXF1ZW5jeSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUludGVybmFsVGltZWxpbmVJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3V0dE9mZlN0YXJ0ID0gdGhpcy5jdXRPZmZzZXQgPyB0aGlzLnN0YXJ0IDogbmV3IERhdGUodGhpcy5zdGFydC5nZXRUaW1lKCkgLSB0aGlzLm9mZlNldE1pbnV0ZXMgKiA2MDAwMCk7XG4gICAgICAgIGNvbnN0IGN1dHRPZmZFbmQgPSB0aGlzLmN1dE9mZnNldCA/IHRoaXMuZW5kIDogbmV3IERhdGUodGhpcy5lbmQuZ2V0VGltZSgpICsgdGhpcy5vZmZTZXRNaW51dGVzICogNjAwMDApO1xuXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uSXRlbXMgPSB0aGlzLml0ZW1zXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmVuZCA8IGN1dHRPZmZTdGFydCB8fCBpdGVtLnN0YXJ0ID4gY3V0dE9mZkVuZCA/IGZhbHNlIDogdHJ1ZSlcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZShpdGVtLnN0YXJ0KS50b0xvY2FsZVRpbWVTdHJpbmcodGhpcy5sb2NhbGVzPz8gW10sIHsgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoaXRlbS5lbmQpLnRvTG9jYWxlVGltZVN0cmluZyh0aGlzLmxvY2FsZXM/PyBbXSwgeyBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJzItZGlnaXQnIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVSYW5nZSA9IGAke3N0YXJ0VGltZX0gLSAke2VuZFRpbWV9YDtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLl90aW1lbGluZVNlcnZpY2UuZ2V0WChpdGVtLnN0YXJ0KSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuX3RpbWVsaW5lU2VydmljZS5nZXRXaWR0aEZyb21UaW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZW5kXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGhpbnQ6IGl0ZW0uaGludCA/PyB0aW1lUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaXRlbS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogaXRlbS50b3AgPz8gJzUwJScsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXRlbS5oZWlnaHQgPz8gJzYwJScsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBpdGVtLmNsYXNzLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3V0dE9mZlN0YXJ0ID0gdGhpcy5jdXRPZmZzZXQgPyB0aGlzLnN0YXJ0IDogbmV3IERhdGUodGhpcy5zdGFydC5nZXRUaW1lKCkgLSB0aGlzLm9mZlNldE1pbnV0ZXMgKiA2MDAwMCk7XG4gICAgICAgIGNvbnN0IGN1dHRPZmZFbmQgPSB0aGlzLmN1dE9mZnNldCA/IHRoaXMuZW5kIDogbmV3IERhdGUodGhpcy5lbmQuZ2V0VGltZSgpICsgdGhpcy5vZmZTZXRNaW51dGVzICogNjAwMDApO1xuXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUG9pbnRJblRpbWVJdGVtcyA9IHRoaXMucG9pbnRJblRpbWVJdGVtc1xuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5kYXRlIDwgY3V0dE9mZlN0YXJ0IHx8IGl0ZW0uZGF0ZSA+IGN1dHRPZmZFbmQgPyBmYWxzZSA6IHRydWUpXG4gICAgICAgICAgICAubWFwKChpdGVtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lUG9pbnRTdHJpbmcgPSBuZXcgRGF0ZShpdGVtLmRhdGUpLnRvTG9jYWxlVGltZVN0cmluZyh0aGlzLmxvY2FsZXM/PyBbXSwgeyBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJzItZGlnaXQnIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLl90aW1lbGluZVNlcnZpY2UuZ2V0WChpdGVtLmRhdGUpLFxuICAgICAgICAgICAgICAgICAgICBoaW50OiBpdGVtLmhpbnQgPz8gdGltZVBvaW50U3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IGl0ZW0udG9wID8/ICcyMCUnLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGl0ZW0uaGVpZ2h0ID8/ICcxcmVtJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGl0ZW0ud2lkdGggPz8gJzFyZW0nLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogaXRlbS5jbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpdGVtLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNkZWZhdWx0SXRlbVRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgIDxkaXYgXG4gICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLWl0ZW0gaC0xMDBcIlxuICAgICAgICBbdGl0bGVdPVwiaXRlbS5oaW50XCJcbiAgICAgICAgPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UG9pbnRJblRpbWVJdGVtVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgPGRpdiBcbiAgICAgICAgY2xhc3M9XCJzZHMtdGltZWxpbmUtaXRlbSBoLTEwMFwiXG4gICAgICAgIFt0aXRsZV09XCJpdGVtLmhpbnRcIlxuICAgICAgICA+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHREYXlMYWJlbFRlbXBsYXRlIGxldC1sYWJlbD1cImxhYmVsXCI+XG4gICAge3tsYWJlbC5sYWJlbH19XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2IFxuICAgICN2aWV3cG9ydFxuICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLXZpZXdwb3J0XCJcbiAgICAod2hlZWwpPVwib25TY3JvbGwoJGV2ZW50KVwiXG5cbiAgICAobW91c2Vkb3duKT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgICh0b3VjaHN0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgID5cblxuICAgIDxkaXYgXG4gICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLWNvbnRhaW5lciBkLWZsZXggZmxleC1jb2x1bW5cIlxuICAgICAgICBbc3R5bGUubGVmdC4lXT1cInZpZXdPZmZzZXRQZXJjZW50XCJcbiAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiem9vbVBlcmNlbnRcIlxuICAgICAgICBbc3R5bGUuY3Vyc29yXT1cImlzRHJhZ2dpbmcgPyAnZXctcmVzaXplJyA6IGRlZmF1bHRDdXJzb3JcIlxuICAgICAgICA+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJzaG93RGF5TGFiZWxzXCIgXG4gICAgICAgICAgICBjbGFzcz1cInNkcy10aW1lbGluZS1kYXktaGVhZGVyXCI+XG5cbiAgICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGRheUxhYmVsc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZHMtZGF5LWxhYmVsXCIgIFxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRheUxhYmVsQ2xhc3MgPz8gbnVsbFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJsYWJlbC54XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJsYWJlbC53aWR0aFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGF5TGFiZWxUZW1wbGF0ZSA/IGRheUxhYmVsVGVtcGxhdGUgOiBkZWZhdWx0RGF5TGFiZWxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bGFiZWw6IGxhYmVsfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0hvdXJMYWJlbHNcIiBcbiAgICAgICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLWhvdXItaGVhZGVyXCI+XG5cbiAgICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGhvdXJMYWJlbHM7XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNkcy1ob3VyLWxhYmVsXCIgIFxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImhvdXJMYWJlbENsYXNzID8/IG51bGxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LiVdPVwibGFiZWwueFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnJlbV09XCIxLjJcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbGVmdCc6ICdjYWxjKCcgKyBsYWJlbC54ICsgJyUgLSAwLjZyZW0pJ31cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHt7bGFiZWwubGFiZWx9fVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgXG4gICAgICAgICAgICAqbmdJZj1cInNob3dUaW1lbGluZVwiXG4gICAgICAgICAgICBjbGFzcz1cInNkcy10aW1lbGluZSBmbGV4LWdyb3ctMVwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cInRpbWVsaW5lSGVpZ2h0XCJcbiAgICAgICAgICAgID5cblxuICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdGljayBvZiBob3VyVGlja3NcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLXRpY2tcIiAgXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaG91clRpY2tDbGFzcyA/PyBudWxsXCJcdFxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInRpY2sueCA9PSAxMDAgPyB7J2xlZnQnOiAnY2FsYygnICsgdGljay54ICsnJSAtIDFweCknfSA6IHsnbGVmdCc6ICdjYWxjKCcgKyB0aWNrLnggKyAnJSAtIDAuNXB4KSd9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHByZXNlbnRhdGlvbkl0ZW1zXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNkcy10aW1lbGluZS1pdGVtLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jbGFzcyA/PyBudWxsXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICd3aWR0aCc6ICdtYXgoJyArIGl0ZW0ud2lkdGggKyclLCAxcHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJ3RvcCc6ICdjYWxjKCcgKyBpdGVtLnRvcCArICcgLSBtYXgoY2FsYygnICsgaXRlbS5oZWlnaHQgKycvMiksIDFweCkpJywgXG4gICAgICAgICAgICAgICAgfVwiXG5cbiAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cIml0ZW0ueFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJpdGVtLmhlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJpdGVtLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlID8gaXRlbVRlbXBsYXRlIDogZGVmYXVsdEl0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogaXRlbX1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gIFxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPCEtLSBbbmdDbGFzc109XCJpdGVtLmNsYXNzXCJcdCAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJlc2VudGF0aW9uUG9pbnRJblRpbWVJdGVtc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9YHNkcy10aW1lbGluZS1wb2ludC1pbi10aW1lLWl0ZW0tY29udGFpbmVyICR7aXRlbS5jbGFzc31gXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJpdGVtLmhlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIml0ZW0ud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ3RvcCc6ICdjYWxjKCcgKyBpdGVtLnRvcCArICcgLSBtYXgoY2FsYygnICsgaXRlbS5oZWlnaHQgKycvMiksIDFweCkpJywgXG4gICAgICAgICAgICAgICAgICAgICdsZWZ0JzogJ2NhbGMoJyArIGl0ZW0ueCArICclIC0gbWF4KCBjYWxjKCcgKyBpdGVtLndpZHRoICsnLzIpLCAxcHgpKScsXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaXRlbS5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBvaW50SW5UaW1lVGVtcGxhdGUgPyBwb2ludEluVGltZVRlbXBsYXRlIDogZGVmYXVsdFBvaW50SW5UaW1lSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBpdGVtfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgXG5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
398
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNkcy1jb21wb25lbnRzL3NyYy9saWIvdGltZWxpbmUvY29tcG9uZW50cy90aW1lbGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2RzLWNvbXBvbmVudHMvc3JjL2xpYi90aW1lbGluZS9jb21wb25lbnRzL3RpbWVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVNsRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBZWxGLE1BQU0sT0FBTyxvQkFBb0I7SUF1TzdCO1FBdE9BOzs7OztXQUtHO1FBQ00sVUFBSyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFFbEM7Ozs7O1dBS0c7UUFDTSxRQUFHLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVoQzs7Ozs7O1dBTUc7UUFDTSxVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUVwQzs7Ozs7O1dBTUc7UUFDTSxxQkFBZ0IsR0FBOEIsRUFBRSxDQUFDO1FBRTFEOzs7OztXQUtHO1FBQ00saUJBQVksR0FBaUMsU0FBUyxDQUFDO1FBRWhFOzs7OztXQUtHO1FBQ00sd0JBQW1CLEdBQWlDLFNBQVMsQ0FBQztRQUV2RTs7Ozs7V0FLRztRQUNNLHFCQUFnQixHQUFpQyxTQUFTLENBQUM7UUFFcEU7Ozs7O1dBS0c7UUFDTSx5QkFBb0IsR0FBK0MsU0FB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LE9BQU87c0JBQWYsS0FBSztnQkFTRyxTQUFTO3NCQUFqQixLQUFLO2dCQVNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBc0JtQyxTQUFTO3NCQUFqRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBNEZoQyxVQUFVO3NCQURoQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVc1QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBWXJDLFNBQVM7c0JBRmYsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3pDLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIEV2ZW50RW1pdHRlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRpbWVsaW5lQ3VzdG9tRGF0ZURhdGFQcm92aWRlciwgVGltZWxpbmVUaWNrRnJlcXVlbmN5IH0gZnJvbSAnLi4vdHlwZXMvdGltZWxpbmUudHlwZXMnO1xuaW1wb3J0IHsgU2RzVGltZWxpbmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGltZWxpbmUuc2VydmljZSc7XG5pbXBvcnQge1xuICAgIFRpbWVsaW5lSW50ZXJ2YWxMYWJlbCxcbiAgICBUaW1lbGluZUl0ZW0sXG4gICAgVGltZWxpbmVJdGVtUHJlc2VudGF0aW9uLFxuICAgIFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtLFxuICAgIFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtUHJlc2VudGF0aW9uLFxuICAgIFRpbWVsaW5lVGljayxcbn0gZnJvbSAnLi4vbW9kZWxzL3RpbWVsaW5lLm1vZGVsJztcbmltcG9ydCB7IE5nSWYsIE5nRm9yLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzZHMtdGltZWxpbmUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90aW1lbGluZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGltZWxpbmUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIE5nU3R5bGUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2RzVGltZWxpbmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0YXJ0IGRhdGUgYW5kIHRpbWUgZm9yIHRoZSB0aW1lbGluZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtEYXRlfVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0YXJ0OiBEYXRlID0gbmV3IERhdGUoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlbmQgZGF0ZSBhbmQgdGltZSBmb3IgdGhlIHRpbWVsaW5lLlxuICAgICAqXG4gICAgICogQHR5cGUge0RhdGV9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgZW5kOiBEYXRlID0gbmV3IERhdGUoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwZXJpb2QgYmFzZWQgaXRlbXMgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSB0aW1lbGluZS4gU3BlY2lmeSBkYXRhIGlmIHlvdSBuZWVkIFxuICAgICAqIGFkZGl0aW9uYWwgZGF0YSBmb3IgY3VzdG9tIHJlbmRlcmluZyBvZiB0aGUgaXRlbXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7VGltZWxpbmVJdGVtW119XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgaXRlbXM6IFRpbWVsaW5lSXRlbVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBJdGVtcyB0byBiZSBkaXNwbGF5ZWQgb24gdGhlIHRpbWVsaW5lIGF0IGEgc3BlY2lmaWMgcG9pbnQgaW4gdGltZS5cbiAgICAgKiBTcGVjaWZ5IGRhdGEgaWYgeW91IG5lZWQgYWRkaXRpb25hbCBkYXRhIGZvciBjdXN0b20gcmVuZGVyaW5nIG9mIHRoZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtUaW1lbGluZVBvaW50SW5UaW1lSXRlbVtdfVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBvaW50SW5UaW1lSXRlbXM6IFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZW1wbGF0ZSB0byBiZSB1c2VkIGZvciBjdXN0b20gcmVuZGVyaW5nIG9mIHRoZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHsoVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCl9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRlbXBsYXRlIHRvIGJlIHVzZWQgZm9yIGN1c3RvbSByZW5kZXJpbmcgb2YgdGhlIHBvaW4taW4tdGltZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHsoVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCl9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcG9pbnRJblRpbWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZW1wbGF0ZSB0byBiZSB1c2VkIGZvciBjdXN0b20gcmVuZGVyaW5nIG9mIHRoZSBkYXkgbGFiZWxzLlxuICAgICAqXG4gICAgICogQHR5cGUgeyhUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkKX1cbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkYXlMYWJlbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIFxuICAgIC8qKlxuICAgICAqIEEgY3VzdG9tIGRhdGEgZnVuY3Rpb24gZm9yIHRoZSBkYXkgbGFiZWxzLiBcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgRGF0ZSBvYmplY3QgYXMgaW5wdXQgYW5kIHJldHVybnMgYW55IGN1c3RvbSBkYXRhIHRoYXQgd2lsbCBiZSBhdmFpbGFibGUgZm9yIHRoZSBjdXN0b20gdGVtcGxhdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGRheUxhYmVsQ3VzdG9tRGF0YUZuOiBUaW1lbGluZUN1c3RvbURhdGVEYXRhUHJvdmlkZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJlcXVlbmN5IG9mIHRoZSB0aWNrcyBvbiB0aGUgdGltZWxpbmUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7VGltZWxpbmVUaWNrRnJlcXVlbmN5fVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRpY2tGcmVxdWVuY3k6IFRpbWVsaW5lVGlja0ZyZXF1ZW5jeSA9ICdob3VybHknO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyZXF1ZW5jeSBvZiB0aGUgaG91ciBsYWJlbHMgb24gdGhlIHRpbWVsaW5lLlxuICAgICAqXG4gICAgICogQHR5cGUge1RpbWVsaW5lVGlja0ZyZXF1ZW5jeX1cbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBob3VyTGFiZWxGcmVxdWVuY3k6IFRpbWVsaW5lVGlja0ZyZXF1ZW5jeSA9ICczaHJzJztcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgem9vbSBsZXZlbCBvZiB0aGUgdGltZWxpbmUuIEluIHBlcmNlbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHpvb21QZXJjZW50OiBudW1iZXIgPSAxMDA7XG4gICAgQE91dHB1dCgpIHpvb21QZXJjZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsIG9mZnNldCBvZiB0aGUgdmlld3BvcnQgaW4gcGVyY2VudC4gVGhpcyBpcyB1c2VkIGluIHNjZW5hcmlvcyBcbiAgICAgKiB3aXRoIG11bHRpcGxlIGRheXMgd2hlbiB5b3Ugd2FudCB0byBzaG93IG5vbi1maXJzdCBkYXkgYXMgZGVmdWx0LlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSB2aWV3T2Zmc2V0UGVyY2VudDogbnVtYmVyID0gMDtcbiAgICBAT3V0cHV0KCkgdmlld09mZnNldFBlcmNlbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIGFsbG93ZWQgem9vbSBsZXZlbCBvZiB0aGUgdGltZWxpbmUuIEluIHBlcmNlbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIG1heFpvb21QZXJjZW50OiBudW1iZXIgPSA1MDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgaG91ciBsYWJlbHMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzaG93SG91ckxhYmVsczogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQ1NTIGNsYXNzIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGhvdXIgbGFiZWxzLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBob3VyTGFiZWxDbGFzcz86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc2hvdyBkYXkgbGFiZWxzLiBcbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNob3dEYXlMYWJlbHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBDU1MgY2xhc3MgdG8gYmUgYXBwbGllZCB0byB0aGUgZGF5IGxhYmVscy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgZGF5TGFiZWxDbGFzcz86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc2hvdyB0aW1lbGluZS4gVXNlZnVsIGZvciBoaWRpbmcgdGhlIHRpbWVsaW5lIHdoZW4gd2Ugb25seSBuZWVkIGhlYWRlci5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNob3dUaW1lbGluZTogYm9vbGVhbiA9IHRydWU7ICAgIFxuXG4gICAgLyoqXG4gICAgICogVGhlIENTUyBjbGFzcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBob3VyIHRpY2tzLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBob3VyVGlja0NsYXNzPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgdGltZWxpbmUuIERlZmF1bHQgaXMgMnJlbS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgdGltZWxpbmVIZWlnaHQ6IHN0cmluZyA9ICcycmVtJztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIHpvb20gYW5kIGRyYWcgZnVuY3Rpb25hbGl0eS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZVpvb21BbmREcmFnOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBtaW51dGVzIGFkZGVkIHRvIHN0YXJ0IGFuZCBzdG9wIHRvIGZpdCB0aGUgZGF0YSBvbiB0aGUgZWRnZXNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgb2ZmU2V0TWludXRlczogbnVtYmVyID0gMTU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbG9jYWxlcyB0byBiZSB1c2VkIGZvciBmb3JtYXR0aW5nIHRoZSB0aW1lbGluZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHsoc3RyaW5nIHwgQXJyYXk8c3RyaW5nPil9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgbG9jYWxlcz86IHN0cmluZyB8IEFycmF5PHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9sIGlmIHRob3NlIHBhcnRzIG9mIHNlZ21lbnRzIChvciB3aG9sZSBzZWdtZW50cykgdGhhdCBmYWxsIGludG8gdGhlIE9mZnNldCBcbiAgICAgKiBwZXJpb2QgYXJlIGRpc3BsYXllZCBvciBub3RcbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGN1dE9mZnNldDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyBkZWZhdWx0IGN1cnNvciwgdGhhdCBzaG91bGQgYmUgc2hvd24gd2hlbiBob3ZlcmluZyBvdmVyIHRpbWVsaW5lIGNvbXBvbmVudC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzICdkZWZhdWx0Jy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgZGVmYXVsdEN1cnNvcjogc3RyaW5nID0gXCJkZWZhdWx0XCI7XG5cbiAgICAvLyBwcm90ZWN0ZWRcbiAgICBob3VyVGlja3M6IFRpbWVsaW5lVGlja1tdID0gW107XG4gICAgaG91ckxhYmVsczogVGltZWxpbmVJbnRlcnZhbExhYmVsW10gPSBbXTtcbiAgICBkYXlMYWJlbHM6IFRpbWVsaW5lSW50ZXJ2YWxMYWJlbFtdID0gW107XG5cbiAgICBwcml2YXRlIF90aW1lbGluZVNlcnZpY2U6IFNkc1RpbWVsaW5lU2VydmljZSA9IG5ldyBTZHNUaW1lbGluZVNlcnZpY2UoXG4gICAgICAgIHRoaXMuc3RhcnQsXG4gICAgICAgIHRoaXMuZW5kLFxuICAgICAgICB0aGlzLm9mZlNldE1pbnV0ZXMsXG4gICAgICAgIHRoaXMuY3V0T2Zmc2V0XG4gICAgKTtcblxuICAgIHB1YmxpYyBwcmVzZW50YXRpb25JdGVtczogVGltZWxpbmVJdGVtUHJlc2VudGF0aW9uW10gPSBbXTtcbiAgICBwdWJsaWMgcHJlc2VudGF0aW9uUG9pbnRJblRpbWVJdGVtczogVGltZWxpbmVQb2ludEluVGltZUl0ZW1QcmVzZW50YXRpb25bXSA9IFtdO1xuXG4gICAgcHVibGljIGlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICBwdWJsaWMgaW5pdGlhbERyYWdYID0gMDtcblxuICAgIHByaXZhdGUgdmlld09mZnNldFBlcmNlbnREcmFnU3RhcnQgPSAwO1xuXG4gICAgQFZpZXdDaGlsZCgndmlld3BvcnQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBfdmlld3BvcnQ6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVUaWNrcygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnQgJiYgdGhpcy5lbmQpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lU2VydmljZSA9IG5ldyBTZHNUaW1lbGluZVNlcnZpY2UoXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydCxcbiAgICAgICAgICAgICAgICB0aGlzLmVuZCxcbiAgICAgICAgICAgICAgICB0aGlzLm9mZlNldE1pbnV0ZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5jdXRPZmZzZXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVGlja3MoKTtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lSXRlbXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydzdGFydCddIHx8IGNoYW5nZXNbJ2VuZCddIHx8IGNoYW5nZXNbJ29mZlNldE1pbnV0ZXMnXSB8fCBjaGFuZ2VzWydjdXRPZmZzZXQnXSkge1xuICAgICAgICAgICAgdGhpcy5fdGltZWxpbmVTZXJ2aWNlID0gbmV3IFNkc1RpbWVsaW5lU2VydmljZShcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LFxuICAgICAgICAgICAgICAgIHRoaXMuZW5kLFxuICAgICAgICAgICAgICAgIHRoaXMub2ZmU2V0TWludXRlcyxcbiAgICAgICAgICAgICAgICB0aGlzLmN1dE9mZnNldFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVUaWNrcygpO1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUludGVybmFsVGltZWxpbmVJdGVtcygpOyAgICAgICAgICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10pIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lSXRlbXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydwb2ludEluVGltZUl0ZW1zJ10pIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ3pvb21QZXJjZW50J10pIHtcbiAgICAgICAgICAgIC8vIHRoaXMudmlld09mZnNldFBlcmNlbnQgPSAodGhpcy56b29tUGVyY2VudCAtIDEwMCkgLyAtMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydzaG93RGF5TGFiZWxzJ10gfHwgY2hhbmdlc1snc2hvd0hvdXJMYWJlbHMnXSkge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVRpY2tzKCk7XG4gICAgICAgIH0gICAgICBcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgICAvLyNyZWdpb24gbW91c2Ugd2hlZWwgem9vbVxuICAgIG9uU2Nyb2xsKGV2ZW50OiBXaGVlbEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb21BbmREcmFnKSB7XG5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gTWF0aC5zaWduKGV2ZW50LmRlbHRhWSk7XG4gICAgICAgICAgICBjb25zdCBuZXdab29tUGVyY2VudCA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgIE1hdGgubWF4KHRoaXMuem9vbVBlcmNlbnQgKyAtZGVsdGEgKiAyMCwgMTAwKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1heFpvb21QZXJjZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgZGVsdGFab29tUGVyY2VudCA9IG5ld1pvb21QZXJjZW50IC0gdGhpcy56b29tUGVyY2VudDtcbiAgICAgICAgICAgIHRoaXMuem9vbVBlcmNlbnQgPSBuZXdab29tUGVyY2VudDtcbiAgICAgICAgICAgIHRoaXMuem9vbVBlcmNlbnRDaGFuZ2UuZW1pdCh0aGlzLnpvb21QZXJjZW50KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gZ2V0IHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yIG9uIHRoZSB2aWV3cG9ydCBzbyB3ZSBjYW4gem9vbSBpbiBpbnRvIHRoaXMgcG9zaXRpb25cbiAgICAgICAgICAgIGNvbnN0IHggPSBldmVudC5jbGllbnRYIC0gdGhpcy5fdmlld3BvcnQ/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvclJlbGF0aXZlUG9zaXRpb24gPSB4IC8gdGhpcy5fdmlld3BvcnQ/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICAvLyB0aGlzLnZpZXdPZmZzZXRQZXJjZW50ID0gdGhpcy52aWV3T2Zmc2V0UGVyY2VudCAtIGRlbHRhWm9vbVBlcmNlbnQgKiBjdXJzb3JSZWxhdGl2ZVBvc2l0aW9uO1xuXG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbk9mZnNldCh0aGlzLnZpZXdPZmZzZXRQZXJjZW50IC0gZGVsdGFab29tUGVyY2VudCAqIGN1cnNvclJlbGF0aXZlUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIGRyYWdnaW5nXG4gICAgXG4gICAgcHVibGljIG9uRHJhZ1N0YXJ0KGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbmFibGVab29tQW5kRHJhZyAmJiB0aGlzLnpvb21QZXJjZW50ID4gMTAwKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld09mZnNldFBlcmNlbnREcmFnU3RhcnQgPSB0aGlzLnZpZXdPZmZzZXRQZXJjZW50O1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRHJhZ1ggPSBldmVudC5jbGllbnRYO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFRvdWNoRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxEcmFnWCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZW1vdmUnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkRyYWdNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb21BbmREcmFnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFggPSBldmVudC5jbGllbnRYO1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoY3VycmVudFgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnRvdWNobW92ZScsIFsnJGV2ZW50J10pXG4gICAgb25EcmFnTW92ZVRvdWNoKGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb21BbmREcmFnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChjdXJyZW50WCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnRvdWNoZW5kJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25EcmFnRW5kKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbmFibGVab29tQW5kRHJhZykge1xuICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVFbGVtZW50KGN1cnJlbnRYOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlmZiA9IGN1cnJlbnRYIC0gdGhpcy5pbml0aWFsRHJhZ1g7XG4gICAgICAgIGlmICh0aGlzLl92aWV3cG9ydCAmJiB0aGlzLl92aWV3cG9ydC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBkaWZmSW5QZXJjZW50ID0gKGRpZmYgLyB0aGlzLl92aWV3cG9ydD8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCkgKiAxMDA7XG4gICAgICAgICAgICAvLyB0aGlzLnZpZXdPZmZzZXRQZXJjZW50ID0gdGhpcy52aWV3T2Zmc2V0UGVyY2VudERyYWdTdGFydCArIGRpZmZJblBlcmNlbnQ7XG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbk9mZnNldCh0aGlzLnZpZXdPZmZzZXRQZXJjZW50RHJhZ1N0YXJ0ICsgZGlmZkluUGVyY2VudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIHByaXZhdGUgY29uc3RyYWluT2Zmc2V0KG5ld09mZnNldDogbnVtYmVyKTogdm9pZCB7ICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuem9vbVBlcmNlbnQgKyBuZXdPZmZzZXQgPCAxMDApIHtcbiAgICAgICAgICAgIG5ld09mZnNldCA9IC10aGlzLnpvb21QZXJjZW50ICsgMTAwO1xuICAgICAgICB9XG4gICAgICAgIG5ld09mZnNldCA9IE1hdGgubWluKDAsIG5ld09mZnNldCk7XG4gICAgICAgIGlmIChuZXdPZmZzZXQgIT0gdGhpcy52aWV3T2Zmc2V0UGVyY2VudCkge1xuICAgICAgICAgICAgdGhpcy52aWV3T2Zmc2V0UGVyY2VudCA9IG5ld09mZnNldDtcbiAgICAgICAgICAgIHRoaXMudmlld09mZnNldFBlcmNlbnRDaGFuZ2UuZW1pdCh0aGlzLnZpZXdPZmZzZXRQZXJjZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVUaWNrcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3VyVGlja3MgPSB0aGlzLl90aW1lbGluZVNlcnZpY2UuZ2V0SG91clRpY2tzKHRoaXMudGlja0ZyZXF1ZW5jeSk7XG4gICAgICAgIHRoaXMuZGF5TGFiZWxzID0gdGhpcy5fdGltZWxpbmVTZXJ2aWNlLmdldERheUxhYmVscyh0aGlzLmxvY2FsZXMsIHRoaXMuZGF5TGFiZWxDdXN0b21EYXRhRm4pO1xuICAgICAgICB0aGlzLmhvdXJMYWJlbHMgPSB0aGlzLl90aW1lbGluZVNlcnZpY2UuZ2V0SG91ckxhYmVscyh0aGlzLmhvdXJMYWJlbEZyZXF1ZW5jeSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUludGVybmFsVGltZWxpbmVJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3V0dE9mZlN0YXJ0ID0gdGhpcy5jdXRPZmZzZXQgPyB0aGlzLnN0YXJ0IDogbmV3IERhdGUodGhpcy5zdGFydC5nZXRUaW1lKCkgLSB0aGlzLm9mZlNldE1pbnV0ZXMgKiA2MDAwMCk7XG4gICAgICAgIGNvbnN0IGN1dHRPZmZFbmQgPSB0aGlzLmN1dE9mZnNldCA/IHRoaXMuZW5kIDogbmV3IERhdGUodGhpcy5lbmQuZ2V0VGltZSgpICsgdGhpcy5vZmZTZXRNaW51dGVzICogNjAwMDApO1xuXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uSXRlbXMgPSB0aGlzLml0ZW1zXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmVuZCA8IGN1dHRPZmZTdGFydCB8fCBpdGVtLnN0YXJ0ID4gY3V0dE9mZkVuZCA/IGZhbHNlIDogdHJ1ZSlcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZShpdGVtLnN0YXJ0KS50b0xvY2FsZVRpbWVTdHJpbmcodGhpcy5sb2NhbGVzPz8gW10sIHsgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoaXRlbS5lbmQpLnRvTG9jYWxlVGltZVN0cmluZyh0aGlzLmxvY2FsZXM/PyBbXSwgeyBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJzItZGlnaXQnIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVSYW5nZSA9IGAke3N0YXJ0VGltZX0gLSAke2VuZFRpbWV9YDtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLl90aW1lbGluZVNlcnZpY2UuZ2V0WChpdGVtLnN0YXJ0KSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuX3RpbWVsaW5lU2VydmljZS5nZXRXaWR0aEZyb21UaW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZW5kXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGhpbnQ6IGl0ZW0uaGludCA/PyB0aW1lUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaXRlbS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogaXRlbS50b3AgPz8gJzUwJScsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXRlbS5oZWlnaHQgPz8gJzYwJScsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBpdGVtLmNsYXNzLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3V0dE9mZlN0YXJ0ID0gdGhpcy5jdXRPZmZzZXQgPyB0aGlzLnN0YXJ0IDogbmV3IERhdGUodGhpcy5zdGFydC5nZXRUaW1lKCkgLSB0aGlzLm9mZlNldE1pbnV0ZXMgKiA2MDAwMCk7XG4gICAgICAgIGNvbnN0IGN1dHRPZmZFbmQgPSB0aGlzLmN1dE9mZnNldCA/IHRoaXMuZW5kIDogbmV3IERhdGUodGhpcy5lbmQuZ2V0VGltZSgpICsgdGhpcy5vZmZTZXRNaW51dGVzICogNjAwMDApO1xuXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUG9pbnRJblRpbWVJdGVtcyA9IHRoaXMucG9pbnRJblRpbWVJdGVtc1xuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5kYXRlIDwgY3V0dE9mZlN0YXJ0IHx8IGl0ZW0uZGF0ZSA+IGN1dHRPZmZFbmQgPyBmYWxzZSA6IHRydWUpXG4gICAgICAgICAgICAubWFwKChpdGVtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lUG9pbnRTdHJpbmcgPSBuZXcgRGF0ZShpdGVtLmRhdGUpLnRvTG9jYWxlVGltZVN0cmluZyh0aGlzLmxvY2FsZXM/PyBbXSwgeyBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJzItZGlnaXQnIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLl90aW1lbGluZVNlcnZpY2UuZ2V0WChpdGVtLmRhdGUpLFxuICAgICAgICAgICAgICAgICAgICBoaW50OiBpdGVtLmhpbnQgPz8gdGltZVBvaW50U3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IGl0ZW0udG9wID8/ICcyMCUnLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGl0ZW0uaGVpZ2h0ID8/ICcxcmVtJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGl0ZW0ud2lkdGggPz8gJzFyZW0nLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogaXRlbS5jbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpdGVtLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNkZWZhdWx0SXRlbVRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgIDxkaXYgXG4gICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLWl0ZW0gaC0xMDBcIlxuICAgICAgICBbdGl0bGVdPVwiaXRlbS5oaW50XCJcbiAgICAgICAgPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UG9pbnRJblRpbWVJdGVtVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgPGRpdiBcbiAgICAgICAgY2xhc3M9XCJzZHMtdGltZWxpbmUtaXRlbSBoLTEwMFwiXG4gICAgICAgIFt0aXRsZV09XCJpdGVtLmhpbnRcIlxuICAgICAgICA+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHREYXlMYWJlbFRlbXBsYXRlIGxldC1sYWJlbD1cImxhYmVsXCI+XG4gICAge3tsYWJlbC5sYWJlbH19XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2IFxuICAgICN2aWV3cG9ydFxuICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLXZpZXdwb3J0XCJcbiAgICAod2hlZWwpPVwib25TY3JvbGwoJGV2ZW50KVwiXG5cbiAgICAobW91c2Vkb3duKT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgICh0b3VjaHN0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgID5cblxuICAgIDxkaXYgXG4gICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLWNvbnRhaW5lciBkLWZsZXggZmxleC1jb2x1bW5cIlxuICAgICAgICBbc3R5bGUubGVmdC4lXT1cInZpZXdPZmZzZXRQZXJjZW50XCJcbiAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiem9vbVBlcmNlbnRcIlxuICAgICAgICBbc3R5bGUuY3Vyc29yXT1cImlzRHJhZ2dpbmcgPyAnZXctcmVzaXplJyA6IGRlZmF1bHRDdXJzb3JcIlxuICAgICAgICA+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJzaG93RGF5TGFiZWxzXCIgXG4gICAgICAgICAgICBjbGFzcz1cInNkcy10aW1lbGluZS1kYXktaGVhZGVyXCI+XG5cbiAgICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGRheUxhYmVsc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZHMtZGF5LWxhYmVsXCIgIFxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRheUxhYmVsQ2xhc3MgPz8gbnVsbFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJsYWJlbC54XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJsYWJlbC53aWR0aFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGF5TGFiZWxUZW1wbGF0ZSA/IGRheUxhYmVsVGVtcGxhdGUgOiBkZWZhdWx0RGF5TGFiZWxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bGFiZWw6IGxhYmVsfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0hvdXJMYWJlbHNcIiBcbiAgICAgICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLWhvdXItaGVhZGVyXCI+XG5cbiAgICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGhvdXJMYWJlbHM7XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNkcy1ob3VyLWxhYmVsXCIgIFxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImhvdXJMYWJlbENsYXNzID8/IG51bGxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LiVdPVwibGFiZWwueFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnJlbV09XCIxLjJcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbGVmdCc6ICdjYWxjKCcgKyBsYWJlbC54ICsgJyUgLSAwLjZyZW0pJ31cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHt7bGFiZWwubGFiZWx9fVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgXG4gICAgICAgICAgICAqbmdJZj1cInNob3dUaW1lbGluZVwiXG4gICAgICAgICAgICBjbGFzcz1cInNkcy10aW1lbGluZSBmbGV4LWdyb3ctMVwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cInRpbWVsaW5lSGVpZ2h0XCJcbiAgICAgICAgICAgID5cblxuICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdGljayBvZiBob3VyVGlja3NcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLXRpY2tcIiAgXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaG91clRpY2tDbGFzcyA/PyBudWxsXCJcdFxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInRpY2sueCA9PSAxMDAgPyB7J2xlZnQnOiAnY2FsYygnICsgdGljay54ICsnJSAtIDFweCknfSA6IHsnbGVmdCc6ICdjYWxjKCcgKyB0aWNrLnggKyAnJSAtIDAuNXB4KSd9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHByZXNlbnRhdGlvbkl0ZW1zXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNkcy10aW1lbGluZS1pdGVtLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jbGFzcyA/PyBudWxsXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICd3aWR0aCc6ICdtYXgoJyArIGl0ZW0ud2lkdGggKyclLCAxcHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJ3RvcCc6ICdjYWxjKCcgKyBpdGVtLnRvcCArICcgLSBtYXgoY2FsYygnICsgaXRlbS5oZWlnaHQgKycvMiksIDFweCkpJywgXG4gICAgICAgICAgICAgICAgfVwiXG5cbiAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cIml0ZW0ueFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJpdGVtLmhlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJpdGVtLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlID8gaXRlbVRlbXBsYXRlIDogZGVmYXVsdEl0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogaXRlbX1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gIFxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPCEtLSBbbmdDbGFzc109XCJpdGVtLmNsYXNzXCJcdCAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJlc2VudGF0aW9uUG9pbnRJblRpbWVJdGVtc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZHMtdGltZWxpbmUtcG9pbnQtaW4tdGltZS1pdGVtLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jbGFzcyA/PyBudWxsXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cIml0ZW0uaGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiaXRlbS53aWR0aFwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAndG9wJzogJ2NhbGMoJyArIGl0ZW0udG9wICsgJyAtIG1heChjYWxjKCcgKyBpdGVtLmhlaWdodCArJy8yKSwgMXB4KSknLCBcbiAgICAgICAgICAgICAgICAgICAgJ2xlZnQnOiAnY2FsYygnICsgaXRlbS54ICsgJyUgLSBtYXgoIGNhbGMoJyArIGl0ZW0ud2lkdGggKycvMiksIDFweCkpJyxcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJpdGVtLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicG9pbnRJblRpbWVUZW1wbGF0ZSA/IHBvaW50SW5UaW1lVGVtcGxhdGUgOiBkZWZhdWx0UG9pbnRJblRpbWVJdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGl0ZW19XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICBcblxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==