@datarailsshared/datarailsshared 1.6.393 → 1.6.397
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/datarailsshared-datarailsshared-1.6.397.tgz +0 -0
- package/esm2022/lib/dr-cron-field/dr-cron-field.component.mjs +4 -4
- package/esm2022/lib/dr-cron-field/dr-cron-field.editor.mjs +23 -12
- package/fesm2022/datarailsshared-datarailsshared.mjs +25 -14
- package/fesm2022/datarailsshared-datarailsshared.mjs.map +1 -1
- package/lib/dr-cron-field/dr-cron-field.component.d.ts +1 -1
- package/lib/dr-cron-field/dr-cron-field.editor.d.ts +4 -3
- package/package.json +1 -1
- package/datarailsshared-datarailsshared-1.6.393.tgz +0 -0
|
Binary file
|
|
@@ -578,14 +578,14 @@ export class DrCronFieldComponent {
|
|
|
578
578
|
useExisting: forwardRef((() => DrCronFieldComponent)),
|
|
579
579
|
multi: true,
|
|
580
580
|
},
|
|
581
|
-
]), i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature], decls: 5, vars: 2, consts: [["data-analytics", "dr-cron-field_input-main", "aria-label", "Schedule", "placeholder", "Select...", 3, "id", "ngModel", "drPopover", "drPopoverPosition", "disabled", "readonly", "click", "ngModelChange", 4, "ngIf", "ngIfElse"], ["recurrencePopover", ""], ["cronConfiguration", ""], ["data-analytics", "dr-cron-field_input-main", "aria-label", "Schedule", "placeholder", "Select...", 3, "id", "ngModel", "drPopover", "drPopoverPosition", "disabled", "readonly", "click", "ngModelChange"], ["prefixIcon", "", 1, "dr-icon-date"], ["suffixIcon", "", 1, "dr-icon-arrow-down"], [1, "recurrence-popup"], [1, "recurrence-popup__body"], [3, "ngTemplateOutlet"], [1, "recurrence-popup__footer"], ["data-analytics", "dr-cron-field_button-cancel", "theme", "secondary", 3, "click"], ["data-analytics", "dr-cron-field_button-save", 3, "click"], ["quarterConfig", ""], ["hourConfig", ""], ["weekConfig", ""], ["dayOfMonthSelector", ""], ["yearMonthSelector", ""], [1, "cron-configuration"], ["data-analytics", "dr-cron-field_radio-group-period", "class", "cron-configuration__every", "name", "every", 3, "ngModel", "ngModelChange", 4, "ngIf"], ["class", "cron-configuration__advanced", 4, "ngIf"], [4, "ngIf"], ["data-analytics", "dr-cron-field_select-quarter-month", "aria-label", "Quarter month", "bindLabel", "label", "bindValue", "value", 1, "month-of-quarter", 3, "ngModel", "items", "ngModelChange"], ["data-analytics", "dr-cron-field_select-every-x-hours", "aria-label", "Hour interval", "bindLabel", "label", "bindValue", "value", 1, "
|
|
581
|
+
]), i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature], decls: 5, vars: 2, consts: [["data-analytics", "dr-cron-field_input-main", "aria-label", "Schedule", "placeholder", "Select...", 3, "id", "ngModel", "drPopover", "drPopoverPosition", "disabled", "readonly", "click", "ngModelChange", 4, "ngIf", "ngIfElse"], ["recurrencePopover", ""], ["cronConfiguration", ""], ["data-analytics", "dr-cron-field_input-main", "aria-label", "Schedule", "placeholder", "Select...", 3, "id", "ngModel", "drPopover", "drPopoverPosition", "disabled", "readonly", "click", "ngModelChange"], ["prefixIcon", "", 1, "dr-icon-date"], ["suffixIcon", "", 1, "dr-icon-arrow-down"], [1, "recurrence-popup"], [1, "recurrence-popup__body"], [3, "ngTemplateOutlet"], [1, "recurrence-popup__footer"], ["data-analytics", "dr-cron-field_button-cancel", "theme", "secondary", 3, "click"], ["data-analytics", "dr-cron-field_button-save", 3, "click"], ["quarterConfig", ""], ["hourConfig", ""], ["weekConfig", ""], ["dayOfMonthSelector", ""], ["yearMonthSelector", ""], [1, "cron-configuration"], ["data-analytics", "dr-cron-field_radio-group-period", "class", "cron-configuration__every", "name", "every", 3, "ngModel", "ngModelChange", 4, "ngIf"], ["class", "cron-configuration__advanced", 4, "ngIf"], [4, "ngIf"], ["data-analytics", "dr-cron-field_select-quarter-month", "aria-label", "Quarter month", "bindLabel", "label", "bindValue", "value", 1, "month-of-quarter", 3, "ngModel", "items", "ngModelChange"], ["data-analytics", "dr-cron-field_select-every-x-hours", "aria-label", "Hour interval", "bindLabel", "label", "bindValue", "value", 1, "hour-of-day", 3, "ngModel", "items", "ngModelChange"], ["data-analytics", "dr-cron-field_select-day-of-week", "aria-label", "Day of week", "bindLabel", "label", "bindValue", "value", 1, "day-of-week", 3, "ngModel", "items", "ngModelChange"], ["data-analytics", "dr-cron-field_select-day-of-month", "aria-label", "Day of month", "bindLabel", "label", "bindValue", "value", 1, "day-of-month", 3, "ngModel", "items", "searchable", "ngModelChange"], ["data-analytics", "dr-cron-field_select-month", "aria-label", "Month", "bindLabel", "label", "bindValue", "value", 1, "month-of-year", 3, "ngModel", "items", "ngModelChange"], ["data-analytics", "dr-cron-field_radio-group-period", "name", "every", 1, "cron-configuration__every", 3, "ngModel", "ngModelChange"], ["data-analytics", "dr-cron-field_radio-button-0", 3, "value", 4, "ngFor", "ngForOf"], ["data-analytics", "dr-cron-field_radio-button-0", 3, "value"], [1, "cron-configuration__advanced"], [1, "cron-configuration__advanced-note"], [1, "cron-configuration__advanced-label"], ["data-analytics", "dr-cron-field_input-advanced", 3, "ngModel", "ngModelChange"], ["class", "cron-configuration__advanced-error", 4, "ngIf"], [1, "cron-configuration__advanced-error"], [4, "ngIf", "ngIfElse"], ["singleRowMode", ""], [1, "cron-configuration__section", "cron-configuration__row"], [3, "ngTemplateOutlet", 4, "ngIf"], ["class", "cron-configuration__section cron-configuration__row", 4, "ngIf"], [1, "cron-configuration__section", "cron-configuration__row", "cron-configuration__row--time"], [1, "time-prefix"], [3, "ngModel", "ngModelChange"], ["class", "cron-configuration__section", 4, "ngIf"], [1, "cron-configuration__section"], ["data-analytics", "dr-cron-field_input-hour", "aria-label", "Hour", "type", "number", 1, "hours-input", 3, "ngModel", "mask", "min", "max", "ngModelChange"], [1, "time-dots"], ["data-analytics", "dr-cron-field_input-minute", "aria-label", "Minute", "type", "number", 1, "minutes-input", 3, "ngModel", "mask", "min", "max", "ngModelChange"], ["data-analytics", "dr-cron-field_select-time-period", "aria-label", "Time period", 1, "time-period-selector", 3, "ngModel", "items", "ngModelChange"], ["data-analytics", "dr-cron-field_select-timezone", "aria-label", "Time zone", "bindLabel", "label", "bindValue", "value", 1, "gmt-offsets", 3, "ngModel", "items", "textView", "ngModelChange"], ["labelTemplate", ""]], template: function DrCronFieldComponent_Template(rf, ctx) { if (rf & 1) {
|
|
582
582
|
i0.ɵɵtemplate(0, DrCronFieldComponent_dr_input_0_Template, 3, 6, "dr-input", 0);
|
|
583
583
|
i0.ɵɵtemplate(1, DrCronFieldComponent_ng_template_1_Template, 8, 1, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
|
|
584
584
|
i0.ɵɵtemplate(3, DrCronFieldComponent_ng_template_3_Template, 14, 5, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
|
|
585
585
|
} if (rf & 2) {
|
|
586
586
|
const _r3 = i0.ɵɵreference(4);
|
|
587
587
|
i0.ɵɵproperty("ngIf", !ctx.flatMode)("ngIfElse", _r3);
|
|
588
|
-
} }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, FormsModule, i2.NgControlStatus, i2.NgModel, DrTooltipModule, DrInputsModule, i3.DrButtonComponent, i4.RadioButtonComponent, i5.RadioGroupComponent, i6.DrInputComponent, i7.DrSelectComponent, DrPopoverModule, i8.DrPopoverDirective, TimePickerComponent], styles: ["[_nghost-%COMP%] dr-input[_ngcontent-%COMP%] , [_nghost-%COMP%] dr-input[_ngcontent-%COMP%] input{cursor:pointer;text-overflow:ellipsis}.recurrence-popup__body[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex-grow:1;padding:16px 32px}.recurrence-popup__footer[_ngcontent-%COMP%]{display:flex;align-items:center;padding:8px 16px;border-top:1px solid #dfe0e3;justify-content:flex-end}.recurrence-popup__footer[_ngcontent-%COMP%] dr-button[_ngcontent-%COMP%]{margin-left:12px}.cron-configuration[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:640px;height:auto;font-size:14px;line-height:24px;font-weight:400}.cron-configuration__every[_ngcontent-%COMP%]{display:flex;align-items:center;width:100%;margin:16px 0;gap:24px}.cron-configuration__section[_ngcontent-%COMP%]{display:flex;align-items:center;flex-wrap:nowrap;margin-bottom:8px}.cron-configuration__section[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{flex-shrink:0}.cron-configuration[_ngcontent-%COMP%] .month-of-quarter[_ngcontent-%COMP%]{width:65px;flex-shrink:0;margin:0 8px}.cron-configuration[_ngcontent-%COMP%] .day-of-week[_ngcontent-%COMP%]{width:132px;flex-shrink:0;margin:0 8px}.cron-configuration[_ngcontent-%COMP%] .month-of-year[_ngcontent-%COMP%]{width:125px;flex-shrink:0;margin:0 0 0 8px}.cron-configuration[_ngcontent-%COMP%] .day-of-month[_ngcontent-%COMP%]{width:
|
|
588
|
+
} }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, FormsModule, i2.NgControlStatus, i2.NgModel, DrTooltipModule, DrInputsModule, i3.DrButtonComponent, i4.RadioButtonComponent, i5.RadioGroupComponent, i6.DrInputComponent, i7.DrSelectComponent, DrPopoverModule, i8.DrPopoverDirective, TimePickerComponent], styles: ["[_nghost-%COMP%] dr-input[_ngcontent-%COMP%] , [_nghost-%COMP%] dr-input[_ngcontent-%COMP%] input{cursor:pointer;text-overflow:ellipsis}.recurrence-popup__body[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex-grow:1;padding:16px 32px}.recurrence-popup__footer[_ngcontent-%COMP%]{display:flex;align-items:center;padding:8px 16px;border-top:1px solid #dfe0e3;justify-content:flex-end}.recurrence-popup__footer[_ngcontent-%COMP%] dr-button[_ngcontent-%COMP%]{margin-left:12px}.cron-configuration[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:640px;height:auto;font-size:14px;line-height:24px;font-weight:400}.cron-configuration__every[_ngcontent-%COMP%]{display:flex;align-items:center;width:100%;margin:16px 0;gap:24px}.cron-configuration__section[_ngcontent-%COMP%]{display:flex;align-items:center;flex-wrap:nowrap;margin-bottom:8px}.cron-configuration__section[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{flex-shrink:0}.cron-configuration[_ngcontent-%COMP%] .hour-of-day[_ngcontent-%COMP%]{width:62px;flex-shrink:0;margin:0 8px}.cron-configuration[_ngcontent-%COMP%] .month-of-quarter[_ngcontent-%COMP%]{width:65px;flex-shrink:0;margin:0 8px}.cron-configuration[_ngcontent-%COMP%] .day-of-week[_ngcontent-%COMP%]{width:132px;flex-shrink:0;margin:0 8px}.cron-configuration[_ngcontent-%COMP%] .month-of-year[_ngcontent-%COMP%]{width:125px;flex-shrink:0;margin:0 0 0 8px}.cron-configuration[_ngcontent-%COMP%] .day-of-month[_ngcontent-%COMP%]{width:92px;flex-shrink:0;margin:0 8px}.cron-configuration[_ngcontent-%COMP%] .hours-input[_ngcontent-%COMP%]{width:62px;flex-shrink:0;margin-left:8px}.cron-configuration[_ngcontent-%COMP%] .minutes-input[_ngcontent-%COMP%]{width:62px;flex-shrink:0}.cron-configuration[_ngcontent-%COMP%] .time-period-selector[_ngcontent-%COMP%]{width:64px;flex-shrink:0;margin-left:8px}.cron-configuration[_ngcontent-%COMP%] .time-prefix[_ngcontent-%COMP%]{margin-left:4px}.cron-configuration[_ngcontent-%COMP%] .time-dots[_ngcontent-%COMP%]{margin:0 4px}.cron-configuration[_ngcontent-%COMP%] .gmt-offsets[_ngcontent-%COMP%]{margin-left:16px}.cron-configuration__advanced[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.cron-configuration__advanced[_ngcontent-%COMP%] dr-input[_ngcontent-%COMP%] input{cursor:text}.cron-configuration__advanced-error[_ngcontent-%COMP%]{color:#bf1d30}.cron-configuration--multi-row[_ngcontent-%COMP%]{width:auto}.cron-configuration--multi-row[_ngcontent-%COMP%] .cron-configuration__row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.cron-configuration--multi-row[_ngcontent-%COMP%] .cron-configuration__row--time[_ngcontent-%COMP%]{margin-top:8px}.cron-configuration--multi-row[_ngcontent-%COMP%] .time-prefix[_ngcontent-%COMP%]{margin-left:0}"], changeDetection: 0 }); }
|
|
589
589
|
}
|
|
590
590
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrCronFieldComponent, [{
|
|
591
591
|
type: Component,
|
|
@@ -595,7 +595,7 @@ export class DrCronFieldComponent {
|
|
|
595
595
|
useExisting: forwardRef((() => DrCronFieldComponent)),
|
|
596
596
|
multi: true,
|
|
597
597
|
},
|
|
598
|
-
], imports: [CommonModule, FormsModule, DrTooltipModule, DrInputsModule, DrPopoverModule, TimePickerComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dr-input\n [id]=\"id\"\n data-analytics=\"dr-cron-field_input-main\"\n aria-label=\"Schedule\"\n *ngIf=\"!flatMode; else cronConfiguration\"\n placeholder=\"Select...\"\n (click)=\"!disabled ? openPopover() : null\"\n [(ngModel)]=\"visibleString\"\n [drPopover]=\"!disabled ? recurrencePopover : null\"\n [drPopoverPosition]=\"popoverPosition\"\n [disabled]=\"disabled\"\n [readonly]=\"true\">\n <i class=\"dr-icon-date\" prefixIcon></i>\n <i class=\"dr-icon-arrow-down\" suffixIcon></i>\n</dr-input>\n\n<ng-template #recurrencePopover let-closePopover=\"closePopover\">\n <div class=\"recurrence-popup\">\n <div class=\"recurrence-popup__body\">\n <ng-container [ngTemplateOutlet]=\"cronConfiguration\"></ng-container>\n </div>\n <div class=\"recurrence-popup__footer\">\n <dr-button data-analytics=\"dr-cron-field_button-cancel\" theme=\"secondary\" (click)=\"closePopover()\">Cancel</dr-button>\n <dr-button data-analytics=\"dr-cron-field_button-save\" (click)=\"update(); closePopover()\">Save</dr-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #cronConfiguration>\n <ng-template #quarterConfig>\n <span>Repeat every quarter on</span>\n <dr-select\n data-analytics=\"dr-cron-field_select-quarter-month\"\n aria-label=\"Quarter month\"\n [(ngModel)]=\"cronModel.month\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"MONTH_OF_QUARTER_ARRAY\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"month-of-quarter\"></dr-select>\n <span>month of the quarter</span>\n </ng-template>\n\n <ng-template #hourConfig>\n <span>Repeat every</span>\n <dr-select\n data-analytics=\"dr-cron-field_select-every-x-hours\"\n aria-label=\"Hour interval\"\n [(ngModel)]=\"cronModel.everyXHours\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"HOURS_DIVISIBLE_INTO_DAY\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"day-of-month\">\n </dr-select>\n <span>hour(s)</span>\n </ng-template>\n\n <ng-template #weekConfig>\n <span>Repeat every</span>\n <dr-select\n data-analytics=\"dr-cron-field_select-day-of-week\"\n aria-label=\"Day of week\"\n [(ngModel)]=\"cronModel.dayOfWeek\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"DAY_OF_WEEK_ARRAY\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"day-of-week\">\n </dr-select>\n </ng-template>\n\n <ng-template #dayOfMonthSelector>\n <dr-select\n data-analytics=\"dr-cron-field_select-day-of-month\"\n aria-label=\"Day of month\"\n [(ngModel)]=\"cronModel.dayOfMonth\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"DAY_OF_MONTH_ARRAY\"\n [searchable]=\"true\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"day-of-month\">\n </dr-select>\n </ng-template>\n\n <ng-template #yearMonthSelector>\n <span>Repeat every</span>\n <dr-select\n data-analytics=\"dr-cron-field_select-month\"\n aria-label=\"Month\"\n [(ngModel)]=\"cronModel.month\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"MONTH_OF_YEAR_ARRAY\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"month-of-year\">\n </dr-select>\n </ng-template>\n\n <div class=\"cron-configuration\" [class.cron-configuration--multi-row]=\"multiRowMode\">\n <dr-radio-group\n data-analytics=\"dr-cron-field_radio-group-period\"\n *ngIf=\"!hidePeriodSelector\"\n class=\"cron-configuration__every\"\n [ngModel]=\"isAdvancedMode ? 'advanced' : cronModel.every\"\n (ngModelChange)=\"onEveryChange($event)\"\n name=\"every\">\n <dr-radio-button\n data-analytics=\"dr-cron-field_radio-button-0\"\n *ngFor=\"let option of cronEditorPeriodArray\"\n [value]=\"option.value\"\n [attr.data-analytics]=\"'dr-cron-field_radio-button-' + option.value\">\n {{ option.label }}\n </dr-radio-button>\n </dr-radio-group>\n <div *ngIf=\"isAdvancedMode\" class=\"cron-configuration__advanced\">\n <div class=\"cron-configuration__advanced-note\">\n Use crontab to set custom time intervals for sync frequency, such as every two weeks at 10:05.\n </div>\n <div class=\"cron-configuration__advanced-label\">Enter your cron expression:</div>\n <dr-input\n data-analytics=\"dr-cron-field_input-advanced\"\n [(ngModel)]=\"advancedCron\"\n (ngModelChange)=\"onAdvancedChange()\">\n </dr-input>\n <div *ngIf=\"advancedError\" class=\"cron-configuration__advanced-error\">{{ advancedError }}</div>\n </div>\n\n <ng-container *ngIf=\"!isAdvancedMode\">\n <ng-container *ngIf=\"multiRowMode; else singleRowMode\">\n <div class=\"cron-configuration__section cron-configuration__row\">\n <ng-container\n *ngIf=\"cronModel.every === cronEditorPeriod.QUARTER\"\n [ngTemplateOutlet]=\"quarterConfig\"></ng-container>\n <span *ngIf=\"cronModel.every === cronEditorPeriod.DAY\">Repeat every day</span>\n <ng-container\n *ngIf=\"cronModel.every === cronEditorPeriod.HOUR\"\n [ngTemplateOutlet]=\"hourConfig\"></ng-container>\n <ng-container\n *ngIf=\"cronModel.every === cronEditorPeriod.WEEK\"\n [ngTemplateOutlet]=\"weekConfig\"></ng-container>\n <ng-container *ngIf=\"cronModel.every === cronEditorPeriod.YEAR\">\n <ng-container [ngTemplateOutlet]=\"yearMonthSelector\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"dayOfMonthSelector\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"cronModel.every === cronEditorPeriod.MONTH\">\n <span>Repeat on</span>\n <ng-container [ngTemplateOutlet]=\"dayOfMonthSelector\"></ng-container>\n <span>day of every month</span>\n </ng-container>\n </div>\n\n <div\n class=\"cron-configuration__section cron-configuration__row\"\n *ngIf=\"cronModel.every === cronEditorPeriod.QUARTER\">\n <span>on</span>\n <ng-container [ngTemplateOutlet]=\"dayOfMonthSelector\"></ng-container>\n <span>day of the month</span>\n </div>\n\n <div class=\"cron-configuration__section cron-configuration__row cron-configuration__row--time\">\n <span class=\"time-prefix\">at</span>\n <dr-time-picker [ngModel]=\"cronModel\" (ngModelChange)=\"onTimePickerChange($event)\"> </dr-time-picker>\n </div>\n </ng-container>\n\n <ng-template #singleRowMode>\n <div *ngIf=\"cronModel.every === cronEditorPeriod.QUARTER\" class=\"cron-configuration__section\">\n <ng-container [ngTemplateOutlet]=\"quarterConfig\"></ng-container>\n </div>\n <div class=\"cron-configuration__section\">\n <span *ngIf=\"cronModel.every === cronEditorPeriod.DAY\"> Repeat every day </span>\n <ng-container\n *ngIf=\"cronModel.every === cronEditorPeriod.HOUR\"\n [ngTemplateOutlet]=\"hourConfig\"></ng-container>\n <ng-container\n *ngIf=\"cronModel.every === cronEditorPeriod.WEEK\"\n [ngTemplateOutlet]=\"weekConfig\"></ng-container>\n\n <ng-container\n *ngIf=\"\n cronModel.every !== cronEditorPeriod.WEEK &&\n cronModel.every !== cronEditorPeriod.HOUR &&\n cronModel.every !== cronEditorPeriod.DAY\n \">\n <span *ngIf=\"cronModel.every === cronEditorPeriod.MONTH\">Repeat on </span>\n <span *ngIf=\"cronModel.every === cronEditorPeriod.QUARTER\">on </span>\n <ng-container\n *ngIf=\"cronModel.every === cronEditorPeriod.YEAR\"\n [ngTemplateOutlet]=\"yearMonthSelector\"></ng-container>\n\n <ng-container [ngTemplateOutlet]=\"dayOfMonthSelector\"></ng-container>\n\n <span *ngIf=\"cronModel.every === cronEditorPeriod.MONTH\">day of every month </span>\n <span *ngIf=\"cronModel.every === cronEditorPeriod.QUARTER\">day of the month </span>\n </ng-container>\n <span class=\"time-prefix\">at</span>\n <dr-input\n data-analytics=\"dr-cron-field_input-hour\"\n aria-label=\"Hour\"\n [(ngModel)]=\"cronModel.hour\"\n (ngModelChange)=\"onSelectionChange()\"\n [mask]=\"'00'\"\n [min]=\"0\"\n [max]=\"12\"\n type=\"number\"\n class=\"hours-input\">\n </dr-input>\n <span class=\"time-dots\">:</span>\n <dr-input\n data-analytics=\"dr-cron-field_input-minute\"\n aria-label=\"Minute\"\n [(ngModel)]=\"cronModel.minute\"\n (ngModelChange)=\"onSelectionChange()\"\n [mask]=\"'00'\"\n [min]=\"0\"\n [max]=\"59\"\n type=\"number\"\n class=\"minutes-input\">\n </dr-input>\n <dr-select\n data-analytics=\"dr-cron-field_select-time-period\"\n aria-label=\"Time period\"\n [(ngModel)]=\"cronModel.timePeriod\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"CRON_TIME_PERIOD_ARRAY\"\n class=\"time-period-selector\"></dr-select>\n <dr-select\n data-analytics=\"dr-cron-field_select-timezone\"\n aria-label=\"Time zone\"\n [(ngModel)]=\"cronModel.timeZone\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"GMT_OFFSETS\"\n [textView]=\"true\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"gmt-offsets\">\n <ng-template #labelTemplate let-item=\"item\">\n {{ LOCAL_TIME_ZONE_OFFSET !== cronModel.timeZone ? item.label : 'Local Time' }}\n </ng-template>\n </dr-select>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</ng-template>\n", styles: [":host dr-input::ng-deep,:host dr-input::ng-deep input{cursor:pointer;text-overflow:ellipsis}.recurrence-popup__body{display:flex;flex-direction:column;flex-grow:1;padding:16px 32px}.recurrence-popup__footer{display:flex;align-items:center;padding:8px 16px;border-top:1px solid #dfe0e3;justify-content:flex-end}.recurrence-popup__footer dr-button{margin-left:12px}.cron-configuration{display:flex;flex-direction:column;width:640px;height:auto;font-size:14px;line-height:24px;font-weight:400}.cron-configuration__every{display:flex;align-items:center;width:100%;margin:16px 0;gap:24px}.cron-configuration__section{display:flex;align-items:center;flex-wrap:nowrap;margin-bottom:8px}.cron-configuration__section span{flex-shrink:0}.cron-configuration .month-of-quarter{width:65px;flex-shrink:0;margin:0 8px}.cron-configuration .day-of-week{width:132px;flex-shrink:0;margin:0 8px}.cron-configuration .month-of-year{width:125px;flex-shrink:0;margin:0 0 0 8px}.cron-configuration .day-of-month{width:75px;flex-shrink:0;margin:0 8px}.cron-configuration .hours-input{width:62px;flex-shrink:0;margin-left:8px}.cron-configuration .minutes-input{width:62px;flex-shrink:0}.cron-configuration .time-period-selector{width:64px;flex-shrink:0;margin-left:8px}.cron-configuration .time-prefix{margin-left:4px}.cron-configuration .time-dots{margin:0 4px}.cron-configuration .gmt-offsets{margin-left:16px}.cron-configuration__advanced{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.cron-configuration__advanced dr-input::ng-deep input{cursor:text}.cron-configuration__advanced-error{color:#bf1d30}.cron-configuration--multi-row{width:auto}.cron-configuration--multi-row .cron-configuration__row{display:flex;align-items:center;gap:8px}.cron-configuration--multi-row .cron-configuration__row--time{margin-top:8px}.cron-configuration--multi-row .time-prefix{margin-left:0}\n"] }]
|
|
598
|
+
], imports: [CommonModule, FormsModule, DrTooltipModule, DrInputsModule, DrPopoverModule, TimePickerComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dr-input\n [id]=\"id\"\n data-analytics=\"dr-cron-field_input-main\"\n aria-label=\"Schedule\"\n *ngIf=\"!flatMode; else cronConfiguration\"\n placeholder=\"Select...\"\n (click)=\"!disabled ? openPopover() : null\"\n [(ngModel)]=\"visibleString\"\n [drPopover]=\"!disabled ? recurrencePopover : null\"\n [drPopoverPosition]=\"popoverPosition\"\n [disabled]=\"disabled\"\n [readonly]=\"true\">\n <i class=\"dr-icon-date\" prefixIcon></i>\n <i class=\"dr-icon-arrow-down\" suffixIcon></i>\n</dr-input>\n\n<ng-template #recurrencePopover let-closePopover=\"closePopover\">\n <div class=\"recurrence-popup\">\n <div class=\"recurrence-popup__body\">\n <ng-container [ngTemplateOutlet]=\"cronConfiguration\"></ng-container>\n </div>\n <div class=\"recurrence-popup__footer\">\n <dr-button data-analytics=\"dr-cron-field_button-cancel\" theme=\"secondary\" (click)=\"closePopover()\">Cancel</dr-button>\n <dr-button data-analytics=\"dr-cron-field_button-save\" (click)=\"update(); closePopover()\">Save</dr-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #cronConfiguration>\n <ng-template #quarterConfig>\n <span>Repeat every quarter on</span>\n <dr-select\n data-analytics=\"dr-cron-field_select-quarter-month\"\n aria-label=\"Quarter month\"\n [(ngModel)]=\"cronModel.month\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"MONTH_OF_QUARTER_ARRAY\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"month-of-quarter\"></dr-select>\n <span>month of the quarter</span>\n </ng-template>\n\n <ng-template #hourConfig>\n <span>Repeat every</span>\n <dr-select\n data-analytics=\"dr-cron-field_select-every-x-hours\"\n aria-label=\"Hour interval\"\n [(ngModel)]=\"cronModel.everyXHours\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"HOURS_DIVISIBLE_INTO_DAY\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"hour-of-day\">\n </dr-select>\n <span>hour(s)</span>\n </ng-template>\n\n <ng-template #weekConfig>\n <span>Repeat every</span>\n <dr-select\n data-analytics=\"dr-cron-field_select-day-of-week\"\n aria-label=\"Day of week\"\n [(ngModel)]=\"cronModel.dayOfWeek\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"DAY_OF_WEEK_ARRAY\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"day-of-week\">\n </dr-select>\n </ng-template>\n\n <ng-template #dayOfMonthSelector>\n <dr-select\n data-analytics=\"dr-cron-field_select-day-of-month\"\n aria-label=\"Day of month\"\n [(ngModel)]=\"cronModel.dayOfMonth\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"DAY_OF_MONTH_ARRAY\"\n [searchable]=\"true\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"day-of-month\">\n </dr-select>\n </ng-template>\n\n <ng-template #yearMonthSelector>\n <span>Repeat every</span>\n <dr-select\n data-analytics=\"dr-cron-field_select-month\"\n aria-label=\"Month\"\n [(ngModel)]=\"cronModel.month\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"MONTH_OF_YEAR_ARRAY\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"month-of-year\">\n </dr-select>\n </ng-template>\n\n <div class=\"cron-configuration\" [class.cron-configuration--multi-row]=\"multiRowMode\">\n <dr-radio-group\n data-analytics=\"dr-cron-field_radio-group-period\"\n *ngIf=\"!hidePeriodSelector\"\n class=\"cron-configuration__every\"\n [ngModel]=\"isAdvancedMode ? 'advanced' : cronModel.every\"\n (ngModelChange)=\"onEveryChange($event)\"\n name=\"every\">\n <dr-radio-button\n data-analytics=\"dr-cron-field_radio-button-0\"\n *ngFor=\"let option of cronEditorPeriodArray\"\n [value]=\"option.value\"\n [attr.data-analytics]=\"'dr-cron-field_radio-button-' + option.value\">\n {{ option.label }}\n </dr-radio-button>\n </dr-radio-group>\n <div *ngIf=\"isAdvancedMode\" class=\"cron-configuration__advanced\">\n <div class=\"cron-configuration__advanced-note\">\n Use crontab to set custom time intervals for sync frequency, such as every two weeks at 10:05.\n </div>\n <div class=\"cron-configuration__advanced-label\">Enter your cron expression:</div>\n <dr-input\n data-analytics=\"dr-cron-field_input-advanced\"\n [(ngModel)]=\"advancedCron\"\n (ngModelChange)=\"onAdvancedChange()\">\n </dr-input>\n <div *ngIf=\"advancedError\" class=\"cron-configuration__advanced-error\">{{ advancedError }}</div>\n </div>\n\n <ng-container *ngIf=\"!isAdvancedMode\">\n <ng-container *ngIf=\"multiRowMode; else singleRowMode\">\n <div class=\"cron-configuration__section cron-configuration__row\">\n <ng-container\n *ngIf=\"cronModel.every === cronEditorPeriod.QUARTER\"\n [ngTemplateOutlet]=\"quarterConfig\"></ng-container>\n <span *ngIf=\"cronModel.every === cronEditorPeriod.DAY\">Repeat every day</span>\n <ng-container\n *ngIf=\"cronModel.every === cronEditorPeriod.HOUR\"\n [ngTemplateOutlet]=\"hourConfig\"></ng-container>\n <ng-container\n *ngIf=\"cronModel.every === cronEditorPeriod.WEEK\"\n [ngTemplateOutlet]=\"weekConfig\"></ng-container>\n <ng-container *ngIf=\"cronModel.every === cronEditorPeriod.YEAR\">\n <ng-container [ngTemplateOutlet]=\"yearMonthSelector\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"dayOfMonthSelector\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"cronModel.every === cronEditorPeriod.MONTH\">\n <span>Repeat on</span>\n <ng-container [ngTemplateOutlet]=\"dayOfMonthSelector\"></ng-container>\n <span>day of every month</span>\n </ng-container>\n </div>\n\n <div\n class=\"cron-configuration__section cron-configuration__row\"\n *ngIf=\"cronModel.every === cronEditorPeriod.QUARTER\">\n <span>on</span>\n <ng-container [ngTemplateOutlet]=\"dayOfMonthSelector\"></ng-container>\n <span>day of the month</span>\n </div>\n\n <div class=\"cron-configuration__section cron-configuration__row cron-configuration__row--time\">\n <span class=\"time-prefix\">at</span>\n <dr-time-picker [ngModel]=\"cronModel\" (ngModelChange)=\"onTimePickerChange($event)\"> </dr-time-picker>\n </div>\n </ng-container>\n\n <ng-template #singleRowMode>\n <div *ngIf=\"cronModel.every === cronEditorPeriod.QUARTER\" class=\"cron-configuration__section\">\n <ng-container [ngTemplateOutlet]=\"quarterConfig\"></ng-container>\n </div>\n <div class=\"cron-configuration__section\">\n <span *ngIf=\"cronModel.every === cronEditorPeriod.DAY\"> Repeat every day </span>\n <ng-container\n *ngIf=\"cronModel.every === cronEditorPeriod.HOUR\"\n [ngTemplateOutlet]=\"hourConfig\"></ng-container>\n <ng-container\n *ngIf=\"cronModel.every === cronEditorPeriod.WEEK\"\n [ngTemplateOutlet]=\"weekConfig\"></ng-container>\n\n <ng-container\n *ngIf=\"\n cronModel.every !== cronEditorPeriod.WEEK &&\n cronModel.every !== cronEditorPeriod.HOUR &&\n cronModel.every !== cronEditorPeriod.DAY\n \">\n <span *ngIf=\"cronModel.every === cronEditorPeriod.MONTH\">Repeat on </span>\n <span *ngIf=\"cronModel.every === cronEditorPeriod.QUARTER\">on </span>\n <ng-container\n *ngIf=\"cronModel.every === cronEditorPeriod.YEAR\"\n [ngTemplateOutlet]=\"yearMonthSelector\"></ng-container>\n\n <ng-container [ngTemplateOutlet]=\"dayOfMonthSelector\"></ng-container>\n\n <span *ngIf=\"cronModel.every === cronEditorPeriod.MONTH\">day of every month </span>\n <span *ngIf=\"cronModel.every === cronEditorPeriod.QUARTER\">day of the month </span>\n </ng-container>\n <span class=\"time-prefix\">at</span>\n <dr-input\n data-analytics=\"dr-cron-field_input-hour\"\n aria-label=\"Hour\"\n [(ngModel)]=\"cronModel.hour\"\n (ngModelChange)=\"onSelectionChange()\"\n [mask]=\"'00'\"\n [min]=\"0\"\n [max]=\"12\"\n type=\"number\"\n class=\"hours-input\">\n </dr-input>\n <span class=\"time-dots\">:</span>\n <dr-input\n data-analytics=\"dr-cron-field_input-minute\"\n aria-label=\"Minute\"\n [(ngModel)]=\"cronModel.minute\"\n (ngModelChange)=\"onSelectionChange()\"\n [mask]=\"'00'\"\n [min]=\"0\"\n [max]=\"59\"\n type=\"number\"\n class=\"minutes-input\">\n </dr-input>\n <dr-select\n data-analytics=\"dr-cron-field_select-time-period\"\n aria-label=\"Time period\"\n [(ngModel)]=\"cronModel.timePeriod\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"CRON_TIME_PERIOD_ARRAY\"\n class=\"time-period-selector\"></dr-select>\n <dr-select\n data-analytics=\"dr-cron-field_select-timezone\"\n aria-label=\"Time zone\"\n [(ngModel)]=\"cronModel.timeZone\"\n (ngModelChange)=\"onSelectionChange()\"\n [items]=\"GMT_OFFSETS\"\n [textView]=\"true\"\n bindLabel=\"label\"\n bindValue=\"value\"\n class=\"gmt-offsets\">\n <ng-template #labelTemplate let-item=\"item\">\n {{ LOCAL_TIME_ZONE_OFFSET !== cronModel.timeZone ? item.label : 'Local Time' }}\n </ng-template>\n </dr-select>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</ng-template>\n", styles: [":host dr-input::ng-deep,:host dr-input::ng-deep input{cursor:pointer;text-overflow:ellipsis}.recurrence-popup__body{display:flex;flex-direction:column;flex-grow:1;padding:16px 32px}.recurrence-popup__footer{display:flex;align-items:center;padding:8px 16px;border-top:1px solid #dfe0e3;justify-content:flex-end}.recurrence-popup__footer dr-button{margin-left:12px}.cron-configuration{display:flex;flex-direction:column;width:640px;height:auto;font-size:14px;line-height:24px;font-weight:400}.cron-configuration__every{display:flex;align-items:center;width:100%;margin:16px 0;gap:24px}.cron-configuration__section{display:flex;align-items:center;flex-wrap:nowrap;margin-bottom:8px}.cron-configuration__section span{flex-shrink:0}.cron-configuration .hour-of-day{width:62px;flex-shrink:0;margin:0 8px}.cron-configuration .month-of-quarter{width:65px;flex-shrink:0;margin:0 8px}.cron-configuration .day-of-week{width:132px;flex-shrink:0;margin:0 8px}.cron-configuration .month-of-year{width:125px;flex-shrink:0;margin:0 0 0 8px}.cron-configuration .day-of-month{width:92px;flex-shrink:0;margin:0 8px}.cron-configuration .hours-input{width:62px;flex-shrink:0;margin-left:8px}.cron-configuration .minutes-input{width:62px;flex-shrink:0}.cron-configuration .time-period-selector{width:64px;flex-shrink:0;margin-left:8px}.cron-configuration .time-prefix{margin-left:4px}.cron-configuration .time-dots{margin:0 4px}.cron-configuration .gmt-offsets{margin-left:16px}.cron-configuration__advanced{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.cron-configuration__advanced dr-input::ng-deep input{cursor:text}.cron-configuration__advanced-error{color:#bf1d30}.cron-configuration--multi-row{width:auto}.cron-configuration--multi-row .cron-configuration__row{display:flex;align-items:center;gap:8px}.cron-configuration--multi-row .cron-configuration__row--time{margin-top:8px}.cron-configuration--multi-row .time-prefix{margin-left:0}\n"] }]
|
|
599
599
|
}], function () { return [{ type: i0.ChangeDetectorRef }]; }, { id: [{
|
|
600
600
|
type: Input
|
|
601
601
|
}], hostId: [{
|
|
@@ -627,4 +627,4 @@ export class DrCronFieldComponent {
|
|
|
627
627
|
}], validateCron: [{
|
|
628
628
|
type: Input
|
|
629
629
|
}] }); })();
|
|
630
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItY3Jvbi1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jcm9uLWZpZWxkL2RyLWNyb24tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItY3Jvbi1maWVsZC9kci1jcm9uLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDaEosT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxjQUFjLEVBQ2QsV0FBVyxFQUNYLHNCQUFzQixFQUN0QixtQkFBbUIsR0FFdEIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUNILGVBQWUsRUFDZixVQUFVLEVBQ1YsK0JBQStCLEVBQy9CLGdCQUFnQixFQUNoQixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBRXhCLHNCQUFzQixFQUN0QixtQkFBbUIsR0FDdEIsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7O0lDM0J0RixtQ0FXc0I7SUFMbEIsd0tBQVMsa0NB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VzttQkFBQyxTQUFTO1lBSWYsUUFBUTtrQkFGZCxLQUFLOztrQkFDTCxXQUFXO21CQUFDLGdCQUFnQjtZQUdwQixjQUFjO2tCQUF0QixLQUFLO1lBQ0csZUFBZTtrQkFBdkIsS0FBSztZQUNHLGVBQWU7a0JBQXZCLEtBQUs7WUFDa0Msa0JBQWtCO2tCQUF6RCxLQUFLO21CQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBQ0UsUUFBUTtrQkFBL0MsS0FBSzttQkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQUNFLFlBQVk7a0JBQW5ELEtBQUs7bUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUFDRSxhQUFhO2tCQUFwRCxLQUFLO21CQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBQzdCLFlBQVk7a0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBib29sZWFuQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIERySW5wdXRzTW9kdWxlLFxuICAgIEdNVF9PRkZTRVRTLFxuICAgIExPQ0FMX1RJTUVfWk9ORV9PRkZTRVQsXG4gICAgVGltZVBpY2tlckNvbXBvbmVudCxcbiAgICBUaW1lcGlja2VyTW9kZWwsXG59IGZyb20gJy4uL2RyLWlucHV0cyc7XG5pbXBvcnQge1xuICAgIEFMTE9XRURfUEVSSU9EUyxcbiAgICBDcm9uRWRpdG9yLFxuICAgIENyb25FZGl0b3JEZWZhdWx0Q29uZmlnQnlQZXJpb2QsXG4gICAgQ3JvbkVkaXRvclBlcmlvZCxcbiAgICBDcm9uVGltZVBlcmlvZCxcbiAgICBEQVlfT0ZfTU9OVEhfQVJSQVksXG4gICAgREFZX09GX1dFRUtfQVJSQVksXG4gICAgZ2V0Q3JvblR5cGVBc1BlcmlvZExhYmVsLFxuICAgIEhPVVJTX0RJVklTSUJMRV9JTlRPX0RBWSxcbiAgICBJQ3JvbkVkaXRvcixcbiAgICBNT05USF9PRl9RVUFSVEVSX0FSUkFZLFxuICAgIE1PTlRIX09GX1lFQVJfQVJSQVksXG59IGZyb20gJy4vZHItY3Jvbi1maWVsZC5lZGl0b3InO1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLi9tb2RlbHMvcG9zaXRpb24nO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBEclRvb2x0aXBNb2R1bGUgfSBmcm9tICcuLi9kci10b29sdGlwL2RyLXRvb2x0aXAubW9kdWxlJztcbmltcG9ydCB7IERyUG9wb3Zlck1vZHVsZSB9IGZyb20gJy4uL2RyLXBvcG92ZXIvZHItcG9wb3Zlci5tb2R1bGUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci1jcm9uLWZpZWxkJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERyQ3JvbkZpZWxkQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIERyVG9vbHRpcE1vZHVsZSwgRHJJbnB1dHNNb2R1bGUsIERyUG9wb3Zlck1vZHVsZSwgVGltZVBpY2tlckNvbXBvbmVudF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RyLWNyb24tZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RyLWNyb24tZmllbGQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRHJDcm9uRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBASW5wdXQoKSBpZD86IHN0cmluZztcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBob3N0SWQgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJylcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGFsbG93ZWRQZXJpb2RzOiBDcm9uRWRpdG9yUGVyaW9kW10gPSBBTExPV0VEX1BFUklPRFM7XG4gICAgQElucHV0KCkgZmlzY2FsWWVhclN0YXJ0OiBudW1iZXIgPSAxO1xuICAgIEBJbnB1dCgpIHBvcG92ZXJQb3NpdGlvbjogUG9zaXRpb24gPSAnYm90dG9tLWxlZnQnO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoaWRlUGVyaW9kU2VsZWN0b3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmxhdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbXVsdGlSb3dNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFsbG93QWR2YW5jZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSB2YWxpZGF0ZUNyb24/OiAoY3Jvbjogc3RyaW5nKSA9PiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcl9tZXNzYWdlPzogc3RyaW5nIH07XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgREFZX09GX01PTlRIX0FSUkFZID0gREFZX09GX01PTlRIX0FSUkFZO1xuICAgIHB1YmxpYyByZWFkb25seSBNT05USF9PRl9RVUFSVEVSX0FSUkFZID0gTU9OVEhfT0ZfUVVBUlRFUl9BUlJBWTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgTU9OVEhfT0ZfWUVBUl9BUlJBWSA9IE1PTlRIX09GX1lFQVJfQVJSQVk7XG4gICAgcHVibGljIHJlYWRvbmx5IERBWV9PRl9XRUVLX0FSUkFZID0gREFZX09GX1dFRUtfQVJSQVk7XG4gICAgcHVibGljIHJlYWRvbmx5IEhPVVJTX0RJVklTSUJMRV9JTlRPX0RBWSA9IEhPVVJTX0RJVklTSUJMRV9JTlRPX0RBWTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgQ1JPTl9USU1FX1BFUklPRF9BUlJBWSA9IFtDcm9uVGltZVBlcmlvZC5BTSwgQ3JvblRpbWVQZXJpb2QuUE1dO1xuICAgIHB1YmxpYyByZWFkb25seSBMT0NBTF9USU1FX1pPTkVfT0ZGU0VUID0gTE9DQUxfVElNRV9aT05FX09GRlNFVDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgR01UX09GRlNFVFMgPSBHTVRfT0ZGU0VUUztcbiAgICBwdWJsaWMgcmVhZG9ubHkgY3JvbkVkaXRvclBlcmlvZCA9IENyb25FZGl0b3JQZXJpb2Q7XG5cbiAgICBwdWJsaWMgY3JvbkVkaXRvclBlcmlvZEFycmF5OiB7IHZhbHVlOiBDcm9uRWRpdG9yUGVyaW9kIHwgJ2FkdmFuY2VkJzsgbGFiZWw6IHN0cmluZyB9W107XG4gICAgcHVibGljIHZpc2libGVTdHJpbmc6IHN0cmluZztcbiAgICBwdWJsaWMgdmFsdWVPYmplY3Q6IENyb25FZGl0b3I7XG4gICAgcHVibGljIGNyb25Nb2RlbDogSUNyb25FZGl0b3I7XG4gICAgcHVibGljIGlzQWR2YW5jZWRNb2RlID0gZmFsc2U7XG4gICAgcHVibGljIGFkdmFuY2VkQ3JvbiA9ICcnO1xuICAgIHB1YmxpYyBhZHZhbmNlZEVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZVN0cmluZyA9ICcnO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZU9iamVjdC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnZpc2libGVTdHJpbmcgPSB0aGlzLnZhbHVlT2JqZWN0LmdldFJlYWRhYmxlU3RyaW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmZsYXRNb2RlICYmICF0aGlzLmNyb25Nb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5jcm9uTW9kZWwgPSB0aGlzLnZhbHVlT2JqZWN0LnZhbHVlT2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9iamVjdC52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZU9iamVjdCA9IG5ldyBDcm9uRWRpdG9yKG51bGwsIHRoaXMuZmlzY2FsWWVhclN0YXJ0KTtcbiAgICAgICAgdGhpcy52YWx1ZU9iamVjdC5ldmVyeSA9IHRoaXMuYWxsb3dlZFBlcmlvZHNbdGhpcy5hbGxvd2VkUGVyaW9kcy5sZW5ndGggLSAxXSA/PyBDcm9uRWRpdG9yUGVyaW9kLllFQVI7XG4gICAgICAgIHRoaXMuY3Jvbk1vZGVsID0gdGhpcy52YWx1ZU9iamVjdC52YWx1ZU9iamVjdDtcbiAgICAgICAgdGhpcy5jcm9uRWRpdG9yUGVyaW9kQXJyYXkgPSB0aGlzLmFsbG93ZWRQZXJpb2RzLm1hcCgocGVyaW9kKSA9PiAoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBwZXJpb2QsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGNhcGl0YWxpemUoZ2V0Q3JvblR5cGVBc1BlcmlvZExhYmVsKHBlcmlvZCkpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICBpZiAodGhpcy5hbGxvd0FkdmFuY2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNyb25FZGl0b3JQZXJpb2RBcnJheS5wdXNoKHsgdmFsdWU6ICdhZHZhbmNlZCcsIGxhYmVsOiAnQWR2YW5jZWQnIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuZmxhdE1vZGUgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY3Jvbk1vZGVsID0gdGhpcy52YWx1ZU9iamVjdC52YWx1ZU9iamVjdDtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZVN0cmluZyA9IHRoaXMudmFsdWVPYmplY3QuZ2V0UmVhZGFibGVTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBZHZhbmNlZE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBZHZhbmNlZENyb24oKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5hZHZhbmNlZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlU3RyaW5nID0gdGhpcy5hZHZhbmNlZENyb247XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmFkdmFuY2VkQ3Jvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlT2JqZWN0LnZhbHVlT2JqZWN0ID0gdGhpcy5jcm9uTW9kZWw7XG4gICAgICAgIHRoaXMudmlzaWJsZVN0cmluZyA9IHRoaXMudmFsdWVPYmplY3QuZ2V0UmVhZGFibGVTdHJpbmcoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZU9iamVjdC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5Qb3BvdmVyKCkge1xuICAgICAgICB0aGlzLmNyb25Nb2RlbCA9IHRoaXMudmFsdWVPYmplY3QudmFsdWVPYmplY3Q7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXZlcnlDaGFuZ2UoJGV2ZW50OiBDcm9uRWRpdG9yUGVyaW9kIHwgJ2FkdmFuY2VkJykge1xuICAgICAgICBpZiAoJGV2ZW50ID09PSAnYWR2YW5jZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmlzQWR2YW5jZWRNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZWRDcm9uID0gJyc7XG4gICAgICAgICAgICB0aGlzLmFkdmFuY2VkRXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNBZHZhbmNlZE1vZGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZHZhbmNlZEVycm9yID0gbnVsbDtcbiAgICAgICAgY29uc3QgdGVtcFZhbHVlT2JqZWN0ID0gbmV3IENyb25FZGl0b3IoXG4gICAgICAgICAgICBDcm9uRWRpdG9yRGVmYXVsdENvbmZpZ0J5UGVyaW9kWyRldmVudF0odGhpcy5maXNjYWxZZWFyU3RhcnQpLFxuICAgICAgICAgICAgdGhpcy5maXNjYWxZZWFyU3RhcnQsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3Jvbk1vZGVsID0gdGVtcFZhbHVlT2JqZWN0LnZhbHVlT2JqZWN0O1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGltZVBpY2tlckNoYW5nZSh0aW1lOiBUaW1lcGlja2VyTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jcm9uTW9kZWwuaG91ciA9IHRpbWUuaG91cjtcbiAgICAgICAgdGhpcy5jcm9uTW9kZWwubWludXRlID0gdGltZS5taW51dGU7XG4gICAgICAgIHRoaXMuY3Jvbk1vZGVsLnRpbWVQZXJpb2QgPSB0aW1lLnRpbWVQZXJpb2QgYXMgQ3JvblRpbWVQZXJpb2Q7XG4gICAgICAgIHRoaXMuY3Jvbk1vZGVsLnRpbWVab25lID0gdGltZS50aW1lWm9uZTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmxhdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25BZHZhbmNlZENoYW5nZSgpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUFkdmFuY2VkQ3JvbigpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUFkdmFuY2VkQ3JvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlQ3Jvbikge1xuICAgICAgICAgICAgdGhpcy5hZHZhbmNlZEVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLnZhbGlkYXRlQ3Jvbih0aGlzLmFkdmFuY2VkQ3Jvbik7XG4gICAgICAgIHRoaXMuYWR2YW5jZWRFcnJvciA9IHZhbGlkYXRpb24udmFsaWQgPyBudWxsIDogdmFsaWRhdGlvbi5lcnJvcl9tZXNzYWdlO1xuICAgIH1cbn1cbiIsIjxkci1pbnB1dFxuICAgIFtpZF09XCJpZFwiXG4gICAgZGF0YS1hbmFseXRpY3M9XCJkci1jcm9uLWZpZWxkX2lucHV0LW1haW5cIlxuICAgIGFyaWEtbGFiZWw9XCJTY2hlZHVsZVwiXG4gICAgKm5nSWY9XCIhZmxhdE1vZGU7IGVsc2UgY3JvbkNvbmZpZ3VyYXRpb25cIlxuICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0Li4uXCJcbiAgICAoY2xpY2spPVwiIWRpc2FibGVkID8gb3BlblBvcG92ZXIoKSA6IG51bGxcIlxuICAgIFsobmdNb2RlbCldPVwidmlzaWJsZVN0cmluZ1wiXG4gICAgW2RyUG9wb3Zlcl09XCIhZGlzYWJsZWQgPyByZWN1cnJlbmNlUG9wb3ZlciA6IG51bGxcIlxuICAgIFtkclBvcG92ZXJQb3NpdGlvbl09XCJwb3BvdmVyUG9zaXRpb25cIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3JlYWRvbmx5XT1cInRydWVcIj5cbiAgICA8aSBjbGFzcz1cImRyLWljb24tZGF0ZVwiIHByZWZpeEljb24+PC9pPlxuICAgIDxpIGNsYXNzPVwiZHItaWNvbi1hcnJvdy1kb3duXCIgc3VmZml4SWNvbj48L2k+XG48L2RyLWlucHV0PlxuXG48bmctdGVtcGxhdGUgI3JlY3VycmVuY2VQb3BvdmVyIGxldC1jbG9zZVBvcG92ZXI9XCJjbG9zZVBvcG92ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmVjdXJyZW5jZS1wb3B1cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVjdXJyZW5jZS1wb3B1cF9fYm9keVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjcm9uQ29uZmlndXJhdGlvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY3VycmVuY2UtcG9wdXBfX2Zvb3RlclwiPlxuICAgICAgICAgICAgPGRyLWJ1dHRvbiBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfYnV0dG9uLWNhbmNlbFwiIHRoZW1lPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNsb3NlUG9wb3ZlcigpXCI+Q2FuY2VsPC9kci1idXR0b24+XG4gICAgICAgICAgICA8ZHItYnV0dG9uIGRhdGEtYW5hbHl0aWNzPVwiZHItY3Jvbi1maWVsZF9idXR0b24tc2F2ZVwiIChjbGljayk9XCJ1cGRhdGUoKTsgY2xvc2VQb3BvdmVyKClcIj5TYXZlPC9kci1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjcm9uQ29uZmlndXJhdGlvbj5cbiAgICA8bmctdGVtcGxhdGUgI3F1YXJ0ZXJDb25maWc+XG4gICAgICAgIDxzcGFuPlJlcGVhdCBldmVyeSBxdWFydGVyIG9uPC9zcGFuPlxuICAgICAgICA8ZHItc2VsZWN0XG4gICAgICAgICAgICBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfc2VsZWN0LXF1YXJ0ZXItbW9udGhcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlF1YXJ0ZXIgbW9udGhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjcm9uTW9kZWwubW9udGhcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoKVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwiTU9OVEhfT0ZfUVVBUlRFUl9BUlJBWVwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cIm1vbnRoLW9mLXF1YXJ0ZXJcIj48L2RyLXNlbGVjdD5cbiAgICAgICAgPHNwYW4+bW9udGggb2YgdGhlIHF1YXJ0ZXI8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjaG91ckNvbmZpZz5cbiAgICAgICAgPHNwYW4+UmVwZWF0IGV2ZXJ5PC9zcGFuPlxuICAgICAgICA8ZHItc2VsZWN0XG4gICAgICAgICAgICBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfc2VsZWN0LWV2ZXJ5LXgtaG91cnNcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkhvdXIgaW50ZXJ2YWxcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjcm9uTW9kZWwuZXZlcnlYSG91cnNcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoKVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwiSE9VUlNfRElWSVNJQkxFX0lOVE9fREFZXCJcbiAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF5LW9mLW1vbnRoXCI+XG4gICAgICAgIDwvZHItc2VsZWN0PlxuICAgICAgICA8c3Bhbj5ob3VyKHMpPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI3dlZWtDb25maWc+XG4gICAgICAgIDxzcGFuPlJlcGVhdCBldmVyeTwvc3Bhbj5cbiAgICAgICAgPGRyLXNlbGVjdFxuICAgICAgICAgICAgZGF0YS1hbmFseXRpY3M9XCJkci1jcm9uLWZpZWxkX3NlbGVjdC1kYXktb2Ytd2Vla1wiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGF5IG9mIHdlZWtcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjcm9uTW9kZWwuZGF5T2ZXZWVrXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKClcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cIkRBWV9PRl9XRUVLX0FSUkFZXCJcbiAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF5LW9mLXdlZWtcIj5cbiAgICAgICAgPC9kci1zZWxlY3Q+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZGF5T2ZNb250aFNlbGVjdG9yPlxuICAgICAgICA8ZHItc2VsZWN0XG4gICAgICAgICAgICBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfc2VsZWN0LWRheS1vZi1tb250aFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGF5IG9mIG1vbnRoXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3Jvbk1vZGVsLmRheU9mTW9udGhcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoKVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwiREFZX09GX01PTlRIX0FSUkFZXCJcbiAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgYmluZFZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJkYXktb2YtbW9udGhcIj5cbiAgICAgICAgPC9kci1zZWxlY3Q+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjeWVhck1vbnRoU2VsZWN0b3I+XG4gICAgICAgIDxzcGFuPlJlcGVhdCBldmVyeTwvc3Bhbj5cbiAgICAgICAgPGRyLXNlbGVjdFxuICAgICAgICAgICAgZGF0YS1hbmFseXRpY3M9XCJkci1jcm9uLWZpZWxkX3NlbGVjdC1tb250aFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW9udGhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjcm9uTW9kZWwubW9udGhcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoKVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwiTU9OVEhfT0ZfWUVBUl9BUlJBWVwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cIm1vbnRoLW9mLXllYXJcIj5cbiAgICAgICAgPC9kci1zZWxlY3Q+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxkaXYgY2xhc3M9XCJjcm9uLWNvbmZpZ3VyYXRpb25cIiBbY2xhc3MuY3Jvbi1jb25maWd1cmF0aW9uLS1tdWx0aS1yb3ddPVwibXVsdGlSb3dNb2RlXCI+XG4gICAgICAgIDxkci1yYWRpby1ncm91cFxuICAgICAgICAgICAgZGF0YS1hbmFseXRpY3M9XCJkci1jcm9uLWZpZWxkX3JhZGlvLWdyb3VwLXBlcmlvZFwiXG4gICAgICAgICAgICAqbmdJZj1cIiFoaWRlUGVyaW9kU2VsZWN0b3JcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcm9uLWNvbmZpZ3VyYXRpb25fX2V2ZXJ5XCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImlzQWR2YW5jZWRNb2RlID8gJ2FkdmFuY2VkJyA6IGNyb25Nb2RlbC5ldmVyeVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkV2ZXJ5Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgbmFtZT1cImV2ZXJ5XCI+XG4gICAgICAgICAgICA8ZHItcmFkaW8tYnV0dG9uXG4gICAgICAgICAgICAgICAgZGF0YS1hbmFseXRpY3M9XCJkci1jcm9uLWZpZWxkX3JhZGlvLWJ1dHRvbi0wXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNyb25FZGl0b3JQZXJpb2RBcnJheVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hbmFseXRpY3NdPVwiJ2RyLWNyb24tZmllbGRfcmFkaW8tYnV0dG9uLScgKyBvcHRpb24udmFsdWVcIj5cbiAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvZHItcmFkaW8tYnV0dG9uPlxuICAgICAgICA8L2RyLXJhZGlvLWdyb3VwPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNBZHZhbmNlZE1vZGVcIiBjbGFzcz1cImNyb24tY29uZmlndXJhdGlvbl9fYWR2YW5jZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcm9uLWNvbmZpZ3VyYXRpb25fX2FkdmFuY2VkLW5vdGVcIj5cbiAgICAgICAgICAgICAgICBVc2UgY3JvbnRhYiB0byBzZXQgY3VzdG9tIHRpbWUgaW50ZXJ2YWxzIGZvciBzeW5jIGZyZXF1ZW5jeSwgc3VjaCBhcyBldmVyeSB0d28gd2Vla3MgYXQgMTA6MDUuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcm9uLWNvbmZpZ3VyYXRpb25fX2FkdmFuY2VkLWxhYmVsXCI+RW50ZXIgeW91ciBjcm9uIGV4cHJlc3Npb246PC9kaXY+XG4gICAgICAgICAgICA8ZHItaW5wdXRcbiAgICAgICAgICAgICAgICBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfaW5wdXQtYWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWR2YW5jZWRDcm9uXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkFkdmFuY2VkQ2hhbmdlKClcIj5cbiAgICAgICAgICAgIDwvZHItaW5wdXQ+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWR2YW5jZWRFcnJvclwiIGNsYXNzPVwiY3Jvbi1jb25maWd1cmF0aW9uX19hZHZhbmNlZC1lcnJvclwiPnt7IGFkdmFuY2VkRXJyb3IgfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0FkdmFuY2VkTW9kZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm11bHRpUm93TW9kZTsgZWxzZSBzaW5nbGVSb3dNb2RlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyb24tY29uZmlndXJhdGlvbl9fc2VjdGlvbiBjcm9uLWNvbmZpZ3VyYXRpb25fX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNyb25Nb2RlbC5ldmVyeSA9PT0gY3JvbkVkaXRvclBlcmlvZC5RVUFSVEVSXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInF1YXJ0ZXJDb25maWdcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjcm9uTW9kZWwuZXZlcnkgPT09IGNyb25FZGl0b3JQZXJpb2QuREFZXCI+UmVwZWF0IGV2ZXJ5IGRheTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjcm9uTW9kZWwuZXZlcnkgPT09IGNyb25FZGl0b3JQZXJpb2QuSE9VUlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJob3VyQ29uZmlnXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3Jvbk1vZGVsLmV2ZXJ5ID09PSBjcm9uRWRpdG9yUGVyaW9kLldFRUtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwid2Vla0NvbmZpZ1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3Jvbk1vZGVsLmV2ZXJ5ID09PSBjcm9uRWRpdG9yUGVyaW9kLllFQVJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwieWVhck1vbnRoU2VsZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGF5T2ZNb250aFNlbGVjdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjcm9uTW9kZWwuZXZlcnkgPT09IGNyb25FZGl0b3JQZXJpb2QuTU9OVEhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlJlcGVhdCBvbjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGF5T2ZNb250aFNlbGVjdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5kYXkgb2YgZXZlcnkgbW9udGg8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNyb24tY29uZmlndXJhdGlvbl9fc2VjdGlvbiBjcm9uLWNvbmZpZ3VyYXRpb25fX3Jvd1wiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3Jvbk1vZGVsLmV2ZXJ5ID09PSBjcm9uRWRpdG9yUGVyaW9kLlFVQVJURVJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+b248L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGF5T2ZNb250aFNlbGVjdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPmRheSBvZiB0aGUgbW9udGg8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Jvbi1jb25maWd1cmF0aW9uX19zZWN0aW9uIGNyb24tY29uZmlndXJhdGlvbl9fcm93IGNyb24tY29uZmlndXJhdGlvbl9fcm93LS10aW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltZS1wcmVmaXhcIj5hdDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRyLXRpbWUtcGlja2VyIFtuZ01vZGVsXT1cImNyb25Nb2RlbFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uVGltZVBpY2tlckNoYW5nZSgkZXZlbnQpXCI+IDwvZHItdGltZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVSb3dNb2RlPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjcm9uTW9kZWwuZXZlcnkgPT09IGNyb25FZGl0b3JQZXJpb2QuUVVBUlRFUlwiIGNsYXNzPVwiY3Jvbi1jb25maWd1cmF0aW9uX19zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicXVhcnRlckNvbmZpZ1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcm9uLWNvbmZpZ3VyYXRpb25fX3NlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjcm9uTW9kZWwuZXZlcnkgPT09IGNyb25FZGl0b3JQZXJpb2QuREFZXCI+IFJlcGVhdCBldmVyeSBkYXkgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNyb25Nb2RlbC5ldmVyeSA9PT0gY3JvbkVkaXRvclBlcmlvZC5IT1VSXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhvdXJDb25maWdcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjcm9uTW9kZWwuZXZlcnkgPT09IGNyb25FZGl0b3JQZXJpb2QuV0VFS1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ3ZWVrQ29uZmlnXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9uTW9kZWwuZXZlcnkgIT09IGNyb25FZGl0b3JQZXJpb2QuV0VFSyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb25Nb2RlbC5ldmVyeSAhPT0gY3JvbkVkaXRvclBlcmlvZC5IT1VSICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jvbk1vZGVsLmV2ZXJ5ICE9PSBjcm9uRWRpdG9yUGVyaW9kLkRBWVxuICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNyb25Nb2RlbC5ldmVyeSA9PT0gY3JvbkVkaXRvclBlcmlvZC5NT05USFwiPlJlcGVhdCBvbiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNyb25Nb2RlbC5ldmVyeSA9PT0gY3JvbkVkaXRvclBlcmlvZC5RVUFSVEVSXCI+b24gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3Jvbk1vZGVsLmV2ZXJ5ID09PSBjcm9uRWRpdG9yUGVyaW9kLllFQVJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInllYXJNb250aFNlbGVjdG9yXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGF5T2ZNb250aFNlbGVjdG9yXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3Jvbk1vZGVsLmV2ZXJ5ID09PSBjcm9uRWRpdG9yUGVyaW9kLk1PTlRIXCI+ZGF5IG9mIGV2ZXJ5IG1vbnRoIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3Jvbk1vZGVsLmV2ZXJ5ID09PSBjcm9uRWRpdG9yUGVyaW9kLlFVQVJURVJcIj5kYXkgb2YgdGhlIG1vbnRoIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltZS1wcmVmaXhcIj5hdDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRyLWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfaW5wdXQtaG91clwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiSG91clwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNyb25Nb2RlbC5ob3VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hc2tdPVwiJzAwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaG91cnMtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kci1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLWRvdHNcIj46PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8ZHItaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYW5hbHl0aWNzPVwiZHItY3Jvbi1maWVsZF9pbnB1dC1taW51dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNyb25Nb2RlbC5taW51dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWFza109XCInMDAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cIjU5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtaW51dGVzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZHItaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDxkci1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYW5hbHl0aWNzPVwiZHItY3Jvbi1maWVsZF9zZWxlY3QtdGltZS1wZXJpb2RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlRpbWUgcGVyaW9kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3Jvbk1vZGVsLnRpbWVQZXJpb2RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiQ1JPTl9USU1FX1BFUklPRF9BUlJBWVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRpbWUtcGVyaW9kLXNlbGVjdG9yXCI+PC9kci1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxkci1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYW5hbHl0aWNzPVwiZHItY3Jvbi1maWVsZF9zZWxlY3QtdGltZXpvbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlRpbWUgem9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNyb25Nb2RlbC50aW1lWm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJHTVRfT0ZGU0VUU1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dFZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdtdC1vZmZzZXRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgTE9DQUxfVElNRV9aT05FX09GRlNFVCAhPT0gY3Jvbk1vZGVsLnRpbWVab25lID8gaXRlbS5sYWJlbCA6ICdMb2NhbCBUaW1lJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kci1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
630
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItY3Jvbi1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jcm9uLWZpZWxkL2RyLWNyb24tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItY3Jvbi1maWVsZC9kci1jcm9uLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDaEosT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxjQUFjLEVBQ2QsV0FBVyxFQUNYLHNCQUFzQixFQUN0QixtQkFBbUIsR0FFdEIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUNILGVBQWUsRUFDZixVQUFVLEVBQ1YsK0JBQStCLEVBQy9CLGdCQUFnQixFQUNoQixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBRXhCLHNCQUFzQixFQUN0QixtQkFBbUIsR0FDdEIsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7O0lDM0J0RixtQ0FXc0I7SUFMbEIsd0tBQVMsa0NB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VzttQkFBQyxTQUFTO1lBSWYsUUFBUTtrQkFGZCxLQUFLOztrQkFDTCxXQUFXO21CQUFDLGdCQUFnQjtZQUdwQixjQUFjO2tCQUF0QixLQUFLO1lBQ0csZUFBZTtrQkFBdkIsS0FBSztZQUNHLGVBQWU7a0JBQXZCLEtBQUs7WUFDa0Msa0JBQWtCO2tCQUF6RCxLQUFLO21CQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBQ0UsUUFBUTtrQkFBL0MsS0FBSzttQkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQUNFLFlBQVk7a0JBQW5ELEtBQUs7bUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUFDRSxhQUFhO2tCQUFwRCxLQUFLO21CQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBQzdCLFlBQVk7a0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBib29sZWFuQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIERySW5wdXRzTW9kdWxlLFxuICAgIEdNVF9PRkZTRVRTLFxuICAgIExPQ0FMX1RJTUVfWk9ORV9PRkZTRVQsXG4gICAgVGltZVBpY2tlckNvbXBvbmVudCxcbiAgICBUaW1lcGlja2VyTW9kZWwsXG59IGZyb20gJy4uL2RyLWlucHV0cyc7XG5pbXBvcnQge1xuICAgIEFMTE9XRURfUEVSSU9EUyxcbiAgICBDcm9uRWRpdG9yLFxuICAgIENyb25FZGl0b3JEZWZhdWx0Q29uZmlnQnlQZXJpb2QsXG4gICAgQ3JvbkVkaXRvclBlcmlvZCxcbiAgICBDcm9uVGltZVBlcmlvZCxcbiAgICBEQVlfT0ZfTU9OVEhfQVJSQVksXG4gICAgREFZX09GX1dFRUtfQVJSQVksXG4gICAgZ2V0Q3JvblR5cGVBc1BlcmlvZExhYmVsLFxuICAgIEhPVVJTX0RJVklTSUJMRV9JTlRPX0RBWSxcbiAgICBJQ3JvbkVkaXRvcixcbiAgICBNT05USF9PRl9RVUFSVEVSX0FSUkFZLFxuICAgIE1PTlRIX09GX1lFQVJfQVJSQVksXG59IGZyb20gJy4vZHItY3Jvbi1maWVsZC5lZGl0b3InO1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLi9tb2RlbHMvcG9zaXRpb24nO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBEclRvb2x0aXBNb2R1bGUgfSBmcm9tICcuLi9kci10b29sdGlwL2RyLXRvb2x0aXAubW9kdWxlJztcbmltcG9ydCB7IERyUG9wb3Zlck1vZHVsZSB9IGZyb20gJy4uL2RyLXBvcG92ZXIvZHItcG9wb3Zlci5tb2R1bGUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci1jcm9uLWZpZWxkJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERyQ3JvbkZpZWxkQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIERyVG9vbHRpcE1vZHVsZSwgRHJJbnB1dHNNb2R1bGUsIERyUG9wb3Zlck1vZHVsZSwgVGltZVBpY2tlckNvbXBvbmVudF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RyLWNyb24tZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RyLWNyb24tZmllbGQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRHJDcm9uRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBASW5wdXQoKSBpZD86IHN0cmluZztcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBob3N0SWQgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJylcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGFsbG93ZWRQZXJpb2RzOiBDcm9uRWRpdG9yUGVyaW9kW10gPSBBTExPV0VEX1BFUklPRFM7XG4gICAgQElucHV0KCkgZmlzY2FsWWVhclN0YXJ0OiBudW1iZXIgPSAxO1xuICAgIEBJbnB1dCgpIHBvcG92ZXJQb3NpdGlvbjogUG9zaXRpb24gPSAnYm90dG9tLWxlZnQnO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoaWRlUGVyaW9kU2VsZWN0b3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmxhdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbXVsdGlSb3dNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFsbG93QWR2YW5jZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSB2YWxpZGF0ZUNyb24/OiAoY3Jvbjogc3RyaW5nKSA9PiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcl9tZXNzYWdlPzogc3RyaW5nIH07XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgREFZX09GX01PTlRIX0FSUkFZID0gREFZX09GX01PTlRIX0FSUkFZO1xuICAgIHB1YmxpYyByZWFkb25seSBNT05USF9PRl9RVUFSVEVSX0FSUkFZID0gTU9OVEhfT0ZfUVVBUlRFUl9BUlJBWTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgTU9OVEhfT0ZfWUVBUl9BUlJBWSA9IE1PTlRIX09GX1lFQVJfQVJSQVk7XG4gICAgcHVibGljIHJlYWRvbmx5IERBWV9PRl9XRUVLX0FSUkFZID0gREFZX09GX1dFRUtfQVJSQVk7XG4gICAgcHVibGljIHJlYWRvbmx5IEhPVVJTX0RJVklTSUJMRV9JTlRPX0RBWSA9IEhPVVJTX0RJVklTSUJMRV9JTlRPX0RBWTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgQ1JPTl9USU1FX1BFUklPRF9BUlJBWSA9IFtDcm9uVGltZVBlcmlvZC5BTSwgQ3JvblRpbWVQZXJpb2QuUE1dO1xuICAgIHB1YmxpYyByZWFkb25seSBMT0NBTF9USU1FX1pPTkVfT0ZGU0VUID0gTE9DQUxfVElNRV9aT05FX09GRlNFVDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgR01UX09GRlNFVFMgPSBHTVRfT0ZGU0VUUztcbiAgICBwdWJsaWMgcmVhZG9ubHkgY3JvbkVkaXRvclBlcmlvZCA9IENyb25FZGl0b3JQZXJpb2Q7XG5cbiAgICBwdWJsaWMgY3JvbkVkaXRvclBlcmlvZEFycmF5OiB7IHZhbHVlOiBDcm9uRWRpdG9yUGVyaW9kIHwgJ2FkdmFuY2VkJzsgbGFiZWw6IHN0cmluZyB9W107XG4gICAgcHVibGljIHZpc2libGVTdHJpbmc6IHN0cmluZztcbiAgICBwdWJsaWMgdmFsdWVPYmplY3Q6IENyb25FZGl0b3I7XG4gICAgcHVibGljIGNyb25Nb2RlbDogSUNyb25FZGl0b3I7XG4gICAgcHVibGljIGlzQWR2YW5jZWRNb2RlID0gZmFsc2U7XG4gICAgcHVibGljIGFkdmFuY2VkQ3JvbiA9ICcnO1xuICAgIHB1YmxpYyBhZHZhbmNlZEVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZVN0cmluZyA9ICcnO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZU9iamVjdC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnZpc2libGVTdHJpbmcgPSB0aGlzLnZhbHVlT2JqZWN0LmdldFJlYWRhYmxlU3RyaW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmZsYXRNb2RlICYmICF0aGlzLmNyb25Nb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5jcm9uTW9kZWwgPSB0aGlzLnZhbHVlT2JqZWN0LnZhbHVlT2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9iamVjdC52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZU9iamVjdCA9IG5ldyBDcm9uRWRpdG9yKG51bGwsIHRoaXMuZmlzY2FsWWVhclN0YXJ0KTtcbiAgICAgICAgdGhpcy52YWx1ZU9iamVjdC5ldmVyeSA9IHRoaXMuYWxsb3dlZFBlcmlvZHNbdGhpcy5hbGxvd2VkUGVyaW9kcy5sZW5ndGggLSAxXSA/PyBDcm9uRWRpdG9yUGVyaW9kLllFQVI7XG4gICAgICAgIHRoaXMuY3Jvbk1vZGVsID0gdGhpcy52YWx1ZU9iamVjdC52YWx1ZU9iamVjdDtcbiAgICAgICAgdGhpcy5jcm9uRWRpdG9yUGVyaW9kQXJyYXkgPSB0aGlzLmFsbG93ZWRQZXJpb2RzLm1hcCgocGVyaW9kKSA9PiAoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBwZXJpb2QsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGNhcGl0YWxpemUoZ2V0Q3JvblR5cGVBc1BlcmlvZExhYmVsKHBlcmlvZCkpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICBpZiAodGhpcy5hbGxvd0FkdmFuY2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNyb25FZGl0b3JQZXJpb2RBcnJheS5wdXNoKHsgdmFsdWU6ICdhZHZhbmNlZCcsIGxhYmVsOiAnQWR2YW5jZWQnIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuZmxhdE1vZGUgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY3Jvbk1vZGVsID0gdGhpcy52YWx1ZU9iamVjdC52YWx1ZU9iamVjdDtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZVN0cmluZyA9IHRoaXMudmFsdWVPYmplY3QuZ2V0UmVhZGFibGVTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBZHZhbmNlZE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBZHZhbmNlZENyb24oKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5hZHZhbmNlZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlU3RyaW5nID0gdGhpcy5hZHZhbmNlZENyb247XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmFkdmFuY2VkQ3Jvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlT2JqZWN0LnZhbHVlT2JqZWN0ID0gdGhpcy5jcm9uTW9kZWw7XG4gICAgICAgIHRoaXMudmlzaWJsZVN0cmluZyA9IHRoaXMudmFsdWVPYmplY3QuZ2V0UmVhZGFibGVTdHJpbmcoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZU9iamVjdC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5Qb3BvdmVyKCkge1xuICAgICAgICB0aGlzLmNyb25Nb2RlbCA9IHRoaXMudmFsdWVPYmplY3QudmFsdWVPYmplY3Q7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXZlcnlDaGFuZ2UoJGV2ZW50OiBDcm9uRWRpdG9yUGVyaW9kIHwgJ2FkdmFuY2VkJykge1xuICAgICAgICBpZiAoJGV2ZW50ID09PSAnYWR2YW5jZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmlzQWR2YW5jZWRNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZWRDcm9uID0gJyc7XG4gICAgICAgICAgICB0aGlzLmFkdmFuY2VkRXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNBZHZhbmNlZE1vZGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZHZhbmNlZEVycm9yID0gbnVsbDtcbiAgICAgICAgY29uc3QgdGVtcFZhbHVlT2JqZWN0ID0gbmV3IENyb25FZGl0b3IoXG4gICAgICAgICAgICBDcm9uRWRpdG9yRGVmYXVsdENvbmZpZ0J5UGVyaW9kWyRldmVudF0odGhpcy5maXNjYWxZZWFyU3RhcnQpLFxuICAgICAgICAgICAgdGhpcy5maXNjYWxZZWFyU3RhcnQsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3Jvbk1vZGVsID0gdGVtcFZhbHVlT2JqZWN0LnZhbHVlT2JqZWN0O1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGltZVBpY2tlckNoYW5nZSh0aW1lOiBUaW1lcGlja2VyTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jcm9uTW9kZWwuaG91ciA9IHRpbWUuaG91cjtcbiAgICAgICAgdGhpcy5jcm9uTW9kZWwubWludXRlID0gdGltZS5taW51dGU7XG4gICAgICAgIHRoaXMuY3Jvbk1vZGVsLnRpbWVQZXJpb2QgPSB0aW1lLnRpbWVQZXJpb2QgYXMgQ3JvblRpbWVQZXJpb2Q7XG4gICAgICAgIHRoaXMuY3Jvbk1vZGVsLnRpbWVab25lID0gdGltZS50aW1lWm9uZTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmxhdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25BZHZhbmNlZENoYW5nZSgpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUFkdmFuY2VkQ3JvbigpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUFkdmFuY2VkQ3JvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlQ3Jvbikge1xuICAgICAgICAgICAgdGhpcy5hZHZhbmNlZEVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLnZhbGlkYXRlQ3Jvbih0aGlzLmFkdmFuY2VkQ3Jvbik7XG4gICAgICAgIHRoaXMuYWR2YW5jZWRFcnJvciA9IHZhbGlkYXRpb24udmFsaWQgPyBudWxsIDogdmFsaWRhdGlvbi5lcnJvcl9tZXNzYWdlO1xuICAgIH1cbn1cbiIsIjxkci1pbnB1dFxuICAgIFtpZF09XCJpZFwiXG4gICAgZGF0YS1hbmFseXRpY3M9XCJkci1jcm9uLWZpZWxkX2lucHV0LW1haW5cIlxuICAgIGFyaWEtbGFiZWw9XCJTY2hlZHVsZVwiXG4gICAgKm5nSWY9XCIhZmxhdE1vZGU7IGVsc2UgY3JvbkNvbmZpZ3VyYXRpb25cIlxuICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0Li4uXCJcbiAgICAoY2xpY2spPVwiIWRpc2FibGVkID8gb3BlblBvcG92ZXIoKSA6IG51bGxcIlxuICAgIFsobmdNb2RlbCldPVwidmlzaWJsZVN0cmluZ1wiXG4gICAgW2RyUG9wb3Zlcl09XCIhZGlzYWJsZWQgPyByZWN1cnJlbmNlUG9wb3ZlciA6IG51bGxcIlxuICAgIFtkclBvcG92ZXJQb3NpdGlvbl09XCJwb3BvdmVyUG9zaXRpb25cIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3JlYWRvbmx5XT1cInRydWVcIj5cbiAgICA8aSBjbGFzcz1cImRyLWljb24tZGF0ZVwiIHByZWZpeEljb24+PC9pPlxuICAgIDxpIGNsYXNzPVwiZHItaWNvbi1hcnJvdy1kb3duXCIgc3VmZml4SWNvbj48L2k+XG48L2RyLWlucHV0PlxuXG48bmctdGVtcGxhdGUgI3JlY3VycmVuY2VQb3BvdmVyIGxldC1jbG9zZVBvcG92ZXI9XCJjbG9zZVBvcG92ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmVjdXJyZW5jZS1wb3B1cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVjdXJyZW5jZS1wb3B1cF9fYm9keVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjcm9uQ29uZmlndXJhdGlvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlY3VycmVuY2UtcG9wdXBfX2Zvb3RlclwiPlxuICAgICAgICAgICAgPGRyLWJ1dHRvbiBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfYnV0dG9uLWNhbmNlbFwiIHRoZW1lPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNsb3NlUG9wb3ZlcigpXCI+Q2FuY2VsPC9kci1idXR0b24+XG4gICAgICAgICAgICA8ZHItYnV0dG9uIGRhdGEtYW5hbHl0aWNzPVwiZHItY3Jvbi1maWVsZF9idXR0b24tc2F2ZVwiIChjbGljayk9XCJ1cGRhdGUoKTsgY2xvc2VQb3BvdmVyKClcIj5TYXZlPC9kci1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjcm9uQ29uZmlndXJhdGlvbj5cbiAgICA8bmctdGVtcGxhdGUgI3F1YXJ0ZXJDb25maWc+XG4gICAgICAgIDxzcGFuPlJlcGVhdCBldmVyeSBxdWFydGVyIG9uPC9zcGFuPlxuICAgICAgICA8ZHItc2VsZWN0XG4gICAgICAgICAgICBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfc2VsZWN0LXF1YXJ0ZXItbW9udGhcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlF1YXJ0ZXIgbW9udGhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjcm9uTW9kZWwubW9udGhcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoKVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwiTU9OVEhfT0ZfUVVBUlRFUl9BUlJBWVwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cIm1vbnRoLW9mLXF1YXJ0ZXJcIj48L2RyLXNlbGVjdD5cbiAgICAgICAgPHNwYW4+bW9udGggb2YgdGhlIHF1YXJ0ZXI8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjaG91ckNvbmZpZz5cbiAgICAgICAgPHNwYW4+UmVwZWF0IGV2ZXJ5PC9zcGFuPlxuICAgICAgICA8ZHItc2VsZWN0XG4gICAgICAgICAgICBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfc2VsZWN0LWV2ZXJ5LXgtaG91cnNcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkhvdXIgaW50ZXJ2YWxcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjcm9uTW9kZWwuZXZlcnlYSG91cnNcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoKVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwiSE9VUlNfRElWSVNJQkxFX0lOVE9fREFZXCJcbiAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaG91ci1vZi1kYXlcIj5cbiAgICAgICAgPC9kci1zZWxlY3Q+XG4gICAgICAgIDxzcGFuPmhvdXIocyk8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjd2Vla0NvbmZpZz5cbiAgICAgICAgPHNwYW4+UmVwZWF0IGV2ZXJ5PC9zcGFuPlxuICAgICAgICA8ZHItc2VsZWN0XG4gICAgICAgICAgICBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfc2VsZWN0LWRheS1vZi13ZWVrXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEYXkgb2Ygd2Vla1wiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNyb25Nb2RlbC5kYXlPZldlZWtcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoKVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwiREFZX09GX1dFRUtfQVJSQVlcIlxuICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgYmluZFZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJkYXktb2Ytd2Vla1wiPlxuICAgICAgICA8L2RyLXNlbGVjdD5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNkYXlPZk1vbnRoU2VsZWN0b3I+XG4gICAgICAgIDxkci1zZWxlY3RcbiAgICAgICAgICAgIGRhdGEtYW5hbHl0aWNzPVwiZHItY3Jvbi1maWVsZF9zZWxlY3QtZGF5LW9mLW1vbnRoXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEYXkgb2YgbW9udGhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjcm9uTW9kZWwuZGF5T2ZNb250aFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgpXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJEQVlfT0ZfTU9OVEhfQVJSQVlcIlxuICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImRheS1vZi1tb250aFwiPlxuICAgICAgICA8L2RyLXNlbGVjdD5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICN5ZWFyTW9udGhTZWxlY3Rvcj5cbiAgICAgICAgPHNwYW4+UmVwZWF0IGV2ZXJ5PC9zcGFuPlxuICAgICAgICA8ZHItc2VsZWN0XG4gICAgICAgICAgICBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfc2VsZWN0LW1vbnRoXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJNb250aFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNyb25Nb2RlbC5tb250aFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgpXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJNT05USF9PRl9ZRUFSX0FSUkFZXCJcbiAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwibW9udGgtb2YteWVhclwiPlxuICAgICAgICA8L2RyLXNlbGVjdD5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPGRpdiBjbGFzcz1cImNyb24tY29uZmlndXJhdGlvblwiIFtjbGFzcy5jcm9uLWNvbmZpZ3VyYXRpb24tLW11bHRpLXJvd109XCJtdWx0aVJvd01vZGVcIj5cbiAgICAgICAgPGRyLXJhZGlvLWdyb3VwXG4gICAgICAgICAgICBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfcmFkaW8tZ3JvdXAtcGVyaW9kXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVQZXJpb2RTZWxlY3RvclwiXG4gICAgICAgICAgICBjbGFzcz1cImNyb24tY29uZmlndXJhdGlvbl9fZXZlcnlcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiaXNBZHZhbmNlZE1vZGUgPyAnYWR2YW5jZWQnIDogY3Jvbk1vZGVsLmV2ZXJ5XCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRXZlcnlDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBuYW1lPVwiZXZlcnlcIj5cbiAgICAgICAgICAgIDxkci1yYWRpby1idXR0b25cbiAgICAgICAgICAgICAgICBkYXRhLWFuYWx5dGljcz1cImRyLWNyb24tZmllbGRfcmFkaW8tYnV0dG9uLTBcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY3JvbkVkaXRvclBlcmlvZEFycmF5XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWFuYWx5dGljc109XCInZHItY3Jvbi1maWVsZF9yYWRpby1idXR0b24tJyArIG9wdGlvbi52YWx1ZVwiPlxuICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgPC9kci1yYWRpby1idXR0b24+XG4gICAgICAgIDwvZHItcmFkaW8tZ3JvdXA+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0FkdmFuY2VkTW9kZVwiIGNsYXNzPVwiY3Jvbi1jb25maWd1cmF0aW9uX19hZHZhbmNlZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyb24tY29uZmlndXJhdGlvbl9fYWR2YW5jZWQtbm90ZVwiPlxuICAgICAgICAgICAgICAgIFVzZSBjcm9udGFiIHRvIHNldCBjdXN0b20gdGltZSBpbnRlcnZhbHMgZm9yIHN5bmMgZnJlcXVlbmN5LCBzdWNoIGFzIGV2ZXJ5IHR3byB3ZWVrcyBhdCAxMDowNS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyb24tY29uZmlndXJhdGlvbl9fYWR2YW5jZWQtbGFiZWxcIj5FbnRlciB5b3VyIGNyb24gZXhwcmVzc2lvbjo8L2Rpdj5cbiAgICAgICAgICAgIDxkci1pbnB1dFxuICAgICAgICAgICAgICAgIGRhdGEtYW5hbHl0aWNzPVwiZHItY3Jvbi1maWVsZF9pbnB1dC1hZHZhbmNlZFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhZHZhbmNlZENyb25cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQWR2YW5jZWRDaGFuZ2UoKVwiPlxuICAgICAgICAgICAgPC9kci1pbnB1dD5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhZHZhbmNlZEVycm9yXCIgY2xhc3M9XCJjcm9uLWNvbmZpZ3VyYXRpb25fX2FkdmFuY2VkLWVycm9yXCI+e3sgYWR2YW5jZWRFcnJvciB9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQWR2YW5jZWRNb2RlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibXVsdGlSb3dNb2RlOyBlbHNlIHNpbmdsZVJvd01vZGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Jvbi1jb25maWd1cmF0aW9uX19zZWN0aW9uIGNyb24tY29uZmlndXJhdGlvbl9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3Jvbk1vZGVsLmV2ZXJ5ID09PSBjcm9uRWRpdG9yUGVyaW9kLlFVQVJURVJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicXVhcnRlckNvbmZpZ1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNyb25Nb2RlbC5ldmVyeSA9PT0gY3JvbkVkaXRvclBlcmlvZC5EQVlcIj5SZXBlYXQgZXZlcnkgZGF5PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNyb25Nb2RlbC5ldmVyeSA9PT0gY3JvbkVkaXRvclBlcmlvZC5IT1VSXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhvdXJDb25maWdcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjcm9uTW9kZWwuZXZlcnkgPT09IGNyb25FZGl0b3JQZXJpb2QuV0VFS1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ3ZWVrQ29uZmlnXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjcm9uTW9kZWwuZXZlcnkgPT09IGNyb25FZGl0b3JQZXJpb2QuWUVBUlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ5ZWFyTW9udGhTZWxlY3RvclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJkYXlPZk1vbnRoU2VsZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNyb25Nb2RlbC5ldmVyeSA9PT0gY3JvbkVkaXRvclBlcmlvZC5NT05USFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UmVwZWF0IG9uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJkYXlPZk1vbnRoU2VsZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPmRheSBvZiBldmVyeSBtb250aDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Jvbi1jb25maWd1cmF0aW9uX19zZWN0aW9uIGNyb24tY29uZmlndXJhdGlvbl9fcm93XCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjcm9uTW9kZWwuZXZlcnkgPT09IGNyb25FZGl0b3JQZXJpb2QuUVVBUlRFUlwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5vbjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJkYXlPZk1vbnRoU2VsZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+ZGF5IG9mIHRoZSBtb250aDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcm9uLWNvbmZpZ3VyYXRpb25fX3NlY3Rpb24gY3Jvbi1jb25maWd1cmF0aW9uX19yb3cgY3Jvbi1jb25maWd1cmF0aW9uX19yb3ctLXRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLXByZWZpeFwiPmF0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8ZHItdGltZS1waWNrZXIgW25nTW9kZWxdPVwiY3Jvbk1vZGVsXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25UaW1lUGlja2VyQ2hhbmdlKCRldmVudClcIj4gPC9kci10aW1lLXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZVJvd01vZGU+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNyb25Nb2RlbC5ldmVyeSA9PT0gY3JvbkVkaXRvclBlcmlvZC5RVUFSVEVSXCIgY2xhc3M9XCJjcm9uLWNvbmZpZ3VyYXRpb25fX3NlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJxdWFydGVyQ29uZmlnXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyb24tY29uZmlndXJhdGlvbl9fc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNyb25Nb2RlbC5ldmVyeSA9PT0gY3JvbkVkaXRvclBlcmlvZC5EQVlcIj4gUmVwZWF0IGV2ZXJ5IGRheSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3Jvbk1vZGVsLmV2ZXJ5ID09PSBjcm9uRWRpdG9yUGVyaW9kLkhPVVJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaG91ckNvbmZpZ1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNyb25Nb2RlbC5ldmVyeSA9PT0gY3JvbkVkaXRvclBlcmlvZC5XRUVLXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndlZWtDb25maWdcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb25Nb2RlbC5ldmVyeSAhPT0gY3JvbkVkaXRvclBlcmlvZC5XRUVLICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jvbk1vZGVsLmV2ZXJ5ICE9PSBjcm9uRWRpdG9yUGVyaW9kLkhPVVIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9uTW9kZWwuZXZlcnkgIT09IGNyb25FZGl0b3JQZXJpb2QuREFZXG4gICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3Jvbk1vZGVsLmV2ZXJ5ID09PSBjcm9uRWRpdG9yUGVyaW9kLk1PTlRIXCI+UmVwZWF0IG9uIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3Jvbk1vZGVsLmV2ZXJ5ID09PSBjcm9uRWRpdG9yUGVyaW9kLlFVQVJURVJcIj5vbiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjcm9uTW9kZWwuZXZlcnkgPT09IGNyb25FZGl0b3JQZXJpb2QuWUVBUlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwieWVhck1vbnRoU2VsZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJkYXlPZk1vbnRoU2VsZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjcm9uTW9kZWwuZXZlcnkgPT09IGNyb25FZGl0b3JQZXJpb2QuTU9OVEhcIj5kYXkgb2YgZXZlcnkgbW9udGggPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjcm9uTW9kZWwuZXZlcnkgPT09IGNyb25FZGl0b3JQZXJpb2QuUVVBUlRFUlwiPmRheSBvZiB0aGUgbW9udGggPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLXByZWZpeFwiPmF0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8ZHItaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYW5hbHl0aWNzPVwiZHItY3Jvbi1maWVsZF9pbnB1dC1ob3VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJIb3VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3Jvbk1vZGVsLmhvdXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWFza109XCInMDAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJob3Vycy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICA8L2RyLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWUtZG90c1wiPjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxkci1pbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hbmFseXRpY3M9XCJkci1jcm9uLWZpZWxkX2lucHV0LW1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTWludXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3Jvbk1vZGVsLm1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXNrXT1cIicwMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21pbl09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXhdPVwiNTlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pbnV0ZXMtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kci1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgPGRyLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hbmFseXRpY3M9XCJkci1jcm9uLWZpZWxkX3NlbGVjdC10aW1lLXBlcmlvZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiVGltZSBwZXJpb2RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjcm9uTW9kZWwudGltZVBlcmlvZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJDUk9OX1RJTUVfUEVSSU9EX0FSUkFZXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGltZS1wZXJpb2Qtc2VsZWN0b3JcIj48L2RyLXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPGRyLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hbmFseXRpY3M9XCJkci1jcm9uLWZpZWxkX3NlbGVjdC10aW1lem9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiVGltZSB6b25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3Jvbk1vZGVsLnRpbWVab25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIkdNVF9PRkZTRVRTXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0Vmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ210LW9mZnNldHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBMT0NBTF9USU1FX1pPTkVfT0ZGU0VUICE9PSBjcm9uTW9kZWwudGltZVpvbmUgPyBpdGVtLmxhYmVsIDogJ0xvY2FsIFRpbWUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2RyLXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -131,10 +131,13 @@ export const addOrdinalSuffix = (num) => {
|
|
|
131
131
|
const v = num % 100;
|
|
132
132
|
return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);
|
|
133
133
|
};
|
|
134
|
-
export const DAY_OF_MONTH_ARRAY =
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
134
|
+
export const DAY_OF_MONTH_ARRAY = [
|
|
135
|
+
...new Array(28).fill(null).map((_, i) => ({
|
|
136
|
+
label: addOrdinalSuffix(i + 1),
|
|
137
|
+
value: i + 1,
|
|
138
|
+
})),
|
|
139
|
+
{ label: 'the last', value: 'L' },
|
|
140
|
+
];
|
|
138
141
|
export class CronEditor {
|
|
139
142
|
set value(value) {
|
|
140
143
|
this.parseCronString(value);
|
|
@@ -203,7 +206,7 @@ export class CronEditor {
|
|
|
203
206
|
// Case 3: If `hour` is "*", set it to 0
|
|
204
207
|
hour = [0];
|
|
205
208
|
}
|
|
206
|
-
dayOfMonth = this.parseCronArray(dayOfMonth);
|
|
209
|
+
dayOfMonth = dayOfMonth === 'L' ? ['L'] : this.parseCronArray(dayOfMonth);
|
|
207
210
|
month = this.parseCronArray(month);
|
|
208
211
|
dayOfWeek = this.parseCronArray(dayOfWeek);
|
|
209
212
|
timeZone = timeZone ? Number(timeZone) : 0;
|
|
@@ -270,16 +273,24 @@ export class CronEditor {
|
|
|
270
273
|
getReadableString() {
|
|
271
274
|
let visibleString = 'Every ';
|
|
272
275
|
switch (this.every) {
|
|
273
|
-
case CronEditorPeriod.YEAR:
|
|
274
|
-
|
|
276
|
+
case CronEditorPeriod.YEAR: {
|
|
277
|
+
const monthLabel = MONTH_OF_YEAR_ARRAY[this.month - 1].label;
|
|
278
|
+
visibleString +=
|
|
279
|
+
this.dayOfMonth === 'L'
|
|
280
|
+
? `last day of ${monthLabel} `
|
|
281
|
+
: `${monthLabel} ${DAY_OF_MONTH_ARRAY[this.dayOfMonth - 1]?.label} `;
|
|
275
282
|
break;
|
|
276
|
-
|
|
283
|
+
}
|
|
284
|
+
case CronEditorPeriod.QUARTER: {
|
|
277
285
|
const month = MONTH_OF_QUARTER_ARRAY[this.month - 1].label;
|
|
278
|
-
|
|
279
|
-
|
|
286
|
+
visibleString +=
|
|
287
|
+
this.dayOfMonth === 'L'
|
|
288
|
+
? `quarter on the last day of the ${month} month of the quarter `
|
|
289
|
+
: `quarter on the ${month} month of the quarter on ${DAY_OF_MONTH_ARRAY[this.dayOfMonth - 1]?.label} day `;
|
|
280
290
|
break;
|
|
291
|
+
}
|
|
281
292
|
case CronEditorPeriod.MONTH:
|
|
282
|
-
visibleString += `month on day ${this.dayOfMonth} `;
|
|
293
|
+
visibleString += this.dayOfMonth === 'L' ? `month on the last day ` : `month on day ${this.dayOfMonth} `;
|
|
283
294
|
break;
|
|
284
295
|
case CronEditorPeriod.WEEK:
|
|
285
296
|
const dow = typeof this.dayOfWeek === 'number' ? this.dayOfWeek : 0;
|
|
@@ -300,4 +311,4 @@ export class CronEditor {
|
|
|
300
311
|
return visibleString;
|
|
301
312
|
}
|
|
302
313
|
}
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItY3Jvbi1maWVsZC5lZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jcm9uLWZpZWxkL2RyLWNyb24tZmllbGQuZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLE1BQU0sSUFBSSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQWNuRSxNQUFNLENBQU4sSUFBWSxnQkFPWDtBQVBELFdBQVksZ0JBQWdCO0lBQ3hCLGlDQUFhLENBQUE7SUFDYiwrQkFBVyxDQUFBO0lBQ1gsaUNBQWEsQ0FBQTtJQUNiLG1DQUFlLENBQUE7SUFDZix1Q0FBbUIsQ0FBQTtJQUNuQixpQ0FBYSxDQUFBO0FBQ2pCLENBQUMsRUFQVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTzNCO0FBSUQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxNQUFjLEVBQW9CLEVBQUU7SUFDdkUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXpDLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMzQixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQztLQUNoQztJQUVELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDekQsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7S0FDL0I7SUFFRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDM0IsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7S0FDaEM7SUFFRCxJQUFJLFdBQVcs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QUNULDJCQUFTLENBQUE7QUFDYixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFFRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUNwQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUN4QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUN4QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUN4QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUN4QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUN4QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUN4QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtDQUM3QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDL0IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDOUIsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDL0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDNUIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDNUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDMUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDM0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDM0IsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDN0IsRUFB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Q0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUNwQyxhQUFhLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztnQkFDekQsTUFBTTtZQUNWLEtBQUssZ0JBQWdCLENBQUMsR0FBRztnQkFDckIsYUFBYSxJQUFJLE1BQU0sQ0FBQztnQkFDeEIsTUFBTTtZQUNWLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtnQkFDdEIsYUFBYSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztnQkFDL0UsTUFBTTtTQUNiO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3QyxhQUFhLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEcsYUFBYSxJQUFJLEtBQUssc0JBQXNCLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUMvRyxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXAgYXMgX21hcCwgc29ydEJ5IGFzIF9zb3J0QnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZ2V0R01UTGFiZWwsIExPQ0FMX1RJTUVfWk9ORV9PRkZTRVQgfSBmcm9tICcuLi9kci1pbnB1dHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDcm9uRWRpdG9yIHtcbiAgICBldmVyeVhIb3VyczogbnVtYmVyOyAvLyAxLDIsMyw0LDYsOCwxMiAobm90IGluY2x1ZGluZyAyNCBiZWNhdXNlIGV2ZXJ5IDI0IGhvdXJzIGlzIGp1c3QgZGFpbHkpXG4gICAgZXZlcnk6IENyb25FZGl0b3JQZXJpb2Q7XG4gICAgbWludXRlOiBudW1iZXI7XG4gICAgaG91cjogbnVtYmVyO1xuICAgIGRheU9mTW9udGg6IG51bWJlcjsgLy8gXCIxLTI4XCJcbiAgICBtb250aDogbnVtYmVyOyAvLyBcIjEtMTJcIlxuICAgIGRheU9mV2VlazogbnVtYmVyOyAvLyBcIjAtN1wiXG4gICAgdGltZVBlcmlvZDogQ3JvblRpbWVQZXJpb2Q7XG4gICAgdGltZVpvbmU6IG51bWJlcjsgLy8gLTE0IC0gKzEyXG59XG5cbmV4cG9ydCBlbnVtIENyb25FZGl0b3JQZXJpb2Qge1xuICAgIEhPVVIgPSAnaG91cicsXG4gICAgREFZID0gJ2RheScsXG4gICAgV0VFSyA9ICd3ZWVrJyxcbiAgICBNT05USCA9ICdtb250aCcsXG4gICAgUVVBUlRFUiA9ICdxdWFydGVyJyxcbiAgICBZRUFSID0gJ3llYXInLFxufVxuXG5leHBvcnQgdHlwZSBUQ3JvbkVkaXRvclBlcmlvZCA9ICdob3VyJyB8ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICdxdWFydGVyJyB8ICd5ZWFyJztcblxuZXhwb3J0IGNvbnN0IGRhdGVGb3JtYXRUb0Nyb25QZXJpb2QgPSAoZm9ybWF0OiBzdHJpbmcpOiBDcm9uRWRpdG9yUGVyaW9kID0+IHtcbiAgICBjb25zdCB1cHBlckZvcm1hdCA9IGZvcm1hdC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgaWYgKHVwcGVyRm9ybWF0LmluY2x1ZGVzKCdIJykpIHtcbiAgICAgICAgcmV0dXJuIENyb25FZGl0b3JQZXJpb2QuSE9VUjtcbiAgICB9XG5cbiAgICBpZiAodXBwZXJGb3JtYXQuaW5jbHVkZXMoJ0QnKSAmJiAhdXBwZXJGb3JtYXQuaW5jbHVkZXMoJ1cnKSkge1xuICAgICAgICByZXR1cm4gQ3JvbkVkaXRvclBlcmlvZC5EQVk7XG4gICAgfVxuXG4gICAgaWYgKHVwcGVyRm9ybWF0LmluY2x1ZGVzKCdXJykpIHtcbiAgICAgICAgcmV0dXJuIENyb25FZGl0b3JQZXJpb2QuV0VFSztcbiAgICB9XG5cbiAgICBpZiAodXBwZXJGb3JtYXQuaW5jbHVkZXMoJ00nKSAmJiB1cHBlckZvcm1hdCAhPT0gJ1lZWVknKSB7XG4gICAgICAgIHJldHVybiBDcm9uRWRpdG9yUGVyaW9kLk1PTlRIO1xuICAgIH1cblxuICAgIGlmICh1cHBlckZvcm1hdC5pbmNsdWRlcygnUScpKSB7XG4gICAgICAgIHJldHVybiBDcm9uRWRpdG9yUGVyaW9kLlFVQVJURVI7XG4gICAgfVxuXG4gICAgcmV0dXJuIENyb25FZGl0b3JQZXJpb2QuWUVBUjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbml0aWFsUXVhcnRlckFycmF5ID0gKGZpc2NhbFllYXIgPSAxLCBtb250aEFyciA9IFsxLCA0LCA3LCAxMF0pOiBudW1iZXJbXSA9PiB7XG4gICAgY29uc3QgZmlzY2FsT2Zmc2V0ID0gZmlzY2FsWWVhciAtIDE7XG5cbiAgICBpZiAoZmlzY2FsT2Zmc2V0KSB7XG4gICAgICAgIG1vbnRoQXJyID0gX21hcChtb250aEFyciwgKG1vbnRoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBtb250aCArIGZpc2NhbE9mZnNldDtcbiAgICAgICAgICAgIHJldHVybiB2YWwgPiAxMiA/IHZhbCAtIDEyIDogdmFsO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9udGhBcnIgPSBfc29ydEJ5KG1vbnRoQXJyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW9udGhBcnI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3RhcnRNb250aEluUXVhcnRlciA9IChmaXNjYWxZZWFyID0gMSwgbW9udGhBcnI6IG51bWJlcltdID0gWzEsIDQsIDcsIDEwXSk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgZmlzY2FsT2Zmc2V0ID0gZmlzY2FsWWVhciAtIDE7XG4gICAgbGV0IHF1YXJ0ZXJNb250aCA9IG1vbnRoQXJyWzBdIHx8IDE7XG5cbiAgICAvLyBCeSBkZWZhdWx0IHNlbGVjdCBmaXJzdCB2YWx1ZSBpbiBhcnJheSBzaW5jZSBpdCBjYW4gYmUgb25seSAxLTNcbiAgICAvLyBWYWx1ZSBtdXN0IGJlIHJlY2FsY3VsYXRlZCBpZiBmaXNjYWwgeWVhciBkb2Vzbid0IHN0YXJ0IGZyb20gZmlyc3QgbW9udGhcbiAgICAvLyBJbiBtb250aFtdIHdlIGhhdmUgVVRDIHZhbHVlcywgd2UgbmVlZCB0byBzaG93IGZpc2NhbCBtb250aCBpbiBzZWxlY3Rpb24uXG4gICAgLy8gRXhhbXBsZTogV2Ugd2FudCB0byBzdGFydCB0YXNrIGluIDNyZCBtb250aCBvbiBlYWNoIGZpc2NhbCBxdWFydGVyLlxuICAgIC8vIElmIGZpc2NhbF95ZWFyX3N0YXJ0c19mcm9tID0gMyBUaGVuIG1vbnRoIHNob3VsZCBiZSBbMiw1LDgsMTFdLlxuICAgIC8vIEZpcnN0IGZpc2NhbCBxdWFydGVyIHdpbGwgYmUgZmluaXNoZWQgaW4gbW9udGggNSwgMi04LCAzLTExLCA0LTIobmV4dCB5ZWFyKS5cbiAgICAvLyBGaXNjYWwgbW9udGggPSBbMTIsMyw2LDldLiBQcmVzZW50ZWQgdmFsdWUgZm9yIHVzZXI6IDMuXG4gICAgaWYgKGZpc2NhbE9mZnNldCkge1xuICAgICAgICBtb250aEFyciA9IF9tYXAobW9udGhBcnIsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBpdGVtIC0gZmlzY2FsT2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIHZhbCA8IDEgPyB2YWwgKyAxMiA6IHZhbDtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vbnRoQXJyID0gX3NvcnRCeShtb250aEFycik7XG4gICAgICAgIHF1YXJ0ZXJNb250aCA9IG1vbnRoQXJyWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBxdWFydGVyTW9udGg7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UXVhcnRlclN0cmluZ0J5TW9udGhJblF1YXJ0ZXIgPSAoZmlzY2FsWWVhciA9IDEsIG1vbnRoOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghbW9udGgpIHtcbiAgICAgICAgcmV0dXJuICcqJztcbiAgICB9XG5cbiAgICBsZXQgbW9udGhBcnIgPSBbbW9udGgsIG1vbnRoICsgMywgbW9udGggKyA2LCBtb250aCArIDldO1xuICAgIGNvbnN0IGZpc2NhbE9mZnNldCA9IGZpc2NhbFllYXIgLSAxO1xuXG4gICAgaWYgKGZpc2NhbE9mZnNldCkge1xuICAgICAgICBtb250aEFyciA9IF9tYXAobW9udGhBcnIsIChtb250aCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gbW9udGggKyBmaXNjYWxPZmZzZXQ7XG4gICAgICAgICAgICByZXR1cm4gdmFsID4gMTIgPyB2YWwgLSAxMiA6IHZhbDtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vbnRoQXJyID0gX3NvcnRCeShtb250aEFycik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vbnRoQXJyLmpvaW4oJywnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBDcm9uRWRpdG9yRGVmYXVsdENvbmZpZ0J5UGVyaW9kID0ge1xuICAgIFtDcm9uRWRpdG9yUGVyaW9kLkhPVVJdOiAoZlk/OiBudW1iZXIpID0+IGAwIDEyLzEgKiAqICogJHtMT0NBTF9USU1FX1pPTkVfT0ZGU0VUfWAsXG4gICAgW0Nyb25FZGl0b3JQZXJpb2QuREFZXTogKGZZPzogbnVtYmVyKSA9PiBgMCAxMiAqICogKiAke0xPQ0FMX1RJTUVfWk9ORV9PRkZTRVR9YCxcbiAgICBbQ3JvbkVkaXRvclBlcmlvZC5XRUVLXTogKGZZPzogbnVtYmVyKSA9PiBgMCAxMiAqICogMCAke0xPQ0FMX1RJTUVfWk9ORV9PRkZTRVR9YCxcbiAgICBbQ3JvbkVkaXRvclBlcmlvZC5NT05USF06IChmWT86IG51bWJlcikgPT4gYDAgMTIgMSAqICogJHtMT0NBTF9USU1FX1pPTkVfT0ZGU0VUfWAsXG4gICAgW0Nyb25FZGl0b3JQZXJpb2QuUVVBUlRFUl06IChmWT86IG51bWJlcikgPT4gYDAgMTIgMSAke2dldEluaXRpYWxRdWFydGVyQXJyYXkoZlkpLmpvaW4oJywnKX0gKiAke0xPQ0FMX1RJTUVfWk9ORV9PRkZTRVR9YCxcbiAgICBbQ3JvbkVkaXRvclBlcmlvZC5ZRUFSXTogKGZZPzogbnVtYmVyKSA9PiBgMCAxMiAxIDEgKiAke0xPQ0FMX1RJTUVfWk9ORV9PRkZTRVR9YCxcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDcm9uVHlwZUFzUGVyaW9kTGFiZWwgPSAodHlwZTogQ3JvbkVkaXRvclBlcmlvZCk6IHN0cmluZyA9PlxuICAgIHR5cGUgPT09IENyb25FZGl0b3JQZXJpb2QuREFZID8gJ0RhaWx5JyA6IHR5cGUgKyAnbHknO1xuXG5leHBvcnQgZW51bSBDcm9uVGltZVBlcmlvZCB7XG4gICAgQU0gPSAnQU0nLFxuICAgIFBNID0gJ1BNJyxcbn1cblxuZXhwb3J0IGNvbnN0IEhPVVJTX0RJVklTSUJMRV9JTlRPX0RBWSA9IFtcbiAgICB7IGxhYmVsOiAnMScsIHZhbHVlOiAxIH0sXG4gICAgeyBsYWJlbDogJzInLCB2YWx1ZTogMiB9LFxuICAgIHsgbGFiZWw6ICczJywgdmFsdWU6IDMgfSxcbiAgICB7IGxhYmVsOiAnNCcsIHZhbHVlOiA0IH0sXG4gICAgeyBsYWJlbDogJzYnLCB2YWx1ZTogNiB9LFxuICAgIHsgbGFiZWw6ICc4JywgdmFsdWU6IDggfSxcbiAgICB7IGxhYmVsOiAnMTInLCB2YWx1ZTogMTIgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBNT05USF9PRl9ZRUFSX0FSUkFZID0gW1xuICAgIHsgbGFiZWw6ICdKYW51YXJ5JywgdmFsdWU6IDEgfSxcbiAgICB7IGxhYmVsOiAnRmVicnVhcnknLCB2YWx1ZTogMiB9LFxuICAgIHsgbGFiZWw6ICdNYXJjaCcsIHZhbHVlOiAzIH0sXG4gICAgeyBsYWJlbDogJ0FwcmlsJywgdmFsdWU6IDQgfSxcbiAgICB7IGxhYmVsOiAnTWF5JywgdmFsdWU6IDUgfSxcbiAgICB7IGxhYmVsOiAnSnVuZScsIHZhbHVlOiA2IH0sXG4gICAgeyBsYWJlbDogJ0p1bHknLCB2YWx1ZTogNyB9LFxuICAgIHsgbGFiZWw6ICdBdWd1c3QnLCB2YWx1ZTogOCB9LFxuICAgIHsgbGFiZWw6ICdTZXB0ZW1iZXInLCB2YWx1ZTogOSB9LFxuICAgIHsgbGFiZWw6ICdPY3RvYmVyJywgdmFsdWU6IDEwIH0sXG4gICAgeyBsYWJlbDogJ05vdmVtYmVyJywgdmFsdWU6IDExIH0sXG4gICAgeyBsYWJlbDogJ0RlY2VtYmVyJywgdmFsdWU6IDEyIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgREFZX09GX1dFRUtfQVJSQVkgPSBbXG4gICAgeyBsYWJlbDogJ1N1bmRheScsIHZhbHVlOiAwIH0sXG4gICAgeyBsYWJlbDogJ01vbmRheScsIHZhbHVlOiAxIH0sXG4gICAgeyBsYWJlbDogJ1R1ZXNkYXknLCB2YWx1ZTogMiB9LFxuICAgIHsgbGFiZWw6ICdXZWRuZXNkYXknLCB2YWx1ZTogMyB9LFxuICAgIHsgbGFiZWw6ICdUaHVyc2RheScsIHZhbHVlOiA0IH0sXG4gICAgeyBsYWJlbDogJ0ZyaWRheScsIHZhbHVlOiA1IH0sXG4gICAgeyBsYWJlbDogJ1NhdHVyZGF5JywgdmFsdWU6IDYgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBNT05USF9PRl9RVUFSVEVSX0FSUkFZID0gW1xuICAgIHsgbGFiZWw6ICcxc3QnLCB2YWx1ZTogMSB9LFxuICAgIHsgbGFiZWw6ICcybmQnLCB2YWx1ZTogMiB9LFxuICAgIHsgbGFiZWw6ICczcmQnLCB2YWx1ZTogMyB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IEFMTE9XRURfUEVSSU9EUyA9IE9iamVjdC52YWx1ZXMoQ3JvbkVkaXRvclBlcmlvZCk7XG5cbmV4cG9ydCBjb25zdCBhZGRPcmRpbmFsU3VmZml4ID0gKG51bTogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBzdWZmaXhlcyA9IFsndGgnLCAnc3QnLCAnbmQnLCAncmQnXTtcbiAgICBjb25zdCB2ID0gbnVtICUgMTAwO1xuXG4gICAgcmV0dXJuIG51bSArIChzdWZmaXhlc1sodiAtIDIwKSAlIDEwXSB8fCBzdWZmaXhlc1t2XSB8fCBzdWZmaXhlc1swXSk7XG59O1xuXG5leHBvcnQgY29uc3QgREFZX09GX01PTlRIX0FSUkFZID0gbmV3IEFycmF5KDI4KS5maWxsKG51bGwpLm1hcCgodiwgaSkgPT4gKHtcbiAgICBsYWJlbDogYWRkT3JkaW5hbFN1ZmZpeChpICsgMSksXG4gICAgdmFsdWU6IGkgKyAxLFxufSkpO1xuXG5leHBvcnQgY2xhc3MgQ3JvbkVkaXRvciBpbXBsZW1lbnRzIElDcm9uRWRpdG9yIHtcbiAgICBwcml2YXRlIF9maXNjYWxZZWFyU3RhcnQgPSAxO1xuICAgIHByaXZhdGUgX3BlcmlvZDogVENyb25FZGl0b3JQZXJpb2Q7XG5cbiAgICBldmVyeVhIb3VyczogbnVtYmVyID0gMTtcbiAgICBkYXlPZk1vbnRoOiBudW1iZXIgPSAxO1xuICAgIGRheU9mV2VlazogbnVtYmVyID0gMTtcbiAgICBldmVyeTogQ3JvbkVkaXRvclBlcmlvZCA9IENyb25FZGl0b3JQZXJpb2QuWUVBUjtcbiAgICBob3VyOiBudW1iZXIgPSAxMjtcbiAgICBtaW51dGU6IG51bWJlciA9IDA7XG4gICAgbW9udGg6IG51bWJlciA9IDE7XG4gICAgdGltZVBlcmlvZDogQ3JvblRpbWVQZXJpb2QgPSBDcm9uVGltZVBlcmlvZC5QTTtcbiAgICB0aW1lWm9uZTogbnVtYmVyID0gTE9DQUxfVElNRV9aT05FX09GRlNFVDtcblxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnBhcnNlQ3JvblN0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jcm9uRWRpdG9yT2JqZWN0VG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHZhbHVlT2JqZWN0KHZhbHVlT2JqZWN0OiBJQ3JvbkVkaXRvcikge1xuICAgICAgICBpZiAoIXZhbHVlT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2ZXJ5ID0gdmFsdWVPYmplY3QuZXZlcnk7XG4gICAgICAgIHRoaXMubWludXRlID0gdmFsdWVPYmplY3QubWludXRlO1xuICAgICAgICB0aGlzLmhvdXIgPSB2YWx1ZU9iamVjdC5ob3VyO1xuICAgICAgICB0aGlzLmRheU9mTW9udGggPSB2YWx1ZU9iamVjdC5kYXlPZk1vbnRoO1xuICAgICAgICB0aGlzLm1vbnRoID0gdmFsdWVPYmplY3QubW9udGg7XG4gICAgICAgIHRoaXMuZGF5T2ZXZWVrID0gdmFsdWVPYmplY3QuZGF5T2ZXZWVrO1xuICAgICAgICB0aGlzLnRpbWVQZXJpb2QgPSB2YWx1ZU9iamVjdC50aW1lUGVyaW9kO1xuICAgICAgICB0aGlzLnRpbWVab25lID0gdmFsdWVPYmplY3QudGltZVpvbmU7XG4gICAgICAgIHRoaXMuZXZlcnlYSG91cnMgPSB2YWx1ZU9iamVjdC5ldmVyeVhIb3VycztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZhbHVlT2JqZWN0KCk6IElDcm9uRWRpdG9yIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZXJ5OiB0aGlzLmV2ZXJ5LFxuICAgICAgICAgICAgbWludXRlOiB0aGlzLm1pbnV0ZSxcbiAgICAgICAgICAgIGhvdXI6IHRoaXMuaG91cixcbiAgICAgICAgICAgIGRheU9mTW9udGg6IHRoaXMuZGF5T2ZNb250aCxcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLm1vbnRoLFxuICAgICAgICAgICAgZGF5T2ZXZWVrOiB0aGlzLmRheU9mV2VlayxcbiAgICAgICAgICAgIHRpbWVQZXJpb2Q6IHRoaXMudGltZVBlcmlvZCxcbiAgICAgICAgICAgIHRpbWVab25lOiB0aGlzLnRpbWVab25lLFxuICAgICAgICAgICAgZXZlcnlYSG91cnM6IHRoaXMuZXZlcnlYSG91cnMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IodmFsdWU/OiBzdHJpbmcsIGZpc2NhbFllYXJTdGFydDogbnVtYmVyID0gMSwgcGVyaW9kPzogVENyb25FZGl0b3JQZXJpb2QpIHtcbiAgICAgICAgdGhpcy5fZmlzY2FsWWVhclN0YXJ0ID0gZmlzY2FsWWVhclN0YXJ0O1xuICAgICAgICB0aGlzLl9wZXJpb2QgPSBwZXJpb2Q7XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlQ3JvblN0cmluZyh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCBbbWludXRlLCBob3VyLCBkYXlPZk1vbnRoLCBtb250aCwgZGF5T2ZXZWVrLCB0aW1lWm9uZV06IGFueSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgbWludXRlID0gbWludXRlICE9PSAnKicgPyBOdW1iZXIobWludXRlLnNwbGl0KCcsJylbMF0pIDogMDtcbiAgICAgICAgbGV0IGV2ZXJ5WEhvdXJzO1xuICAgICAgICBpZiAodHlwZW9mIGhvdXIgPT09ICdzdHJpbmcnICYmIGhvdXIuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICAgICAgLy8gQ2FzZSAxOiBJZiBgaG91cmAgaW5jbHVkZXMgLyB0byBpbmRpY2F0ZSBzdGVwIGNoYW5nZVxuICAgICAgICAgICAgZXZlcnlYSG91cnMgPSBOdW1iZXIoaG91ci5zcGxpdCgnLycpWzFdKTtcbiAgICAgICAgICAgIGhvdXIgPSBbTnVtYmVyKGhvdXIuc3BsaXQoJy8nKVswXSldO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgIT09ICcqJykge1xuICAgICAgICAgICAgLy8gQ2FzZSAyOiBJZiBgaG91cmAgaXMgYSBzaW5nbGUgbnVtYmVyIChidXQgbm90IFwiKlwiKSwgZW5zdXJlIGl0J3MgYSBudW1iZXJcbiAgICAgICAgICAgIGhvdXIgPSBbTnVtYmVyKGhvdXIuc3BsaXQoJywnKVswXSldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2FzZSAzOiBJZiBgaG91cmAgaXMgXCIqXCIsIHNldCBpdCB0byAwXG4gICAgICAgICAgICBob3VyID0gWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF5T2ZNb250aCA9IHRoaXMucGFyc2VDcm9uQXJyYXkoZGF5T2ZNb250aCk7XG4gICAgICAgIG1vbnRoID0gdGhpcy5wYXJzZUNyb25BcnJheShtb250aCk7XG4gICAgICAgIGRheU9mV2VlayA9IHRoaXMucGFyc2VDcm9uQXJyYXkoZGF5T2ZXZWVrKTtcbiAgICAgICAgdGltZVpvbmUgPSB0aW1lWm9uZSA/IE51bWJlcih0aW1lWm9uZSkgOiAwO1xuXG4gICAgICAgIGxldCB0eXBlO1xuXG4gICAgICAgIGlmICh0aGlzLl9wZXJpb2QpIHtcbiAgICAgICAgICAgIHR5cGUgPSB0aGlzLl9wZXJpb2Q7XG4gICAgICAgIH0gZWxzZSBpZiAobW9udGg/Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHR5cGUgPSBDcm9uRWRpdG9yUGVyaW9kLlFVQVJURVI7XG4gICAgICAgIH0gZWxzZSBpZiAobW9udGg/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdHlwZSA9IENyb25FZGl0b3JQZXJpb2QuWUVBUjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlPZk1vbnRoPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHR5cGUgPSBDcm9uRWRpdG9yUGVyaW9kLk1PTlRIO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mV2Vlaz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0eXBlID0gQ3JvbkVkaXRvclBlcmlvZC5XRUVLO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZXJ5WEhvdXJzKSB7XG4gICAgICAgICAgICB0eXBlID0gQ3JvbkVkaXRvclBlcmlvZC5IT1VSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHlwZSA9IENyb25FZGl0b3JQZXJpb2QuREFZO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ldmVyeSA9IHR5cGU7XG4gICAgICAgIHRoaXMuZXZlcnlYSG91cnMgPSBldmVyeVhIb3VycyA/IGV2ZXJ5WEhvdXJzIDogMTtcbiAgICAgICAgdGhpcy5taW51dGUgPSBtaW51dGU7XG4gICAgICAgIHRoaXMuaG91ciA9IGhvdXJbMF0gJSAxMiB8fCAxMjtcbiAgICAgICAgdGhpcy5kYXlPZk1vbnRoID0gZGF5T2ZNb250aD8uWzBdIHx8IG51bGw7XG4gICAgICAgIHRoaXMubW9udGggPVxuICAgICAgICAgICAgdHlwZSA9PT0gQ3JvbkVkaXRvclBlcmlvZC5RVUFSVEVSID8gZ2V0U3RhcnRNb250aEluUXVhcnRlcih0aGlzLl9maXNjYWxZZWFyU3RhcnQsIG1vbnRoKSA6IG1vbnRoPy5bMF0gfHwgbnVsbDtcbiAgICAgICAgdGhpcy5kYXlPZldlZWsgPSB0eXBlb2YgZGF5T2ZXZWVrPy5bMF0gPT09ICdudW1iZXInID8gZGF5T2ZXZWVrWzBdIDogbnVsbDtcbiAgICAgICAgdGhpcy50aW1lUGVyaW9kID0gaG91clswXSA+PSAxMiA/IENyb25UaW1lUGVyaW9kLlBNIDogQ3JvblRpbWVQZXJpb2QuQU07XG4gICAgICAgIHRoaXMudGltZVpvbmUgPSB0aW1lWm9uZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlQ3JvbkFycmF5KHN0cjogc3RyaW5nKTogbnVtYmVyW10gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHN0ciAhPT0gJyonID8gc3RyLnNwbGl0KCcsJykubWFwKCh2KSA9PiBOdW1iZXIodikpIDogbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JvbkVkaXRvck9iamVjdFRvU3RyaW5nKGV4Y2x1ZGVUaW1lem9uZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWludXRlID0gdGhpcy5taW51dGUgfHwgMDtcbiAgICAgICAgbGV0IGhvdXIgPSB0aGlzLmhvdXIgfHwgMDtcbiAgICAgICAgaG91ciA9IHRoaXMuaG91cnNUbzI0Rm9ybWF0KGhvdXIpO1xuICAgICAgICBsZXQgaG91ck9ySG91cnM6IHN0cmluZyB8IG51bWJlciA9IGhvdXI7XG4gICAgICAgIGNvbnN0IGRheU9mTW9udGggPSB0aGlzLmRheU9mTW9udGggfHwgJyonO1xuICAgICAgICBjb25zdCBtb250aCA9XG4gICAgICAgICAgICB0aGlzLl9wZXJpb2QgPT09IENyb25FZGl0b3JQZXJpb2QuUVVBUlRFUiB8fCB0aGlzLmV2ZXJ5ID09PSBDcm9uRWRpdG9yUGVyaW9kLlFVQVJURVJcbiAgICAgICAgICAgICAgICA/IGdldFF1YXJ0ZXJTdHJpbmdCeU1vbnRoSW5RdWFydGVyKHRoaXMuX2Zpc2NhbFllYXJTdGFydCwgdGhpcy5tb250aClcbiAgICAgICAgICAgICAgICA6IHRoaXMubW9udGggfHwgJyonO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSB0eXBlb2YgdGhpcy5kYXlPZldlZWsgPT09ICdudW1iZXInID8gdGhpcy5kYXlPZldlZWsgOiAnKic7XG5cbiAgICAgICAgaWYgKHRoaXMuZXZlcnkgPT09IENyb25FZGl0b3JQZXJpb2QuSE9VUikge1xuICAgICAgICAgICAgaG91ck9ySG91cnMgPSBgJHtob3VyfS8ke3RoaXMuZXZlcnlYSG91cnN9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7bWludXRlfSAke2hvdXJPckhvdXJzfSAke2RheU9mTW9udGh9ICR7bW9udGh9ICR7ZGF5T2ZXZWVrfSR7IWV4Y2x1ZGVUaW1lem9uZSA/IGAgJHt0aGlzLnRpbWVab25lfWAgOiAnJ31gO1xuICAgIH1cblxuICAgIHB1YmxpYyBob3Vyc1RvMjRGb3JtYXQoaG91cjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMudGltZVBlcmlvZCA9PT0gQ3JvblRpbWVQZXJpb2QuUE0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGltZVBlcmlvZCA9PT0gQ3JvblRpbWVQZXJpb2QuQU0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBob3VyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWFkYWJsZVN0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdmlzaWJsZVN0cmluZyA9ICdFdmVyeSAnO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5ldmVyeSkge1xuICAgICAgICAgICAgY2FzZSBDcm9uRWRpdG9yUGVyaW9kLllFQVI6XG4gICAgICAgICAgICAgICAgdmlzaWJsZVN0cmluZyArPSBgJHtNT05USF9PRl9ZRUFSX0FSUkFZW3RoaXMubW9udGggLSAxXS5sYWJlbH0gJHtEQVlfT0ZfTU9OVEhfQVJSQVlbdGhpcy5kYXlPZk1vbnRoIC0gMV0ubGFiZWx9IGA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENyb25FZGl0b3JQZXJpb2QuUVVBUlRFUjpcbiAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX09GX1FVQVJURVJfQVJSQVlbdGhpcy5tb250aCAtIDFdLmxhYmVsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9IERBWV9PRl9NT05USF9BUlJBWVt0aGlzLmRheU9mTW9udGggLSAxXS5sYWJlbDtcbiAgICAgICAgICAgICAgICB2aXNpYmxlU3RyaW5nICs9IGBxdWFydGVyIG9uIHRoZSAke21vbnRofSBtb250aCBvZiB0aGUgcXVhcnRlciBvbiAke2RheX0gZGF5IGA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENyb25FZGl0b3JQZXJpb2QuTU9OVEg6XG4gICAgICAgICAgICAgICAgdmlzaWJsZVN0cmluZyArPSBgbW9udGggb24gZGF5ICR7dGhpcy5kYXlPZk1vbnRofSBgO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDcm9uRWRpdG9yUGVyaW9kLldFRUs6XG4gICAgICAgICAgICAgICAgY29uc3QgZG93ID0gdHlwZW9mIHRoaXMuZGF5T2ZXZWVrID09PSAnbnVtYmVyJyA/IHRoaXMuZGF5T2ZXZWVrIDogMDtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXlJbmRleCA9IGRvdyA+PSA3ID8gMCA6IGRvdztcbiAgICAgICAgICAgICAgICB2aXNpYmxlU3RyaW5nICs9IGAke0RBWV9PRl9XRUVLX0FSUkFZW2RheUluZGV4XS5sYWJlbH0gYDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3JvbkVkaXRvclBlcmlvZC5EQVk6XG4gICAgICAgICAgICAgICAgdmlzaWJsZVN0cmluZyArPSBgZGF5IGA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENyb25FZGl0b3JQZXJpb2QuSE9VUjpcbiAgICAgICAgICAgICAgICB2aXNpYmxlU3RyaW5nICs9IGAke3RoaXMuZXZlcnlYSG91cnN9IGhvdXIke3RoaXMuZXZlcnlYSG91cnMgPiAxID8gJ3MnIDogJyd9IGA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtaW51dGVQcmVmaXggPSB0aGlzLm1pbnV0ZSA8IDEwID8gJzAnIDogJyc7XG4gICAgICAgIGNvbnN0IGhvdXJQcmVmaXggPSB0aGlzLmhvdXIgPCAxMCA/ICcwJyA6ICcnO1xuICAgICAgICB2aXNpYmxlU3RyaW5nICs9IGBhdCAke2hvdXJQcmVmaXggKyB0aGlzLmhvdXJ9OiR7bWludXRlUHJlZml4ICsgdGhpcy5taW51dGV9JHt0aGlzLnRpbWVQZXJpb2R9YDtcbiAgICAgICAgdmlzaWJsZVN0cmluZyArPSBgICgke0xPQ0FMX1RJTUVfWk9ORV9PRkZTRVQgPT09IHRoaXMudGltZVpvbmUgPyAnTG9jYWwgVGltZScgOiBnZXRHTVRMYWJlbCgtdGhpcy50aW1lWm9uZSl9KWA7XG4gICAgICAgIHJldHVybiB2aXNpYmxlU3RyaW5nO1xuICAgIH1cbn1cbiJdfQ==
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItY3Jvbi1maWVsZC5lZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jcm9uLWZpZWxkL2RyLWNyb24tZmllbGQuZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLE1BQU0sSUFBSSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQWdCbkUsTUFBTSxDQUFOLElBQVksZ0JBT1g7QUFQRCxXQUFZLGdCQUFnQjtJQUN4QixpQ0FBYSxDQUFBO0lBQ2IsK0JBQVcsQ0FBQTtJQUNYLGlDQUFhLENBQUE7SUFDYixtQ0FBZSxDQUFBO0lBQ2YsdUNBQW1CLENBQUE7SUFDbkIsaUNBQWEsQ0FBQTtBQUNqQixDQUFDLEVBUFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQU8zQjtBQUlELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsTUFBYyxFQUFvQixFQUFFO0lBQ3ZFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUV6QyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDM0IsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7S0FDaEM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3pELE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDO0tBQy9CO0lBRUQsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzNCLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0tBQ2hDO0lBRUQsSUFBSSxXQUFX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QUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEcsYUFBYSxJQUFJLEtBQUssc0JBQXNCLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUMvRyxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXAgYXMgX21hcCwgc29ydEJ5IGFzIF9zb3J0QnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZ2V0R01UTGFiZWwsIExPQ0FMX1RJTUVfWk9ORV9PRkZTRVQgfSBmcm9tICcuLi9kci1pbnB1dHMnO1xuXG5leHBvcnQgdHlwZSBURGF5T2ZNb250aCA9IG51bWJlciB8ICdMJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ3JvbkVkaXRvciB7XG4gICAgZXZlcnlYSG91cnM6IG51bWJlcjsgLy8gMSwyLDMsNCw2LDgsMTIgKG5vdCBpbmNsdWRpbmcgMjQgYmVjYXVzZSBldmVyeSAyNCBob3VycyBpcyBqdXN0IGRhaWx5KVxuICAgIGV2ZXJ5OiBDcm9uRWRpdG9yUGVyaW9kO1xuICAgIG1pbnV0ZTogbnVtYmVyO1xuICAgIGhvdXI6IG51bWJlcjtcbiAgICBkYXlPZk1vbnRoOiBURGF5T2ZNb250aDsgLy8gXCIxLTI4XCIgb3IgXCJMXCIgZm9yIHRoZSBsYXN0IGRheSBvZiBtb250aFxuICAgIG1vbnRoOiBudW1iZXI7IC8vIFwiMS0xMlwiXG4gICAgZGF5T2ZXZWVrOiBudW1iZXI7IC8vIFwiMC03XCJcbiAgICB0aW1lUGVyaW9kOiBDcm9uVGltZVBlcmlvZDtcbiAgICB0aW1lWm9uZTogbnVtYmVyOyAvLyAtMTQgLSArMTJcbn1cblxuZXhwb3J0IGVudW0gQ3JvbkVkaXRvclBlcmlvZCB7XG4gICAgSE9VUiA9ICdob3VyJyxcbiAgICBEQVkgPSAnZGF5JyxcbiAgICBXRUVLID0gJ3dlZWsnLFxuICAgIE1PTlRIID0gJ21vbnRoJyxcbiAgICBRVUFSVEVSID0gJ3F1YXJ0ZXInLFxuICAgIFlFQVIgPSAneWVhcicsXG59XG5cbmV4cG9ydCB0eXBlIFRDcm9uRWRpdG9yUGVyaW9kID0gJ2hvdXInIHwgJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3F1YXJ0ZXInIHwgJ3llYXInO1xuXG5leHBvcnQgY29uc3QgZGF0ZUZvcm1hdFRvQ3JvblBlcmlvZCA9IChmb3JtYXQ6IHN0cmluZyk6IENyb25FZGl0b3JQZXJpb2QgPT4ge1xuICAgIGNvbnN0IHVwcGVyRm9ybWF0ID0gZm9ybWF0LnRvVXBwZXJDYXNlKCk7XG5cbiAgICBpZiAodXBwZXJGb3JtYXQuaW5jbHVkZXMoJ0gnKSkge1xuICAgICAgICByZXR1cm4gQ3JvbkVkaXRvclBlcmlvZC5IT1VSO1xuICAgIH1cblxuICAgIGlmICh1cHBlckZvcm1hdC5pbmNsdWRlcygnRCcpICYmICF1cHBlckZvcm1hdC5pbmNsdWRlcygnVycpKSB7XG4gICAgICAgIHJldHVybiBDcm9uRWRpdG9yUGVyaW9kLkRBWTtcbiAgICB9XG5cbiAgICBpZiAodXBwZXJGb3JtYXQuaW5jbHVkZXMoJ1cnKSkge1xuICAgICAgICByZXR1cm4gQ3JvbkVkaXRvclBlcmlvZC5XRUVLO1xuICAgIH1cblxuICAgIGlmICh1cHBlckZvcm1hdC5pbmNsdWRlcygnTScpICYmIHVwcGVyRm9ybWF0ICE9PSAnWVlZWScpIHtcbiAgICAgICAgcmV0dXJuIENyb25FZGl0b3JQZXJpb2QuTU9OVEg7XG4gICAgfVxuXG4gICAgaWYgKHVwcGVyRm9ybWF0LmluY2x1ZGVzKCdRJykpIHtcbiAgICAgICAgcmV0dXJuIENyb25FZGl0b3JQZXJpb2QuUVVBUlRFUjtcbiAgICB9XG5cbiAgICByZXR1cm4gQ3JvbkVkaXRvclBlcmlvZC5ZRUFSO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEluaXRpYWxRdWFydGVyQXJyYXkgPSAoZmlzY2FsWWVhciA9IDEsIG1vbnRoQXJyID0gWzEsIDQsIDcsIDEwXSk6IG51bWJlcltdID0+IHtcbiAgICBjb25zdCBmaXNjYWxPZmZzZXQgPSBmaXNjYWxZZWFyIC0gMTtcblxuICAgIGlmIChmaXNjYWxPZmZzZXQpIHtcbiAgICAgICAgbW9udGhBcnIgPSBfbWFwKG1vbnRoQXJyLCAobW9udGgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IG1vbnRoICsgZmlzY2FsT2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIHZhbCA+IDEyID8gdmFsIC0gMTIgOiB2YWw7XG4gICAgICAgIH0pO1xuICAgICAgICBtb250aEFyciA9IF9zb3J0QnkobW9udGhBcnIpO1xuICAgIH1cblxuICAgIHJldHVybiBtb250aEFycjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdGFydE1vbnRoSW5RdWFydGVyID0gKGZpc2NhbFllYXIgPSAxLCBtb250aEFycjogbnVtYmVyW10gPSBbMSwgNCwgNywgMTBdKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBmaXNjYWxPZmZzZXQgPSBmaXNjYWxZZWFyIC0gMTtcbiAgICBsZXQgcXVhcnRlck1vbnRoID0gbW9udGhBcnJbMF0gfHwgMTtcblxuICAgIC8vIEJ5IGRlZmF1bHQgc2VsZWN0IGZpcnN0IHZhbHVlIGluIGFycmF5IHNpbmNlIGl0IGNhbiBiZSBvbmx5IDEtM1xuICAgIC8vIFZhbHVlIG11c3QgYmUgcmVjYWxjdWxhdGVkIGlmIGZpc2NhbCB5ZWFyIGRvZXNuJ3Qgc3RhcnQgZnJvbSBmaXJzdCBtb250aFxuICAgIC8vIEluIG1vbnRoW10gd2UgaGF2ZSBVVEMgdmFsdWVzLCB3ZSBuZWVkIHRvIHNob3cgZmlzY2FsIG1vbnRoIGluIHNlbGVjdGlvbi5cbiAgICAvLyBFeGFtcGxlOiBXZSB3YW50IHRvIHN0YXJ0IHRhc2sgaW4gM3JkIG1vbnRoIG9uIGVhY2ggZmlzY2FsIHF1YXJ0ZXIuXG4gICAgLy8gSWYgZmlzY2FsX3llYXJfc3RhcnRzX2Zyb20gPSAzIFRoZW4gbW9udGggc2hvdWxkIGJlIFsyLDUsOCwxMV0uXG4gICAgLy8gRmlyc3QgZmlzY2FsIHF1YXJ0ZXIgd2lsbCBiZSBmaW5pc2hlZCBpbiBtb250aCA1LCAyLTgsIDMtMTEsIDQtMihuZXh0IHllYXIpLlxuICAgIC8vIEZpc2NhbCBtb250aCA9IFsxMiwzLDYsOV0uIFByZXNlbnRlZCB2YWx1ZSBmb3IgdXNlcjogMy5cbiAgICBpZiAoZmlzY2FsT2Zmc2V0KSB7XG4gICAgICAgIG1vbnRoQXJyID0gX21hcChtb250aEFyciwgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGl0ZW0gLSBmaXNjYWxPZmZzZXQ7XG4gICAgICAgICAgICByZXR1cm4gdmFsIDwgMSA/IHZhbCArIDEyIDogdmFsO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9udGhBcnIgPSBfc29ydEJ5KG1vbnRoQXJyKTtcbiAgICAgICAgcXVhcnRlck1vbnRoID0gbW9udGhBcnJbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1YXJ0ZXJNb250aDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRRdWFydGVyU3RyaW5nQnlNb250aEluUXVhcnRlciA9IChmaXNjYWxZZWFyID0gMSwgbW9udGg6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgaWYgKCFtb250aCkge1xuICAgICAgICByZXR1cm4gJyonO1xuICAgIH1cblxuICAgIGxldCBtb250aEFyciA9IFttb250aCwgbW9udGggKyAzLCBtb250aCArIDYsIG1vbnRoICsgOV07XG4gICAgY29uc3QgZmlzY2FsT2Zmc2V0ID0gZmlzY2FsWWVhciAtIDE7XG5cbiAgICBpZiAoZmlzY2FsT2Zmc2V0KSB7XG4gICAgICAgIG1vbnRoQXJyID0gX21hcChtb250aEFyciwgKG1vbnRoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBtb250aCArIGZpc2NhbE9mZnNldDtcbiAgICAgICAgICAgIHJldHVybiB2YWwgPiAxMiA/IHZhbCAtIDEyIDogdmFsO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9udGhBcnIgPSBfc29ydEJ5KG1vbnRoQXJyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW9udGhBcnIuam9pbignLCcpO1xufTtcblxuZXhwb3J0IGNvbnN0IENyb25FZGl0b3JEZWZhdWx0Q29uZmlnQnlQZXJpb2QgPSB7XG4gICAgW0Nyb25FZGl0b3JQZXJpb2QuSE9VUl06IChmWT86IG51bWJlcikgPT4gYDAgMTIvMSAqICogKiAke0xPQ0FMX1RJTUVfWk9ORV9PRkZTRVR9YCxcbiAgICBbQ3JvbkVkaXRvclBlcmlvZC5EQVldOiAoZlk/OiBudW1iZXIpID0+IGAwIDEyICogKiAqICR7TE9DQUxfVElNRV9aT05FX09GRlNFVH1gLFxuICAgIFtDcm9uRWRpdG9yUGVyaW9kLldFRUtdOiAoZlk/OiBudW1iZXIpID0+IGAwIDEyICogKiAwICR7TE9DQUxfVElNRV9aT05FX09GRlNFVH1gLFxuICAgIFtDcm9uRWRpdG9yUGVyaW9kLk1PTlRIXTogKGZZPzogbnVtYmVyKSA9PiBgMCAxMiAxICogKiAke0xPQ0FMX1RJTUVfWk9ORV9PRkZTRVR9YCxcbiAgICBbQ3JvbkVkaXRvclBlcmlvZC5RVUFSVEVSXTogKGZZPzogbnVtYmVyKSA9PiBgMCAxMiAxICR7Z2V0SW5pdGlhbFF1YXJ0ZXJBcnJheShmWSkuam9pbignLCcpfSAqICR7TE9DQUxfVElNRV9aT05FX09GRlNFVH1gLFxuICAgIFtDcm9uRWRpdG9yUGVyaW9kLllFQVJdOiAoZlk/OiBudW1iZXIpID0+IGAwIDEyIDEgMSAqICR7TE9DQUxfVElNRV9aT05FX09GRlNFVH1gLFxufTtcblxuZXhwb3J0IGNvbnN0IGdldENyb25UeXBlQXNQZXJpb2RMYWJlbCA9ICh0eXBlOiBDcm9uRWRpdG9yUGVyaW9kKTogc3RyaW5nID0+XG4gICAgdHlwZSA9PT0gQ3JvbkVkaXRvclBlcmlvZC5EQVkgPyAnRGFpbHknIDogdHlwZSArICdseSc7XG5cbmV4cG9ydCBlbnVtIENyb25UaW1lUGVyaW9kIHtcbiAgICBBTSA9ICdBTScsXG4gICAgUE0gPSAnUE0nLFxufVxuXG5leHBvcnQgY29uc3QgSE9VUlNfRElWSVNJQkxFX0lOVE9fREFZID0gW1xuICAgIHsgbGFiZWw6ICcxJywgdmFsdWU6IDEgfSxcbiAgICB7IGxhYmVsOiAnMicsIHZhbHVlOiAyIH0sXG4gICAgeyBsYWJlbDogJzMnLCB2YWx1ZTogMyB9LFxuICAgIHsgbGFiZWw6ICc0JywgdmFsdWU6IDQgfSxcbiAgICB7IGxhYmVsOiAnNicsIHZhbHVlOiA2IH0sXG4gICAgeyBsYWJlbDogJzgnLCB2YWx1ZTogOCB9LFxuICAgIHsgbGFiZWw6ICcxMicsIHZhbHVlOiAxMiB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IE1PTlRIX09GX1lFQVJfQVJSQVkgPSBbXG4gICAgeyBsYWJlbDogJ0phbnVhcnknLCB2YWx1ZTogMSB9LFxuICAgIHsgbGFiZWw6ICdGZWJydWFyeScsIHZhbHVlOiAyIH0sXG4gICAgeyBsYWJlbDogJ01hcmNoJywgdmFsdWU6IDMgfSxcbiAgICB7IGxhYmVsOiAnQXByaWwnLCB2YWx1ZTogNCB9LFxuICAgIHsgbGFiZWw6ICdNYXknLCB2YWx1ZTogNSB9LFxuICAgIHsgbGFiZWw6ICdKdW5lJywgdmFsdWU6IDYgfSxcbiAgICB7IGxhYmVsOiAnSnVseScsIHZhbHVlOiA3IH0sXG4gICAgeyBsYWJlbDogJ0F1Z3VzdCcsIHZhbHVlOiA4IH0sXG4gICAgeyBsYWJlbDogJ1NlcHRlbWJlcicsIHZhbHVlOiA5IH0sXG4gICAgeyBsYWJlbDogJ09jdG9iZXInLCB2YWx1ZTogMTAgfSxcbiAgICB7IGxhYmVsOiAnTm92ZW1iZXInLCB2YWx1ZTogMTEgfSxcbiAgICB7IGxhYmVsOiAnRGVjZW1iZXInLCB2YWx1ZTogMTIgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBEQVlfT0ZfV0VFS19BUlJBWSA9IFtcbiAgICB7IGxhYmVsOiAnU3VuZGF5JywgdmFsdWU6IDAgfSxcbiAgICB7IGxhYmVsOiAnTW9uZGF5JywgdmFsdWU6IDEgfSxcbiAgICB7IGxhYmVsOiAnVHVlc2RheScsIHZhbHVlOiAyIH0sXG4gICAgeyBsYWJlbDogJ1dlZG5lc2RheScsIHZhbHVlOiAzIH0sXG4gICAgeyBsYWJlbDogJ1RodXJzZGF5JywgdmFsdWU6IDQgfSxcbiAgICB7IGxhYmVsOiAnRnJpZGF5JywgdmFsdWU6IDUgfSxcbiAgICB7IGxhYmVsOiAnU2F0dXJkYXknLCB2YWx1ZTogNiB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IE1PTlRIX09GX1FVQVJURVJfQVJSQVkgPSBbXG4gICAgeyBsYWJlbDogJzFzdCcsIHZhbHVlOiAxIH0sXG4gICAgeyBsYWJlbDogJzJuZCcsIHZhbHVlOiAyIH0sXG4gICAgeyBsYWJlbDogJzNyZCcsIHZhbHVlOiAzIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgQUxMT1dFRF9QRVJJT0RTID0gT2JqZWN0LnZhbHVlcyhDcm9uRWRpdG9yUGVyaW9kKTtcblxuZXhwb3J0IGNvbnN0IGFkZE9yZGluYWxTdWZmaXggPSAobnVtOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHN1ZmZpeGVzID0gWyd0aCcsICdzdCcsICduZCcsICdyZCddO1xuICAgIGNvbnN0IHYgPSBudW0gJSAxMDA7XG5cbiAgICByZXR1cm4gbnVtICsgKHN1ZmZpeGVzWyh2IC0gMjApICUgMTBdIHx8IHN1ZmZpeGVzW3ZdIHx8IHN1ZmZpeGVzWzBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBEQVlfT0ZfTU9OVEhfQVJSQVk6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IFREYXlPZk1vbnRoIH1bXSA9IFtcbiAgICAuLi5uZXcgQXJyYXkoMjgpLmZpbGwobnVsbCkubWFwKChfLCBpKSA9PiAoe1xuICAgICAgICBsYWJlbDogYWRkT3JkaW5hbFN1ZmZpeChpICsgMSksXG4gICAgICAgIHZhbHVlOiBpICsgMSxcbiAgICB9KSksXG4gICAgeyBsYWJlbDogJ3RoZSBsYXN0JywgdmFsdWU6ICdMJyB9LFxuXTtcblxuZXhwb3J0IGNsYXNzIENyb25FZGl0b3IgaW1wbGVtZW50cyBJQ3JvbkVkaXRvciB7XG4gICAgcHJpdmF0ZSBfZmlzY2FsWWVhclN0YXJ0ID0gMTtcbiAgICBwcml2YXRlIF9wZXJpb2Q6IFRDcm9uRWRpdG9yUGVyaW9kO1xuXG4gICAgZXZlcnlYSG91cnM6IG51bWJlciA9IDE7XG4gICAgZGF5T2ZNb250aDogVERheU9mTW9udGggPSAxO1xuICAgIGRheU9mV2VlazogbnVtYmVyID0gMTtcbiAgICBldmVyeTogQ3JvbkVkaXRvclBlcmlvZCA9IENyb25FZGl0b3JQZXJpb2QuWUVBUjtcbiAgICBob3VyOiBudW1iZXIgPSAxMjtcbiAgICBtaW51dGU6IG51bWJlciA9IDA7XG4gICAgbW9udGg6IG51bWJlciA9IDE7XG4gICAgdGltZVBlcmlvZDogQ3JvblRpbWVQZXJpb2QgPSBDcm9uVGltZVBlcmlvZC5QTTtcbiAgICB0aW1lWm9uZTogbnVtYmVyID0gTE9DQUxfVElNRV9aT05FX09GRlNFVDtcblxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnBhcnNlQ3JvblN0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jcm9uRWRpdG9yT2JqZWN0VG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHZhbHVlT2JqZWN0KHZhbHVlT2JqZWN0OiBJQ3JvbkVkaXRvcikge1xuICAgICAgICBpZiAoIXZhbHVlT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2ZXJ5ID0gdmFsdWVPYmplY3QuZXZlcnk7XG4gICAgICAgIHRoaXMubWludXRlID0gdmFsdWVPYmplY3QubWludXRlO1xuICAgICAgICB0aGlzLmhvdXIgPSB2YWx1ZU9iamVjdC5ob3VyO1xuICAgICAgICB0aGlzLmRheU9mTW9udGggPSB2YWx1ZU9iamVjdC5kYXlPZk1vbnRoO1xuICAgICAgICB0aGlzLm1vbnRoID0gdmFsdWVPYmplY3QubW9udGg7XG4gICAgICAgIHRoaXMuZGF5T2ZXZWVrID0gdmFsdWVPYmplY3QuZGF5T2ZXZWVrO1xuICAgICAgICB0aGlzLnRpbWVQZXJpb2QgPSB2YWx1ZU9iamVjdC50aW1lUGVyaW9kO1xuICAgICAgICB0aGlzLnRpbWVab25lID0gdmFsdWVPYmplY3QudGltZVpvbmU7XG4gICAgICAgIHRoaXMuZXZlcnlYSG91cnMgPSB2YWx1ZU9iamVjdC5ldmVyeVhIb3VycztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZhbHVlT2JqZWN0KCk6IElDcm9uRWRpdG9yIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZXJ5OiB0aGlzLmV2ZXJ5LFxuICAgICAgICAgICAgbWludXRlOiB0aGlzLm1pbnV0ZSxcbiAgICAgICAgICAgIGhvdXI6IHRoaXMuaG91cixcbiAgICAgICAgICAgIGRheU9mTW9udGg6IHRoaXMuZGF5T2ZNb250aCxcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLm1vbnRoLFxuICAgICAgICAgICAgZGF5T2ZXZWVrOiB0aGlzLmRheU9mV2VlayxcbiAgICAgICAgICAgIHRpbWVQZXJpb2Q6IHRoaXMudGltZVBlcmlvZCxcbiAgICAgICAgICAgIHRpbWVab25lOiB0aGlzLnRpbWVab25lLFxuICAgICAgICAgICAgZXZlcnlYSG91cnM6IHRoaXMuZXZlcnlYSG91cnMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IodmFsdWU/OiBzdHJpbmcsIGZpc2NhbFllYXJTdGFydDogbnVtYmVyID0gMSwgcGVyaW9kPzogVENyb25FZGl0b3JQZXJpb2QpIHtcbiAgICAgICAgdGhpcy5fZmlzY2FsWWVhclN0YXJ0ID0gZmlzY2FsWWVhclN0YXJ0O1xuICAgICAgICB0aGlzLl9wZXJpb2QgPSBwZXJpb2Q7XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlQ3JvblN0cmluZyh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCBbbWludXRlLCBob3VyLCBkYXlPZk1vbnRoLCBtb250aCwgZGF5T2ZXZWVrLCB0aW1lWm9uZV06IGFueSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgICAgICAgbWludXRlID0gbWludXRlICE9PSAnKicgPyBOdW1iZXIobWludXRlLnNwbGl0KCcsJylbMF0pIDogMDtcbiAgICAgICAgbGV0IGV2ZXJ5WEhvdXJzO1xuICAgICAgICBpZiAodHlwZW9mIGhvdXIgPT09ICdzdHJpbmcnICYmIGhvdXIuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICAgICAgLy8gQ2FzZSAxOiBJZiBgaG91cmAgaW5jbHVkZXMgLyB0byBpbmRpY2F0ZSBzdGVwIGNoYW5nZVxuICAgICAgICAgICAgZXZlcnlYSG91cnMgPSBOdW1iZXIoaG91ci5zcGxpdCgnLycpWzFdKTtcbiAgICAgICAgICAgIGhvdXIgPSBbTnVtYmVyKGhvdXIuc3BsaXQoJy8nKVswXSldO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgIT09ICcqJykge1xuICAgICAgICAgICAgLy8gQ2FzZSAyOiBJZiBgaG91cmAgaXMgYSBzaW5nbGUgbnVtYmVyIChidXQgbm90IFwiKlwiKSwgZW5zdXJlIGl0J3MgYSBudW1iZXJcbiAgICAgICAgICAgIGhvdXIgPSBbTnVtYmVyKGhvdXIuc3BsaXQoJywnKVswXSldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2FzZSAzOiBJZiBgaG91cmAgaXMgXCIqXCIsIHNldCBpdCB0byAwXG4gICAgICAgICAgICBob3VyID0gWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF5T2ZNb250aCA9IGRheU9mTW9udGggPT09ICdMJyA/IFsnTCddIDogdGhpcy5wYXJzZUNyb25BcnJheShkYXlPZk1vbnRoKTtcbiAgICAgICAgbW9udGggPSB0aGlzLnBhcnNlQ3JvbkFycmF5KG1vbnRoKTtcbiAgICAgICAgZGF5T2ZXZWVrID0gdGhpcy5wYXJzZUNyb25BcnJheShkYXlPZldlZWspO1xuICAgICAgICB0aW1lWm9uZSA9IHRpbWVab25lID8gTnVtYmVyKHRpbWVab25lKSA6IDA7XG5cbiAgICAgICAgbGV0IHR5cGU7XG5cbiAgICAgICAgaWYgKHRoaXMuX3BlcmlvZCkge1xuICAgICAgICAgICAgdHlwZSA9IHRoaXMuX3BlcmlvZDtcbiAgICAgICAgfSBlbHNlIGlmIChtb250aD8ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdHlwZSA9IENyb25FZGl0b3JQZXJpb2QuUVVBUlRFUjtcbiAgICAgICAgfSBlbHNlIGlmIChtb250aD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0eXBlID0gQ3JvbkVkaXRvclBlcmlvZC5ZRUFSO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mTW9udGg/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdHlwZSA9IENyb25FZGl0b3JQZXJpb2QuTU9OVEg7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZXZWVrPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHR5cGUgPSBDcm9uRWRpdG9yUGVyaW9kLldFRUs7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlcnlYSG91cnMpIHtcbiAgICAgICAgICAgIHR5cGUgPSBDcm9uRWRpdG9yUGVyaW9kLkhPVVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0eXBlID0gQ3JvbkVkaXRvclBlcmlvZC5EQVk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2ZXJ5ID0gdHlwZTtcbiAgICAgICAgdGhpcy5ldmVyeVhIb3VycyA9IGV2ZXJ5WEhvdXJzID8gZXZlcnlYSG91cnMgOiAxO1xuICAgICAgICB0aGlzLm1pbnV0ZSA9IG1pbnV0ZTtcbiAgICAgICAgdGhpcy5ob3VyID0gaG91clswXSAlIDEyIHx8IDEyO1xuICAgICAgICB0aGlzLmRheU9mTW9udGggPSBkYXlPZk1vbnRoPy5bMF0gfHwgbnVsbDtcbiAgICAgICAgdGhpcy5tb250aCA9XG4gICAgICAgICAgICB0eXBlID09PSBDcm9uRWRpdG9yUGVyaW9kLlFVQVJURVIgPyBnZXRTdGFydE1vbnRoSW5RdWFydGVyKHRoaXMuX2Zpc2NhbFllYXJTdGFydCwgbW9udGgpIDogbW9udGg/LlswXSB8fCBudWxsO1xuICAgICAgICB0aGlzLmRheU9mV2VlayA9IHR5cGVvZiBkYXlPZldlZWs/LlswXSA9PT0gJ251bWJlcicgPyBkYXlPZldlZWtbMF0gOiBudWxsO1xuICAgICAgICB0aGlzLnRpbWVQZXJpb2QgPSBob3VyWzBdID49IDEyID8gQ3JvblRpbWVQZXJpb2QuUE0gOiBDcm9uVGltZVBlcmlvZC5BTTtcbiAgICAgICAgdGhpcy50aW1lWm9uZSA9IHRpbWVab25lO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VDcm9uQXJyYXkoc3RyOiBzdHJpbmcpOiBudW1iZXJbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gc3RyICE9PSAnKicgPyBzdHIuc3BsaXQoJywnKS5tYXAoKHYpID0+IE51bWJlcih2KSkgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcm9uRWRpdG9yT2JqZWN0VG9TdHJpbmcoZXhjbHVkZVRpbWV6b25lOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBtaW51dGUgPSB0aGlzLm1pbnV0ZSB8fCAwO1xuICAgICAgICBsZXQgaG91ciA9IHRoaXMuaG91ciB8fCAwO1xuICAgICAgICBob3VyID0gdGhpcy5ob3Vyc1RvMjRGb3JtYXQoaG91cik7XG4gICAgICAgIGxldCBob3VyT3JIb3Vyczogc3RyaW5nIHwgbnVtYmVyID0gaG91cjtcbiAgICAgICAgY29uc3QgZGF5T2ZNb250aCA9IHRoaXMuZGF5T2ZNb250aCB8fCAnKic7XG4gICAgICAgIGNvbnN0IG1vbnRoID1cbiAgICAgICAgICAgIHRoaXMuX3BlcmlvZCA9PT0gQ3JvbkVkaXRvclBlcmlvZC5RVUFSVEVSIHx8IHRoaXMuZXZlcnkgPT09IENyb25FZGl0b3JQZXJpb2QuUVVBUlRFUlxuICAgICAgICAgICAgICAgID8gZ2V0UXVhcnRlclN0cmluZ0J5TW9udGhJblF1YXJ0ZXIodGhpcy5fZmlzY2FsWWVhclN0YXJ0LCB0aGlzLm1vbnRoKVxuICAgICAgICAgICAgICAgIDogdGhpcy5tb250aCB8fCAnKic7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IHR5cGVvZiB0aGlzLmRheU9mV2VlayA9PT0gJ251bWJlcicgPyB0aGlzLmRheU9mV2VlayA6ICcqJztcblxuICAgICAgICBpZiAodGhpcy5ldmVyeSA9PT0gQ3JvbkVkaXRvclBlcmlvZC5IT1VSKSB7XG4gICAgICAgICAgICBob3VyT3JIb3VycyA9IGAke2hvdXJ9LyR7dGhpcy5ldmVyeVhIb3Vyc31gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHttaW51dGV9ICR7aG91ck9ySG91cnN9ICR7ZGF5T2ZNb250aH0gJHttb250aH0gJHtkYXlPZldlZWt9JHshZXhjbHVkZVRpbWV6b25lID8gYCAke3RoaXMudGltZVpvbmV9YCA6ICcnfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGhvdXJzVG8yNEZvcm1hdChob3VyOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy50aW1lUGVyaW9kID09PSBDcm9uVGltZVBlcmlvZC5QTSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50aW1lUGVyaW9kID09PSBDcm9uVGltZVBlcmlvZC5BTSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlYWRhYmxlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RyaW5nID0gJ0V2ZXJ5ICc7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmV2ZXJ5KSB7XG4gICAgICAgICAgICBjYXNlIENyb25FZGl0b3JQZXJpb2QuWUVBUjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoTGFiZWwgPSBNT05USF9PRl9ZRUFSX0FSUkFZW3RoaXMubW9udGggLSAxXS5sYWJlbDtcbiAgICAgICAgICAgICAgICB2aXNpYmxlU3RyaW5nICs9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF5T2ZNb250aCA9PT0gJ0wnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBsYXN0IGRheSBvZiAke21vbnRoTGFiZWx9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYCR7bW9udGhMYWJlbH0gJHtEQVlfT0ZfTU9OVEhfQVJSQVlbKHRoaXMuZGF5T2ZNb250aCBhcyBudW1iZXIpIC0gMV0/LmxhYmVsfSBgO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBDcm9uRWRpdG9yUGVyaW9kLlFVQVJURVI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX09GX1FVQVJURVJfQVJSQVlbdGhpcy5tb250aCAtIDFdLmxhYmVsO1xuICAgICAgICAgICAgICAgIHZpc2libGVTdHJpbmcgKz1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXlPZk1vbnRoID09PSAnTCdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYHF1YXJ0ZXIgb24gdGhlIGxhc3QgZGF5IG9mIHRoZSAke21vbnRofSBtb250aCBvZiB0aGUgcXVhcnRlciBgXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBxdWFydGVyIG9uIHRoZSAke21vbnRofSBtb250aCBvZiB0aGUgcXVhcnRlciBvbiAke0RBWV9PRl9NT05USF9BUlJBWVsodGhpcy5kYXlPZk1vbnRoIGFzIG51bWJlcikgLSAxXT8ubGFiZWx9IGRheSBgO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBDcm9uRWRpdG9yUGVyaW9kLk1PTlRIOlxuICAgICAgICAgICAgICAgIHZpc2libGVTdHJpbmcgKz0gdGhpcy5kYXlPZk1vbnRoID09PSAnTCcgPyBgbW9udGggb24gdGhlIGxhc3QgZGF5IGAgOiBgbW9udGggb24gZGF5ICR7dGhpcy5kYXlPZk1vbnRofSBgO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDcm9uRWRpdG9yUGVyaW9kLldFRUs6XG4gICAgICAgICAgICAgICAgY29uc3QgZG93ID0gdHlwZW9mIHRoaXMuZGF5T2ZXZWVrID09PSAnbnVtYmVyJyA/IHRoaXMuZGF5T2ZXZWVrIDogMDtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXlJbmRleCA9IGRvdyA+PSA3ID8gMCA6IGRvdztcbiAgICAgICAgICAgICAgICB2aXNpYmxlU3RyaW5nICs9IGAke0RBWV9PRl9XRUVLX0FSUkFZW2RheUluZGV4XS5sYWJlbH0gYDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3JvbkVkaXRvclBlcmlvZC5EQVk6XG4gICAgICAgICAgICAgICAgdmlzaWJsZVN0cmluZyArPSBgZGF5IGA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENyb25FZGl0b3JQZXJpb2QuSE9VUjpcbiAgICAgICAgICAgICAgICB2aXNpYmxlU3RyaW5nICs9IGAke3RoaXMuZXZlcnlYSG91cnN9IGhvdXIke3RoaXMuZXZlcnlYSG91cnMgPiAxID8gJ3MnIDogJyd9IGA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtaW51dGVQcmVmaXggPSB0aGlzLm1pbnV0ZSA8IDEwID8gJzAnIDogJyc7XG4gICAgICAgIGNvbnN0IGhvdXJQcmVmaXggPSB0aGlzLmhvdXIgPCAxMCA/ICcwJyA6ICcnO1xuICAgICAgICB2aXNpYmxlU3RyaW5nICs9IGBhdCAke2hvdXJQcmVmaXggKyB0aGlzLmhvdXJ9OiR7bWludXRlUHJlZml4ICsgdGhpcy5taW51dGV9JHt0aGlzLnRpbWVQZXJpb2R9YDtcbiAgICAgICAgdmlzaWJsZVN0cmluZyArPSBgICgke0xPQ0FMX1RJTUVfWk9ORV9PRkZTRVQgPT09IHRoaXMudGltZVpvbmUgPyAnTG9jYWwgVGltZScgOiBnZXRHTVRMYWJlbCgtdGhpcy50aW1lWm9uZSl9KWA7XG4gICAgICAgIHJldHVybiB2aXNpYmxlU3RyaW5nO1xuICAgIH1cbn1cbiJdfQ==
|