barsa-calendar 1.0.430 → 1.0.433
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/esm2020/lib/barsa-calendar.module.mjs +12 -5
- package/esm2020/lib/calendar-container/calendar-container.component.mjs +46 -13
- package/esm2020/lib/calendar-header/calendar-header.component.mjs +5 -3
- package/esm2020/lib/calendar-month/calendar-month.component.mjs +3 -3
- package/esm2020/lib/calendar-selection-days/calendar-selection-days.component.mjs +7 -4
- package/esm2020/lib/calendar-week/calendar-week.component.mjs +3 -3
- package/esm2020/lib/date-time-picker/date-time-picker.component.mjs +16 -4
- package/esm2020/lib/day-number-box/day-number-box.component.mjs +3 -3
- package/esm2020/lib/event-button/event-button.component.mjs +3 -3
- package/fesm2015/barsa-calendar.mjs +86 -32
- package/fesm2015/barsa-calendar.mjs.map +1 -1
- package/fesm2020/barsa-calendar.mjs +84 -32
- package/fesm2020/barsa-calendar.mjs.map +1 -1
- package/lib/barsa-calendar.module.d.ts +19 -1
- package/lib/calendar-container/calendar-container.component.d.ts +10 -1
- package/lib/calendar-header/calendar-header.component.d.ts +3 -2
- package/lib/calendar-selection-days/calendar-selection-days.component.d.ts +2 -1
- package/lib/date-time-picker/date-time-picker.component.d.ts +4 -1
- package/package.json +1 -1
|
@@ -134,10 +134,10 @@ export class CalendarWeekComponent extends BaseComponent {
|
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
CalendarWeekComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarWeekComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CalendarService }], target: i0.ɵɵFactoryTarget.Component });
|
|
137
|
-
CalendarWeekComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarWeekComponent, selector: "bc-calendar-week", inputs: { weekDays: "weekDays", weekDaysMin: "weekDaysMin", today: "today", containerHeight: "containerHeight", calendarFields: "calendarFields", rtl: "rtl", inDialog: "inDialog", deviceSize: "deviceSize", moDataList: "moDataList", days: "days", canDelete: "canDelete", canAdd: "canAdd", canEdit: "canEdit" }, outputs: { editEvent: "editEvent", deleteEvent: "deleteEvent", showEvent: "showEvent", daySelect: "daySelect", dayClick: "dayClick" }, viewQueries: [{ propertyName: "tableTopEl", first: true, predicate: ["tableTop"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"table-container\"\r\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\r\n style=\"overflow-y: hidden; flex-shrink: 0\"\r\n #tableTop\r\n>\r\n <table fd-table class=\"table-top\" [compact]=\"true\" [attr.daysCount]=\"days.length\">\r\n <tbody fd-table-body>\r\n <tr fd-table-row class=\"week-days\">\r\n <td class=\"td-time\"></td>\r\n <td [attr.rtl]=\"rtl\" class=\"weekday-header\" *ngFor=\"let day of days\" fd-table-cell style=\"width: 100%\">\r\n {{ day.dayName }}\r\n </td>\r\n </tr>\r\n <tr fd-table-row class=\"week-numbers\">\r\n <td class=\"td-time\"></td>\r\n <td fd-table-cell *ngFor=\"let day of days\" [attr.rtl]=\"rtl\">\r\n <bc-day-number-box\r\n [day]=\"day\"\r\n [isWeekMode]=\"true\"\r\n [isSingleDay]=\"days.length === 1\"\r\n (dayClick)=\"onDayClick(day)\"\r\n ></bc-day-number-box>\r\n </td>\r\n </tr>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderDayTasks;\r\n context: {\r\n $implicit: weekTasksArray,\r\n maxRowTasks: maxRowTasks,\r\n weekIndex: 0\r\n }\r\n \"\r\n ></ng-container>\r\n </tbody>\r\n </table>\r\n</div>\r\n<ng-template #renderDayTasks let-weekTasks let-maxRowTasks=\"maxRowTasks\" let-weekIndex=\"weekIndex\">\r\n <ng-container *ngFor=\"let rowTask of weekTasks | keyvalue; let i = index\">\r\n <tr fd-table-row class=\"task-row\">\r\n <td fd-table-cell class=\"fd-time\" style=\"border: none\"></td>\r\n <ng-container *ngFor=\"let task of weekTasks[i]; let dayIndex = index\">\r\n <td\r\n fd-table-cell\r\n *ngIf=\"task.colSpan && dayIndex < days.length\"\r\n [attr.colspan]=\"task.colSpan > days.length ? days.length : task.colSpan\"\r\n class=\"td-button\"\r\n [attr.hasevent]=\"!!task.event\"\r\n >\r\n <bc-event-button\r\n *ngIf=\"task.event && !task.inDay; else newDaySelect\"\r\n [task]=\"task\"\r\n [rtl]=\"rtl\"\r\n [canDelete]=\"canDelete\"\r\n [canEdit]=\"canEdit\"\r\n [calendarFields]=\"calendarFields\"\r\n [deviceSize]=\"deviceSize\"\r\n (deleteEvent)=\"deleteEvent.emit($event)\"\r\n (editEvent)=\"editEvent.emit($event)\"\r\n ></bc-event-button>\r\n <ng-template #newDaySelect>\r\n <div style=\"width: 100%; height: 100%\" [attr.newDay]=\"true\"></div>\r\n </ng-template>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n</ng-template>\r\n<div\r\n class=\"table-container\"\r\n style=\"overflow-y: hidden; overflow-x: auto; flex-grow: 1\"\r\n [style.height.px]=\"inDialog ? containerHeight : null\"\r\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\r\n>\r\n <table fd-table-body class=\"table-content\" [compact]=\"true\">\r\n <tbody>\r\n <tr class=\"tr-time\" style=\"height: 0rem\">\r\n <td class=\"td-time\" style=\"height: 0rem\"></td>\r\n <td [colspan]=\"days.length\" style=\"position: relative\" style=\"height: 0rem\">\r\n <div class=\"tasks-wrapper\">\r\n <div *ngFor=\"let hour of hours\" class=\"row-border\"></div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr fd-table-row style=\"height: 100%\">\r\n <td fd-table-cell class=\"td-time\">\r\n <div class=\"calc-time\">\r\n <div *ngFor=\"let hour of hours\">{{ hour }}</div>\r\n </div>\r\n </td>\r\n <td *ngFor=\"let day of days\" fd-table-cell (click)=\"onColumnClick($event, day)\">\r\n <div style=\"position: relative; width: 100%; height: 100%\">\r\n <ng-container *ngFor=\"let task of day.tasks; let index = index\">\r\n <bc-event-button\r\n (click)=\"onEventButton($event)\"\r\n *ngIf=\"task.inDay\"\r\n [style.background]=\"task.event[calendarFields.Color]\"\r\n [style.top.px]=\"task.top\"\r\n [style.right]=\"rtl ? 'calc(' + index * (100 / day.tasks.length) + '%)' : null\"\r\n [style.left]=\"rtl ? null : 'calc(' + index * (100 / day.tasks.length) + '%)'\"\r\n [style.width]=\"'calc(100% - ' + index * (100 / day.tasks.length) + '%)'\"\r\n [style.height.px]=\"task.height\"\r\n [style.maxHeight.px]=\"task.height\"\r\n [style.opacity]=\"task.opacity\"\r\n [style.zIndex]=\"index\"\r\n [buttonTemplate]=\"eventButtonTemplate\"\r\n class=\"task-day\"\r\n [task]=\"task\"\r\n [index]=\"index\"\r\n [deviceSize]=\"deviceSize\"\r\n [calendarFields]=\"calendarFields\"\r\n [deviceSize]=\"deviceSize\"\r\n [canDelete]=\"canDelete\"\r\n [canEdit]=\"canEdit\"\r\n (deleteEvent)=\"deleteEvent.emit($event)\"\r\n (editEvent)=\"editEvent.emit($event)\"\r\n (openPopoverChange)=\"onOpenPopoverChange($event)\"\r\n ></bc-event-button>\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n<ng-template\r\n #eventButtonTemplate\r\n let-task\r\n let-popover=\"popover\"\r\n let-calendarFields=\"calendarFields\"\r\n let-onButtonClick=\"onButtonClick\"\r\n>\r\n <button\r\n [style.background]=\"task.event[calendarFields.Color]\"\r\n class=\"task-title\"\r\n [style.border]=\"'1px solid white'\"\r\n fd-button\r\n [compact]=\"true\"\r\n [fdType]=\"'emphasized'\"\r\n (click)=\"onButtonClick(popover)\"\r\n [label]=\"task.height > 49 ? '' : task.event[calendarFields.Title] + ' ' + (task | fromToTime)\"\r\n >\r\n <ng-container *ngIf=\"task.height > 49\">\r\n <span class=\"ellipsis\">{{ task.event[calendarFields.Title] }}</span>\r\n <span class=\"ellipsis\">{{ task | fromToTime }}</span>\r\n </ng-container>\r\n </button>\r\n</ng-template>\r\n", styles: [":host{display:flex;height:95%;width:100%;flex-direction:column;align-items:stretch;justify-content:stretch}table.table-top{border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}table td{overflow:hidden}thead tr{border-bottom:none!important}thead tr th{text-align:center!important;background-color:var(--sapList_Background, #fff)}tbody tr td{padding-top:5px}tbody tr:first-child td{padding-top:0}.fd-table__cell{padding:0 .5rem!important}.table-top{table-layout:fixed}.table-top td{padding-right:1px!important;padding-left:1px!important}.tr-time{height:1px;max-height:1px!important;width:100%}.tr-time td{height:1px!important;max-height:1px!important;padding:0!important}.task-row td{height:1.425rem!important;padding:0!important}.table-content{width:100%;border-spacing:0;position:relative}.table-content .tasks-wrapper{position:absolute;opacity:.3;height:100%;width:calc(100% - 50px)}.table-content .td-time{padding:0!important}.table-content .td-time .calc-time{display:flex;flex-direction:column;height:100%;justify-content:start;align-items:center}.table-content .td-time .calc-time div{height:50px;border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);width:100%;display:flex;justify-content:center}.table-content .td-time tbody{border-spacing:0}.td-time{width:50px!important;max-width:50px!important}.row-border{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);height:50px}.task-day{position:absolute!important;display:flex;flex-direction:column;align-items:start}.weekday-header td,.week-days td,.week-numbers td{text-align:right}table[dayscount=\"1\"] .week-days td[rtl=true],table[dayscount=\"1\"] .week-numbers td[rtl=true]{text-align:right!important}table[dayscount=\"1\"] .week-days td[rtl=false],table[dayscount=\"1\"] .week-numbers td[rtl=false]{text-align:left!important}table[dayscount=\"1\"] .week-days td,table[dayscount=\"1\"] .week-numbers td{padding-left:1rem!important;padding-right:1rem!important}table[dayscount=\"1\"] .week-days td.weekday-header,table[dayscount=\"1\"] .week-numbers td.weekday-header{padding-left:2rem!important;padding-right:2rem!important}.week-days td{border:none;text-align:center;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.week-numbers td{border:none;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.td-button{border:none!important;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)!important;padding:1px!important}.task-title{display:flex;flex-direction:column;align-items:start!important;font-weight:400;width:100%;max-width:100%;min-width:100%;height:100%;max-height:100%;min-height:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: i3.DeprecatedButtonContentDensityDirective, selector: "[fd-button][compact]" }, { kind: "component", type: i4.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i4.TableBodyDirective, selector: "[fdTableBody], [fd-table-body]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i4.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i4.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "tabindex", "hoverable", "fitContent", "noPadding", "noData", "key", "cellFocusedEventAnnouncer"] }, { kind: "directive", type: i4.DeprecatedTableCompactDirective, selector: "table[fd-table][compact]" }, { kind: "component", type: i5.DayNumberBoxComponent, selector: "bc-day-number-box", inputs: ["isWeekMode", "isSingleDay", "day", "isPickerMode", "itemInRange", "isActive"], outputs: ["dayClick", "dayMouseDown", "dayMouseUp", "dayMouseMove"] }, { kind: "component", type: i6.EventButtonComponent, selector: "bc-event-button", inputs: ["buttonTemplate", "calendarFields", "task", "rtl", "canDelete", "canEdit", "index", "deviceSize"], outputs: ["deleteEvent", "editEvent", "openPopoverChange"] }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i7.FromToTimePipe, name: "fromToTime" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
137
|
+
CalendarWeekComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarWeekComponent, selector: "bc-calendar-week", inputs: { weekDays: "weekDays", weekDaysMin: "weekDaysMin", today: "today", containerHeight: "containerHeight", calendarFields: "calendarFields", rtl: "rtl", inDialog: "inDialog", deviceSize: "deviceSize", moDataList: "moDataList", days: "days", canDelete: "canDelete", canAdd: "canAdd", canEdit: "canEdit" }, outputs: { editEvent: "editEvent", deleteEvent: "deleteEvent", showEvent: "showEvent", daySelect: "daySelect", dayClick: "dayClick" }, viewQueries: [{ propertyName: "tableTopEl", first: true, predicate: ["tableTop"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"table-container\"\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\n style=\"overflow-y: hidden; flex-shrink: 0\"\n #tableTop\n>\n <table fd-table class=\"table-top\" [compact]=\"true\" [attr.daysCount]=\"days.length\">\n <tbody fd-table-body>\n <tr fd-table-row class=\"week-days\">\n <td class=\"td-time\"></td>\n <td [attr.rtl]=\"rtl\" class=\"weekday-header\" *ngFor=\"let day of days\" fd-table-cell style=\"width: 100%\">\n {{ day.dayName }}\n </td>\n </tr>\n <tr fd-table-row class=\"week-numbers\">\n <td class=\"td-time\"></td>\n <td fd-table-cell *ngFor=\"let day of days\" [attr.rtl]=\"rtl\">\n <bc-day-number-box\n [day]=\"day\"\n [isWeekMode]=\"true\"\n [isSingleDay]=\"days.length === 1\"\n (dayClick)=\"onDayClick(day)\"\n ></bc-day-number-box>\n </td>\n </tr>\n <ng-container\n *ngTemplateOutlet=\"\n renderDayTasks;\n context: {\n $implicit: weekTasksArray,\n maxRowTasks: maxRowTasks,\n weekIndex: 0\n }\n \"\n ></ng-container>\n </tbody>\n </table>\n</div>\n<ng-template #renderDayTasks let-weekTasks let-maxRowTasks=\"maxRowTasks\" let-weekIndex=\"weekIndex\">\n <ng-container *ngFor=\"let rowTask of weekTasks | keyvalue; let i = index\">\n <tr fd-table-row class=\"task-row\">\n <td fd-table-cell class=\"fd-time\" style=\"border: none\"></td>\n <ng-container *ngFor=\"let task of weekTasks[i]; let dayIndex = index\">\n <td\n fd-table-cell\n *ngIf=\"task.colSpan && dayIndex < days.length\"\n [attr.colspan]=\"task.colSpan > days.length ? days.length : task.colSpan\"\n class=\"td-button\"\n [attr.hasevent]=\"!!task.event\"\n >\n <bc-event-button\n *ngIf=\"task.event && !task.inDay; else newDaySelect\"\n [task]=\"task\"\n [rtl]=\"rtl\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n ></bc-event-button>\n <ng-template #newDaySelect>\n <div style=\"width: 100%; height: 100%\" [attr.newDay]=\"true\"></div>\n </ng-template>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n</ng-template>\n<div\n class=\"table-container\"\n style=\"overflow-y: hidden; overflow-x: auto; flex-grow: 1; display: inline-table\"\n [style.height.px]=\"inDialog ? containerHeight : null\"\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\n>\n <table fd-table-body class=\"table-content\" [compact]=\"true\">\n <tbody>\n <tr class=\"tr-time\" style=\"height: 0rem\">\n <td class=\"td-time\" style=\"height: 0rem\"></td>\n <td [colspan]=\"days.length\" style=\"position: relative\" style=\"height: 0rem\">\n <div class=\"tasks-wrapper\">\n <div *ngFor=\"let hour of hours\" class=\"row-border\"></div>\n </div>\n </td>\n </tr>\n <tr fd-table-row style=\"height: 100%\">\n <td fd-table-cell class=\"td-time\">\n <div class=\"calc-time\">\n <div *ngFor=\"let hour of hours\">{{ hour }}</div>\n </div>\n </td>\n <td *ngFor=\"let day of days\" fd-table-cell (click)=\"onColumnClick($event, day)\">\n <div style=\"position: relative; width: 100%; height: 100%\">\n <ng-container *ngFor=\"let task of day.tasks; let index = index\">\n <bc-event-button\n (click)=\"onEventButton($event)\"\n *ngIf=\"task.inDay\"\n [style.background]=\"task.event[calendarFields.Color]\"\n [style.top.px]=\"task.top\"\n [style.right]=\"rtl ? 'calc(' + index * (100 / day.tasks.length) + '%)' : null\"\n [style.left]=\"rtl ? null : 'calc(' + index * (100 / day.tasks.length) + '%)'\"\n [style.width]=\"'calc(100% - ' + index * (100 / day.tasks.length) + '%)'\"\n [style.height.px]=\"task.height\"\n [style.maxHeight.px]=\"task.height\"\n [style.opacity]=\"task.opacity\"\n [style.zIndex]=\"index\"\n [buttonTemplate]=\"eventButtonTemplate\"\n class=\"task-day\"\n [task]=\"task\"\n [index]=\"index\"\n [deviceSize]=\"deviceSize\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n (openPopoverChange)=\"onOpenPopoverChange($event)\"\n ></bc-event-button>\n </ng-container>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n<ng-template\n #eventButtonTemplate\n let-task\n let-popover=\"popover\"\n let-calendarFields=\"calendarFields\"\n let-onButtonClick=\"onButtonClick\"\n>\n <button\n [style.background]=\"task.event[calendarFields.Color]\"\n class=\"task-title\"\n [style.border]=\"'1px solid white'\"\n fd-button\n [compact]=\"true\"\n [fdType]=\"'emphasized'\"\n (click)=\"onButtonClick(popover)\"\n [label]=\"task.height > 49 ? '' : task.event[calendarFields.Title] + ' ' + (task | fromToTime)\"\n >\n <ng-container *ngIf=\"task.height > 49\">\n <span class=\"ellipsis\">{{ task.event[calendarFields.Title] }}</span>\n <span class=\"ellipsis\">{{ task | fromToTime }}</span>\n </ng-container>\n </button>\n</ng-template>\n", styles: [":host{display:flex;height:95%;width:100%;flex-direction:column;align-items:stretch;justify-content:stretch}table.table-top{border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}table td{overflow:hidden}thead tr{border-bottom:none!important}thead tr th{text-align:center!important;background-color:var(--sapList_Background, #fff)}tbody tr td{padding-top:5px}tbody tr:first-child td{padding-top:0}.fd-table__cell{padding:0 .5rem!important}.table-top{table-layout:fixed}.table-top td{padding-right:1px!important;padding-left:1px!important}.tr-time{height:1px;max-height:1px!important;width:100%}.tr-time td{height:1px!important;max-height:1px!important;padding:0!important}.task-row td{height:1.425rem!important;padding:0!important}.table-content{width:100%;border-spacing:0;position:relative}.table-content .tasks-wrapper{position:absolute;opacity:.3;height:100%;width:calc(100% - 50px)}.table-content .td-time{padding:0!important}.table-content .td-time .calc-time{display:flex;flex-direction:column;height:100%;justify-content:start;align-items:center}.table-content .td-time .calc-time div{height:50px;border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);width:100%;display:flex;justify-content:center}.table-content .td-time tbody{border-spacing:0}.td-time{width:50px!important;max-width:50px!important}.row-border{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);height:50px}.task-day{position:absolute!important;display:flex;flex-direction:column;align-items:start}.weekday-header td,.week-days td,.week-numbers td{text-align:right}table[dayscount=\"1\"] .week-days td[rtl=true],table[dayscount=\"1\"] .week-numbers td[rtl=true]{text-align:right!important}table[dayscount=\"1\"] .week-days td[rtl=false],table[dayscount=\"1\"] .week-numbers td[rtl=false]{text-align:left!important}table[dayscount=\"1\"] .week-days td,table[dayscount=\"1\"] .week-numbers td{padding-left:1rem!important;padding-right:1rem!important}table[dayscount=\"1\"] .week-days td.weekday-header,table[dayscount=\"1\"] .week-numbers td.weekday-header{padding-left:2rem!important;padding-right:2rem!important}.week-days td{border:none;text-align:center;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.week-numbers td{border:none;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.td-button{border:none!important;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)!important;padding:1px!important}.task-title{display:flex;flex-direction:column;align-items:start!important;font-weight:400;width:100%;max-width:100%;min-width:100%;height:100%;max-height:100%;min-height:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: i3.DeprecatedButtonContentDensityDirective, selector: "[fd-button][compact]" }, { kind: "component", type: i4.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i4.TableBodyDirective, selector: "[fdTableBody], [fd-table-body]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i4.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i4.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "tabindex", "hoverable", "fitContent", "noPadding", "noData", "key", "cellFocusedEventAnnouncer"] }, { kind: "directive", type: i4.DeprecatedTableCompactDirective, selector: "table[fd-table][compact]" }, { kind: "component", type: i5.DayNumberBoxComponent, selector: "bc-day-number-box", inputs: ["isWeekMode", "isSingleDay", "day", "isPickerMode", "itemInRange", "isActive"], outputs: ["dayClick", "dayMouseDown", "dayMouseUp", "dayMouseMove"] }, { kind: "component", type: i6.EventButtonComponent, selector: "bc-event-button", inputs: ["buttonTemplate", "calendarFields", "task", "rtl", "canDelete", "canEdit", "index", "deviceSize"], outputs: ["deleteEvent", "editEvent", "openPopoverChange"] }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i7.FromToTimePipe, name: "fromToTime" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
138
138
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarWeekComponent, decorators: [{
|
|
139
139
|
type: Component,
|
|
140
|
-
args: [{ selector: 'bc-calendar-week', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"table-container\"\r\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\r\n style=\"overflow-y: hidden; flex-shrink: 0\"\r\n #tableTop\r\n>\r\n <table fd-table class=\"table-top\" [compact]=\"true\" [attr.daysCount]=\"days.length\">\r\n <tbody fd-table-body>\r\n <tr fd-table-row class=\"week-days\">\r\n <td class=\"td-time\"></td>\r\n <td [attr.rtl]=\"rtl\" class=\"weekday-header\" *ngFor=\"let day of days\" fd-table-cell style=\"width: 100%\">\r\n {{ day.dayName }}\r\n </td>\r\n </tr>\r\n <tr fd-table-row class=\"week-numbers\">\r\n <td class=\"td-time\"></td>\r\n <td fd-table-cell *ngFor=\"let day of days\" [attr.rtl]=\"rtl\">\r\n <bc-day-number-box\r\n [day]=\"day\"\r\n [isWeekMode]=\"true\"\r\n [isSingleDay]=\"days.length === 1\"\r\n (dayClick)=\"onDayClick(day)\"\r\n ></bc-day-number-box>\r\n </td>\r\n </tr>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderDayTasks;\r\n context: {\r\n $implicit: weekTasksArray,\r\n maxRowTasks: maxRowTasks,\r\n weekIndex: 0\r\n }\r\n \"\r\n ></ng-container>\r\n </tbody>\r\n </table>\r\n</div>\r\n<ng-template #renderDayTasks let-weekTasks let-maxRowTasks=\"maxRowTasks\" let-weekIndex=\"weekIndex\">\r\n <ng-container *ngFor=\"let rowTask of weekTasks | keyvalue; let i = index\">\r\n <tr fd-table-row class=\"task-row\">\r\n <td fd-table-cell class=\"fd-time\" style=\"border: none\"></td>\r\n <ng-container *ngFor=\"let task of weekTasks[i]; let dayIndex = index\">\r\n <td\r\n fd-table-cell\r\n *ngIf=\"task.colSpan && dayIndex < days.length\"\r\n [attr.colspan]=\"task.colSpan > days.length ? days.length : task.colSpan\"\r\n class=\"td-button\"\r\n [attr.hasevent]=\"!!task.event\"\r\n >\r\n <bc-event-button\r\n *ngIf=\"task.event && !task.inDay; else newDaySelect\"\r\n [task]=\"task\"\r\n [rtl]=\"rtl\"\r\n [canDelete]=\"canDelete\"\r\n [canEdit]=\"canEdit\"\r\n [calendarFields]=\"calendarFields\"\r\n [deviceSize]=\"deviceSize\"\r\n (deleteEvent)=\"deleteEvent.emit($event)\"\r\n (editEvent)=\"editEvent.emit($event)\"\r\n ></bc-event-button>\r\n <ng-template #newDaySelect>\r\n <div style=\"width: 100%; height: 100%\" [attr.newDay]=\"true\"></div>\r\n </ng-template>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n</ng-template>\r\n<div\r\n class=\"table-container\"\r\n style=\"overflow-y: hidden; overflow-x: auto; flex-grow: 1\"\r\n [style.height.px]=\"inDialog ? containerHeight : null\"\r\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\r\n>\r\n <table fd-table-body class=\"table-content\" [compact]=\"true\">\r\n <tbody>\r\n <tr class=\"tr-time\" style=\"height: 0rem\">\r\n <td class=\"td-time\" style=\"height: 0rem\"></td>\r\n <td [colspan]=\"days.length\" style=\"position: relative\" style=\"height: 0rem\">\r\n <div class=\"tasks-wrapper\">\r\n <div *ngFor=\"let hour of hours\" class=\"row-border\"></div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr fd-table-row style=\"height: 100%\">\r\n <td fd-table-cell class=\"td-time\">\r\n <div class=\"calc-time\">\r\n <div *ngFor=\"let hour of hours\">{{ hour }}</div>\r\n </div>\r\n </td>\r\n <td *ngFor=\"let day of days\" fd-table-cell (click)=\"onColumnClick($event, day)\">\r\n <div style=\"position: relative; width: 100%; height: 100%\">\r\n <ng-container *ngFor=\"let task of day.tasks; let index = index\">\r\n <bc-event-button\r\n (click)=\"onEventButton($event)\"\r\n *ngIf=\"task.inDay\"\r\n [style.background]=\"task.event[calendarFields.Color]\"\r\n [style.top.px]=\"task.top\"\r\n [style.right]=\"rtl ? 'calc(' + index * (100 / day.tasks.length) + '%)' : null\"\r\n [style.left]=\"rtl ? null : 'calc(' + index * (100 / day.tasks.length) + '%)'\"\r\n [style.width]=\"'calc(100% - ' + index * (100 / day.tasks.length) + '%)'\"\r\n [style.height.px]=\"task.height\"\r\n [style.maxHeight.px]=\"task.height\"\r\n [style.opacity]=\"task.opacity\"\r\n [style.zIndex]=\"index\"\r\n [buttonTemplate]=\"eventButtonTemplate\"\r\n class=\"task-day\"\r\n [task]=\"task\"\r\n [index]=\"index\"\r\n [deviceSize]=\"deviceSize\"\r\n [calendarFields]=\"calendarFields\"\r\n [deviceSize]=\"deviceSize\"\r\n [canDelete]=\"canDelete\"\r\n [canEdit]=\"canEdit\"\r\n (deleteEvent)=\"deleteEvent.emit($event)\"\r\n (editEvent)=\"editEvent.emit($event)\"\r\n (openPopoverChange)=\"onOpenPopoverChange($event)\"\r\n ></bc-event-button>\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n<ng-template\r\n #eventButtonTemplate\r\n let-task\r\n let-popover=\"popover\"\r\n let-calendarFields=\"calendarFields\"\r\n let-onButtonClick=\"onButtonClick\"\r\n>\r\n <button\r\n [style.background]=\"task.event[calendarFields.Color]\"\r\n class=\"task-title\"\r\n [style.border]=\"'1px solid white'\"\r\n fd-button\r\n [compact]=\"true\"\r\n [fdType]=\"'emphasized'\"\r\n (click)=\"onButtonClick(popover)\"\r\n [label]=\"task.height > 49 ? '' : task.event[calendarFields.Title] + ' ' + (task | fromToTime)\"\r\n >\r\n <ng-container *ngIf=\"task.height > 49\">\r\n <span class=\"ellipsis\">{{ task.event[calendarFields.Title] }}</span>\r\n <span class=\"ellipsis\">{{ task | fromToTime }}</span>\r\n </ng-container>\r\n </button>\r\n</ng-template>\r\n", styles: [":host{display:flex;height:95%;width:100%;flex-direction:column;align-items:stretch;justify-content:stretch}table.table-top{border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}table td{overflow:hidden}thead tr{border-bottom:none!important}thead tr th{text-align:center!important;background-color:var(--sapList_Background, #fff)}tbody tr td{padding-top:5px}tbody tr:first-child td{padding-top:0}.fd-table__cell{padding:0 .5rem!important}.table-top{table-layout:fixed}.table-top td{padding-right:1px!important;padding-left:1px!important}.tr-time{height:1px;max-height:1px!important;width:100%}.tr-time td{height:1px!important;max-height:1px!important;padding:0!important}.task-row td{height:1.425rem!important;padding:0!important}.table-content{width:100%;border-spacing:0;position:relative}.table-content .tasks-wrapper{position:absolute;opacity:.3;height:100%;width:calc(100% - 50px)}.table-content .td-time{padding:0!important}.table-content .td-time .calc-time{display:flex;flex-direction:column;height:100%;justify-content:start;align-items:center}.table-content .td-time .calc-time div{height:50px;border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);width:100%;display:flex;justify-content:center}.table-content .td-time tbody{border-spacing:0}.td-time{width:50px!important;max-width:50px!important}.row-border{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);height:50px}.task-day{position:absolute!important;display:flex;flex-direction:column;align-items:start}.weekday-header td,.week-days td,.week-numbers td{text-align:right}table[dayscount=\"1\"] .week-days td[rtl=true],table[dayscount=\"1\"] .week-numbers td[rtl=true]{text-align:right!important}table[dayscount=\"1\"] .week-days td[rtl=false],table[dayscount=\"1\"] .week-numbers td[rtl=false]{text-align:left!important}table[dayscount=\"1\"] .week-days td,table[dayscount=\"1\"] .week-numbers td{padding-left:1rem!important;padding-right:1rem!important}table[dayscount=\"1\"] .week-days td.weekday-header,table[dayscount=\"1\"] .week-numbers td.weekday-header{padding-left:2rem!important;padding-right:2rem!important}.week-days td{border:none;text-align:center;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.week-numbers td{border:none;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.td-button{border:none!important;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)!important;padding:1px!important}.task-title{display:flex;flex-direction:column;align-items:start!important;font-weight:400;width:100%;max-width:100%;min-width:100%;height:100%;max-height:100%;min-height:100%}\n"] }]
|
|
140
|
+
args: [{ selector: 'bc-calendar-week', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"table-container\"\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\n style=\"overflow-y: hidden; flex-shrink: 0\"\n #tableTop\n>\n <table fd-table class=\"table-top\" [compact]=\"true\" [attr.daysCount]=\"days.length\">\n <tbody fd-table-body>\n <tr fd-table-row class=\"week-days\">\n <td class=\"td-time\"></td>\n <td [attr.rtl]=\"rtl\" class=\"weekday-header\" *ngFor=\"let day of days\" fd-table-cell style=\"width: 100%\">\n {{ day.dayName }}\n </td>\n </tr>\n <tr fd-table-row class=\"week-numbers\">\n <td class=\"td-time\"></td>\n <td fd-table-cell *ngFor=\"let day of days\" [attr.rtl]=\"rtl\">\n <bc-day-number-box\n [day]=\"day\"\n [isWeekMode]=\"true\"\n [isSingleDay]=\"days.length === 1\"\n (dayClick)=\"onDayClick(day)\"\n ></bc-day-number-box>\n </td>\n </tr>\n <ng-container\n *ngTemplateOutlet=\"\n renderDayTasks;\n context: {\n $implicit: weekTasksArray,\n maxRowTasks: maxRowTasks,\n weekIndex: 0\n }\n \"\n ></ng-container>\n </tbody>\n </table>\n</div>\n<ng-template #renderDayTasks let-weekTasks let-maxRowTasks=\"maxRowTasks\" let-weekIndex=\"weekIndex\">\n <ng-container *ngFor=\"let rowTask of weekTasks | keyvalue; let i = index\">\n <tr fd-table-row class=\"task-row\">\n <td fd-table-cell class=\"fd-time\" style=\"border: none\"></td>\n <ng-container *ngFor=\"let task of weekTasks[i]; let dayIndex = index\">\n <td\n fd-table-cell\n *ngIf=\"task.colSpan && dayIndex < days.length\"\n [attr.colspan]=\"task.colSpan > days.length ? days.length : task.colSpan\"\n class=\"td-button\"\n [attr.hasevent]=\"!!task.event\"\n >\n <bc-event-button\n *ngIf=\"task.event && !task.inDay; else newDaySelect\"\n [task]=\"task\"\n [rtl]=\"rtl\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n ></bc-event-button>\n <ng-template #newDaySelect>\n <div style=\"width: 100%; height: 100%\" [attr.newDay]=\"true\"></div>\n </ng-template>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n</ng-template>\n<div\n class=\"table-container\"\n style=\"overflow-y: hidden; overflow-x: auto; flex-grow: 1; display: inline-table\"\n [style.height.px]=\"inDialog ? containerHeight : null\"\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\n>\n <table fd-table-body class=\"table-content\" [compact]=\"true\">\n <tbody>\n <tr class=\"tr-time\" style=\"height: 0rem\">\n <td class=\"td-time\" style=\"height: 0rem\"></td>\n <td [colspan]=\"days.length\" style=\"position: relative\" style=\"height: 0rem\">\n <div class=\"tasks-wrapper\">\n <div *ngFor=\"let hour of hours\" class=\"row-border\"></div>\n </div>\n </td>\n </tr>\n <tr fd-table-row style=\"height: 100%\">\n <td fd-table-cell class=\"td-time\">\n <div class=\"calc-time\">\n <div *ngFor=\"let hour of hours\">{{ hour }}</div>\n </div>\n </td>\n <td *ngFor=\"let day of days\" fd-table-cell (click)=\"onColumnClick($event, day)\">\n <div style=\"position: relative; width: 100%; height: 100%\">\n <ng-container *ngFor=\"let task of day.tasks; let index = index\">\n <bc-event-button\n (click)=\"onEventButton($event)\"\n *ngIf=\"task.inDay\"\n [style.background]=\"task.event[calendarFields.Color]\"\n [style.top.px]=\"task.top\"\n [style.right]=\"rtl ? 'calc(' + index * (100 / day.tasks.length) + '%)' : null\"\n [style.left]=\"rtl ? null : 'calc(' + index * (100 / day.tasks.length) + '%)'\"\n [style.width]=\"'calc(100% - ' + index * (100 / day.tasks.length) + '%)'\"\n [style.height.px]=\"task.height\"\n [style.maxHeight.px]=\"task.height\"\n [style.opacity]=\"task.opacity\"\n [style.zIndex]=\"index\"\n [buttonTemplate]=\"eventButtonTemplate\"\n class=\"task-day\"\n [task]=\"task\"\n [index]=\"index\"\n [deviceSize]=\"deviceSize\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n (openPopoverChange)=\"onOpenPopoverChange($event)\"\n ></bc-event-button>\n </ng-container>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n<ng-template\n #eventButtonTemplate\n let-task\n let-popover=\"popover\"\n let-calendarFields=\"calendarFields\"\n let-onButtonClick=\"onButtonClick\"\n>\n <button\n [style.background]=\"task.event[calendarFields.Color]\"\n class=\"task-title\"\n [style.border]=\"'1px solid white'\"\n fd-button\n [compact]=\"true\"\n [fdType]=\"'emphasized'\"\n (click)=\"onButtonClick(popover)\"\n [label]=\"task.height > 49 ? '' : task.event[calendarFields.Title] + ' ' + (task | fromToTime)\"\n >\n <ng-container *ngIf=\"task.height > 49\">\n <span class=\"ellipsis\">{{ task.event[calendarFields.Title] }}</span>\n <span class=\"ellipsis\">{{ task | fromToTime }}</span>\n </ng-container>\n </button>\n</ng-template>\n", styles: [":host{display:flex;height:95%;width:100%;flex-direction:column;align-items:stretch;justify-content:stretch}table.table-top{border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}table td{overflow:hidden}thead tr{border-bottom:none!important}thead tr th{text-align:center!important;background-color:var(--sapList_Background, #fff)}tbody tr td{padding-top:5px}tbody tr:first-child td{padding-top:0}.fd-table__cell{padding:0 .5rem!important}.table-top{table-layout:fixed}.table-top td{padding-right:1px!important;padding-left:1px!important}.tr-time{height:1px;max-height:1px!important;width:100%}.tr-time td{height:1px!important;max-height:1px!important;padding:0!important}.task-row td{height:1.425rem!important;padding:0!important}.table-content{width:100%;border-spacing:0;position:relative}.table-content .tasks-wrapper{position:absolute;opacity:.3;height:100%;width:calc(100% - 50px)}.table-content .td-time{padding:0!important}.table-content .td-time .calc-time{display:flex;flex-direction:column;height:100%;justify-content:start;align-items:center}.table-content .td-time .calc-time div{height:50px;border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);width:100%;display:flex;justify-content:center}.table-content .td-time tbody{border-spacing:0}.td-time{width:50px!important;max-width:50px!important}.row-border{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);height:50px}.task-day{position:absolute!important;display:flex;flex-direction:column;align-items:start}.weekday-header td,.week-days td,.week-numbers td{text-align:right}table[dayscount=\"1\"] .week-days td[rtl=true],table[dayscount=\"1\"] .week-numbers td[rtl=true]{text-align:right!important}table[dayscount=\"1\"] .week-days td[rtl=false],table[dayscount=\"1\"] .week-numbers td[rtl=false]{text-align:left!important}table[dayscount=\"1\"] .week-days td,table[dayscount=\"1\"] .week-numbers td{padding-left:1rem!important;padding-right:1rem!important}table[dayscount=\"1\"] .week-days td.weekday-header,table[dayscount=\"1\"] .week-numbers td.weekday-header{padding-left:2rem!important;padding-right:2rem!important}.week-days td{border:none;text-align:center;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.week-numbers td{border:none;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.td-button{border:none!important;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)!important;padding:1px!important}.task-title{display:flex;flex-direction:column;align-items:start!important;font-weight:400;width:100%;max-width:100%;min-width:100%;height:100%;max-height:100%;min-height:100%}\n"] }]
|
|
141
141
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CalendarService }]; }, propDecorators: { tableTopEl: [{
|
|
142
142
|
type: ViewChild,
|
|
143
143
|
args: ['tableTop']
|
|
@@ -178,4 +178,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
|
|
|
178
178
|
}], dayClick: [{
|
|
179
179
|
type: Output
|
|
180
180
|
}] } });
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItd2Vlay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2NhbGVuZGFyLXdlZWsvY2FsZW5kYXItd2Vlay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2NhbGVuZGFyLXdlZWsvY2FsZW5kYXItd2Vlay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFDSCxhQUFhLEVBSWIsa0JBQWtCLEVBRXJCLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7OztBQVU5QixNQUFNLE9BQU8scUJBQXNCLFNBQVEsYUFBYTtJQWtDcEQsWUFBb0IsSUFBdUIsRUFBVSxnQkFBaUM7UUFDbEYsS0FBSyxFQUFFLENBQUM7UUFEUSxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUF0QjdFLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDZixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDcEQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUN0RCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQStCLENBQUM7UUFDNUQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDcEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFLN0MsZUFBVSxHQUFHLEVBQUUsQ0FBQztR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LEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEcsSUFBSSxRQUFRLEVBQUU7b0JBQ1YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDcEMsT0FBTyxFQUFFLENBQUM7aUJBQ2I7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQzs7a0hBbkpRLHFCQUFxQjtzR0FBckIscUJBQXFCLHlvQkNqQ2xDLHd1T0FxSkE7MkZEcEhhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDSSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTTtzSUFHeEIsVUFBVTtzQkFBaEMsU0FBUzt1QkFBQyxVQUFVO2dCQUNaLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7XG4gICAgQmFzZUNvbXBvbmVudCxcbiAgICBDYWxlbmRhckZpZWxkcyxcbiAgICBDYWxlbmRhck1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBQcmV2ZW50RGVmYXVsRXZlbnQsXG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF5IH0gZnJvbSAnLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdiYy1jYWxlbmRhci13ZWVrJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItd2Vlay5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXItd2Vlay5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyV2Vla0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgndGFibGVUb3AnKSB0YWJsZVRvcEVsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgICBASW5wdXQoKSB3ZWVrRGF5czogc3RyaW5nW107XG4gICAgQElucHV0KCkgd2Vla0RheXNNaW46IHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHRvZGF5OiBEYXRlO1xuICAgIEBJbnB1dCgpIGNvbnRhaW5lckhlaWdodDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGNhbGVuZGFyRmllbGRzOiBDYWxlbmRhckZpZWxkcztcbiAgICBASW5wdXQoKSBydGw6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW5EaWFsb2c6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGV2aWNlU2l6ZTogQWJicmV2YXRpb25EZXZpY2VTaXplO1xuICAgIEBJbnB1dCgpIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcbiAgICBASW5wdXQoKSBkYXlzOiBEYXlbXTtcbiAgICBASW5wdXQoKSBjYW5EZWxldGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBjYW5BZGQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBjYW5FZGl0ID0gZmFsc2U7XG4gICAgQE91dHB1dCgpIGVkaXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcbiAgICBAT3V0cHV0KCkgZGVsZXRlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XG4gICAgQE91dHB1dCgpIHNob3dFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FsZW5kYXJNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xuICAgIEBPdXRwdXQoKSBkYXlTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgZGF5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERheT4oKTtcbiAgICBzZWxlY3RlZFdlZWtEYXlzOiBzdHJpbmdbXTtcbiAgICBzZWxlY3RlZDogRGF5O1xuICAgIG51bWJlck9mV2VlazogbnVtYmVyW107XG4gICAgZGF5SGVpZ2h0OiBudW1iZXI7XG4gICAgdGFza0hlaWdodCA9IDMwO1xuICAgIG1heFRhc2tDb3VudCA9IDQ7XG4gICAgbWF4Um93VGFza3M6IG51bWJlcltdO1xuICAgIHdlZWtUYXNrc0FycmF5OiB7IFtrZXk6IHN0cmluZ106IFtdIH1bXTtcbiAgICBleHRyYVJvdzogbnVtYmVyW107XG4gICAgd2lkdGg6IGFueTtcbiAgICBob3Vyczogc3RyaW5nW107XG5cbiAgICBwcml2YXRlIF9oYXNQb3BvdmVyT3BlbmVkOiBib29sZWFuW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgX2NhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIGlmIChjaGFuZ2VzLmRldmljZVNpemUgJiYgIWNoYW5nZXMuZGV2aWNlU2l6ZS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlV2Vla0RheXMoY2hhbmdlcy5kZXZpY2VTaXplLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMubW9EYXRhTGlzdCAmJiAhY2hhbmdlcy5tb0RhdGFMaXN0LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9wcmVwYXJlRGF5c1Rhc2tzKGNoYW5nZXMubW9EYXRhTGlzdC5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5kYXlzICYmICFjaGFuZ2VzLmRheXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVEYXlzVGFza3ModGhpcy5tb0RhdGFMaXN0KTtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5ob3VycyA9IG5ldyBBcnJheSgyNCkuZmlsbCgwKS5tYXAoKHgsIGkpID0+IGAke2kgPiA5ID8gJycgKyBpIDogJzAnICsgaX06MDBgKTtcbiAgICAgICAgdGhpcy5wcmVwYXJlV2Vla0RheXModGhpcy5kZXZpY2VTaXplKTtcbiAgICAgICAgdGhpcy5fcHJlcGFyZURheXNUYXNrcyh0aGlzLm1vRGF0YUxpc3QpO1xuICAgIH1cblxuICAgIG9uRGF5Qm94U2VsZWN0KGRheTogRGF5KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5BZGQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maXJlRGF5U2VsZWN0KGRheS5kYXRlKTtcbiAgICB9XG5cbiAgICBvbk9wZW5Qb3BvdmVyQ2hhbmdlKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9oYXNQb3BvdmVyT3BlbmVkLnB1c2godHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNQb3BvdmVyT3BlbmVkID0gW107XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNvbHVtbkNsaWNrKGUsIGRheTogRGF5KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgb2Zmc2V0WSB9ID0gZTtcbiAgICAgICAgY29uc3QgaG91ciA9IE1hdGguZmxvb3Iob2Zmc2V0WSAvIDUwKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKG9mZnNldFkgJSA1MCkgLyAxNSkgKiAxNTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRheS5kYXRlKTtcbiAgICAgICAgZGF0ZS5zZXRIb3Vycyhob3VyKTtcbiAgICAgICAgZGF0ZS5zZXRNaW51dGVzKG1pbnV0ZXMpO1xuICAgICAgICB0aGlzLl9maXJlRGF5U2VsZWN0KGRhdGUpO1xuICAgIH1cbiAgICBvbkV2ZW50QnV0dG9uKGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKGUuY3VycmVudFRhcmdldD8ubG9jYWxOYW1lID09PSAnYmMtZXZlbnQtYnV0dG9uJykge1xuICAgICAgICAgICAgUHJldmVudERlZmF1bEV2ZW50KGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uTW9yZUJ1dHRvbihlLCBwb3BvdmVyKTogdm9pZCB7XG4gICAgICAgIFByZXZlbnREZWZhdWxFdmVudChlKTtcbiAgICAgICAgdGhpcy5fb3BlblBvcG92ZXIocG9wb3Zlcik7XG4gICAgfVxuICAgIG9uRGF5Q2xpY2soZGF5OiBEYXkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IGRheTtcbiAgICAgICAgdGhpcy5kYXlDbGljay5lbWl0KGRheSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2ZpcmVEYXlTZWxlY3QoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faGFzUG9wb3Zlck9wZW5lZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGF5U2VsZWN0LmVtaXQobW9tZW50KGRhdGUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX29wZW5Qb3BvdmVyKHBvcG92ZXI6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAocG9wb3Zlci5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2hhc1BvcG92ZXJPcGVuZWQucHVzaChwb3BvdmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2hhc1BvcG92ZXJPcGVuZWQucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBwcmVwYXJlV2Vla0RheXMoZGV2aWNlU2l6ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChkZXZpY2VTaXplICE9PSAncycgJiYgZGV2aWNlU2l6ZSAhPT0gJ20nKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2Vla0RheXMgPSB0aGlzLndlZWtEYXlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdlZWtEYXlzID0gdGhpcy53ZWVrRGF5c01pbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVEYXlzVGFza3MoY2FsZW5kYXJUYXNrcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjYWxlbmRhckZpZWxkcyA9IHRoaXMuY2FsZW5kYXJGaWVsZHM7XG5cbiAgICAgICAgLy8gU29ydCBhbGwgVGFza3NcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS5zb3J0VGFza3MoY2FsZW5kYXJUYXNrcywgY2FsZW5kYXJGaWVsZHMpO1xuICAgICAgICBjb25zdCB0YXNrSGVpZ2h0ID0gNTA7XG4gICAgICAgIHRoaXMuZGF5cy5mb3JFYWNoKChkYXkpID0+IChkYXkudGFza3MgPSBbXSkpO1xuXG4gICAgICAgIGNvbnN0IHdlZWtUYXNrc0FycmF5OiB7IFtrZXk6IHN0cmluZ106IGFueVtdIH1bXSA9IFtdO1xuICAgICAgICBjb25zdCBkYXlzID0gdGhpcy5kYXlzO1xuICAgICAgICBjb25zdCB3ZWVrID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZVdlZWtUYXNrKGRheXMsIG1vRGF0YUxpc3QsIGNhbGVuZGFyRmllbGRzLCB0YXNrSGVpZ2h0KTtcbiAgICAgICAgd2Vla1Rhc2tzQXJyYXkucHVzaCh3ZWVrKTtcblxuICAgICAgICAvLyDYqNmHINin2LLYp9uMINmH2LEg2LHYr9uM2YEg2KrYs9qpINio2KfbjNivINiq2LnYr9in2K8gNyDYs9iq2YjZhiDYp9i22KfZgdmHINqv2LHYr9ivINmIINio2LHYp9uMINiz2KrZiNmG24wg2qnZhyDYqtiz2qnbjCDZhtiv2KfYsdivINuM2qkg2KzYp9uMINiu2KfZhNuMIGNvbHNwYW4gMSDZhduM2q/YsNin2LHbjNmFXG4gICAgICAgIHdlZWtUYXNrc0FycmF5LmZvckVhY2goKHdlZWtUYXNrKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZmlsbFdlZWsod2Vla1Rhc2ssIGRheXMubGVuZ3RoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gW107XG4gICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh3ZWVrVGFza3NBcnJheSkuZm9yRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHdlZWspLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGVsZW1lbnQuc29tZSgoYykgPT4gYy5jb2xTcGFuID4gMSB8fCAoYy5jb2xTcGFuID09PSAxICYmICFjLmluRGF5ICYmIGMuZXZlbnQpKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3NbY291bnRlci50b1N0cmluZygpXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMud2Vla1Rhc2tzQXJyYXkgPSB0YXNrcztcbiAgICB9XG59XG4iLCI8ZGl2XHJcbiAgICBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiXHJcbiAgICBbc3R5bGUub3ZlcmZsb3cteV09XCJpbkRpYWxvZyA/ICdzY3JvbGwnIDogJ2hpZGRlbidcIlxyXG4gICAgc3R5bGU9XCJvdmVyZmxvdy15OiBoaWRkZW47IGZsZXgtc2hyaW5rOiAwXCJcclxuICAgICN0YWJsZVRvcFxyXG4+XHJcbiAgICA8dGFibGUgZmQtdGFibGUgY2xhc3M9XCJ0YWJsZS10b3BcIiBbY29tcGFjdF09XCJ0cnVlXCIgW2F0dHIuZGF5c0NvdW50XT1cImRheXMubGVuZ3RoXCI+XHJcbiAgICAgICAgPHRib2R5IGZkLXRhYmxlLWJvZHk+XHJcbiAgICAgICAgICAgIDx0ciBmZC10YWJsZS1yb3cgY2xhc3M9XCJ3ZWVrLWRheXNcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRkLXRpbWVcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIFthdHRyLnJ0bF09XCJydGxcIiBjbGFzcz1cIndlZWtkYXktaGVhZGVyXCIgKm5nRm9yPVwibGV0IGRheSBvZiBkYXlzXCIgZmQtdGFibGUtY2VsbCBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZGF5LmRheU5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0ciBmZC10YWJsZS1yb3cgY2xhc3M9XCJ3ZWVrLW51bWJlcnNcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRkLXRpbWVcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgKm5nRm9yPVwibGV0IGRheSBvZiBkYXlzXCIgW2F0dHIucnRsXT1cInJ0bFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxiYy1kYXktbnVtYmVyLWJveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGF5XT1cImRheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dlZWtNb2RlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNTaW5nbGVEYXldPVwiZGF5cy5sZW5ndGggPT09IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGF5Q2xpY2spPVwib25EYXlDbGljayhkYXkpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9iYy1kYXktbnVtYmVyLWJveD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyRGF5VGFza3M7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHdlZWtUYXNrc0FycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhSb3dUYXNrczogbWF4Um93VGFza3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtJbmRleDogMFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuPC9kaXY+XHJcbjxuZy10ZW1wbGF0ZSAjcmVuZGVyRGF5VGFza3MgbGV0LXdlZWtUYXNrcyBsZXQtbWF4Um93VGFza3M9XCJtYXhSb3dUYXNrc1wiIGxldC13ZWVrSW5kZXg9XCJ3ZWVrSW5kZXhcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd1Rhc2sgb2Ygd2Vla1Rhc2tzIHwga2V5dmFsdWU7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICA8dHIgZmQtdGFibGUtcm93IGNsYXNzPVwidGFzay1yb3dcIj5cclxuICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgY2xhc3M9XCJmZC10aW1lXCIgc3R5bGU9XCJib3JkZXI6IG5vbmVcIj48L3RkPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YXNrIG9mIHdlZWtUYXNrc1tpXTsgbGV0IGRheUluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICAgICAgIGZkLXRhYmxlLWNlbGxcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhc2suY29sU3BhbiAmJiBkYXlJbmRleCA8IGRheXMubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cInRhc2suY29sU3BhbiA+IGRheXMubGVuZ3RoID8gZGF5cy5sZW5ndGggOiB0YXNrLmNvbFNwYW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGQtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5oYXNldmVudF09XCIhIXRhc2suZXZlbnRcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxiYy1ldmVudC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YXNrLmV2ZW50ICYmICF0YXNrLmluRGF5OyBlbHNlIG5ld0RheVNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YXNrXT1cInRhc2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcnRsXT1cInJ0bFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5EZWxldGVdPVwiY2FuRGVsZXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkVkaXRdPVwiY2FuRWRpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhckZpZWxkc109XCJjYWxlbmRhckZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGVsZXRlRXZlbnQpPVwiZGVsZXRlRXZlbnQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGVkaXRFdmVudCk9XCJlZGl0RXZlbnQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9iYy1ldmVudC1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNuZXdEYXlTZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlXCIgW2F0dHIubmV3RGF5XT1cInRydWVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG48ZGl2XHJcbiAgICBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiXHJcbiAgICBzdHlsZT1cIm92ZXJmbG93LXk6IGhpZGRlbjsgb3ZlcmZsb3cteDogYXV0bzsgZmxleC1ncm93OiAxXCJcclxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaW5EaWFsb2cgPyBjb250YWluZXJIZWlnaHQgOiBudWxsXCJcclxuICAgIFtzdHlsZS5vdmVyZmxvdy15XT1cImluRGlhbG9nID8gJ3Njcm9sbCcgOiAnaGlkZGVuJ1wiXHJcbj5cclxuICAgIDx0YWJsZSBmZC10YWJsZS1ib2R5IGNsYXNzPVwidGFibGUtY29udGVudFwiIFtjb21wYWN0XT1cInRydWVcIj5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRyLXRpbWVcIiBzdHlsZT1cImhlaWdodDogMHJlbVwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGQtdGltZVwiIHN0eWxlPVwiaGVpZ2h0OiAwcmVtXCI+PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBbY29sc3Bhbl09XCJkYXlzLmxlbmd0aFwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCIgc3R5bGU9XCJoZWlnaHQ6IDByZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFza3Mtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBob3VyIG9mIGhvdXJzXCIgY2xhc3M9XCJyb3ctYm9yZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8dHIgZmQtdGFibGUtcm93IHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgZmQtdGFibGUtY2VsbCBjbGFzcz1cInRkLXRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsYy10aW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIj57eyBob3VyIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c1wiIGZkLXRhYmxlLWNlbGwgKGNsaWNrKT1cIm9uQ29sdW1uQ2xpY2soJGV2ZW50LCBkYXkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YXNrIG9mIGRheS50YXNrczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiYy1ldmVudC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FdmVudEJ1dHRvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhc2suaW5EYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhc2suZXZlbnRbY2FsZW5kYXJGaWVsZHMuQ29sb3JdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cInRhc2sudG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucmlnaHRdPVwicnRsID8gJ2NhbGMoJyArIGluZGV4ICogKDEwMCAvIGRheS50YXNrcy5sZW5ndGgpICsgJyUpJyA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0XT1cInJ0bCA/IG51bGwgOiAnY2FsYygnICsgaW5kZXggKiAoMTAwIC8gZGF5LnRhc2tzLmxlbmd0aCkgKyAnJSknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiJ2NhbGMoMTAwJSAtICcgKyBpbmRleCAqICgxMDAgLyBkYXkudGFza3MubGVuZ3RoKSArICclKSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwidGFzay5oZWlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwidGFzay5oZWlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5vcGFjaXR5XT1cInRhc2sub3BhY2l0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnpJbmRleF09XCJpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblRlbXBsYXRlXT1cImV2ZW50QnV0dG9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFzay1kYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXNrXT1cInRhc2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhbGVuZGFyRmllbGRzXT1cImNhbGVuZGFyRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuRGVsZXRlXT1cImNhbkRlbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkVkaXRdPVwiY2FuRWRpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZUV2ZW50KT1cImRlbGV0ZUV2ZW50LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVkaXRFdmVudCk9XCJlZGl0RXZlbnQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3BlblBvcG92ZXJDaGFuZ2UpPVwib25PcGVuUG9wb3ZlckNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2JjLWV2ZW50LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlXHJcbiAgICAjZXZlbnRCdXR0b25UZW1wbGF0ZVxyXG4gICAgbGV0LXRhc2tcclxuICAgIGxldC1wb3BvdmVyPVwicG9wb3ZlclwiXHJcbiAgICBsZXQtY2FsZW5kYXJGaWVsZHM9XCJjYWxlbmRhckZpZWxkc1wiXHJcbiAgICBsZXQtb25CdXR0b25DbGljaz1cIm9uQnV0dG9uQ2xpY2tcIlxyXG4+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFzay5ldmVudFtjYWxlbmRhckZpZWxkcy5Db2xvcl1cIlxyXG4gICAgICAgIGNsYXNzPVwidGFzay10aXRsZVwiXHJcbiAgICAgICAgW3N0eWxlLmJvcmRlcl09XCInMXB4IHNvbGlkIHdoaXRlJ1wiXHJcbiAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgW2ZkVHlwZV09XCInZW1waGFzaXplZCdcIlxyXG4gICAgICAgIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKHBvcG92ZXIpXCJcclxuICAgICAgICBbbGFiZWxdPVwidGFzay5oZWlnaHQgPiA0OSA/ICcnIDogdGFzay5ldmVudFtjYWxlbmRhckZpZWxkcy5UaXRsZV0gKyAnICcgKyAodGFzayB8IGZyb21Ub1RpbWUpXCJcclxuICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFzay5oZWlnaHQgPiA0OVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgdGFzay5ldmVudFtjYWxlbmRhckZpZWxkcy5UaXRsZV0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyB0YXNrIHwgZnJvbVRvVGltZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItd2Vlay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2NhbGVuZGFyLXdlZWsvY2FsZW5kYXItd2Vlay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2NhbGVuZGFyLXdlZWsvY2FsZW5kYXItd2Vlay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFDSCxhQUFhLEVBSWIsa0JBQWtCLEVBRXJCLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7OztBQVU5QixNQUFNLE9BQU8scUJBQXNCLFNBQVEsYUFBYTtJQWtDcEQsWUFBb0IsSUFBdUIsRUFBVSxnQkFBaUM7UUFDbEYsS0FBSyxFQUFFLENBQUM7UUFEUSxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUF0QjdFLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDZixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDcEQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUN0RCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQStCLENBQUM7UUFDNUQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDcEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFLN0MsZUFBVSxHQUFHLEVBQUUsQ0FBQztR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LEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEcsSUFBSSxRQUFRLEVBQUU7b0JBQ1YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDcEMsT0FBTyxFQUFFLENBQUM7aUJBQ2I7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQzs7a0hBbkpRLHFCQUFxQjtzR0FBckIscUJBQXFCLHlvQkNqQ2xDLHE5TkFxSkE7MkZEcEhhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDSSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTTtzSUFHeEIsVUFBVTtzQkFBaEMsU0FBUzt1QkFBQyxVQUFVO2dCQUNaLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7XG4gICAgQmFzZUNvbXBvbmVudCxcbiAgICBDYWxlbmRhckZpZWxkcyxcbiAgICBDYWxlbmRhck1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBQcmV2ZW50RGVmYXVsRXZlbnQsXG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF5IH0gZnJvbSAnLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdiYy1jYWxlbmRhci13ZWVrJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItd2Vlay5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXItd2Vlay5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyV2Vla0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgndGFibGVUb3AnKSB0YWJsZVRvcEVsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgICBASW5wdXQoKSB3ZWVrRGF5czogc3RyaW5nW107XG4gICAgQElucHV0KCkgd2Vla0RheXNNaW46IHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHRvZGF5OiBEYXRlO1xuICAgIEBJbnB1dCgpIGNvbnRhaW5lckhlaWdodDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGNhbGVuZGFyRmllbGRzOiBDYWxlbmRhckZpZWxkcztcbiAgICBASW5wdXQoKSBydGw6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW5EaWFsb2c6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGV2aWNlU2l6ZTogQWJicmV2YXRpb25EZXZpY2VTaXplO1xuICAgIEBJbnB1dCgpIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcbiAgICBASW5wdXQoKSBkYXlzOiBEYXlbXTtcbiAgICBASW5wdXQoKSBjYW5EZWxldGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBjYW5BZGQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBjYW5FZGl0ID0gZmFsc2U7XG4gICAgQE91dHB1dCgpIGVkaXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcbiAgICBAT3V0cHV0KCkgZGVsZXRlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XG4gICAgQE91dHB1dCgpIHNob3dFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FsZW5kYXJNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xuICAgIEBPdXRwdXQoKSBkYXlTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgZGF5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERheT4oKTtcbiAgICBzZWxlY3RlZFdlZWtEYXlzOiBzdHJpbmdbXTtcbiAgICBzZWxlY3RlZDogRGF5O1xuICAgIG51bWJlck9mV2VlazogbnVtYmVyW107XG4gICAgZGF5SGVpZ2h0OiBudW1iZXI7XG4gICAgdGFza0hlaWdodCA9IDMwO1xuICAgIG1heFRhc2tDb3VudCA9IDQ7XG4gICAgbWF4Um93VGFza3M6IG51bWJlcltdO1xuICAgIHdlZWtUYXNrc0FycmF5OiB7IFtrZXk6IHN0cmluZ106IFtdIH1bXTtcbiAgICBleHRyYVJvdzogbnVtYmVyW107XG4gICAgd2lkdGg6IGFueTtcbiAgICBob3Vyczogc3RyaW5nW107XG5cbiAgICBwcml2YXRlIF9oYXNQb3BvdmVyT3BlbmVkOiBib29sZWFuW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgX2NhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIGlmIChjaGFuZ2VzLmRldmljZVNpemUgJiYgIWNoYW5nZXMuZGV2aWNlU2l6ZS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlV2Vla0RheXMoY2hhbmdlcy5kZXZpY2VTaXplLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMubW9EYXRhTGlzdCAmJiAhY2hhbmdlcy5tb0RhdGFMaXN0LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9wcmVwYXJlRGF5c1Rhc2tzKGNoYW5nZXMubW9EYXRhTGlzdC5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5kYXlzICYmICFjaGFuZ2VzLmRheXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVEYXlzVGFza3ModGhpcy5tb0RhdGFMaXN0KTtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5ob3VycyA9IG5ldyBBcnJheSgyNCkuZmlsbCgwKS5tYXAoKHgsIGkpID0+IGAke2kgPiA5ID8gJycgKyBpIDogJzAnICsgaX06MDBgKTtcbiAgICAgICAgdGhpcy5wcmVwYXJlV2Vla0RheXModGhpcy5kZXZpY2VTaXplKTtcbiAgICAgICAgdGhpcy5fcHJlcGFyZURheXNUYXNrcyh0aGlzLm1vRGF0YUxpc3QpO1xuICAgIH1cblxuICAgIG9uRGF5Qm94U2VsZWN0KGRheTogRGF5KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5BZGQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maXJlRGF5U2VsZWN0KGRheS5kYXRlKTtcbiAgICB9XG5cbiAgICBvbk9wZW5Qb3BvdmVyQ2hhbmdlKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9oYXNQb3BvdmVyT3BlbmVkLnB1c2godHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNQb3BvdmVyT3BlbmVkID0gW107XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNvbHVtbkNsaWNrKGUsIGRheTogRGF5KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgb2Zmc2V0WSB9ID0gZTtcbiAgICAgICAgY29uc3QgaG91ciA9IE1hdGguZmxvb3Iob2Zmc2V0WSAvIDUwKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKG9mZnNldFkgJSA1MCkgLyAxNSkgKiAxNTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRheS5kYXRlKTtcbiAgICAgICAgZGF0ZS5zZXRIb3Vycyhob3VyKTtcbiAgICAgICAgZGF0ZS5zZXRNaW51dGVzKG1pbnV0ZXMpO1xuICAgICAgICB0aGlzLl9maXJlRGF5U2VsZWN0KGRhdGUpO1xuICAgIH1cbiAgICBvbkV2ZW50QnV0dG9uKGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKGUuY3VycmVudFRhcmdldD8ubG9jYWxOYW1lID09PSAnYmMtZXZlbnQtYnV0dG9uJykge1xuICAgICAgICAgICAgUHJldmVudERlZmF1bEV2ZW50KGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uTW9yZUJ1dHRvbihlLCBwb3BvdmVyKTogdm9pZCB7XG4gICAgICAgIFByZXZlbnREZWZhdWxFdmVudChlKTtcbiAgICAgICAgdGhpcy5fb3BlblBvcG92ZXIocG9wb3Zlcik7XG4gICAgfVxuICAgIG9uRGF5Q2xpY2soZGF5OiBEYXkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IGRheTtcbiAgICAgICAgdGhpcy5kYXlDbGljay5lbWl0KGRheSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2ZpcmVEYXlTZWxlY3QoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faGFzUG9wb3Zlck9wZW5lZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGF5U2VsZWN0LmVtaXQobW9tZW50KGRhdGUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX29wZW5Qb3BvdmVyKHBvcG92ZXI6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAocG9wb3Zlci5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2hhc1BvcG92ZXJPcGVuZWQucHVzaChwb3BvdmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2hhc1BvcG92ZXJPcGVuZWQucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBwcmVwYXJlV2Vla0RheXMoZGV2aWNlU2l6ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChkZXZpY2VTaXplICE9PSAncycgJiYgZGV2aWNlU2l6ZSAhPT0gJ20nKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2Vla0RheXMgPSB0aGlzLndlZWtEYXlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdlZWtEYXlzID0gdGhpcy53ZWVrRGF5c01pbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVEYXlzVGFza3MoY2FsZW5kYXJUYXNrcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjYWxlbmRhckZpZWxkcyA9IHRoaXMuY2FsZW5kYXJGaWVsZHM7XG5cbiAgICAgICAgLy8gU29ydCBhbGwgVGFza3NcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS5zb3J0VGFza3MoY2FsZW5kYXJUYXNrcywgY2FsZW5kYXJGaWVsZHMpO1xuICAgICAgICBjb25zdCB0YXNrSGVpZ2h0ID0gNTA7XG4gICAgICAgIHRoaXMuZGF5cy5mb3JFYWNoKChkYXkpID0+IChkYXkudGFza3MgPSBbXSkpO1xuXG4gICAgICAgIGNvbnN0IHdlZWtUYXNrc0FycmF5OiB7IFtrZXk6IHN0cmluZ106IGFueVtdIH1bXSA9IFtdO1xuICAgICAgICBjb25zdCBkYXlzID0gdGhpcy5kYXlzO1xuICAgICAgICBjb25zdCB3ZWVrID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZVdlZWtUYXNrKGRheXMsIG1vRGF0YUxpc3QsIGNhbGVuZGFyRmllbGRzLCB0YXNrSGVpZ2h0KTtcbiAgICAgICAgd2Vla1Rhc2tzQXJyYXkucHVzaCh3ZWVrKTtcblxuICAgICAgICAvLyDYqNmHINin2LLYp9uMINmH2LEg2LHYr9uM2YEg2KrYs9qpINio2KfbjNivINiq2LnYr9in2K8gNyDYs9iq2YjZhiDYp9i22KfZgdmHINqv2LHYr9ivINmIINio2LHYp9uMINiz2KrZiNmG24wg2qnZhyDYqtiz2qnbjCDZhtiv2KfYsdivINuM2qkg2KzYp9uMINiu2KfZhNuMIGNvbHNwYW4gMSDZhduM2q/YsNin2LHbjNmFXG4gICAgICAgIHdlZWtUYXNrc0FycmF5LmZvckVhY2goKHdlZWtUYXNrKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZmlsbFdlZWsod2Vla1Rhc2ssIGRheXMubGVuZ3RoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gW107XG4gICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh3ZWVrVGFza3NBcnJheSkuZm9yRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHdlZWspLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGVsZW1lbnQuc29tZSgoYykgPT4gYy5jb2xTcGFuID4gMSB8fCAoYy5jb2xTcGFuID09PSAxICYmICFjLmluRGF5ICYmIGMuZXZlbnQpKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3NbY291bnRlci50b1N0cmluZygpXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMud2Vla1Rhc2tzQXJyYXkgPSB0YXNrcztcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIlxuICAgIFtzdHlsZS5vdmVyZmxvdy15XT1cImluRGlhbG9nID8gJ3Njcm9sbCcgOiAnaGlkZGVuJ1wiXG4gICAgc3R5bGU9XCJvdmVyZmxvdy15OiBoaWRkZW47IGZsZXgtc2hyaW5rOiAwXCJcbiAgICAjdGFibGVUb3Bcbj5cbiAgICA8dGFibGUgZmQtdGFibGUgY2xhc3M9XCJ0YWJsZS10b3BcIiBbY29tcGFjdF09XCJ0cnVlXCIgW2F0dHIuZGF5c0NvdW50XT1cImRheXMubGVuZ3RoXCI+XG4gICAgICAgIDx0Ym9keSBmZC10YWJsZS1ib2R5PlxuICAgICAgICAgICAgPHRyIGZkLXRhYmxlLXJvdyBjbGFzcz1cIndlZWstZGF5c1wiPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRkLXRpbWVcIj48L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5ydGxdPVwicnRsXCIgY2xhc3M9XCJ3ZWVrZGF5LWhlYWRlclwiICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c1wiIGZkLXRhYmxlLWNlbGwgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBkYXkuZGF5TmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyIGZkLXRhYmxlLXJvdyBjbGFzcz1cIndlZWstbnVtYmVyc1wiPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRkLXRpbWVcIj48L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c1wiIFthdHRyLnJ0bF09XCJydGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJjLWRheS1udW1iZXItYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbZGF5XT1cImRheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNXZWVrTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc1NpbmdsZURheV09XCJkYXlzLmxlbmd0aCA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGF5Q2xpY2spPVwib25EYXlDbGljayhkYXkpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYmMtZGF5LW51bWJlci1ib3g+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyRGF5VGFza3M7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogd2Vla1Rhc2tzQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhSb3dUYXNrczogbWF4Um93VGFza3MsXG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWVrSW5kZXg6IDBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNyZW5kZXJEYXlUYXNrcyBsZXQtd2Vla1Rhc2tzIGxldC1tYXhSb3dUYXNrcz1cIm1heFJvd1Rhc2tzXCIgbGV0LXdlZWtJbmRleD1cIndlZWtJbmRleFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd1Rhc2sgb2Ygd2Vla1Rhc2tzIHwga2V5dmFsdWU7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgPHRyIGZkLXRhYmxlLXJvdyBjbGFzcz1cInRhc2stcm93XCI+XG4gICAgICAgICAgICA8dGQgZmQtdGFibGUtY2VsbCBjbGFzcz1cImZkLXRpbWVcIiBzdHlsZT1cImJvcmRlcjogbm9uZVwiPjwvdGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YXNrIG9mIHdlZWtUYXNrc1tpXTsgbGV0IGRheUluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhc2suY29sU3BhbiAmJiBkYXlJbmRleCA8IGRheXMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJ0YXNrLmNvbFNwYW4gPiBkYXlzLmxlbmd0aCA/IGRheXMubGVuZ3RoIDogdGFzay5jb2xTcGFuXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZC1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5oYXNldmVudF09XCIhIXRhc2suZXZlbnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGJjLWV2ZW50LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YXNrLmV2ZW50ICYmICF0YXNrLmluRGF5OyBlbHNlIG5ld0RheVNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGFza109XCJ0YXNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5EZWxldGVdPVwiY2FuRGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5FZGl0XT1cImNhbkVkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhbGVuZGFyRmllbGRzXT1cImNhbGVuZGFyRmllbGRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZUV2ZW50KT1cImRlbGV0ZUV2ZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZWRpdEV2ZW50KT1cImVkaXRFdmVudC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9iYy1ldmVudC1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbmV3RGF5U2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCVcIiBbYXR0ci5uZXdEYXldPVwidHJ1ZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48ZGl2XG4gICAgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIlxuICAgIHN0eWxlPVwib3ZlcmZsb3cteTogaGlkZGVuOyBvdmVyZmxvdy14OiBhdXRvOyBmbGV4LWdyb3c6IDE7IGRpc3BsYXk6IGlubGluZS10YWJsZVwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJpbkRpYWxvZyA/IGNvbnRhaW5lckhlaWdodCA6IG51bGxcIlxuICAgIFtzdHlsZS5vdmVyZmxvdy15XT1cImluRGlhbG9nID8gJ3Njcm9sbCcgOiAnaGlkZGVuJ1wiXG4+XG4gICAgPHRhYmxlIGZkLXRhYmxlLWJvZHkgY2xhc3M9XCJ0YWJsZS1jb250ZW50XCIgW2NvbXBhY3RdPVwidHJ1ZVwiPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ci10aW1lXCIgc3R5bGU9XCJoZWlnaHQ6IDByZW1cIj5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZC10aW1lXCIgc3R5bGU9XCJoZWlnaHQ6IDByZW1cIj48L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBbY29sc3Bhbl09XCJkYXlzLmxlbmd0aFwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCIgc3R5bGU9XCJoZWlnaHQ6IDByZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhc2tzLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIiBjbGFzcz1cInJvdy1ib3JkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgZmQtdGFibGUtcm93IHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCI+XG4gICAgICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgY2xhc3M9XCJ0ZC10aW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxjLXRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIj57eyBob3VyIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c1wiIGZkLXRhYmxlLWNlbGwgKGNsaWNrKT1cIm9uQ29sdW1uQ2xpY2soJGV2ZW50LCBkYXkpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhc2sgb2YgZGF5LnRhc2tzOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiYy1ldmVudC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXZlbnRCdXR0b24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFzay5pbkRheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhc2suZXZlbnRbY2FsZW5kYXJGaWVsZHMuQ29sb3JdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJ0YXNrLnRvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5yaWdodF09XCJydGwgPyAnY2FsYygnICsgaW5kZXggKiAoMTAwIC8gZGF5LnRhc2tzLmxlbmd0aCkgKyAnJSknIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0XT1cInJ0bCA/IG51bGwgOiAnY2FsYygnICsgaW5kZXggKiAoMTAwIC8gZGF5LnRhc2tzLmxlbmd0aCkgKyAnJSknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIidjYWxjKDEwMCUgLSAnICsgaW5kZXggKiAoMTAwIC8gZGF5LnRhc2tzLmxlbmd0aCkgKyAnJSknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJ0YXNrLmhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwidGFzay5oZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUub3BhY2l0eV09XCJ0YXNrLm9wYWNpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuekluZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblRlbXBsYXRlXT1cImV2ZW50QnV0dG9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhc2stZGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rhc2tdPVwidGFza1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FsZW5kYXJGaWVsZHNdPVwiY2FsZW5kYXJGaWVsZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkRlbGV0ZV09XCJjYW5EZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuRWRpdF09XCJjYW5FZGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZUV2ZW50KT1cImRlbGV0ZUV2ZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0RXZlbnQpPVwiZWRpdEV2ZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVuUG9wb3ZlckNoYW5nZSk9XCJvbk9wZW5Qb3BvdmVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2JjLWV2ZW50LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuPC9kaXY+XG48bmctdGVtcGxhdGVcbiAgICAjZXZlbnRCdXR0b25UZW1wbGF0ZVxuICAgIGxldC10YXNrXG4gICAgbGV0LXBvcG92ZXI9XCJwb3BvdmVyXCJcbiAgICBsZXQtY2FsZW5kYXJGaWVsZHM9XCJjYWxlbmRhckZpZWxkc1wiXG4gICAgbGV0LW9uQnV0dG9uQ2xpY2s9XCJvbkJ1dHRvbkNsaWNrXCJcbj5cbiAgICA8YnV0dG9uXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRhc2suZXZlbnRbY2FsZW5kYXJGaWVsZHMuQ29sb3JdXCJcbiAgICAgICAgY2xhc3M9XCJ0YXNrLXRpdGxlXCJcbiAgICAgICAgW3N0eWxlLmJvcmRlcl09XCInMXB4IHNvbGlkIHdoaXRlJ1wiXG4gICAgICAgIGZkLWJ1dHRvblxuICAgICAgICBbY29tcGFjdF09XCJ0cnVlXCJcbiAgICAgICAgW2ZkVHlwZV09XCInZW1waGFzaXplZCdcIlxuICAgICAgICAoY2xpY2spPVwib25CdXR0b25DbGljayhwb3BvdmVyKVwiXG4gICAgICAgIFtsYWJlbF09XCJ0YXNrLmhlaWdodCA+IDQ5ID8gJycgOiB0YXNrLmV2ZW50W2NhbGVuZGFyRmllbGRzLlRpdGxlXSArICcgJyArICh0YXNrIHwgZnJvbVRvVGltZSlcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhc2suaGVpZ2h0ID4gNDlcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyB0YXNrLmV2ZW50W2NhbGVuZGFyRmllbGRzLlRpdGxlXSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyB0YXNrIHwgZnJvbVRvVGltZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
|