UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

69 lines 19.6 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { Component } from "@angular/core"; import moment from "moment/moment"; import { DatePickerInnerComponent } from "./date-picker-inner.component"; import * as i0 from "@angular/core"; import * as i1 from "./date-picker-inner.component"; import * as i2 from "@angular/common"; import * as i3 from "../button/button.component"; /** @ignore */ export class YearPickerComponent { constructor(datePicker) { this.datePicker = datePicker; this.rows = []; this.datePicker = datePicker; } ngOnInit() { this.datePicker.stepYear = { years: this.datePicker.yearRange }; this.datePicker.setRefreshViewHandler(() => { const picker = this.datePicker; const years = new Array(picker.yearRange); let date = picker.value && picker.value.isValid() ? picker.value.clone() : moment(); date = date.set("date", 1); const start = this.getStartingYear(date.year()); for (let i = 0; i < picker.yearRange; i++) { date = date.set({ year: start + i }); years[i] = picker.createDateObject(date, picker.formatYear); years[i].uid = picker.uniqueId + "-" + i; } this.title = [ years[0].label, years[picker.yearRange - 1].label, ].join(" - "); this.rows = picker.split(years, 5); }, "year"); this.datePicker.setCompareHandler((date1, date2) => date1.year() - date2.year(), "year"); } getStartingYear(year) { return (((year - 1) / this.datePicker.yearRange) * this.datePicker.yearRange + 1); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: YearPickerComponent, deps: [{ token: i1.DatePickerInnerComponent }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: YearPickerComponent, selector: "nui-year-picker", ngImport: i0, template: "<table *ngIf=\"datePicker.datepickerMode === 'year'\" role=\"grid\">\n <thead>\n <tr>\n <th>\n <button\n nui-button\n type=\"button\"\n icon=\"caret-left\"\n displayStyle=\"action\"\n (click)=\"datePicker.move(-1, $event)\"\n tabindex=\"-1\"\n ></button>\n </th>\n <th [attr.colspan]=\"3\">\n <button\n nui-button\n type=\"button\"\n [id]=\"datePicker.uniqueId + '-title'\"\n displayStyle=\"action\"\n [disabled]=\"\n datePicker.datepickerMode === datePicker.maxMode\n \"\n class=\"change-mode-button\"\n [ngClass]=\"{\n disabled:\n datePicker.datepickerMode === datePicker.maxMode\n }\"\n (click)=\"datePicker.toggleMode($event)\"\n tabindex=\"-1\"\n >\n <span>{{ title }}</span>\n </button>\n </th>\n <th>\n <button\n nui-button\n type=\"button\"\n icon=\"caret-right\"\n displayStyle=\"action\"\n (click)=\"datePicker.move(1, $event)\"\n tabindex=\"-1\"\n ></button>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let row of rows\">\n <td *ngFor=\"let cell of row\" class=\"text-center year\">\n <button\n nui-button\n type=\"button\"\n displayStyle=\"action\"\n [ngClass]=\"{\n selected: cell.selected,\n disabled: cell.disabled\n }\"\n [disabled]=\"cell.disabled\"\n (click)=\"datePicker.select(cell.date, $event)\"\n tabindex=\"-1\"\n >\n <span [ngClass]=\"{ 'text-info': cell.current }\">{{\n cell.label\n }}</span>\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "[nui-button]", inputs: ["displayStyle", "icon", "iconColor", "iconRight", "isBusy", "isEmpty", "ariaLabel", "isRepeat", "size"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: YearPickerComponent, decorators: [{ type: Component, args: [{ selector: "nui-year-picker", template: "<table *ngIf=\"datePicker.datepickerMode === 'year'\" role=\"grid\">\n <thead>\n <tr>\n <th>\n <button\n nui-button\n type=\"button\"\n icon=\"caret-left\"\n displayStyle=\"action\"\n (click)=\"datePicker.move(-1, $event)\"\n tabindex=\"-1\"\n ></button>\n </th>\n <th [attr.colspan]=\"3\">\n <button\n nui-button\n type=\"button\"\n [id]=\"datePicker.uniqueId + '-title'\"\n displayStyle=\"action\"\n [disabled]=\"\n datePicker.datepickerMode === datePicker.maxMode\n \"\n class=\"change-mode-button\"\n [ngClass]=\"{\n disabled:\n datePicker.datepickerMode === datePicker.maxMode\n }\"\n (click)=\"datePicker.toggleMode($event)\"\n tabindex=\"-1\"\n >\n <span>{{ title }}</span>\n </button>\n </th>\n <th>\n <button\n nui-button\n type=\"button\"\n icon=\"caret-right\"\n displayStyle=\"action\"\n (click)=\"datePicker.move(1, $event)\"\n tabindex=\"-1\"\n ></button>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let row of rows\">\n <td *ngFor=\"let cell of row\" class=\"text-center year\">\n <button\n nui-button\n type=\"button\"\n displayStyle=\"action\"\n [ngClass]=\"{\n selected: cell.selected,\n disabled: cell.disabled\n }\"\n [disabled]=\"cell.disabled\"\n (click)=\"datePicker.select(cell.date, $event)\"\n tabindex=\"-1\"\n >\n <span [ngClass]=\"{ 'text-info': cell.current }\">{{\n cell.label\n }}</span>\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n" }] }], ctorParameters: () => [{ type: i1.DatePickerInnerComponent }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIteWVhci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci15ZWFyLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLXllYXItcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUduQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7QUFDekUsY0FBYztBQUtkLE1BQU0sT0FBTyxtQkFBbUI7SUFJNUIsWUFBbUIsVUFBb0M7UUFBcEMsZUFBVSxHQUFWLFVBQVUsQ0FBMEI7UUFGdkQsU0FBSSxHQUFVLEVBQUUsQ0FBQztRQUdiLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ2pDLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVoRSxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLEdBQVMsRUFBRTtZQUM3QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQy9CLE1BQU0sS0FBSyxHQUFVLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVqRCxJQUFJLElBQUksR0FDSixNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO2dCQUNsQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQ3RCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdkMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDNUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7YUFDNUM7WUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHO2dCQUNULEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUNkLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUs7YUFDcEMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVYLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQzdCLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBVSxFQUFFLENBQ3JDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQy9CLE1BQU0sQ0FDVCxDQUFDO0lBQ04sQ0FBQztJQUVTLGVBQWUsQ0FBQyxJQUFZO1FBQ2xDLE9BQU8sQ0FDSCxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUztZQUM3QixDQUFDLENBQ0osQ0FBQztJQUNOLENBQUM7K0dBakRRLG1CQUFtQjttR0FBbkIsbUJBQW1CLHVEQzlCaEMsODRFQW9FQTs7NEZEdENhLG1CQUFtQjtrQkFKL0IsU0FBUzsrQkFDSSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50L21vbWVudFwiO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSBcIm1vbWVudC9tb21lbnRcIjtcblxuaW1wb3J0IHsgRGF0ZVBpY2tlcklubmVyQ29tcG9uZW50IH0gZnJvbSBcIi4vZGF0ZS1waWNrZXItaW5uZXIuY29tcG9uZW50XCI7XG4vKiogQGlnbm9yZSAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibnVpLXllYXItcGlja2VyXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9kYXRlLXBpY2tlci15ZWFyLXBpY2tlci5jb21wb25lbnQuaHRtbFwiLFxufSlcbmV4cG9ydCBjbGFzcyBZZWFyUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHJvd3M6IGFueVtdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0ZVBpY2tlcjogRGF0ZVBpY2tlcklubmVyQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlciA9IGRhdGVQaWNrZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXIuc3RlcFllYXIgPSB7IHllYXJzOiB0aGlzLmRhdGVQaWNrZXIueWVhclJhbmdlIH07XG5cbiAgICAgICAgdGhpcy5kYXRlUGlja2VyLnNldFJlZnJlc2hWaWV3SGFuZGxlcigoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwaWNrZXIgPSB0aGlzLmRhdGVQaWNrZXI7XG4gICAgICAgICAgICBjb25zdCB5ZWFyczogYW55W10gPSBuZXcgQXJyYXkocGlja2VyLnllYXJSYW5nZSk7XG5cbiAgICAgICAgICAgIGxldCBkYXRlOiBNb21lbnQgPVxuICAgICAgICAgICAgICAgIHBpY2tlci52YWx1ZSAmJiBwaWNrZXIudmFsdWUuaXNWYWxpZCgpXG4gICAgICAgICAgICAgICAgICAgID8gcGlja2VyLnZhbHVlLmNsb25lKClcbiAgICAgICAgICAgICAgICAgICAgOiBtb21lbnQoKTtcbiAgICAgICAgICAgIGRhdGUgPSBkYXRlLnNldChcImRhdGVcIiwgMSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5nZXRTdGFydGluZ1llYXIoZGF0ZS55ZWFyKCkpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpY2tlci55ZWFyUmFuZ2U7IGkrKykge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBkYXRlLnNldCh7IHllYXI6IHN0YXJ0ICsgaSB9KTtcbiAgICAgICAgICAgICAgICB5ZWFyc1tpXSA9IHBpY2tlci5jcmVhdGVEYXRlT2JqZWN0KGRhdGUsIHBpY2tlci5mb3JtYXRZZWFyKTtcbiAgICAgICAgICAgICAgICB5ZWFyc1tpXS51aWQgPSBwaWNrZXIudW5pcXVlSWQgKyBcIi1cIiArIGk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudGl0bGUgPSBbXG4gICAgICAgICAgICAgICAgeWVhcnNbMF0ubGFiZWwsXG4gICAgICAgICAgICAgICAgeWVhcnNbcGlja2VyLnllYXJSYW5nZSAtIDFdLmxhYmVsLFxuICAgICAgICAgICAgXS5qb2luKFwiIC0gXCIpO1xuICAgICAgICAgICAgdGhpcy5yb3dzID0gcGlja2VyLnNwbGl0KHllYXJzLCA1KTtcbiAgICAgICAgfSwgXCJ5ZWFyXCIpO1xuXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlci5zZXRDb21wYXJlSGFuZGxlcihcbiAgICAgICAgICAgIChkYXRlMTogTW9tZW50LCBkYXRlMjogTW9tZW50KTogbnVtYmVyID0+XG4gICAgICAgICAgICAgICAgZGF0ZTEueWVhcigpIC0gZGF0ZTIueWVhcigpLFxuICAgICAgICAgICAgXCJ5ZWFyXCJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0U3RhcnRpbmdZZWFyKHllYXI6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoKHllYXIgLSAxKSAvIHRoaXMuZGF0ZVBpY2tlci55ZWFyUmFuZ2UpICpcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXIueWVhclJhbmdlICtcbiAgICAgICAgICAgIDFcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8dGFibGUgKm5nSWY9XCJkYXRlUGlja2VyLmRhdGVwaWNrZXJNb2RlID09PSAneWVhcidcIiByb2xlPVwiZ3JpZFwiPlxuICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbnVpLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNhcmV0LWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5U3R5bGU9XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0ZVBpY2tlci5tb3ZlKC0xLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCBbYXR0ci5jb2xzcGFuXT1cIjNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG51aS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJkYXRlUGlja2VyLnVuaXF1ZUlkICsgJy10aXRsZSdcIlxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5U3R5bGU9XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlUGlja2VyLmRhdGVwaWNrZXJNb2RlID09PSBkYXRlUGlja2VyLm1heE1vZGVcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGFuZ2UtbW9kZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlUGlja2VyLmRhdGVwaWNrZXJNb2RlID09PSBkYXRlUGlja2VyLm1heE1vZGVcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkYXRlUGlja2VyLnRvZ2dsZU1vZGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbnVpLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNhcmV0LXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheVN0eWxlPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGVQaWNrZXIubW92ZSgxLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keT5cbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93c1wiPlxuICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjZWxsIG9mIHJvd1wiIGNsYXNzPVwidGV4dC1jZW50ZXIgeWVhclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbnVpLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheVN0eWxlPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGNlbGwuc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2VsbC5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNlbGwuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0ZVBpY2tlci5zZWxlY3QoY2VsbC5kYXRlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7ICd0ZXh0LWluZm8nOiBjZWxsLmN1cnJlbnQgfVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuPC90YWJsZT5cbiJdfQ==