iptdevs-design-system
Version:
Library common elements into IPT Plattform.
52 lines • 33.1 kB
JavaScript
import { Component, Input } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../../../core/pipes/course-pipes/schedule-form.pipe";
import * as i3 from "../../../core/pipes/course-pipes/time-form.pipe";
import * as i4 from "../../../core/pipes/course-pipes/type-level.pipe";
export class CardSelectCourseComponent {
constructor() {
this.jornada = 0;
}
ngOnInit() {
if (this.courseSelect && this.courseSelect.course_schedule) {
const schedule = this.courseSelect.course_schedule[0];
this.jornada = this.getJornada(schedule);
}
}
getJornada(schedule) {
const timeRegex = /\b\d{2}:\d{2}:\d{2}\b/g;
const times = schedule.match(timeRegex);
if (times && times.length > 0) {
const startTime = times[0];
if (this.isMorning(startTime)) {
return 1;
}
else if (this.isAfternoon(startTime)) {
return 2;
}
else if (this.isNight(startTime)) {
return 3;
}
}
return 0;
}
isMorning(time) {
return time >= '05:00:00' && time <= '11:59:59';
}
isAfternoon(time) {
return time >= '12:00:00' && time <= '17:59:59';
}
isNight(time) {
return time >= '18:00:00';
}
}
CardSelectCourseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CardSelectCourseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
CardSelectCourseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: CardSelectCourseComponent, selector: "ipt-card-select-course-self-cod-managed", inputs: { courseSelect: "courseSelect" }, ngImport: i0, template: "<!-- <main class=\"container-card\">\n <div class=\"w-auto\" >\n <div class=\"card\" (click)=\"selectDepartment(courseSelect)\">\n <div class=\"card-text\">\n <span class=\"date\">{{ courseSelect.course_type.label }}</span><br>\n <strong class=\"type-theory\">Clases Teoricas: </strong>{{ courseSelect.course_schedule | scheduleFormat }}<br>\n <strong class=\"type-theory\">Horario Teorico: </strong>{{ courseSelect.course_schedule | scheduleTimeFormat }}<br>\n <strong><hr></strong>\n <strong class=\"type-club\">Clases Club: </strong>\n <span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleFormat }}</span><br>\n <strong class=\"type-club\">Horario Club: </strong>\n <span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleTimeFormat }}</span><br>\n <strong>Modalidad: </strong>\n <span *ngIf=\"courseSelect.course_modality\">{{ courseSelect.course_modality.name | titlecase }}</span><br>\n <strong *ngIf=\"courseSelect.start_date === null\">Posible inicio: </strong>{{ courseSelect.start_date === null ? courseSelect.to_start : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.start_date === null\">\n <strong *ngIf=\"courseSelect.start_date !== null\">Fecha Inicio: </strong>{{ courseSelect.start_date !== null ? courseSelect.start_date : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.finish_date !== null\">\n <strong *ngIf=\"courseSelect.finish_date !== null\">Fecha culminacion: </strong>{{ courseSelect.finish_date !== null ? courseSelect.finish_date : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.finish_date !== null\">\n </div>\n </div>\n </div>\n</main> -->\n<main>\n<div class=\"container__tittle__card flex justify-content-center\">\n Plan Seleccionado\n</div>\n<div class=\"container-card\">\n <div class=\"card\">\n <p class=\"heading\">\n {{ courseSelect.course_type.label }}<br>\n </p>\n <div class=\"card-text\">\n <strong class=\"type-theory\">Clases Teoricas: </strong><span>{{ courseSelect.course_schedule | scheduleFormat }}</span><br>\n <strong class=\"type-theory\">Horario Teorico: </strong> <span>{{ courseSelect.course_schedule | scheduleTimeFormat }}</span><br>\n <strong><hr></strong>\n <strong class=\"type-club\">Clases Club: </strong><span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleFormat }}</span><br>\n <strong class=\"type-club\">Horario Club: </strong><span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleTimeFormat }}</span><br>\n <strong>Modalidad: </strong><span *ngIf=\"courseSelect.course_modality\">{{ courseSelect.course_modality.name | titlecase }}</span><br>\n <strong *ngIf=\"courseSelect.start_date === null\">Posible inicio: </strong><span>{{ courseSelect.start_date === null ? courseSelect.to_start : null | date:'dd/MM/yyyy' }}</span><br *ngIf=\"courseSelect.start_date === null\">\n </div>\n <p>{{ courseSelect.english_level.name | typeLevel}}\n </p>\n </div>\n</div>\n</main>\n<!-- <main *ngIf=\"jornada === 2\" class=\"container-card\">\n <div class=\"w-auto\" >\n <div class=\"card\" (click)=\"selectDepartment(courseSelect)\">\n <div class=\"card-image\" [style.background-image]=\"'url(' + courseSelect.imageUrl + ')'\"></div>\n <div class=\"card-text\">\n <span class=\"date\">{{ courseSelect.course_type.label }}</span><br>\n <strong class=\"type-theory\">Clases Teoricas: </strong>{{ courseSelect.course_schedule | scheduleFormat }}<br>\n <strong class=\"type-theory\">Horario Teorico: </strong>{{ courseSelect.course_schedule | scheduleTimeFormat }}<br>\n <strong><hr></strong>\n <strong class=\"type-club\">Clases Club: </strong>\n <span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleFormat }}</span><br>\n <strong class=\"type-club\">Horario Club: </strong>\n <span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleTimeFormat }}</span><br>\n <strong>Modalidad: </strong>\n <span *ngIf=\"courseSelect.course_modality\">{{ courseSelect.course_modality.name | titlecase }}</span><br>\n <strong *ngIf=\"courseSelect.start_date === null\">Posible inicio: </strong>{{ courseSelect.start_date === null ? courseSelect.to_start : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.start_date === null\">\n <strong *ngIf=\"courseSelect.start_date !== null\">Fecha Inicio: </strong>{{ courseSelect.start_date !== null ? courseSelect.start_date : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.finish_date !== null\">\n <strong *ngIf=\"courseSelect.finish_date !== null\">Fecha culminacion: </strong>{{ courseSelect.finish_date !== null ? courseSelect.finish_date : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.finish_date !== null\">\n </div>\n </div>\n </div>\n</main>\n<main *ngIf=\"jornada === 3\" class=\"container-card\">\n <div class=\"w-auto\" >\n <div class=\"card\" (click)=\"selectDepartment(courseSelect)\">\n <div class=\"card-image\" [style.background-image]=\"'url(' + courseSelect.imageUrl + ')'\"></div>\n <div class=\"card-text\">\n <span class=\"date\">{{ courseSelect.course_type.label }}</span><br>\n <strong class=\"type-theory\">Clases Teoricas: </strong>{{ courseSelect.course_schedule | scheduleFormat }}<br>\n <strong class=\"type-theory\">Horario Teorico: </strong>{{ courseSelect.course_schedule | scheduleTimeFormat }}<br>\n <strong><hr></strong>\n <strong class=\"type-club\">Clases Club: </strong>\n <span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleFormat }}</span><br>\n <strong class=\"type-club\">Horario Club: </strong>\n <span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleTimeFormat }}</span><br>\n <strong>Modalidad: </strong>\n <span *ngIf=\"courseSelect.course_modality\">{{ courseSelect.course_modality.name | titlecase }}</span><br>\n <strong *ngIf=\"courseSelect.start_date === null\">Posible inicio: </strong>{{ courseSelect.start_date === null ? courseSelect.to_start : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.start_date === null\">\n <strong *ngIf=\"courseSelect.start_date !== null\">Fecha Inicio: </strong>{{ courseSelect.start_date !== null ? courseSelect.start_date : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.finish_date !== null\">\n <strong *ngIf=\"courseSelect.finish_date !== null\">Fecha culminacion: </strong>{{ courseSelect.finish_date !== null ? courseSelect.finish_date : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.finish_date !== null\">\n </div>\n </div>\n </div>\n</main> -->\n", styles: [".container-card{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-evenly}.card-image{grid-area:image;border-top-left-radius:65px;border-top-right-radius:65px;background-color:coral;background-size:cover;box-shadow:0 2px 5px #5e6173}.card-text .date{color:#fff;font-size:15px}.card-text p{color:gray;font-size:13px;font-weight:300}.card-text h2{margin-top:0;font-size:28px}.type-theory{color:#c2f0f8;font-weight:100;font-size:small}.type-club{color:#92f7af;font-weight:100;font-size:small}.card{position:relative;width:190px;height:254px;background-color:#565656;display:flex;flex-direction:column;justify-content:end;padding:12px;gap:12px;border-radius:8px;cursor:pointer}.card:before{content:\"\";position:absolute;inset:0 0 0 -5px;margin:auto;width:200px;height:264px;border-radius:10px;background:linear-gradient(175deg,rgba(4,18,106,1) 27%,rgba(48,63,155,1) 53%,rgba(28,119,247,1) 90%);z-index:-10;pointer-events:none;transition:all .6s cubic-bezier(.175,.885,.32,1.275)}.card:after{content:\"\";z-index:-1;position:absolute;inset:0;background:linear-gradient(-45deg,rgba(0,63,255,1) 0%,rgba(4,18,106,1) 100%);transform:translateZ(0) scale(.95);filter:blur(20px)}.heading{text-transform:capitalize;font-weight:700;color:#fff}.card p:not(.heading){font-size:14px}.card p:last-child{color:#0497d9;font-weight:600}.card:hover:after{filter:blur(30px)}.card:hover:before{transform:rotate(-90deg) scaleX(1.34) scaleY(.77)}span,strong{color:#fff;font-weight:100;font-size:small}.container-card{z-index:0;position:relative;justify-content:center;display:flex;margin:1rem 0 3rem}.container__tittle__card{margin-top:2rem;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i2.ScheduleFormatPipe, name: "scheduleFormat" }, { kind: "pipe", type: i3.ScheduleTimeFormatPipe, name: "scheduleTimeFormat" }, { kind: "pipe", type: i4.TypeLevelPipe, name: "typeLevel" }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CardSelectCourseComponent, decorators: [{
type: Component,
args: [{ selector: 'ipt-card-select-course-self-cod-managed', template: "<!-- <main class=\"container-card\">\n <div class=\"w-auto\" >\n <div class=\"card\" (click)=\"selectDepartment(courseSelect)\">\n <div class=\"card-text\">\n <span class=\"date\">{{ courseSelect.course_type.label }}</span><br>\n <strong class=\"type-theory\">Clases Teoricas: </strong>{{ courseSelect.course_schedule | scheduleFormat }}<br>\n <strong class=\"type-theory\">Horario Teorico: </strong>{{ courseSelect.course_schedule | scheduleTimeFormat }}<br>\n <strong><hr></strong>\n <strong class=\"type-club\">Clases Club: </strong>\n <span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleFormat }}</span><br>\n <strong class=\"type-club\">Horario Club: </strong>\n <span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleTimeFormat }}</span><br>\n <strong>Modalidad: </strong>\n <span *ngIf=\"courseSelect.course_modality\">{{ courseSelect.course_modality.name | titlecase }}</span><br>\n <strong *ngIf=\"courseSelect.start_date === null\">Posible inicio: </strong>{{ courseSelect.start_date === null ? courseSelect.to_start : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.start_date === null\">\n <strong *ngIf=\"courseSelect.start_date !== null\">Fecha Inicio: </strong>{{ courseSelect.start_date !== null ? courseSelect.start_date : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.finish_date !== null\">\n <strong *ngIf=\"courseSelect.finish_date !== null\">Fecha culminacion: </strong>{{ courseSelect.finish_date !== null ? courseSelect.finish_date : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.finish_date !== null\">\n </div>\n </div>\n </div>\n</main> -->\n<main>\n<div class=\"container__tittle__card flex justify-content-center\">\n Plan Seleccionado\n</div>\n<div class=\"container-card\">\n <div class=\"card\">\n <p class=\"heading\">\n {{ courseSelect.course_type.label }}<br>\n </p>\n <div class=\"card-text\">\n <strong class=\"type-theory\">Clases Teoricas: </strong><span>{{ courseSelect.course_schedule | scheduleFormat }}</span><br>\n <strong class=\"type-theory\">Horario Teorico: </strong> <span>{{ courseSelect.course_schedule | scheduleTimeFormat }}</span><br>\n <strong><hr></strong>\n <strong class=\"type-club\">Clases Club: </strong><span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleFormat }}</span><br>\n <strong class=\"type-club\">Horario Club: </strong><span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleTimeFormat }}</span><br>\n <strong>Modalidad: </strong><span *ngIf=\"courseSelect.course_modality\">{{ courseSelect.course_modality.name | titlecase }}</span><br>\n <strong *ngIf=\"courseSelect.start_date === null\">Posible inicio: </strong><span>{{ courseSelect.start_date === null ? courseSelect.to_start : null | date:'dd/MM/yyyy' }}</span><br *ngIf=\"courseSelect.start_date === null\">\n </div>\n <p>{{ courseSelect.english_level.name | typeLevel}}\n </p>\n </div>\n</div>\n</main>\n<!-- <main *ngIf=\"jornada === 2\" class=\"container-card\">\n <div class=\"w-auto\" >\n <div class=\"card\" (click)=\"selectDepartment(courseSelect)\">\n <div class=\"card-image\" [style.background-image]=\"'url(' + courseSelect.imageUrl + ')'\"></div>\n <div class=\"card-text\">\n <span class=\"date\">{{ courseSelect.course_type.label }}</span><br>\n <strong class=\"type-theory\">Clases Teoricas: </strong>{{ courseSelect.course_schedule | scheduleFormat }}<br>\n <strong class=\"type-theory\">Horario Teorico: </strong>{{ courseSelect.course_schedule | scheduleTimeFormat }}<br>\n <strong><hr></strong>\n <strong class=\"type-club\">Clases Club: </strong>\n <span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleFormat }}</span><br>\n <strong class=\"type-club\">Horario Club: </strong>\n <span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleTimeFormat }}</span><br>\n <strong>Modalidad: </strong>\n <span *ngIf=\"courseSelect.course_modality\">{{ courseSelect.course_modality.name | titlecase }}</span><br>\n <strong *ngIf=\"courseSelect.start_date === null\">Posible inicio: </strong>{{ courseSelect.start_date === null ? courseSelect.to_start : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.start_date === null\">\n <strong *ngIf=\"courseSelect.start_date !== null\">Fecha Inicio: </strong>{{ courseSelect.start_date !== null ? courseSelect.start_date : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.finish_date !== null\">\n <strong *ngIf=\"courseSelect.finish_date !== null\">Fecha culminacion: </strong>{{ courseSelect.finish_date !== null ? courseSelect.finish_date : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.finish_date !== null\">\n </div>\n </div>\n </div>\n</main>\n<main *ngIf=\"jornada === 3\" class=\"container-card\">\n <div class=\"w-auto\" >\n <div class=\"card\" (click)=\"selectDepartment(courseSelect)\">\n <div class=\"card-image\" [style.background-image]=\"'url(' + courseSelect.imageUrl + ')'\"></div>\n <div class=\"card-text\">\n <span class=\"date\">{{ courseSelect.course_type.label }}</span><br>\n <strong class=\"type-theory\">Clases Teoricas: </strong>{{ courseSelect.course_schedule | scheduleFormat }}<br>\n <strong class=\"type-theory\">Horario Teorico: </strong>{{ courseSelect.course_schedule | scheduleTimeFormat }}<br>\n <strong><hr></strong>\n <strong class=\"type-club\">Clases Club: </strong>\n <span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleFormat }}</span><br>\n <strong class=\"type-club\">Horario Club: </strong>\n <span *ngIf=\"courseSelect.course_club\">{{ courseSelect.course_club.course_schedule | scheduleTimeFormat }}</span><br>\n <strong>Modalidad: </strong>\n <span *ngIf=\"courseSelect.course_modality\">{{ courseSelect.course_modality.name | titlecase }}</span><br>\n <strong *ngIf=\"courseSelect.start_date === null\">Posible inicio: </strong>{{ courseSelect.start_date === null ? courseSelect.to_start : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.start_date === null\">\n <strong *ngIf=\"courseSelect.start_date !== null\">Fecha Inicio: </strong>{{ courseSelect.start_date !== null ? courseSelect.start_date : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.finish_date !== null\">\n <strong *ngIf=\"courseSelect.finish_date !== null\">Fecha culminacion: </strong>{{ courseSelect.finish_date !== null ? courseSelect.finish_date : null | date:'dd/MM/yyyy' }}<br *ngIf=\"courseSelect.finish_date !== null\">\n </div>\n </div>\n </div>\n</main> -->\n", styles: [".container-card{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-evenly}.card-image{grid-area:image;border-top-left-radius:65px;border-top-right-radius:65px;background-color:coral;background-size:cover;box-shadow:0 2px 5px #5e6173}.card-text .date{color:#fff;font-size:15px}.card-text p{color:gray;font-size:13px;font-weight:300}.card-text h2{margin-top:0;font-size:28px}.type-theory{color:#c2f0f8;font-weight:100;font-size:small}.type-club{color:#92f7af;font-weight:100;font-size:small}.card{position:relative;width:190px;height:254px;background-color:#565656;display:flex;flex-direction:column;justify-content:end;padding:12px;gap:12px;border-radius:8px;cursor:pointer}.card:before{content:\"\";position:absolute;inset:0 0 0 -5px;margin:auto;width:200px;height:264px;border-radius:10px;background:linear-gradient(175deg,rgba(4,18,106,1) 27%,rgba(48,63,155,1) 53%,rgba(28,119,247,1) 90%);z-index:-10;pointer-events:none;transition:all .6s cubic-bezier(.175,.885,.32,1.275)}.card:after{content:\"\";z-index:-1;position:absolute;inset:0;background:linear-gradient(-45deg,rgba(0,63,255,1) 0%,rgba(4,18,106,1) 100%);transform:translateZ(0) scale(.95);filter:blur(20px)}.heading{text-transform:capitalize;font-weight:700;color:#fff}.card p:not(.heading){font-size:14px}.card p:last-child{color:#0497d9;font-weight:600}.card:hover:after{filter:blur(30px)}.card:hover:before{transform:rotate(-90deg) scaleX(1.34) scaleY(.77)}span,strong{color:#fff;font-weight:100;font-size:small}.container-card{z-index:0;position:relative;justify-content:center;display:flex;margin:1rem 0 3rem}.container__tittle__card{margin-top:2rem;font-weight:700}\n"] }]
}], propDecorators: { courseSelect: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1zZWxlY3QtY291cnNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2Rlc2lnbi1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9jYXJkLXNlbGVjdC1jb3Vyc2UvY2FyZC1zZWxlY3QtY291cnNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2Rlc2lnbi1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9jYXJkLXNlbGVjdC1jb3Vyc2UvY2FyZC1zZWxlY3QtY291cnNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFRekQsTUFBTSxPQUFPLHlCQUF5QjtJQUx0QztRQVFFLFlBQU8sR0FBVyxDQUFDLENBQUM7S0F3Q3JCO0lBdENDLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUU7WUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxRQUFnQjtRQUN6QixNQUFNLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sQ0FBQyxDQUFDO2FBQ1Y7aUJBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUN0QyxPQUFPLENBQUMsQ0FBQzthQUNWO2lCQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDbEMsT0FBTyxDQUFDLENBQUM7YUFDVjtTQUNGO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVk7UUFDcEIsT0FBTyxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksSUFBSSxVQUFVLENBQUM7SUFDbEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLE9BQU8sSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUksVUFBVSxDQUFDO0lBQ2xELENBQUM7SUFFRCxPQUFPLENBQUMsSUFBWTtRQUNsQixPQUFPLElBQUksSUFBSSxVQUFVLENBQUM7SUFDNUIsQ0FBQzs7c0hBdkNVLHlCQUF5QjswR0FBekIseUJBQXlCLHlIQ1J0Qyw2MU5Bd0ZBOzJGRGhGYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UseUNBQXlDOzhCQU0xQyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaXB0LWNhcmQtc2VsZWN0LWNvdXJzZS1zZWxmLWNvZC1tYW5hZ2VkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmQtc2VsZWN0LWNvdXJzZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhcmQtc2VsZWN0LWNvdXJzZS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2FyZFNlbGVjdENvdXJzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcblxuICBASW5wdXQoKSBjb3Vyc2VTZWxlY3Q/OiBhbnk7XG4gIGpvcm5hZGE6IG51bWJlciA9IDA7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY291cnNlU2VsZWN0ICYmIHRoaXMuY291cnNlU2VsZWN0LmNvdXJzZV9zY2hlZHVsZSkge1xuICAgICAgY29uc3Qgc2NoZWR1bGUgPSB0aGlzLmNvdXJzZVNlbGVjdC5jb3Vyc2Vfc2NoZWR1bGVbMF07XG4gICAgICB0aGlzLmpvcm5hZGEgPSB0aGlzLmdldEpvcm5hZGEoc2NoZWR1bGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEpvcm5hZGEoc2NoZWR1bGU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgdGltZVJlZ2V4ID0gL1xcYlxcZHsyfTpcXGR7Mn06XFxkezJ9XFxiL2c7XG4gICAgY29uc3QgdGltZXMgPSBzY2hlZHVsZS5tYXRjaCh0aW1lUmVnZXgpO1xuXG4gICAgaWYgKHRpbWVzICYmIHRpbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHRpbWVzWzBdO1xuICAgICAgaWYgKHRoaXMuaXNNb3JuaW5nKHN0YXJ0VGltZSkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBZnRlcm5vb24oc3RhcnRUaW1lKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc05pZ2h0KHN0YXJ0VGltZSkpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaXNNb3JuaW5nKHRpbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aW1lID49ICcwNTowMDowMCcgJiYgdGltZSA8PSAnMTE6NTk6NTknO1xuICB9XG5cbiAgaXNBZnRlcm5vb24odGltZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRpbWUgPj0gJzEyOjAwOjAwJyAmJiB0aW1lIDw9ICcxNzo1OTo1OSc7XG4gIH1cblxuICBpc05pZ2h0KHRpbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aW1lID49ICcxODowMDowMCc7XG4gIH1cblxuXG5cbn1cbiIsIjwhLS0gPG1haW4gY2xhc3M9XCJjb250YWluZXItY2FyZFwiPlxuICA8ZGl2IGNsYXNzPVwidy1hdXRvXCIgPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgKGNsaWNrKT1cInNlbGVjdERlcGFydG1lbnQoY291cnNlU2VsZWN0KVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGVcIj57eyBjb3Vyc2VTZWxlY3QuY291cnNlX3R5cGUubGFiZWwgfX08L3NwYW4+PGJyPlxuICAgICAgICA8c3Ryb25nIGNsYXNzPVwidHlwZS10aGVvcnlcIj5DbGFzZXMgVGVvcmljYXM6IDwvc3Ryb25nPnt7IGNvdXJzZVNlbGVjdC5jb3Vyc2Vfc2NoZWR1bGUgfCBzY2hlZHVsZUZvcm1hdCB9fTxicj5cbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cInR5cGUtdGhlb3J5XCI+SG9yYXJpbyBUZW9yaWNvOiA8L3N0cm9uZz57eyBjb3Vyc2VTZWxlY3QuY291cnNlX3NjaGVkdWxlIHwgc2NoZWR1bGVUaW1lRm9ybWF0IH19PGJyPlxuICAgICAgICA8c3Ryb25nPjxocj48L3N0cm9uZz5cbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cInR5cGUtY2x1YlwiPkNsYXNlcyBDbHViOiA8L3N0cm9uZz5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvdXJzZVNlbGVjdC5jb3Vyc2VfY2x1YlwiPnt7IGNvdXJzZVNlbGVjdC5jb3Vyc2VfY2x1Yi5jb3Vyc2Vfc2NoZWR1bGUgfCBzY2hlZHVsZUZvcm1hdCB9fTwvc3Bhbj48YnI+XG4gICAgICAgIDxzdHJvbmcgY2xhc3M9XCJ0eXBlLWNsdWJcIj5Ib3JhcmlvIENsdWI6IDwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY291cnNlU2VsZWN0LmNvdXJzZV9jbHViXCI+e3sgY291cnNlU2VsZWN0LmNvdXJzZV9jbHViLmNvdXJzZV9zY2hlZHVsZSB8IHNjaGVkdWxlVGltZUZvcm1hdCB9fTwvc3Bhbj48YnI+XG4gICAgICAgIDxzdHJvbmc+TW9kYWxpZGFkOiA8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjb3Vyc2VTZWxlY3QuY291cnNlX21vZGFsaXR5XCI+e3sgY291cnNlU2VsZWN0LmNvdXJzZV9tb2RhbGl0eS5uYW1lIHwgdGl0bGVjYXNlIH19PC9zcGFuPjxicj5cbiAgICAgICAgPHN0cm9uZyAqbmdJZj1cImNvdXJzZVNlbGVjdC5zdGFydF9kYXRlID09PSBudWxsXCI+UG9zaWJsZSBpbmljaW86IDwvc3Ryb25nPnt7IGNvdXJzZVNlbGVjdC5zdGFydF9kYXRlID09PSBudWxsID8gY291cnNlU2VsZWN0LnRvX3N0YXJ0IDogbnVsbCB8IGRhdGU6J2RkL01NL3l5eXknIH19PGJyICpuZ0lmPVwiY291cnNlU2VsZWN0LnN0YXJ0X2RhdGUgPT09IG51bGxcIj5cbiAgICAgICAgPHN0cm9uZyAqbmdJZj1cImNvdXJzZVNlbGVjdC5zdGFydF9kYXRlICE9PSBudWxsXCI+RmVjaGEgSW5pY2lvOiA8L3N0cm9uZz57eyBjb3Vyc2VTZWxlY3Quc3RhcnRfZGF0ZSAhPT0gbnVsbCA/IGNvdXJzZVNlbGVjdC5zdGFydF9kYXRlIDogbnVsbCB8IGRhdGU6J2RkL01NL3l5eXknIH19PGJyICpuZ0lmPVwiY291cnNlU2VsZWN0LmZpbmlzaF9kYXRlICE9PSBudWxsXCI+XG4gICAgICAgIDxzdHJvbmcgKm5nSWY9XCJjb3Vyc2VTZWxlY3QuZmluaXNoX2RhdGUgIT09IG51bGxcIj5GZWNoYSBjdWxtaW5hY2lvbjogPC9zdHJvbmc+e3sgY291cnNlU2VsZWN0LmZpbmlzaF9kYXRlICE9PSBudWxsID8gY291cnNlU2VsZWN0LmZpbmlzaF9kYXRlIDogbnVsbCB8IGRhdGU6J2RkL01NL3l5eXknIH19PGJyICpuZ0lmPVwiY291cnNlU2VsZWN0LmZpbmlzaF9kYXRlICE9PSBudWxsXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L21haW4+IC0tPlxuPG1haW4+XG48ZGl2IGNsYXNzPVwiY29udGFpbmVyX190aXR0bGVfX2NhcmQgZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gIFBsYW4gU2VsZWNjaW9uYWRvXG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJjb250YWluZXItY2FyZFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgIDxwIGNsYXNzPVwiaGVhZGluZ1wiPlxuICAgICAge3sgY291cnNlU2VsZWN0LmNvdXJzZV90eXBlLmxhYmVsIH19PGJyPlxuICAgIDwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICA8c3Ryb25nIGNsYXNzPVwidHlwZS10aGVvcnlcIj5DbGFzZXMgVGVvcmljYXM6IDwvc3Ryb25nPjxzcGFuPnt7IGNvdXJzZVNlbGVjdC5jb3Vyc2Vfc2NoZWR1bGUgfCBzY2hlZHVsZUZvcm1hdCB9fTwvc3Bhbj48YnI+XG4gICAgICA8c3Ryb25nIGNsYXNzPVwidHlwZS10aGVvcnlcIj5Ib3JhcmlvIFRlb3JpY286IDwvc3Ryb25nPiA8c3Bhbj57eyBjb3Vyc2VTZWxlY3QuY291cnNlX3NjaGVkdWxlIHwgc2NoZWR1bGVUaW1lRm9ybWF0IH19PC9zcGFuPjxicj5cbiAgICAgIDxzdHJvbmc+PGhyPjwvc3Ryb25nPlxuICAgICAgPHN0cm9uZyBjbGFzcz1cInR5cGUtY2x1YlwiPkNsYXNlcyBDbHViOiA8L3N0cm9uZz48c3BhbiAqbmdJZj1cImNvdXJzZVNlbGVjdC5jb3Vyc2VfY2x1YlwiPnt7IGNvdXJzZVNlbGVjdC5jb3Vyc2VfY2x1Yi5jb3Vyc2Vfc2NoZWR1bGUgfCBzY2hlZHVsZUZvcm1hdCB9fTwvc3Bhbj48YnI+XG4gICAgICA8c3Ryb25nIGNsYXNzPVwidHlwZS1jbHViXCI+SG9yYXJpbyBDbHViOiA8L3N0cm9uZz48c3BhbiAqbmdJZj1cImNvdXJzZVNlbGVjdC5jb3Vyc2VfY2x1YlwiPnt7IGNvdXJzZVNlbGVjdC5jb3Vyc2VfY2x1Yi5jb3Vyc2Vfc2NoZWR1bGUgfCBzY2hlZHVsZVRpbWVGb3JtYXQgfX08L3NwYW4+PGJyPlxuICAgICAgPHN0cm9uZz5Nb2RhbGlkYWQ6IDwvc3Ryb25nPjxzcGFuICpuZ0lmPVwiY291cnNlU2VsZWN0LmNvdXJzZV9tb2RhbGl0eVwiPnt7IGNvdXJzZVNlbGVjdC5jb3Vyc2VfbW9kYWxpdHkubmFtZSB8IHRpdGxlY2FzZSB9fTwvc3Bhbj48YnI+XG4gICAgICA8c3Ryb25nICpuZ0lmPVwiY291cnNlU2VsZWN0LnN0YXJ0X2RhdGUgPT09IG51bGxcIj5Qb3NpYmxlIGluaWNpbzogPC9zdHJvbmc+PHNwYW4+e3sgY291cnNlU2VsZWN0LnN0YXJ0X2RhdGUgPT09IG51bGwgPyBjb3Vyc2VTZWxlY3QudG9fc3RhcnQgOiBudWxsIHwgZGF0ZTonZGQvTU0veXl5eScgfX08L3NwYW4+PGJyICpuZ0lmPVwiY291cnNlU2VsZWN0LnN0YXJ0X2RhdGUgPT09IG51bGxcIj5cbiAgICA8L2Rpdj5cbiAgICA8cD57eyBjb3Vyc2VTZWxlY3QuZW5nbGlzaF9sZXZlbC5uYW1lIHwgdHlwZUxldmVsfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuPC9kaXY+XG48L21haW4+XG48IS0tIDxtYWluICpuZ0lmPVwiam9ybmFkYSA9PT0gMlwiIGNsYXNzPVwiY29udGFpbmVyLWNhcmRcIj5cbiAgPGRpdiBjbGFzcz1cInctYXV0b1wiID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiIChjbGljayk9XCJzZWxlY3REZXBhcnRtZW50KGNvdXJzZVNlbGVjdClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWltYWdlXCIgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiJ3VybCgnICsgY291cnNlU2VsZWN0LmltYWdlVXJsICsgJyknXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGF0ZVwiPnt7IGNvdXJzZVNlbGVjdC5jb3Vyc2VfdHlwZS5sYWJlbCB9fTwvc3Bhbj48YnI+XG4gICAgICAgIDxzdHJvbmcgY2xhc3M9XCJ0eXBlLXRoZW9yeVwiPkNsYXNlcyBUZW9yaWNhczogPC9zdHJvbmc+e3sgY291cnNlU2VsZWN0LmNvdXJzZV9zY2hlZHVsZSB8IHNjaGVkdWxlRm9ybWF0IH19PGJyPlxuICAgICAgICA8c3Ryb25nIGNsYXNzPVwidHlwZS10aGVvcnlcIj5Ib3JhcmlvIFRlb3JpY286IDwvc3Ryb25nPnt7IGNvdXJzZVNlbGVjdC5jb3Vyc2Vfc2NoZWR1bGUgfCBzY2hlZHVsZVRpbWVGb3JtYXQgfX08YnI+XG4gICAgICAgIDxzdHJvbmc+PGhyPjwvc3Ryb25nPlxuICAgICAgICA8c3Ryb25nIGNsYXNzPVwidHlwZS1jbHViXCI+Q2xhc2VzIENsdWI6IDwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY291cnNlU2VsZWN0LmNvdXJzZV9jbHViXCI+e3sgY291cnNlU2VsZWN0LmNvdXJzZV9jbHViLmNvdXJzZV9zY2hlZHVsZSB8IHNjaGVkdWxlRm9ybWF0IH19PC9zcGFuPjxicj5cbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cInR5cGUtY2x1YlwiPkhvcmFyaW8gQ2x1YjogPC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb3Vyc2VTZWxlY3QuY291cnNlX2NsdWJcIj57eyBjb3Vyc2VTZWxlY3QuY291cnNlX2NsdWIuY291cnNlX3NjaGVkdWxlIHwgc2NoZWR1bGVUaW1lRm9ybWF0IH19PC9zcGFuPjxicj5cbiAgICAgICAgPHN0cm9uZz5Nb2RhbGlkYWQ6IDwvc3Ryb25nPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvdXJzZVNlbGVjdC5jb3Vyc2VfbW9kYWxpdHlcIj57eyBjb3Vyc2VTZWxlY3QuY291cnNlX21vZGFsaXR5Lm5hbWUgfCB0aXRsZWNhc2UgfX08L3NwYW4+PGJyPlxuICAgICAgICA8c3Ryb25nICpuZ0lmPVwiY291cnNlU2VsZWN0LnN0YXJ0X2RhdGUgPT09IG51bGxcIj5Qb3NpYmxlIGluaWNpbzogPC9zdHJvbmc+e3sgY291cnNlU2VsZWN0LnN0YXJ0X2RhdGUgPT09IG51bGwgPyBjb3Vyc2VTZWxlY3QudG9fc3RhcnQgOiBudWxsIHwgZGF0ZTonZGQvTU0veXl5eScgfX08YnIgKm5nSWY9XCJjb3Vyc2VTZWxlY3Quc3RhcnRfZGF0ZSA9PT0gbnVsbFwiPlxuICAgICAgICA8c3Ryb25nICpuZ0lmPVwiY291cnNlU2VsZWN0LnN0YXJ0X2RhdGUgIT09IG51bGxcIj5GZWNoYSBJbmljaW86IDwvc3Ryb25nPnt7IGNvdXJzZVNlbGVjdC5zdGFydF9kYXRlICE9PSBudWxsID8gY291cnNlU2VsZWN0LnN0YXJ0X2RhdGUgOiBudWxsIHwgZGF0ZTonZGQvTU0veXl5eScgfX08YnIgKm5nSWY9XCJjb3Vyc2VTZWxlY3QuZmluaXNoX2RhdGUgIT09IG51bGxcIj5cbiAgICAgICAgPHN0cm9uZyAqbmdJZj1cImNvdXJzZVNlbGVjdC5maW5pc2hfZGF0ZSAhPT0gbnVsbFwiPkZlY2hhIGN1bG1pbmFjaW9uOiA8L3N0cm9uZz57eyBjb3Vyc2VTZWxlY3QuZmluaXNoX2RhdGUgIT09IG51bGwgPyBjb3Vyc2VTZWxlY3QuZmluaXNoX2RhdGUgOiBudWxsIHwgZGF0ZTonZGQvTU0veXl5eScgfX08YnIgKm5nSWY9XCJjb3Vyc2VTZWxlY3QuZmluaXNoX2RhdGUgIT09IG51bGxcIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbWFpbj5cbjxtYWluICpuZ0lmPVwiam9ybmFkYSA9PT0gM1wiIGNsYXNzPVwiY29udGFpbmVyLWNhcmRcIj5cbiAgPGRpdiBjbGFzcz1cInctYXV0b1wiID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiIChjbGljayk9XCJzZWxlY3REZXBhcnRtZW50KGNvdXJzZVNlbGVjdClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWltYWdlXCIgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiJ3VybCgnICsgY291cnNlU2VsZWN0LmltYWdlVXJsICsgJyknXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGF0ZVwiPnt7IGNvdXJzZVNlbGVjdC5jb3Vyc2VfdHlwZS5sYWJlbCB9fTwvc3Bhbj48YnI+XG4gICAgICAgIDxzdHJvbmcgY2xhc3M9XCJ0eXBlLXRoZW9yeVwiPkNsYXNlcyBUZW9yaWNhczogPC9zdHJvbmc+e3sgY291cnNlU2VsZWN0LmNvdXJzZV9zY2hlZHVsZSB8IHNjaGVkdWxlRm9ybWF0IH19PGJyPlxuICAgICAgICA8c3Ryb25nIGNsYXNzPVwidHlwZS10aGVvcnlcIj5Ib3JhcmlvIFRlb3JpY286IDwvc3Ryb25nPnt7IGNvdXJzZVNlbGVjdC5jb3Vyc2Vfc2NoZWR1bGUgfCBzY2hlZHVsZVRpbWVGb3JtYXQgfX08YnI+XG4gICAgICAgIDxzdHJvbmc+PGhyPjwvc3Ryb25nPlxuICAgICAgICA8c3Ryb25nIGNsYXNzPVwidHlwZS1jbHViXCI+Q2xhc2VzIENsdWI6IDwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY291cnNlU2VsZWN0LmNvdXJzZV9jbHViXCI+e3sgY291cnNlU2VsZWN0LmNvdXJzZV9jbHViLmNvdXJzZV9zY2hlZHVsZSB8IHNjaGVkdWxlRm9ybWF0IH19PC9zcGFuPjxicj5cbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cInR5cGUtY2x1YlwiPkhvcmFyaW8gQ2x1YjogPC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb3Vyc2VTZWxlY3QuY291cnNlX2NsdWJcIj57eyBjb3Vyc2VTZWxlY3QuY291cnNlX2NsdWIuY291cnNlX3NjaGVkdWxlIHwgc2NoZWR1bGVUaW1lRm9ybWF0IH19PC9zcGFuPjxicj5cbiAgICAgICAgPHN0cm9uZz5Nb2RhbGlkYWQ6IDwvc3Ryb25nPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvdXJzZVNlbGVjdC5jb3Vyc2VfbW9kYWxpdHlcIj57eyBjb3Vyc2VTZWxlY3QuY291cnNlX21vZGFsaXR5Lm5hbWUgfCB0aXRsZWNhc2UgfX08L3NwYW4+PGJyPlxuICAgICAgICA8c3Ryb25nICpuZ0lmPVwiY291cnNlU2VsZWN0LnN0YXJ0X2RhdGUgPT09IG51bGxcIj5Qb3NpYmxlIGluaWNpbzogPC9zdHJvbmc+e3sgY291cnNlU2VsZWN0LnN0YXJ0X2RhdGUgPT09IG51bGwgPyBjb3Vyc2VTZWxlY3QudG9fc3RhcnQgOiBudWxsIHwgZGF0ZTonZGQvTU0veXl5eScgfX08YnIgKm5nSWY9XCJjb3Vyc2VTZWxlY3Quc3RhcnRfZGF0ZSA9PT0gbnVsbFwiPlxuICAgICAgICA8c3Ryb25nICpuZ0lmPVwiY291cnNlU2VsZWN0LnN0YXJ0X2RhdGUgIT09IG51bGxcIj5GZWNoYSBJbmljaW86IDwvc3Ryb25nPnt7IGNvdXJzZVNlbGVjdC5zdGFydF9kYXRlICE9PSBudWxsID8gY291cnNlU2VsZWN0LnN0YXJ0X2RhdGUgOiBudWxsIHwgZGF0ZTonZGQvTU0veXl5eScgfX08YnIgKm5nSWY9XCJjb3Vyc2VTZWxlY3QuZmluaXNoX2RhdGUgIT09IG51bGxcIj5cbiAgICAgICAgPHN0cm9uZyAqbmdJZj1cImNvdXJzZVNlbGVjdC5maW5pc2hfZGF0ZSAhPT0gbnVsbFwiPkZlY2hhIGN1bG1pbmFjaW9uOiA8L3N0cm9uZz57eyBjb3Vyc2VTZWxlY3QuZmluaXNoX2RhdGUgIT09IG51bGwgPyBjb3Vyc2VTZWxlY3QuZmluaXNoX2RhdGUgOiBudWxsIHwgZGF0ZTonZGQvTU0veXl5eScgfX08YnIgKm5nSWY9XCJjb3Vyc2VTZWxlY3QuZmluaXNoX2RhdGUgIT09IG51bGxcIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbWFpbj4gLS0+XG4iXX0=