UNPKG

@asadi/angular-date-components

Version:

`Angular Date Components` is a comprehensive angular library of date-related components designed to meet the needs of applications that require localization based on various calendar systems. While the package currently includes two powerful components (S

231 lines 39.4 kB
import { Component } from '@angular/core'; import { ADCCommonService, ADCStaticValues, FlatEventBuilder, TableSelection } from '@asadi/angular-date-components/core'; import { AdcResourceSchedulerBase } from '../adc-resource-scheduler-base/adc-resource-scheduler-base'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@asadi/angular-date-components/core"; export class ADCDayViewComponent extends AdcResourceSchedulerBase { constructor() { super(); this.year = 0; this.week = 0; this.day = 0; this.currentDate = ''; this.title = ''; this.hoursOfDay = ADCStaticValues.getHoursOfDay(); this.daysOfweek = ADCStaticValues.getDaysOfWeek(); this.monthsOfYear = this.dateAdapter.getMonthsOfYear(); this.dateSplitter = this.dateFormatter.DateSplitter; this.resources = []; this.events = []; this.rows = []; this.weekends = []; this.holidays = []; this.commonService = new ADCCommonService(this.dateAdapter, this.labels); this.today = this.dateAdapter.today(); this.selectionManager = new TableSelection(this.dateFilter); this.eventBuilder = new FlatEventBuilder(); } ngOnInit() { super.init(); this.selectionManager.cellSelectionStream.subscribe(event => this.onDateRangeSelect(event.start, event.end)); this.eventBuilder.eventSelectionStream.subscribe(e => { this.onEventClick(e.event, e.dom, e.jsEvent); }); } dateFilter(cell1, cell2) { return cell1.rowValue == cell2.rowValue && cell2.columnValue >= cell1.columnValue; } initViewHanlder() { if (this.startOf == null) { this.todayButtonHandler(); } else { this.day = this.dateAdapter.getDayIndexOf(this.startOf); this.week = this.dateAdapter.getWeekOf(this.startOf); this.year = this.dateAdapter.getYearOf(this.startOf); this.calculateCurrentDate(); } } todayButtonHandler() { this.day = this.dateAdapter.getCurrentDay(); this.week = this.dateAdapter.getCurrentWeek(); this.year = this.dateAdapter.getCurrentYear(); this.calculateCurrentDate(); } previousButtonHandler() { this.day--; if (this.day < 0) { this.day = 6; this.week--; if (this.week < 1) { this.year--; this.week = this.dateAdapter.getWeeksOfYear(this.year); } } this.calculateCurrentDate(); } nextButtonHandler() { this.day++; if (this.day > 6) { this.day = 0; this.week++; const weeksOfYear = this.dateAdapter.getWeeksOfYear(this.year); if (this.week > weeksOfYear) { this.week = 1; this.year++; } } this.calculateCurrentDate(); } calculateCurrentDate() { const date = this.dateAdapter.getDateOfDay(this.year, this.week, this.day); this.currentDate = this.dateAdapter.transformDate(+date.split(this.dateSplitter)[0], +date.split(this.dateSplitter)[1], +date.split(this.dateSplitter)[2]); const dayIndex = this.commonService.getDayIndex(this.day); const month = this.monthsOfYear[+date.split(this.dateSplitter)[1] - 1]; this.title = `${this.labels?.daysOfWeek[dayIndex] || this.daysOfweek[dayIndex]} ${+date.split(this.dateSplitter)[2]} ${this.commonService.getMonthName(month) || month} ${this.labels?.year || "Year"} ${this.year}`; this.dateChangesHandler(); super.dateRangeChange({ startDate: this.currentDate, endDate: this.currentDate }); } eventChangesHandler(events) { const tableEvents = []; this.events = events; const viewEvents = this.tools.resourceScheduler.getEventsBetweenDateRange(this.currentDate, this.currentDate, this.events); viewEvents.forEach((e) => { const rowIndex = this.rows.findIndex((r) => r.value == e.resourceId); if (rowIndex == -1) return; const row = this.rows[rowIndex]; const startColumnIndex = row.columns.findIndex((c) => { const time = this.tools.dateTime.timeOnly(c.value); const date = this.tools.dateTime.dateOnly(c.value); return date == this.tools.dateTime.dateOnly(e.startDate) && this.tools.dateTime.hour(time) == this.tools.dateTime.hourOrDefault(e.startTime, '00'); }); const endColumnIndex = row.columns.findIndex((c) => { const time = this.tools.dateTime.timeOnly(c.value); const date = this.tools.dateTime.dateOnly(c.value); return date == this.tools.dateTime.dateOnly(e.endDate) && this.tools.dateTime.hour(time) == this.tools.dateTime.hourOrDefault(e.endTime, '23'); }); const startTime = +this.tools.dateTime.minutesOrDefault(e.startTime, '00'); const endTime = +this.tools.dateTime.minutesOrDefault(e.endTime, '60'); const currentDateOnly = this.tools.dateTime.dateOnly(this.currentDate); const cellEvent = { columnStart: startColumnIndex != -1 ? startColumnIndex : null, columnEnd: endColumnIndex != -1 ? endColumnIndex : null, data: e, rowStart: rowIndex, rowEnd: rowIndex, offsetX: this.tools.dateTime.dateOnly(e.startDate) == currentDateOnly ? startTime / 60 : 0, fractionX: endTime / 60, overlapTolerance: this.options.eventOverlapTolerance / 60 }; if (e.allDay == true) { const eventHourEnd = +this.tools.dateTime.hourOrDefault(e.endTime, '23'); const eventMinuteEnd = +this.tools.dateTime.minutesOrDefault(e.endTime, '00'); cellEvent.fractionX = 24 - eventHourEnd + (eventMinuteEnd / 60); } tableEvents.push(cellEvent); }); this.eventBuilder.data = tableEvents; } resourceChangesHandler(resources) { this.resources = resources; this.dateChangesHandler(); } dateChangesHandler() { this.rows = this.getRowInitialValue(); if (this.resources.length == 0) return; const date = this.dateAdapter.getDateOfDay(this.year, this.week, this.day).split(this.dateSplitter); const transformedDate = this.dateAdapter.transformDate(+date[0], +date[1], +date[2]).split('T')[0]; this.resources.forEach((resource, rowIndex) => { const row = { classList: '', label: resource.title, prefix: '', suffix: '', value: resource.id.toString(), verticalAlign: 'center', horizontalAlign: 'center', columns: [], }; this.hoursOfDay.forEach((hour) => { const column = { classList: '', label: '', prefix: '', suffix: '', value: `${transformedDate}T${hour}`, verticalAlign: 'center', horizontalAlign: 'center', selectable: true, }; row.columns.push(column); }); this.rows.push(row); }); } holidaysChangesHandler(holidays) { this.holidays = holidays; this.dateChangesHandler(); } weekendChangesHandler(weekends) { this.weekends = weekends; this.dateChangesHandler(); } onDateRangeSelect(start, end) { const e = { endDate: end.columnValue.split('T')[0], endTime: end.columnValue.split('T')[1], startDate: start.columnValue.split('T')[0], startTime: start.columnValue.split('T')[1], resourceId: start.rowValue }; super.dateRangeSelect(e); } onEventClick(event, dom, jsEvent) { const resourceSchedulerEvent = this.events.filter(item => item.id == event.data.id)[0]; super.eventClick({ dom: dom, jsEvent: jsEvent, event: resourceSchedulerEvent }); } ngOnDestroy() { super.destory(); } getRowInitialValue() { const row = { verticalAlign: 'center', horizontalAlign: 'center', classList: '', columns: [], label: '', prefix: '', suffix: '', value: '', }; this.hoursOfDay.forEach((hour) => { const column = { classList: '', label: hour, prefix: '', suffix: '', value: hour, verticalAlign: 'center', horizontalAlign: 'center', selectable: false, }; row.columns.push(column); }); return [row]; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: ADCDayViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: ADCDayViewComponent, selector: "adc-day-view", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"resources.length != 0\">\r\n <adc-table\r\n [rows]=\"rows\"\r\n [title]=\"title\"\r\n [titleClass]=\"''.concat(\r\n today == currentDate.split('T')[0] ? ' today ' : ' ',\r\n weekends.includes(day) || holidays.includes(currentDate.split('T')[0]) ? ' holiday ' : ' '\r\n )\"\r\n [selectionManager]=\"selectionManager\"\r\n [eventBuilder]=\"eventBuilder\"\r\n (viewReady)=\"markViewAsReady()\"\r\n ></adc-table>\r\n</ng-container>", styles: [".w-full{width:100%}.table-layout-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.h-12{height:3rem}.text-center{text-align:center}.events{height:100%;width:100%;overflow:visible;padding:0;margin:0}.h-1152{height:1152px}.over-flow-hidden{overflow:hidden}table{border-spacing:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ADCTableComponent, selector: "adc-table", inputs: ["rows", "showRowDetails", "title", "titleClass", "eventBuilder", "selectionManager"], outputs: ["viewReady"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: ADCDayViewComponent, decorators: [{ type: Component, args: [{ selector: 'adc-day-view', template: "<ng-container *ngIf=\"resources.length != 0\">\r\n <adc-table\r\n [rows]=\"rows\"\r\n [title]=\"title\"\r\n [titleClass]=\"''.concat(\r\n today == currentDate.split('T')[0] ? ' today ' : ' ',\r\n weekends.includes(day) || holidays.includes(currentDate.split('T')[0]) ? ' holiday ' : ' '\r\n )\"\r\n [selectionManager]=\"selectionManager\"\r\n [eventBuilder]=\"eventBuilder\"\r\n (viewReady)=\"markViewAsReady()\"\r\n ></adc-table>\r\n</ng-container>", styles: [".w-full{width:100%}.table-layout-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.h-12{height:3rem}.text-center{text-align:center}.events{height:100%;width:100%;overflow:visible;padding:0;margin:0}.h-1152{height:1152px}.over-flow-hidden{overflow:hidden}table{border-spacing:0}\n"] }] }], ctorParameters: () => [] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRjLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL3Jlc291cmNlLXNjaGVkdWxlci9zcmMvY29tcG9uZW50cy9hZGMtZGF5LXZpZXcvYWRjLWRheS12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL3Jlc291cmNlLXNjaGVkdWxlci9zcmMvY29tcG9uZW50cy9hZGMtZGF5LXZpZXcvYWRjLWRheS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdDLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBOEYsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXROLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDOzs7O0FBT3RHLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSx3QkFBd0I7SUE2Qi9EO1FBR0UsS0FBSyxFQUFFLENBQUM7UUE3QlYsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUNqQixTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ2pCLFFBQUcsR0FBVyxDQUFDLENBQUM7UUFFaEIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVuQixlQUFVLEdBQWEsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZELGVBQVUsR0FBYSxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkQsaUJBQVksR0FBYSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTVELGlCQUFZLEdBQW9CLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBRWhFLGNBQVMsR0FBb0MsRUFBRSxDQUFDO1FBQ2hELFdBQU0sR0FBaUMsRUFBRSxDQUFDO1FBRTFDLFNBQUksR0FBbUIsRUFBRSxDQUFDO1FBRTFCLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFDeEIsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQUVmLGtCQUFhLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRSxVQUFLLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QyxxQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkQsaUJBQVksR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7SUFNL0MsQ0FBQztJQUVELFFBQVE7UUFFTixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFYixJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFN0csSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFvQixFQUFFLEtBQW9CO1FBRW5ELE9BQU8sS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUNwRixDQUFDO0lBRVEsZUFBZTtRQUV0QixJQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxFQUN2QjtZQUNFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNCO2FBRUQ7WUFDRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFUSxrQkFBa0I7UUFFekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVRLHFCQUFxQjtRQUU1QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWCxJQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUNmO1lBQ0UsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDYixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFWixJQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUNoQjtnQkFDRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEQ7U0FDRjtRQUNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFUSxpQkFBaUI7UUFFeEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1gsSUFBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFDZjtZQUNFLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ2IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRVosTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRS9ELElBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLEVBQzFCO2dCQUNFLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNiO1NBQ0Y7UUFDRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsb0JBQW9CO1FBRWxCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNKLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFdkUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO01BQzVFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxNQUFNO01BQzlFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVRLG1CQUFtQixDQUFDLE1BQW9DO1FBRS9ELE1BQU0sV0FBVyxHQUFxQixFQUFFLENBQUM7UUFFekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNILFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUE2QixFQUFFLEVBQUU7WUFFbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRW5GLElBQUcsUUFBUSxJQUFJLENBQUMsQ0FBQztnQkFBRSxPQUFPO1lBRTFCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFaEMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWtCLEVBQUUsRUFBRTtnQkFFcEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFbkQsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6RixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBa0IsRUFBRSxFQUFFO2dCQUVsRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUVuRCxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztvQkFDdEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZGLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNFLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV2RSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXZFLE1BQU0sU0FBUyxHQUFtQjtnQkFDaEMsV0FBVyxFQUFFLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDN0QsU0FBUyxFQUFFLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUN2RCxJQUFJLEVBQUUsQ0FBQztnQkFDUCxRQUFRLEVBQUUsUUFBUTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUYsU0FBUyxFQUFFLE9BQU8sR0FBRyxFQUFFO2dCQUN2QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixHQUFHLEVBQUU7YUFDMUQsQ0FBQztZQUVGLElBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQ25CO2dCQUNFLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3pFLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFOUUsU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFLEdBQUcsWUFBWSxHQUFHLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ2pFO1lBRUQsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztJQUN2QyxDQUFDO0lBRVEsc0JBQXNCLENBQUMsU0FBMEM7UUFFeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQjtRQUVoQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRXRDLElBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUFFLE9BQU87UUFFdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5HLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBdUMsRUFBRSxRQUFnQixFQUFFLEVBQUU7WUFFakYsTUFBTSxHQUFHLEdBQ1Q7Z0JBQ0UsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNyQixNQUFNLEVBQUUsRUFBRTtnQkFDVixNQUFNLEVBQUUsRUFBRTtnQkFDVixLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Z0JBQzdCLGFBQWEsRUFBRSxRQUFRO2dCQUN2QixlQUFlLEVBQUUsUUFBUTtnQkFDekIsT0FBTyxFQUFFLEVBQUU7YUFDWixDQUFBO1lBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtnQkFFdkMsTUFBTSxNQUFNLEdBQ1o7b0JBQ0UsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsTUFBTSxFQUFFLEVBQUU7b0JBQ1YsTUFBTSxFQUFFLEVBQUU7b0JBQ1YsS0FBSyxFQUFFLEdBQUcsZUFBZSxJQUFJLElBQUksRUFBRTtvQkFDbkMsYUFBYSxFQUFFLFFBQVE7b0JBQ3ZCLGVBQWUsRUFBRSxRQUFRO29CQUN6QixVQUFVLEVBQUUsSUFBSTtpQkFDakIsQ0FBQTtnQkFFRCxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLHNCQUFzQixDQUFDLFFBQWtCO1FBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFUSxxQkFBcUIsQ0FBQyxRQUFrQjtRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBb0IsRUFBRSxHQUFrQjtRQUV4RCxNQUFNLENBQUMsR0FDUDtZQUNFLE9BQU8sRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRO1NBQzNCLENBQUE7UUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFUSxZQUFZLENBQUMsS0FBcUIsRUFBRSxHQUFnQixFQUFFLE9BQW1CO1FBRWhGLE1BQU0sc0JBQXNCLEdBQStCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5ILEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsV0FBVztRQUVULEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU8sa0JBQWtCO1FBRXhCLE1BQU0sR0FBRyxHQUFpQjtZQUN4QixhQUFhLEVBQUUsUUFBUTtZQUN2QixlQUFlLEVBQUUsUUFBUTtZQUN6QixTQUFTLEVBQUUsRUFBRTtZQUNiLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLEVBQUU7WUFDVCxNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxFQUFFO1lBQ1YsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUV2QyxNQUFNLE1BQU0sR0FDWjtnQkFDRSxTQUFTLEVBQUUsRUFBRTtnQkFDYixLQUFLLEVBQUUsSUFBSTtnQkFDWCxNQUFNLEVBQUUsRUFBRTtnQkFDVixNQUFNLEVBQUUsRUFBRTtnQkFDVixLQUFLLEVBQUUsSUFBSTtnQkFDWCxhQUFhLEVBQUUsUUFBUTtnQkFDdkIsZUFBZSxFQUFFLFFBQVE7Z0JBQ3pCLFVBQVUsRUFBRSxLQUFLO2FBQ2xCLENBQUE7WUFFRCxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUlILE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7OEdBdlRVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDJFQ1ZoQyw0ZUFZZTs7MkZERkYsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQURDQ29tbW9uU2VydmljZSwgQURDRGF0ZVNwbGl0dGVyLCBBRENJT3B0aW9ucywgQURDSVRhYmxlQ2VsbCwgQURDSVRhYmxlQ29sdW1uLCBBRENJVGFibGVFdmVudCwgQURDSVRhYmxlUm93LCBBRENTdGF0aWNWYWx1ZXMsIEZsYXRFdmVudEJ1aWxkZXIsIFRhYmxlU2VsZWN0aW9uIH0gZnJvbSAnQGFzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL2NvcmUnO1xyXG5pbXBvcnQgeyBBRENJUmVzb3VyY2VTY2hlZHVsZXJFdmVudCwgQURDSVJlc291cmNlU2NoZWR1bGVyUmVzb3VyY2UsIEFEQ0lSZXNvdXJjZVNjaGVkdWxlclRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlLmdsb2JhbFwiO1xyXG5pbXBvcnQgeyBBZGNSZXNvdXJjZVNjaGVkdWxlckJhc2UgfSBmcm9tICcuLi9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyLWJhc2UvYWRjLXJlc291cmNlLXNjaGVkdWxlci1iYXNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWRjLWRheS12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRjLWRheS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hZGMtZGF5LXZpZXcuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBRENEYXlWaWV3Q29tcG9uZW50IGV4dGVuZHMgQWRjUmVzb3VyY2VTY2hlZHVsZXJCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kgXHJcbntcclxuXHJcbiAgeWVhcjogbnVtYmVyID0gMDtcclxuICB3ZWVrOiBudW1iZXIgPSAwO1xyXG4gIGRheTogbnVtYmVyID0gMDtcclxuXHJcbiAgY3VycmVudERhdGU6IHN0cmluZyA9ICcnO1xyXG4gIHRpdGxlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgaG91cnNPZkRheTogc3RyaW5nW10gPSBBRENTdGF0aWNWYWx1ZXMuZ2V0SG91cnNPZkRheSgpO1xyXG4gIGRheXNPZndlZWs6IHN0cmluZ1tdID0gQURDU3RhdGljVmFsdWVzLmdldERheXNPZldlZWsoKTtcclxuICBtb250aHNPZlllYXI6IHN0cmluZ1tdID0gdGhpcy5kYXRlQWRhcHRlci5nZXRNb250aHNPZlllYXIoKTtcclxuXHJcbiAgZGF0ZVNwbGl0dGVyOiBBRENEYXRlU3BsaXR0ZXIgPSB0aGlzLmRhdGVGb3JtYXR0ZXIuRGF0ZVNwbGl0dGVyO1xyXG5cclxuICByZXNvdXJjZXM6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlclJlc291cmNlW10gPSBbXTtcclxuICBldmVudHM6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlckV2ZW50W10gPSBbXTtcclxuXHJcbiAgcm93czogQURDSVRhYmxlUm93W10gPSBbXTtcclxuXHJcbiAgd2Vla2VuZHM6IG51bWJlcltdID0gW107XHJcbiAgaG9saWRheXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHJlYWRvbmx5IGNvbW1vblNlcnZpY2UgPSBuZXcgQURDQ29tbW9uU2VydmljZSh0aGlzLmRhdGVBZGFwdGVyLCB0aGlzLmxhYmVscyk7XHJcbiAgcmVhZG9ubHkgdG9kYXk6IHN0cmluZyA9IHRoaXMuZGF0ZUFkYXB0ZXIudG9kYXkoKTtcclxuICByZWFkb25seSBzZWxlY3Rpb25NYW5hZ2VyID0gbmV3IFRhYmxlU2VsZWN0aW9uKHRoaXMuZGF0ZUZpbHRlcik7XHJcbiAgcmVhZG9ubHkgZXZlbnRCdWlsZGVyID0gbmV3IEZsYXRFdmVudEJ1aWxkZXIoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgKVxyXG4gIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIFxyXG4gIHtcclxuICAgIHN1cGVyLmluaXQoKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGlvbk1hbmFnZXIuY2VsbFNlbGVjdGlvblN0cmVhbS5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5vbkRhdGVSYW5nZVNlbGVjdChldmVudC5zdGFydCwgZXZlbnQuZW5kKSk7XHJcblxyXG4gICAgdGhpcy5ldmVudEJ1aWxkZXIuZXZlbnRTZWxlY3Rpb25TdHJlYW0uc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICB0aGlzLm9uRXZlbnRDbGljayhlLmV2ZW50LCBlLmRvbSwgZS5qc0V2ZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGF0ZUZpbHRlcihjZWxsMTogQURDSVRhYmxlQ2VsbCwgY2VsbDI6IEFEQ0lUYWJsZUNlbGwpOiBib29sZWFuXHJcbiAge1xyXG4gICAgcmV0dXJuIGNlbGwxLnJvd1ZhbHVlID09IGNlbGwyLnJvd1ZhbHVlICYmIGNlbGwyLmNvbHVtblZhbHVlID49IGNlbGwxLmNvbHVtblZhbHVlO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgaW5pdFZpZXdIYW5sZGVyKCk6IHZvaWQgXHJcbiAge1xyXG4gICAgaWYodGhpcy5zdGFydE9mID09IG51bGwpXHJcbiAgICB7XHJcbiAgICAgIHRoaXMudG9kYXlCdXR0b25IYW5kbGVyKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuZGF5ID0gdGhpcy5kYXRlQWRhcHRlci5nZXREYXlJbmRleE9mKHRoaXMuc3RhcnRPZik7XHJcbiAgICAgIHRoaXMud2VlayA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0V2Vla09mKHRoaXMuc3RhcnRPZik7XHJcbiAgICAgIHRoaXMueWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhck9mKHRoaXMuc3RhcnRPZik7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlQ3VycmVudERhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHRvZGF5QnV0dG9uSGFuZGxlcigpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5kYXkgPSB0aGlzLmRhdGVBZGFwdGVyLmdldEN1cnJlbnREYXkoKTtcclxuICAgIHRoaXMud2VlayA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0Q3VycmVudFdlZWsoKTtcclxuICAgIHRoaXMueWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0Q3VycmVudFllYXIoKTtcclxuICAgIHRoaXMuY2FsY3VsYXRlQ3VycmVudERhdGUoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHByZXZpb3VzQnV0dG9uSGFuZGxlcigpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5kYXktLTtcclxuICAgIGlmKHRoaXMuZGF5IDwgMClcclxuICAgIHtcclxuICAgICAgdGhpcy5kYXkgPSA2O1xyXG4gICAgICB0aGlzLndlZWstLTtcclxuXHJcbiAgICAgIGlmKHRoaXMud2VlayA8IDEpXHJcbiAgICAgIHtcclxuICAgICAgICB0aGlzLnllYXItLTtcclxuICAgICAgICB0aGlzLndlZWsgPSB0aGlzLmRhdGVBZGFwdGVyLmdldFdlZWtzT2ZZZWFyKHRoaXMueWVhcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2FsY3VsYXRlQ3VycmVudERhdGUoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5leHRCdXR0b25IYW5kbGVyKCk6IHZvaWRcclxuICB7XHJcbiAgICB0aGlzLmRheSsrO1xyXG4gICAgaWYodGhpcy5kYXkgPiA2KVxyXG4gICAge1xyXG4gICAgICB0aGlzLmRheSA9IDA7XHJcbiAgICAgIHRoaXMud2VlaysrO1xyXG5cclxuICAgICAgY29uc3Qgd2Vla3NPZlllYXIgPSB0aGlzLmRhdGVBZGFwdGVyLmdldFdlZWtzT2ZZZWFyKHRoaXMueWVhcik7XHJcblxyXG4gICAgICBpZih0aGlzLndlZWsgPiB3ZWVrc09mWWVhcilcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMud2VlayA9IDE7XHJcbiAgICAgICAgdGhpcy55ZWFyKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2FsY3VsYXRlQ3VycmVudERhdGUoKTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZUN1cnJlbnREYXRlKCk6IHZvaWRcclxuICB7XHJcbiAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5nZXREYXRlT2ZEYXkodGhpcy55ZWFyLCB0aGlzLndlZWssIHRoaXMuZGF5KTtcclxuICAgIHRoaXMuY3VycmVudERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnRyYW5zZm9ybURhdGUoK2RhdGUuc3BsaXQodGhpcy5kYXRlU3BsaXR0ZXIpWzBdLCArZGF0ZS5zcGxpdCh0aGlzLmRhdGVTcGxpdHRlcilbMV0sICtkYXRlLnNwbGl0KHRoaXMuZGF0ZVNwbGl0dGVyKVsyXSk7XHJcblxyXG4gICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0RGF5SW5kZXgodGhpcy5kYXkpO1xyXG4gICAgY29uc3QgbW9udGggPSB0aGlzLm1vbnRoc09mWWVhclsrZGF0ZS5zcGxpdCh0aGlzLmRhdGVTcGxpdHRlcilbMV0gLSAxXTtcclxuXHJcbiAgICB0aGlzLnRpdGxlID0gYCR7dGhpcy5sYWJlbHM/LmRheXNPZldlZWtbZGF5SW5kZXhdIHx8IHRoaXMuZGF5c09md2Vla1tkYXlJbmRleF19IFxyXG4gICAgJHsrZGF0ZS5zcGxpdCh0aGlzLmRhdGVTcGxpdHRlcilbMl19IFxyXG4gICAgJHt0aGlzLmNvbW1vblNlcnZpY2UuZ2V0TW9udGhOYW1lKG1vbnRoKSB8fCBtb250aH0gJHt0aGlzLmxhYmVscz8ueWVhciB8fCBcIlllYXJcIn0gXHJcbiAgICAke3RoaXMueWVhcn1gO1xyXG5cclxuICAgIHRoaXMuZGF0ZUNoYW5nZXNIYW5kbGVyKCk7XHJcbiAgICBzdXBlci5kYXRlUmFuZ2VDaGFuZ2Uoe3N0YXJ0RGF0ZTogdGhpcy5jdXJyZW50RGF0ZSwgZW5kRGF0ZTogdGhpcy5jdXJyZW50RGF0ZX0pO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgZXZlbnRDaGFuZ2VzSGFuZGxlcihldmVudHM6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlckV2ZW50W10pOiB2b2lkXHJcbiAge1xyXG4gICAgY29uc3QgdGFibGVFdmVudHM6IEFEQ0lUYWJsZUV2ZW50W10gPSBbXTtcclxuXHJcbiAgICB0aGlzLmV2ZW50cyA9IGV2ZW50cztcclxuXHJcbiAgICBjb25zdCB2aWV3RXZlbnRzID0gdGhpcy50b29scy5yZXNvdXJjZVNjaGVkdWxlci5nZXRFdmVudHNCZXR3ZWVuRGF0ZVJhbmdlKHRoaXMuY3VycmVudERhdGUsIHRoaXMuY3VycmVudERhdGUsIHRoaXMuZXZlbnRzKTtcclxuICAgIFxyXG4gICAgdmlld0V2ZW50cy5mb3JFYWNoKChlOiBBRENJUmVzb3VyY2VTY2hlZHVsZXJFdmVudCkgPT4ge1xyXG5cclxuICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLnJvd3MuZmluZEluZGV4KChyOiBBRENJVGFibGVSb3cpID0+IHIudmFsdWUgPT0gZS5yZXNvdXJjZUlkKTtcclxuXHJcbiAgICAgIGlmKHJvd0luZGV4ID09IC0xKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvd3Nbcm93SW5kZXhdO1xyXG5cclxuICAgICAgY29uc3Qgc3RhcnRDb2x1bW5JbmRleCA9IHJvdy5jb2x1bW5zLmZpbmRJbmRleCgoYzogQURDSVRhYmxlQ29sdW1uKSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLnRvb2xzLmRhdGVUaW1lLnRpbWVPbmx5KGMudmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLnRvb2xzLmRhdGVUaW1lLmRhdGVPbmx5KGMudmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGF0ZSA9PSB0aGlzLnRvb2xzLmRhdGVUaW1lLmRhdGVPbmx5KGUuc3RhcnREYXRlKSAmJlxyXG4gICAgICAgIHRoaXMudG9vbHMuZGF0ZVRpbWUuaG91cih0aW1lKSA9PSB0aGlzLnRvb2xzLmRhdGVUaW1lLmhvdXJPckRlZmF1bHQoZS5zdGFydFRpbWUsICcwMCcpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGVuZENvbHVtbkluZGV4ID0gcm93LmNvbHVtbnMuZmluZEluZGV4KChjOiBBRENJVGFibGVDb2x1bW4pID0+IHtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy50b29scy5kYXRlVGltZS50aW1lT25seShjLnZhbHVlKTtcclxuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy50b29scy5kYXRlVGltZS5kYXRlT25seShjLnZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGUgPT0gdGhpcy50b29scy5kYXRlVGltZS5kYXRlT25seShlLmVuZERhdGUpICYmIFxyXG4gICAgICAgIHRoaXMudG9vbHMuZGF0ZVRpbWUuaG91cih0aW1lKSA9PSB0aGlzLnRvb2xzLmRhdGVUaW1lLmhvdXJPckRlZmF1bHQoZS5lbmRUaW1lLCAnMjMnKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBzdGFydFRpbWUgPSArdGhpcy50b29scy5kYXRlVGltZS5taW51dGVzT3JEZWZhdWx0KGUuc3RhcnRUaW1lLCAnMDAnKTtcclxuICAgICAgY29uc3QgZW5kVGltZSA9ICt0aGlzLnRvb2xzLmRhdGVUaW1lLm1pbnV0ZXNPckRlZmF1bHQoZS5lbmRUaW1lLCAnNjAnKTtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlT25seSA9IHRoaXMudG9vbHMuZGF0ZVRpbWUuZGF0ZU9ubHkodGhpcy5jdXJyZW50RGF0ZSk7XHJcblxyXG4gICAgICBjb25zdCBjZWxsRXZlbnQ6IEFEQ0lUYWJsZUV2ZW50ID0ge1xyXG4gICAgICAgIGNvbHVtblN0YXJ0OiBzdGFydENvbHVtbkluZGV4ICE9IC0xID8gc3RhcnRDb2x1bW5JbmRleCA6IG51bGwsXHJcbiAgICAgICAgY29sdW1uRW5kOiBlbmRDb2x1bW5JbmRleCAhPSAtMSA/IGVuZENvbHVtbkluZGV4IDogbnVsbCxcclxuICAgICAgICBkYXRhOiBlLFxyXG4gICAgICAgIHJvd1N0YXJ0OiByb3dJbmRleCxcclxuICAgICAgICByb3dFbmQ6IHJvd0luZGV4LFxyXG4gICAgICAgIG9mZnNldFg6IHRoaXMudG9vbHMuZGF0ZVRpbWUuZGF0ZU9ubHkoZS5zdGFydERhdGUpID09IGN1cnJlbnREYXRlT25seSA/IHN0YXJ0VGltZSAvIDYwIDogMCxcclxuICAgICAgICBmcmFjdGlvblg6IGVuZFRpbWUgLyA2MCxcclxuICAgICAgICBvdmVybGFwVG9sZXJhbmNlOiB0aGlzLm9wdGlvbnMuZXZlbnRPdmVybGFwVG9sZXJhbmNlIC8gNjBcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmKGUuYWxsRGF5ID09IHRydWUpXHJcbiAgICAgIHtcclxuICAgICAgICBjb25zdCBldmVudEhvdXJFbmQgPSArdGhpcy50b29scy5kYXRlVGltZS5ob3VyT3JEZWZhdWx0KGUuZW5kVGltZSwgJzIzJyk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRNaW51dGVFbmQgPSArdGhpcy50b29scy5kYXRlVGltZS5taW51dGVzT3JEZWZhdWx0KGUuZW5kVGltZSwgJzAwJyk7XHJcblxyXG4gICAgICAgIGNlbGxFdmVudC5mcmFjdGlvblggPSAyNCAtIGV2ZW50SG91ckVuZCArIChldmVudE1pbnV0ZUVuZCAvIDYwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGFibGVFdmVudHMucHVzaChjZWxsRXZlbnQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5ldmVudEJ1aWxkZXIuZGF0YSA9IHRhYmxlRXZlbnRzO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgcmVzb3VyY2VDaGFuZ2VzSGFuZGxlcihyZXNvdXJjZXM6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlclJlc291cmNlW10pOiB2b2lkIFxyXG4gIHtcclxuICAgIHRoaXMucmVzb3VyY2VzID0gcmVzb3VyY2VzO1xyXG4gICAgdGhpcy5kYXRlQ2hhbmdlc0hhbmRsZXIoKTtcclxuICB9XHJcblxyXG4gIGRhdGVDaGFuZ2VzSGFuZGxlcigpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5yb3dzID0gdGhpcy5nZXRSb3dJbml0aWFsVmFsdWUoKTtcclxuXHJcbiAgICBpZih0aGlzLnJlc291cmNlcy5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLmdldERhdGVPZkRheSh0aGlzLnllYXIsIHRoaXMud2VlaywgdGhpcy5kYXkpLnNwbGl0KHRoaXMuZGF0ZVNwbGl0dGVyKTtcclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIudHJhbnNmb3JtRGF0ZSgrZGF0ZVswXSwgK2RhdGVbMV0sICtkYXRlWzJdKS5zcGxpdCgnVCcpWzBdO1xyXG5cclxuICAgIHRoaXMucmVzb3VyY2VzLmZvckVhY2goKHJlc291cmNlOiBBRENJUmVzb3VyY2VTY2hlZHVsZXJSZXNvdXJjZSwgcm93SW5kZXg6IG51bWJlcikgPT4ge1xyXG5cclxuICAgICAgICBjb25zdCByb3c6IEFEQ0lUYWJsZVJvdyA9XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xhc3NMaXN0OiAnJyxcclxuICAgICAgICAgIGxhYmVsOiByZXNvdXJjZS50aXRsZSxcclxuICAgICAgICAgIHByZWZpeDogJycsXHJcbiAgICAgICAgICBzdWZmaXg6ICcnLFxyXG4gICAgICAgICAgdmFsdWU6IHJlc291cmNlLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAnY2VudGVyJyxcclxuICAgICAgICAgIGhvcml6b250YWxBbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgICBjb2x1bW5zOiBbXSxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaG91cnNPZkRheS5mb3JFYWNoKChob3VyOiBzdHJpbmcpID0+IHtcclxuXHJcbiAgICAgICAgICBjb25zdCBjb2x1bW46IEFEQ0lUYWJsZUNvbHVtbiA9XHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGNsYXNzTGlzdDogJycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgICAgICAgcHJlZml4OiAnJyxcclxuICAgICAgICAgICAgc3VmZml4OiAnJyxcclxuICAgICAgICAgICAgdmFsdWU6IGAke3RyYW5zZm9ybWVkRGF0ZX1UJHtob3VyfWAsXHJcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICAgICAgICBob3Jpem9udGFsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICByb3cuY29sdW1ucy5wdXNoKGNvbHVtbik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucm93cy5wdXNoKHJvdyk7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBob2xpZGF5c0NoYW5nZXNIYW5kbGVyKGhvbGlkYXlzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5ob2xpZGF5cyA9IGhvbGlkYXlzO1xyXG4gICAgdGhpcy5kYXRlQ2hhbmdlc0hhbmRsZXIoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdlZWtlbmRDaGFuZ2VzSGFuZGxlcih3ZWVrZW5kczogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIHRoaXMud2Vla2VuZHMgPSB3ZWVrZW5kcztcclxuICAgIHRoaXMuZGF0ZUNoYW5nZXNIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuICBvbkRhdGVSYW5nZVNlbGVjdChzdGFydDogQURDSVRhYmxlQ2VsbCwgZW5kOiBBRENJVGFibGVDZWxsKTogdm9pZFxyXG4gIHtcclxuICAgIGNvbnN0IGU6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlclRhYmxlRXZlbnQgPSBcclxuICAgIHtcclxuICAgICAgZW5kRGF0ZTogZW5kLmNvbHVtblZhbHVlLnNwbGl0KCdUJylbMF0sXHJcbiAgICAgIGVuZFRpbWU6IGVuZC5jb2x1bW5WYWx1ZS5zcGxpdCgnVCcpWzFdLFxyXG4gICAgICBzdGFydERhdGU6IHN0YXJ0LmNvbHVtblZhbHVlLnNwbGl0KCdUJylbMF0sXHJcbiAgICAgIHN0YXJ0VGltZTogc3RhcnQuY29sdW1uVmFsdWUuc3BsaXQoJ1QnKVsxXSxcclxuICAgICAgcmVzb3VyY2VJZDogc3RhcnQucm93VmFsdWVcclxuICAgIH1cclxuXHJcbiAgICBzdXBlci5kYXRlUmFuZ2VTZWxlY3QoZSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBvbkV2ZW50Q2xpY2soZXZlbnQ6IEFEQ0lUYWJsZUV2ZW50LCBkb206IEhUTUxFbGVtZW50LCBqc0V2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCBcclxuICB7XHJcbiAgICBjb25zdCByZXNvdXJjZVNjaGVkdWxlckV2ZW50OiBBRENJUmVzb3VyY2VTY2hlZHVsZXJFdmVudCA9IHRoaXMuZXZlbnRzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgPT0gZXZlbnQuZGF0YS5pZClbMF07XHJcblxyXG4gICAgc3VwZXIuZXZlbnRDbGljayh7ZG9tOiBkb20sIGpzRXZlbnQ6IGpzRXZlbnQsIGV2ZW50OiByZXNvdXJjZVNjaGVkdWxlckV2ZW50fSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIFxyXG4gIHtcclxuICAgIHN1cGVyLmRlc3RvcnkoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Um93SW5pdGlhbFZhbHVlKCk6IEFEQ0lUYWJsZVJvd1tdXHJcbiAge1xyXG4gICAgY29uc3Qgcm93OiBBRENJVGFibGVSb3cgPSB7XHJcbiAgICAgIHZlcnRpY2FsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICBob3Jpem9udGFsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICBjbGFzc0xpc3Q6ICcnLFxyXG4gICAgICBjb2x1bW5zOiBbXSxcclxuICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICBwcmVmaXg6ICcnLFxyXG4gICAgICBzdWZmaXg6ICcnLFxyXG4gICAgICB2YWx1ZTogJycsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuaG91cnNPZkRheS5mb3JFYWNoKChob3VyOiBzdHJpbmcpID0+IHtcclxuXHJcbiAgICAgIGNvbnN0IGNvbHVtbjogQURDSVRhYmxlQ29sdW1uID1cclxuICAgICAge1xyXG4gICAgICAgIGNsYXNzTGlzdDogJycsXHJcbiAgICAgICAgbGFiZWw6IGhvdXIsXHJcbiAgICAgICAgcHJlZml4OiAnJyxcclxuICAgICAgICBzdWZmaXg6ICcnLFxyXG4gICAgICAgIHZhbHVlOiBob3VyLFxyXG4gICAgICAgIHZlcnRpY2FsQWxpZ246ICdjZW50ZXInLFxyXG4gICAgICAgIGhvcml6b250YWxBbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJvdy5jb2x1bW5zLnB1c2goY29sdW1uKTtcclxuICAgIH0pO1xyXG5cclxuXHJcblxyXG4gICAgcmV0dXJuIFtyb3ddO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwicmVzb3VyY2VzLmxlbmd0aCAhPSAwXCI+XHJcbiAgICA8YWRjLXRhYmxlXHJcbiAgICBbcm93c109XCJyb3dzXCJcclxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXHJcbiAgICBbdGl0bGVDbGFzc109XCInJy5jb25jYXQoXHJcbiAgICAgICAgdG9kYXkgPT0gY3VycmVudERhdGUuc3BsaXQoJ1QnKVswXSA/ICcgdG9kYXkgJyA6ICcgJyxcclxuICAgICAgICB3ZWVrZW5kcy5pbmNsdWRlcyhkYXkpIHx8IGhvbGlkYXlzLmluY2x1ZGVzKGN1cnJlbnREYXRlLnNwbGl0KCdUJylbMF0pID8gJyBob2xpZGF5ICcgOiAnICdcclxuICAgIClcIlxyXG4gICAgW3NlbGVjdGlvbk1hbmFnZXJdPVwic2VsZWN0aW9uTWFuYWdlclwiXHJcbiAgICBbZXZlbnRCdWlsZGVyXT1cImV2ZW50QnVpbGRlclwiXHJcbiAgICAodmlld1JlYWR5KT1cIm1hcmtWaWV3QXNSZWFkeSgpXCJcclxuICAgID48L2FkYy10YWJsZT5cclxuPC9uZy1jb250YWluZXI+Il19