verben-ng-ui 1.2.65 → 1.2.67
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.
- package/esm2022/src/lib/components/date-picker/date-picker.component.mjs +30 -8
- package/esm2022/src/lib/verbena-input/verbena-input.component.mjs +3 -3
- package/fesm2022/verben-ng-ui-src-lib-components-date-picker.mjs +29 -7
- package/fesm2022/verben-ng-ui-src-lib-components-date-picker.mjs.map +1 -1
- package/fesm2022/verben-ng-ui-src-lib-verbena-input.mjs +2 -2
- package/fesm2022/verben-ng-ui-src-lib-verbena-input.mjs.map +1 -1
- package/package.json +110 -110
- package/src/lib/components/date-picker/date-picker.component.d.ts +2 -1
|
@@ -49,6 +49,7 @@ export class DatePickerComponent {
|
|
|
49
49
|
selectedMonth = 1;
|
|
50
50
|
selectedMonthString = '';
|
|
51
51
|
selectedYear = new Date().getFullYear();
|
|
52
|
+
daysInMonth = [];
|
|
52
53
|
onChange = () => { };
|
|
53
54
|
onTouched = () => { };
|
|
54
55
|
writeValue(value) {
|
|
@@ -115,6 +116,7 @@ export class DatePickerComponent {
|
|
|
115
116
|
this.dateChange.emit(this.selectedDate);
|
|
116
117
|
this.onChange(localDateString);
|
|
117
118
|
}
|
|
119
|
+
this.generateDaysInMonth();
|
|
118
120
|
}
|
|
119
121
|
get displayDate() {
|
|
120
122
|
const parsedDate = typeof this.date === 'string' ? new Date(this.date) : this.date;
|
|
@@ -156,6 +158,7 @@ export class DatePickerComponent {
|
|
|
156
158
|
this.selectedMonthString = this.months[this.selectedMonth];
|
|
157
159
|
this.selectedYear = this.tempSelectedDate.getFullYear();
|
|
158
160
|
}
|
|
161
|
+
this.generateDaysInMonth();
|
|
159
162
|
if (this.showTime && !this.tempTime) {
|
|
160
163
|
const today = new Date();
|
|
161
164
|
const isToday = this.tempSelectedDate && this.isSameDate(this.tempSelectedDate, today);
|
|
@@ -239,6 +242,7 @@ export class DatePickerComponent {
|
|
|
239
242
|
this.selectedYear--;
|
|
240
243
|
}
|
|
241
244
|
this.updateTempSelectedDate();
|
|
245
|
+
this.generateDaysInMonth();
|
|
242
246
|
}
|
|
243
247
|
nextMonth() {
|
|
244
248
|
this.selectedMonth++;
|
|
@@ -247,14 +251,17 @@ export class DatePickerComponent {
|
|
|
247
251
|
this.selectedYear++;
|
|
248
252
|
}
|
|
249
253
|
this.updateTempSelectedDate();
|
|
254
|
+
this.generateDaysInMonth();
|
|
250
255
|
}
|
|
251
256
|
onDropdownYearChange(event) {
|
|
252
257
|
this.selectedYear = event.value;
|
|
253
258
|
this.updateTempSelectedDate();
|
|
259
|
+
this.generateDaysInMonth();
|
|
254
260
|
}
|
|
255
261
|
onDropdownMonthChange(event) {
|
|
256
262
|
this.selectedMonth = this.months.indexOf(event.value);
|
|
257
263
|
this.updateTempSelectedDate();
|
|
264
|
+
this.generateDaysInMonth();
|
|
258
265
|
}
|
|
259
266
|
updateTempSelectedDate() {
|
|
260
267
|
if (!this.tempSelectedDate)
|
|
@@ -262,7 +269,7 @@ export class DatePickerComponent {
|
|
|
262
269
|
this.tempSelectedDate.setMonth(this.selectedMonth);
|
|
263
270
|
this.tempSelectedDate.setFullYear(this.selectedYear);
|
|
264
271
|
}
|
|
265
|
-
|
|
272
|
+
generateDaysInMonth() {
|
|
266
273
|
const days = [];
|
|
267
274
|
const year = this.selectedYear;
|
|
268
275
|
const month = this.selectedMonth;
|
|
@@ -273,11 +280,26 @@ export class DatePickerComponent {
|
|
|
273
280
|
}
|
|
274
281
|
const totalDays = new Date(year, month + 1, 0).getDate();
|
|
275
282
|
for (let i = 1; i <= totalDays; i++) {
|
|
276
|
-
|
|
277
|
-
days.push(day);
|
|
283
|
+
days.push(new Date(year, month, i));
|
|
278
284
|
}
|
|
279
|
-
|
|
280
|
-
}
|
|
285
|
+
this.daysInMonth = days;
|
|
286
|
+
}
|
|
287
|
+
// getDaysInMonth(): (Date | null)[] {
|
|
288
|
+
// const days: (Date | null)[] = [];
|
|
289
|
+
// const year = this.selectedYear;
|
|
290
|
+
// const month = this.selectedMonth;
|
|
291
|
+
// const firstDayOfMonth = new Date(year, month, 1).getDay();
|
|
292
|
+
// const offset = firstDayOfMonth === 0 ? 6 : firstDayOfMonth - 1;
|
|
293
|
+
// for (let i = 0; i < offset; i++) {
|
|
294
|
+
// days.push(null);
|
|
295
|
+
// }
|
|
296
|
+
// const totalDays = new Date(year, month + 1, 0).getDate();
|
|
297
|
+
// for (let i = 1; i <= totalDays; i++) {
|
|
298
|
+
// const day = new Date(year, month, i);
|
|
299
|
+
// days.push(day);
|
|
300
|
+
// }
|
|
301
|
+
// return days;
|
|
302
|
+
// }
|
|
281
303
|
sanitizeDateString(value) {
|
|
282
304
|
return value?.endsWith('Z') ? value.slice(0, -1) : value;
|
|
283
305
|
}
|
|
@@ -368,7 +390,7 @@ export class DatePickerComponent {
|
|
|
368
390
|
useExisting: forwardRef(() => DatePickerComponent),
|
|
369
391
|
multi: true,
|
|
370
392
|
},
|
|
371
|
-
], viewQueries: [{ propertyName: "datePickerContainer", first: true, predicate: ["datePickerContainer"], descendants: true, static: true }, { propertyName: "datePickerExpansion", first: true, predicate: ["datePickerExpansion"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false,\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"\n overlayWidth ? overlayWidth : datePickerContainer.offsetWidth\n \"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{border:1px solid #ccc;background-color:#fff;border-radius:4px;height:45vh;max-height:370px;overflow-y:auto}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i5.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "directive", type: i6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] });
|
|
393
|
+
], viewQueries: [{ propertyName: "datePickerContainer", first: true, predicate: ["datePickerContainer"], descendants: true, static: true }, { propertyName: "datePickerExpansion", first: true, predicate: ["datePickerExpansion"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false,\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"\n overlayWidth ? overlayWidth : datePickerContainer.offsetWidth\n \"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of daysInMonth\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{border:1px solid #ccc;background-color:#fff;border-radius:4px;height:45vh;max-height:370px;overflow-y:auto}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i5.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "directive", type: i6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] });
|
|
372
394
|
}
|
|
373
395
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
374
396
|
type: Component,
|
|
@@ -378,7 +400,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
|
|
|
378
400
|
useExisting: forwardRef(() => DatePickerComponent),
|
|
379
401
|
multi: true,
|
|
380
402
|
},
|
|
381
|
-
], template: "<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false,\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"\n overlayWidth ? overlayWidth : datePickerContainer.offsetWidth\n \"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of
|
|
403
|
+
], template: "<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false,\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"\n overlayWidth ? overlayWidth : datePickerContainer.offsetWidth\n \"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of daysInMonth\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{border:1px solid #ccc;background-color:#fff;border-radius:4px;height:45vh;max-height:370px;overflow-y:auto}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"] }]
|
|
382
404
|
}], propDecorators: { placeholder: [{
|
|
383
405
|
type: Input
|
|
384
406
|
}], format: [{
|
|
@@ -421,4 +443,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
|
|
|
421
443
|
type: HostListener,
|
|
422
444
|
args: ['document:click', ['$event.target']]
|
|
423
445
|
}] } });
|
|
424
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQWN6RSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLFdBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsTUFBTSxHQUFHLFlBQVksQ0FBQztJQUN0QixPQUFPLENBQVE7SUFDZixPQUFPLENBQVE7SUFDZixRQUFRLEdBQWEsS0FBSyxDQUFDO0lBQzNCLE9BQU8sR0FBWSxNQUFNLENBQUM7SUFDMUIsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixZQUFZLEdBQVksSUFBSSxDQUFDO0lBQzdCLGVBQWUsR0FBVyxlQUFlLENBQUM7SUFDMUMsZ0JBQWdCLEdBQVcsZ0JBQWdCLENBQUM7SUFDNUMsSUFBSSxHQUF5QixJQUFJLENBQUM7SUFDbEMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixZQUFZLEdBQWtCLEdBQUcsQ0FBQztJQUVsQyxlQUFlLEdBQVcsT0FBTyxDQUFDO0lBQ2xDLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFL0IsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7SUFFdkQsbUJBQW1C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U0FBUzsrQkFDRSxpQkFBaUIsYUFHaEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhCQUdRLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFFUCxtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdsRCxtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQTZhbkQsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERyb3Bkb3duQ2hhbmdlRXZlbnQgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2Ryb3AtZG93bic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1kYXRlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5jc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBkYXRlJztcbiAgQElucHV0KCkgZm9ybWF0ID0gJ01NL0REL1lZWVknO1xuICBASW5wdXQoKSBtaW5EYXRlPzogRGF0ZTtcbiAgQElucHV0KCkgbWF4RGF0ZT86IERhdGU7XG4gIEBJbnB1dCgpIGRpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBiZ0NvbG9yPzogc3RyaW5nID0gJyNmZmYnO1xuICBASW5wdXQoKSBib3JkZXI/OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgdXNlRHJvcGRvd25zOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgeWVhclBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0IGEgeWVhcic7XG4gIEBJbnB1dCgpIG1vbnRoUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QgYSBtb250aCc7XG4gIEBJbnB1dCgpIGRhdGU6IERhdGUgfCBudWxsIHwgc3RyaW5nID0gbnVsbDtcbiAgQElucHV0KCkgc2hvd1RpbWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgb3ZlcmxheVdpZHRoOiBudW1iZXIgfCBudWxsID0gNDAwO1xuXG4gIEBJbnB1dCgpIGRhdGVQaWNrZXJXaWR0aDogc3RyaW5nID0gJzQwMHB4JztcbiAgQElucHV0KCkgdXNlRGVmYXVsdERhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgZGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXJDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBkYXRlUGlja2VyQ29udGFpbmVyITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlckV4cGFuc2lvbicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBkYXRlUGlja2VyRXhwYW5zaW9uITogRWxlbWVudFJlZjtcblxuICB5ZWFyUmFuZ2U6IG51bWJlcltdID0gW107XG4gIGZpbHRlcmVkWWVhclJhbmdlOiBudW1iZXJbXSA9IFtdO1xuXG4gIHNlbGVjdGVkRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuICB0ZW1wU2VsZWN0ZWREYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgc2hvd0NhbGVuZGFyID0gZmFsc2U7XG5cbiAgd2Vla0RheXMgPSBbJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0JywgJ1N1biddO1xuICBtb250aHMgPSBbXG4gICAgJ0phbnVhcnknLFxuICAgICdGZWJydWFyeScsXG4gICAgJ01hcmNoJyxcbiAgICAnQXByaWwnLFxuICAgICdNYXknLFxuICAgICdKdW5lJyxcbiAgICAnSnVseScsXG4gICAgJ0F1Z3VzdCcsXG4gICAgJ1NlcHRlbWJlcicsXG4gICAgJ09jdG9iZXInLFxuICAgICdOb3ZlbWJlcicsXG4gICAgJ0RlY2VtYmVyJyxcbiAgXTtcblxuICBzZWxlY3RlZE1vbnRoOiBudW1iZXIgPSAxO1xuICBzZWxlY3RlZE1vbnRoU3RyaW5nOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRZZWFyOiBudW1iZXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLnNhbml0aXplRGF0ZVN0cmluZyh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcnNlZERhdGUgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbmV3IERhdGUodmFsdWUpIDogdmFsdWU7XG4gICAgICB0aGlzLmRhdGUgPSBwYXJzZWREYXRlO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpO1xuICAgICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUocGFyc2VkRGF0ZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpO1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXIgPSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgICBpZiAodGhpcy5zaG93VGltZSkge1xuICAgICAgICB0aGlzLmluaXRUaW1lRnJvbURhdGUodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKHRoaXMuZGF0ZSkge1xuICAgICAgbGV0IGQgPSB0aGlzLmRhdGU7XG4gICAgICBpZiAodHlwZW9mIGQgPT09ICdzdHJpbmcnKSBkID0gdGhpcy5zYW5pdGl6ZURhdGVTdHJpbmcoZCk7XG5cbiAgICAgIGNvbnN0IHBhcnNlZERhdGUgPSBuZXcgRGF0ZShkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUocGFyc2VkRGF0ZSk7XG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgaXNTYW1lRGF0ZShkMTogRGF0ZSwgZDI6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgZDEuZ2V0RnVsbFllYXIoKSA9PT0gZDIuZ2V0RnVsbFllYXIoKSAmJlxuICAgICAgZDEuZ2V0TW9udGgoKSA9PT0gZDIuZ2V0TW9udGgoKSAmJlxuICAgICAgZDEuZ2V0RGF0ZSgpID09PSBkMi5nZXREYXRlKClcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgY3VycmVudFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgZW5kWWVhciA9IGN1cnJlbnRZZWFyICsgMTA7XG4gICAgdGhpcy55ZWFyUmFuZ2UgPSBBcnJheS5mcm9tKFxuICAgICAgeyBsZW5ndGg6IGVuZFllYXIgLSAxOTYwICsgMSB9LFxuICAgICAgKF8sIGkpID0+IDE5NjAgKyBpLFxuICAgICk7XG4gICAgdGhpcy55ZWFyUmFuZ2Uuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuXG4gICAgaWYgKCF0aGlzLmRhdGUgJiYgdGhpcy51c2VEZWZhdWx0RGF0ZSkge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHBhZCA9IChuOiBudW1iZXIpID0+IG4udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuXG4gICAgICBjb25zdCBsb2NhbERhdGVTdHJpbmcgPSBgJHtub3cuZ2V0RnVsbFllYXIoKX0tJHtwYWQoXG4gICAgICAgIG5vdy5nZXRNb250aCgpICsgMSxcbiAgICAgICl9LSR7cGFkKG5vdy5nZXREYXRlKCkpfVQke3BhZChub3cuZ2V0SG91cnMoKSl9OiR7cGFkKFxuICAgICAgICBub3cuZ2V0TWludXRlcygpLFxuICAgICAgKX06JHtwYWQobm93LmdldFNlY29uZHMoKSl9YDtcblxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShsb2NhbERhdGVTdHJpbmcpO1xuICAgICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUobG9jYWxEYXRlU3RyaW5nKTtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlO1xuXG4gICAgICBpZiAodGhpcy5zaG93VGltZSkge1xuICAgICAgICBjb25zdCBob3VycyA9IG5vdy5nZXRIb3VycygpO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gbm93LmdldE1pbnV0ZXMoKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGhvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKGxvY2FsRGF0ZVN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc3BsYXlEYXRlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyc2VkRGF0ZSA9XG4gICAgICB0eXBlb2YgdGhpcy5kYXRlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHRoaXMuZGF0ZSkgOiB0aGlzLmRhdGU7XG4gICAgcmV0dXJuIHBhcnNlZERhdGUgPyB0aGlzLmZvcm1hdERhdGUocGFyc2VkRGF0ZSwgdGhpcy5mb3JtYXQpIDogJyc7XG4gIH1cblxuICB0ZW1wVGltZTogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkSG91ciA9ICcwMCc7XG4gIHNlbGVjdGVkTWludXRlID0gJzAwJztcblxuICBzaG93SG91ck9wdGlvbnMgPSBmYWxzZTtcbiAgc2hvd01pbnV0ZU9wdGlvbnMgPSBmYWxzZTtcblxuICBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBTdHJpbmcoaSkucGFkU3RhcnQoMiwgJzAnKSk7XG4gIG1pbnV0ZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2MCB9LCAoXywgaSkgPT4gU3RyaW5nKGkpLnBhZFN0YXJ0KDIsICcwJykpO1xuXG4gIHRvZ2dsZUhvdXJEcm9wZG93bigpIHtcbiAgICB0aGlzLnNob3dIb3VyT3B0aW9ucyA9ICF0aGlzLnNob3dIb3VyT3B0aW9ucztcbiAgICB0aGlzLnNob3dNaW51dGVPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICB0b2dnbGVNaW51dGVEcm9wZG93bigpIHtcbiAgICB0aGlzLnNob3dNaW51dGVPcHRpb25zID0gIXRoaXMuc2hvd01pbnV0ZU9wdGlvbnM7XG4gICAgdGhpcy5zaG93SG91ck9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHNlbGVjdEhvdXIoaDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBoO1xuICAgIHRoaXMuc2hvd0hvdXJPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICBzZWxlY3RNaW51dGUobTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG07XG4gICAgdGhpcy5zaG93TWludXRlT3B0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlQ2FsZW5kYXIoKSB7XG4gICAgdGhpcy5zaG93Q2FsZW5kYXIgPSAhdGhpcy5zaG93Q2FsZW5kYXI7XG5cbiAgICBpZiAodGhpcy5kYXRlKSB7XG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSB0aGlzLnVzZURlZmF1bHREYXRlID8gbmV3IERhdGUoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGhTdHJpbmcgPSB0aGlzLm1vbnRoc1t0aGlzLnNlbGVjdGVkTW9udGhdO1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXIgPSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG93VGltZSAmJiAhdGhpcy50ZW1wVGltZSkge1xuICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgaXNUb2RheSA9XG4gICAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSAmJiB0aGlzLmlzU2FtZURhdGUodGhpcy50ZW1wU2VsZWN0ZWREYXRlLCB0b2RheSk7XG5cbiAgICAgIGNvbnN0IGhvdXJzID0gaXNUb2RheSA/IHRvZGF5LmdldEhvdXJzKCkgOiAwO1xuICAgICAgY29uc3QgbWludXRlcyA9IGlzVG9kYXkgPyB0b2RheS5nZXRNaW51dGVzKCkgOiAwO1xuXG4gICAgICBpZiAodGhpcy50ZW1wU2VsZWN0ZWREYXRlKSB7XG4gICAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGhvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG4gICAgfVxuICB9XG5cbiAgaW5pdFRpbWVGcm9tRGF0ZShkYXRlOiBEYXRlKSB7XG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgY29uc3QgbWludXRlcyA9IGRhdGUuZ2V0TWludXRlcygpO1xuXG4gICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlPy5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG4gIH1cbiAgY2xlYXJEYXRlKCkge1xuICAgIHRoaXMuZGF0ZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBudWxsO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG51bGw7XG4gICAgdGhpcy50ZW1wVGltZSA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gJzAwJztcbiAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gJzAwJztcblxuICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KG51bGwpO1xuXG4gICAgdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuXG4gICAgdGhpcy5zaG93Q2FsZW5kYXIgPSBmYWxzZTtcbiAgfVxuXG4gIGZpeFRvVVRDKGRhdGVWYWx1ZTogYW55KSB7XG4gICAgaWYgKCFkYXRlVmFsdWUpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgZGF0ZSA9IGRhdGVWYWx1ZSBpbnN0YW5jZW9mIERhdGUgPyBkYXRlVmFsdWUgOiBuZXcgRGF0ZShkYXRlVmFsdWUpO1xuICAgIGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIG5ldyBEYXRlKFxuICAgICAgRGF0ZS5VVEMoXG4gICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICBkYXRlLmdldERhdGUoKSxcbiAgICAgICAgZGF0ZS5nZXRIb3VycygpLFxuICAgICAgICBkYXRlLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgZGF0ZS5nZXRTZWNvbmRzKCksXG4gICAgICAgIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBjb25maXJtKCkge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCh0aGlzLnRlbXBTZWxlY3RlZERhdGUpKSByZXR1cm47XG5cbiAgICBjb25zdCBob3VycyA9IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cik7XG4gICAgY29uc3QgbWludXRlcyA9IE51bWJlcih0aGlzLnNlbGVjdGVkTWludXRlKTtcblxuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSk7XG4gICAgdGhpcy5kYXRlID0gdGhpcy5zZWxlY3RlZERhdGU7XG5cbiAgICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBsb2NhbERhdGVTdHJpbmcgPSBgJHt0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpfS0ke3BhZChcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgKyAxLFxuICAgICl9LSR7cGFkKHRoaXMuc2VsZWN0ZWREYXRlLmdldERhdGUoKSl9VCR7cGFkKFxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUuZ2V0SG91cnMoKSxcbiAgICApfToke3BhZCh0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNaW51dGVzKCkpfToke3BhZChcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmdldFNlY29uZHMoKSxcbiAgICApfWA7XG5cbiAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgdGhpcy5vbkNoYW5nZShsb2NhbERhdGVTdHJpbmcpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG5cbiAgICB0aGlzLnNob3dDYWxlbmRhciA9IGZhbHNlO1xuICB9XG5cbiAgc2V0VG9TdGFydE9mRGF5KCkge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSByZXR1cm47XG5cbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9ICcwMCc7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9ICcwMCc7XG5cbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgdGhpcy50ZW1wVGltZSA9IGAke3RoaXMuc2VsZWN0ZWRIb3VyfToke3RoaXMuc2VsZWN0ZWRNaW51dGV9YDtcblxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy50ZW1wU2VsZWN0ZWREYXRlKTtcbiAgfVxuXG4gIHNldFRvRW5kT2ZEYXkoKSB7XG4gICAgaWYgKCF0aGlzLnRlbXBTZWxlY3RlZERhdGUpIHJldHVybjtcblxuICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gJzIzJztcbiAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gJzU5JztcblxuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSk7XG4gIH1cblxuICBwcmV2aW91c01vbnRoKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNb250aC0tO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkTW9udGggPCAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSAxMTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyLS07XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGVtcFNlbGVjdGVkRGF0ZSgpO1xuICB9XG5cbiAgbmV4dE1vbnRoKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNb250aCsrO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkTW9udGggPiAxMSkge1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gMDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyKys7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGVtcFNlbGVjdGVkRGF0ZSgpO1xuICB9XG5cbiAgb25Ecm9wZG93blllYXJDaGFuZ2UoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkWWVhciA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMudXBkYXRlVGVtcFNlbGVjdGVkRGF0ZSgpO1xuICB9XG5cbiAgb25Ecm9wZG93bk1vbnRoQ2hhbmdlKGV2ZW50OiBEcm9wZG93bkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5tb250aHMuaW5kZXhPZihldmVudC52YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCk7XG4gIH1cblxuICB1cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCkge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSByZXR1cm47XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldE1vbnRoKHRoaXMuc2VsZWN0ZWRNb250aCk7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEZ1bGxZZWFyKHRoaXMuc2VsZWN0ZWRZZWFyKTtcbiAgfVxuXG4gIGdldERheXNJbk1vbnRoKCk6IChEYXRlIHwgbnVsbClbXSB7XG4gICAgY29uc3QgZGF5czogKERhdGUgfCBudWxsKVtdID0gW107XG4gICAgY29uc3QgeWVhciA9IHRoaXMuc2VsZWN0ZWRZZWFyO1xuICAgIGNvbnN0IG1vbnRoID0gdGhpcy5zZWxlY3RlZE1vbnRoO1xuXG4gICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpLmdldERheSgpO1xuICAgIGNvbnN0IG9mZnNldCA9IGZpcnN0RGF5T2ZNb250aCA9PT0gMCA/IDYgOiBmaXJzdERheU9mTW9udGggLSAxO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykge1xuICAgICAgZGF5cy5wdXNoKG51bGwpO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsRGF5cyA9IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsRGF5czsgaSsrKSB7XG4gICAgICBjb25zdCBkYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSk7XG4gICAgICBkYXlzLnB1c2goZGF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGRheXM7XG4gIH1cblxuICBzYW5pdGl6ZURhdGVTdHJpbmcodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlPy5lbmRzV2l0aCgnWicpID8gdmFsdWUuc2xpY2UoMCwgLTEpIDogdmFsdWU7XG4gIH1cblxuICBpc0Rpc2FibGVkKGRheTogRGF0ZSB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRheURhdGUgPSB0aGlzLnRvRGF0ZShkYXkpO1xuXG4gICAgaWYgKHRoaXMubWluRGF0ZSAmJiBkYXlEYXRlIDwgdGhpcy5zdHJpcFRpbWUodGhpcy50b0RhdGUodGhpcy5taW5EYXRlKSkpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5tYXhEYXRlICYmIGRheURhdGUgPiB0aGlzLnN0cmlwVGltZSh0aGlzLnRvRGF0ZSh0aGlzLm1heERhdGUpKSlcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpcFRpbWUoZGF0ZTogRGF0ZSB8IHN0cmluZyk6IERhdGUge1xuICAgIGNvbnN0IGQgPSB0aGlzLnRvRGF0ZShkYXRlKTtcbiAgICByZXR1cm4gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIGQuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHRvRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyk6IERhdGUge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy5zYW5pdGl6ZURhdGVTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIGlzMjRIb3VyOiBib29sZWFuID0gdHJ1ZTtcblxuICBzZWxlY3RUZW1wb3JhcnlEYXRlKGRheTogRGF0ZSkge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkYXkpO1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoZGF5KSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXNOZXdEYXRlID0gIXRoaXMuaXNTYW1lRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUsIGRheSk7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUoZGF5KTtcblxuICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICBpZiAoaXNOZXdEYXRlKSB7XG4gICAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9XG4gICAgICAgICAgZGF5LmdldEZ1bGxZZWFyKCkgPT09IHRvZGF5LmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgICAgICBkYXkuZ2V0TW9udGgoKSA9PT0gdG9kYXkuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgIGRheS5nZXREYXRlKCkgPT09IHRvZGF5LmdldERhdGUoKTtcblxuICAgICAgICBjb25zdCBob3VycyA9IGlzVG9kYXkgPyB0b2RheS5nZXRIb3VycygpIDogMDtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IGlzVG9kYXkgPyB0b2RheS5nZXRNaW51dGVzKCkgOiAwO1xuXG4gICAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgdGhpcy50ZW1wVGltZSA9IGAke3RoaXMuc2VsZWN0ZWRIb3VyfToke3RoaXMuc2VsZWN0ZWRNaW51dGV9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IFtoLCBtXSA9IHRoaXMudGVtcFRpbWUuc3BsaXQoJzonKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBoO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1NlbGVjdGVkKGRheTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gKFxuICAgICAgZGF5LmdldERhdGUoKSA9PT0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldERhdGUoKSAmJlxuICAgICAgZGF5LmdldE1vbnRoKCkgPT09IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICYmXG4gICAgICBkYXkuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKClcbiAgICApO1xuICB9XG5cbiAgZm9ybWF0RGF0ZShkYXRlOiBEYXRlLCBmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IG1vbnRoID0gKGRhdGUuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgJ0REL01NL1lZWVknOlxuICAgICAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcbiAgICAgIGNhc2UgJ01NL0REL1lZWVknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGAke21vbnRofS8ke2RheX0vJHt5ZWFyfWA7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKVxuICBvbkNsaWNrT3V0c2lkZSh0YXJnZXRFbGVtZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuc2hvd0NhbGVuZGFyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzSW5zaWRlUGFuZSA9IHRhcmdldEVsZW1lbnQuY2xvc2VzdCgnLmNkay1vdmVybGF5LXBhbmUnKSAhPT0gbnVsbDtcblxuICAgIC8vICF0aGlzLmRhdGVQaWNrZXJDb250YWluZXIubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KVxuICAgIGlmIChcbiAgICAgIHRoaXMuc2hvd0NhbGVuZGFyICYmXG4gICAgICB0aGlzLmRhdGVQaWNrZXJFeHBhbnNpb24gJiZcbiAgICAgICF0aGlzLmRhdGVQaWNrZXJFeHBhbnNpb24ubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KSAmJlxuICAgICAgIWlzSW5zaWRlUGFuZVxuICAgICkge1xuICAgICAgdGhpcy5zaG93Q2FsZW5kYXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgI2RhdGVQaWNrZXJDb250YWluZXIgY2xhc3M9XCJkYXRlLXBpY2tlclwiPlxuICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItY29udGFpbmVyXCI+XG4gICAgPGlucHV0XG4gICAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgICAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFt2YWx1ZV09XCJkaXNwbGF5RGF0ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgKGNsaWNrKT1cIiFkaXNhYmxlZCAmJiB0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgIGNsYXNzPVwidy1mdWxsIGJsb2NrXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJnQ29sb3JcIlxuICAgICAgW3N0eWxlLmJvcmRlcl09XCJib3JkZXJcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnY3Vyc29yLW5vdC1hbGxvd2VkJzogZGlzYWJsZWQgPT09IHRydWUsXG4gICAgICAgICdjdXJzb3ItcG9pbnRlcic6IGRpc2FibGVkID09PSBmYWxzZSxcbiAgICAgIH1cIlxuICAgICAgcmVhZG9ubHlcbiAgICAvPlxuICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAoY2xpY2spPVwiIWRpc2FibGVkICYmIHRvZ2dsZUNhbGVuZGFyKClcIlxuICAgICAgY2xhc3M9XCJpY29uXCJcbiAgICAgIFtpY29uXT1cIidjYWxlbmRhcidcIlxuICAgID48L3ZlcmJlbi1zdmc+XG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZVxuICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVdpZHRoXT1cIlxuICAgICAgb3ZlcmxheVdpZHRoID8gb3ZlcmxheVdpZHRoIDogZGF0ZVBpY2tlckNvbnRhaW5lci5vZmZzZXRXaWR0aFxuICAgIFwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cIltcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgIH0sXG4gICAgXVwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInNob3dDYWxlbmRhclwiXG4gICAgKGRldGFjaCk9XCJzaG93Q2FsZW5kYXIgPSBmYWxzZVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXJcIiBbc3R5bGUud2lkdGhdPVwiZGF0ZVBpY2tlcldpZHRoXCIgI2RhdGVQaWNrZXJFeHBhbnNpb24+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItaGVhZGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdXNlRHJvcGRvd25zOyBlbHNlIGRyb3Bkb3duc1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInByZXZpb3VzTW9udGgoKVwiPlxuICAgICAgICAgICAgPHZlcmJlbi1zdmcgW3dpZHRoXT1cIjIwXCIgW2ljb25dPVwiJ2NoZXZyb24tbGVmdCdcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4+e3sgbW9udGhzW3NlbGVjdGVkTW9udGhdIH19IHt7IHNlbGVjdGVkWWVhciB9fTwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJuZXh0TW9udGgoKVwiPlxuICAgICAgICAgICAgPHZlcmJlbi1zdmcgW3dpZHRoXT1cIjIwXCIgW2ljb25dPVwiJ2NoZXZyb24tcmlnaHQnXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3ducz5cbiAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInllYXJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwib25Ecm9wZG93blllYXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJ5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFllYXJcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIic5MHB4J1wiXG4gICAgICAgICAgPjwvdmVyYmVuLWRyb3AtZG93bj5cblxuICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibW9udGhQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwib25Ecm9wZG93bk1vbnRoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwibW9udGhzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcC1kb3duXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNb250aFN0cmluZ1wiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzkwcHgnXCJcbiAgICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBpY2tlciBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiICpuZ0lmPVwic2hvd1RpbWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBib3ggcm91bmRlZCBweC0yIHB5LTEgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlSG91ckRyb3Bkb3duKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZEhvdXIgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0hvdXJPcHRpb25zXCIgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaCBvZiBob3Vyc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJoID09PSBzZWxlY3RlZEhvdXJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RIb3VyKGgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGggfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxzcGFuPjo8L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBib3ggcm91bmRlZCBweC0yIHB5LTEgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWludXRlRHJvcGRvd24oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHNlbGVjdGVkTWludXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dNaW51dGVPcHRpb25zXCIgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbSBvZiBtaW51dGVzXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIm0gPT09IHNlbGVjdGVkTWludXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TWludXRlKG0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IG0gfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8dmVyYmVuLXRvb2x0aXBcbiAgICAgICAgICAgICAgW3RvcF09XCInLTQwcHgnXCJcbiAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCInIzAwMCdcIlxuICAgICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cIicjRDNEM0QzJ1wiXG4gICAgICAgICAgICAgIFtsZWZ0XT1cIicwJ1wiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCInMTAwcHgnXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBDb250ZW50XT1cInRvb2x0aXBUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICN0b29sdGlwXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldFRvU3RhcnRPZkRheSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTRcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTRcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cIidzdW4nXCJcbiAgICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgIDwvdmVyYmVuLXRvb2x0aXA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Rvb2x0aXBUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHNcIj5TZXQgc3RhcnQgb2YgZGF5PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDx2ZXJiZW4tdG9vbHRpcFxuICAgICAgICAgICAgICBbdG9wXT1cIictNDBweCdcIlxuICAgICAgICAgICAgICBbdGV4dENvbG9yXT1cIicjMDAwJ1wiXG4gICAgICAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJyNEM0QzRDMnXCJcbiAgICAgICAgICAgICAgW2xlZnRdPVwiJzAnXCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIicxMDBweCdcIlxuICAgICAgICAgICAgICBbdG9vbHRpcENvbnRlbnRdPVwiZW5kT2ZEYXlUb29sdGlwXCJcbiAgICAgICAgICAgICAgI2VuZE9mRGF5VGlwXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldFRvRW5kT2ZEYXkoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE0XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE0XCJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCInbW9vbidcIlxuICAgICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgPC92ZXJiZW4tdG9vbHRpcD5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbmRPZkRheVRvb2x0aXA+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzXCI+U2V0IGVuZCBvZiBkYXk8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dmVyYmVuLXRvb2x0aXBcbiAgICAgICAgICAgIFt0b3BdPVwiJy00MHB4J1wiXG4gICAgICAgICAgICBbdGV4dENvbG9yXT1cIicjMDAwJ1wiXG4gICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cIicjRDNEM0QzJ1wiXG4gICAgICAgICAgICBbbGVmdF09XCInMCdcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIicxMDBweCdcIlxuICAgICAgICAgICAgW3Rvb2x0aXBDb250ZW50XT1cImNsZWFyVG9vbHRpcFwiXG4gICAgICAgICAgICAjY2xlYXJEYXRlVGlwXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyRGF0ZSgpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCIxNFwiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTRcIlxuICAgICAgICAgICAgICBbaWNvbl09XCInY2xvc2UnXCJcbiAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgPC92ZXJiZW4tdG9vbHRpcD5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2xlYXJUb29sdGlwPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzXCI+Y2xlYXIgZGF0ZTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1ib2R5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrZGF5c1wiPlxuICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla0RheXNcIj57eyBkYXkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlc1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRheSBvZiBnZXREYXlzSW5Nb250aCgpXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF5OyBlbHNlIGVtcHR5XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzU2VsZWN0ZWQoZGF5KVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKGRheSlcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdkaXNhYmxlZC1kYXknOiBpc0Rpc2FibGVkKGRheSkgfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUZW1wb3JhcnlEYXRlKGRheSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBkYXkuZ2V0RGF0ZSgpIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHk+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZW1wdHktZGF0ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1mb290ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY29uZmlybSgpXCI+T0s8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|
|
446
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQWN6RSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLFdBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsTUFBTSxHQUFHLFlBQVksQ0FBQztJQUN0QixPQUFPLENBQVE7SUFDZixPQUFPLENBQVE7SUFDZixRQUFRLEdBQWEsS0FBSyxDQUFDO0lBQzNCLE9BQU8sR0FBWSxNQUFNLENBQUM7SUFDMUIsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixZQUFZLEdBQVksSUFBSSxDQUFDO0lBQzdCLGVBQWUsR0FBVyxlQUFlLENBQUM7SUFDMUMsZ0JBQWdCLEdBQVcsZ0JBQWdCLENBQUM7SUFDNUMsSUFBSSxHQUF5QixJQUFJLENBQUM7SUFDbEMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixZQUFZLEdBQWtCLEdBQUcsQ0FBQztJQUVsQyxlQUFlLEdBQVcsT0FBTyxDQUFDO0lBQ2xDLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFL0IsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7SUFFdkQsbUJBQW1C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c0JBQW5CLE1BQU07Z0JBRVAsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHbEQsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkEwY25ELGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEcm9wZG93bkNoYW5nZUV2ZW50IH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kcm9wLWRvd24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGF0ZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QgZGF0ZSc7XG4gIEBJbnB1dCgpIGZvcm1hdCA9ICdNTS9ERC9ZWVlZJztcbiAgQElucHV0KCkgbWluRGF0ZT86IERhdGU7XG4gIEBJbnB1dCgpIG1heERhdGU/OiBEYXRlO1xuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYmdDb2xvcj86IHN0cmluZyA9ICcjZmZmJztcbiAgQElucHV0KCkgYm9yZGVyPzogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHVzZURyb3Bkb3duczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHllYXJQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBhIHllYXInO1xuICBASW5wdXQoKSBtb250aFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0IGEgbW9udGgnO1xuICBASW5wdXQoKSBkYXRlOiBEYXRlIHwgbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gIEBJbnB1dCgpIHNob3dUaW1lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG92ZXJsYXlXaWR0aDogbnVtYmVyIHwgbnVsbCA9IDQwMDtcblxuICBASW5wdXQoKSBkYXRlUGlja2VyV2lkdGg6IHN0cmluZyA9ICc0MDBweCc7XG4gIEBJbnB1dCgpIHVzZURlZmF1bHREYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGRhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZGF0ZVBpY2tlckNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXJFeHBhbnNpb24nLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZGF0ZVBpY2tlckV4cGFuc2lvbiE6IEVsZW1lbnRSZWY7XG5cbiAgeWVhclJhbmdlOiBudW1iZXJbXSA9IFtdO1xuICBmaWx0ZXJlZFllYXJSYW5nZTogbnVtYmVyW10gPSBbXTtcblxuICBzZWxlY3RlZERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgdGVtcFNlbGVjdGVkRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIHNob3dDYWxlbmRhciA9IGZhbHNlO1xuXG4gIHdlZWtEYXlzID0gWydNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsICdTdW4nXTtcbiAgbW9udGhzID0gW1xuICAgICdKYW51YXJ5JyxcbiAgICAnRmVicnVhcnknLFxuICAgICdNYXJjaCcsXG4gICAgJ0FwcmlsJyxcbiAgICAnTWF5JyxcbiAgICAnSnVuZScsXG4gICAgJ0p1bHknLFxuICAgICdBdWd1c3QnLFxuICAgICdTZXB0ZW1iZXInLFxuICAgICdPY3RvYmVyJyxcbiAgICAnTm92ZW1iZXInLFxuICAgICdEZWNlbWJlcicsXG4gIF07XG5cbiAgc2VsZWN0ZWRNb250aDogbnVtYmVyID0gMTtcbiAgc2VsZWN0ZWRNb250aFN0cmluZzogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkWWVhcjogbnVtYmVyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuXG4gIGRheXNJbk1vbnRoOiAoRGF0ZSB8IG51bGwpW10gPSBbXTtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuc2FuaXRpemVEYXRlU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgIHRoaXMuZGF0ZSA9IHBhcnNlZERhdGU7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUocGFyc2VkRGF0ZSk7XG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgIHRoaXMuaW5pdFRpbWVGcm9tRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAodGhpcy5kYXRlKSB7XG4gICAgICBsZXQgZCA9IHRoaXMuZGF0ZTtcbiAgICAgIGlmICh0eXBlb2YgZCA9PT0gJ3N0cmluZycpIGQgPSB0aGlzLnNhbml0aXplRGF0ZVN0cmluZyhkKTtcblxuICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGQpO1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpO1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG4gIH1cblxuICBpc1NhbWVEYXRlKGQxOiBEYXRlLCBkMjogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBkMS5nZXRGdWxsWWVhcigpID09PSBkMi5nZXRGdWxsWWVhcigpICYmXG4gICAgICBkMS5nZXRNb250aCgpID09PSBkMi5nZXRNb250aCgpICYmXG4gICAgICBkMS5nZXREYXRlKCkgPT09IGQyLmdldERhdGUoKVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBlbmRZZWFyID0gY3VycmVudFllYXIgKyAxMDtcbiAgICB0aGlzLnllYXJSYW5nZSA9IEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogZW5kWWVhciAtIDE5NjAgKyAxIH0sXG4gICAgICAoXywgaSkgPT4gMTk2MCArIGksXG4gICAgKTtcbiAgICB0aGlzLnllYXJSYW5nZS5zb3J0KChhLCBiKSA9PiBiIC0gYSk7XG5cbiAgICBpZiAoIXRoaXMuZGF0ZSAmJiB0aGlzLnVzZURlZmF1bHREYXRlKSB7XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgcGFkID0gKG46IG51bWJlcikgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG5cbiAgICAgIGNvbnN0IGxvY2FsRGF0ZVN0cmluZyA9IGAke25vdy5nZXRGdWxsWWVhcigpfS0ke3BhZChcbiAgICAgICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgICAgKX0tJHtwYWQobm93LmdldERhdGUoKSl9VCR7cGFkKG5vdy5nZXRIb3VycygpKX06JHtwYWQoXG4gICAgICAgIG5vdy5nZXRNaW51dGVzKCksXG4gICAgICApfToke3BhZChub3cuZ2V0U2Vjb25kcygpKX1gO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGxvY2FsRGF0ZVN0cmluZyk7XG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShsb2NhbERhdGVTdHJpbmcpO1xuICAgICAgdGhpcy5kYXRlID0gdGhpcy5zZWxlY3RlZERhdGU7XG5cbiAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gbm93LmdldEhvdXJzKCk7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBub3cuZ2V0TWludXRlcygpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UobG9jYWxEYXRlU3RyaW5nKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZURheXNJbk1vbnRoKCk7XG4gIH1cblxuICBnZXQgZGlzcGxheURhdGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJzZWREYXRlID1cbiAgICAgIHR5cGVvZiB0aGlzLmRhdGUgPT09ICdzdHJpbmcnID8gbmV3IERhdGUodGhpcy5kYXRlKSA6IHRoaXMuZGF0ZTtcbiAgICByZXR1cm4gcGFyc2VkRGF0ZSA/IHRoaXMuZm9ybWF0RGF0ZShwYXJzZWREYXRlLCB0aGlzLmZvcm1hdCkgOiAnJztcbiAgfVxuXG4gIHRlbXBUaW1lOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRIb3VyID0gJzAwJztcbiAgc2VsZWN0ZWRNaW51dGUgPSAnMDAnO1xuXG4gIHNob3dIb3VyT3B0aW9ucyA9IGZhbHNlO1xuICBzaG93TWludXRlT3B0aW9ucyA9IGZhbHNlO1xuXG4gIGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IFN0cmluZyhpKS5wYWRTdGFydCgyLCAnMCcpKTtcbiAgbWludXRlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDYwIH0sIChfLCBpKSA9PiBTdHJpbmcoaSkucGFkU3RhcnQoMiwgJzAnKSk7XG5cbiAgdG9nZ2xlSG91ckRyb3Bkb3duKCkge1xuICAgIHRoaXMuc2hvd0hvdXJPcHRpb25zID0gIXRoaXMuc2hvd0hvdXJPcHRpb25zO1xuICAgIHRoaXMuc2hvd01pbnV0ZU9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHRvZ2dsZU1pbnV0ZURyb3Bkb3duKCkge1xuICAgIHRoaXMuc2hvd01pbnV0ZU9wdGlvbnMgPSAhdGhpcy5zaG93TWludXRlT3B0aW9ucztcbiAgICB0aGlzLnNob3dIb3VyT3B0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgc2VsZWN0SG91cihoOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGg7XG4gICAgdGhpcy5zaG93SG91ck9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHNlbGVjdE1pbnV0ZShtOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbTtcbiAgICB0aGlzLnNob3dNaW51dGVPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICB0b2dnbGVDYWxlbmRhcigpIHtcbiAgICB0aGlzLnNob3dDYWxlbmRhciA9ICF0aGlzLnNob3dDYWxlbmRhcjtcblxuICAgIGlmICh0aGlzLmRhdGUpIHtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IHRoaXMudXNlRGVmYXVsdERhdGUgPyBuZXcgRGF0ZSgpIDogbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZW1wU2VsZWN0ZWREYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aFN0cmluZyA9IHRoaXMubW9udGhzW3RoaXMuc2VsZWN0ZWRNb250aF07XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH1cblxuICAgIHRoaXMuZ2VuZXJhdGVEYXlzSW5Nb250aCgpO1xuXG4gICAgaWYgKHRoaXMuc2hvd1RpbWUgJiYgIXRoaXMudGVtcFRpbWUpIHtcbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGlzVG9kYXkgPVxuICAgICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgJiYgdGhpcy5pc1NhbWVEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSwgdG9kYXkpO1xuXG4gICAgICBjb25zdCBob3VycyA9IGlzVG9kYXkgPyB0b2RheS5nZXRIb3VycygpIDogMDtcbiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBpc1RvZGF5ID8gdG9kYXkuZ2V0TWludXRlcygpIDogMDtcblxuICAgICAgaWYgKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSkge1xuICAgICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgIH1cbiAgfVxuXG4gIGluaXRUaW1lRnJvbURhdGUoZGF0ZTogRGF0ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZT8uc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuICB9XG4gIGNsZWFyRGF0ZSgpIHtcbiAgICB0aGlzLmRhdGUgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBudWxsO1xuICAgIHRoaXMudGVtcFRpbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9ICcwMCc7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9ICcwMCc7XG5cbiAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdChudWxsKTtcblxuICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcblxuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gIH1cblxuICBmaXhUb1VUQyhkYXRlVmFsdWU6IGFueSkge1xuICAgIGlmICghZGF0ZVZhbHVlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGRhdGUgPSBkYXRlVmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVZhbHVlIDogbmV3IERhdGUoZGF0ZVZhbHVlKTtcbiAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgIERhdGUuVVRDKFxuICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgZGF0ZS5nZXREYXRlKCksXG4gICAgICAgIGRhdGUuZ2V0SG91cnMoKSxcbiAgICAgICAgZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICAgIGRhdGUuZ2V0U2Vjb25kcygpLFxuICAgICAgICBkYXRlLmdldE1pbGxpc2Vjb25kcygpLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgY29uZmlybSgpIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQodGhpcy50ZW1wU2VsZWN0ZWREYXRlKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaG91cnMgPSBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBOdW1iZXIodGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG5cbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUpO1xuICAgIHRoaXMuZGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlO1xuXG4gICAgY29uc3QgcGFkID0gKG46IG51bWJlcikgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgbG9jYWxEYXRlU3RyaW5nID0gYCR7dGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKX0tJHtwYWQoXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICApfS0ke3BhZCh0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCkpfVQke3BhZChcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmdldEhvdXJzKCksXG4gICAgKX06JHtwYWQodGhpcy5zZWxlY3RlZERhdGUuZ2V0TWludXRlcygpKX06JHtwYWQoXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRTZWNvbmRzKCksXG4gICAgKX1gO1xuXG4gICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgIHRoaXMub25DaGFuZ2UobG9jYWxEYXRlU3RyaW5nKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuXG4gICAgdGhpcy5zaG93Q2FsZW5kYXIgPSBmYWxzZTtcbiAgfVxuXG4gIHNldFRvU3RhcnRPZkRheSgpIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5zZWxlY3RlZEhvdXIgPSAnMDAnO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSAnMDAnO1xuXG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSk7XG4gIH1cblxuICBzZXRUb0VuZE9mRGF5KCkge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSByZXR1cm47XG5cbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9ICcyMyc7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9ICc1OSc7XG5cbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUpO1xuICB9XG5cbiAgcHJldmlvdXNNb250aCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9udGgtLTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE1vbnRoIDwgMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gMTE7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhci0tO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKTtcbiAgICB0aGlzLmdlbmVyYXRlRGF5c0luTW9udGgoKTtcbiAgfVxuXG4gIG5leHRNb250aCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9udGgrKztcbiAgICBpZiAodGhpcy5zZWxlY3RlZE1vbnRoID4gMTEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IDA7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhcisrO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKTtcbiAgICB0aGlzLmdlbmVyYXRlRGF5c0luTW9udGgoKTtcbiAgfVxuXG4gIG9uRHJvcGRvd25ZZWFyQ2hhbmdlKGV2ZW50OiBEcm9wZG93bkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFllYXIgPSBldmVudC52YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKTtcbiAgICB0aGlzLmdlbmVyYXRlRGF5c0luTW9udGgoKTtcbiAgfVxuXG4gIG9uRHJvcGRvd25Nb250aENoYW5nZShldmVudDogRHJvcGRvd25DaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMubW9udGhzLmluZGV4T2YoZXZlbnQudmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVGVtcFNlbGVjdGVkRGF0ZSgpO1xuICAgIHRoaXMuZ2VuZXJhdGVEYXlzSW5Nb250aCgpO1xuICB9XG5cbiAgdXBkYXRlVGVtcFNlbGVjdGVkRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgcmV0dXJuO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRNb250aCh0aGlzLnNlbGVjdGVkTW9udGgpO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRGdWxsWWVhcih0aGlzLnNlbGVjdGVkWWVhcik7XG4gIH1cblxuICBnZW5lcmF0ZURheXNJbk1vbnRoKCkge1xuICAgIGNvbnN0IGRheXM6IChEYXRlIHwgbnVsbClbXSA9IFtdO1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLnNlbGVjdGVkWWVhcjtcbiAgICBjb25zdCBtb250aCA9IHRoaXMuc2VsZWN0ZWRNb250aDtcblxuICAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXREYXkoKTtcbiAgICBjb25zdCBvZmZzZXQgPSBmaXJzdERheU9mTW9udGggPT09IDAgPyA2IDogZmlyc3REYXlPZk1vbnRoIC0gMTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgIGRheXMucHVzaChudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbERheXMgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbERheXM7IGkrKykge1xuICAgICAgZGF5cy5wdXNoKG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKSk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXlzSW5Nb250aCA9IGRheXM7XG4gIH1cblxuICAvLyBnZXREYXlzSW5Nb250aCgpOiAoRGF0ZSB8IG51bGwpW10ge1xuICAvLyAgIGNvbnN0IGRheXM6IChEYXRlIHwgbnVsbClbXSA9IFtdO1xuICAvLyAgIGNvbnN0IHllYXIgPSB0aGlzLnNlbGVjdGVkWWVhcjtcbiAgLy8gICBjb25zdCBtb250aCA9IHRoaXMuc2VsZWN0ZWRNb250aDtcblxuICAvLyAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXREYXkoKTtcbiAgLy8gICBjb25zdCBvZmZzZXQgPSBmaXJzdERheU9mTW9udGggPT09IDAgPyA2IDogZmlyc3REYXlPZk1vbnRoIC0gMTtcblxuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgLy8gICAgIGRheXMucHVzaChudWxsKTtcbiAgLy8gICB9XG5cbiAgLy8gICBjb25zdCB0b3RhbERheXMgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKTtcbiAgLy8gICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbERheXM7IGkrKykge1xuICAvLyAgICAgY29uc3QgZGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpO1xuICAvLyAgICAgZGF5cy5wdXNoKGRheSk7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiBkYXlzO1xuICAvLyB9XG5cbiAgc2FuaXRpemVEYXRlU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZT8uZW5kc1dpdGgoJ1onKSA/IHZhbHVlLnNsaWNlKDAsIC0xKSA6IHZhbHVlO1xuICB9XG5cbiAgaXNEaXNhYmxlZChkYXk6IERhdGUgfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXlEYXRlID0gdGhpcy50b0RhdGUoZGF5KTtcblxuICAgIGlmICh0aGlzLm1pbkRhdGUgJiYgZGF5RGF0ZSA8IHRoaXMuc3RyaXBUaW1lKHRoaXMudG9EYXRlKHRoaXMubWluRGF0ZSkpKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMubWF4RGF0ZSAmJiBkYXlEYXRlID4gdGhpcy5zdHJpcFRpbWUodGhpcy50b0RhdGUodGhpcy5tYXhEYXRlKSkpXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaXBUaW1lKGRhdGU6IERhdGUgfCBzdHJpbmcpOiBEYXRlIHtcbiAgICBjb25zdCBkID0gdGhpcy50b0RhdGUoZGF0ZSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgZC5nZXRNb250aCgpLCBkLmdldERhdGUoKSk7XG4gIH1cblxuICB0b0RhdGUodmFsdWU6IERhdGUgfCBzdHJpbmcpOiBEYXRlIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuc2FuaXRpemVEYXRlU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICBpczI0SG91cjogYm9vbGVhbiA9IHRydWU7XG5cbiAgc2VsZWN0VGVtcG9yYXJ5RGF0ZShkYXk6IERhdGUpIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUoZGF5KTtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKGRheSkpIHJldHVybjtcblxuICAgIGNvbnN0IGlzTmV3RGF0ZSA9ICF0aGlzLmlzU2FtZURhdGUodGhpcy50ZW1wU2VsZWN0ZWREYXRlLCBkYXkpO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGRheSk7XG5cbiAgICBpZiAodGhpcy5zaG93VGltZSkge1xuICAgICAgaWYgKGlzTmV3RGF0ZSkge1xuICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPVxuICAgICAgICAgIGRheS5nZXRGdWxsWWVhcigpID09PSB0b2RheS5nZXRGdWxsWWVhcigpICYmXG4gICAgICAgICAgZGF5LmdldE1vbnRoKCkgPT09IHRvZGF5LmdldE1vbnRoKCkgJiZcbiAgICAgICAgICBkYXkuZ2V0RGF0ZSgpID09PSB0b2RheS5nZXREYXRlKCk7XG5cbiAgICAgICAgY29uc3QgaG91cnMgPSBpc1RvZGF5ID8gdG9kYXkuZ2V0SG91cnMoKSA6IDA7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBpc1RvZGF5ID8gdG9kYXkuZ2V0TWludXRlcygpIDogMDtcblxuICAgICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbaCwgbV0gPSB0aGlzLnRlbXBUaW1lLnNwbGl0KCc6Jyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTZWxlY3RlZChkYXk6IERhdGUpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGRheS5nZXREYXRlKCkgPT09IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXREYXRlKCkgJiZcbiAgICAgIGRheS5nZXRNb250aCgpID09PSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0TW9udGgoKSAmJlxuICAgICAgZGF5LmdldEZ1bGxZZWFyKCkgPT09IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgKTtcbiAgfVxuXG4gIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBtb250aCA9IChkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcblxuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlICdERC9NTS9ZWVlZJzpcbiAgICAgICAgcmV0dXJuIGAke2RheX0vJHttb250aH0vJHt5ZWFyfWA7XG4gICAgICBjYXNlICdNTS9ERC9ZWVlZJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgJHttb250aH0vJHtkYXl9LyR7eWVhcn1gO1xuICAgIH1cbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLnNob3dDYWxlbmRhciA9IGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudC50YXJnZXQnXSlcbiAgb25DbGlja091dHNpZGUodGFyZ2V0RWxlbWVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLnNob3dDYWxlbmRhcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc0luc2lkZVBhbmUgPSB0YXJnZXRFbGVtZW50LmNsb3Nlc3QoJy5jZGstb3ZlcmxheS1wYW5lJykgIT09IG51bGw7XG5cbiAgICAvLyAhdGhpcy5kYXRlUGlja2VyQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0RWxlbWVudClcbiAgICBpZiAoXG4gICAgICB0aGlzLnNob3dDYWxlbmRhciAmJlxuICAgICAgdGhpcy5kYXRlUGlja2VyRXhwYW5zaW9uICYmXG4gICAgICAhdGhpcy5kYXRlUGlja2VyRXhwYW5zaW9uLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0RWxlbWVudCkgJiZcbiAgICAgICFpc0luc2lkZVBhbmVcbiAgICApIHtcbiAgICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICNkYXRlUGlja2VyQ29udGFpbmVyIGNsYXNzPVwiZGF0ZS1waWNrZXJcIj5cbiAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWNvbnRhaW5lclwiPlxuICAgIDxpbnB1dFxuICAgICAgY2RrT3ZlcmxheU9yaWdpblxuICAgICAgI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbdmFsdWVdPVwiZGlzcGxheURhdGVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCIhZGlzYWJsZWQgJiYgdG9nZ2xlQ2FsZW5kYXIoKVwiXG4gICAgICBjbGFzcz1cInctZnVsbCBibG9ja1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJiZ0NvbG9yXCJcbiAgICAgIFtzdHlsZS5ib3JkZXJdPVwiYm9yZGVyXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2N1cnNvci1ub3QtYWxsb3dlZCc6IGRpc2FibGVkID09PSB0cnVlLFxuICAgICAgICAnY3Vyc29yLXBvaW50ZXInOiBkaXNhYmxlZCA9PT0gZmFsc2UsXG4gICAgICB9XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgLz5cbiAgICA8dmVyYmVuLXN2Z1xuICAgICAgKGNsaWNrKT1cIiFkaXNhYmxlZCAmJiB0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgIGNsYXNzPVwiaWNvblwiXG4gICAgICBbaWNvbl09XCInY2FsZW5kYXInXCJcbiAgICA+PC92ZXJiZW4tc3ZnPlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGVcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aF09XCJcbiAgICAgIG92ZXJsYXlXaWR0aCA/IG92ZXJsYXlXaWR0aCA6IGRhdGVQaWNrZXJDb250YWluZXIub2Zmc2V0V2lkdGhcbiAgICBcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uXT1cImZhbHNlXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJbXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICB9LFxuICAgIF1cIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJzaG93Q2FsZW5kYXJcIlxuICAgIChkZXRhY2gpPVwic2hvd0NhbGVuZGFyID0gZmFsc2VcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyXCIgW3N0eWxlLndpZHRoXT1cImRhdGVQaWNrZXJXaWR0aFwiICNkYXRlUGlja2VyRXhwYW5zaW9uPlxuICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWhlYWRlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXVzZURyb3Bkb3duczsgZWxzZSBkcm9wZG93bnNcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJwcmV2aW91c01vbnRoKClcIj5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIFt3aWR0aF09XCIyMFwiIFtpY29uXT1cIidjaGV2cm9uLWxlZnQnXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuPnt7IG1vbnRoc1tzZWxlY3RlZE1vbnRoXSB9fSB7eyBzZWxlY3RlZFllYXIgfX08L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmV4dE1vbnRoKClcIj5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIFt3aWR0aF09XCIyMFwiIFtpY29uXT1cIidjaGV2cm9uLXJpZ2h0J1wiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkcm9wZG93bnM+XG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ5ZWFyUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRHJvcGRvd25ZZWFyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwieWVhclJhbmdlXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRZZWFyXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCInOTBweCdcIlxuICAgICAgICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm1vbnRoUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRHJvcGRvd25Nb250aENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cIm1vbnRoc1wiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3AtZG93blwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTW9udGhTdHJpbmdcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIic5MHB4J1wiXG4gICAgICAgICAgPjwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXIgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIiAqbmdJZj1cInNob3dUaW1lXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgYm94IHJvdW5kZWQgcHgtMiBweS0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUhvdXJEcm9wZG93bigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgc2VsZWN0ZWRIb3VyIH19XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dIb3VyT3B0aW9uc1wiIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGggb2YgaG91cnNcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaCA9PT0gc2VsZWN0ZWRIb3VyXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SG91cihoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBoIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8c3Bhbj46PC9zcGFuPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgYm94IHJvdW5kZWQgcHgtMiBweS0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1pbnV0ZURyb3Bkb3duKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZE1pbnV0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93TWludXRlT3B0aW9uc1wiIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG0gb2YgbWludXRlc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJtID09PSBzZWxlY3RlZE1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE1pbnV0ZShtKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBtIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHZlcmJlbi10b29sdGlwXG4gICAgICAgICAgICAgIFt0b3BdPVwiJy00MHB4J1wiXG4gICAgICAgICAgICAgIFt0ZXh0Q29sb3JdPVwiJyMwMDAnXCJcbiAgICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCInI0QzRDNEMydcIlxuICAgICAgICAgICAgICBbbGVmdF09XCInMCdcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiJzEwMHB4J1wiXG4gICAgICAgICAgICAgIFt0b29sdGlwQ29udGVudF09XCJ0b29sdGlwVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAjdG9vbHRpcFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRUb1N0YXJ0T2ZEYXkoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE0XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE0XCJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCInc3VuJ1wiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICA8L3ZlcmJlbi10b29sdGlwPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0b29sdGlwVGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzXCI+U2V0IHN0YXJ0IG9mIGRheTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8dmVyYmVuLXRvb2x0aXBcbiAgICAgICAgICAgICAgW3RvcF09XCInLTQwcHgnXCJcbiAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCInIzAwMCdcIlxuICAgICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cIicjRDNEM0QzJ1wiXG4gICAgICAgICAgICAgIFtsZWZ0XT1cIicwJ1wiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCInMTAwcHgnXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBDb250ZW50XT1cImVuZE9mRGF5VG9vbHRpcFwiXG4gICAgICAgICAgICAgICNlbmRPZkRheVRpcFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRUb0VuZE9mRGF5KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNFwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNFwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ21vb24nXCJcbiAgICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgIDwvdmVyYmVuLXRvb2x0aXA+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW5kT2ZEYXlUb29sdGlwPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14c1wiPlNldCBlbmQgb2YgZGF5PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHZlcmJlbi10b29sdGlwXG4gICAgICAgICAgICBbdG9wXT1cIictNDBweCdcIlxuICAgICAgICAgICAgW3RleHRDb2xvcl09XCInIzAwMCdcIlxuICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCInI0QzRDNEMydcIlxuICAgICAgICAgICAgW2xlZnRdPVwiJzAnXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCInMTAwcHgnXCJcbiAgICAgICAgICAgIFt0b29sdGlwQ29udGVudF09XCJjbGVhclRvb2x0aXBcIlxuICAgICAgICAgICAgI2NsZWFyRGF0ZVRpcFxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRhdGUoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiMTRcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE0XCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiJ2Nsb3NlJ1wiXG4gICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvdmVyYmVuLXRvb2x0aXA+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NsZWFyVG9vbHRpcD5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14c1wiPmNsZWFyIGRhdGU8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwid2Vla2RheXNcIj5cbiAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWtEYXlzXCI+e3sgZGF5IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c0luTW9udGhcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXk7IGVsc2UgZW1wdHlcIlxuICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChkYXkpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoZGF5KVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkLWRheSc6IGlzRGlzYWJsZWQoZGF5KSB9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFRlbXBvcmFyeURhdGUoZGF5KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGRheS5nZXREYXRlKCkgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbXB0eS1kYXRlXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWZvb3RlclwiPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjb25maXJtKClcIj5PSzwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|