kivio 1.4.3 → 1.4.4

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.
@@ -230,11 +230,11 @@ export class KvMainTableComponent {
230
230
  }
231
231
  }
232
232
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KvMainTableComponent, deps: [{ token: i1.PaginationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
233
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: KvMainTableComponent, isStandalone: true, selector: "lib-kv-main-table", inputs: { columns: "columns", data: "data", extraData: "extraData", showPaginator: "showPaginator", lazyLoading: "lazyLoading", loading: "loading", messageTitle: "messageTitle", messageDescription: "messageDescription", totalRecords: "totalRecords", message: "message", hasMoreItems: "hasMoreItems", tableId: "tableId", letFilters: "letFilters", totalItems: "totalItems" }, outputs: { onNameClicked: "onNameClicked", onPageChange: "onPageChange", onFilterChange: "onFilterChange" }, host: { listeners: { "document:click": "handleClickOutside($event)" } }, queries: [{ propertyName: "cellActionsTemplate", first: true, predicate: ["cellActions"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<lib-kv-loading [message]=\"message\" [isLoading]=\"loading\" > </lib-kv-loading>\r\n<ng-container *ngIf=\"!loading\">\r\n <div class=\"search-container\">\r\n <div class=\"search-section\">\r\n\r\n <div class=\"filters\">\r\n <ng-container *ngFor=\"let col of columns\">\r\n <div *ngIf=\"activeColumns.includes(col.key)\">\r\n <ng-container *ngIf=\"col.key === 'created_at'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"calendarOpen\">\r\n <div class=\"selected\" (click)=\"calendarOpen = !calendarOpen; dropdownOpenState = false; dropdownOpenType = false; dropdownOpenSource = false\">\r\n <span *ngIf=\"filters.created_at_start && filters.created_at_end\">\r\n {{ filters.created_at_start | date:'dd/MM/yyyy' }} - {{ filters.created_at_end | date:'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngIf=\"filters.created_at_start && !filters.created_at_end\">\r\n {{ filters.created_at_start | date:'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngIf=\"!filters.created_at_start && filters.created_at_end\">\r\n {{ filters.created_at_end | date:'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngIf=\"!filters.created_at_start && !filters.created_at_end\" class=\"placeholder\">\r\n Fecha de creaci\u00F3n\r\n </span>\r\n </div>\r\n \r\n <div class=\"calendar-popup\" *ngIf=\"calendarOpen\">\r\n <input type=\"date\" [(ngModel)]=\"filters.created_at_start\" (change)=\"updateRange()\" />\r\n <input type=\"date\" [(ngModel)]=\"filters.created_at_end\" (change)=\"updateRange()\" />\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"col.key === 'expire_at'\">\r\n <label>Fecha:</label>\r\n <input type=\"date\" [(ngModel)]=\"filters.expire_at\" />\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"col.key === 'state'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"dropdownOpenState\">\r\n <div class=\"selected\" (click)=\"dropdownOpenState = !dropdownOpenState; dropdownOpenType = false; dropdownOpenSource = false; calendarOpen = false\">\r\n <span *ngIf=\"filters.state\" class=\"state\" [ngClass]=\"filters.state\">\r\n {{ filters.state }}\r\n </span>\r\n <span *ngIf=\"!filters.state\" class=\"placeholder\">Estado</span>\r\n </div>\r\n \r\n <ul class=\"options\" *ngIf=\"dropdownOpenState\">\r\n <li *ngFor=\"let opt of options\"\r\n (click)=\"filters.state = opt; dropdownOpenState = false\"\r\n class=\"state\"\r\n [ngClass]=\"opt\">\r\n {{ opt }}\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"col.key === 'source'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"dropdownOpenSource\">\r\n <div class=\"selected\" (click)=\"dropdownOpenSource = !dropdownOpenSource; dropdownOpenState = false; dropdownOpenType = false; calendarOpen = false\">\r\n <span *ngIf=\"filters.source\" class=\"source\" >\r\n {{ filters.source }}\r\n </span>\r\n <span *ngIf=\"!filters.source\" class=\"placeholder\">Importado de</span>\r\n </div>\r\n \r\n <ul class=\"options\" *ngIf=\"dropdownOpenSource\">\r\n <li (click)=\"filters.source ='local'; dropdownOpenSource = false\"\r\n class=\"source\" [ngClass]=\"'local'\">local\r\n </li>\r\n <li (click)=\"filters.source = 'ecommerce'; dropdownOpenSource = false\"\r\n class=\"source\" [ngClass]=\"'ecommerce'\">ecommerce\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"col.key === 'type'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"dropdownOpenType\">\r\n <div class=\"selected\" (click)=\"dropdownOpenType = !dropdownOpenType; dropdownOpenState = false; dropdownOpenSource = false; calendarOpen = false\">\r\n <span *ngIf=\"filters.type\" class=\"type\" [ngClass]=\"filters.type.replace(' ', '-')\">\r\n {{ filters.type }}\r\n </span>\r\n <span *ngIf=\"!filters.type\" class=\"placeholder\">Tipo de oferta</span>\r\n </div>\r\n \r\n <ul class=\"options\" *ngIf=\"dropdownOpenType\">\r\n <li (click)=\"filters.type ='Regular auction'; dropdownOpenType = false\"\r\n class=\"type\" [ngClass]=\"'Regular-auction'\">Regular auction\r\n </li>\r\n <li (click)=\"filters.type = 'Quick offer'; dropdownOpenType = false\"\r\n class=\"type\" [ngClass]=\"'Quick-offer'\">Quick offer \r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"filter-container\" *ngIf=\"letFilters\">\r\n\r\n <div\r\n class=\"filter-overlay\"\r\n *ngIf=\"showFilterMenu\"\r\n (click)=\"showFilterMenu = false\">\r\n </div>\r\n\r\n <button \r\n (click)=\"showFilterMenu = !showFilterMenu; dropdownOpenState = false; dropdownOpenSource = false; calendarOpen = false; dropdownOpenType = false\" \r\n class=\"filter-button\"\r\n [class.active]=\"showFilterMenu\"\r\n >\r\n <span class=\"plus\">+</span>\r\n <span class=\"material-symbols-outlined filter-icon\">\r\n filter_alt\r\n </span>\r\n </button>\r\n\r\n <div class=\"filter-menu\" *ngIf=\"showFilterMenu\">\r\n <ng-container *ngFor=\"let col of columns\">\r\n <ng-container *ngIf=\"col.key !== 'name' && col.key !== 'images' && col.key !== 'pos_id' && col.key !== 'point_of_sale_id' && col.key !== 'description' \">\r\n <label class=\"custom-checkbox\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"activeColumns.includes(col.key)\"\r\n (change)=\"toggleColumn(col.key, $event)\"\r\n />\r\n <span class=\"label-text\">{{ col.label }}</span>\r\n </label>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n <input\r\n type=\"text\"\r\n class=\"input\"\r\n placeholder=\"Buscar...\"\r\n [(ngModel)]=\"filters.name\"\r\n />\r\n <button class=\"button--create\" (click)=\"onSearched()\">Buscar</button>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"(!data || data.length === 0) && !loading\">\r\n <lib-kv-resource-not-found class=\"resource-not-found\"\r\n [messageTitle]=\"messageTitle\"\r\n [messageDescription]=\"messageDescription\"></lib-kv-resource-not-found>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"(data && data.length > 0) || loading\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of columns\">{{ column.label }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of filteredData\">\r\n <td *ngFor=\"let column of columns\">\r\n <div class=\"state\" [ngClass]=\"item[column.key]\">\r\n <ng-container *ngIf=\"column.label === 'Services'\">\r\n <div class=\"service-info\" (click)=\"emitData(item)\">\r\n <img [src]=\"item.url || 'https://i.imgur.com/InRaVrL.jpg'\" alt=\"Imagen\" class=\"service-image\" />\r\n <a class=\"a-link\">{{ item.name }}</a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'name' && column.label !== 'Services'\">\r\n <a class=\"a-link\" (click)=\"emitData(item)\">{{\r\n item[column.key]\r\n }}</a>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'images'\">\r\n <div class=\"image-container\">\r\n <div *ngFor=\"let image of item[column.key]?.slice(0, 3)\">\r\n <img [src]=\"image\" alt=\"Imagen\" />\r\n </div>\r\n <div *ngIf=\"item[column.key]?.length > 3\" class=\"extra-images\">\r\n +{{ item[column.key].length - 3 }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'created_at'\">\r\n {{ item[column.key] | date : \"dd/MM/yyyy\" }}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'expire_at'\">\r\n {{ item[column.key] | date : \"dd/MM/yyyy\" }}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'actions'\">\r\n <ng-container *ngTemplateOutlet=\"cellActionsTemplate; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n column.key !== 'expire_at' &&\r\n column.key !== 'created_at' &&\r\n column.key !== 'point_of_sale_id' &&\r\n column.key !== 'name' &&\r\n column.key !== 'pos_id' &&\r\n column.key !== 'images' &&\r\n column.key !== 'actions'\r\n \"\r\n >\r\n {{ item[column.key] }}\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"column.key === 'point_of_sale_id' || column.key === 'pos_id'\"\r\n >\r\n {{ getPosName(item[column.key]) }}\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ng-container *ngIf=\"showPaginator\">\r\n <table class=\"table-pagination\">\r\n <tbody>\r\n <tr>\r\n <div class=\"pagination\">\r\n <div class=\"button-section\">\r\n <button (click)=\"changePage(-1)\" [disabled]=\"currentPage === 1\">\r\n Previous\r\n </button>\r\n <button\r\n (click)=\"changePage(1)\"\r\n [disabled]=\"currentPage === totalPages() && !hasMoreItems\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n <div class=\"current-section\">\r\n <span>Page {{ currentPage }} of {{ totalPages() }}</span>\r\n </div>\r\n </div>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\";input,textarea{padding:10px;width:-webkit-fill-available;border:1px solid #ccc;border-radius:5px;font-size:16px;font-family:Roboto,sans-serif!important;color:#101828;background-color:#fff}input::placeholder,textarea::placeholder{color:#475467}input:focus,textarea:focus{border-color:#007bff;box-shadow:0 0 8px #007bff80;background-color:#fff}input.error,textarea.error{border-color:#fcd9d9;box-shadow:0 0 8px #fcd9d980}.input-group{margin-bottom:15px}.input-group label{font-size:14px;margin-bottom:5px;color:#555}.input-group .error-message{color:red}.input-cost{display:flex;gap:10px}table{width:100%;border-collapse:collapse;text-align:left;border:1px solid #ccc;border-radius:4px}thead{background-color:#fff;color:#101828}tbody{color:#475467}th,td{padding:10px;font-size:14px;border-bottom:1px solid #ccc}tbody tr:hover{background-color:#fff}.state.Active{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Active a{color:#036338!important}.state.Waiting{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Waiting a{color:#b53701!important}.state.Created{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Created a{color:#b53701!important}.state.Offered{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Offered a{color:#036338!important}.state.Closed{background-color:#fcd9d9;color:#581d1d;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Closed a{color:#581d1d!important}.state.Approved{background-color:#d1e7dd;color:#0f5132;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Approved a{color:#0f5132!important}.state.Rejected{background-color:#f8d7da;color:#842029;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Rejected a{color:#842029!important}.state.Pending{background-color:#f8e0d1;color:#b53701;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Pending a{color:#b53701!important}.pagination{display:flex;justify-content:space-between;margin-top:10px}.pagination button{padding:5px 10px;border:1px solid #ccc;background-color:#fff;cursor:pointer}.pagination button:disabled{color:#555;cursor:not-allowed}.search-container{margin-bottom:10px;display:flex;justify-content:flex-end;width:100%}.search-container .search-section input{width:min-content!important}.pagination{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:14px;color:#101828}.pagination button{padding:6px 12px;border:none;color:#101828;cursor:pointer;border-radius:4px;margin-right:6px}.pagination button:disabled{background-color:#ededed;cursor:not-allowed}.table-pagination{border-top:0!important}.a-link{text-decoration:none}.a-link:hover{cursor:pointer;text-decoration:underline}.a-link2{text-decoration:underline}.a-link2:hover{cursor:pointer;text-decoration:underline}.column-direction{display:flex;flex-direction:row;gap:1rem;padding:2rem;width:100%}.main-text{font-size:30px;color:#101828}.secondary-text{font-size:16px;color:#475467}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}.description-section{margin-top:30px}.description-section .description-title{color:#101828}.description-section .description-body{color:#475467}.list-container{width:100%;border:1px solid #ccc;border-radius:12px;margin-top:22px}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}.required{color:#b90000;font-weight:700}.service-info{align-items:center;display:flex}.service-info img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin:5px}.table-button--primary{width:100%;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.table-button--primary:hover{background-color:#00438a}.table-button--primary:disabled{background-color:#ededed;cursor:not-allowed}.button--primary{width:100%;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--primary:hover{background-color:#00438a}.button--primary:disabled{background-color:#ededed;cursor:not-allowed}.button--minimalist{height:min-content;padding:5px;background-color:#ebebeb;color:#475467;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--minimalist:disabled{background-color:#ededed;cursor:not-allowed}.button--primary-min{height:min-content;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;background:#0052cc;color:#fcfcfd}.button--primary-min:hover{background:#00438a}.button--primary-min:disabled{background-color:#ededed;cursor:not-allowed}.button--cancel{height:min-content;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;color:#475467;background-color:#fff;border:1px solid #ededed}.button--cancel:disabled{background-color:#ededed;cursor:not-allowed}.button--create{height:min-content;align-self:center;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--create:hover{background-color:#00438a}.button--create:disabled{background-color:#ededed;cursor:not-allowed}.button--sidenav{background-color:#fff;color:#475467;padding:8px;font-weight:700;border:none;display:flex;border-radius:4px;cursor:pointer;gap:10px;margin-top:10px;width:100%;align-items:center}.button--sidenav:hover{background-color:#f2f4f7;color:#101828}.button--sidenav:disabled{background-color:#ededed;cursor:not-allowed}.button--warn{background-color:#b90000;color:#f2f4f7;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;height:min-content}.button--warn:hover{background-color:red}.button--warn:disabled{background-color:#ededed;cursor:not-allowed}.button-container{display:flex;justify-content:flex-end;gap:8px}.button-container:disabled{background-color:#ededed;cursor:not-allowed}table{width:100%;table-layout:fixed}th{text-align:flex-start;padding:10px}.image-container{display:flex;align-items:center}.image-container img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin-left:-10px}.extra-images{width:40px;height:40px;border-radius:50%;border:2px solid #ccc;margin-left:-10px;background-color:#0052cc;color:#fff;font-size:15px;display:flex;align-items:center;justify-content:center}.loading-indicator{display:flex;justify-content:center;align-items:center;padding:10px;background-color:#0000000d;margin:10px 0;border-radius:4px}.search-section{display:flex;gap:7px;align-items:center}.search-section input{padding:5px}.search-section button{padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;cursor:pointer}.search-section button .button--create{background-color:#0052cc}.search-section button:hover{background-color:#f4f3f3}.search-section button.button--create{background-color:#0052cc;color:#fff;border-color:#0052cc;height:28px;text-align:center}.filters{display:flex;gap:7px;align-items:center}.filter-container{position:relative;display:inline-block}.filter-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;z-index:10}.filter-menu{position:absolute;top:120%;left:0;background:#fff;padding:.4rem;border-radius:8px;display:flex;flex-direction:column;z-index:20;font-size:14px;width:130px}.filter-button{position:relative;height:28px;display:flex;align-items:center;justify-content:center;gap:2px;cursor:pointer;width:35px;z-index:20}.filter-icon{font-size:20px;color:#666}.plus{font-size:16px;color:#555;transition:color .3s ease}.filter-button.active .plus{color:#0052cc}.custom-checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;border:1px solid #ccc;border-radius:2px;background:#fff;cursor:pointer;display:inline-block;vertical-align:middle;transition:all .2s ease;position:relative;padding:5px}.custom-checkbox input[type=checkbox]:checked{background:#0052cc;border-color:#0052cc}.custom-checkbox input[type=checkbox]:focus-visible{padding:6px!important;outline:2px solid rgba(0,123,255,.4);outline-offset:2px}.custom-checkbox input[type=checkbox]:checked+.label-text{color:#0052cc}.custom-dropdown{position:relative;width:fit-content;cursor:pointer;height:24px;font-size:14px;display:inline-block;padding:2px 6px;line-height:1.2;border-radius:4px;min-width:auto}.custom-dropdown .selected{display:inline-block;position:relative;top:-2px;border:1px solid #ccc;border-radius:6px;padding:2px 6px;background:#fff;display:flex;align-items:center;justify-content:space-between;height:24px}.custom-dropdown .selected .placeholder{color:#0052cc}.custom-dropdown .options{position:absolute;top:calc(100% + 6px);left:0;list-style:none;margin:0;padding:8px;border:1px solid #ccc;border-radius:8px;background:#fff;box-shadow:0 4px 8px #0000001a;z-index:10;white-space:nowrap}.custom-dropdown .options li{display:block;padding:2px 6px;line-height:1.1;border-radius:4px;margin:2px 0;cursor:pointer;transition:transform .1s ease-in}.custom-dropdown .options li:hover{transform:scale(1.03)}.type.Regular-auction{background-color:#d3eef7;color:#025875!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.type.Quick-offer{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.custom-calendar{position:relative;display:inline-block;font-family:sans-serif}.calendar-header .placeholder{color:#999}.calendar-popup{position:absolute;top:110%;left:0;background:#fff;border:1px solid #ccc;border-radius:6px;padding:12px;display:flex;flex-direction:column;gap:8px;box-shadow:0 4px 8px #0000001a;z-index:10}.calendar-popup input[type=date]{padding:6px;border:1px solid #ddd;border-radius:4px}.calendar-popup button{background:#0052cc;color:#fff;border:none;padding:6px 12px;border-radius:4px;cursor:pointer}.calendar-popup button:hover{background:#0052cc}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: KvLoadingComponent, selector: "lib-kv-loading", inputs: ["message", "isLoading", "isFullScreen", "customIcon", "customImage", "iconStyles", "imageStyles"] }, { kind: "component", type: ResourceNotFoundComponent, selector: "lib-kv-resource-not-found", inputs: ["messageTitle", "messageDescription"] }] }); }
233
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: KvMainTableComponent, isStandalone: true, selector: "lib-kv-main-table", inputs: { columns: "columns", data: "data", extraData: "extraData", showPaginator: "showPaginator", lazyLoading: "lazyLoading", loading: "loading", messageTitle: "messageTitle", messageDescription: "messageDescription", totalRecords: "totalRecords", message: "message", hasMoreItems: "hasMoreItems", tableId: "tableId", letFilters: "letFilters", totalItems: "totalItems" }, outputs: { onNameClicked: "onNameClicked", onPageChange: "onPageChange", onFilterChange: "onFilterChange" }, host: { listeners: { "document:click": "handleClickOutside($event)" } }, queries: [{ propertyName: "cellActionsTemplate", first: true, predicate: ["cellActions"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<lib-kv-loading [message]=\"message\" [isLoading]=\"loading\" > </lib-kv-loading>\r\n<ng-container *ngIf=\"!loading\">\r\n <div class=\"search-container\">\r\n <div class=\"search-section\">\r\n\r\n <div class=\"filters\">\r\n <ng-container *ngFor=\"let col of columns\">\r\n <div *ngIf=\"activeColumns.includes(col.key)\">\r\n <ng-container *ngIf=\"col.key === 'created_at'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"calendarOpen\">\r\n <div class=\"selected\" (click)=\"calendarOpen = !calendarOpen; dropdownOpenState = false; dropdownOpenType = false; dropdownOpenSource = false\">\r\n <span *ngIf=\"filters.created_at_start && filters.created_at_end\">\r\n {{ filters.created_at_start | date:'dd/MM/yyyy' }} - {{ filters.created_at_end | date:'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngIf=\"filters.created_at_start && !filters.created_at_end\">\r\n {{ filters.created_at_start | date:'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngIf=\"!filters.created_at_start && filters.created_at_end\">\r\n {{ filters.created_at_end | date:'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngIf=\"!filters.created_at_start && !filters.created_at_end\" class=\"placeholder\">\r\n Created at\r\n </span>\r\n </div>\r\n \r\n <div class=\"calendar-popup\" *ngIf=\"calendarOpen\">\r\n <input type=\"date\" [(ngModel)]=\"filters.created_at_start\" (change)=\"updateRange()\" />\r\n <input type=\"date\" [(ngModel)]=\"filters.created_at_end\" (change)=\"updateRange()\" />\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"col.key === 'expire_at'\">\r\n <label>Fecha:</label>\r\n <input type=\"date\" [(ngModel)]=\"filters.expire_at\" />\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"col.key === 'state'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"dropdownOpenState\">\r\n <div class=\"selected\" (click)=\"dropdownOpenState = !dropdownOpenState; dropdownOpenType = false; dropdownOpenSource = false; calendarOpen = false\">\r\n <span *ngIf=\"filters.state\" class=\"state\" [ngClass]=\"filters.state\">\r\n {{ filters.state }}\r\n </span>\r\n <span *ngIf=\"!filters.state\" class=\"placeholder\">State</span>\r\n </div>\r\n \r\n <ul class=\"options\" *ngIf=\"dropdownOpenState\">\r\n <li *ngFor=\"let opt of options\"\r\n (click)=\"filters.state = opt; dropdownOpenState = false\"\r\n class=\"state\"\r\n [ngClass]=\"opt\">\r\n {{ opt }}\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"col.key === 'source'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"dropdownOpenSource\">\r\n <div class=\"selected\" (click)=\"dropdownOpenSource = !dropdownOpenSource; dropdownOpenState = false; dropdownOpenType = false; calendarOpen = false\">\r\n <span *ngIf=\"filters.source\" class=\"source\" >\r\n {{ filters.source }}\r\n </span>\r\n <span *ngIf=\"!filters.source\" class=\"placeholder\">Imported from</span>\r\n </div>\r\n \r\n <ul class=\"options\" *ngIf=\"dropdownOpenSource\">\r\n <li (click)=\"filters.source ='local'; dropdownOpenSource = false\"\r\n class=\"source\" [ngClass]=\"'local'\">local\r\n </li>\r\n <li (click)=\"filters.source = 'ecommerce'; dropdownOpenSource = false\"\r\n class=\"source\" [ngClass]=\"'ecommerce'\">ecommerce\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"col.key === 'type'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"dropdownOpenType\">\r\n <div class=\"selected\" (click)=\"dropdownOpenType = !dropdownOpenType; dropdownOpenState = false; dropdownOpenSource = false; calendarOpen = false\">\r\n <span *ngIf=\"filters.type\" class=\"type\" [ngClass]=\"filters.type.replace(' ', '-')\">\r\n {{ filters.type }}\r\n </span>\r\n <span *ngIf=\"!filters.type\" class=\"placeholder\">Offer type</span>\r\n </div>\r\n \r\n <ul class=\"options\" *ngIf=\"dropdownOpenType\">\r\n <li (click)=\"filters.type ='Regular auction'; dropdownOpenType = false\"\r\n class=\"type\" [ngClass]=\"'Regular-auction'\">Regular auction\r\n </li>\r\n <li (click)=\"filters.type = 'Quick offer'; dropdownOpenType = false\"\r\n class=\"type\" [ngClass]=\"'Quick-offer'\">Quick offer \r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"filter-container\" *ngIf=\"letFilters\">\r\n\r\n <div\r\n class=\"filter-overlay\"\r\n *ngIf=\"showFilterMenu\"\r\n (click)=\"showFilterMenu = false\">\r\n </div>\r\n\r\n <button \r\n (click)=\"showFilterMenu = !showFilterMenu; dropdownOpenState = false; dropdownOpenSource = false; calendarOpen = false; dropdownOpenType = false\" \r\n class=\"filter-button\"\r\n [class.active]=\"showFilterMenu\"\r\n >\r\n <span class=\"plus\">+</span>\r\n <span class=\"material-symbols-outlined filter-icon\">\r\n filter_alt\r\n </span>\r\n </button>\r\n\r\n <div class=\"filter-menu\" *ngIf=\"showFilterMenu\">\r\n <ng-container *ngFor=\"let col of columns\">\r\n <ng-container *ngIf=\"col.key !== 'name' && col.key !== 'images' && col.key !== 'pos_id' && col.key !== 'point_of_sale_id' && col.key !== 'description' \">\r\n <label class=\"custom-checkbox\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"activeColumns.includes(col.key)\"\r\n (change)=\"toggleColumn(col.key, $event)\"\r\n />\r\n <span class=\"label-text\">{{ col.label }}</span>\r\n </label>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n <input\r\n type=\"text\"\r\n class=\"input\"\r\n placeholder=\"Buscar...\"\r\n [(ngModel)]=\"filters.name\"\r\n />\r\n <button class=\"button--create\" (click)=\"onSearched()\">Buscar</button>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"(!data || data.length === 0) && !loading\">\r\n <lib-kv-resource-not-found class=\"resource-not-found\"\r\n [messageTitle]=\"messageTitle\"\r\n [messageDescription]=\"messageDescription\"></lib-kv-resource-not-found>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"(data && data.length > 0) || loading\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of columns\">{{ column.label }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of filteredData\">\r\n <td *ngFor=\"let column of columns\">\r\n <div class=\"state\" [ngClass]=\"item[column.key]\">\r\n <ng-container *ngIf=\"column.label === 'Services'\">\r\n <div class=\"service-info\" (click)=\"emitData(item)\">\r\n <img [src]=\"item.url || 'https://i.imgur.com/InRaVrL.jpg'\" alt=\"Imagen\" class=\"service-image\" />\r\n <a class=\"a-link\">{{ item.name }}</a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'name' && column.label !== 'Services'\">\r\n <a class=\"a-link\" (click)=\"emitData(item)\">{{\r\n item[column.key]\r\n }}</a>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'images'\">\r\n <div class=\"image-container\">\r\n <div *ngFor=\"let image of item[column.key]?.slice(0, 3)\">\r\n <img [src]=\"image\" alt=\"Imagen\" />\r\n </div>\r\n <div *ngIf=\"item[column.key]?.length > 3\" class=\"extra-images\">\r\n +{{ item[column.key].length - 3 }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'created_at'\">\r\n {{ item[column.key] | date : \"dd/MM/yyyy\" }}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'expire_at'\">\r\n {{ item[column.key] | date : \"dd/MM/yyyy\" }}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'actions'\">\r\n <ng-container *ngTemplateOutlet=\"cellActionsTemplate; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n column.key !== 'expire_at' &&\r\n column.key !== 'created_at' &&\r\n column.key !== 'point_of_sale_id' &&\r\n column.key !== 'name' &&\r\n column.key !== 'pos_id' &&\r\n column.key !== 'images' &&\r\n column.key !== 'actions'\r\n \"\r\n >\r\n {{ item[column.key] }}\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"column.key === 'point_of_sale_id' || column.key === 'pos_id'\"\r\n >\r\n {{ getPosName(item[column.key]) }}\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ng-container *ngIf=\"showPaginator\">\r\n <table class=\"table-pagination\">\r\n <tbody>\r\n <tr>\r\n <div class=\"pagination\">\r\n <div class=\"button-section\">\r\n <button (click)=\"changePage(-1)\" [disabled]=\"currentPage === 1\">\r\n Previous\r\n </button>\r\n <button\r\n (click)=\"changePage(1)\"\r\n [disabled]=\"currentPage === totalPages() && !hasMoreItems\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n <div class=\"current-section\">\r\n <span>Page {{ currentPage }} of {{ totalPages() }}</span>\r\n </div>\r\n </div>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\";input,textarea{padding:10px;width:-webkit-fill-available;border:1px solid #ccc;border-radius:5px;font-size:16px;font-family:Roboto,sans-serif!important;color:#101828;background-color:#fff}input::placeholder,textarea::placeholder{color:#475467}input:focus,textarea:focus{border-color:#007bff;box-shadow:0 0 8px #007bff80;background-color:#fff}input.error,textarea.error{border-color:#fcd9d9;box-shadow:0 0 8px #fcd9d980}.input-group{margin-bottom:15px}.input-group label{font-size:14px;margin-bottom:5px;color:#555}.input-group .error-message{color:red}.input-cost{display:flex;gap:10px}table{width:100%;border-collapse:collapse;text-align:left;border:1px solid #ccc;border-radius:4px}thead{background-color:#fff;color:#101828}tbody{color:#475467}th,td{padding:10px;font-size:14px;border-bottom:1px solid #ccc}tbody tr:hover{background-color:#fff}.state.Active{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Active a{color:#036338!important}.state.Waiting{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Waiting a{color:#b53701!important}.state.Created{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Created a{color:#b53701!important}.state.Offered{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Offered a{color:#036338!important}.state.Closed{background-color:#fcd9d9;color:#581d1d;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Closed a{color:#581d1d!important}.state.Approved{background-color:#d1e7dd;color:#0f5132;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Approved a{color:#0f5132!important}.state.Rejected{background-color:#f8d7da;color:#842029;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Rejected a{color:#842029!important}.state.Pending{background-color:#f8e0d1;color:#b53701;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Pending a{color:#b53701!important}.pagination{display:flex;justify-content:space-between;margin-top:10px}.pagination button{padding:5px 10px;border:1px solid #ccc;background-color:#fff;cursor:pointer}.pagination button:disabled{color:#555;cursor:not-allowed}.search-container{margin-bottom:10px;display:flex;justify-content:flex-end;width:100%}.search-container .search-section input{width:min-content!important}.pagination{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:14px;color:#101828}.pagination button{padding:6px 12px;border:none;color:#101828;cursor:pointer;border-radius:4px;margin-right:6px}.pagination button:disabled{background-color:#ededed;cursor:not-allowed}.table-pagination{border-top:0!important}.a-link{text-decoration:none}.a-link:hover{cursor:pointer;text-decoration:underline}.a-link2{text-decoration:underline}.a-link2:hover{cursor:pointer;text-decoration:underline}.column-direction{display:flex;flex-direction:row;gap:1rem;padding:2rem;width:100%}.main-text{font-size:30px;color:#101828}.secondary-text{font-size:16px;color:#475467}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}.description-section{margin-top:30px}.description-section .description-title{color:#101828}.description-section .description-body{color:#475467}.list-container{width:100%;border:1px solid #ccc;border-radius:12px;margin-top:22px}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}.required{color:#b90000;font-weight:700}.service-info{align-items:center;display:flex}.service-info img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin:5px}.table-button--primary{width:100%;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.table-button--primary:hover{background-color:#00438a}.table-button--primary:disabled{background-color:#ededed;cursor:not-allowed}.button--primary{width:100%;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--primary:hover{background-color:#00438a}.button--primary:disabled{background-color:#ededed;cursor:not-allowed}.button--minimalist{height:min-content;padding:5px;background-color:#ebebeb;color:#475467;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--minimalist:disabled{background-color:#ededed;cursor:not-allowed}.button--primary-min{height:min-content;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;background:#0052cc;color:#fcfcfd}.button--primary-min:hover{background:#00438a}.button--primary-min:disabled{background-color:#ededed;cursor:not-allowed}.button--cancel{height:min-content;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;color:#475467;background-color:#fff;border:1px solid #ededed}.button--cancel:disabled{background-color:#ededed;cursor:not-allowed}.button--create{height:min-content;align-self:center;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--create:hover{background-color:#00438a}.button--create:disabled{background-color:#ededed;cursor:not-allowed}.button--sidenav{background-color:#fff;color:#475467;padding:8px;font-weight:700;border:none;display:flex;border-radius:4px;cursor:pointer;gap:10px;margin-top:10px;width:100%;align-items:center}.button--sidenav:hover{background-color:#f2f4f7;color:#101828}.button--sidenav:disabled{background-color:#ededed;cursor:not-allowed}.button--warn{background-color:#b90000;color:#f2f4f7;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;height:min-content}.button--warn:hover{background-color:red}.button--warn:disabled{background-color:#ededed;cursor:not-allowed}.button-container{display:flex;justify-content:flex-end;gap:8px}.button-container:disabled{background-color:#ededed;cursor:not-allowed}table{width:100%;table-layout:fixed}th{text-align:flex-start;padding:10px}.image-container{display:flex;align-items:center}.image-container img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin-left:-10px}.extra-images{width:40px;height:40px;border-radius:50%;border:2px solid #ccc;margin-left:-10px;background-color:#0052cc;color:#fff;font-size:15px;display:flex;align-items:center;justify-content:center}.loading-indicator{display:flex;justify-content:center;align-items:center;padding:10px;background-color:#0000000d;margin:10px 0;border-radius:4px}.search-section{display:flex;gap:7px;align-items:center}.search-section input{padding:5px}.search-section button{padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;cursor:pointer}.search-section button .button--create{background-color:#0052cc}.search-section button:hover{background-color:#f4f3f3}.search-section button.button--create{background-color:#0052cc;color:#fff;border-color:#0052cc;height:28px;text-align:center}.filters{display:flex;gap:7px;align-items:center}.filter-container{position:relative;display:inline-block}.filter-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;z-index:10}.filter-menu{position:absolute;top:120%;left:0;background:#fff;padding:.4rem;border-radius:8px;display:flex;flex-direction:column;z-index:20;font-size:14px;width:130px}.filter-button{position:relative;height:28px;display:flex;align-items:center;justify-content:center;gap:2px;cursor:pointer;width:35px;z-index:20}.filter-icon{font-size:20px;color:#666}.plus{font-size:16px;color:#555;transition:color .3s ease}.filter-button.active .plus{color:#0052cc}.custom-checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;border:1px solid #ccc;border-radius:2px;background:#fff;cursor:pointer;display:inline-block;vertical-align:middle;transition:all .2s ease;position:relative;padding:5px}.custom-checkbox input[type=checkbox]:checked{background:#0052cc;border-color:#0052cc}.custom-checkbox input[type=checkbox]:focus-visible{padding:6px!important;outline:2px solid rgba(0,123,255,.4);outline-offset:2px}.custom-checkbox input[type=checkbox]:checked+.label-text{color:#0052cc}.custom-dropdown{position:relative;width:fit-content;cursor:pointer;height:24px;font-size:14px;display:inline-block;padding:2px 6px;line-height:1.2;border-radius:4px;min-width:auto}.custom-dropdown .selected{display:inline-block;position:relative;top:-2px;border:1px solid #ccc;border-radius:6px;padding:2px 6px;background:#fff;display:flex;align-items:center;justify-content:space-between;height:24px}.custom-dropdown .selected .placeholder{color:#0052cc}.custom-dropdown .options{position:absolute;top:calc(100% + 6px);left:0;list-style:none;margin:0;padding:8px;border:1px solid #ccc;border-radius:8px;background:#fff;box-shadow:0 4px 8px #0000001a;z-index:10;white-space:nowrap}.custom-dropdown .options li{display:block;padding:2px 6px;line-height:1.1;border-radius:4px;margin:2px 0;cursor:pointer;transition:transform .1s ease-in}.custom-dropdown .options li:hover{transform:scale(1.03)}.type.Regular-auction{background-color:#d3eef7;color:#025875!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.type.Quick-offer{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.custom-calendar{position:relative;display:inline-block;font-family:sans-serif}.calendar-header .placeholder{color:#999}.calendar-popup{position:absolute;top:110%;left:0;background:#fff;border:1px solid #ccc;border-radius:6px;padding:12px;display:flex;flex-direction:column;gap:8px;box-shadow:0 4px 8px #0000001a;z-index:10}.calendar-popup input[type=date]{padding:6px;border:1px solid #ddd;border-radius:4px}.calendar-popup button{background:#0052cc;color:#fff;border:none;padding:6px 12px;border-radius:4px;cursor:pointer}.calendar-popup button:hover{background:#0052cc}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: KvLoadingComponent, selector: "lib-kv-loading", inputs: ["message", "isLoading", "isFullScreen", "customIcon", "customImage", "iconStyles", "imageStyles"] }, { kind: "component", type: ResourceNotFoundComponent, selector: "lib-kv-resource-not-found", inputs: ["messageTitle", "messageDescription"] }] }); }
234
234
  }
235
235
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KvMainTableComponent, decorators: [{
236
236
  type: Component,
237
- args: [{ selector: 'lib-kv-main-table', standalone: true, imports: [CommonModule, FormsModule, KvLoadingComponent, ResourceNotFoundComponent], template: "<lib-kv-loading [message]=\"message\" [isLoading]=\"loading\" > </lib-kv-loading>\r\n<ng-container *ngIf=\"!loading\">\r\n <div class=\"search-container\">\r\n <div class=\"search-section\">\r\n\r\n <div class=\"filters\">\r\n <ng-container *ngFor=\"let col of columns\">\r\n <div *ngIf=\"activeColumns.includes(col.key)\">\r\n <ng-container *ngIf=\"col.key === 'created_at'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"calendarOpen\">\r\n <div class=\"selected\" (click)=\"calendarOpen = !calendarOpen; dropdownOpenState = false; dropdownOpenType = false; dropdownOpenSource = false\">\r\n <span *ngIf=\"filters.created_at_start && filters.created_at_end\">\r\n {{ filters.created_at_start | date:'dd/MM/yyyy' }} - {{ filters.created_at_end | date:'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngIf=\"filters.created_at_start && !filters.created_at_end\">\r\n {{ filters.created_at_start | date:'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngIf=\"!filters.created_at_start && filters.created_at_end\">\r\n {{ filters.created_at_end | date:'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngIf=\"!filters.created_at_start && !filters.created_at_end\" class=\"placeholder\">\r\n Fecha de creaci\u00F3n\r\n </span>\r\n </div>\r\n \r\n <div class=\"calendar-popup\" *ngIf=\"calendarOpen\">\r\n <input type=\"date\" [(ngModel)]=\"filters.created_at_start\" (change)=\"updateRange()\" />\r\n <input type=\"date\" [(ngModel)]=\"filters.created_at_end\" (change)=\"updateRange()\" />\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"col.key === 'expire_at'\">\r\n <label>Fecha:</label>\r\n <input type=\"date\" [(ngModel)]=\"filters.expire_at\" />\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"col.key === 'state'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"dropdownOpenState\">\r\n <div class=\"selected\" (click)=\"dropdownOpenState = !dropdownOpenState; dropdownOpenType = false; dropdownOpenSource = false; calendarOpen = false\">\r\n <span *ngIf=\"filters.state\" class=\"state\" [ngClass]=\"filters.state\">\r\n {{ filters.state }}\r\n </span>\r\n <span *ngIf=\"!filters.state\" class=\"placeholder\">Estado</span>\r\n </div>\r\n \r\n <ul class=\"options\" *ngIf=\"dropdownOpenState\">\r\n <li *ngFor=\"let opt of options\"\r\n (click)=\"filters.state = opt; dropdownOpenState = false\"\r\n class=\"state\"\r\n [ngClass]=\"opt\">\r\n {{ opt }}\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"col.key === 'source'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"dropdownOpenSource\">\r\n <div class=\"selected\" (click)=\"dropdownOpenSource = !dropdownOpenSource; dropdownOpenState = false; dropdownOpenType = false; calendarOpen = false\">\r\n <span *ngIf=\"filters.source\" class=\"source\" >\r\n {{ filters.source }}\r\n </span>\r\n <span *ngIf=\"!filters.source\" class=\"placeholder\">Importado de</span>\r\n </div>\r\n \r\n <ul class=\"options\" *ngIf=\"dropdownOpenSource\">\r\n <li (click)=\"filters.source ='local'; dropdownOpenSource = false\"\r\n class=\"source\" [ngClass]=\"'local'\">local\r\n </li>\r\n <li (click)=\"filters.source = 'ecommerce'; dropdownOpenSource = false\"\r\n class=\"source\" [ngClass]=\"'ecommerce'\">ecommerce\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"col.key === 'type'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"dropdownOpenType\">\r\n <div class=\"selected\" (click)=\"dropdownOpenType = !dropdownOpenType; dropdownOpenState = false; dropdownOpenSource = false; calendarOpen = false\">\r\n <span *ngIf=\"filters.type\" class=\"type\" [ngClass]=\"filters.type.replace(' ', '-')\">\r\n {{ filters.type }}\r\n </span>\r\n <span *ngIf=\"!filters.type\" class=\"placeholder\">Tipo de oferta</span>\r\n </div>\r\n \r\n <ul class=\"options\" *ngIf=\"dropdownOpenType\">\r\n <li (click)=\"filters.type ='Regular auction'; dropdownOpenType = false\"\r\n class=\"type\" [ngClass]=\"'Regular-auction'\">Regular auction\r\n </li>\r\n <li (click)=\"filters.type = 'Quick offer'; dropdownOpenType = false\"\r\n class=\"type\" [ngClass]=\"'Quick-offer'\">Quick offer \r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"filter-container\" *ngIf=\"letFilters\">\r\n\r\n <div\r\n class=\"filter-overlay\"\r\n *ngIf=\"showFilterMenu\"\r\n (click)=\"showFilterMenu = false\">\r\n </div>\r\n\r\n <button \r\n (click)=\"showFilterMenu = !showFilterMenu; dropdownOpenState = false; dropdownOpenSource = false; calendarOpen = false; dropdownOpenType = false\" \r\n class=\"filter-button\"\r\n [class.active]=\"showFilterMenu\"\r\n >\r\n <span class=\"plus\">+</span>\r\n <span class=\"material-symbols-outlined filter-icon\">\r\n filter_alt\r\n </span>\r\n </button>\r\n\r\n <div class=\"filter-menu\" *ngIf=\"showFilterMenu\">\r\n <ng-container *ngFor=\"let col of columns\">\r\n <ng-container *ngIf=\"col.key !== 'name' && col.key !== 'images' && col.key !== 'pos_id' && col.key !== 'point_of_sale_id' && col.key !== 'description' \">\r\n <label class=\"custom-checkbox\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"activeColumns.includes(col.key)\"\r\n (change)=\"toggleColumn(col.key, $event)\"\r\n />\r\n <span class=\"label-text\">{{ col.label }}</span>\r\n </label>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n <input\r\n type=\"text\"\r\n class=\"input\"\r\n placeholder=\"Buscar...\"\r\n [(ngModel)]=\"filters.name\"\r\n />\r\n <button class=\"button--create\" (click)=\"onSearched()\">Buscar</button>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"(!data || data.length === 0) && !loading\">\r\n <lib-kv-resource-not-found class=\"resource-not-found\"\r\n [messageTitle]=\"messageTitle\"\r\n [messageDescription]=\"messageDescription\"></lib-kv-resource-not-found>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"(data && data.length > 0) || loading\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of columns\">{{ column.label }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of filteredData\">\r\n <td *ngFor=\"let column of columns\">\r\n <div class=\"state\" [ngClass]=\"item[column.key]\">\r\n <ng-container *ngIf=\"column.label === 'Services'\">\r\n <div class=\"service-info\" (click)=\"emitData(item)\">\r\n <img [src]=\"item.url || 'https://i.imgur.com/InRaVrL.jpg'\" alt=\"Imagen\" class=\"service-image\" />\r\n <a class=\"a-link\">{{ item.name }}</a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'name' && column.label !== 'Services'\">\r\n <a class=\"a-link\" (click)=\"emitData(item)\">{{\r\n item[column.key]\r\n }}</a>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'images'\">\r\n <div class=\"image-container\">\r\n <div *ngFor=\"let image of item[column.key]?.slice(0, 3)\">\r\n <img [src]=\"image\" alt=\"Imagen\" />\r\n </div>\r\n <div *ngIf=\"item[column.key]?.length > 3\" class=\"extra-images\">\r\n +{{ item[column.key].length - 3 }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'created_at'\">\r\n {{ item[column.key] | date : \"dd/MM/yyyy\" }}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'expire_at'\">\r\n {{ item[column.key] | date : \"dd/MM/yyyy\" }}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'actions'\">\r\n <ng-container *ngTemplateOutlet=\"cellActionsTemplate; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n column.key !== 'expire_at' &&\r\n column.key !== 'created_at' &&\r\n column.key !== 'point_of_sale_id' &&\r\n column.key !== 'name' &&\r\n column.key !== 'pos_id' &&\r\n column.key !== 'images' &&\r\n column.key !== 'actions'\r\n \"\r\n >\r\n {{ item[column.key] }}\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"column.key === 'point_of_sale_id' || column.key === 'pos_id'\"\r\n >\r\n {{ getPosName(item[column.key]) }}\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ng-container *ngIf=\"showPaginator\">\r\n <table class=\"table-pagination\">\r\n <tbody>\r\n <tr>\r\n <div class=\"pagination\">\r\n <div class=\"button-section\">\r\n <button (click)=\"changePage(-1)\" [disabled]=\"currentPage === 1\">\r\n Previous\r\n </button>\r\n <button\r\n (click)=\"changePage(1)\"\r\n [disabled]=\"currentPage === totalPages() && !hasMoreItems\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n <div class=\"current-section\">\r\n <span>Page {{ currentPage }} of {{ totalPages() }}</span>\r\n </div>\r\n </div>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\";input,textarea{padding:10px;width:-webkit-fill-available;border:1px solid #ccc;border-radius:5px;font-size:16px;font-family:Roboto,sans-serif!important;color:#101828;background-color:#fff}input::placeholder,textarea::placeholder{color:#475467}input:focus,textarea:focus{border-color:#007bff;box-shadow:0 0 8px #007bff80;background-color:#fff}input.error,textarea.error{border-color:#fcd9d9;box-shadow:0 0 8px #fcd9d980}.input-group{margin-bottom:15px}.input-group label{font-size:14px;margin-bottom:5px;color:#555}.input-group .error-message{color:red}.input-cost{display:flex;gap:10px}table{width:100%;border-collapse:collapse;text-align:left;border:1px solid #ccc;border-radius:4px}thead{background-color:#fff;color:#101828}tbody{color:#475467}th,td{padding:10px;font-size:14px;border-bottom:1px solid #ccc}tbody tr:hover{background-color:#fff}.state.Active{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Active a{color:#036338!important}.state.Waiting{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Waiting a{color:#b53701!important}.state.Created{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Created a{color:#b53701!important}.state.Offered{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Offered a{color:#036338!important}.state.Closed{background-color:#fcd9d9;color:#581d1d;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Closed a{color:#581d1d!important}.state.Approved{background-color:#d1e7dd;color:#0f5132;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Approved a{color:#0f5132!important}.state.Rejected{background-color:#f8d7da;color:#842029;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Rejected a{color:#842029!important}.state.Pending{background-color:#f8e0d1;color:#b53701;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Pending a{color:#b53701!important}.pagination{display:flex;justify-content:space-between;margin-top:10px}.pagination button{padding:5px 10px;border:1px solid #ccc;background-color:#fff;cursor:pointer}.pagination button:disabled{color:#555;cursor:not-allowed}.search-container{margin-bottom:10px;display:flex;justify-content:flex-end;width:100%}.search-container .search-section input{width:min-content!important}.pagination{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:14px;color:#101828}.pagination button{padding:6px 12px;border:none;color:#101828;cursor:pointer;border-radius:4px;margin-right:6px}.pagination button:disabled{background-color:#ededed;cursor:not-allowed}.table-pagination{border-top:0!important}.a-link{text-decoration:none}.a-link:hover{cursor:pointer;text-decoration:underline}.a-link2{text-decoration:underline}.a-link2:hover{cursor:pointer;text-decoration:underline}.column-direction{display:flex;flex-direction:row;gap:1rem;padding:2rem;width:100%}.main-text{font-size:30px;color:#101828}.secondary-text{font-size:16px;color:#475467}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}.description-section{margin-top:30px}.description-section .description-title{color:#101828}.description-section .description-body{color:#475467}.list-container{width:100%;border:1px solid #ccc;border-radius:12px;margin-top:22px}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}.required{color:#b90000;font-weight:700}.service-info{align-items:center;display:flex}.service-info img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin:5px}.table-button--primary{width:100%;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.table-button--primary:hover{background-color:#00438a}.table-button--primary:disabled{background-color:#ededed;cursor:not-allowed}.button--primary{width:100%;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--primary:hover{background-color:#00438a}.button--primary:disabled{background-color:#ededed;cursor:not-allowed}.button--minimalist{height:min-content;padding:5px;background-color:#ebebeb;color:#475467;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--minimalist:disabled{background-color:#ededed;cursor:not-allowed}.button--primary-min{height:min-content;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;background:#0052cc;color:#fcfcfd}.button--primary-min:hover{background:#00438a}.button--primary-min:disabled{background-color:#ededed;cursor:not-allowed}.button--cancel{height:min-content;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;color:#475467;background-color:#fff;border:1px solid #ededed}.button--cancel:disabled{background-color:#ededed;cursor:not-allowed}.button--create{height:min-content;align-self:center;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--create:hover{background-color:#00438a}.button--create:disabled{background-color:#ededed;cursor:not-allowed}.button--sidenav{background-color:#fff;color:#475467;padding:8px;font-weight:700;border:none;display:flex;border-radius:4px;cursor:pointer;gap:10px;margin-top:10px;width:100%;align-items:center}.button--sidenav:hover{background-color:#f2f4f7;color:#101828}.button--sidenav:disabled{background-color:#ededed;cursor:not-allowed}.button--warn{background-color:#b90000;color:#f2f4f7;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;height:min-content}.button--warn:hover{background-color:red}.button--warn:disabled{background-color:#ededed;cursor:not-allowed}.button-container{display:flex;justify-content:flex-end;gap:8px}.button-container:disabled{background-color:#ededed;cursor:not-allowed}table{width:100%;table-layout:fixed}th{text-align:flex-start;padding:10px}.image-container{display:flex;align-items:center}.image-container img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin-left:-10px}.extra-images{width:40px;height:40px;border-radius:50%;border:2px solid #ccc;margin-left:-10px;background-color:#0052cc;color:#fff;font-size:15px;display:flex;align-items:center;justify-content:center}.loading-indicator{display:flex;justify-content:center;align-items:center;padding:10px;background-color:#0000000d;margin:10px 0;border-radius:4px}.search-section{display:flex;gap:7px;align-items:center}.search-section input{padding:5px}.search-section button{padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;cursor:pointer}.search-section button .button--create{background-color:#0052cc}.search-section button:hover{background-color:#f4f3f3}.search-section button.button--create{background-color:#0052cc;color:#fff;border-color:#0052cc;height:28px;text-align:center}.filters{display:flex;gap:7px;align-items:center}.filter-container{position:relative;display:inline-block}.filter-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;z-index:10}.filter-menu{position:absolute;top:120%;left:0;background:#fff;padding:.4rem;border-radius:8px;display:flex;flex-direction:column;z-index:20;font-size:14px;width:130px}.filter-button{position:relative;height:28px;display:flex;align-items:center;justify-content:center;gap:2px;cursor:pointer;width:35px;z-index:20}.filter-icon{font-size:20px;color:#666}.plus{font-size:16px;color:#555;transition:color .3s ease}.filter-button.active .plus{color:#0052cc}.custom-checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;border:1px solid #ccc;border-radius:2px;background:#fff;cursor:pointer;display:inline-block;vertical-align:middle;transition:all .2s ease;position:relative;padding:5px}.custom-checkbox input[type=checkbox]:checked{background:#0052cc;border-color:#0052cc}.custom-checkbox input[type=checkbox]:focus-visible{padding:6px!important;outline:2px solid rgba(0,123,255,.4);outline-offset:2px}.custom-checkbox input[type=checkbox]:checked+.label-text{color:#0052cc}.custom-dropdown{position:relative;width:fit-content;cursor:pointer;height:24px;font-size:14px;display:inline-block;padding:2px 6px;line-height:1.2;border-radius:4px;min-width:auto}.custom-dropdown .selected{display:inline-block;position:relative;top:-2px;border:1px solid #ccc;border-radius:6px;padding:2px 6px;background:#fff;display:flex;align-items:center;justify-content:space-between;height:24px}.custom-dropdown .selected .placeholder{color:#0052cc}.custom-dropdown .options{position:absolute;top:calc(100% + 6px);left:0;list-style:none;margin:0;padding:8px;border:1px solid #ccc;border-radius:8px;background:#fff;box-shadow:0 4px 8px #0000001a;z-index:10;white-space:nowrap}.custom-dropdown .options li{display:block;padding:2px 6px;line-height:1.1;border-radius:4px;margin:2px 0;cursor:pointer;transition:transform .1s ease-in}.custom-dropdown .options li:hover{transform:scale(1.03)}.type.Regular-auction{background-color:#d3eef7;color:#025875!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.type.Quick-offer{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.custom-calendar{position:relative;display:inline-block;font-family:sans-serif}.calendar-header .placeholder{color:#999}.calendar-popup{position:absolute;top:110%;left:0;background:#fff;border:1px solid #ccc;border-radius:6px;padding:12px;display:flex;flex-direction:column;gap:8px;box-shadow:0 4px 8px #0000001a;z-index:10}.calendar-popup input[type=date]{padding:6px;border:1px solid #ddd;border-radius:4px}.calendar-popup button{background:#0052cc;color:#fff;border:none;padding:6px 12px;border-radius:4px;cursor:pointer}.calendar-popup button:hover{background:#0052cc}\n"] }]
237
+ args: [{ selector: 'lib-kv-main-table', standalone: true, imports: [CommonModule, FormsModule, KvLoadingComponent, ResourceNotFoundComponent], template: "<lib-kv-loading [message]=\"message\" [isLoading]=\"loading\" > </lib-kv-loading>\r\n<ng-container *ngIf=\"!loading\">\r\n <div class=\"search-container\">\r\n <div class=\"search-section\">\r\n\r\n <div class=\"filters\">\r\n <ng-container *ngFor=\"let col of columns\">\r\n <div *ngIf=\"activeColumns.includes(col.key)\">\r\n <ng-container *ngIf=\"col.key === 'created_at'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"calendarOpen\">\r\n <div class=\"selected\" (click)=\"calendarOpen = !calendarOpen; dropdownOpenState = false; dropdownOpenType = false; dropdownOpenSource = false\">\r\n <span *ngIf=\"filters.created_at_start && filters.created_at_end\">\r\n {{ filters.created_at_start | date:'dd/MM/yyyy' }} - {{ filters.created_at_end | date:'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngIf=\"filters.created_at_start && !filters.created_at_end\">\r\n {{ filters.created_at_start | date:'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngIf=\"!filters.created_at_start && filters.created_at_end\">\r\n {{ filters.created_at_end | date:'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngIf=\"!filters.created_at_start && !filters.created_at_end\" class=\"placeholder\">\r\n Created at\r\n </span>\r\n </div>\r\n \r\n <div class=\"calendar-popup\" *ngIf=\"calendarOpen\">\r\n <input type=\"date\" [(ngModel)]=\"filters.created_at_start\" (change)=\"updateRange()\" />\r\n <input type=\"date\" [(ngModel)]=\"filters.created_at_end\" (change)=\"updateRange()\" />\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"col.key === 'expire_at'\">\r\n <label>Fecha:</label>\r\n <input type=\"date\" [(ngModel)]=\"filters.expire_at\" />\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"col.key === 'state'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"dropdownOpenState\">\r\n <div class=\"selected\" (click)=\"dropdownOpenState = !dropdownOpenState; dropdownOpenType = false; dropdownOpenSource = false; calendarOpen = false\">\r\n <span *ngIf=\"filters.state\" class=\"state\" [ngClass]=\"filters.state\">\r\n {{ filters.state }}\r\n </span>\r\n <span *ngIf=\"!filters.state\" class=\"placeholder\">State</span>\r\n </div>\r\n \r\n <ul class=\"options\" *ngIf=\"dropdownOpenState\">\r\n <li *ngFor=\"let opt of options\"\r\n (click)=\"filters.state = opt; dropdownOpenState = false\"\r\n class=\"state\"\r\n [ngClass]=\"opt\">\r\n {{ opt }}\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"col.key === 'source'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"dropdownOpenSource\">\r\n <div class=\"selected\" (click)=\"dropdownOpenSource = !dropdownOpenSource; dropdownOpenState = false; dropdownOpenType = false; calendarOpen = false\">\r\n <span *ngIf=\"filters.source\" class=\"source\" >\r\n {{ filters.source }}\r\n </span>\r\n <span *ngIf=\"!filters.source\" class=\"placeholder\">Imported from</span>\r\n </div>\r\n \r\n <ul class=\"options\" *ngIf=\"dropdownOpenSource\">\r\n <li (click)=\"filters.source ='local'; dropdownOpenSource = false\"\r\n class=\"source\" [ngClass]=\"'local'\">local\r\n </li>\r\n <li (click)=\"filters.source = 'ecommerce'; dropdownOpenSource = false\"\r\n class=\"source\" [ngClass]=\"'ecommerce'\">ecommerce\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"col.key === 'type'\">\r\n <div class=\"custom-dropdown\" [class.open]=\"dropdownOpenType\">\r\n <div class=\"selected\" (click)=\"dropdownOpenType = !dropdownOpenType; dropdownOpenState = false; dropdownOpenSource = false; calendarOpen = false\">\r\n <span *ngIf=\"filters.type\" class=\"type\" [ngClass]=\"filters.type.replace(' ', '-')\">\r\n {{ filters.type }}\r\n </span>\r\n <span *ngIf=\"!filters.type\" class=\"placeholder\">Offer type</span>\r\n </div>\r\n \r\n <ul class=\"options\" *ngIf=\"dropdownOpenType\">\r\n <li (click)=\"filters.type ='Regular auction'; dropdownOpenType = false\"\r\n class=\"type\" [ngClass]=\"'Regular-auction'\">Regular auction\r\n </li>\r\n <li (click)=\"filters.type = 'Quick offer'; dropdownOpenType = false\"\r\n class=\"type\" [ngClass]=\"'Quick-offer'\">Quick offer \r\n </li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"filter-container\" *ngIf=\"letFilters\">\r\n\r\n <div\r\n class=\"filter-overlay\"\r\n *ngIf=\"showFilterMenu\"\r\n (click)=\"showFilterMenu = false\">\r\n </div>\r\n\r\n <button \r\n (click)=\"showFilterMenu = !showFilterMenu; dropdownOpenState = false; dropdownOpenSource = false; calendarOpen = false; dropdownOpenType = false\" \r\n class=\"filter-button\"\r\n [class.active]=\"showFilterMenu\"\r\n >\r\n <span class=\"plus\">+</span>\r\n <span class=\"material-symbols-outlined filter-icon\">\r\n filter_alt\r\n </span>\r\n </button>\r\n\r\n <div class=\"filter-menu\" *ngIf=\"showFilterMenu\">\r\n <ng-container *ngFor=\"let col of columns\">\r\n <ng-container *ngIf=\"col.key !== 'name' && col.key !== 'images' && col.key !== 'pos_id' && col.key !== 'point_of_sale_id' && col.key !== 'description' \">\r\n <label class=\"custom-checkbox\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"activeColumns.includes(col.key)\"\r\n (change)=\"toggleColumn(col.key, $event)\"\r\n />\r\n <span class=\"label-text\">{{ col.label }}</span>\r\n </label>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n <input\r\n type=\"text\"\r\n class=\"input\"\r\n placeholder=\"Buscar...\"\r\n [(ngModel)]=\"filters.name\"\r\n />\r\n <button class=\"button--create\" (click)=\"onSearched()\">Buscar</button>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"(!data || data.length === 0) && !loading\">\r\n <lib-kv-resource-not-found class=\"resource-not-found\"\r\n [messageTitle]=\"messageTitle\"\r\n [messageDescription]=\"messageDescription\"></lib-kv-resource-not-found>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"(data && data.length > 0) || loading\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of columns\">{{ column.label }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of filteredData\">\r\n <td *ngFor=\"let column of columns\">\r\n <div class=\"state\" [ngClass]=\"item[column.key]\">\r\n <ng-container *ngIf=\"column.label === 'Services'\">\r\n <div class=\"service-info\" (click)=\"emitData(item)\">\r\n <img [src]=\"item.url || 'https://i.imgur.com/InRaVrL.jpg'\" alt=\"Imagen\" class=\"service-image\" />\r\n <a class=\"a-link\">{{ item.name }}</a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'name' && column.label !== 'Services'\">\r\n <a class=\"a-link\" (click)=\"emitData(item)\">{{\r\n item[column.key]\r\n }}</a>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'images'\">\r\n <div class=\"image-container\">\r\n <div *ngFor=\"let image of item[column.key]?.slice(0, 3)\">\r\n <img [src]=\"image\" alt=\"Imagen\" />\r\n </div>\r\n <div *ngIf=\"item[column.key]?.length > 3\" class=\"extra-images\">\r\n +{{ item[column.key].length - 3 }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'created_at'\">\r\n {{ item[column.key] | date : \"dd/MM/yyyy\" }}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'expire_at'\">\r\n {{ item[column.key] | date : \"dd/MM/yyyy\" }}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.key === 'actions'\">\r\n <ng-container *ngTemplateOutlet=\"cellActionsTemplate; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n column.key !== 'expire_at' &&\r\n column.key !== 'created_at' &&\r\n column.key !== 'point_of_sale_id' &&\r\n column.key !== 'name' &&\r\n column.key !== 'pos_id' &&\r\n column.key !== 'images' &&\r\n column.key !== 'actions'\r\n \"\r\n >\r\n {{ item[column.key] }}\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"column.key === 'point_of_sale_id' || column.key === 'pos_id'\"\r\n >\r\n {{ getPosName(item[column.key]) }}\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ng-container *ngIf=\"showPaginator\">\r\n <table class=\"table-pagination\">\r\n <tbody>\r\n <tr>\r\n <div class=\"pagination\">\r\n <div class=\"button-section\">\r\n <button (click)=\"changePage(-1)\" [disabled]=\"currentPage === 1\">\r\n Previous\r\n </button>\r\n <button\r\n (click)=\"changePage(1)\"\r\n [disabled]=\"currentPage === totalPages() && !hasMoreItems\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n <div class=\"current-section\">\r\n <span>Page {{ currentPage }} of {{ totalPages() }}</span>\r\n </div>\r\n </div>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\";input,textarea{padding:10px;width:-webkit-fill-available;border:1px solid #ccc;border-radius:5px;font-size:16px;font-family:Roboto,sans-serif!important;color:#101828;background-color:#fff}input::placeholder,textarea::placeholder{color:#475467}input:focus,textarea:focus{border-color:#007bff;box-shadow:0 0 8px #007bff80;background-color:#fff}input.error,textarea.error{border-color:#fcd9d9;box-shadow:0 0 8px #fcd9d980}.input-group{margin-bottom:15px}.input-group label{font-size:14px;margin-bottom:5px;color:#555}.input-group .error-message{color:red}.input-cost{display:flex;gap:10px}table{width:100%;border-collapse:collapse;text-align:left;border:1px solid #ccc;border-radius:4px}thead{background-color:#fff;color:#101828}tbody{color:#475467}th,td{padding:10px;font-size:14px;border-bottom:1px solid #ccc}tbody tr:hover{background-color:#fff}.state.Active{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Active a{color:#036338!important}.state.Waiting{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Waiting a{color:#b53701!important}.state.Created{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Created a{color:#b53701!important}.state.Offered{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Offered a{color:#036338!important}.state.Closed{background-color:#fcd9d9;color:#581d1d;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Closed a{color:#581d1d!important}.state.Approved{background-color:#d1e7dd;color:#0f5132;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Approved a{color:#0f5132!important}.state.Rejected{background-color:#f8d7da;color:#842029;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Rejected a{color:#842029!important}.state.Pending{background-color:#f8e0d1;color:#b53701;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Pending a{color:#b53701!important}.pagination{display:flex;justify-content:space-between;margin-top:10px}.pagination button{padding:5px 10px;border:1px solid #ccc;background-color:#fff;cursor:pointer}.pagination button:disabled{color:#555;cursor:not-allowed}.search-container{margin-bottom:10px;display:flex;justify-content:flex-end;width:100%}.search-container .search-section input{width:min-content!important}.pagination{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:14px;color:#101828}.pagination button{padding:6px 12px;border:none;color:#101828;cursor:pointer;border-radius:4px;margin-right:6px}.pagination button:disabled{background-color:#ededed;cursor:not-allowed}.table-pagination{border-top:0!important}.a-link{text-decoration:none}.a-link:hover{cursor:pointer;text-decoration:underline}.a-link2{text-decoration:underline}.a-link2:hover{cursor:pointer;text-decoration:underline}.column-direction{display:flex;flex-direction:row;gap:1rem;padding:2rem;width:100%}.main-text{font-size:30px;color:#101828}.secondary-text{font-size:16px;color:#475467}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}.description-section{margin-top:30px}.description-section .description-title{color:#101828}.description-section .description-body{color:#475467}.list-container{width:100%;border:1px solid #ccc;border-radius:12px;margin-top:22px}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}.required{color:#b90000;font-weight:700}.service-info{align-items:center;display:flex}.service-info img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin:5px}.table-button--primary{width:100%;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.table-button--primary:hover{background-color:#00438a}.table-button--primary:disabled{background-color:#ededed;cursor:not-allowed}.button--primary{width:100%;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--primary:hover{background-color:#00438a}.button--primary:disabled{background-color:#ededed;cursor:not-allowed}.button--minimalist{height:min-content;padding:5px;background-color:#ebebeb;color:#475467;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--minimalist:disabled{background-color:#ededed;cursor:not-allowed}.button--primary-min{height:min-content;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;background:#0052cc;color:#fcfcfd}.button--primary-min:hover{background:#00438a}.button--primary-min:disabled{background-color:#ededed;cursor:not-allowed}.button--cancel{height:min-content;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;color:#475467;background-color:#fff;border:1px solid #ededed}.button--cancel:disabled{background-color:#ededed;cursor:not-allowed}.button--create{height:min-content;align-self:center;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--create:hover{background-color:#00438a}.button--create:disabled{background-color:#ededed;cursor:not-allowed}.button--sidenav{background-color:#fff;color:#475467;padding:8px;font-weight:700;border:none;display:flex;border-radius:4px;cursor:pointer;gap:10px;margin-top:10px;width:100%;align-items:center}.button--sidenav:hover{background-color:#f2f4f7;color:#101828}.button--sidenav:disabled{background-color:#ededed;cursor:not-allowed}.button--warn{background-color:#b90000;color:#f2f4f7;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;height:min-content}.button--warn:hover{background-color:red}.button--warn:disabled{background-color:#ededed;cursor:not-allowed}.button-container{display:flex;justify-content:flex-end;gap:8px}.button-container:disabled{background-color:#ededed;cursor:not-allowed}table{width:100%;table-layout:fixed}th{text-align:flex-start;padding:10px}.image-container{display:flex;align-items:center}.image-container img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin-left:-10px}.extra-images{width:40px;height:40px;border-radius:50%;border:2px solid #ccc;margin-left:-10px;background-color:#0052cc;color:#fff;font-size:15px;display:flex;align-items:center;justify-content:center}.loading-indicator{display:flex;justify-content:center;align-items:center;padding:10px;background-color:#0000000d;margin:10px 0;border-radius:4px}.search-section{display:flex;gap:7px;align-items:center}.search-section input{padding:5px}.search-section button{padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;cursor:pointer}.search-section button .button--create{background-color:#0052cc}.search-section button:hover{background-color:#f4f3f3}.search-section button.button--create{background-color:#0052cc;color:#fff;border-color:#0052cc;height:28px;text-align:center}.filters{display:flex;gap:7px;align-items:center}.filter-container{position:relative;display:inline-block}.filter-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;z-index:10}.filter-menu{position:absolute;top:120%;left:0;background:#fff;padding:.4rem;border-radius:8px;display:flex;flex-direction:column;z-index:20;font-size:14px;width:130px}.filter-button{position:relative;height:28px;display:flex;align-items:center;justify-content:center;gap:2px;cursor:pointer;width:35px;z-index:20}.filter-icon{font-size:20px;color:#666}.plus{font-size:16px;color:#555;transition:color .3s ease}.filter-button.active .plus{color:#0052cc}.custom-checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;border:1px solid #ccc;border-radius:2px;background:#fff;cursor:pointer;display:inline-block;vertical-align:middle;transition:all .2s ease;position:relative;padding:5px}.custom-checkbox input[type=checkbox]:checked{background:#0052cc;border-color:#0052cc}.custom-checkbox input[type=checkbox]:focus-visible{padding:6px!important;outline:2px solid rgba(0,123,255,.4);outline-offset:2px}.custom-checkbox input[type=checkbox]:checked+.label-text{color:#0052cc}.custom-dropdown{position:relative;width:fit-content;cursor:pointer;height:24px;font-size:14px;display:inline-block;padding:2px 6px;line-height:1.2;border-radius:4px;min-width:auto}.custom-dropdown .selected{display:inline-block;position:relative;top:-2px;border:1px solid #ccc;border-radius:6px;padding:2px 6px;background:#fff;display:flex;align-items:center;justify-content:space-between;height:24px}.custom-dropdown .selected .placeholder{color:#0052cc}.custom-dropdown .options{position:absolute;top:calc(100% + 6px);left:0;list-style:none;margin:0;padding:8px;border:1px solid #ccc;border-radius:8px;background:#fff;box-shadow:0 4px 8px #0000001a;z-index:10;white-space:nowrap}.custom-dropdown .options li{display:block;padding:2px 6px;line-height:1.1;border-radius:4px;margin:2px 0;cursor:pointer;transition:transform .1s ease-in}.custom-dropdown .options li:hover{transform:scale(1.03)}.type.Regular-auction{background-color:#d3eef7;color:#025875!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.type.Quick-offer{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.custom-calendar{position:relative;display:inline-block;font-family:sans-serif}.calendar-header .placeholder{color:#999}.calendar-popup{position:absolute;top:110%;left:0;background:#fff;border:1px solid #ccc;border-radius:6px;padding:12px;display:flex;flex-direction:column;gap:8px;box-shadow:0 4px 8px #0000001a;z-index:10}.calendar-popup input[type=date]{padding:6px;border:1px solid #ddd;border-radius:4px}.calendar-popup button{background:#0052cc;color:#fff;border:none;padding:6px 12px;border-radius:4px;cursor:pointer}.calendar-popup button:hover{background:#0052cc}\n"] }]
238
238
  }], ctorParameters: () => [{ type: i1.PaginationService }, { type: i0.ElementRef }], propDecorators: { columns: [{
239
239
  type: Input
240
240
  }], data: [{
@@ -276,4 +276,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
276
276
  type: HostListener,
277
277
  args: ['document:click', ['$event']]
278
278
  }] } });
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbWFpbi10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXZpby9zcmMvbGliL2NvbXBvbmVudHMva3YtbWFpbi10YWJsZS9rdi1tYWluLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9saWIvY29tcG9uZW50cy9rdi1tYWluLXRhYmxlL2t2LW1haW4tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBSU4sWUFBWSxFQUVaLFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7QUFTckcsTUFBTSxPQUFPLG9CQUFvQjtJQWMvQixJQUFhLFVBQVUsQ0FBQyxLQUFhO1FBQ25DLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUM7SUEyQ0QsWUFBb0IsaUJBQW9DLEVBQVUsSUFBZ0I7UUFBOUQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7UUE1RHpFLFlBQU8sR0FBcUMsRUFBRSxDQUFDO1FBQy9DLFNBQUks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QywreldBbVBBLHNnVUQ1TlksWUFBWSx1akJBQUUsV0FBVywrbUJBQUUsa0JBQWtCLHVLQUFFLHlCQUF5Qjs7NEZBSXZFLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsQ0FBQzsrR0FLMUUsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDTyxVQUFVO3NCQUF0QixLQUFLO2dCQU11QixtQkFBbUI7c0JBQS9DLFlBQVk7dUJBQUMsYUFBYTtnQkFDakIsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQVVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBbUVQLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgT25Jbml0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBLdkxvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi9rdi1sb2FkaW5nL2t2LWxvYWRpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UsIFBhZ2luYXRpb25TdGF0ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BhZ2luYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZXNvdXJjZU5vdEZvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi4va3YtcmVzb3VyY2Utbm90LWZvdW5kL2t2LXJlc291cmNlLW5vdC1mb3VuZC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWIta3YtbWFpbi10YWJsZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgS3ZMb2FkaW5nQ29tcG9uZW50LCBSZXNvdXJjZU5vdEZvdW5kQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtbWFpbi10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2t2LW1haW4tdGFibGUuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZNYWluVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBjb2x1bW5zOiB7IGtleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgZXh0cmFEYXRhITogYW55W107XHJcbiAgQElucHV0KCkgc2hvd1BhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbGF6eUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWVzc2FnZVRpdGxlOiBzdHJpbmcgPSAnUmVzb3VyY2Ugbm90IGZvdW5kJztcclxuICBASW5wdXQoKSBtZXNzYWdlRGVzY3JpcHRpb246IHN0cmluZyA9ICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZC4nO1xyXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkczogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBtZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBoYXNNb3JlSXRlbXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHRhYmxlSWQ6IHN0cmluZyA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBsZXRGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2V0IHRvdGFsSXRlbXModmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS51cGRhdGVQYWdpbmF0aW9uU3RhdGUoeyB0b3RhbEl0ZW1zOiB2YWx1ZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2NlbGxBY3Rpb25zJykgY2VsbEFjdGlvbnNUZW1wbGF0ZTogYW55O1xyXG4gIEBPdXRwdXQoKSBvbk5hbWVDbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvblBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBwYWdlOiBudW1iZXI7XHJcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xyXG4gICAgc2VhcmNoVGV4dDogc3RyaW5nO1xyXG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBwYWdlOiBudW1iZXI7XHJcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xyXG4gICAgc2VhcmNoVGV4dDogc3RyaW5nO1xyXG4gIH0+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgc3RhdGU6IHN0cmluZztcclxuICAgIHR5cGU6IHN0cmluZztcclxuICAgIGNyZWF0ZWRfYXRfc3RhcnQ6IHN0cmluZztcclxuICAgIGNyZWF0ZWRfYXRfZW5kOiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBzb3VyY2U6IHN0cmluZztcclxuICB9PigpO1xyXG5cclxuICBkcm9wZG93bk9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gIGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZTtcclxuICBkcm9wZG93bk9wZW5Tb3VyY2UgPSBmYWxzZVxyXG4gIGNhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xyXG4gIHBhZ2VTaXplOiBudW1iZXIgPSA1O1xyXG4gIHNob3dGaWx0ZXJNZW51ID0gZmFsc2U7XHJcbiAgZmlsdGVyZWRJdGVtczogYW55W10gPSBbXTtcclxuICBwdWJsaWMgYWN0aXZlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuICBvcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHB1YmxpYyBmaWx0ZXJzOiBhbnkgPSB7XHJcbiAgICBzdGF0ZTogJycsXHJcbiAgICB0eXBlOiAnJyxcclxuICAgIGNyZWF0ZWRfYXRfc3RhcnQ6ICcnLFxyXG4gICAgY3JlYXRlZF9hdF9lbmQ6ICcnLFxyXG4gICAgbmFtZTogJycsIFxyXG4gICAgc291cmNlOiAnJyxcclxuICB9O1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLCBwcml2YXRlIGVSZWY6IEVsZW1lbnRSZWYpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5wYWdpbmF0aW9uU3RhdGUkLnN1YnNjcmliZSgoc3RhdGU6IFBhZ2luYXRpb25TdGF0ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBzdGF0ZS5jdXJyZW50UGFnZTtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gc3RhdGUucGFnZVNpemU7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLm5hbWUgPSBzdGF0ZS5zZWFyY2hUZXh0O1xyXG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuZ2V0Q3VycmVudFN0YXRlKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gY3VycmVudFN0YXRlLmN1cnJlbnRQYWdlO1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IGN1cnJlbnRTdGF0ZS5wYWdlU2l6ZTtcclxuICAgIHRoaXMuZmlsdGVycy5uYW1lID0gY3VycmVudFN0YXRlLnNlYXJjaFRleHQ7XHJcblxyXG4gICAgaWYgKHRoaXMudG90YWxSZWNvcmRzID4gMCkge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnVwZGF0ZVBhZ2luYXRpb25TdGF0ZSh7IHRvdGFsSXRlbXM6IHRoaXMudG90YWxSZWNvcmRzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XHJcbiAgICBpZiAodGhpcy5sYXp5TG9hZGluZykge1xyXG4gICAgICB0aGlzLmxvYWRMYXp5RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKHRoaXMuY29sdW1uc1swXS5sYWJlbCA9PT0gJ09mZmVyIG5hbWUnKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gWydDcmVhdGVkJywgJ09mZmVyZWQnLCAnQ2xvc2VkJ107IFxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uc1swXS5sYWJlbCA9PT0gJ0N1c3RvbWVyIEVtYWlsJyl7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gWydDcmVhdGVkJywgJ1JlamVjdGVkJywgJ1BlbmRpbmcnLCAnQ2xvc2VkJywgJ0FwcHJvdmVkJ10gO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBbJ0FwcHJvdmVkJywgJ1JlamVjdGVkJywgJ1BlbmRpbmcnXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudDogRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5lUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duT3BlblN0YXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuVHlwZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmRyb3Bkb3duT3BlblNvdXJjZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICAgIFxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWyd0b3RhbFJlY29yZHMnXSkge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnVwZGF0ZVBhZ2luYXRpb25TdGF0ZSh7IHRvdGFsSXRlbXM6IHRoaXMudG90YWxSZWNvcmRzIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSAmJiAhdGhpcy5sYXp5TG9hZGluZykge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVuU3Vic2NyaWJlVG9QYWdpbmF0aW9uU2VydmljZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZURhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKChpdGVtKSA9PiAoe1xyXG4gICAgICAuLi5pdGVtLFxyXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5jaGFuZ2VUZXh0KGl0ZW0uZGVzY3JpcHRpb24sIDUwKVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFuZ2VUZXh0KHRleHQ6IHN0cmluZywgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gdGV4dC5sZW5ndGggPiBtYXhMZW5ndGhcclxuICAgICAgPyB0ZXh0LnN1YnN0cmluZygwLCBtYXhMZW5ndGgpLnRyaW1FbmQoKSArICcuLi4nXHJcbiAgICAgIDogdGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRmlsdGVyZWREYXRhKCkge1xyXG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICBpZiAoIXRoaXMubGF6eUxvYWRpbmcpIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5nZXRGaWx0ZXJlZERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWREYXRhKCkge1xyXG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhXHJcbiAgICAgIC5zbGljZShcclxuICAgICAgICAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbHRlcmVkRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmxhenlMb2FkaW5nID8gdGhpcy5kYXRhIDogdGhpcy5nZXRGaWx0ZXJlZERhdGEoKTtcclxuICB9XHJcblxyXG4gIHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKSB8fCBNYXRoLmNlaWwoXHJcbiAgICAgIHRoaXMuZGF0YS5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLnNvbWUoKGNvbCkgPT5cclxuICAgICAgICAgIGl0ZW1bY29sLmtleV1cclxuICAgICAgICAgICAgPy50b1N0cmluZygpXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLmZpbHRlcnMubmFtZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgIClcclxuICAgICAgKS5sZW5ndGggLyB0aGlzLnBhZ2VTaXplXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVG9GaXJzdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHtcclxuICAgICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICAgIHNlYXJjaFRleHQ6IHRoaXMuZmlsdGVycy5uYW1lXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoZWQoKXtcclxuICAgIGNvbnN0IGhhc0ZpbHRlcnMgPSBPYmplY3QudmFsdWVzKHRoaXMuZmlsdGVycykuc29tZShcclxuICAgICAgdmFsdWUgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gJydcclxuICAgICk7XHJcbiAgXHJcbiAgICBpZiAoaGFzRmlsdGVycykge1xyXG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJzICk7XHJcbiAgICAgIHRoaXMudXBkYXRlVG9GaXJzdFBhZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVBhZ2UoZGlyZWN0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnRvdGFsUGFnZXMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5sYXp5TG9hZGluZykge1xyXG4gICAgICBjb25zdCBuZXdQYWdlID0gdGhpcy5jdXJyZW50UGFnZSArIGRpcmVjdGlvbjtcclxuICAgICAgaWYgKG5ld1BhZ2UgPj0gMSAmJiBuZXdQYWdlIDw9IHRvdGFsUGFnZXMpIHtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnVwZGF0ZVBhZ2luYXRpb25TdGF0ZSh7IGN1cnJlbnRQYWdlOiBuZXdQYWdlIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZExhenlEYXRhKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSAhPT0gMSAmJiBuZXdQYWdlIDwgMSkge1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHsgY3VycmVudFBhZ2U6IDEgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkTGF6eURhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbmV3UGFnZSA9IHRoaXMuY3VycmVudFBhZ2UgKyBkaXJlY3Rpb247XHJcbiAgICAgIGlmIChuZXdQYWdlID4gMCAmJiBuZXdQYWdlIDw9IHRvdGFsUGFnZXMpIHtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnVwZGF0ZVBhZ2luYXRpb25TdGF0ZSh7IGN1cnJlbnRQYWdlOiBuZXdQYWdlIH0pO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaGFzTW9yZUl0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgICBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxyXG4gICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLmZpbHRlcnMubmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZExhenlEYXRhKCkge1xyXG4gICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdCh7XHJcbiAgICAgIHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBzZWFyY2hUZXh0OiB0aGlzLmZpbHRlcnMubmFtZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBvc05hbWUocG9zSWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmV4dHJhRGF0YT8uZmluZCgocG9zKSA9PiBwb3MucG9pbnRfb2Zfc2FsZV9pZCA9PT0gcG9zSWQpPy5uYW1lIHx8ICcnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVtaXREYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5vbk5hbWVDbGlja2VkLmVtaXQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDb2x1bW4oY29sdW1uS2V5OiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGNvbnN0IGNoZWNrZWQgPSBpbnB1dC5jaGVja2VkO1xyXG4gIFxyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmFjdGl2ZUNvbHVtbnMuaW5jbHVkZXMoY29sdW1uS2V5KSkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ29sdW1ucy5wdXNoKGNvbHVtbktleSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlQ29sdW1ucyA9IHRoaXMuYWN0aXZlQ29sdW1ucy5maWx0ZXIoYyA9PiBjICE9PSBjb2x1bW5LZXkpO1xyXG4gICAgICBpZiAoY29sdW1uS2V5ID09PSAnY3JlYXRlZF9hdCcpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5maWx0ZXJzWydjcmVhdGVkX2F0X3N0YXJ0J107XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZmlsdGVyc1snY3JlYXRlZF9hdF9lbmQnXTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlcnNbY29sdW1uS2V5XSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlcnNbY29sdW1uS2V5XTtcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgaGFzRmlsdGVycyA9IE9iamVjdC52YWx1ZXModGhpcy5maWx0ZXJzKS5zb21lKFxyXG4gICAgICAgIHZhbHVlID0+IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnXHJcbiAgICAgICk7XHJcbiAgICBcclxuICAgICAgaWYgKCFoYXNGaWx0ZXJzKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUb0ZpcnN0UGFnZSgpO1xyXG4gICAgICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcnMgKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUNhbGVuZGFyKCkge1xyXG4gICAgdGhpcy5jYWxlbmRhck9wZW4gPSAhdGhpcy5jYWxlbmRhck9wZW47XHJcbiAgfVxyXG4gIFxyXG4gIHVwZGF0ZVJhbmdlKCkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0ICYmIHRoaXMuZmlsdGVycy5jcmVhdGVkX2F0X2VuZCkge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQgPiB0aGlzLmZpbHRlcnMuY3JlYXRlZF9hdF9lbmQpIHtcclxuICAgICAgICBjb25zdCB0ZW1wID0gdGhpcy5maWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQ7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQgPSB0aGlzLmZpbHRlcnMuY3JlYXRlZF9hdF9lbmQ7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLmNyZWF0ZWRfYXRfZW5kID0gdGVtcDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGxpYi1rdi1sb2FkaW5nIFttZXNzYWdlXT1cIm1lc3NhZ2VcIiBbaXNMb2FkaW5nXT1cImxvYWRpbmdcIiA+IDwvbGliLWt2LWxvYWRpbmc+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXNlY3Rpb25cIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVDb2x1bW5zLmluY2x1ZGVzKGNvbC5rZXkpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wua2V5ID09PSAnY3JlYXRlZF9hdCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIiBbY2xhc3Mub3Blbl09XCJjYWxlbmRhck9wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKGNsaWNrKT1cImNhbGVuZGFyT3BlbiA9ICFjYWxlbmRhck9wZW47IGRyb3Bkb3duT3BlblN0YXRlID0gZmFsc2U7IGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZTsgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydCAmJiBmaWx0ZXJzLmNyZWF0ZWRfYXRfZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQgfCBkYXRlOidkZC9NTS95eXl5JyB9fSAtIHt7IGZpbHRlcnMuY3JlYXRlZF9hdF9lbmQgfCBkYXRlOidkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydCAmJiAhZmlsdGVycy5jcmVhdGVkX2F0X2VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0IHwgZGF0ZTonZGQvTU0veXl5eScgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0ICYmIGZpbHRlcnMuY3JlYXRlZF9hdF9lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlcnMuY3JlYXRlZF9hdF9lbmQgfCBkYXRlOidkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQgJiYgIWZpbHRlcnMuY3JlYXRlZF9hdF9lbmRcIiBjbGFzcz1cInBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBGZWNoYSBkZSBjcmVhY2nDs25cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItcG9wdXBcIiAqbmdJZj1cImNhbGVuZGFyT3BlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0XCIgKGNoYW5nZSk9XCJ1cGRhdGVSYW5nZSgpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBbKG5nTW9kZWwpXT1cImZpbHRlcnMuY3JlYXRlZF9hdF9lbmRcIiAoY2hhbmdlKT1cInVwZGF0ZVJhbmdlKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wua2V5ID09PSAnZXhwaXJlX2F0J1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbD5GZWNoYTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVycy5leHBpcmVfYXRcIiAgLz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmtleSA9PT0gJ3N0YXRlJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIiBbY2xhc3Mub3Blbl09XCJkcm9wZG93bk9wZW5TdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKGNsaWNrKT1cImRyb3Bkb3duT3BlblN0YXRlID0gIWRyb3Bkb3duT3BlblN0YXRlOyBkcm9wZG93bk9wZW5UeXBlID0gZmFsc2U7IGRyb3Bkb3duT3BlblNvdXJjZSA9IGZhbHNlOyBjYWxlbmRhck9wZW4gPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuc3RhdGVcIiBjbGFzcz1cInN0YXRlXCIgW25nQ2xhc3NdPVwiZmlsdGVycy5zdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlcnMuc3RhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJzLnN0YXRlXCIgY2xhc3M9XCJwbGFjZWhvbGRlclwiPkVzdGFkbzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwib3B0aW9uc1wiICpuZ0lmPVwiZHJvcGRvd25PcGVuU3RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBvcHQgb2Ygb3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVycy5zdGF0ZSA9IG9wdDsgZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0YXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm9wdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmtleSA9PT0gJ3NvdXJjZSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIiBbY2xhc3Mub3Blbl09XCJkcm9wZG93bk9wZW5Tb3VyY2VcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKGNsaWNrKT1cImRyb3Bkb3duT3BlblNvdXJjZSA9ICFkcm9wZG93bk9wZW5Tb3VyY2U7IGRyb3Bkb3duT3BlblN0YXRlID0gZmFsc2U7IGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZTsgY2FsZW5kYXJPcGVuID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuc291cmNlXCIgY2xhc3M9XCJzb3VyY2VcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJzLnNvdXJjZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJzLnNvdXJjZVwiIGNsYXNzPVwicGxhY2Vob2xkZXJcIj5JbXBvcnRhZG8gZGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm9wdGlvbnNcIiAqbmdJZj1cImRyb3Bkb3duT3BlblNvdXJjZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiZmlsdGVycy5zb3VyY2UgPSdsb2NhbCc7IGRyb3Bkb3duT3BlblNvdXJjZSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzb3VyY2VcIiBbbmdDbGFzc109XCInbG9jYWwnXCI+bG9jYWxcclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiZmlsdGVycy5zb3VyY2UgPSAnZWNvbW1lcmNlJzsgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNvdXJjZVwiIFtuZ0NsYXNzXT1cIidlY29tbWVyY2UnXCI+ZWNvbW1lcmNlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wua2V5ID09PSAndHlwZSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWRyb3Bkb3duXCIgW2NsYXNzLm9wZW5dPVwiZHJvcGRvd25PcGVuVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKGNsaWNrKT1cImRyb3Bkb3duT3BlblR5cGUgPSAhZHJvcGRvd25PcGVuVHlwZTsgZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZTsgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2U7IGNhbGVuZGFyT3BlbiA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVycy50eXBlXCIgY2xhc3M9XCJ0eXBlXCIgIFtuZ0NsYXNzXT1cImZpbHRlcnMudHlwZS5yZXBsYWNlKCcgJywgJy0nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlcnMudHlwZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZpbHRlcnMudHlwZVwiIGNsYXNzPVwicGxhY2Vob2xkZXJcIj5UaXBvIGRlIG9mZXJ0YTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwib3B0aW9uc1wiICpuZ0lmPVwiZHJvcGRvd25PcGVuVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImZpbHRlcnMudHlwZSA9J1JlZ3VsYXIgYXVjdGlvbic7IGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR5cGVcIiBbbmdDbGFzc109XCInUmVndWxhci1hdWN0aW9uJ1wiPlJlZ3VsYXIgYXVjdGlvblxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImZpbHRlcnMudHlwZSA9ICdRdWljayBvZmZlcic7IGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR5cGVcIiBbbmdDbGFzc109XCInUXVpY2stb2ZmZXInXCI+UXVpY2sgb2ZmZXIgXHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiICpuZ0lmPVwibGV0RmlsdGVyc1wiPlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci1vdmVybGF5XCJcclxuICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlck1lbnVcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dGaWx0ZXJNZW51ID0gZmFsc2VcIj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgIChjbGljayk9XCJzaG93RmlsdGVyTWVudSA9ICFzaG93RmlsdGVyTWVudTsgZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZTsgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2U7IGNhbGVuZGFyT3BlbiA9IGZhbHNlOyBkcm9wZG93bk9wZW5UeXBlID0gZmFsc2VcIiBcclxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWJ1dHRvblwiXHJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNob3dGaWx0ZXJNZW51XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsdXNcIj4rPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZpbHRlci1pY29uXCI+XHJcbiAgICAgICAgICAgIGZpbHRlcl9hbHRcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1tZW51XCIgKm5nSWY9XCJzaG93RmlsdGVyTWVudVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5rZXkgIT09ICduYW1lJyAmJiBjb2wua2V5ICE9PSAnaW1hZ2VzJyAmJiBjb2wua2V5ICE9PSAncG9zX2lkJyAmJiBjb2wua2V5ICE9PSAncG9pbnRfb2Zfc2FsZV9pZCcgJiYgY29sLmtleSAhPT0gJ2Rlc2NyaXB0aW9uJyBcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhY3RpdmVDb2x1bW5zLmluY2x1ZGVzKGNvbC5rZXkpXCJcclxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVDb2x1bW4oY29sLmtleSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0XCI+e3sgY29sLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXRcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiQnVzY2FyLi4uXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlcnMubmFtZVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tLWNyZWF0ZVwiIChjbGljayk9XCJvblNlYXJjaGVkKClcIj5CdXNjYXI8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKSAmJiAhbG9hZGluZ1wiPlxyXG4gICAgPGxpYi1rdi1yZXNvdXJjZS1ub3QtZm91bmQgY2xhc3M9XCJyZXNvdXJjZS1ub3QtZm91bmRcIlxyXG4gICAgICBbbWVzc2FnZVRpdGxlXT1cIm1lc3NhZ2VUaXRsZVwiXHJcbiAgICAgIFttZXNzYWdlRGVzY3JpcHRpb25dPVwibWVzc2FnZURlc2NyaXB0aW9uXCI+PC9saWIta3YtcmVzb3VyY2Utbm90LWZvdW5kPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB8fCBsb2FkaW5nXCI+XHJcbiAgICA8dGFibGU+XHJcbiAgICAgIDx0aGVhZD5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCI+e3sgY29sdW1uLmxhYmVsIH19PC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L3RoZWFkPlxyXG4gICAgICA8dGJvZHk+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkRGF0YVwiPlxyXG4gICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdGVcIiBbbmdDbGFzc109XCJpdGVtW2NvbHVtbi5rZXldXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5sYWJlbCA9PT0gJ1NlcnZpY2VzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcnZpY2UtaW5mb1wiIChjbGljayk9XCJlbWl0RGF0YShpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS51cmwgfHwgJ2h0dHBzOi8vaS5pbWd1ci5jb20vSW5SYVZyTC5qcGcnXCIgYWx0PVwiSW1hZ2VuXCIgY2xhc3M9XCJzZXJ2aWNlLWltYWdlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJhLWxpbmtcIj57eyBpdGVtLm5hbWUgfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnbmFtZScgJiYgY29sdW1uLmxhYmVsICE9PSAnU2VydmljZXMnXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImEtbGlua1wiIChjbGljayk9XCJlbWl0RGF0YShpdGVtKVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIGl0ZW1bY29sdW1uLmtleV1cclxuICAgICAgICAgICAgICAgIH19PC9hPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnaW1hZ2VzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZSBvZiBpdGVtW2NvbHVtbi5rZXldPy5zbGljZSgwLCAzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZVwiIGFsdD1cIkltYWdlblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbVtjb2x1bW4ua2V5XT8ubGVuZ3RoID4gM1wiIGNsYXNzPVwiZXh0cmEtaW1hZ2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgK3t7IGl0ZW1bY29sdW1uLmtleV0ubGVuZ3RoIC0gMyB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnY3JlYXRlZF9hdCdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sdW1uLmtleV0gfCBkYXRlIDogXCJkZC9NTS95eXl5XCIgfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmtleSA9PT0gJ2V4cGlyZV9hdCdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sdW1uLmtleV0gfCBkYXRlIDogXCJkZC9NTS95eXl5XCIgfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmtleSA9PT0gJ2FjdGlvbnMnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbEFjdGlvbnNUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdleHBpcmVfYXQnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdjcmVhdGVkX2F0JyAmJlxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW4ua2V5ICE9PSAncG9pbnRfb2Zfc2FsZV9pZCcgJiZcclxuICAgICAgICAgICAgICAgICAgY29sdW1uLmtleSAhPT0gJ25hbWUnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdwb3NfaWQnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdpbWFnZXMnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdhY3Rpb25zJ1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbHVtbi5rZXldIH19XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAncG9pbnRfb2Zfc2FsZV9pZCcgfHwgY29sdW1uLmtleSA9PT0gJ3Bvc19pZCdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IGdldFBvc05hbWUoaXRlbVtjb2x1bW4ua2V5XSkgfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UGFnaW5hdG9yXCI+XHJcbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2luYXRpb25cIj5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjaGFuZ2VQYWdlKC0xKVwiIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiPlxyXG4gICAgICAgICAgICAgICAgICBQcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYWdlKDEpXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSB0b3RhbFBhZ2VzKCkgJiYgIWhhc01vcmVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIE5leHRcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJyZW50LXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlBhZ2Uge3sgY3VycmVudFBhZ2UgfX0gb2Yge3sgdG90YWxQYWdlcygpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
279
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbWFpbi10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXZpby9zcmMvbGliL2NvbXBvbmVudHMva3YtbWFpbi10YWJsZS9rdi1tYWluLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9saWIvY29tcG9uZW50cy9rdi1tYWluLXRhYmxlL2t2LW1haW4tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBSU4sWUFBWSxFQUVaLFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7QUFTckcsTUFBTSxPQUFPLG9CQUFvQjtJQWMvQixJQUFhLFVBQVUsQ0FBQyxLQUFhO1FBQ25DLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUM7SUEyQ0QsWUFBb0IsaUJBQW9DLEVBQVUsSUFBZ0I7UUFBOUQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7UUE1RHpFLFlBQU8sR0FBcUMsRUFBRSxDQUFDO1FBQy9DLFNBQUks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QywreVdBbVBBLHNnVUQ1TlksWUFBWSx1akJBQUUsV0FBVywrbUJBQUUsa0JBQWtCLHVLQUFFLHlCQUF5Qjs7NEZBSXZFLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsQ0FBQzsrR0FLMUUsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDTyxVQUFVO3NCQUF0QixLQUFLO2dCQU11QixtQkFBbUI7c0JBQS9DLFlBQVk7dUJBQUMsYUFBYTtnQkFDakIsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQVVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBbUVQLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgT25Jbml0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBLdkxvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi9rdi1sb2FkaW5nL2t2LWxvYWRpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UsIFBhZ2luYXRpb25TdGF0ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BhZ2luYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZXNvdXJjZU5vdEZvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi4va3YtcmVzb3VyY2Utbm90LWZvdW5kL2t2LXJlc291cmNlLW5vdC1mb3VuZC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWIta3YtbWFpbi10YWJsZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgS3ZMb2FkaW5nQ29tcG9uZW50LCBSZXNvdXJjZU5vdEZvdW5kQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtbWFpbi10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2t2LW1haW4tdGFibGUuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZNYWluVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBjb2x1bW5zOiB7IGtleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgZXh0cmFEYXRhITogYW55W107XHJcbiAgQElucHV0KCkgc2hvd1BhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbGF6eUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWVzc2FnZVRpdGxlOiBzdHJpbmcgPSAnUmVzb3VyY2Ugbm90IGZvdW5kJztcclxuICBASW5wdXQoKSBtZXNzYWdlRGVzY3JpcHRpb246IHN0cmluZyA9ICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZC4nO1xyXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkczogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBtZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBoYXNNb3JlSXRlbXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHRhYmxlSWQ6IHN0cmluZyA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBsZXRGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2V0IHRvdGFsSXRlbXModmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS51cGRhdGVQYWdpbmF0aW9uU3RhdGUoeyB0b3RhbEl0ZW1zOiB2YWx1ZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2NlbGxBY3Rpb25zJykgY2VsbEFjdGlvbnNUZW1wbGF0ZTogYW55O1xyXG4gIEBPdXRwdXQoKSBvbk5hbWVDbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvblBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBwYWdlOiBudW1iZXI7XHJcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xyXG4gICAgc2VhcmNoVGV4dDogc3RyaW5nO1xyXG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBwYWdlOiBudW1iZXI7XHJcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xyXG4gICAgc2VhcmNoVGV4dDogc3RyaW5nO1xyXG4gIH0+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgc3RhdGU6IHN0cmluZztcclxuICAgIHR5cGU6IHN0cmluZztcclxuICAgIGNyZWF0ZWRfYXRfc3RhcnQ6IHN0cmluZztcclxuICAgIGNyZWF0ZWRfYXRfZW5kOiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBzb3VyY2U6IHN0cmluZztcclxuICB9PigpO1xyXG5cclxuICBkcm9wZG93bk9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gIGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZTtcclxuICBkcm9wZG93bk9wZW5Tb3VyY2UgPSBmYWxzZVxyXG4gIGNhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xyXG4gIHBhZ2VTaXplOiBudW1iZXIgPSA1O1xyXG4gIHNob3dGaWx0ZXJNZW51ID0gZmFsc2U7XHJcbiAgZmlsdGVyZWRJdGVtczogYW55W10gPSBbXTtcclxuICBwdWJsaWMgYWN0aXZlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuICBvcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHB1YmxpYyBmaWx0ZXJzOiBhbnkgPSB7XHJcbiAgICBzdGF0ZTogJycsXHJcbiAgICB0eXBlOiAnJyxcclxuICAgIGNyZWF0ZWRfYXRfc3RhcnQ6ICcnLFxyXG4gICAgY3JlYXRlZF9hdF9lbmQ6ICcnLFxyXG4gICAgbmFtZTogJycsIFxyXG4gICAgc291cmNlOiAnJyxcclxuICB9O1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLCBwcml2YXRlIGVSZWY6IEVsZW1lbnRSZWYpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5wYWdpbmF0aW9uU3RhdGUkLnN1YnNjcmliZSgoc3RhdGU6IFBhZ2luYXRpb25TdGF0ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBzdGF0ZS5jdXJyZW50UGFnZTtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gc3RhdGUucGFnZVNpemU7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLm5hbWUgPSBzdGF0ZS5zZWFyY2hUZXh0O1xyXG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuZ2V0Q3VycmVudFN0YXRlKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gY3VycmVudFN0YXRlLmN1cnJlbnRQYWdlO1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IGN1cnJlbnRTdGF0ZS5wYWdlU2l6ZTtcclxuICAgIHRoaXMuZmlsdGVycy5uYW1lID0gY3VycmVudFN0YXRlLnNlYXJjaFRleHQ7XHJcblxyXG4gICAgaWYgKHRoaXMudG90YWxSZWNvcmRzID4gMCkge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnVwZGF0ZVBhZ2luYXRpb25TdGF0ZSh7IHRvdGFsSXRlbXM6IHRoaXMudG90YWxSZWNvcmRzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XHJcbiAgICBpZiAodGhpcy5sYXp5TG9hZGluZykge1xyXG4gICAgICB0aGlzLmxvYWRMYXp5RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKHRoaXMuY29sdW1uc1swXS5sYWJlbCA9PT0gJ09mZmVyIG5hbWUnKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gWydDcmVhdGVkJywgJ09mZmVyZWQnLCAnQ2xvc2VkJ107IFxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uc1swXS5sYWJlbCA9PT0gJ0N1c3RvbWVyIEVtYWlsJyl7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gWydDcmVhdGVkJywgJ1JlamVjdGVkJywgJ1BlbmRpbmcnLCAnQ2xvc2VkJywgJ0FwcHJvdmVkJ10gO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBbJ0FwcHJvdmVkJywgJ1JlamVjdGVkJywgJ1BlbmRpbmcnXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudDogRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5lUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duT3BlblN0YXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuVHlwZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmRyb3Bkb3duT3BlblNvdXJjZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICAgIFxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWyd0b3RhbFJlY29yZHMnXSkge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnVwZGF0ZVBhZ2luYXRpb25TdGF0ZSh7IHRvdGFsSXRlbXM6IHRoaXMudG90YWxSZWNvcmRzIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSAmJiAhdGhpcy5sYXp5TG9hZGluZykge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVuU3Vic2NyaWJlVG9QYWdpbmF0aW9uU2VydmljZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZURhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKChpdGVtKSA9PiAoe1xyXG4gICAgICAuLi5pdGVtLFxyXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5jaGFuZ2VUZXh0KGl0ZW0uZGVzY3JpcHRpb24sIDUwKVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFuZ2VUZXh0KHRleHQ6IHN0cmluZywgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gdGV4dC5sZW5ndGggPiBtYXhMZW5ndGhcclxuICAgICAgPyB0ZXh0LnN1YnN0cmluZygwLCBtYXhMZW5ndGgpLnRyaW1FbmQoKSArICcuLi4nXHJcbiAgICAgIDogdGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRmlsdGVyZWREYXRhKCkge1xyXG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICBpZiAoIXRoaXMubGF6eUxvYWRpbmcpIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5nZXRGaWx0ZXJlZERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWREYXRhKCkge1xyXG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhXHJcbiAgICAgIC5zbGljZShcclxuICAgICAgICAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbHRlcmVkRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmxhenlMb2FkaW5nID8gdGhpcy5kYXRhIDogdGhpcy5nZXRGaWx0ZXJlZERhdGEoKTtcclxuICB9XHJcblxyXG4gIHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKSB8fCBNYXRoLmNlaWwoXHJcbiAgICAgIHRoaXMuZGF0YS5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLnNvbWUoKGNvbCkgPT5cclxuICAgICAgICAgIGl0ZW1bY29sLmtleV1cclxuICAgICAgICAgICAgPy50b1N0cmluZygpXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLmZpbHRlcnMubmFtZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgIClcclxuICAgICAgKS5sZW5ndGggLyB0aGlzLnBhZ2VTaXplXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVG9GaXJzdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHtcclxuICAgICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICAgIHNlYXJjaFRleHQ6IHRoaXMuZmlsdGVycy5uYW1lXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoZWQoKXtcclxuICAgIGNvbnN0IGhhc0ZpbHRlcnMgPSBPYmplY3QudmFsdWVzKHRoaXMuZmlsdGVycykuc29tZShcclxuICAgICAgdmFsdWUgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gJydcclxuICAgICk7XHJcbiAgXHJcbiAgICBpZiAoaGFzRmlsdGVycykge1xyXG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJzICk7XHJcbiAgICAgIHRoaXMudXBkYXRlVG9GaXJzdFBhZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVBhZ2UoZGlyZWN0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnRvdGFsUGFnZXMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5sYXp5TG9hZGluZykge1xyXG4gICAgICBjb25zdCBuZXdQYWdlID0gdGhpcy5jdXJyZW50UGFnZSArIGRpcmVjdGlvbjtcclxuICAgICAgaWYgKG5ld1BhZ2UgPj0gMSAmJiBuZXdQYWdlIDw9IHRvdGFsUGFnZXMpIHtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnVwZGF0ZVBhZ2luYXRpb25TdGF0ZSh7IGN1cnJlbnRQYWdlOiBuZXdQYWdlIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZExhenlEYXRhKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSAhPT0gMSAmJiBuZXdQYWdlIDwgMSkge1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHsgY3VycmVudFBhZ2U6IDEgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkTGF6eURhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbmV3UGFnZSA9IHRoaXMuY3VycmVudFBhZ2UgKyBkaXJlY3Rpb247XHJcbiAgICAgIGlmIChuZXdQYWdlID4gMCAmJiBuZXdQYWdlIDw9IHRvdGFsUGFnZXMpIHtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnVwZGF0ZVBhZ2luYXRpb25TdGF0ZSh7IGN1cnJlbnRQYWdlOiBuZXdQYWdlIH0pO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaGFzTW9yZUl0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgICBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxyXG4gICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLmZpbHRlcnMubmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZExhenlEYXRhKCkge1xyXG4gICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdCh7XHJcbiAgICAgIHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBzZWFyY2hUZXh0OiB0aGlzLmZpbHRlcnMubmFtZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBvc05hbWUocG9zSWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmV4dHJhRGF0YT8uZmluZCgocG9zKSA9PiBwb3MucG9pbnRfb2Zfc2FsZV9pZCA9PT0gcG9zSWQpPy5uYW1lIHx8ICcnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVtaXREYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5vbk5hbWVDbGlja2VkLmVtaXQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDb2x1bW4oY29sdW1uS2V5OiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGNvbnN0IGNoZWNrZWQgPSBpbnB1dC5jaGVja2VkO1xyXG4gIFxyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmFjdGl2ZUNvbHVtbnMuaW5jbHVkZXMoY29sdW1uS2V5KSkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ29sdW1ucy5wdXNoKGNvbHVtbktleSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlQ29sdW1ucyA9IHRoaXMuYWN0aXZlQ29sdW1ucy5maWx0ZXIoYyA9PiBjICE9PSBjb2x1bW5LZXkpO1xyXG4gICAgICBpZiAoY29sdW1uS2V5ID09PSAnY3JlYXRlZF9hdCcpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5maWx0ZXJzWydjcmVhdGVkX2F0X3N0YXJ0J107XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZmlsdGVyc1snY3JlYXRlZF9hdF9lbmQnXTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlcnNbY29sdW1uS2V5XSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlcnNbY29sdW1uS2V5XTtcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgaGFzRmlsdGVycyA9IE9iamVjdC52YWx1ZXModGhpcy5maWx0ZXJzKS5zb21lKFxyXG4gICAgICAgIHZhbHVlID0+IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnXHJcbiAgICAgICk7XHJcbiAgICBcclxuICAgICAgaWYgKCFoYXNGaWx0ZXJzKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUb0ZpcnN0UGFnZSgpO1xyXG4gICAgICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcnMgKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUNhbGVuZGFyKCkge1xyXG4gICAgdGhpcy5jYWxlbmRhck9wZW4gPSAhdGhpcy5jYWxlbmRhck9wZW47XHJcbiAgfVxyXG4gIFxyXG4gIHVwZGF0ZVJhbmdlKCkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0ICYmIHRoaXMuZmlsdGVycy5jcmVhdGVkX2F0X2VuZCkge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQgPiB0aGlzLmZpbHRlcnMuY3JlYXRlZF9hdF9lbmQpIHtcclxuICAgICAgICBjb25zdCB0ZW1wID0gdGhpcy5maWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQ7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQgPSB0aGlzLmZpbHRlcnMuY3JlYXRlZF9hdF9lbmQ7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLmNyZWF0ZWRfYXRfZW5kID0gdGVtcDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGxpYi1rdi1sb2FkaW5nIFttZXNzYWdlXT1cIm1lc3NhZ2VcIiBbaXNMb2FkaW5nXT1cImxvYWRpbmdcIiA+IDwvbGliLWt2LWxvYWRpbmc+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXNlY3Rpb25cIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVDb2x1bW5zLmluY2x1ZGVzKGNvbC5rZXkpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wua2V5ID09PSAnY3JlYXRlZF9hdCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIiBbY2xhc3Mub3Blbl09XCJjYWxlbmRhck9wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKGNsaWNrKT1cImNhbGVuZGFyT3BlbiA9ICFjYWxlbmRhck9wZW47IGRyb3Bkb3duT3BlblN0YXRlID0gZmFsc2U7IGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZTsgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydCAmJiBmaWx0ZXJzLmNyZWF0ZWRfYXRfZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQgfCBkYXRlOidkZC9NTS95eXl5JyB9fSAtIHt7IGZpbHRlcnMuY3JlYXRlZF9hdF9lbmQgfCBkYXRlOidkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydCAmJiAhZmlsdGVycy5jcmVhdGVkX2F0X2VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0IHwgZGF0ZTonZGQvTU0veXl5eScgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0ICYmIGZpbHRlcnMuY3JlYXRlZF9hdF9lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlcnMuY3JlYXRlZF9hdF9lbmQgfCBkYXRlOidkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQgJiYgIWZpbHRlcnMuY3JlYXRlZF9hdF9lbmRcIiBjbGFzcz1cInBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVkIGF0XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLXBvcHVwXCIgKm5nSWY9XCJjYWxlbmRhck9wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBbKG5nTW9kZWwpXT1cImZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydFwiIChjaGFuZ2UpPVwidXBkYXRlUmFuZ2UoKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJkYXRlXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzLmNyZWF0ZWRfYXRfZW5kXCIgKGNoYW5nZSk9XCJ1cGRhdGVSYW5nZSgpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmtleSA9PT0gJ2V4cGlyZV9hdCdcIj5cclxuICAgICAgICAgICAgICA8bGFiZWw+RmVjaGE6PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBbKG5nTW9kZWwpXT1cImZpbHRlcnMuZXhwaXJlX2F0XCIgIC8+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5rZXkgPT09ICdzdGF0ZSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWRyb3Bkb3duXCIgW2NsYXNzLm9wZW5dPVwiZHJvcGRvd25PcGVuU3RhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiIChjbGljayk9XCJkcm9wZG93bk9wZW5TdGF0ZSA9ICFkcm9wZG93bk9wZW5TdGF0ZTsgZHJvcGRvd25PcGVuVHlwZSA9IGZhbHNlOyBkcm9wZG93bk9wZW5Tb3VyY2UgPSBmYWxzZTsgY2FsZW5kYXJPcGVuID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJzLnN0YXRlXCIgY2xhc3M9XCJzdGF0ZVwiIFtuZ0NsYXNzXT1cImZpbHRlcnMuc3RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJzLnN0YXRlIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZmlsdGVycy5zdGF0ZVwiIGNsYXNzPVwicGxhY2Vob2xkZXJcIj5TdGF0ZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwib3B0aW9uc1wiICpuZ0lmPVwiZHJvcGRvd25PcGVuU3RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBvcHQgb2Ygb3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVycy5zdGF0ZSA9IG9wdDsgZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0YXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm9wdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmtleSA9PT0gJ3NvdXJjZSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIiBbY2xhc3Mub3Blbl09XCJkcm9wZG93bk9wZW5Tb3VyY2VcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKGNsaWNrKT1cImRyb3Bkb3duT3BlblNvdXJjZSA9ICFkcm9wZG93bk9wZW5Tb3VyY2U7IGRyb3Bkb3duT3BlblN0YXRlID0gZmFsc2U7IGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZTsgY2FsZW5kYXJPcGVuID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuc291cmNlXCIgY2xhc3M9XCJzb3VyY2VcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJzLnNvdXJjZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJzLnNvdXJjZVwiIGNsYXNzPVwicGxhY2Vob2xkZXJcIj5JbXBvcnRlZCBmcm9tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJvcHRpb25zXCIgKm5nSWY9XCJkcm9wZG93bk9wZW5Tb3VyY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImZpbHRlcnMuc291cmNlID0nbG9jYWwnOyBkcm9wZG93bk9wZW5Tb3VyY2UgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic291cmNlXCIgW25nQ2xhc3NdPVwiJ2xvY2FsJ1wiPmxvY2FsXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImZpbHRlcnMuc291cmNlID0gJ2Vjb21tZXJjZSc7IGRyb3Bkb3duT3BlblNvdXJjZSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzb3VyY2VcIiBbbmdDbGFzc109XCInZWNvbW1lcmNlJ1wiPmVjb21tZXJjZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIFxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmtleSA9PT0gJ3R5cGUnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1kcm9wZG93blwiIFtjbGFzcy5vcGVuXT1cImRyb3Bkb3duT3BlblR5cGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiIChjbGljayk9XCJkcm9wZG93bk9wZW5UeXBlID0gIWRyb3Bkb3duT3BlblR5cGU7IGRyb3Bkb3duT3BlblN0YXRlID0gZmFsc2U7IGRyb3Bkb3duT3BlblNvdXJjZSA9IGZhbHNlOyBjYWxlbmRhck9wZW4gPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMudHlwZVwiIGNsYXNzPVwidHlwZVwiICBbbmdDbGFzc109XCJmaWx0ZXJzLnR5cGUucmVwbGFjZSgnICcsICctJylcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJzLnR5cGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJzLnR5cGVcIiBjbGFzcz1cInBsYWNlaG9sZGVyXCI+T2ZmZXIgdHlwZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwib3B0aW9uc1wiICpuZ0lmPVwiZHJvcGRvd25PcGVuVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImZpbHRlcnMudHlwZSA9J1JlZ3VsYXIgYXVjdGlvbic7IGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR5cGVcIiBbbmdDbGFzc109XCInUmVndWxhci1hdWN0aW9uJ1wiPlJlZ3VsYXIgYXVjdGlvblxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImZpbHRlcnMudHlwZSA9ICdRdWljayBvZmZlcic7IGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR5cGVcIiBbbmdDbGFzc109XCInUXVpY2stb2ZmZXInXCI+UXVpY2sgb2ZmZXIgXHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiICpuZ0lmPVwibGV0RmlsdGVyc1wiPlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci1vdmVybGF5XCJcclxuICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlck1lbnVcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dGaWx0ZXJNZW51ID0gZmFsc2VcIj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgIChjbGljayk9XCJzaG93RmlsdGVyTWVudSA9ICFzaG93RmlsdGVyTWVudTsgZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZTsgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2U7IGNhbGVuZGFyT3BlbiA9IGZhbHNlOyBkcm9wZG93bk9wZW5UeXBlID0gZmFsc2VcIiBcclxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWJ1dHRvblwiXHJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNob3dGaWx0ZXJNZW51XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsdXNcIj4rPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZpbHRlci1pY29uXCI+XHJcbiAgICAgICAgICAgIGZpbHRlcl9hbHRcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1tZW51XCIgKm5nSWY9XCJzaG93RmlsdGVyTWVudVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5rZXkgIT09ICduYW1lJyAmJiBjb2wua2V5ICE9PSAnaW1hZ2VzJyAmJiBjb2wua2V5ICE9PSAncG9zX2lkJyAmJiBjb2wua2V5ICE9PSAncG9pbnRfb2Zfc2FsZV9pZCcgJiYgY29sLmtleSAhPT0gJ2Rlc2NyaXB0aW9uJyBcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhY3RpdmVDb2x1bW5zLmluY2x1ZGVzKGNvbC5rZXkpXCJcclxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVDb2x1bW4oY29sLmtleSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0XCI+e3sgY29sLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXRcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiQnVzY2FyLi4uXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlcnMubmFtZVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tLWNyZWF0ZVwiIChjbGljayk9XCJvblNlYXJjaGVkKClcIj5CdXNjYXI8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKSAmJiAhbG9hZGluZ1wiPlxyXG4gICAgPGxpYi1rdi1yZXNvdXJjZS1ub3QtZm91bmQgY2xhc3M9XCJyZXNvdXJjZS1ub3QtZm91bmRcIlxyXG4gICAgICBbbWVzc2FnZVRpdGxlXT1cIm1lc3NhZ2VUaXRsZVwiXHJcbiAgICAgIFttZXNzYWdlRGVzY3JpcHRpb25dPVwibWVzc2FnZURlc2NyaXB0aW9uXCI+PC9saWIta3YtcmVzb3VyY2Utbm90LWZvdW5kPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB8fCBsb2FkaW5nXCI+XHJcbiAgICA8dGFibGU+XHJcbiAgICAgIDx0aGVhZD5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCI+e3sgY29sdW1uLmxhYmVsIH19PC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L3RoZWFkPlxyXG4gICAgICA8dGJvZHk+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkRGF0YVwiPlxyXG4gICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdGVcIiBbbmdDbGFzc109XCJpdGVtW2NvbHVtbi5rZXldXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5sYWJlbCA9PT0gJ1NlcnZpY2VzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcnZpY2UtaW5mb1wiIChjbGljayk9XCJlbWl0RGF0YShpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS51cmwgfHwgJ2h0dHBzOi8vaS5pbWd1ci5jb20vSW5SYVZyTC5qcGcnXCIgYWx0PVwiSW1hZ2VuXCIgY2xhc3M9XCJzZXJ2aWNlLWltYWdlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJhLWxpbmtcIj57eyBpdGVtLm5hbWUgfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnbmFtZScgJiYgY29sdW1uLmxhYmVsICE9PSAnU2VydmljZXMnXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImEtbGlua1wiIChjbGljayk9XCJlbWl0RGF0YShpdGVtKVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIGl0ZW1bY29sdW1uLmtleV1cclxuICAgICAgICAgICAgICAgIH19PC9hPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnaW1hZ2VzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZSBvZiBpdGVtW2NvbHVtbi5rZXldPy5zbGljZSgwLCAzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZVwiIGFsdD1cIkltYWdlblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbVtjb2x1bW4ua2V5XT8ubGVuZ3RoID4gM1wiIGNsYXNzPVwiZXh0cmEtaW1hZ2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgK3t7IGl0ZW1bY29sdW1uLmtleV0ubGVuZ3RoIC0gMyB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnY3JlYXRlZF9hdCdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sdW1uLmtleV0gfCBkYXRlIDogXCJkZC9NTS95eXl5XCIgfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmtleSA9PT0gJ2V4cGlyZV9hdCdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sdW1uLmtleV0gfCBkYXRlIDogXCJkZC9NTS95eXl5XCIgfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmtleSA9PT0gJ2FjdGlvbnMnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbEFjdGlvbnNUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdleHBpcmVfYXQnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdjcmVhdGVkX2F0JyAmJlxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW4ua2V5ICE9PSAncG9pbnRfb2Zfc2FsZV9pZCcgJiZcclxuICAgICAgICAgICAgICAgICAgY29sdW1uLmtleSAhPT0gJ25hbWUnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdwb3NfaWQnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdpbWFnZXMnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdhY3Rpb25zJ1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbHVtbi5rZXldIH19XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAncG9pbnRfb2Zfc2FsZV9pZCcgfHwgY29sdW1uLmtleSA9PT0gJ3Bvc19pZCdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IGdldFBvc05hbWUoaXRlbVtjb2x1bW4ua2V5XSkgfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UGFnaW5hdG9yXCI+XHJcbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2luYXRpb25cIj5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjaGFuZ2VQYWdlKC0xKVwiIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiPlxyXG4gICAgICAgICAgICAgICAgICBQcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYWdlKDEpXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSB0b3RhbFBhZ2VzKCkgJiYgIWhhc01vcmVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIE5leHRcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJyZW50LXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlBhZ2Uge3sgY3VycmVudFBhZ2UgfX0gb2Yge3sgdG90YWxQYWdlcygpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19