kivio 1.6.8 → 1.6.9

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.
@@ -259,7 +259,7 @@ export class KvMainTableComponent {
259
259
  this.onFilterChange.emit(this.filters);
260
260
  }
261
261
  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 }); }
262
- 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", hiddenColumnsOnMobile: "hiddenColumnsOnMobile", 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\" *ngIf=\"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()\" [max]=\"today\" />\r\n <input type=\"date\" [(ngModel)]=\"filters.created_at_end\" (change)=\"updateRange()\" [max]=\"today\" />\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\" [max]=\"today\" />\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)]=\"pendingSearch\"\r\n (keyup.enter)=\"onSearched()\"\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\" [class.hidden-mobile]=\"hiddenColumnsOnMobile.includes(column.key)\">{{ 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\" [class.hidden-mobile]=\"hiddenColumnsOnMobile.includes(column.key)\">\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>", 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!important;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}@media (max-width: 768px){.input-group{margin-bottom:13px}.input-group label{font-size:13px}}@media (max-width: 480px){.input-group{margin-bottom:3px}.input-group label{font-size:12px}}.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}@media (max-width: 768px){.pagination{gap:8px;margin:12px}.pagination button{padding:4px 10px;border-radius:3px}}@media (max-width: 480px){.pagination{gap:6px;margin:10px}.pagination button{padding:2px 8px;border-radius:2px}}.table-pagination{border-top:0!important}@media (max-width: 768px){.search-container{margin-bottom:10px;display:flex;justify-content:center;width:100%}table{table-layout:auto!important;border:none!important}table td{padding:5px!important}.hidden-mobile{display:none}}.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}@media (max-width: 768px){.main-text{font-size:25px}}@media (max-width: 480px){.main-text{font-size:20px}}.secondary-text{font-size:16px;color:#475467}@media (max-width: 768px){.secondary-text{font-size:14px}}@media (max-width: 480px){.secondary-text{font-size:12px}}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}@media (max-width: 768px){.sidebar-title{margin-top:-36px;margin-bottom:3px;font-size:20px}}.description-section{margin-top:30px}@media (max-width: 768px){.description-section{margin-top:7px}}.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}@media (max-width: 768px){.list-container{margin-top:7px}}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}@media (max-width: 768px){.list-container .list-section .list{margin-top:6px}}.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}.popup-backdrop{position:fixed;inset:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:10000;transform:translateZ(0)}.popup-container{max-height:80vh;background:#fff;padding:20px;border-radius:8px;box-shadow:0 2px 10px #0000001a;overflow-y:auto;width:50%;position:relative}@media (max-width: 768px){.popup-container{width:80%;max-height:80vh;padding:15px;border-radius:6px;margin:0 auto}}@media (max-width: 480px){.popup-container{width:90%;max-height:90vh;padding:10px;border-radius:4px}}.popup-container .close{float:right;font-size:20px;cursor:pointer}.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;width:max-content;margin-left:8px;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;background:#0052cc;color:#fcfcfd}@media (max-width: 768px){.button--primary-min{padding:8px}}.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}@media (max-width: 768px){.search-section button.button--create{height:36px;font-size:14px;border-radius:6px}}.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:1000}.filter-menu{position:absolute;top:120%;right:0;background:#fff;padding:.4rem;border-radius:8px;display:flex;flex-direction:column;font-size:14px;width:130px;z-index:1001}.filter-button{position:relative;height:28px;display:flex;align-items:center;justify-content:center;gap:2px;cursor:pointer;width:35px;z-index:998}.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}@media (max-width: 768px){.custom-dropdown{padding:0}}.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}@media (max-width: 768px){.search-section{flex-wrap:wrap;display:flex;align-items:center;gap:8px;width:100%}.filter-container{order:2}.filters{display:flex;flex-wrap:wrap;gap:8px;width:100%;order:3}}\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"] }] }); }
262
+ 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", hiddenColumnsOnMobile: "hiddenColumnsOnMobile", 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\" *ngIf=\"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()\" [max]=\"today\" />\r\n <input type=\"date\" [(ngModel)]=\"filters.created_at_end\" (change)=\"updateRange()\" [max]=\"today\" />\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\" [max]=\"today\" />\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)]=\"pendingSearch\"\r\n (keyup.enter)=\"onSearched()\"\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\" [class.hidden-mobile]=\"hiddenColumnsOnMobile.includes(column.key)\">{{ 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\" [class.hidden-mobile]=\"hiddenColumnsOnMobile.includes(column.key)\">\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>", 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!important;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}@media (max-width: 768px){.input-group{margin-bottom:13px}.input-group label{font-size:13px}}@media (max-width: 480px){.input-group{margin-bottom:3px}.input-group label{font-size:12px}}.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}@media (max-width: 768px){.pagination{gap:8px;margin:12px}.pagination button{padding:4px 10px;border-radius:3px}}@media (max-width: 480px){.pagination{gap:6px;margin:10px}.pagination button{padding:2px 8px;border-radius:2px}}.table-pagination{border-top:0!important}@media (max-width: 768px){.search-container{margin-bottom:10px;display:flex;justify-content:center;width:100%}table{table-layout:auto!important;border:none!important}table td{padding:5px!important}.hidden-mobile{display:none}}.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}@media (max-width: 768px){.main-text{font-size:25px}}@media (max-width: 480px){.main-text{font-size:20px}}.secondary-text{font-size:16px;color:#475467}@media (max-width: 768px){.secondary-text{font-size:14px}}@media (max-width: 480px){.secondary-text{font-size:12px}}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}@media (max-width: 768px){.sidebar-title{margin-top:-36px;margin-bottom:3px;font-size:20px}}.description-section{margin-top:30px}@media (max-width: 768px){.description-section{margin-top:7px}}.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}@media (max-width: 768px){.list-container{margin-top:7px}}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}@media (max-width: 768px){.list-container .list-section .list{margin-top:6px}}.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}.popup-backdrop{position:fixed;inset:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:10000;transform:translateZ(0)}.popup-container{max-height:80vh;background:#fff;padding:20px;border-radius:8px;box-shadow:0 2px 10px #0000001a;overflow-y:auto;width:50%;position:relative}@media (max-width: 768px){.popup-container{width:80%;max-height:80vh;padding:15px;border-radius:6px;margin:0 auto}}@media (max-width: 480px){.popup-container{width:90%;max-height:90vh;padding:10px;border-radius:4px}}.popup-container .close{float:right;font-size:20px;cursor:pointer}.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;width:max-content;margin-left:8px;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;background:#0052cc;color:#fcfcfd}@media (max-width: 768px){.button--primary-min{padding:8px}}.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-right:-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;text-align:center}@media (max-width: 768px){.search-section button.button--create{height:36px;font-size:14px;border-radius:6px}}.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:1000}.filter-menu{position:absolute;top:120%;right:0;background:#fff;padding:.4rem;border-radius:8px;display:flex;flex-direction:column;font-size:14px;width:130px;z-index:1001}.filter-button{position:relative;height:28px;display:flex;align-items:center;justify-content:center;gap:2px;cursor:pointer;width:35px;z-index:998}.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}@media (max-width: 768px){.custom-dropdown{padding:0}}.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}@media (max-width: 768px){.search-section{flex-wrap:wrap;display:flex;align-items:center;gap:8px;width:100%}.filter-container{order:2}.filters{display:flex;flex-wrap:wrap;gap:8px;width:100%;order:3}}\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"] }] }); }
263
263
  }
264
264
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KvMainTableComponent, decorators: [{
265
265
  type: Component,
@@ -268,7 +268,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
268
268
  FormsModule,
269
269
  KvLoadingComponent,
270
270
  ResourceNotFoundComponent,
271
- ], template: "<lib-kv-loading [message]=\"message\" [isLoading]=\"loading\" *ngIf=\"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()\" [max]=\"today\" />\r\n <input type=\"date\" [(ngModel)]=\"filters.created_at_end\" (change)=\"updateRange()\" [max]=\"today\" />\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\" [max]=\"today\" />\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)]=\"pendingSearch\"\r\n (keyup.enter)=\"onSearched()\"\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\" [class.hidden-mobile]=\"hiddenColumnsOnMobile.includes(column.key)\">{{ 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\" [class.hidden-mobile]=\"hiddenColumnsOnMobile.includes(column.key)\">\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>", 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!important;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}@media (max-width: 768px){.input-group{margin-bottom:13px}.input-group label{font-size:13px}}@media (max-width: 480px){.input-group{margin-bottom:3px}.input-group label{font-size:12px}}.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}@media (max-width: 768px){.pagination{gap:8px;margin:12px}.pagination button{padding:4px 10px;border-radius:3px}}@media (max-width: 480px){.pagination{gap:6px;margin:10px}.pagination button{padding:2px 8px;border-radius:2px}}.table-pagination{border-top:0!important}@media (max-width: 768px){.search-container{margin-bottom:10px;display:flex;justify-content:center;width:100%}table{table-layout:auto!important;border:none!important}table td{padding:5px!important}.hidden-mobile{display:none}}.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}@media (max-width: 768px){.main-text{font-size:25px}}@media (max-width: 480px){.main-text{font-size:20px}}.secondary-text{font-size:16px;color:#475467}@media (max-width: 768px){.secondary-text{font-size:14px}}@media (max-width: 480px){.secondary-text{font-size:12px}}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}@media (max-width: 768px){.sidebar-title{margin-top:-36px;margin-bottom:3px;font-size:20px}}.description-section{margin-top:30px}@media (max-width: 768px){.description-section{margin-top:7px}}.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}@media (max-width: 768px){.list-container{margin-top:7px}}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}@media (max-width: 768px){.list-container .list-section .list{margin-top:6px}}.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}.popup-backdrop{position:fixed;inset:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:10000;transform:translateZ(0)}.popup-container{max-height:80vh;background:#fff;padding:20px;border-radius:8px;box-shadow:0 2px 10px #0000001a;overflow-y:auto;width:50%;position:relative}@media (max-width: 768px){.popup-container{width:80%;max-height:80vh;padding:15px;border-radius:6px;margin:0 auto}}@media (max-width: 480px){.popup-container{width:90%;max-height:90vh;padding:10px;border-radius:4px}}.popup-container .close{float:right;font-size:20px;cursor:pointer}.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;width:max-content;margin-left:8px;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;background:#0052cc;color:#fcfcfd}@media (max-width: 768px){.button--primary-min{padding:8px}}.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}@media (max-width: 768px){.search-section button.button--create{height:36px;font-size:14px;border-radius:6px}}.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:1000}.filter-menu{position:absolute;top:120%;right:0;background:#fff;padding:.4rem;border-radius:8px;display:flex;flex-direction:column;font-size:14px;width:130px;z-index:1001}.filter-button{position:relative;height:28px;display:flex;align-items:center;justify-content:center;gap:2px;cursor:pointer;width:35px;z-index:998}.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}@media (max-width: 768px){.custom-dropdown{padding:0}}.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}@media (max-width: 768px){.search-section{flex-wrap:wrap;display:flex;align-items:center;gap:8px;width:100%}.filter-container{order:2}.filters{display:flex;flex-wrap:wrap;gap:8px;width:100%;order:3}}\n"] }]
271
+ ], template: "<lib-kv-loading [message]=\"message\" [isLoading]=\"loading\" *ngIf=\"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()\" [max]=\"today\" />\r\n <input type=\"date\" [(ngModel)]=\"filters.created_at_end\" (change)=\"updateRange()\" [max]=\"today\" />\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\" [max]=\"today\" />\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)]=\"pendingSearch\"\r\n (keyup.enter)=\"onSearched()\"\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\" [class.hidden-mobile]=\"hiddenColumnsOnMobile.includes(column.key)\">{{ 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\" [class.hidden-mobile]=\"hiddenColumnsOnMobile.includes(column.key)\">\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>", 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!important;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}@media (max-width: 768px){.input-group{margin-bottom:13px}.input-group label{font-size:13px}}@media (max-width: 480px){.input-group{margin-bottom:3px}.input-group label{font-size:12px}}.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}@media (max-width: 768px){.pagination{gap:8px;margin:12px}.pagination button{padding:4px 10px;border-radius:3px}}@media (max-width: 480px){.pagination{gap:6px;margin:10px}.pagination button{padding:2px 8px;border-radius:2px}}.table-pagination{border-top:0!important}@media (max-width: 768px){.search-container{margin-bottom:10px;display:flex;justify-content:center;width:100%}table{table-layout:auto!important;border:none!important}table td{padding:5px!important}.hidden-mobile{display:none}}.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}@media (max-width: 768px){.main-text{font-size:25px}}@media (max-width: 480px){.main-text{font-size:20px}}.secondary-text{font-size:16px;color:#475467}@media (max-width: 768px){.secondary-text{font-size:14px}}@media (max-width: 480px){.secondary-text{font-size:12px}}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}@media (max-width: 768px){.sidebar-title{margin-top:-36px;margin-bottom:3px;font-size:20px}}.description-section{margin-top:30px}@media (max-width: 768px){.description-section{margin-top:7px}}.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}@media (max-width: 768px){.list-container{margin-top:7px}}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}@media (max-width: 768px){.list-container .list-section .list{margin-top:6px}}.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}.popup-backdrop{position:fixed;inset:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:10000;transform:translateZ(0)}.popup-container{max-height:80vh;background:#fff;padding:20px;border-radius:8px;box-shadow:0 2px 10px #0000001a;overflow-y:auto;width:50%;position:relative}@media (max-width: 768px){.popup-container{width:80%;max-height:80vh;padding:15px;border-radius:6px;margin:0 auto}}@media (max-width: 480px){.popup-container{width:90%;max-height:90vh;padding:10px;border-radius:4px}}.popup-container .close{float:right;font-size:20px;cursor:pointer}.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;width:max-content;margin-left:8px;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;background:#0052cc;color:#fcfcfd}@media (max-width: 768px){.button--primary-min{padding:8px}}.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-right:-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;text-align:center}@media (max-width: 768px){.search-section button.button--create{height:36px;font-size:14px;border-radius:6px}}.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:1000}.filter-menu{position:absolute;top:120%;right:0;background:#fff;padding:.4rem;border-radius:8px;display:flex;flex-direction:column;font-size:14px;width:130px;z-index:1001}.filter-button{position:relative;height:28px;display:flex;align-items:center;justify-content:center;gap:2px;cursor:pointer;width:35px;z-index:998}.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}@media (max-width: 768px){.custom-dropdown{padding:0}}.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}@media (max-width: 768px){.search-section{flex-wrap:wrap;display:flex;align-items:center;gap:8px;width:100%}.filter-container{order:2}.filters{display:flex;flex-wrap:wrap;gap:8px;width:100%;order:3}}\n"] }]
272
272
  }], ctorParameters: () => [{ type: i1.PaginationService }, { type: i0.ElementRef }], propDecorators: { columns: [{
273
273
  type: Input
274
274
  }], data: [{
@@ -312,4 +312,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
312
312
  type: HostListener,
313
313
  args: ['document:click', ['$event']]
314
314
  }] } });
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbWFpbi10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXZpby9zcmMvbGliL2NvbXBvbmVudHMva3YtbWFpbi10YWJsZS9rdi1tYWluLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9saWIvY29tcG9uZW50cy9rdi1tYWluLXRhYmxlL2t2LW1haW4tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBSU4sWUFBWSxFQUVaLFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFLeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7QUF5QnJHLE1BQU0sT0FBTyxvQkFBb0I7SUFtQi9CLElBQWEsVUFBVSxDQUFDLEtBQWE7UUFDbkMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQztJQTRDRCxZQUNVLGlCQUFvQyxFQUNwQyxJQUFnQjtRQURoQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFNBQUksR0FBSixJQUFJLENBQVk7UUFwRWpCLFlBQU8sR0FBcUMsRUFBRSxDQUFDO1FBQy9DLFNB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dWpCQUNaLFdBQVcsK21CQUNYLGtCQUFrQix1S0FDbEIseUJBQXlCOzs0RkFLaEIsb0JBQW9CO2tCQVpoQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGtCQUFrQjt3QkFDbEIseUJBQXlCO3FCQUMxQjsrR0FLUSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQU11QixtQkFBbUI7c0JBQS9DLFlBQVk7dUJBQUMsYUFBYTtnQkFDakIsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQVVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBNEVQLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgT25Jbml0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBLdkxvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi9rdi1sb2FkaW5nL2t2LWxvYWRpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBQYWdpbmF0aW9uU2VydmljZSxcclxuICBQYWdpbmF0aW9uU3RhdGUsXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGFnaW5hdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJlc291cmNlTm90Rm91bmRDb21wb25lbnQgfSBmcm9tICcuLi9rdi1yZXNvdXJjZS1ub3QtZm91bmQva3YtcmVzb3VyY2Utbm90LWZvdW5kLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgVGFibGVJdGVtIHtcclxuICBzdGF0ZT86IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIGNyZWF0ZWRfYXQ/OiBzdHJpbmc7XHJcbiAgZXhwaXJlX2F0Pzogc3RyaW5nO1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgc291cmNlPzogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gIFtrZXk6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWIta3YtbWFpbi10YWJsZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIEt2TG9hZGluZ0NvbXBvbmVudCxcclxuICAgIFJlc291cmNlTm90Rm91bmRDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtbWFpbi10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2t2LW1haW4tdGFibGUuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZNYWluVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBjb2x1bW5zOiB7IGtleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGRhdGE6IFRhYmxlSXRlbVtdID0gW107XHJcbiAgQElucHV0KCkgZXh0cmFEYXRhITogYW55W107XHJcbiAgQElucHV0KCkgc2hvd1BhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbGF6eUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWVzc2FnZVRpdGxlOiBzdHJpbmcgPSAnUmVzb3VyY2Ugbm90IGZvdW5kJztcclxuICBASW5wdXQoKSBtZXNzYWdlRGVzY3JpcHRpb246IHN0cmluZyA9XHJcbiAgICAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQuJztcclxuICBASW5wdXQoKSB0b3RhbFJlY29yZHM6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KCkgbWVzc2FnZTogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaGFzTW9yZUl0ZW1zOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSB0YWJsZUlkOiBzdHJpbmcgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgbGV0RmlsdGVyczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhpZGRlbkNvbHVtbnNPbk1vYmlsZTogc3RyaW5nW10gPSBbXTtcclxuICB0b2RheSE6IHN0cmluZztcclxuICBzZWFyY2hUZXh0OiBhbnk7XHJcbiAgcGVuZGluZ1NlYXJjaDogYW55O1xyXG4gIEBJbnB1dCgpIHNldCB0b3RhbEl0ZW1zKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHsgdG90YWxJdGVtczogdmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAQ29udGVudENoaWxkKCdjZWxsQWN0aW9ucycpIGNlbGxBY3Rpb25zVGVtcGxhdGU6IGFueTtcclxuICBAT3V0cHV0KCkgb25OYW1lQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8e1xyXG4gICAgcGFnZTogbnVtYmVyO1xyXG4gICAgcGFnZVNpemU6IG51bWJlcjtcclxuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcclxuICB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgcGFnZTogbnVtYmVyO1xyXG4gICAgcGFnZVNpemU6IG51bWJlcjtcclxuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcclxuICB9PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25GaWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIHN0YXRlOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICBjcmVhdGVkX2F0X3N0YXJ0OiBzdHJpbmc7XHJcbiAgICBjcmVhdGVkX2F0X2VuZDogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgc291cmNlOiBzdHJpbmc7XHJcbiAgfT4oKTtcclxuXHJcbiAgZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZTtcclxuICBkcm9wZG93bk9wZW5UeXBlID0gZmFsc2U7XHJcbiAgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2U7XHJcbiAgY2FsZW5kYXJPcGVuID0gZmFsc2U7XHJcbiAgY3VycmVudFBhZ2U6IG51bWJlciA9IDE7XHJcbiAgcGFnZVNpemU6IG51bWJlciA9IDU7XHJcbiAgc2hvd0ZpbHRlck1lbnUgPSBmYWxzZTtcclxuICBmaWx0ZXJlZEl0ZW1zOiBUYWJsZUl0ZW1bXSA9IFtdO1xyXG4gIHB1YmxpYyBhY3RpdmVDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xyXG4gIG9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgcHVibGljIHNlYXJjaElucHV0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZmlsdGVyczogYW55ID0ge1xyXG4gICAgc3RhdGU6ICcnLFxyXG4gICAgdHlwZTogJycsXHJcbiAgICBjcmVhdGVkX2F0X3N0YXJ0OiAnJyxcclxuICAgIGNyZWF0ZWRfYXRfZW5kOiAnJyxcclxuICAgIG5hbWU6ICcnLFxyXG4gICAgc291cmNlOiAnJyxcclxuICB9O1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVSZWY6IEVsZW1lbnRSZWZcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2luYXRpb25TdGF0ZSQuc3Vic2NyaWJlKFxyXG4gICAgICAgIChzdGF0ZTogUGFnaW5hdGlvblN0YXRlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gc3RhdGUuY3VycmVudFBhZ2U7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gc3RhdGUucGFnZVNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLnRvZGF5ID0gbm93LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IGN1cnJlbnRTdGF0ZS5jdXJyZW50UGFnZTtcclxuICAgIHRoaXMucGFnZVNpemUgPSBjdXJyZW50U3RhdGUucGFnZVNpemU7XHJcbiAgICB0aGlzLmZpbHRlcnMubmFtZSA9IGN1cnJlbnRTdGF0ZS5zZWFyY2hUZXh0O1xyXG5cclxuICAgIGlmICh0aGlzLnRvdGFsUmVjb3JkcyA+IDApIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS51cGRhdGVQYWdpbmF0aW9uU3RhdGUoe1xyXG4gICAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxSZWNvcmRzLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkRGF0YSgpO1xyXG4gICAgaWYgKHRoaXMubGF6eUxvYWRpbmcpIHtcclxuICAgICAgdGhpcy5sb2FkTGF6eURhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbHVtbnNbMF0ubGFiZWwgPT09ICdPZmZlciBuYW1lJykge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IFsnQ3JlYXRlZCcsICdPZmZlcmVkJywgJ0Nsb3NlZCddO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uc1swXS5sYWJlbCA9PT0gJ0N1c3RvbWVyIEVtYWlsJykge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IFsnQ3JlYXRlZCcsICdSZWplY3RlZCcsICdQZW5kaW5nJywgJ0Nsb3NlZCcsICdBcHByb3ZlZCddO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IFsnQXBwcm92ZWQnLCAnUmVqZWN0ZWQnLCAnUGVuZGluZyddO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlQ2xpY2tPdXRzaWRlKGV2ZW50OiBFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmVSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5kcm9wZG93bk9wZW5UeXBlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2FsZW5kYXJPcGVuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlc1sndG90YWxSZWNvcmRzJ10pIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS51cGRhdGVQYWdpbmF0aW9uU3RhdGUoe1xyXG4gICAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxSZWNvcmRzLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gJiYgIXRoaXMubGF6eUxvYWRpbmcpIHtcclxuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1blN1YnNjcmliZVRvUGFnaW5hdGlvblNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcCgoaXRlbTogVGFibGVJdGVtKSA9PiAoe1xyXG4gICAgICAuLi5pdGVtLFxyXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5jaGFuZ2VUZXh0KGl0ZW0uZGVzY3JpcHRpb24gPz8gJycsIDUwKSxcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hhbmdlVGV4dCh0ZXh0OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICghdGV4dCkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIHRleHQubGVuZ3RoID4gbWF4TGVuZ3RoXHJcbiAgICAgID8gdGV4dC5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKS50cmltRW5kKCkgKyAnLi4uJ1xyXG4gICAgICA6IHRleHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZpbHRlcmVkRGF0YSgpIHtcclxuICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgaWYgKCF0aGlzLmxhenlMb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IHRoaXMuZ2V0RmlsdGVyZWREYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbHRlcmVkRGF0YSgpIHtcclxuICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG5cclxuICAgIGxldCBmaWx0ZXJlZDogVGFibGVJdGVtW10gPSB0aGlzLmRhdGE7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJzLm5hbWUgJiYgdGhpcy5maWx0ZXJzLm5hbWUudHJpbSgpICE9PSAnJykge1xyXG4gICAgICBmaWx0ZXJlZCA9IHRoaXMuZGF0YS5maWx0ZXIoKGl0ZW06IFRhYmxlSXRlbSkgPT5cclxuICAgICAgICB0aGlzLmNvbHVtbnMuc29tZSgoY29sKSA9PlxyXG4gICAgICAgICAgU3RyaW5nKGl0ZW1bY29sLmtleV0pXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLmZpbHRlcnMubmFtZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmlsdGVyZWQuc2xpY2UoXHJcbiAgICAgICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldCBmaWx0ZXJlZERhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXp5TG9hZGluZyA/IHRoaXMuZGF0YSA6IHRoaXMuZmlsdGVyZWRJdGVtcztcclxuICB9XHJcblxyXG4gIHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY2FsY3VsYXRlVG90YWxQYWdlcygpIHx8XHJcbiAgICAgIE1hdGguY2VpbChcclxuICAgICAgICB0aGlzLmRhdGEubGVuZ3RoIC8gdGhpcy5wYWdlU2l6ZVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVG9GaXJzdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHtcclxuICAgICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICAgIHNlYXJjaFRleHQ6IHRoaXMuZmlsdGVycy5uYW1lLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaGVkKCkge1xyXG4gICAgdGhpcy5maWx0ZXJzLm5hbWUgPSB0aGlzLnBlbmRpbmdTZWFyY2g7XHJcbiAgICB0aGlzLnVwZGF0ZVRvRmlyc3RQYWdlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkRGF0YSgpO1xyXG5cclxuICAgIGNvbnN0IGhhc0ZpbHRlcnMgPSBPYmplY3QudmFsdWVzKHRoaXMuZmlsdGVycykuc29tZShcclxuICAgICAgKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJ1xyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoaGFzRmlsdGVycykge1xyXG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVycy5uYW1lID0gJyc7XHJcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XHJcbiAgICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFnZShkaXJlY3Rpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMudG90YWxQYWdlcygpO1xyXG5cclxuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKSB7XHJcbiAgICAgIGNvbnN0IG5ld1BhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlICsgZGlyZWN0aW9uO1xyXG4gICAgICBpZiAobmV3UGFnZSA+PSAxICYmIG5ld1BhZ2UgPD0gdG90YWxQYWdlcykge1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHsgY3VycmVudFBhZ2U6IG5ld1BhZ2UgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkTGF6eURhdGEoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYWdlICE9PSAxICYmIG5ld1BhZ2UgPCAxKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS51cGRhdGVQYWdpbmF0aW9uU3RhdGUoeyBjdXJyZW50UGFnZTogMSB9KTtcclxuICAgICAgICB0aGlzLmxvYWRMYXp5RGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBuZXdQYWdlID0gdGhpcy5jdXJyZW50UGFnZSArIGRpcmVjdGlvbjtcclxuICAgICAgaWYgKG5ld1BhZ2UgPiAwICYmIG5ld1BhZ2UgPD0gdG90YWxQYWdlcykge1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHsgY3VycmVudFBhZ2U6IG5ld1BhZ2UgfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5oYXNNb3JlSXRlbXMpIHtcclxuICAgICAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHtcclxuICAgICAgICAgIHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuZmlsdGVycy5uYW1lLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkTGF6eURhdGEoKSB7XHJcbiAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHtcclxuICAgICAgcGFnZTogdGhpcy5jdXJyZW50UGFnZSxcclxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgIHNlYXJjaFRleHQ6IHRoaXMuZmlsdGVycy5uYW1lLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UG9zTmFtZShwb3NJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZXh0cmFEYXRhPy5maW5kKChwb3MpID0+IHBvcy5wb2ludF9vZl9zYWxlX2lkID09PSBwb3NJZCk/Lm5hbWUgfHwgJydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW1pdERhdGEoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLm9uTmFtZUNsaWNrZWQuZW1pdChkYXRhKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNvbHVtbihjb2x1bW5LZXk6IHN0cmluZywgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgY2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7XHJcblxyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmFjdGl2ZUNvbHVtbnMuaW5jbHVkZXMoY29sdW1uS2V5KSkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ29sdW1ucy5wdXNoKGNvbHVtbktleSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlQ29sdW1ucyA9IHRoaXMuYWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMpID0+IGMgIT09IGNvbHVtbktleSk7XHJcbiAgICAgIGlmIChjb2x1bW5LZXkgPT09ICdjcmVhdGVkX2F0Jykge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlcnNbJ2NyZWF0ZWRfYXRfc3RhcnQnXTtcclxuICAgICAgICBkZWxldGUgdGhpcy5maWx0ZXJzWydjcmVhdGVkX2F0X2VuZCddO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyc1tjb2x1bW5LZXldKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZmlsdGVyc1tjb2x1bW5LZXldO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGhhc0ZpbHRlcnMgPSBPYmplY3QudmFsdWVzKHRoaXMuZmlsdGVycykuc29tZShcclxuICAgICAgICAodmFsdWUpID0+IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoIWhhc0ZpbHRlcnMpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRvRmlyc3RQYWdlKCk7XHJcbiAgICAgICAgdGhpcy5vbkZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVycyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUNhbGVuZGFyKCkge1xyXG4gICAgdGhpcy5jYWxlbmRhck9wZW4gPSAhdGhpcy5jYWxlbmRhck9wZW47XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydCAmJiB0aGlzLmZpbHRlcnMuY3JlYXRlZF9hdF9lbmQpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0ID4gdGhpcy5maWx0ZXJzLmNyZWF0ZWRfYXRfZW5kKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcCA9IHRoaXMuZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0O1xyXG4gICAgICAgIHRoaXMuZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0ID0gdGhpcy5maWx0ZXJzLmNyZWF0ZWRfYXRfZW5kO1xyXG4gICAgICAgIHRoaXMuZmlsdGVycy5jcmVhdGVkX2F0X2VuZCA9IHRlbXA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhckZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcnMgPSB7XHJcbiAgICAgIHN0YXRlOiAnJyxcclxuICAgICAgdHlwZTogJycsXHJcbiAgICAgIGNyZWF0ZWRfYXRfc3RhcnQ6ICcnLFxyXG4gICAgICBjcmVhdGVkX2F0X2VuZDogJycsXHJcbiAgICAgIG5hbWU6ICcnLFxyXG4gICAgICBzb3VyY2U6ICcnLFxyXG4gICAgfTtcclxuICAgIHRoaXMucGVuZGluZ1NlYXJjaCA9ICcnO1xyXG4gICAgdGhpcy51cGRhdGVUb0ZpcnN0UGFnZSgpO1xyXG4gICAgdGhpcy51cGRhdGVGaWx0ZXJlZERhdGEoKTtcclxuICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcnMpO1xyXG4gIH1cclxufSIsIjxsaWIta3YtbG9hZGluZyBbbWVzc2FnZV09XCJtZXNzYWdlXCIgW2lzTG9hZGluZ109XCJsb2FkaW5nXCIgKm5nSWY9XCJsb2FkaW5nXCI+IDwvbGliLWt2LWxvYWRpbmc+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXNlY3Rpb25cIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVDb2x1bW5zLmluY2x1ZGVzKGNvbC5rZXkpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wua2V5ID09PSAnY3JlYXRlZF9hdCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIiBbY2xhc3Mub3Blbl09XCJjYWxlbmRhck9wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKGNsaWNrKT1cImNhbGVuZGFyT3BlbiA9ICFjYWxlbmRhck9wZW47IGRyb3Bkb3duT3BlblN0YXRlID0gZmFsc2U7IGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZTsgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydCAmJiBmaWx0ZXJzLmNyZWF0ZWRfYXRfZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQgfCBkYXRlOidkZC9NTS95eXl5JyB9fSAtIHt7IGZpbHRlcnMuY3JlYXRlZF9hdF9lbmQgfCBkYXRlOidkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydCAmJiAhZmlsdGVycy5jcmVhdGVkX2F0X2VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0IHwgZGF0ZTonZGQvTU0veXl5eScgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0ICYmIGZpbHRlcnMuY3JlYXRlZF9hdF9lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlcnMuY3JlYXRlZF9hdF9lbmQgfCBkYXRlOidkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQgJiYgIWZpbHRlcnMuY3JlYXRlZF9hdF9lbmRcIiBjbGFzcz1cInBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVkIGF0XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLXBvcHVwXCIgKm5nSWY9XCJjYWxlbmRhck9wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBbKG5nTW9kZWwpXT1cImZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydFwiIChjaGFuZ2UpPVwidXBkYXRlUmFuZ2UoKVwiIFttYXhdPVwidG9kYXlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVycy5jcmVhdGVkX2F0X2VuZFwiIChjaGFuZ2UpPVwidXBkYXRlUmFuZ2UoKVwiIFttYXhdPVwidG9kYXlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wua2V5ID09PSAnZXhwaXJlX2F0J1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbD5GZWNoYTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVycy5leHBpcmVfYXRcIiBbbWF4XT1cInRvZGF5XCIgLz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmtleSA9PT0gJ3N0YXRlJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIiBbY2xhc3Mub3Blbl09XCJkcm9wZG93bk9wZW5TdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKGNsaWNrKT1cImRyb3Bkb3duT3BlblN0YXRlID0gIWRyb3Bkb3duT3BlblN0YXRlOyBkcm9wZG93bk9wZW5UeXBlID0gZmFsc2U7IGRyb3Bkb3duT3BlblNvdXJjZSA9IGZhbHNlOyBjYWxlbmRhck9wZW4gPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuc3RhdGVcIiBjbGFzcz1cInN0YXRlXCIgW25nQ2xhc3NdPVwiZmlsdGVycy5zdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlcnMuc3RhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJzLnN0YXRlXCIgY2xhc3M9XCJwbGFjZWhvbGRlclwiPlN0YXRlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJvcHRpb25zXCIgKm5nSWY9XCJkcm9wZG93bk9wZW5TdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IG9wdCBvZiBvcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJzLnN0YXRlID0gb3B0OyBkcm9wZG93bk9wZW5TdGF0ZSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwib3B0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgb3B0IH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wua2V5ID09PSAnc291cmNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1kcm9wZG93blwiIFtjbGFzcy5vcGVuXT1cImRyb3Bkb3duT3BlblNvdXJjZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAoY2xpY2spPVwiZHJvcGRvd25PcGVuU291cmNlID0gIWRyb3Bkb3duT3BlblNvdXJjZTsgZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZTsgZHJvcGRvd25PcGVuVHlwZSA9IGZhbHNlOyBjYWxlbmRhck9wZW4gPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVycy5zb3VyY2VcIiBjbGFzcz1cInNvdXJjZVwiID5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlcnMuc291cmNlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZpbHRlcnMuc291cmNlXCIgY2xhc3M9XCJwbGFjZWhvbGRlclwiPkltcG9ydGVkIGZyb208L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm9wdGlvbnNcIiAqbmdJZj1cImRyb3Bkb3duT3BlblNvdXJjZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiZmlsdGVycy5zb3VyY2UgPSdsb2NhbCc7IGRyb3Bkb3duT3BlblNvdXJjZSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzb3VyY2VcIiBbbmdDbGFzc109XCInbG9jYWwnXCI+bG9jYWxcclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiZmlsdGVycy5zb3VyY2UgPSAnZWNvbW1lcmNlJzsgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNvdXJjZVwiIFtuZ0NsYXNzXT1cIidlY29tbWVyY2UnXCI+ZWNvbW1lcmNlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wua2V5ID09PSAndHlwZSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWRyb3Bkb3duXCIgW2NsYXNzLm9wZW5dPVwiZHJvcGRvd25PcGVuVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKGNsaWNrKT1cImRyb3Bkb3duT3BlblR5cGUgPSAhZHJvcGRvd25PcGVuVHlwZTsgZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZTsgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2U7IGNhbGVuZGFyT3BlbiA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVycy50eXBlXCIgY2xhc3M9XCJ0eXBlXCIgIFtuZ0NsYXNzXT1cImZpbHRlcnMudHlwZS5yZXBsYWNlKCcgJywgJy0nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlcnMudHlwZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZpbHRlcnMudHlwZVwiIGNsYXNzPVwicGxhY2Vob2xkZXJcIj5PZmZlciB0eXBlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJvcHRpb25zXCIgKm5nSWY9XCJkcm9wZG93bk9wZW5UeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiZmlsdGVycy50eXBlID0nUmVndWxhciBhdWN0aW9uJzsgZHJvcGRvd25PcGVuVHlwZSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHlwZVwiIFtuZ0NsYXNzXT1cIidSZWd1bGFyLWF1Y3Rpb24nXCI+UmVndWxhciBhdWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiZmlsdGVycy50eXBlID0gJ1F1aWNrIG9mZmVyJzsgZHJvcGRvd25PcGVuVHlwZSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHlwZVwiIFtuZ0NsYXNzXT1cIidRdWljay1vZmZlcidcIj5RdWljayBvZmZlciBcclxuICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICBcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJsZXRGaWx0ZXJzXCI+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLW92ZXJsYXlcIlxyXG4gICAgICAgICAgKm5nSWY9XCJzaG93RmlsdGVyTWVudVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd0ZpbHRlck1lbnUgPSBmYWxzZVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dGaWx0ZXJNZW51ID0gIXNob3dGaWx0ZXJNZW51OyBkcm9wZG93bk9wZW5TdGF0ZSA9IGZhbHNlOyBkcm9wZG93bk9wZW5Tb3VyY2UgPSBmYWxzZTsgY2FsZW5kYXJPcGVuID0gZmFsc2U7IGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZVwiIFxyXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItYnV0dG9uXCJcclxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2hvd0ZpbHRlck1lbnVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGx1c1wiPis8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmlsdGVyLWljb25cIj5cclxuICAgICAgICAgICAgZmlsdGVyX2FsdFxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLW1lbnVcIiAqbmdJZj1cInNob3dGaWx0ZXJNZW51XCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmtleSAhPT0gJ25hbWUnICYmIGNvbC5rZXkgIT09ICdpbWFnZXMnICYmIGNvbC5rZXkgIT09ICdwb3NfaWQnICYmIGNvbC5rZXkgIT09ICdwb2ludF9vZl9zYWxlX2lkJyAmJiBjb2wua2V5ICE9PSAnZGVzY3JpcHRpb24nIFwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFjdGl2ZUNvbHVtbnMuaW5jbHVkZXMoY29sLmtleSlcIlxyXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUNvbHVtbihjb2wua2V5LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXRleHRcIj57eyBjb2wubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgY2xhc3M9XCJpbnB1dFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJCdXNjYXIuLi5cIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwicGVuZGluZ1NlYXJjaFwiXHJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uU2VhcmNoZWQoKVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tLWNyZWF0ZVwiIChjbGljayk9XCJvblNlYXJjaGVkKClcIj5CdXNjYXI8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKSAmJiAhbG9hZGluZ1wiPlxyXG4gICAgPGxpYi1rdi1yZXNvdXJjZS1ub3QtZm91bmQgY2xhc3M9XCJyZXNvdXJjZS1ub3QtZm91bmRcIlxyXG4gICAgICBbbWVzc2FnZVRpdGxlXT1cIm1lc3NhZ2VUaXRsZVwiXHJcbiAgICAgIFttZXNzYWdlRGVzY3JpcHRpb25dPVwibWVzc2FnZURlc2NyaXB0aW9uXCI+PC9saWIta3YtcmVzb3VyY2Utbm90LWZvdW5kPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB8fCBsb2FkaW5nXCI+XHJcbiAgICA8dGFibGU+XHJcbiAgICAgIDx0aGVhZD5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCIgW2NsYXNzLmhpZGRlbi1tb2JpbGVdPVwiaGlkZGVuQ29sdW1uc09uTW9iaWxlLmluY2x1ZGVzKGNvbHVtbi5rZXkpXCI+e3sgY29sdW1uLmxhYmVsIH19PC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L3RoZWFkPlxyXG4gICAgICA8dGJvZHk+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkRGF0YVwiPlxyXG4gICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIFtjbGFzcy5oaWRkZW4tbW9iaWxlXT1cImhpZGRlbkNvbHVtbnNPbk1vYmlsZS5pbmNsdWRlcyhjb2x1bW4ua2V5KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdGVcIiBbbmdDbGFzc109XCJpdGVtW2NvbHVtbi5rZXldXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5sYWJlbCA9PT0gJ1NlcnZpY2VzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcnZpY2UtaW5mb1wiIChjbGljayk9XCJlbWl0RGF0YShpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbVsndXJsJ10gfHwgJ2h0dHBzOi8vaS5pbWd1ci5jb20vSW5SYVZyTC5qcGcnXCIgYWx0PVwiSW1hZ2VuXCIgY2xhc3M9XCJzZXJ2aWNlLWltYWdlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJhLWxpbmtcIj57eyBpdGVtLm5hbWUgfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnbmFtZScgJiYgY29sdW1uLmxhYmVsICE9PSAnU2VydmljZXMnXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImEtbGlua1wiIChjbGljayk9XCJlbWl0RGF0YShpdGVtKVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIGl0ZW1bY29sdW1uLmtleV1cclxuICAgICAgICAgICAgICAgIH19PC9hPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnaW1hZ2VzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZSBvZiBpdGVtW2NvbHVtbi5rZXldPy5zbGljZSgwLCAzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZVwiIGFsdD1cIkltYWdlblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbVtjb2x1bW4ua2V5XT8ubGVuZ3RoID4gM1wiIGNsYXNzPVwiZXh0cmEtaW1hZ2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgK3t7IGl0ZW1bY29sdW1uLmtleV0ubGVuZ3RoIC0gMyB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnY3JlYXRlZF9hdCdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sdW1uLmtleV0gfCBkYXRlIDogXCJkZC9NTS95eXl5XCIgfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmtleSA9PT0gJ2V4cGlyZV9hdCdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sdW1uLmtleV0gfCBkYXRlIDogXCJkZC9NTS95eXl5XCIgfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmtleSA9PT0gJ2FjdGlvbnMnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbEFjdGlvbnNUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdleHBpcmVfYXQnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdjcmVhdGVkX2F0JyAmJlxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW4ua2V5ICE9PSAncG9pbnRfb2Zfc2FsZV9pZCcgJiZcclxuICAgICAgICAgICAgICAgICAgY29sdW1uLmtleSAhPT0gJ25hbWUnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdwb3NfaWQnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdpbWFnZXMnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdhY3Rpb25zJ1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbHVtbi5rZXldIH19XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAncG9pbnRfb2Zfc2FsZV9pZCcgfHwgY29sdW1uLmtleSA9PT0gJ3Bvc19pZCdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IGdldFBvc05hbWUoaXRlbVtjb2x1bW4ua2V5XSkgfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UGFnaW5hdG9yXCI+XHJcbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2luYXRpb25cIj5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjaGFuZ2VQYWdlKC0xKVwiIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiPlxyXG4gICAgICAgICAgICAgICAgICBQcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYWdlKDEpXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSB0b3RhbFBhZ2VzKCkgJiYgIWhhc01vcmVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIE5leHRcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJyZW50LXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlBhZ2Uge3sgY3VycmVudFBhZ2UgfX0gb2Yge3sgdG90YWxQYWdlcygpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbnRhaW5lcj4iXX0=
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbWFpbi10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXZpby9zcmMvbGliL2NvbXBvbmVudHMva3YtbWFpbi10YWJsZS9rdi1tYWluLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9saWIvY29tcG9uZW50cy9rdi1tYWluLXRhYmxlL2t2LW1haW4tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBSU4sWUFBWSxFQUVaLFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFLeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7QUF5QnJHLE1BQU0sT0FBTyxvQkFBb0I7SUFtQi9CLElBQWEsVUFBVSxDQUFDLEtBQWE7UUFDbkMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQztJQTRDRCxZQUNVLGlCQUFvQyxFQUNwQyxJQUFnQjtRQURoQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFNBQUksR0FBSixJQUFJLENBQVk7UUFwRWpCLFlBQU8sR0FBcUMsRUFBRSxDQUFDO1FBQy9DLFNB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dWpCQUNaLFdBQVcsK21CQUNYLGtCQUFrQix1S0FDbEIseUJBQXlCOzs0RkFLaEIsb0JBQW9CO2tCQVpoQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGtCQUFrQjt3QkFDbEIseUJBQXlCO3FCQUMxQjsrR0FLUSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQU11QixtQkFBbUI7c0JBQS9DLFlBQVk7dUJBQUMsYUFBYTtnQkFDakIsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQVVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBNEVQLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgT25Jbml0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBLdkxvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi9rdi1sb2FkaW5nL2t2LWxvYWRpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBQYWdpbmF0aW9uU2VydmljZSxcclxuICBQYWdpbmF0aW9uU3RhdGUsXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGFnaW5hdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJlc291cmNlTm90Rm91bmRDb21wb25lbnQgfSBmcm9tICcuLi9rdi1yZXNvdXJjZS1ub3QtZm91bmQva3YtcmVzb3VyY2Utbm90LWZvdW5kLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgVGFibGVJdGVtIHtcclxuICBzdGF0ZT86IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIGNyZWF0ZWRfYXQ/OiBzdHJpbmc7XHJcbiAgZXhwaXJlX2F0Pzogc3RyaW5nO1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgc291cmNlPzogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gIFtrZXk6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWIta3YtbWFpbi10YWJsZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIEt2TG9hZGluZ0NvbXBvbmVudCxcclxuICAgIFJlc291cmNlTm90Rm91bmRDb21wb25lbnQsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtbWFpbi10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2t2LW1haW4tdGFibGUuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZNYWluVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBjb2x1bW5zOiB7IGtleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGRhdGE6IFRhYmxlSXRlbVtdID0gW107XHJcbiAgQElucHV0KCkgZXh0cmFEYXRhITogYW55W107XHJcbiAgQElucHV0KCkgc2hvd1BhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbGF6eUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWVzc2FnZVRpdGxlOiBzdHJpbmcgPSAnUmVzb3VyY2Ugbm90IGZvdW5kJztcclxuICBASW5wdXQoKSBtZXNzYWdlRGVzY3JpcHRpb246IHN0cmluZyA9XHJcbiAgICAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQuJztcclxuICBASW5wdXQoKSB0b3RhbFJlY29yZHM6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KCkgbWVzc2FnZTogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaGFzTW9yZUl0ZW1zOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSB0YWJsZUlkOiBzdHJpbmcgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgbGV0RmlsdGVyczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhpZGRlbkNvbHVtbnNPbk1vYmlsZTogc3RyaW5nW10gPSBbXTtcclxuICB0b2RheSE6IHN0cmluZztcclxuICBzZWFyY2hUZXh0OiBhbnk7XHJcbiAgcGVuZGluZ1NlYXJjaDogYW55O1xyXG4gIEBJbnB1dCgpIHNldCB0b3RhbEl0ZW1zKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHsgdG90YWxJdGVtczogdmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAQ29udGVudENoaWxkKCdjZWxsQWN0aW9ucycpIGNlbGxBY3Rpb25zVGVtcGxhdGU6IGFueTtcclxuICBAT3V0cHV0KCkgb25OYW1lQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8e1xyXG4gICAgcGFnZTogbnVtYmVyO1xyXG4gICAgcGFnZVNpemU6IG51bWJlcjtcclxuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcclxuICB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgcGFnZTogbnVtYmVyO1xyXG4gICAgcGFnZVNpemU6IG51bWJlcjtcclxuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcclxuICB9PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25GaWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIHN0YXRlOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICBjcmVhdGVkX2F0X3N0YXJ0OiBzdHJpbmc7XHJcbiAgICBjcmVhdGVkX2F0X2VuZDogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgc291cmNlOiBzdHJpbmc7XHJcbiAgfT4oKTtcclxuXHJcbiAgZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZTtcclxuICBkcm9wZG93bk9wZW5UeXBlID0gZmFsc2U7XHJcbiAgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2U7XHJcbiAgY2FsZW5kYXJPcGVuID0gZmFsc2U7XHJcbiAgY3VycmVudFBhZ2U6IG51bWJlciA9IDE7XHJcbiAgcGFnZVNpemU6IG51bWJlciA9IDU7XHJcbiAgc2hvd0ZpbHRlck1lbnUgPSBmYWxzZTtcclxuICBmaWx0ZXJlZEl0ZW1zOiBUYWJsZUl0ZW1bXSA9IFtdO1xyXG4gIHB1YmxpYyBhY3RpdmVDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xyXG4gIG9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgcHVibGljIHNlYXJjaElucHV0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZmlsdGVyczogYW55ID0ge1xyXG4gICAgc3RhdGU6ICcnLFxyXG4gICAgdHlwZTogJycsXHJcbiAgICBjcmVhdGVkX2F0X3N0YXJ0OiAnJyxcclxuICAgIGNyZWF0ZWRfYXRfZW5kOiAnJyxcclxuICAgIG5hbWU6ICcnLFxyXG4gICAgc291cmNlOiAnJyxcclxuICB9O1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVSZWY6IEVsZW1lbnRSZWZcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2luYXRpb25TdGF0ZSQuc3Vic2NyaWJlKFxyXG4gICAgICAgIChzdGF0ZTogUGFnaW5hdGlvblN0YXRlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gc3RhdGUuY3VycmVudFBhZ2U7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gc3RhdGUucGFnZVNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLnRvZGF5ID0gbm93LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRTdGF0ZSgpO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IGN1cnJlbnRTdGF0ZS5jdXJyZW50UGFnZTtcclxuICAgIHRoaXMucGFnZVNpemUgPSBjdXJyZW50U3RhdGUucGFnZVNpemU7XHJcbiAgICB0aGlzLmZpbHRlcnMubmFtZSA9IGN1cnJlbnRTdGF0ZS5zZWFyY2hUZXh0O1xyXG5cclxuICAgIGlmICh0aGlzLnRvdGFsUmVjb3JkcyA+IDApIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS51cGRhdGVQYWdpbmF0aW9uU3RhdGUoe1xyXG4gICAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxSZWNvcmRzLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkRGF0YSgpO1xyXG4gICAgaWYgKHRoaXMubGF6eUxvYWRpbmcpIHtcclxuICAgICAgdGhpcy5sb2FkTGF6eURhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbHVtbnNbMF0ubGFiZWwgPT09ICdPZmZlciBuYW1lJykge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IFsnQ3JlYXRlZCcsICdPZmZlcmVkJywgJ0Nsb3NlZCddO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uc1swXS5sYWJlbCA9PT0gJ0N1c3RvbWVyIEVtYWlsJykge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IFsnQ3JlYXRlZCcsICdSZWplY3RlZCcsICdQZW5kaW5nJywgJ0Nsb3NlZCcsICdBcHByb3ZlZCddO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IFsnQXBwcm92ZWQnLCAnUmVqZWN0ZWQnLCAnUGVuZGluZyddO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlQ2xpY2tPdXRzaWRlKGV2ZW50OiBFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmVSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5kcm9wZG93bk9wZW5UeXBlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2FsZW5kYXJPcGVuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlc1sndG90YWxSZWNvcmRzJ10pIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS51cGRhdGVQYWdpbmF0aW9uU3RhdGUoe1xyXG4gICAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxSZWNvcmRzLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gJiYgIXRoaXMubGF6eUxvYWRpbmcpIHtcclxuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1blN1YnNjcmliZVRvUGFnaW5hdGlvblNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcCgoaXRlbTogVGFibGVJdGVtKSA9PiAoe1xyXG4gICAgICAuLi5pdGVtLFxyXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5jaGFuZ2VUZXh0KGl0ZW0uZGVzY3JpcHRpb24gPz8gJycsIDUwKSxcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hhbmdlVGV4dCh0ZXh0OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICghdGV4dCkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIHRleHQubGVuZ3RoID4gbWF4TGVuZ3RoXHJcbiAgICAgID8gdGV4dC5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKS50cmltRW5kKCkgKyAnLi4uJ1xyXG4gICAgICA6IHRleHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZpbHRlcmVkRGF0YSgpIHtcclxuICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG4gICAgaWYgKCF0aGlzLmxhenlMb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IHRoaXMuZ2V0RmlsdGVyZWREYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbHRlcmVkRGF0YSgpIHtcclxuICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG5cclxuICAgIGxldCBmaWx0ZXJlZDogVGFibGVJdGVtW10gPSB0aGlzLmRhdGE7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJzLm5hbWUgJiYgdGhpcy5maWx0ZXJzLm5hbWUudHJpbSgpICE9PSAnJykge1xyXG4gICAgICBmaWx0ZXJlZCA9IHRoaXMuZGF0YS5maWx0ZXIoKGl0ZW06IFRhYmxlSXRlbSkgPT5cclxuICAgICAgICB0aGlzLmNvbHVtbnMuc29tZSgoY29sKSA9PlxyXG4gICAgICAgICAgU3RyaW5nKGl0ZW1bY29sLmtleV0pXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLmZpbHRlcnMubmFtZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmlsdGVyZWQuc2xpY2UoXHJcbiAgICAgICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldCBmaWx0ZXJlZERhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXp5TG9hZGluZyA/IHRoaXMuZGF0YSA6IHRoaXMuZmlsdGVyZWRJdGVtcztcclxuICB9XHJcblxyXG4gIHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY2FsY3VsYXRlVG90YWxQYWdlcygpIHx8XHJcbiAgICAgIE1hdGguY2VpbChcclxuICAgICAgICB0aGlzLmRhdGEubGVuZ3RoIC8gdGhpcy5wYWdlU2l6ZVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVG9GaXJzdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHtcclxuICAgICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICAgIHNlYXJjaFRleHQ6IHRoaXMuZmlsdGVycy5uYW1lLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaGVkKCkge1xyXG4gICAgdGhpcy5maWx0ZXJzLm5hbWUgPSB0aGlzLnBlbmRpbmdTZWFyY2g7XHJcbiAgICB0aGlzLnVwZGF0ZVRvRmlyc3RQYWdlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkRGF0YSgpO1xyXG5cclxuICAgIGNvbnN0IGhhc0ZpbHRlcnMgPSBPYmplY3QudmFsdWVzKHRoaXMuZmlsdGVycykuc29tZShcclxuICAgICAgKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJ1xyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoaGFzRmlsdGVycykge1xyXG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVycy5uYW1lID0gJyc7XHJcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XHJcbiAgICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFnZShkaXJlY3Rpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMudG90YWxQYWdlcygpO1xyXG5cclxuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKSB7XHJcbiAgICAgIGNvbnN0IG5ld1BhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlICsgZGlyZWN0aW9uO1xyXG4gICAgICBpZiAobmV3UGFnZSA+PSAxICYmIG5ld1BhZ2UgPD0gdG90YWxQYWdlcykge1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHsgY3VycmVudFBhZ2U6IG5ld1BhZ2UgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkTGF6eURhdGEoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYWdlICE9PSAxICYmIG5ld1BhZ2UgPCAxKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS51cGRhdGVQYWdpbmF0aW9uU3RhdGUoeyBjdXJyZW50UGFnZTogMSB9KTtcclxuICAgICAgICB0aGlzLmxvYWRMYXp5RGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBuZXdQYWdlID0gdGhpcy5jdXJyZW50UGFnZSArIGRpcmVjdGlvbjtcclxuICAgICAgaWYgKG5ld1BhZ2UgPiAwICYmIG5ld1BhZ2UgPD0gdG90YWxQYWdlcykge1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlUGFnaW5hdGlvblN0YXRlKHsgY3VycmVudFBhZ2U6IG5ld1BhZ2UgfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5oYXNNb3JlSXRlbXMpIHtcclxuICAgICAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHtcclxuICAgICAgICAgIHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuZmlsdGVycy5uYW1lLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkTGF6eURhdGEoKSB7XHJcbiAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHtcclxuICAgICAgcGFnZTogdGhpcy5jdXJyZW50UGFnZSxcclxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgIHNlYXJjaFRleHQ6IHRoaXMuZmlsdGVycy5uYW1lLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UG9zTmFtZShwb3NJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZXh0cmFEYXRhPy5maW5kKChwb3MpID0+IHBvcy5wb2ludF9vZl9zYWxlX2lkID09PSBwb3NJZCk/Lm5hbWUgfHwgJydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW1pdERhdGEoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLm9uTmFtZUNsaWNrZWQuZW1pdChkYXRhKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNvbHVtbihjb2x1bW5LZXk6IHN0cmluZywgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgY2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7XHJcblxyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmFjdGl2ZUNvbHVtbnMuaW5jbHVkZXMoY29sdW1uS2V5KSkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ29sdW1ucy5wdXNoKGNvbHVtbktleSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlQ29sdW1ucyA9IHRoaXMuYWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMpID0+IGMgIT09IGNvbHVtbktleSk7XHJcbiAgICAgIGlmIChjb2x1bW5LZXkgPT09ICdjcmVhdGVkX2F0Jykge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlcnNbJ2NyZWF0ZWRfYXRfc3RhcnQnXTtcclxuICAgICAgICBkZWxldGUgdGhpcy5maWx0ZXJzWydjcmVhdGVkX2F0X2VuZCddO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyc1tjb2x1bW5LZXldKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZmlsdGVyc1tjb2x1bW5LZXldO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGhhc0ZpbHRlcnMgPSBPYmplY3QudmFsdWVzKHRoaXMuZmlsdGVycykuc29tZShcclxuICAgICAgICAodmFsdWUpID0+IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoIWhhc0ZpbHRlcnMpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRvRmlyc3RQYWdlKCk7XHJcbiAgICAgICAgdGhpcy5vbkZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVycyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUNhbGVuZGFyKCkge1xyXG4gICAgdGhpcy5jYWxlbmRhck9wZW4gPSAhdGhpcy5jYWxlbmRhck9wZW47XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydCAmJiB0aGlzLmZpbHRlcnMuY3JlYXRlZF9hdF9lbmQpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0ID4gdGhpcy5maWx0ZXJzLmNyZWF0ZWRfYXRfZW5kKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcCA9IHRoaXMuZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0O1xyXG4gICAgICAgIHRoaXMuZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0ID0gdGhpcy5maWx0ZXJzLmNyZWF0ZWRfYXRfZW5kO1xyXG4gICAgICAgIHRoaXMuZmlsdGVycy5jcmVhdGVkX2F0X2VuZCA9IHRlbXA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhckZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcnMgPSB7XHJcbiAgICAgIHN0YXRlOiAnJyxcclxuICAgICAgdHlwZTogJycsXHJcbiAgICAgIGNyZWF0ZWRfYXRfc3RhcnQ6ICcnLFxyXG4gICAgICBjcmVhdGVkX2F0X2VuZDogJycsXHJcbiAgICAgIG5hbWU6ICcnLFxyXG4gICAgICBzb3VyY2U6ICcnLFxyXG4gICAgfTtcclxuICAgIHRoaXMucGVuZGluZ1NlYXJjaCA9ICcnO1xyXG4gICAgdGhpcy51cGRhdGVUb0ZpcnN0UGFnZSgpO1xyXG4gICAgdGhpcy51cGRhdGVGaWx0ZXJlZERhdGEoKTtcclxuICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcnMpO1xyXG4gIH1cclxufSIsIjxsaWIta3YtbG9hZGluZyBbbWVzc2FnZV09XCJtZXNzYWdlXCIgW2lzTG9hZGluZ109XCJsb2FkaW5nXCIgKm5nSWY9XCJsb2FkaW5nXCI+IDwvbGliLWt2LWxvYWRpbmc+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXNlY3Rpb25cIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVDb2x1bW5zLmluY2x1ZGVzKGNvbC5rZXkpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wua2V5ID09PSAnY3JlYXRlZF9hdCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIiBbY2xhc3Mub3Blbl09XCJjYWxlbmRhck9wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKGNsaWNrKT1cImNhbGVuZGFyT3BlbiA9ICFjYWxlbmRhck9wZW47IGRyb3Bkb3duT3BlblN0YXRlID0gZmFsc2U7IGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZTsgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydCAmJiBmaWx0ZXJzLmNyZWF0ZWRfYXRfZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQgfCBkYXRlOidkZC9NTS95eXl5JyB9fSAtIHt7IGZpbHRlcnMuY3JlYXRlZF9hdF9lbmQgfCBkYXRlOidkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydCAmJiAhZmlsdGVycy5jcmVhdGVkX2F0X2VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0IHwgZGF0ZTonZGQvTU0veXl5eScgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZmlsdGVycy5jcmVhdGVkX2F0X3N0YXJ0ICYmIGZpbHRlcnMuY3JlYXRlZF9hdF9lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlcnMuY3JlYXRlZF9hdF9lbmQgfCBkYXRlOidkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJzLmNyZWF0ZWRfYXRfc3RhcnQgJiYgIWZpbHRlcnMuY3JlYXRlZF9hdF9lbmRcIiBjbGFzcz1cInBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVkIGF0XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLXBvcHVwXCIgKm5nSWY9XCJjYWxlbmRhck9wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBbKG5nTW9kZWwpXT1cImZpbHRlcnMuY3JlYXRlZF9hdF9zdGFydFwiIChjaGFuZ2UpPVwidXBkYXRlUmFuZ2UoKVwiIFttYXhdPVwidG9kYXlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVycy5jcmVhdGVkX2F0X2VuZFwiIChjaGFuZ2UpPVwidXBkYXRlUmFuZ2UoKVwiIFttYXhdPVwidG9kYXlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wua2V5ID09PSAnZXhwaXJlX2F0J1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbD5GZWNoYTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVycy5leHBpcmVfYXRcIiBbbWF4XT1cInRvZGF5XCIgLz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmtleSA9PT0gJ3N0YXRlJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIiBbY2xhc3Mub3Blbl09XCJkcm9wZG93bk9wZW5TdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKGNsaWNrKT1cImRyb3Bkb3duT3BlblN0YXRlID0gIWRyb3Bkb3duT3BlblN0YXRlOyBkcm9wZG93bk9wZW5UeXBlID0gZmFsc2U7IGRyb3Bkb3duT3BlblNvdXJjZSA9IGZhbHNlOyBjYWxlbmRhck9wZW4gPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlcnMuc3RhdGVcIiBjbGFzcz1cInN0YXRlXCIgW25nQ2xhc3NdPVwiZmlsdGVycy5zdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlcnMuc3RhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJzLnN0YXRlXCIgY2xhc3M9XCJwbGFjZWhvbGRlclwiPlN0YXRlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJvcHRpb25zXCIgKm5nSWY9XCJkcm9wZG93bk9wZW5TdGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IG9wdCBvZiBvcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJzLnN0YXRlID0gb3B0OyBkcm9wZG93bk9wZW5TdGF0ZSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwib3B0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgb3B0IH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wua2V5ID09PSAnc291cmNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1kcm9wZG93blwiIFtjbGFzcy5vcGVuXT1cImRyb3Bkb3duT3BlblNvdXJjZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAoY2xpY2spPVwiZHJvcGRvd25PcGVuU291cmNlID0gIWRyb3Bkb3duT3BlblNvdXJjZTsgZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZTsgZHJvcGRvd25PcGVuVHlwZSA9IGZhbHNlOyBjYWxlbmRhck9wZW4gPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVycy5zb3VyY2VcIiBjbGFzcz1cInNvdXJjZVwiID5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlcnMuc291cmNlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZpbHRlcnMuc291cmNlXCIgY2xhc3M9XCJwbGFjZWhvbGRlclwiPkltcG9ydGVkIGZyb208L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm9wdGlvbnNcIiAqbmdJZj1cImRyb3Bkb3duT3BlblNvdXJjZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiZmlsdGVycy5zb3VyY2UgPSdsb2NhbCc7IGRyb3Bkb3duT3BlblNvdXJjZSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzb3VyY2VcIiBbbmdDbGFzc109XCInbG9jYWwnXCI+bG9jYWxcclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiZmlsdGVycy5zb3VyY2UgPSAnZWNvbW1lcmNlJzsgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNvdXJjZVwiIFtuZ0NsYXNzXT1cIidlY29tbWVyY2UnXCI+ZWNvbW1lcmNlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wua2V5ID09PSAndHlwZSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWRyb3Bkb3duXCIgW2NsYXNzLm9wZW5dPVwiZHJvcGRvd25PcGVuVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKGNsaWNrKT1cImRyb3Bkb3duT3BlblR5cGUgPSAhZHJvcGRvd25PcGVuVHlwZTsgZHJvcGRvd25PcGVuU3RhdGUgPSBmYWxzZTsgZHJvcGRvd25PcGVuU291cmNlID0gZmFsc2U7IGNhbGVuZGFyT3BlbiA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVycy50eXBlXCIgY2xhc3M9XCJ0eXBlXCIgIFtuZ0NsYXNzXT1cImZpbHRlcnMudHlwZS5yZXBsYWNlKCcgJywgJy0nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlcnMudHlwZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZpbHRlcnMudHlwZVwiIGNsYXNzPVwicGxhY2Vob2xkZXJcIj5PZmZlciB0eXBlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJvcHRpb25zXCIgKm5nSWY9XCJkcm9wZG93bk9wZW5UeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiZmlsdGVycy50eXBlID0nUmVndWxhciBhdWN0aW9uJzsgZHJvcGRvd25PcGVuVHlwZSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHlwZVwiIFtuZ0NsYXNzXT1cIidSZWd1bGFyLWF1Y3Rpb24nXCI+UmVndWxhciBhdWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiZmlsdGVycy50eXBlID0gJ1F1aWNrIG9mZmVyJzsgZHJvcGRvd25PcGVuVHlwZSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHlwZVwiIFtuZ0NsYXNzXT1cIidRdWljay1vZmZlcidcIj5RdWljayBvZmZlciBcclxuICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICBcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJsZXRGaWx0ZXJzXCI+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLW92ZXJsYXlcIlxyXG4gICAgICAgICAgKm5nSWY9XCJzaG93RmlsdGVyTWVudVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd0ZpbHRlck1lbnUgPSBmYWxzZVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dGaWx0ZXJNZW51ID0gIXNob3dGaWx0ZXJNZW51OyBkcm9wZG93bk9wZW5TdGF0ZSA9IGZhbHNlOyBkcm9wZG93bk9wZW5Tb3VyY2UgPSBmYWxzZTsgY2FsZW5kYXJPcGVuID0gZmFsc2U7IGRyb3Bkb3duT3BlblR5cGUgPSBmYWxzZVwiIFxyXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItYnV0dG9uXCJcclxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2hvd0ZpbHRlck1lbnVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGx1c1wiPis8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmlsdGVyLWljb25cIj5cclxuICAgICAgICAgICAgZmlsdGVyX2FsdFxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLW1lbnVcIiAqbmdJZj1cInNob3dGaWx0ZXJNZW51XCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmtleSAhPT0gJ25hbWUnICYmIGNvbC5rZXkgIT09ICdpbWFnZXMnICYmIGNvbC5rZXkgIT09ICdwb3NfaWQnICYmIGNvbC5rZXkgIT09ICdwb2ludF9vZl9zYWxlX2lkJyAmJiBjb2wua2V5ICE9PSAnZGVzY3JpcHRpb24nIFwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFjdGl2ZUNvbHVtbnMuaW5jbHVkZXMoY29sLmtleSlcIlxyXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUNvbHVtbihjb2wua2V5LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXRleHRcIj57eyBjb2wubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgY2xhc3M9XCJpbnB1dFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJCdXNjYXIuLi5cIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwicGVuZGluZ1NlYXJjaFwiXHJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uU2VhcmNoZWQoKVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tLWNyZWF0ZVwiIChjbGljayk9XCJvblNlYXJjaGVkKClcIj5CdXNjYXI8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKSAmJiAhbG9hZGluZ1wiPlxyXG4gICAgPGxpYi1rdi1yZXNvdXJjZS1ub3QtZm91bmQgY2xhc3M9XCJyZXNvdXJjZS1ub3QtZm91bmRcIlxyXG4gICAgICBbbWVzc2FnZVRpdGxlXT1cIm1lc3NhZ2VUaXRsZVwiXHJcbiAgICAgIFttZXNzYWdlRGVzY3JpcHRpb25dPVwibWVzc2FnZURlc2NyaXB0aW9uXCI+PC9saWIta3YtcmVzb3VyY2Utbm90LWZvdW5kPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB8fCBsb2FkaW5nXCI+XHJcbiAgICA8dGFibGU+XHJcbiAgICAgIDx0aGVhZD5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCIgW2NsYXNzLmhpZGRlbi1tb2JpbGVdPVwiaGlkZGVuQ29sdW1uc09uTW9iaWxlLmluY2x1ZGVzKGNvbHVtbi5rZXkpXCI+e3sgY29sdW1uLmxhYmVsIH19PC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L3RoZWFkPlxyXG4gICAgICA8dGJvZHk+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkRGF0YVwiPlxyXG4gICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIFtjbGFzcy5oaWRkZW4tbW9iaWxlXT1cImhpZGRlbkNvbHVtbnNPbk1vYmlsZS5pbmNsdWRlcyhjb2x1bW4ua2V5KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdGVcIiBbbmdDbGFzc109XCJpdGVtW2NvbHVtbi5rZXldXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5sYWJlbCA9PT0gJ1NlcnZpY2VzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcnZpY2UtaW5mb1wiIChjbGljayk9XCJlbWl0RGF0YShpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbVsndXJsJ10gfHwgJ2h0dHBzOi8vaS5pbWd1ci5jb20vSW5SYVZyTC5qcGcnXCIgYWx0PVwiSW1hZ2VuXCIgY2xhc3M9XCJzZXJ2aWNlLWltYWdlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJhLWxpbmtcIj57eyBpdGVtLm5hbWUgfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnbmFtZScgJiYgY29sdW1uLmxhYmVsICE9PSAnU2VydmljZXMnXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImEtbGlua1wiIChjbGljayk9XCJlbWl0RGF0YShpdGVtKVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIGl0ZW1bY29sdW1uLmtleV1cclxuICAgICAgICAgICAgICAgIH19PC9hPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnaW1hZ2VzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZSBvZiBpdGVtW2NvbHVtbi5rZXldPy5zbGljZSgwLCAzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZVwiIGFsdD1cIkltYWdlblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbVtjb2x1bW4ua2V5XT8ubGVuZ3RoID4gM1wiIGNsYXNzPVwiZXh0cmEtaW1hZ2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgK3t7IGl0ZW1bY29sdW1uLmtleV0ubGVuZ3RoIC0gMyB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAnY3JlYXRlZF9hdCdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sdW1uLmtleV0gfCBkYXRlIDogXCJkZC9NTS95eXl5XCIgfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmtleSA9PT0gJ2V4cGlyZV9hdCdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGl0ZW1bY29sdW1uLmtleV0gfCBkYXRlIDogXCJkZC9NTS95eXl5XCIgfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmtleSA9PT0gJ2FjdGlvbnMnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbEFjdGlvbnNUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdleHBpcmVfYXQnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdjcmVhdGVkX2F0JyAmJlxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW4ua2V5ICE9PSAncG9pbnRfb2Zfc2FsZV9pZCcgJiZcclxuICAgICAgICAgICAgICAgICAgY29sdW1uLmtleSAhPT0gJ25hbWUnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdwb3NfaWQnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdpbWFnZXMnICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5rZXkgIT09ICdhY3Rpb25zJ1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbHVtbi5rZXldIH19XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4ua2V5ID09PSAncG9pbnRfb2Zfc2FsZV9pZCcgfHwgY29sdW1uLmtleSA9PT0gJ3Bvc19pZCdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IGdldFBvc05hbWUoaXRlbVtjb2x1bW4ua2V5XSkgfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UGFnaW5hdG9yXCI+XHJcbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2luYXRpb25cIj5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjaGFuZ2VQYWdlKC0xKVwiIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiPlxyXG4gICAgICAgICAgICAgICAgICBQcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYWdlKDEpXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSB0b3RhbFBhZ2VzKCkgJiYgIWhhc01vcmVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIE5leHRcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJyZW50LXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlBhZ2Uge3sgY3VycmVudFBhZ2UgfX0gb2Yge3sgdG90YWxQYWdlcygpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbnRhaW5lcj4iXX0=