UNPKG

ng-devui

Version:

DevUI components based on Angular

116 lines 21 kB
import { Component, ContentChildren, ElementRef, Input, QueryList, TemplateRef } from '@angular/core'; import { TimeAxisItemComponent } from './time-axis-item/time-axis-item.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "./time-axis-item/time-axis-item.component"; export class TimeAxisComponent { constructor(elementRef) { this.elementRef = elementRef; this.direction = 'vertical'; this.mode = 'normal'; this.widthMode = 'fitContent'; } ngAfterContentInit() { if (this.mode === 'alternative') { this.updateAlternativePosition(); } this.vanishHorizontalLastLine(); } ngAfterViewInit() { if (this._direction === 'horizontal' && this.mode !== 'top' && this.mode !== 'bottom') { const ulElement = this.elementRef.nativeElement.querySelector('.devui-time-axis-horizontal'); const topElement = this.elementRef.nativeElement.querySelector('.devui-time-axis-item-data-horizontal-top'); const bottomElement = this.elementRef.nativeElement.querySelector('.devui-time-axis-item-data-horizontal-bottom'); ulElement.style.height = `${Math.max(topElement.offsetHeight, bottomElement.offsetHeight) * 2 + 42}px`; } } get _direction() { if (this.data !== undefined) { return this.data.direction || 'vertical'; } else { return this.direction; } } get _widthMode() { if (this.data !== undefined) { return this.data.widthMode; } else { return this.widthMode; } } updateAlternativePosition() { if (this.data === undefined) { this.listOfItems.forEach((item, index) => { if (this._direction === 'vertical') { item.position = index % 2 === 0 ? 'left' : 'right'; } else { item.position = index % 2 === 0 ? 'bottom' : 'top'; } }); } else { for (let i = 0; i < this.data.list.length; i++) { if (this._direction === 'vertical') { this.data.list[i].position = i % 2 === 0 ? 'left' : 'right'; } else { this.data.list[i].position = i % 2 === 0 ? 'bottom' : 'top'; } } } } vanishHorizontalLastLine() { if (this._direction === 'horizontal') { if (this.data === undefined) { if (this.listOfItems.last.lineStyle === undefined) { this.listOfItems.last.lineStyle = { style: 'none' }; } } else { if (this.data.list[this.data.list.length - 1].lineStyle === undefined) { this.data.list[this.data.list.length - 1].lineStyle = { style: 'none' }; } } } } changeStatusLine(event) { if (this.data !== undefined && this.data.direction === 'horizontal') { setTimeout(() => { this.data.list.forEach((item, index, array) => { if (item.status === 'runned' && index > 0) { array[index - 1].lineStyle = { style: 'solid', color: 'var(--devui-success)' }; } else if (item.status === 'running' && index > 0) { array[index - 1].lineStyle = { style: 'dotted', color: 'var(--devui-success)' }; } else if (item.status === '' && index > 0) { array[index - 1].lineStyle = { style: 'solid' }; } }); }); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimeAxisComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TimeAxisComponent, selector: "d-time-axis", inputs: { data: "data", contentTemplate: "contentTemplate", direction: "direction", mode: "mode", widthMode: "widthMode" }, queries: [{ propertyName: "listOfItems", predicate: TimeAxisItemComponent }], exportAs: ["time-axis"], ngImport: i0, template: "<div\n [class.devui-time-axis-horizontal]=\"_direction === 'horizontal'\"\n [class.devui-time-axis-vertical]=\"_direction === 'vertical'\"\n [class.devui-time-axis-horizontal-fullwidth]=\"_direction === 'horizontal' && _widthMode === 'fitWidth'\"\n>\n <ng-container *ngIf=\"data !== undefined\">\n <d-time-axis-item\n *ngFor=\"let list of data.list\"\n [model]=\"data.model\"\n [direction]=\"_direction\"\n [time]=\"list.time\"\n [timePosition]=\"data.position\"\n [position]=\"list.position\"\n [lineStyle]=\"list.lineStyle\"\n [customDot]=\"list.customDot\"\n [dotColor]=\"list.dotColor\"\n [iconClass]=\"list.iconClass\"\n [type]=\"list.type\"\n [status]=\"list.status\"\n [extraElement]=\"list.extraElement\"\n [text]=\"list.text\"\n [contentTemplate]=\"contentTemplate\"\n [data]=\"list.data\"\n [mode]=\"mode\"\n [horizontalAlign]=\"data.horizontalAlign || 'center'\"\n (statusChanged)=\"changeStatusLine($event)\"\n >\n </d-time-axis-item>\n </ng-container>\n <ng-content select=\"d-time-axis-item\"></ng-content>\n</div>\n", styles: [".devui-time-axis-vertical{display:flex;flex-direction:column;align-items:center;position:relative}.devui-time-axis-vertical ::ng-deep d-time-axis-item{width:100%}.devui-time-axis-horizontal{display:flex;flex-direction:row;align-items:center!important;position:relative}.devui-time-axis-horizontal ::ng-deep d-time-axis-item{height:100%}.devui-time-axis-horizontal-fullwidth ::ng-deep d-time-axis-item{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TimeAxisItemComponent, selector: "d-time-axis-item", inputs: ["model", "direction", "time", "timePosition", "position", "lineStyle", "customDot", "dotColor", "iconClass", "extraElement", "text", "contentTemplate", "data", "horizontalAlign", "mode", "type", "status"], outputs: ["statusChanged"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimeAxisComponent, decorators: [{ type: Component, args: [{ selector: 'd-time-axis', exportAs: 'time-axis', preserveWhitespaces: false, template: "<div\n [class.devui-time-axis-horizontal]=\"_direction === 'horizontal'\"\n [class.devui-time-axis-vertical]=\"_direction === 'vertical'\"\n [class.devui-time-axis-horizontal-fullwidth]=\"_direction === 'horizontal' && _widthMode === 'fitWidth'\"\n>\n <ng-container *ngIf=\"data !== undefined\">\n <d-time-axis-item\n *ngFor=\"let list of data.list\"\n [model]=\"data.model\"\n [direction]=\"_direction\"\n [time]=\"list.time\"\n [timePosition]=\"data.position\"\n [position]=\"list.position\"\n [lineStyle]=\"list.lineStyle\"\n [customDot]=\"list.customDot\"\n [dotColor]=\"list.dotColor\"\n [iconClass]=\"list.iconClass\"\n [type]=\"list.type\"\n [status]=\"list.status\"\n [extraElement]=\"list.extraElement\"\n [text]=\"list.text\"\n [contentTemplate]=\"contentTemplate\"\n [data]=\"list.data\"\n [mode]=\"mode\"\n [horizontalAlign]=\"data.horizontalAlign || 'center'\"\n (statusChanged)=\"changeStatusLine($event)\"\n >\n </d-time-axis-item>\n </ng-container>\n <ng-content select=\"d-time-axis-item\"></ng-content>\n</div>\n", styles: [".devui-time-axis-vertical{display:flex;flex-direction:column;align-items:center;position:relative}.devui-time-axis-vertical ::ng-deep d-time-axis-item{width:100%}.devui-time-axis-horizontal{display:flex;flex-direction:row;align-items:center!important;position:relative}.devui-time-axis-horizontal ::ng-deep d-time-axis-item{height:100%}.devui-time-axis-horizontal-fullwidth ::ng-deep d-time-axis-item{width:100%}\n"] }] }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { listOfItems: [{ type: ContentChildren, args: [TimeAxisItemComponent] }], data: [{ type: Input }], contentTemplate: [{ type: Input }], direction: [{ type: Input }], mode: [{ type: Input }], widthMode: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1heGlzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL3RpbWUtYXhpcy90aW1lLWF4aXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvdGltZS1heGlzL3RpbWUtYXhpcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1DLFNBQVMsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7O0FBVWxGLE1BQU0sT0FBTyxpQkFBaUI7SUFRNUIsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUpqQyxjQUFTLEdBQUcsVUFBVSxDQUFDO1FBQ3ZCLFNBQUksR0FBaUIsUUFBUSxDQUFDO1FBQzlCLGNBQVMsR0FBRyxZQUFZLENBQUM7SUFJbEMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBaUIsQ0FBQztZQUM3RyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsMkNBQTJD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TUFBTSxLQUFLLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQzNDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO29CQUNsRCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzsrR0E3RlUsaUJBQWlCO21HQUFqQixpQkFBaUIsMk1BQ1gscUJBQXFCLHNEQ1p4QyxzbkNBK0JBOzs0RkRwQmEsaUJBQWlCO2tCQVI3QixTQUFTOytCQUNFLGFBQWEsWUFHYixXQUFXLHVCQUNBLEtBQUs7K0VBSWMsV0FBVztzQkFBbEQsZUFBZTt1QkFBQyxxQkFBcUI7Z0JBQzdCLElBQUk7c0JBQVosS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgSW5wdXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRpbWVBeGlzSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vdGltZS1heGlzLWl0ZW0vdGltZS1heGlzLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFRpbWVBeGlzTW9kZSB9IGZyb20gJy4vdGltZS1heGlzLnR5cGUnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZC10aW1lLWF4aXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGltZS1heGlzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbYC4vdGltZS1heGlzLmNvbXBvbmVudC5zY3NzYF0sXG4gIGV4cG9ydEFzOiAndGltZS1heGlzJyxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG59KVxuXG5leHBvcnQgY2xhc3MgVGltZUF4aXNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQENvbnRlbnRDaGlsZHJlbihUaW1lQXhpc0l0ZW1Db21wb25lbnQpIGxpc3RPZkl0ZW1zITogUXVlcnlMaXN0PFRpbWVBeGlzSXRlbUNvbXBvbmVudD47XG4gIEBJbnB1dCgpIGRhdGE7XG4gIEBJbnB1dCgpIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJztcbiAgQElucHV0KCkgbW9kZTogVGltZUF4aXNNb2RlID0gJ25vcm1hbCc7XG4gIEBJbnB1dCgpIHdpZHRoTW9kZSA9ICdmaXRDb250ZW50JztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcblxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdhbHRlcm5hdGl2ZScpIHtcbiAgICAgIHRoaXMudXBkYXRlQWx0ZXJuYXRpdmVQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMudmFuaXNoSG9yaXpvbnRhbExhc3RMaW5lKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIHRoaXMubW9kZSAhPT0gJ3RvcCcgJiYgdGhpcy5tb2RlICE9PSAnYm90dG9tJykge1xuICAgICAgY29uc3QgdWxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRldnVpLXRpbWUtYXhpcy1ob3Jpem9udGFsJykgIGFzIEhUTUxFbGVtZW50O1xuICAgICAgY29uc3QgdG9wRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kZXZ1aS10aW1lLWF4aXMtaXRlbS1kYXRhLWhvcml6b250YWwtdG9wJykgIGFzIEhUTUxFbGVtZW50O1xuICAgICAgY29uc3QgYm90dG9tRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kZXZ1aS10aW1lLWF4aXMtaXRlbS1kYXRhLWhvcml6b250YWwtYm90dG9tJykgIGFzIEhUTUxFbGVtZW50O1xuICAgICAgdWxFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAkeyBNYXRoLm1heCh0b3BFbGVtZW50Lm9mZnNldEhlaWdodCwgYm90dG9tRWxlbWVudC5vZmZzZXRIZWlnaHQpICogMiArIDQyfXB4YDtcbiAgICB9XG4gIH1cblxuICBnZXQgX2RpcmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5kYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEuZGlyZWN0aW9uIHx8ICd2ZXJ0aWNhbCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbjtcbiAgICB9XG4gIH1cblxuICBnZXQgX3dpZHRoTW9kZSgpIHtcbiAgICBpZiAodGhpcy5kYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEud2lkdGhNb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy53aWR0aE1vZGU7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQWx0ZXJuYXRpdmVQb3NpdGlvbigpIHtcbiAgICBpZiAodGhpcy5kYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubGlzdE9mSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIGl0ZW0ucG9zaXRpb24gPSBpbmRleCAlIDIgPT09IDAgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW0ucG9zaXRpb24gPSBpbmRleCAlIDIgPT09IDAgPyAnYm90dG9tJyA6ICd0b3AnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLmxpc3RbaV0ucG9zaXRpb24gPSBpICUgMiA9PT0gMCA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kYXRhLmxpc3RbaV0ucG9zaXRpb24gPSBpICUgMiA9PT0gMCA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YW5pc2hIb3Jpem9udGFsTGFzdExpbmUoKSB7XG4gICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICBpZiAodGhpcy5kYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdE9mSXRlbXMubGFzdC5saW5lU3R5bGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMubGlzdE9mSXRlbXMubGFzdC5saW5lU3R5bGUgPSB7IHN0eWxlOiAnbm9uZScgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5saXN0W3RoaXMuZGF0YS5saXN0Lmxlbmd0aCAtIDFdLmxpbmVTdHlsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLmxpc3RbdGhpcy5kYXRhLmxpc3QubGVuZ3RoIC0gMV0ubGluZVN0eWxlID0geyBzdHlsZTogJ25vbmUnIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTdGF0dXNMaW5lKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGF0YSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZGF0YS5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YS5saXN0LmZvckVhY2goKGl0ZW0sIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLnN0YXR1cyA9PT0gJ3J1bm5lZCcgJiYgaW5kZXggPiAwKSB7XG4gICAgICAgICAgICBhcnJheVtpbmRleCAtIDFdLmxpbmVTdHlsZSA9IHsgc3R5bGU6ICdzb2xpZCcsIGNvbG9yOiAndmFyKC0tZGV2dWktc3VjY2VzcyknIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnN0YXR1cyA9PT0gJ3J1bm5pbmcnICYmIGluZGV4ID4gMCkge1xuICAgICAgICAgICAgYXJyYXlbaW5kZXggLSAxXS5saW5lU3R5bGUgPSB7IHN0eWxlOiAnZG90dGVkJywgY29sb3I6ICd2YXIoLS1kZXZ1aS1zdWNjZXNzKScgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uc3RhdHVzID09PSAnJyAmJiBpbmRleCA+IDApIHtcbiAgICAgICAgICAgIGFycmF5W2luZGV4IC0gMV0ubGluZVN0eWxlID0geyBzdHlsZTogJ3NvbGlkJyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgW2NsYXNzLmRldnVpLXRpbWUtYXhpcy1ob3Jpem9udGFsXT1cIl9kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1wiXG4gIFtjbGFzcy5kZXZ1aS10aW1lLWF4aXMtdmVydGljYWxdPVwiX2RpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJ1wiXG4gIFtjbGFzcy5kZXZ1aS10aW1lLWF4aXMtaG9yaXpvbnRhbC1mdWxsd2lkdGhdPVwiX2RpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIF93aWR0aE1vZGUgPT09ICdmaXRXaWR0aCdcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YSAhPT0gdW5kZWZpbmVkXCI+XG4gICAgPGQtdGltZS1heGlzLWl0ZW1cbiAgICAgICpuZ0Zvcj1cImxldCBsaXN0IG9mIGRhdGEubGlzdFwiXG4gICAgICBbbW9kZWxdPVwiZGF0YS5tb2RlbFwiXG4gICAgICBbZGlyZWN0aW9uXT1cIl9kaXJlY3Rpb25cIlxuICAgICAgW3RpbWVdPVwibGlzdC50aW1lXCJcbiAgICAgIFt0aW1lUG9zaXRpb25dPVwiZGF0YS5wb3NpdGlvblwiXG4gICAgICBbcG9zaXRpb25dPVwibGlzdC5wb3NpdGlvblwiXG4gICAgICBbbGluZVN0eWxlXT1cImxpc3QubGluZVN0eWxlXCJcbiAgICAgIFtjdXN0b21Eb3RdPVwibGlzdC5jdXN0b21Eb3RcIlxuICAgICAgW2RvdENvbG9yXT1cImxpc3QuZG90Q29sb3JcIlxuICAgICAgW2ljb25DbGFzc109XCJsaXN0Lmljb25DbGFzc1wiXG4gICAgICBbdHlwZV09XCJsaXN0LnR5cGVcIlxuICAgICAgW3N0YXR1c109XCJsaXN0LnN0YXR1c1wiXG4gICAgICBbZXh0cmFFbGVtZW50XT1cImxpc3QuZXh0cmFFbGVtZW50XCJcbiAgICAgIFt0ZXh0XT1cImxpc3QudGV4dFwiXG4gICAgICBbY29udGVudFRlbXBsYXRlXT1cImNvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICBbZGF0YV09XCJsaXN0LmRhdGFcIlxuICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICBbaG9yaXpvbnRhbEFsaWduXT1cImRhdGEuaG9yaXpvbnRhbEFsaWduIHx8ICdjZW50ZXInXCJcbiAgICAgIChzdGF0dXNDaGFuZ2VkKT1cImNoYW5nZVN0YXR1c0xpbmUoJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvZC10aW1lLWF4aXMtaXRlbT5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImQtdGltZS1heGlzLWl0ZW1cIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==