@senior-agronegocio/angular-components 1.0.18 → 1.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/event-control-board/event-control-board.module.d.ts +4 -3
- package/esm2022/components/event-control-board/event-control-board.component.mjs +11 -10
- package/esm2022/components/event-control-board/event-control-board.module.mjs +12 -8
- package/esm2022/fields/lookups/core/agro-base-lookup-field.mjs +11 -2
- package/fesm2022/senior-agronegocio-angular-components.mjs +61 -48
- package/fesm2022/senior-agronegocio-angular-components.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -31,11 +31,12 @@ import * as i13 from "primeng/panel";
|
|
|
31
31
|
import * as i14 from "primeng/fieldset";
|
|
32
32
|
import * as i15 from "primeng/table";
|
|
33
33
|
import * as i16 from "@seniorsistemas/angular-components/sidebar";
|
|
34
|
-
import * as i17 from "@seniorsistemas/angular-components/
|
|
35
|
-
import * as i18 from "@seniorsistemas/angular-components/
|
|
36
|
-
import * as i19 from "
|
|
37
|
-
import * as i20 from "
|
|
38
|
-
import * as i21 from "
|
|
34
|
+
import * as i17 from "@seniorsistemas/angular-components/template";
|
|
35
|
+
import * as i18 from "@seniorsistemas/angular-components/loading-state";
|
|
36
|
+
import * as i19 from "@seniorsistemas/angular-components/badge";
|
|
37
|
+
import * as i20 from "@seniorsistemas/angular-components/dialog";
|
|
38
|
+
import * as i21 from "../event-steps/event-steps.component";
|
|
39
|
+
import * as i22 from "../../pipe/lib-translate.pipe";
|
|
39
40
|
export class EventControlBoardComponent {
|
|
40
41
|
translate;
|
|
41
42
|
formBuilder;
|
|
@@ -67,8 +68,8 @@ export class EventControlBoardComponent {
|
|
|
67
68
|
sidebarLoading;
|
|
68
69
|
filterFormGroup;
|
|
69
70
|
filterFields;
|
|
70
|
-
gridData;
|
|
71
|
-
gridDataResolved;
|
|
71
|
+
gridData = [];
|
|
72
|
+
gridDataResolved = [];
|
|
72
73
|
gridColumns;
|
|
73
74
|
gridTotalRecords = AGRO_NUMBERS.ZERO;
|
|
74
75
|
gridLoading = false;
|
|
@@ -578,11 +579,11 @@ export class EventControlBoardComponent {
|
|
|
578
579
|
this.showSidebar = false;
|
|
579
580
|
}
|
|
580
581
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EventControlBoardComponent, deps: [{ token: i1.LibTranslationService }, { token: i2.FormBuilder }, { token: i3.WebsocketService }, { token: i4.EventControlService }, { token: i5.PaginatorStorageService }, { token: i6.EventControlItemService }, { token: i7.ProducerInvoiceService }, { token: i8.MessageService }, { token: i9.DialogService }], target: i0.ɵɵFactoryTarget.Component });
|
|
581
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EventControlBoardComponent, selector: "s-event-control-board", inputs: { company: "company", branch: "branch", controlCode: "controlCode", eventOrigin: "eventOrigin", eventStatus: "eventStatus", externalId: "externalId", createdDate: "createdDate", standalone: "standalone", showCancelButton: "showCancelButton", cancelEventDialogConfig: "cancelEventDialogConfig" }, outputs: { processedEvent: "processedEvent" }, providers: [{ provide: LOCALE_ID, useValue: "pt-BR" }], usesOnChanges: true, ngImport: i0, template: "<ng-container *sLoadingState=\"gridLoading\">\r\n <p-panel>\r\n <p-header>\r\n {{ \"agro.angular_components.event_control_header\" | libTranslate }}\r\n </p-header>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12\">\r\n <s-button\r\n id=\"refresh-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.refresh' | libTranslate\"\r\n (click)=\"onSearch()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"standalone && showCancelButton\"\r\n id=\"cancel-button-agro-events-lib\"\r\n iconClass=\"fa fa-times\"\r\n [label]=\"'agro.angular_components.cancel' | libTranslate\"\r\n (click)=\"openCancelModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12 ui-md-12\" *ngIf=\"!gridData || gridData?.length === 0\">\r\n <s-empty-state\r\n iconClass=\"fa fa-exclamation-triangle\"\r\n title=\"{{ 'agro.angular_components.nothing_found' | libTranslate }}\"\r\n [showPrimaryAction]=\"false\"\r\n description=\"{{ 'agro.angular_components.table_empty_description' | libTranslate }}\"\r\n >\r\n </s-empty-state>\r\n </div>\r\n <ng-container *ngIf=\"gridData.length > 0\">\r\n <p-table\r\n stylelass=\"custom-table\"\r\n #eventControlTable\r\n [value]=\"gridDataResolved\"\r\n [columns]=\"gridColumns\"\r\n dataKey=\"id\"\r\n [lazy]=\"true\"\r\n [scrollable]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"!standalone\"\r\n [totalRecords]=\"gridTotalRecords\"\r\n [rows]=\"10\"\r\n [responsive]=\"true\"\r\n (onLazyLoad)=\"onGridChange($event)\"\r\n [sortOrder]=\"getSortOrder()\"\r\n [first]=\"getRowIndex()\"\r\n [lazyLoadOnInit]=\"false\"\r\n sortMode=\"multiple\"\r\n [rows]=\"getPageSize()\"\r\n [rowsPerPageOptions]=\"[10, 20, 50, 100]\"\r\n >\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <th *ngFor=\"let col of columns\" class=\"ui-lg-1 ui-md-1\" [pSortableColumn]=\"col.field\" scope=\"col\">\r\n <div class=\"senior-header\">\r\n <span class=\"senior-header-title\">{{ col.header }}</span>\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n </th>\r\n </ng-container>\r\n <th class=\"ui-lg-8 ui-md-7\" scope=\"col\">\r\n {{ \"agro.angular_components.panel_title_events_events\" | libTranslate }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n {{ rowData.e070emp?.nomEmp }}\r\n </td>\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n {{ rowData.e070fil?.nomFil }}\r\n </td>\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n <ng-container [ngSwitch]=\"rowData.eventOrigin\">\r\n <span *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{ \"agro.angular_components.balance_entry_control_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'TICKET'\">\r\n {{ \"agro.angular_components.ticket_maintenance_header\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'TRANSFER'\">\r\n {{ \"agro.angular_components.transfer_origin_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'INVOICE'\">\r\n {{ \"agro.angular_components.CREATE_INVOICE_FIXATION\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{ \"agro.angular_components.change_request_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'FIXATION'\">\r\n {{ \"agro.angular_components.fixation_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'CANCEL_FIXATION'\">\r\n {{ \"agro.angular_components.cancel_fixation_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'TRANSFER_CANCELLATION'\">\r\n {{ \"agro.angular_components.transfer_cancellation_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'AGRONOMIC_PRESCRIPTION'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'PRESCRIPTION_INTEGRATION_HUB'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <td class=\"ui-lg-1 ui ui-md-1\">\r\n {{ rowData.controlCode || \"\" }}\r\n </td>\r\n </ng-container>\r\n <td class=\"ui-lg-8 ui-md-7\">\r\n <ng-container *ngFor=\"let group of rowData.groups\">\r\n <s-event-steps\r\n [steps]=\"group.steps || []\"\r\n [activeIndex]=\"group.activeIndex\"\r\n (stepSelected)=\"stepSelected($event)\"\r\n >\r\n </s-event-steps>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"!standalone\" pTemplate=\"paginatorright\" class=\"custom-table\">\r\n <span>\r\n {{ \"agro.angular_components.registers_found\" | libTranslate: { total: gridTotalRecords } }}\r\n </span>\r\n </ng-template>\r\n </p-table>\r\n </ng-container>\r\n </div>\r\n </p-panel>\r\n</ng-container>\r\n<s-sidebar\r\n [visible]=\"showSidebar\"\r\n (visibleChange)=\"closeSidebar()\"\r\n header=\"{{ 'agro.angular_components.event_details_header' | libTranslate }}\"\r\n>\r\n <div class=\"ui-fluid\">\r\n <p-fieldset [legend]=\"sidebarTitle\" [toggleable]=\"false\">\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.event_origin_label\" | libTranslate }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.eventType\">\r\n <p *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{ \"agro.angular_components.balance_entry_control_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TICKET'\">\r\n {{ \"agro.angular_components.ticket_maintenance_header\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TRANSFER'\">\r\n {{ \"agro.angular_components.transfer_origin_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'INVOICE'\">\r\n {{ \"agro.angular_components.CREATE_INVOICE_FIXATION\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{ \"agro.angular_components.change_request_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'FIXATION'\">\r\n {{ \"agro.angular_components.fixation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CANCEL_FIXATION'\">\r\n {{ \"agro.angular_components.cancel_fixation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TRANSFER_CANCELLATION'\">\r\n {{ \"agro.angular_components.transfer_cancellation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'AGRONOMIC_PRESCRIPTION'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'PRESCRIPTION_INTEGRATION_HUB'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"producerInvoice?.producerBalanceEntryControl.producer.e001pes.nomPes\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.supplier\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.producerBalanceEntryControl.producer.e001pes.nomPes }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"producerInvoice?.producerBalanceEntryControl.ruralEstate.name\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.rural_estate\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.producerBalanceEntryControl.ruralEstate.name }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"selectedStep?.controlCode\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.control_code\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.controlCode }}</p>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.status_label\" | libTranslate }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.item.status\">\r\n <p *ngSwitchCase=\"'SUCCESS'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Green\"\r\n text=\"{{ 'agro.angular_components.panel_title_events_completed_successfully' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PROCESSING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Orange\"\r\n text=\"{{ 'agro.angular_components.processing' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'FAILED'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Red\"\r\n text=\"{{ 'agro.angular_components.panel_title_events_ended_with_error' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PENDING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Gray\"\r\n text=\"{{ 'agro.angular_components.pending' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.last_update_date\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.lastModifiedDate | date: \"dd/MM/yyyy HH:mm:ss\" }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"selectedStep?.item.status === 'FAILED'\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.event_error_message\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.message || \"-\" }}</p>\r\n </div>\r\n </div>\r\n </p-fieldset>\r\n </div>\r\n <div class=\"s-footer\">\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12 width-fit\">\r\n <s-button\r\n id=\"sidebar-close-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n [label]=\"'agro.angular_components.events_close' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"closeSidebar()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"showReprocessButton\"\r\n id=\"sidebar-reprocess-button\"\r\n [priority]=\"ButtonPriority.Secondary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.reprocess_event' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"openModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n </div>\r\n</s-sidebar>\r\n\r\n<p-dialog [header]=\"'agro.angular_components.event_modal_title' | libTranslate\" [(visible)]=\"displayModal\" [modal]=\"true\" class=\"dialog\">\r\n <div class=\"event-modal-text\">{{ \"agro.angular_components.event_modal\" | libTranslate }}</div>\r\n <p-footer>\r\n <div class=\"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\">\r\n <button\r\n id=\"modal-yes\"\r\n type=\"button\"\r\n pButton\r\n icon=\"fa fa-check\"\r\n (click)=\"confirmModal()\"\r\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\"\r\n >\r\n {{ 'agro.angular_components.yes' | libTranslate }}\r\n </button>\r\n <button\r\n id=\"modal-no\"\r\n type=\"button\"\r\n pButton\r\n icon=\"fa fa-close\"\r\n (click)=\"cancelModal()\"\r\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\"\r\n >\r\n {{ 'agro.angular_components.no' | libTranslate }}\r\n </button>\r\n </div>\r\n </p-footer>\r\n</p-dialog>\r\n", styles: [".frozen{border-left:2px solid #dddddd}.dialog{width:\"600px\";height:\"300px\";z-index:100000}:host ::ng-deep #cancel-button-agro-events-lib{background-color:#9c3a3a!important;border-color:#9c3a3a!important}:host ::ng-deep #cancel-button-agro-events-lib:hover{background-color:#642525!important}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i11.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor"], outputs: ["clicked"] }, { kind: "component", type: i12.EmptyStateComponent, selector: "s-empty-state", inputs: ["id", "title", "iconClass", "description", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "secondaryActionLabel", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }, { kind: "component", type: i13.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions", "toggleButtonProps"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i8.Header, selector: "p-header" }, { kind: "component", type: i8.Footer, selector: "p-footer" }, { kind: "directive", type: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i14.Fieldset, selector: "p-fieldset", inputs: ["legend", "toggleable", "collapsed", "style", "styleClass", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i15.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i15.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i15.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i16.SidebarComponent, selector: "s-sidebar", inputs: ["visible", "closable", "dismissible", "closeOnEscape", "header", "largeSized", "cache", "registerConfirmClose"], outputs: ["visibleChange"] }, { kind: "directive", type: i17.LoadingStateDirective, selector: "[sLoadingState]", inputs: ["sLoadingState"] }, { kind: "component", type: i18.BadgeComponent, selector: "s-badge", inputs: ["type", "color", "title", "text", "selectable", "iconClass", "iconPosition", "infoSign", "enableTruncateText"], outputs: ["selected"] }, { kind: "component", type: i19.EventStepsComponent, selector: "s-event-steps", inputs: ["id", "steps", "activeIndex"], outputs: ["stepSelected"] }, { kind: "component", type: i20.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "pipe", type: i10.DatePipe, name: "date" }, { kind: "pipe", type: i21.LibTranslatePipe, name: "libTranslate" }] });
|
|
582
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EventControlBoardComponent, selector: "s-event-control-board", inputs: { company: "company", branch: "branch", controlCode: "controlCode", eventOrigin: "eventOrigin", eventStatus: "eventStatus", externalId: "externalId", createdDate: "createdDate", standalone: "standalone", showCancelButton: "showCancelButton", cancelEventDialogConfig: "cancelEventDialogConfig" }, outputs: { processedEvent: "processedEvent" }, providers: [{ provide: LOCALE_ID, useValue: "pt-BR" }], usesOnChanges: true, ngImport: i0, template: "<ng-container *sLoadingState=\"gridLoading\">\r\n <p-panel>\r\n <p-header>\r\n {{ \"agro.angular_components.event_control_header\" | libTranslate }}\r\n </p-header>\r\n <div class=\"flex flex-col gap-3\">\r\n <div class=\"col-span-1\">\r\n <s-button\r\n id=\"refresh-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.refresh' | libTranslate\"\r\n (click)=\"onSearch()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"standalone && showCancelButton\"\r\n id=\"cancel-button-agro-events-lib\"\r\n iconClass=\"fa fa-times\"\r\n [label]=\"'agro.angular_components.cancel' | libTranslate\"\r\n (click)=\"openCancelModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col gap-3\">\r\n <div class=\"col-span-1\" *ngIf=\"gridData.length === 0\">\r\n <s-empty-state\r\n iconClass=\"fa fa-exclamation-triangle\"\r\n title=\"{{ 'agro.angular_components.nothing_found' | libTranslate }}\"\r\n [showPrimaryAction]=\"false\"\r\n description=\"{{ 'agro.angular_components.table_empty_description' | libTranslate }}\"\r\n >\r\n </s-empty-state>\r\n </div>\r\n <ng-container *ngIf=\"gridData.length > 0\">\r\n <p-table\r\n styleClass=\"custom-table\"\r\n #eventControlTable\r\n [value]=\"gridDataResolved\"\r\n [columns]=\"gridColumns\"\r\n dataKey=\"id\"\r\n [lazy]=\"true\"\r\n [scrollable]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"!standalone\"\r\n [totalRecords]=\"gridTotalRecords\"\r\n [rows]=\"10\"\r\n [responsive]=\"true\"\r\n (onLazyLoad)=\"onGridChange($event)\"\r\n [sortOrder]=\"getSortOrder()\"\r\n [first]=\"getRowIndex()\"\r\n [lazyLoadOnInit]=\"false\"\r\n sortMode=\"multiple\"\r\n [rows]=\"getPageSize()\"\r\n [rowsPerPageOptions]=\"[10, 20, 50, 100]\"\r\n >\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <th *ngFor=\"let col of columns\" class=\"w-32\" [pSortableColumn]=\"col.field\" scope=\"col\">\r\n <div class=\"senior-header\">\r\n <span class=\"senior-header-title\">{{ col.header }}</span>\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n </th>\r\n </ng-container>\r\n <th class=\"w-full min-w-0\" scope=\"col\">\r\n {{ \"agro.angular_components.panel_title_events_events\" | libTranslate }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <td class=\"w-32 align-top\">\r\n {{ rowData.e070emp?.nomEmp }}\r\n </td>\r\n <td class=\"w-32 align-top\">\r\n {{ rowData.e070fil?.nomFil }}\r\n </td>\r\n <td class=\"w-32 align-top\">\r\n <ng-container [ngSwitch]=\"rowData.eventOrigin\">\r\n <span *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{ \"agro.angular_components.balance_entry_control_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'TICKET'\">\r\n {{ \"agro.angular_components.ticket_maintenance_header\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'TRANSFER'\">\r\n {{ \"agro.angular_components.transfer_origin_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'INVOICE'\">\r\n {{ \"agro.angular_components.CREATE_INVOICE_FIXATION\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{ \"agro.angular_components.change_request_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'FIXATION'\">\r\n {{ \"agro.angular_components.fixation_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'CANCEL_FIXATION'\">\r\n {{ \"agro.angular_components.cancel_fixation_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'TRANSFER_CANCELLATION'\">\r\n {{ \"agro.angular_components.transfer_cancellation_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'AGRONOMIC_PRESCRIPTION'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'PRESCRIPTION_INTEGRATION_HUB'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <td class=\"w-32 align-top\">\r\n {{ rowData.controlCode || \"\" }}\r\n </td>\r\n </ng-container>\r\n <td class=\"w-full min-w-0 align-top\">\r\n <ng-container *ngFor=\"let group of rowData.groups\">\r\n <div class=\"max-w-full overflow-x-auto\">\r\n <s-event-steps\r\n [steps]=\"group.steps || []\"\r\n [activeIndex]=\"group.activeIndex\"\r\n (stepSelected)=\"stepSelected($event)\"\r\n >\r\n </s-event-steps>\r\n </div>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"!standalone\" pTemplate=\"paginatorright\" class=\"custom-table\">\r\n <span>\r\n {{ \"agro.angular_components.registers_found\" | libTranslate: { total: gridTotalRecords } }}\r\n </span>\r\n </ng-template>\r\n </p-table>\r\n </ng-container>\r\n </div>\r\n </p-panel>\r\n</ng-container>\r\n<s-sidebar\r\n [visible]=\"showSidebar\"\r\n (visibleChange)=\"closeSidebar()\"\r\n header=\"{{ 'agro.angular_components.event_details_header' | libTranslate }}\"\r\n>\r\n <div class=\"w-full\">\r\n <p-fieldset [legend]=\"sidebarTitle\" [toggleable]=\"false\">\r\n <div class=\"flex flex-col gap-4 md:flex-row md:flex-wrap\">\r\n <div class=\"md:w-1/3\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.event_origin_label\" | libTranslate }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.eventType\">\r\n <p *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{ \"agro.angular_components.balance_entry_control_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TICKET'\">\r\n {{ \"agro.angular_components.ticket_maintenance_header\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TRANSFER'\">\r\n {{ \"agro.angular_components.transfer_origin_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'INVOICE'\">\r\n {{ \"agro.angular_components.CREATE_INVOICE_FIXATION\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{ \"agro.angular_components.change_request_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'FIXATION'\">\r\n {{ \"agro.angular_components.fixation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CANCEL_FIXATION'\">\r\n {{ \"agro.angular_components.cancel_fixation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TRANSFER_CANCELLATION'\">\r\n {{ \"agro.angular_components.transfer_cancellation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'AGRONOMIC_PRESCRIPTION'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'PRESCRIPTION_INTEGRATION_HUB'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"md:w-1/3\" *ngIf=\"producerInvoice?.producerBalanceEntryControl.producer.e001pes.nomPes\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.supplier\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.producerBalanceEntryControl.producer.e001pes.nomPes }}</p>\r\n </div>\r\n <div class=\"md:w-1/3\" *ngIf=\"producerInvoice?.producerBalanceEntryControl.ruralEstate.name\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.rural_estate\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.producerBalanceEntryControl.ruralEstate.name }}</p>\r\n </div>\r\n <div class=\"md:w-1/3\" *ngIf=\"selectedStep?.controlCode\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.control_code\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.controlCode }}</p>\r\n </div>\r\n <div class=\"md:w-1/3\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.status_label\" | libTranslate }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.item.status\">\r\n <p *ngSwitchCase=\"'SUCCESS'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Green\"\r\n text=\"{{ 'agro.angular_components.panel_title_events_completed_successfully' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PROCESSING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Orange\"\r\n text=\"{{ 'agro.angular_components.processing' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'FAILED'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Red\"\r\n text=\"{{ 'agro.angular_components.panel_title_events_ended_with_error' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PENDING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Gray\"\r\n text=\"{{ 'agro.angular_components.pending' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"md:w-1/3\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.last_update_date\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.lastModifiedDate | date: \"dd/MM/yyyy HH:mm:ss\" }}</p>\r\n </div>\r\n <div class=\"md:w-1/3\" *ngIf=\"selectedStep?.item.status === 'FAILED'\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.event_error_message\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.message || \"-\" }}</p>\r\n </div>\r\n </div>\r\n </p-fieldset>\r\n </div>\r\n <div class=\"s-footer\">\r\n <div class=\"flex flex-wrap justify-end gap-2\">\r\n <div class=\"flex flex-wrap justify-end gap-2\">\r\n <s-button\r\n id=\"sidebar-close-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n [label]=\"'agro.angular_components.events_close' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"closeSidebar()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"showReprocessButton\"\r\n id=\"sidebar-reprocess-button\"\r\n [priority]=\"ButtonPriority.Secondary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.reprocess_event' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"openModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n </div>\r\n</s-sidebar>\r\n\r\n<s-dialog\r\n [header]=\"'agro.angular_components.event_modal_title' | libTranslate\"\r\n [(visible)]=\"displayModal\"\r\n size=\"md\"\r\n>\r\n\r\n <div class=\"event-modal-text\">{{ \"agro.angular_components.event_modal\" | libTranslate }}</div>\r\n\r\n <ng-template sTemplate=\"footer\">\r\n <div class=\"flex justify-end gap-2\">\r\n <s-button\r\n id=\"modal-yes\"\r\n [label]=\"'agro.angular_components.yes' | libTranslate\"\r\n iconClass=\"fa fa-check\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n [auxiliary]=\"false\"\r\n (clicked)=\"confirmModal()\"\r\n >\r\n </s-button>\r\n <s-button\r\n id=\"modal-no\"\r\n [label]=\"'agro.angular_components.no' | libTranslate\"\r\n iconClass=\"fa fa-close\"\r\n [priority]=\"ButtonPriority.Secondary\"\r\n [auxiliary]=\"false\"\r\n (clicked)=\"cancelModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </ng-template>\r\n</s-dialog>\r\n", styles: [".frozen{border-left:2px solid #dddddd}:host ::ng-deep #cancel-button-agro-events-lib{background-color:#9c3a3a!important;border-color:#9c3a3a!important}:host ::ng-deep #cancel-button-agro-events-lib:hover{background-color:#642525!important}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i11.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor"], outputs: ["clicked"] }, { kind: "component", type: i12.EmptyStateComponent, selector: "s-empty-state", inputs: ["id", "title", "iconClass", "description", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "secondaryActionLabel", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }, { kind: "component", type: i13.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions", "toggleButtonProps"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i8.Header, selector: "p-header" }, { kind: "directive", type: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i14.Fieldset, selector: "p-fieldset", inputs: ["legend", "toggleable", "collapsed", "style", "styleClass", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i15.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i15.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i15.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i16.SidebarComponent, selector: "s-sidebar", inputs: ["visible", "closable", "dismissible", "closeOnEscape", "header", "largeSized", "cache", "registerConfirmClose"], outputs: ["visibleChange"] }, { kind: "directive", type: i17.TemplateDirective, selector: "[sTemplate]", inputs: ["sTemplate"] }, { kind: "directive", type: i18.LoadingStateDirective, selector: "[sLoadingState]", inputs: ["sLoadingState"] }, { kind: "component", type: i19.BadgeComponent, selector: "s-badge", inputs: ["type", "color", "title", "text", "selectable", "iconClass", "iconPosition", "infoSign", "enableTruncateText"], outputs: ["selected"] }, { kind: "component", type: i20.DialogComponent, selector: "s-dialog", inputs: ["header", "visible", "size", "contentClassName", "escapeOnEsc", "destroyClickOutside"], outputs: ["visibleChange"] }, { kind: "component", type: i21.EventStepsComponent, selector: "s-event-steps", inputs: ["id", "steps", "activeIndex"], outputs: ["stepSelected"] }, { kind: "pipe", type: i10.DatePipe, name: "date" }, { kind: "pipe", type: i22.LibTranslatePipe, name: "libTranslate" }] });
|
|
582
583
|
}
|
|
583
584
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EventControlBoardComponent, decorators: [{
|
|
584
585
|
type: Component,
|
|
585
|
-
args: [{ selector: "s-event-control-board", providers: [{ provide: LOCALE_ID, useValue: "pt-BR" }], template: "<ng-container *sLoadingState=\"gridLoading\">\r\n <p-panel>\r\n <p-header>\r\n {{ \"agro.angular_components.event_control_header\" | libTranslate }}\r\n </p-header>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12\">\r\n <s-button\r\n id=\"refresh-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.refresh' | libTranslate\"\r\n (click)=\"onSearch()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"standalone && showCancelButton\"\r\n id=\"cancel-button-agro-events-lib\"\r\n iconClass=\"fa fa-times\"\r\n [label]=\"'agro.angular_components.cancel' | libTranslate\"\r\n (click)=\"openCancelModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12 ui-md-12\" *ngIf=\"!gridData || gridData?.length === 0\">\r\n <s-empty-state\r\n iconClass=\"fa fa-exclamation-triangle\"\r\n title=\"{{ 'agro.angular_components.nothing_found' | libTranslate }}\"\r\n [showPrimaryAction]=\"false\"\r\n description=\"{{ 'agro.angular_components.table_empty_description' | libTranslate }}\"\r\n >\r\n </s-empty-state>\r\n </div>\r\n <ng-container *ngIf=\"gridData.length > 0\">\r\n <p-table\r\n stylelass=\"custom-table\"\r\n #eventControlTable\r\n [value]=\"gridDataResolved\"\r\n [columns]=\"gridColumns\"\r\n dataKey=\"id\"\r\n [lazy]=\"true\"\r\n [scrollable]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"!standalone\"\r\n [totalRecords]=\"gridTotalRecords\"\r\n [rows]=\"10\"\r\n [responsive]=\"true\"\r\n (onLazyLoad)=\"onGridChange($event)\"\r\n [sortOrder]=\"getSortOrder()\"\r\n [first]=\"getRowIndex()\"\r\n [lazyLoadOnInit]=\"false\"\r\n sortMode=\"multiple\"\r\n [rows]=\"getPageSize()\"\r\n [rowsPerPageOptions]=\"[10, 20, 50, 100]\"\r\n >\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <th *ngFor=\"let col of columns\" class=\"ui-lg-1 ui-md-1\" [pSortableColumn]=\"col.field\" scope=\"col\">\r\n <div class=\"senior-header\">\r\n <span class=\"senior-header-title\">{{ col.header }}</span>\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n </th>\r\n </ng-container>\r\n <th class=\"ui-lg-8 ui-md-7\" scope=\"col\">\r\n {{ \"agro.angular_components.panel_title_events_events\" | libTranslate }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n {{ rowData.e070emp?.nomEmp }}\r\n </td>\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n {{ rowData.e070fil?.nomFil }}\r\n </td>\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n <ng-container [ngSwitch]=\"rowData.eventOrigin\">\r\n <span *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{ \"agro.angular_components.balance_entry_control_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'TICKET'\">\r\n {{ \"agro.angular_components.ticket_maintenance_header\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'TRANSFER'\">\r\n {{ \"agro.angular_components.transfer_origin_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'INVOICE'\">\r\n {{ \"agro.angular_components.CREATE_INVOICE_FIXATION\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{ \"agro.angular_components.change_request_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'FIXATION'\">\r\n {{ \"agro.angular_components.fixation_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'CANCEL_FIXATION'\">\r\n {{ \"agro.angular_components.cancel_fixation_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'TRANSFER_CANCELLATION'\">\r\n {{ \"agro.angular_components.transfer_cancellation_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'AGRONOMIC_PRESCRIPTION'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'PRESCRIPTION_INTEGRATION_HUB'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <td class=\"ui-lg-1 ui ui-md-1\">\r\n {{ rowData.controlCode || \"\" }}\r\n </td>\r\n </ng-container>\r\n <td class=\"ui-lg-8 ui-md-7\">\r\n <ng-container *ngFor=\"let group of rowData.groups\">\r\n <s-event-steps\r\n [steps]=\"group.steps || []\"\r\n [activeIndex]=\"group.activeIndex\"\r\n (stepSelected)=\"stepSelected($event)\"\r\n >\r\n </s-event-steps>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"!standalone\" pTemplate=\"paginatorright\" class=\"custom-table\">\r\n <span>\r\n {{ \"agro.angular_components.registers_found\" | libTranslate: { total: gridTotalRecords } }}\r\n </span>\r\n </ng-template>\r\n </p-table>\r\n </ng-container>\r\n </div>\r\n </p-panel>\r\n</ng-container>\r\n<s-sidebar\r\n [visible]=\"showSidebar\"\r\n (visibleChange)=\"closeSidebar()\"\r\n header=\"{{ 'agro.angular_components.event_details_header' | libTranslate }}\"\r\n>\r\n <div class=\"ui-fluid\">\r\n <p-fieldset [legend]=\"sidebarTitle\" [toggleable]=\"false\">\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.event_origin_label\" | libTranslate }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.eventType\">\r\n <p *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{ \"agro.angular_components.balance_entry_control_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TICKET'\">\r\n {{ \"agro.angular_components.ticket_maintenance_header\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TRANSFER'\">\r\n {{ \"agro.angular_components.transfer_origin_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'INVOICE'\">\r\n {{ \"agro.angular_components.CREATE_INVOICE_FIXATION\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{ \"agro.angular_components.change_request_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'FIXATION'\">\r\n {{ \"agro.angular_components.fixation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CANCEL_FIXATION'\">\r\n {{ \"agro.angular_components.cancel_fixation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TRANSFER_CANCELLATION'\">\r\n {{ \"agro.angular_components.transfer_cancellation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'AGRONOMIC_PRESCRIPTION'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'PRESCRIPTION_INTEGRATION_HUB'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"producerInvoice?.producerBalanceEntryControl.producer.e001pes.nomPes\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.supplier\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.producerBalanceEntryControl.producer.e001pes.nomPes }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"producerInvoice?.producerBalanceEntryControl.ruralEstate.name\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.rural_estate\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.producerBalanceEntryControl.ruralEstate.name }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"selectedStep?.controlCode\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.control_code\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.controlCode }}</p>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.status_label\" | libTranslate }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.item.status\">\r\n <p *ngSwitchCase=\"'SUCCESS'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Green\"\r\n text=\"{{ 'agro.angular_components.panel_title_events_completed_successfully' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PROCESSING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Orange\"\r\n text=\"{{ 'agro.angular_components.processing' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'FAILED'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Red\"\r\n text=\"{{ 'agro.angular_components.panel_title_events_ended_with_error' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PENDING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Gray\"\r\n text=\"{{ 'agro.angular_components.pending' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.last_update_date\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.lastModifiedDate | date: \"dd/MM/yyyy HH:mm:ss\" }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"selectedStep?.item.status === 'FAILED'\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.event_error_message\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.message || \"-\" }}</p>\r\n </div>\r\n </div>\r\n </p-fieldset>\r\n </div>\r\n <div class=\"s-footer\">\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12 width-fit\">\r\n <s-button\r\n id=\"sidebar-close-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n [label]=\"'agro.angular_components.events_close' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"closeSidebar()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"showReprocessButton\"\r\n id=\"sidebar-reprocess-button\"\r\n [priority]=\"ButtonPriority.Secondary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.reprocess_event' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"openModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n </div>\r\n</s-sidebar>\r\n\r\n<p-dialog [header]=\"'agro.angular_components.event_modal_title' | libTranslate\" [(visible)]=\"displayModal\" [modal]=\"true\" class=\"dialog\">\r\n <div class=\"event-modal-text\">{{ \"agro.angular_components.event_modal\" | libTranslate }}</div>\r\n <p-footer>\r\n <div class=\"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\">\r\n <button\r\n id=\"modal-yes\"\r\n type=\"button\"\r\n pButton\r\n icon=\"fa fa-check\"\r\n (click)=\"confirmModal()\"\r\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\"\r\n >\r\n {{ 'agro.angular_components.yes' | libTranslate }}\r\n </button>\r\n <button\r\n id=\"modal-no\"\r\n type=\"button\"\r\n pButton\r\n icon=\"fa fa-close\"\r\n (click)=\"cancelModal()\"\r\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\"\r\n >\r\n {{ 'agro.angular_components.no' | libTranslate }}\r\n </button>\r\n </div>\r\n </p-footer>\r\n</p-dialog>\r\n", styles: [".frozen{border-left:2px solid #dddddd}.dialog{width:\"600px\";height:\"300px\";z-index:100000}:host ::ng-deep #cancel-button-agro-events-lib{background-color:#9c3a3a!important;border-color:#9c3a3a!important}:host ::ng-deep #cancel-button-agro-events-lib:hover{background-color:#642525!important}\n"] }]
|
|
586
|
+
args: [{ selector: "s-event-control-board", providers: [{ provide: LOCALE_ID, useValue: "pt-BR" }], template: "<ng-container *sLoadingState=\"gridLoading\">\r\n <p-panel>\r\n <p-header>\r\n {{ \"agro.angular_components.event_control_header\" | libTranslate }}\r\n </p-header>\r\n <div class=\"flex flex-col gap-3\">\r\n <div class=\"col-span-1\">\r\n <s-button\r\n id=\"refresh-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.refresh' | libTranslate\"\r\n (click)=\"onSearch()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"standalone && showCancelButton\"\r\n id=\"cancel-button-agro-events-lib\"\r\n iconClass=\"fa fa-times\"\r\n [label]=\"'agro.angular_components.cancel' | libTranslate\"\r\n (click)=\"openCancelModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col gap-3\">\r\n <div class=\"col-span-1\" *ngIf=\"gridData.length === 0\">\r\n <s-empty-state\r\n iconClass=\"fa fa-exclamation-triangle\"\r\n title=\"{{ 'agro.angular_components.nothing_found' | libTranslate }}\"\r\n [showPrimaryAction]=\"false\"\r\n description=\"{{ 'agro.angular_components.table_empty_description' | libTranslate }}\"\r\n >\r\n </s-empty-state>\r\n </div>\r\n <ng-container *ngIf=\"gridData.length > 0\">\r\n <p-table\r\n styleClass=\"custom-table\"\r\n #eventControlTable\r\n [value]=\"gridDataResolved\"\r\n [columns]=\"gridColumns\"\r\n dataKey=\"id\"\r\n [lazy]=\"true\"\r\n [scrollable]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"!standalone\"\r\n [totalRecords]=\"gridTotalRecords\"\r\n [rows]=\"10\"\r\n [responsive]=\"true\"\r\n (onLazyLoad)=\"onGridChange($event)\"\r\n [sortOrder]=\"getSortOrder()\"\r\n [first]=\"getRowIndex()\"\r\n [lazyLoadOnInit]=\"false\"\r\n sortMode=\"multiple\"\r\n [rows]=\"getPageSize()\"\r\n [rowsPerPageOptions]=\"[10, 20, 50, 100]\"\r\n >\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <th *ngFor=\"let col of columns\" class=\"w-32\" [pSortableColumn]=\"col.field\" scope=\"col\">\r\n <div class=\"senior-header\">\r\n <span class=\"senior-header-title\">{{ col.header }}</span>\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n </th>\r\n </ng-container>\r\n <th class=\"w-full min-w-0\" scope=\"col\">\r\n {{ \"agro.angular_components.panel_title_events_events\" | libTranslate }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <td class=\"w-32 align-top\">\r\n {{ rowData.e070emp?.nomEmp }}\r\n </td>\r\n <td class=\"w-32 align-top\">\r\n {{ rowData.e070fil?.nomFil }}\r\n </td>\r\n <td class=\"w-32 align-top\">\r\n <ng-container [ngSwitch]=\"rowData.eventOrigin\">\r\n <span *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{ \"agro.angular_components.balance_entry_control_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'TICKET'\">\r\n {{ \"agro.angular_components.ticket_maintenance_header\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'TRANSFER'\">\r\n {{ \"agro.angular_components.transfer_origin_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'INVOICE'\">\r\n {{ \"agro.angular_components.CREATE_INVOICE_FIXATION\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{ \"agro.angular_components.change_request_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'FIXATION'\">\r\n {{ \"agro.angular_components.fixation_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'CANCEL_FIXATION'\">\r\n {{ \"agro.angular_components.cancel_fixation_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'TRANSFER_CANCELLATION'\">\r\n {{ \"agro.angular_components.transfer_cancellation_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'AGRONOMIC_PRESCRIPTION'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </span>\r\n <span *ngSwitchCase=\"'PRESCRIPTION_INTEGRATION_HUB'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <td class=\"w-32 align-top\">\r\n {{ rowData.controlCode || \"\" }}\r\n </td>\r\n </ng-container>\r\n <td class=\"w-full min-w-0 align-top\">\r\n <ng-container *ngFor=\"let group of rowData.groups\">\r\n <div class=\"max-w-full overflow-x-auto\">\r\n <s-event-steps\r\n [steps]=\"group.steps || []\"\r\n [activeIndex]=\"group.activeIndex\"\r\n (stepSelected)=\"stepSelected($event)\"\r\n >\r\n </s-event-steps>\r\n </div>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"!standalone\" pTemplate=\"paginatorright\" class=\"custom-table\">\r\n <span>\r\n {{ \"agro.angular_components.registers_found\" | libTranslate: { total: gridTotalRecords } }}\r\n </span>\r\n </ng-template>\r\n </p-table>\r\n </ng-container>\r\n </div>\r\n </p-panel>\r\n</ng-container>\r\n<s-sidebar\r\n [visible]=\"showSidebar\"\r\n (visibleChange)=\"closeSidebar()\"\r\n header=\"{{ 'agro.angular_components.event_details_header' | libTranslate }}\"\r\n>\r\n <div class=\"w-full\">\r\n <p-fieldset [legend]=\"sidebarTitle\" [toggleable]=\"false\">\r\n <div class=\"flex flex-col gap-4 md:flex-row md:flex-wrap\">\r\n <div class=\"md:w-1/3\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.event_origin_label\" | libTranslate }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.eventType\">\r\n <p *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{ \"agro.angular_components.balance_entry_control_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TICKET'\">\r\n {{ \"agro.angular_components.ticket_maintenance_header\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TRANSFER'\">\r\n {{ \"agro.angular_components.transfer_origin_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'INVOICE'\">\r\n {{ \"agro.angular_components.CREATE_INVOICE_FIXATION\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{ \"agro.angular_components.change_request_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'FIXATION'\">\r\n {{ \"agro.angular_components.fixation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CANCEL_FIXATION'\">\r\n {{ \"agro.angular_components.cancel_fixation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TRANSFER_CANCELLATION'\">\r\n {{ \"agro.angular_components.transfer_cancellation_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'AGRONOMIC_PRESCRIPTION'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'PRESCRIPTION_INTEGRATION_HUB'\">\r\n {{ \"agro.angular_components.agronomic_prescription_origin_event\" | libTranslate }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"md:w-1/3\" *ngIf=\"producerInvoice?.producerBalanceEntryControl.producer.e001pes.nomPes\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.supplier\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.producerBalanceEntryControl.producer.e001pes.nomPes }}</p>\r\n </div>\r\n <div class=\"md:w-1/3\" *ngIf=\"producerInvoice?.producerBalanceEntryControl.ruralEstate.name\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.rural_estate\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.producerBalanceEntryControl.ruralEstate.name }}</p>\r\n </div>\r\n <div class=\"md:w-1/3\" *ngIf=\"selectedStep?.controlCode\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.control_code\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.controlCode }}</p>\r\n </div>\r\n <div class=\"md:w-1/3\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.status_label\" | libTranslate }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.item.status\">\r\n <p *ngSwitchCase=\"'SUCCESS'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Green\"\r\n text=\"{{ 'agro.angular_components.panel_title_events_completed_successfully' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PROCESSING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Orange\"\r\n text=\"{{ 'agro.angular_components.processing' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'FAILED'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Red\"\r\n text=\"{{ 'agro.angular_components.panel_title_events_ended_with_error' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PENDING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Gray\"\r\n text=\"{{ 'agro.angular_components.pending' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"md:w-1/3\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.last_update_date\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.lastModifiedDate | date: \"dd/MM/yyyy HH:mm:ss\" }}</p>\r\n </div>\r\n <div class=\"md:w-1/3\" *ngIf=\"selectedStep?.item.status === 'FAILED'\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.event_error_message\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.message || \"-\" }}</p>\r\n </div>\r\n </div>\r\n </p-fieldset>\r\n </div>\r\n <div class=\"s-footer\">\r\n <div class=\"flex flex-wrap justify-end gap-2\">\r\n <div class=\"flex flex-wrap justify-end gap-2\">\r\n <s-button\r\n id=\"sidebar-close-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n [label]=\"'agro.angular_components.events_close' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"closeSidebar()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"showReprocessButton\"\r\n id=\"sidebar-reprocess-button\"\r\n [priority]=\"ButtonPriority.Secondary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.reprocess_event' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"openModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n </div>\r\n</s-sidebar>\r\n\r\n<s-dialog\r\n [header]=\"'agro.angular_components.event_modal_title' | libTranslate\"\r\n [(visible)]=\"displayModal\"\r\n size=\"md\"\r\n>\r\n\r\n <div class=\"event-modal-text\">{{ \"agro.angular_components.event_modal\" | libTranslate }}</div>\r\n\r\n <ng-template sTemplate=\"footer\">\r\n <div class=\"flex justify-end gap-2\">\r\n <s-button\r\n id=\"modal-yes\"\r\n [label]=\"'agro.angular_components.yes' | libTranslate\"\r\n iconClass=\"fa fa-check\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n [auxiliary]=\"false\"\r\n (clicked)=\"confirmModal()\"\r\n >\r\n </s-button>\r\n <s-button\r\n id=\"modal-no\"\r\n [label]=\"'agro.angular_components.no' | libTranslate\"\r\n iconClass=\"fa fa-close\"\r\n [priority]=\"ButtonPriority.Secondary\"\r\n [auxiliary]=\"false\"\r\n (clicked)=\"cancelModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </ng-template>\r\n</s-dialog>\r\n", styles: [".frozen{border-left:2px solid #dddddd}:host ::ng-deep #cancel-button-agro-events-lib{background-color:#9c3a3a!important;border-color:#9c3a3a!important}:host ::ng-deep #cancel-button-agro-events-lib:hover{background-color:#642525!important}\n"] }]
|
|
586
587
|
}], ctorParameters: () => [{ type: i1.LibTranslationService }, { type: i2.FormBuilder }, { type: i3.WebsocketService }, { type: i4.EventControlService }, { type: i5.PaginatorStorageService }, { type: i6.EventControlItemService }, { type: i7.ProducerInvoiceService }, { type: i8.MessageService }, { type: i9.DialogService }], propDecorators: { company: [{
|
|
587
588
|
type: Input
|
|
588
589
|
}], branch: [{
|
|
@@ -606,4 +607,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
606
607
|
}], processedEvent: [{
|
|
607
608
|
type: Output
|
|
608
609
|
}] } });
|
|
609
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtY29udHJvbC1ib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY29tcG9uZW50cy9ldmVudC1jb250cm9sLWJvYXJkL2V2ZW50LWNvbnRyb2wtYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NvbXBvbmVudHMvZXZlbnQtY29udHJvbC1ib2FyZC9ldmVudC1jb250cm9sLWJvYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sUUFBUSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQWdDLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQVEsU0FBUyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHN0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUs3RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxF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RUFBRSxPQUFPLEVBQUUsQ0FBQzsrVkFHN0MsT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWdpc3RlckxvY2FsZURhdGEgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCBsb2NhbGVQdCBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvcHRcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBMT0NBTEVfSUQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgU3RlcCwgU3RlcFN0YXRlIH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvc3RlcHBlclwiO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCJwcmltZW5nL2FwaVwiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcInByaW1lbmcvZHluYW1pY2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEFHUk9fTlVNQkVSUyB9IGZyb20gXCIuLi8uLi9lbnVtcy9hZ3JvLW51bWJlcnMuZW51bVwiO1xyXG5pbXBvcnQgeyBMaWJUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbGliLXRyYW5zbGF0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUHJvZHVjZXJJbnZvaWNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9wcm9kdWNlci1pbnZvaWNlXCI7XHJcbmltcG9ydCB7IFdlYnNvY2tldFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvd2Vic29ja2V0XCI7XHJcbmltcG9ydCB7IENhbmNlbEV2ZW50RGlhbG9nQ29uZmlnIH0gZnJvbSBcIi4uL2NhbmNlbC1ldmVudC1kaWFsb2cvY2FuY2VsLWV2ZW50LWRpYWxvZy1jb25maWdcIjtcclxuaW1wb3J0IHsgQ2FuY2VsRXZlbnREaWFsb2dDb21wb25lbnQgfSBmcm9tIFwiLi4vY2FuY2VsLWV2ZW50LWRpYWxvZy9jYW5jZWwtZXZlbnQtZGlhbG9nLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBldmVudEl0ZW0gfSBmcm9tIFwiLi9jb21tb24vZXZlbnQtY29udHJvbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRXZlbnRPcGVyYXRpb24gfSBmcm9tIFwiLi9jb21tb24vZXZlbnQtb3BlcmF0aW9uXCI7XHJcbmltcG9ydCB7IEV2ZW50T3JpZ2luIH0gZnJvbSBcIi4vY29tbW9uL2V2ZW50LW9yaWdpblwiO1xyXG5pbXBvcnQgeyBFdmVudFN0YXR1cyB9IGZyb20gXCIuL2NvbW1vbi9ldmVudC1zdGF0dXNcIjtcclxuaW1wb3J0IHsgaW52b2ljZVR5cGVUcmFuc2xhdGUgfSBmcm9tIFwiLi9jb21tb24vaW5wdXQtZmllbGRzLXRyYW5zbGF0ZVwiO1xyXG5pbXBvcnQgeyBMb29rdXBFcnJvck1lc3NhZ2VzIH0gZnJvbSBcIi4vY29tbW9uL2xvb2t1cC1lcnJvci1tZXNzYWdlLmNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFMDcwRW1wIH0gZnJvbSBcIi4vc2VydmljZS9lMDcwZW1wL2UwNzBlbXBcIjtcclxuaW1wb3J0IHsgRTA3MEZpbCB9IGZyb20gXCIuL3NlcnZpY2UvZTA3MGZpbC9lMDcwZmlsXCI7XHJcbmltcG9ydCB7IEV2ZW50Q29udHJvbEl0ZW0gfSBmcm9tIFwiLi9zZXJ2aWNlL2V2ZW50LWNvbnRyb2wtaXRlbS9ldmVudC1jb250cm9sLWl0ZW1cIjtcclxuaW1wb3J0IHsgRXZlbnRDb250cm9sSXRlbVNlcnZpY2UsIFJlcHJvY2Vzc0ZhaWxlZEV2ZW50IH0gZnJvbSBcIi4vc2VydmljZS9ldmVudC1jb250cm9sLWl0ZW0vZXZlbnQtY29udHJvbC1pdGVtLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXZlbnRDb250cm9sIH0gZnJvbSBcIi4vc2VydmljZS9ldmVudC1jb250cm9sL2V2ZW50LWNvbnRyb2xcIjtcclxuaW1wb3J0IHsgRXZlbnRDb250cm9sU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2UvZXZlbnQtY29udHJvbC9ldmVudC1jb250cm9sLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFnaW5hdG9yU3RvcmFnZVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlL3BhZ2luYXRvci1zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRmllbGRDb25maWcgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9keW5hbWljLWZvcm1cIjtcclxuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcInMtZXZlbnQtY29udHJvbC1ib2FyZFwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9ldmVudC1jb250cm9sLWJvYXJkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vZXZlbnQtY29udHJvbC1ib2FyZC5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTE9DQUxFX0lELCB1c2VWYWx1ZTogXCJwdC1CUlwiIH1dLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXZlbnRDb250cm9sQm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICAgIEBJbnB1dCgpIGNvbXBhbnkhOiBFMDcwRW1wO1xyXG4gICAgQElucHV0KCkgYnJhbmNoITogRTA3MEZpbDtcclxuICAgIEBJbnB1dCgpIGNvbnRyb2xDb2RlITogc3RyaW5nW107XHJcbiAgICBASW5wdXQoKSBldmVudE9yaWdpbiE6IEV2ZW50T3JpZ2luO1xyXG4gICAgQElucHV0KCkgZXZlbnRTdGF0dXMhOiBFdmVudFN0YXR1cztcclxuICAgIEBJbnB1dCgpIGV4dGVybmFsSWQhOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBjcmVhdGVkRGF0ZSE6IERhdGU7XHJcbiAgICBASW5wdXQoKSBzdGFuZGFsb25lITogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHNob3dDYW5jZWxCdXR0b24hOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY2FuY2VsRXZlbnREaWFsb2dDb25maWchOiBDYW5jZWxFdmVudERpYWxvZ0NvbmZpZztcclxuICAgIEBPdXRwdXQoKSBwcm9jZXNzZWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBwdWJsaWMgcHJvZHVjZXJJbnZvaWNlITogYW55O1xyXG5cclxuICAgIHB1YmxpYyBzdGVwczogU3RlcFtdID0gW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRTdGVwOiBhbnk7XHJcbiAgICBwdWJsaWMgZXZlbnRJZCE6IFwiXCI7XHJcbiAgICBwdWJsaWMgc2hvd1NpZGViYXIgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93UmVwcm9jZXNzQnV0dG9uID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2lkZWJhclRpdGxlITogc3RyaW5nO1xyXG4gICAgcHVibGljIHNpZGViYXJMb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgZmlsdGVyRm9ybUdyb3VwITogRm9ybUdyb3VwO1xyXG4gICAgcHVibGljIGZpbHRlckZpZWxkcyE6IEZpZWxkQ29uZmlnW107XHJcblxyXG4gICAgcHVibGljIGdyaWREYXRhITogYW55W107XHJcbiAgICBwdWJsaWMgZ3JpZERhdGFSZXNvbHZlZCE6IGFueVtdO1xyXG4gICAgcHVibGljIGdyaWRDb2x1bW5zITogYW55W107XHJcbiAgICBwdWJsaWMgZ3JpZFRvdGFsUmVjb3JkcyA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgcHVibGljIGdyaWRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZGlzcGxheU1vZGFsID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHJlYWRvbmx5IEJ1dHRvblByaW9yaXR5ID0ge1xyXG4gICAgICAgIFByaW1hcnk6ICdwcmltYXJ5JyBhcyBjb25zdCxcclxuICAgICAgICBTZWNvbmRhcnk6ICdzZWNvbmRhcnknIGFzIGNvbnN0LFxyXG4gICAgICAgIExpbms6ICdsaW5rJyBhcyBjb25zdCxcclxuICAgIH07XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgQmFkZ2VDb2xvcnMgPSB7XHJcbiAgICAgICAgR3JlZW46ICdncmVlbicgYXMgY29uc3QsXHJcbiAgICAgICAgT3JhbmdlOiAnb3JhbmdlJyBhcyBjb25zdCxcclxuICAgICAgICBSZWQ6ICdyZWQnIGFzIGNvbnN0LFxyXG4gICAgICAgIEdyYXk6ICdncmF5JyBhcyBjb25zdCxcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBhbnkgPSB7fTtcclxuICAgIHB1YmxpYyBsb2NhbGVDb25maWc6IGFueSA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50TGlzdFBhcmFtczogYW55ID0ge1xyXG4gICAgICAgIHBhZ2U6IEFHUk9fTlVNQkVSUy5aRVJPLFxyXG4gICAgICAgIHNpemU6IEFHUk9fTlVNQkVSUy5URU4sXHJcbiAgICAgICAgZGlzcGxheUZpZWxkczogdGhpcy5nZXREaXNwbGF5RmllbGRzKCksXHJcbiAgICAgICAgc29ydDogW10sXHJcbiAgICAgICAgZmlsdGVyRGF0YToge31cclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRJdGVtID0gZXZlbnRJdGVtO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnZvaWNlVHlwZVRyYW5zbGF0ZSA9IGludm9pY2VUeXBlVHJhbnNsYXRlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBMaWJUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB3ZWJzb2NrZXRTZXJ2aWNlOiBXZWJzb2NrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRDb250cm9sU2VydmljZTogRXZlbnRDb250cm9sU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlOiBQYWdpbmF0b3JTdG9yYWdlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50Q29udHJvbEl0ZW1TZXJ2aWNlOiBFdmVudENvbnRyb2xJdGVtU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHByb2R1Y2VySW52b2ljZVNlcnZpY2U6IFByb2R1Y2VySW52b2ljZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICByZWdpc3RlckxvY2FsZURhdGEobG9jYWxlUHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmdyaWRDb2x1bW5zID0gdGhpcy5zZXRHcmlkQ29sdW1ucygpO1xyXG4gICAgICAgIHRoaXMuY2FsbFdlYnNvY2tldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlckZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVGb3JtR3JvdXAoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRGb3JtRmllbGRzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBhbnlBbmRCcmFuY2hGb3JtRmllbGRzKGNoYW5nZXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRXZlbnRPcmlnaW5BbmRDb250cm9sQ29kZUZvcm1GaWVsZHMoY2hhbmdlcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVFdmVudFN0YXR1c0FuZENyZWF0ZWREYXRlRm9ybUZpZWxkcyhjaGFuZ2VzKTtcclxuICAgICAgICB0aGlzLm9uU2VhcmNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDb21wYW55QW5kQnJhbmNoRm9ybUZpZWxkcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2NvbXBhbnknXSAmJiBjaGFuZ2VzWydjb21wYW55J10uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydjb21wYW55J10ucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoXCJjb21wYW55XCIpPy5zZXRWYWx1ZShjaGFuZ2VzWydjb21wYW55J10uY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2JyYW5jaCddICYmIGNoYW5nZXNbJ2JyYW5jaCddLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snYnJhbmNoJ10ucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoXCJicmFuY2hcIik/LnNldFZhbHVlKGNoYW5nZXNbJ2JyYW5jaCddLmN1cnJlbnRWYWx1ZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVFdmVudE9yaWdpbkFuZENvbnRyb2xDb2RlRm9ybUZpZWxkcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2V2ZW50T3JpZ2luJ10gJiYgY2hhbmdlc1snZXZlbnRPcmlnaW4nXS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXNbJ2V2ZW50T3JpZ2luJ10ucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoXCJldmVudE9yaWdpblwiKT8uc2V0VmFsdWUoY2hhbmdlc1snZXZlbnRPcmlnaW4nXS5jdXJyZW50VmFsdWUgPz8gbnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlc1snY29udHJvbENvZGUnXSAmJiBjaGFuZ2VzWydjb250cm9sQ29kZSddLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snY29udHJvbENvZGUnXS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldChcImNvbnRyb2xDb2RlXCIpPy5zZXRWYWx1ZShjaGFuZ2VzWydjb250cm9sQ29kZSddLmN1cnJlbnRWYWx1ZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVFdmVudFN0YXR1c0FuZENyZWF0ZWREYXRlRm9ybUZpZWxkcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2V2ZW50U3RhdHVzJ10gJiYgY2hhbmdlc1snZXZlbnRTdGF0dXMnXS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXNbJ2V2ZW50U3RhdHVzJ10ucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoXCJzdGF0dXNcIik/LnNldFZhbHVlKGNoYW5nZXNbJ2V2ZW50U3RhdHVzJ10uY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2NyZWF0ZWREYXRlJ10gJiYgY2hhbmdlc1snY3JlYXRlZERhdGUnXS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXNbJ2NyZWF0ZWREYXRlJ10ucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoXCJjcmVhdGVkRGF0ZVwiKT8uc2V0VmFsdWUoY2hhbmdlc1snY3JlYXRlZERhdGUnXS5jdXJyZW50VmFsdWUgPz8gbnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUZvcm1Hcm91cCgpIHtcclxuICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBjb21wYW55OiBbeyB2YWx1ZTogdGhpcy5jb21wYW55ID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgYnJhbmNoOiBbeyB2YWx1ZTogdGhpcy5icmFuY2ggPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBjb250cm9sQ29kZTogW3sgdmFsdWU6IHRoaXMuY29udHJvbENvZGUgPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBleHRlcm5hbElkOiBbeyB2YWx1ZTogdGhpcy5leHRlcm5hbElkID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgZXZlbnRPcmlnaW46IFt7IHZhbHVlOiB0aGlzLmV2ZW50T3JpZ2luID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgc3RhdHVzOiBbeyB2YWx1ZTogdGhpcy5ldmVudFN0YXR1cyA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBbeyB2YWx1ZTogdGhpcy5jcmVhdGVkRGF0ZSA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRGb3JtRmllbGRzKCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvbXBhbnlcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGlwcycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiYnJhbmNoXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2hpcHMnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvbnRyb2xDb2RlXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2hpcHMnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImV4dGVybmFsSWRcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImV2ZW50T3JpZ2luXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnZW51bScsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwic3RhdHVzXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnZW51bScsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZERhdGVcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRlJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0R3JpZENvbHVtbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgeyBmaWVsZDogXCJjb21wYW55XCIsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmNvbXBhbnlcIikgfSxcclxuICAgICAgICAgICAgeyBmaWVsZDogXCJicmFuY2hcIiwgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubGFiZWxfYnJhbmNoXCIpIH0sXHJcbiAgICAgICAgICAgIHsgZmllbGQ6IFwiZXZlbnRPcmlnaW5cIiwgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXZlbnRfb3JpZ2luX2xhYmVsXCIpIH0sXHJcbiAgICAgICAgICAgIHsgZmllbGQ6IFwiY29udHJvbENvZGVcIiwgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuY29udHJvbF9jb2RlXCIpIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQobnVsbCk7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgdGhpcy53ZWJzb2NrZXRTZXJ2aWNlLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FsbFdlYnNvY2tldCgpIHtcclxuICAgICAgICB0aGlzLndlYnNvY2tldFNlcnZpY2VcclxuICAgICAgICAgICAgLm9uRXZlbnQ8YW55Pih7XHJcbiAgICAgICAgICAgICAgICBkb21haW46IFwiYWdyb1wiLFxyXG4gICAgICAgICAgICAgICAgc2VydmljZTogXCJhZ3JvX2V2ZW50c1wiLFxyXG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlOiBcInByb2Nlc3NlZEV2ZW50XCIsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChtZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5hbElkID0gbWVzc2FnZT8uZGF0YT8uZXh0ZXJuYWxJZDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFleHRlcm5hbElkIHx8IHRoaXMuZXh0ZXJuYWxJZCA9PT0gZXh0ZXJuYWxJZCB8fCB0aGlzLmdyaWREYXRhPy5zb21lKChpdGVtOiBhbnkpID0+IGl0ZW0uZXh0ZXJuYWxJZCA9PT0gZXh0ZXJuYWxJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkRXZlbnQuZW1pdChtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMud2Vic29ja2V0U2VydmljZVxyXG4gICAgICAgICAgICAub25FdmVudDxhbnk+KHtcclxuICAgICAgICAgICAgICAgIGRvbWFpbjogXCJwbGF0Zm9ybVwiLFxyXG4gICAgICAgICAgICAgICAgc2VydmljZTogXCJub3RpZmljYXRpb25zXCIsXHJcbiAgICAgICAgICAgICAgICBwcmltaXRpdmU6IFwidXNlck5vdGlmaWVkXCIsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVHcmlkKHsgZmlsdGVyRGF0YSB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2VhcmNoKCkge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuZ3JpZExvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzZXRHcmlkKHsgZmlsdGVyRGF0YSB9KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldEdyaWQobGlzdFBhcmFtcz86IGFueSkge1xyXG4gICAgICAgIGlmIChsaXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExpc3RQYXJhbXMgPSB7IC4uLnRoaXMuY3VycmVudExpc3RQYXJhbXMsIC4uLmxpc3RQYXJhbXMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5wYWdlID0gQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVHcmlkKGxpc3RQYXJhbXM6IGFueSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcyA9IHsgLi4udGhpcy5jdXJyZW50TGlzdFBhcmFtcywgLi4ubGlzdFBhcmFtcyB9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0Py5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQgPSB0aGlzLnN0YW5kYWxvbmUgP1xyXG4gICAgICAgICAgICAgICAgW3sgZmllbGQ6IFwiY3JlYXRlZERhdGVcIiwgb3JkZXI6IDEgfV0gOlxyXG4gICAgICAgICAgICAgICAgW3sgZmllbGQ6IFwibGFzdE1vZGlmaWVkRGF0ZVwiLCBvcmRlcjogLTEgfV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLmZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRGaWx0ZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudENvbnRyb2xTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5saXN0KHRoaXMuY3VycmVudExpc3RQYXJhbXMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkRGF0YSA9IGxpc3QuY29udGVudHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ3JpZERhdGEgfHwgdGhpcy5ncmlkRGF0YS5sZW5ndGggPD0gQUdST19OVU1CRVJTLlpFUk8pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRXZlbnRDb250cm9sSXRlbXMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXIoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB7IGZpbHRlckRhdGEgfSA9IHRoaXMuY3VycmVudExpc3RQYXJhbXM7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGZpbHRlckRhdGFbXCJjb21wYW55XCJdPy5pZCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2goYGUwNzBlbXAuaWQgZXEgJyR7ZmlsdGVyRGF0YVtcImNvbXBhbnlcIl0uaWR9J2ApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpbHRlckRhdGFbXCJicmFuY2hcIl0/LmlkKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaChgZTA3MGZpbC5pZCBlcSAnJHtmaWx0ZXJEYXRhW1wiYnJhbmNoXCJdLmlkfSdgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xDb2RlID0gZmlsdGVyRGF0YVtcImNvbnRyb2xDb2RlXCJdO1xyXG4gICAgICAgIGlmIChjb250cm9sQ29kZSAmJiBBcnJheS5pc0FycmF5KGNvbnRyb2xDb2RlKSAmJiBjb250cm9sQ29kZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVzID0gY29udHJvbENvZGUubWFwKChjb2RlOiBzdHJpbmcpID0+IHBhcnNlSW50KGNvZGUsIDEwKSkuam9pbihcIixcIik7XHJcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaChgY29udHJvbENvZGUgaW4gKCR7Y29kZXN9KWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpbHRlckRhdGFbXCJleHRlcm5hbElkXCJdKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaChgZXh0ZXJuYWxJZCBlcSAnJHtmaWx0ZXJEYXRhW1wiZXh0ZXJuYWxJZFwiXX0nYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmlsdGVyRGF0YVtcImV2ZW50T3JpZ2luXCJdKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaChgZXZlbnRPcmlnaW4gZXEgJyR7ZmlsdGVyRGF0YVtcImV2ZW50T3JpZ2luXCJdfSdgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXJEYXRhW1wic3RhdHVzXCJdKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaChgZXZlbnRDb250cm9sSXRlbS5zdGF0dXMgZXEgJyR7ZmlsdGVyRGF0YVtcInN0YXR1c1wiXX0nYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmlsdGVyRGF0YVtcImNyZWF0ZWREYXRlXCJdKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaChgY3JlYXRlZERhdGUgZ2UgJyR7dGhpcy5nZXRTdGFydERhdGUoZmlsdGVyRGF0YVtcImNyZWF0ZWREYXRlXCJdKX0nYCk7XHJcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaChgY3JlYXRlZERhdGUgbGUgJyR7dGhpcy5nZXRFbmREYXRlKGZpbHRlckRhdGFbXCJjcmVhdGVkRGF0ZVwiXSl9J2ApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcnMuam9pbihcIiBhbmQgXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RW5kRGF0ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBlbmREYXRlID0gbW9tZW50KHZhbHVlKS5lbmRPZihcImRheVwiKS5mb3JtYXQoXCJZWVlZLU1NLUREVEhIOm1tOnNzXCIpICsgXCJaXCI7XHJcbiAgICAgICAgcmV0dXJuIGVuZERhdGU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldFN0YXJ0RGF0ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBtb21lbnQodmFsdWUpLnN0YXJ0T2YoXCJkYXlcIikuZm9ybWF0KFwiWVlZWS1NTS1ERFRISDptbTpzc1wiKSArIFwiWlwiO1xyXG4gICAgICAgIHJldHVybiBzdGFydERhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXREaXNwbGF5RmllbGRzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAnKicsXHJcbiAgICAgICAgICAgICdjb21wYW55LionLFxyXG4gICAgICAgICAgICAnYnJhbmNoLionLFxyXG4gICAgICAgICAgICAnZXZlbnRDb250cm9sSXRlbS5ldmVudERvbWFpbicsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLmlkJyxcclxuICAgICAgICAgICAgJ2V2ZW50Q29udHJvbEl0ZW0uZXZlbnREb21haW4nLFxyXG4gICAgICAgICAgICAnZXZlbnRDb250cm9sSXRlbS5ldmVudFNlcnZpY2UnLFxyXG4gICAgICAgICAgICAnZXZlbnRDb250cm9sSXRlbS5ldmVudFByaW1pdGl2ZScsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLmV2ZW50Q29udHJvbCcsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLmV2ZW50R3JvdXAnLFxyXG4gICAgICAgICAgICAnZXZlbnRDb250cm9sSXRlbS5zZXF1ZW5jZScsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLmV2ZW50T3BlcmF0aW9uJyxcclxuICAgICAgICAgICAgJ2V2ZW50Q29udHJvbEl0ZW0ub3V0cHV0JyxcclxuICAgICAgICAgICAgJ2V2ZW50Q29udHJvbEl0ZW0uaW5wdXQnLFxyXG4gICAgICAgICAgICAnZXZlbnRDb250cm9sSXRlbS5zdGF0dXMnLFxyXG4gICAgICAgICAgICAnZXZlbnRDb250cm9sSXRlbS5zdWJUaXRsZScsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLm1lc3NhZ2UnLFxyXG4gICAgICAgICAgICAnZXZlbnRDb250cm9sSXRlbS5jcmVhdGVkQnknLFxyXG4gICAgICAgICAgICAnZXZlbnRDb250cm9sSXRlbS5jcmVhdGVkRGF0ZScsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLmxhc3RNb2RpZmllZEJ5JyxcclxuICAgICAgICAgICAgJ2V2ZW50Q29udHJvbEl0ZW0ubGFzdE1vZGlmaWVkRGF0ZScsXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NFdmVudENvbnRyb2xJdGVtcygpIHtcclxuICAgICAgICB0aGlzLmdyaWREYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc29ydGVkSXRlbXMgPSBpdGVtLmV2ZW50Q29udHJvbEl0ZW0uc29ydCgoYTogRXZlbnRDb250cm9sSXRlbSwgYjogRXZlbnRDb250cm9sSXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuc2VxdWVuY2UgLSBiLnNlcXVlbmNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3Qgc3RlcHMgPSBzb3J0ZWRJdGVtcy5tYXAoKGRldGFpbDogRXZlbnRDb250cm9sSXRlbSwgaW5kZXg6IG51bWJlcikgPT4gdGhpcy5jcmVhdGVTdGVwKGRldGFpbCwgaXRlbSwgaW5kZXgpKTtcclxuICAgICAgICAgICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLmNhbGN1bGF0ZUFjdGl2ZUluZGV4KHNvcnRlZEl0ZW1zKTtcclxuICAgICAgICAgICAgaXRlbS5ncm91cHMgPSBbeyBzdGVwcywgYWN0aXZlSW5kZXggfV07XHJcbiAgICAgICAgICAgIGl0ZW0uYWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmdyaWREYXRhUmVzb2x2ZWQgPSB0aGlzLmdyaWREYXRhO1xyXG4gICAgICAgIHRoaXMuZ3JpZExvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbGN1bGF0ZUFjdGl2ZUluZGV4KGRldGFpbHM6IEV2ZW50Q29udHJvbEl0ZW1bXSk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgbGFzdEFjdGl2ZSA9IGRldGFpbHMucmVkdWNlKFxyXG4gICAgICAgICAgICAobGFzdEluZGV4LCBkZXRhaWwsIGN1cnJlbnRJbmRleCkgPT4gKGRldGFpbC5zdGF0dXMgIT09IEV2ZW50U3RhdHVzLlBFTkRJTkcgPyBjdXJyZW50SW5kZXggOiBsYXN0SW5kZXgpLFxyXG4gICAgICAgICAgICAtMVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGxhc3RBY3RpdmUgIT09IC0xICYmIGRldGFpbHNbbGFzdEFjdGl2ZV0uc3RhdHVzID09PSBFdmVudFN0YXR1cy5TVUNDRVNTKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsYXN0QWN0aXZlICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxhc3RBY3RpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVTdGVwKGRldGFpbDogRXZlbnRDb250cm9sSXRlbSwgaXRlbTogRXZlbnRDb250cm9sLCBkZXRhaWxJbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0RldGFpbDonLCBkZXRhaWwpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGl0ZW06IGRldGFpbCxcclxuICAgICAgICAgICAgY29udHJvbENvZGU6IGl0ZW0uY29udHJvbENvZGUsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZTogaXRlbS5ldmVudE9yaWdpbixcclxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0RXZlbnRMYWJlbChkZXRhaWwpLFxyXG4gICAgICAgICAgICBzdWJMYWJlbDogdGhpcy5mb3JtYXRTdWJ0aXRsZShkZXRhaWwpLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogZGV0YWlsLnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuUEVORElORyAmJiBkZXRhaWxJbmRleCAhPT0gdGhpcy5jYWxjdWxhdGVBY3RpdmVJbmRleChpdGVtLmV2ZW50Q29udHJvbEl0ZW0pLFxyXG4gICAgICAgICAgICB0b29sdGlwOiB0aGlzLmdldEV2ZW50TGFiZWwoZGV0YWlsKSxcclxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGV0ZXJtaW5lU3RlcFN0YXRlKGRldGFpbCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRldGVybWluZVN0ZXBTdGF0ZShkZXRhaWw6IHsgc3RhdHVzOiBFdmVudFN0YXR1cyB9KTogU3RlcFN0YXRlIHtcclxuICAgICAgICBpZiAoZGV0YWlsLnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuU1VDQ0VTUykge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RlcFN0YXRlLlN1Y2Nlc3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZXRhaWwuc3RhdHVzID09PSBFdmVudFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0ZXBTdGF0ZS5XYXJuaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gU3RlcFN0YXRlLkRlZmF1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRFdmVudExhYmVsKGRldGFpbDogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBldmVudExhYmVsID0gdGhpcy5ldmVudEl0ZW0uZmluZCgoZSkgPT4gZS52YWx1ZSA9PT0gZGV0YWlsLmV2ZW50T3BlcmF0aW9uKT8ubGFiZWw7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0dldHRpbmcgbGFiZWwgZm9yIGV2ZW50IG9wZXJhdGlvbjonLCBldmVudExhYmVsKTtcclxuICAgICAgICBpZiAoZXZlbnRMYWJlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChldmVudExhYmVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbG9jYWxMYWJlbCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5cIiArIGRldGFpbC5ldmVudE9wZXJhdGlvbik7XHJcbiAgICAgICAgaWYgKGxvY2FsTGFiZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsTGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZXRhaWwuZXZlbnRPcGVyYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmb3JtYXRTdWJ0aXRsZShkZXRhaWw6IEV2ZW50Q29udHJvbEl0ZW0pOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBjb25zdCB7IGV2ZW50T3BlcmF0aW9uLCBzdWJUaXRsZSB9ID0gZGV0YWlsO1xyXG5cclxuICAgICAgICBjb25zdCBpbnZvaWNlT3BlcmF0aW9ucyA9IFtcclxuICAgICAgICAgICAgRXZlbnRPcGVyYXRpb24uQ1JFQVRFX0lOVk9JQ0VfRklYQVRJT04sXHJcbiAgICAgICAgICAgIEV2ZW50T3BlcmF0aW9uLkNBTkNFTF9JTlZPSUNFX0ZJWEFUSU9OLFxyXG4gICAgICAgICAgICBFdmVudE9wZXJhdGlvbi5PUklHSU5BVElPTl9DUkVBVEVfSU5WT0lDRVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IG51bWJlclByZWZpeE9wZXJhdGlvbnMgPSBbXHJcbiAgICAgICAgICAgIEV2ZW50T3BlcmF0aW9uLkNMT1NFX0lOVk9JQ0VfRklYQVRJT04sXHJcbiAgICAgICAgICAgIEV2ZW50T3BlcmF0aW9uLlJFT1BFTl9JTlZPSUNFX0ZJWEFUSU9OXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3QgcHJlc2NyaXB0aW9uT3BlcmF0aW9ucyA9IFtcclxuICAgICAgICAgICAgRXZlbnRPcGVyYXRpb24uUFJFU0NSSVBUSU9OX0RBVEFfTE9BRF9QUk9EVUNUX1RZUEUsXHJcbiAgICAgICAgICAgIEV2ZW50T3BlcmF0aW9uLlBSRVNDUklQVElPTl9EQVRBX0xPQURfQUNUSVZFX1BSSU5DSVBMRSxcclxuICAgICAgICAgICAgRXZlbnRPcGVyYXRpb24uUFJFU0NSSVBUSU9OX0RBVEFfTE9BRF9GT1JNVUxBVElPTixcclxuICAgICAgICAgICAgRXZlbnRPcGVyYXRpb24uUFJFU0NSSVBUSU9OX0RBVEFfTE9BRF9CVUxMRVRJTixcclxuICAgICAgICAgICAgRXZlbnRPcGVyYXRpb24uUFJFU0NSSVBUSU9OX0RBVEFfTE9BRF9BUFBMSUNBVElPTl9VTklULFxyXG4gICAgICAgICAgICBFdmVudE9wZXJhdGlvbi5QUkVTQ1JJUFRJT05fREFUQV9MT0FEX1NQRUNJRSxcclxuICAgICAgICAgICAgRXZlbnRPcGVyYXRpb24uUFJFU0NSSVBUSU9OX0RBVEFfTE9BRF9BUFBMSUNBVElPTl9UWVBFLFxyXG4gICAgICAgICAgICBFdmVudE9wZXJhdGlvbi5QUkVTQ1JJUFRJT05fREFUQV9MT0FEX1BST0JMRU1TLFxyXG4gICAgICAgICAgICBFdmVudE9wZXJhdGlvbi5QUkVTQ1JJUFRJT05fREFUQV9MT0FEX0FQUExJQ0FUSU9OXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgbGV0IGZvcm1hdHRlZFN1YnRpdGxlOiBzdHJpbmcgfCBudWxsID0gc3ViVGl0bGUgPz8gbnVsbDtcclxuICAgICAgICBpZiAoaW52b2ljZU9wZXJhdGlvbnMuaW5jbHVkZXMoZXZlbnRPcGVyYXRpb24pKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5pbnZvaWNlVHlwZVRyYW5zbGF0ZS5maW5kKChlKSA9PiBlLnZhbHVlID09PSBzdWJUaXRsZSk/LmxhYmVsO1xyXG4gICAgICAgICAgICBmb3JtYXR0ZWRTdWJ0aXRsZSA9IGxhYmVsID8gdGhpcy50cmFuc2xhdGUuaW5zdGFudChsYWJlbCkgOiAoc3ViVGl0bGUgPz8gbnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobnVtYmVyUHJlZml4T3BlcmF0aW9ucy5pbmNsdWRlcyhldmVudE9wZXJhdGlvbikpIHtcclxuICAgICAgICAgICAgZm9ybWF0dGVkU3VidGl0bGUgPSBzdWJUaXRsZSA/IGBuwrAgJHtzdWJUaXRsZX1gIDogKHN1YlRpdGxlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHByZXNjcmlwdGlvbk9wZXJhdGlvbnMuaW5jbHVkZXMoZXZlbnRPcGVyYXRpb24pKSB7XHJcbiAgICAgICAgICAgIGZvcm1hdHRlZFN1YnRpdGxlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubmV3X3ByZXNjcmlwdGlvbl9wYWdlJywgeyBjb3VudDogc3ViVGl0bGUgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkU3VidGl0bGU7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBwdWJsaWMgb25HcmlkQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gZXZlbnQ/LnJvd3M7XHJcbiAgICAgICAgY29uc3QgcGFnZSA9IGV2ZW50Py5maXJzdCAvIHNpemU7XHJcbiAgICAgICAgY29uc3Qgc29ydCA9IGV2ZW50Lm11bHRpU29ydE1ldGE7XHJcbiAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHNpemUgIT09IEFHUk9fTlVNQkVSUy5URU4gfHwgcGFnZSAhPT0gQUdST19OVU1CRVJTLlpFUk8gfHwgKHNvcnQgJiYgc29ydC5sZW5ndGggPiBBR1JPX05VTUJFUlMuWkVSTykpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JTdG9yYWdlU2VydmljZS5zdG9yZVBhZ2luYXRvcihcIkV2ZW50Q29udHJvbEJvYXJkUGFnaW5hdG9yXCIsIHsgcGFnZSwgc2l6ZSwgc29ydCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUdyaWQoeyBwYWdlLCBzaXplLCBzb3J0IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYWdlU2l6ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zaXplO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRSb3dJbmRleCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5wYWdlICogdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zaXplO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTb3J0RmllbGQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQgfHwgdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0Lmxlbmd0aCA8PSBBR1JPX05VTUJFUlMuWkVSTykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkQ29sdW1uc1tBR1JPX05VTUJFUlMuWkVST10uZmllbGQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnRbQUdST19OVU1CRVJTLlpFUk9dLmZpZWxkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTb3J0T3JkZXIoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQgfHwgdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0Lmxlbmd0aCA8PSBBR1JPX05VTUJFUlMuWkVSTykge1xyXG4gICAgICAgICAgICByZXR1cm4gQUdST19OVU1CRVJTLk9ORTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnRbQUdST19OVU1CRVJTLlpFUk9dLm9yZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFcnJvck1lc3NhZ2VzKCkge1xyXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRFcnJvck1lc3NhZ2VzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gTG9va3VwRXJyb3JNZXNzYWdlcykge1xyXG4gICAgICAgICAgICBpZiAoTG9va3VwRXJyb3JNZXNzYWdlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXQoTG9va3VwRXJyb3JNZXNzYWdlc1trZXldKS5zdWJzY3JpYmUoKHJlczogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZEVycm9yTWVzc2FnZXNba2V5XSA9IHJlcztcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkRXJyb3JNZXNzYWdlcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9kdWNlckludm9pY2VJZEZyb21QYXJhbXMocGFyYW06IGFueSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmICghcGFyYW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBwYXJhbS5wcm9kdWNlckludm9pY2VJZHM/LlswXSxcclxuICAgICAgICAgICAgcGFyYW0uaW52b2ljZT8uZ2VuZXJhbERhdGE/LnRyYW5zYWN0aW9uYWxJZCxcclxuICAgICAgICAgICAgcGFyYW0ucHJvZHVjZXJJbnZvaWNlSWQsXHJcbiAgICAgICAgICAgIHBhcmFtLmV4dGVybmFsSWQsXHJcbiAgICAgICAgICAgIHBhcmFtLmV4dGVybmFsSW52b2ljZUlkcz8uWzBdLFxyXG4gICAgICAgIF0uZmluZCgoaWQpID0+IGlkKSA/PyBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2R1Y2VyQmFsYW5jZUVudHJ5Q29udHJvbElkRnJvbVBhcmFtcyhwYXJhbTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgeyBwcm9kdWNlckJhbGFuY2VFbnRyeUNvbnRyb2xJZCB9ID0gcGFyYW07XHJcbiAgICAgICAgcmV0dXJuIHByb2R1Y2VyQmFsYW5jZUVudHJ5Q29udHJvbElkID8gcHJvZHVjZXJCYWxhbmNlRW50cnlDb250cm9sSWQgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGVwU2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gZXZlbnQuc3RlcDtcclxuICAgICAgICB0aGlzLmFwcGx5U2lkZWJhclRpdGxlKFwiXCIpO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRTdGVwLmV2ZW50VHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEV2ZW50T3JpZ2luLkJBTEFOQ0VfRU5UUllfQ09OVFJPTDpcclxuICAgICAgICAgICAgY2FzZSBFdmVudE9yaWdpbi5USUNLRVQ6XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRPcmlnaW4uSU5WT0lDRTpcclxuICAgICAgICAgICAgY2FzZSBFdmVudE9yaWdpbi5DUkVBVEVfSU5WT0lDRTpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2lkZWJhckxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gSlNPTi5wYXJzZSh0aGlzLnNlbGVjdGVkU3RlcC5pdGVtLmlucHV0KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWNlckludm9pY2VJZCA9IHRoaXMuZ2V0UHJvZHVjZXJJbnZvaWNlSWRGcm9tUGFyYW1zKHBhcmFtKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2R1Y2VySW52b2ljZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VyQmFsYW5jZUVudHJ5Q29udHJvbElkID0gdGhpcy5nZXRQcm9kdWNlckJhbGFuY2VFbnRyeUNvbnRyb2xJZEZyb21QYXJhbXMocGFyYW0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9kdWNlckJhbGFuY2VFbnRyeUNvbnRyb2xJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGBwcm9kdWNlckJhbGFuY2VFbnRyeUNvbnRyb2wuaWQgZXEgJyR7cHJvZHVjZXJCYWxhbmNlRW50cnlDb250cm9sSWR9J2A7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBgaWQgZXEgJyR7cHJvZHVjZXJJbnZvaWNlSWR9J2A7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y2VySW52b2ljZVNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmxpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkczogW1wiKlwiLCBcInByb2R1Y2VyQmFsYW5jZUVudHJ5Q29udHJvbC4qXCIsIFwicHJvZHVjZXJCYWxhbmNlRW50cnlDb250cm9sLnByb2R1Y2VyLipcIl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjZXJJbnZvaWNlID0gcmVzdWx0Py5jb250ZW50c1swXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y2VySW52b2ljZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZGViYXJMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVNpZGViYXJUaXRsZSh0aGlzLmdldFByb2R1Y2VySW52b2ljZU51bWJlckFuZFNlcmllKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZGViYXJMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFdmVudE9yaWdpbi5GSVhBVElPTjpcclxuICAgICAgICAgICAgY2FzZSBFdmVudE9yaWdpbi5DQU5DRUxfRklYQVRJT046XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRPcmlnaW4uQ0hBTkdFX1JFUVVFU1Q6XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRPcmlnaW4uVFJBTlNGRVI6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2hvd1JlcHJvY2Vzc0J1dHRvbiA9IGV2ZW50LnN0ZXAuc3RhdGUgPT09IFN0ZXBTdGF0ZS5XYXJuaW5nO1xyXG5cclxuICAgICAgICB0aGlzLnNob3dTaWRlYmFyID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGx5U2lkZWJhclRpdGxlKHRpdGxlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNpZGViYXJUaXRsZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ldmVudF9zaWRlYmFyX3RpdGxlXCIsIHsgZXZlbnROdW1iZXI6IHRpdGxlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UHJvZHVjZXJJbnZvaWNlTnVtYmVyQW5kU2VyaWUoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9kdWNlckludm9pY2U/Lm51bWJlciAmJiB0aGlzLnByb2R1Y2VySW52b2ljZT8uc2VyaWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLnByb2R1Y2VySW52b2ljZS5udW1iZXJ9IC0gJHt0aGlzLnByb2R1Y2VySW52b2ljZS5zZXJpZXN9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcHJvY2Vzc0V2ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHJlcHJvY2Vzc0V2ZW50T2JqOiBSZXByb2Nlc3NGYWlsZWRFdmVudCA9IHtcclxuICAgICAgICAgICAgZXZlbnRDb250cm9sSXRlbUlkOiB0aGlzLnNlbGVjdGVkU3RlcC5pdGVtLmlkLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5ldmVudENvbnRyb2xJdGVtU2VydmljZVxyXG4gICAgICAgICAgICAucmVwcm9jZXNzRmFpbGVkRXZlbnQocmVwcm9jZXNzRXZlbnRPYmopXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJpbmZvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMucmVwcm9jZXNzaW5nX2V2ZW50X21lc3NhZ2VfdGl0bGVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5yZXByb2Nlc3NpbmdfZXZlbnRfbWVzc2FnZV9kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXJyb3JfcmVwcm9jZXNzaW5nX2V2ZW50X21lc3NhZ2VfdGl0bGVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5lcnJvcl9yZXByb2Nlc3NpbmdfZXZlbnRfbWVzc2FnZV9kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZE1lc3NhZ2Uoc2V2ZXJpdHk6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nLCBkZXRhaWw6IHN0cmluZywgbGlmZSA9IEFHUk9fTlVNQkVSUy5GSVZFX1NFQ09ORFMpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICAgIHNldmVyaXR5LFxyXG4gICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHN1bW1hcnkpLFxyXG4gICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZGV0YWlsKSxcclxuICAgICAgICAgICAgbGlmZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3Blbk1vZGFsKCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheU1vZGFsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dTaWRlYmFyID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYW5jZWxNb2RhbCgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmNhbmNlbEV2ZW50RGlhbG9nQ29uZmlnLmJlZm9yZU9wZW4/LigpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENhbmNlbEV2ZW50RGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy5jYW5jZWxFdmVudERpYWxvZ0NvbmZpZz8uaGVhZGVyLFxyXG4gICAgICAgICAgICBjb250ZW50U3R5bGU6IHsgaGVpZ2h0OiBcIjEwMCVcIiB9LFxyXG4gICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGRhdGE6IHsgY2FuY2VsRXZlbnREaWFsb2dDb25maWc6IHRoaXMuY2FuY2VsRXZlbnREaWFsb2dDb25maWcgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29uZmlybU1vZGFsKCkge1xyXG4gICAgICAgIHRoaXMucmVwcm9jZXNzRXZlbnQoKTtcclxuICAgICAgICB0aGlzLmRpc3BsYXlNb2RhbCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxNb2RhbCgpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlNb2RhbCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbG9zZVNpZGViYXIoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2lkZWJhciA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKnNMb2FkaW5nU3RhdGU9XCJncmlkTG9hZGluZ1wiPlxyXG4gICAgPHAtcGFuZWw+XHJcbiAgICAgICAgPHAtaGVhZGVyPlxyXG4gICAgICAgICAgICB7eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmV2ZW50X2NvbnRyb2xfaGVhZGVyXCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICA8L3AtaGVhZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1nLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8cy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICBpZD1cInJlZnJlc2gtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJpb3JpdHldPVwiQnV0dG9uUHJpb3JpdHkuUHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtcmVmcmVzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5yZWZyZXNoJyB8IGxpYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VhcmNoKClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9zLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhbmRhbG9uZSAmJiBzaG93Q2FuY2VsQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cImNhbmNlbC1idXR0b24tYWdyby1ldmVudHMtbGliXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS10aW1lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jYW5jZWwnIHwgbGliVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNhbmNlbE1vZGFsKClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9zLWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVpLWdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpLWctMTIgdWktbWQtMTJcIiAqbmdJZj1cIiFncmlkRGF0YSB8fCBncmlkRGF0YT8ubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8cy1lbXB0eS1zdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGljb25DbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ub3RoaW5nX2ZvdW5kJyB8IGxpYlRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dQcmltYXJ5QWN0aW9uXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cInt7ICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy50YWJsZV9lbXB0eV9kZXNjcmlwdGlvbicgfCBsaWJUcmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9zLWVtcHR5LXN0YXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyaWREYXRhLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVsYXNzPVwiY3VzdG9tLXRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAjZXZlbnRDb250cm9sVGFibGVcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ3JpZERhdGFSZXNvbHZlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiZ3JpZENvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFLZXk9XCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhenldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BhZ2luYXRvcl09XCIhc3RhbmRhbG9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJncmlkVG90YWxSZWNvcmRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbcm93c109XCIxMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Jlc3BvbnNpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uTGF6eUxvYWQpPVwib25HcmlkQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzb3J0T3JkZXJdPVwiZ2V0U29ydE9yZGVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmaXJzdF09XCJnZXRSb3dJbmRleCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGF6eUxvYWRPbkluaXRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRNb2RlPVwibXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImdldFBhZ2VTaXplKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzEwLCAyMCwgNTAsIDEwMF1cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdGFuZGFsb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiIGNsYXNzPVwidWktbGctMSB1aS1tZC0xXCIgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wuZmllbGRcIiBzY29wZT1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VuaW9yLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZW5pb3ItaGVhZGVyLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXNvcnRJY29uIFtmaWVsZF09XCJjb2wuZmllbGRcIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInVpLWxnLTggdWktbWQtN1wiIHNjb3BlPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5wYW5lbF90aXRsZV9ldmVudHNfZXZlbnRzXCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3dEYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN0YW5kYWxvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ1aS1sZy0xIHVpLW1kLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcm93RGF0YS5lMDcwZW1wPy5ub21FbXAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInVpLWxnLTEgdWktbWQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByb3dEYXRhLmUwNzBmaWw/Lm5vbUZpbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidWktbGctMSB1aS1tZC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInJvd0RhdGEuZXZlbnRPcmlnaW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInQkFMQU5DRV9FTlRSWV9DT05UUk9MJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuYmFsYW5jZV9lbnRyeV9jb250cm9sX2V2ZW50XCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInVElDS0VUJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMudGlja2V0X21haW50ZW5hbmNlX2hlYWRlclwiIHwgbGliVHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ1RSQU5TRkVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMudHJhbnNmZXJfb3JpZ2luX2V2ZW50XCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInSU5WT0lDRSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLkNSRUFURV9JTlZPSUNFX0ZJWEFUSU9OXCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInQ0hBTkdFX1JFUVVFU1QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jaGFuZ2VfcmVxdWVzdF9ldmVudFwiIHwgbGliVHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ0ZJWEFUSU9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZml4YXRpb25fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidDQU5DRUxfRklYQVRJT04nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jYW5jZWxfZml4YXRpb25fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidUUkFOU0ZFUl9DQU5DRUxMQVRJT04nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy50cmFuc2Zlcl9jYW5jZWxsYXRpb25fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidBR1JPTk9NSUNfUFJFU0NSSVBUSU9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuYWdyb25vbWljX3ByZXNjcmlwdGlvbl9vcmlnaW5fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidQUkVTQ1JJUFRJT05fSU5URUdSQVRJT05fSFVCJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuYWdyb25vbWljX3ByZXNjcmlwdGlvbl9vcmlnaW5fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInVpLWxnLTEgdWkgdWktbWQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByb3dEYXRhLmNvbnRyb2xDb2RlIHx8IFwiXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ1aS1sZy04IHVpLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiByb3dEYXRhLmdyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cy1ldmVudC1zdGVwc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0ZXBzXT1cImdyb3VwLnN0ZXBzIHx8IFtdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJbmRleF09XCJncm91cC5hY3RpdmVJbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RlcFNlbGVjdGVkKT1cInN0ZXBTZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3MtZXZlbnQtc3RlcHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiIXN0YW5kYWxvbmVcIiBwVGVtcGxhdGU9XCJwYWdpbmF0b3JyaWdodFwiIGNsYXNzPVwiY3VzdG9tLXRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5yZWdpc3RlcnNfZm91bmRcIiB8IGxpYlRyYW5zbGF0ZTogeyB0b3RhbDogZ3JpZFRvdGFsUmVjb3JkcyB9IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9wLXRhYmxlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvcC1wYW5lbD5cclxuPC9uZy1jb250YWluZXI+XHJcbjxzLXNpZGViYXJcclxuICAgIFt2aXNpYmxlXT1cInNob3dTaWRlYmFyXCJcclxuICAgICh2aXNpYmxlQ2hhbmdlKT1cImNsb3NlU2lkZWJhcigpXCJcclxuICAgIGhlYWRlcj1cInt7ICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ldmVudF9kZXRhaWxzX2hlYWRlcicgfCBsaWJUcmFuc2xhdGUgfX1cIlxyXG4+XHJcbiAgICA8ZGl2IGNsYXNzPVwidWktZmx1aWRcIj5cclxuICAgICAgICA8cC1maWVsZHNldCBbbGVnZW5kXT1cInNpZGViYXJUaXRsZVwiIFt0b2dnbGVhYmxlXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1nXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZy00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPjxzdHJvbmc+e3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ldmVudF9vcmlnaW5fbGFiZWxcIiB8IGxpYlRyYW5zbGF0ZSB9fTwvc3Ryb25nPjwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzZWxlY3RlZFN0ZXA/LmV2ZW50VHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ0JBTEFOQ0VfRU5UUllfQ09OVFJPTCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuYmFsYW5jZV9lbnRyeV9jb250cm9sX2V2ZW50XCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ1RJQ0tFVCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMudGlja2V0X21haW50ZW5hbmNlX2hlYWRlclwiIHwgbGliVHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nU3dpdGNoQ2FzZT1cIidUUkFOU0ZFUidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMudHJhbnNmZXJfb3JpZ2luX2V2ZW50XCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ0lOVk9JQ0UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLkNSRUFURV9JTlZPSUNFX0ZJWEFUSU9OXCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ0NIQU5HRV9SRVFVRVNUJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jaGFuZ2VfcmVxdWVzdF9ldmVudFwiIHwgbGliVHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nU3dpdGNoQ2FzZT1cIidGSVhBVElPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZml4YXRpb25fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInQ0FOQ0VMX0ZJWEFUSU9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jYW5jZWxfZml4YXRpb25fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInVFJBTlNGRVJfQ0FOQ0VMTEFUSU9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy50cmFuc2Zlcl9jYW5jZWxsYXRpb25fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInQUdST05PTUlDX1BSRVNDUklQVElPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuYWdyb25vbWljX3ByZXNjcmlwdGlvbl9vcmlnaW5fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInUFJFU0NSSVBUSU9OX0lOVEVHUkFUSU9OX0hVQidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuYWdyb25vbWljX3ByZXNjcmlwdGlvbl9vcmlnaW5fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1nLTRcIiAqbmdJZj1cInByb2R1Y2VySW52b2ljZT8ucHJvZHVjZXJCYWxhbmNlRW50cnlDb250cm9sLnByb2R1Y2VyLmUwMDFwZXMubm9tUGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPjxzdHJvbmc+e3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5zdXBwbGllclwiIHwgbGliVHJhbnNsYXRlIH19PC9zdHJvbmc+PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IHByb2R1Y2VySW52b2ljZT8ucHJvZHVjZXJCYWxhbmNlRW50cnlDb250cm9sLnByb2R1Y2VyLmUwMDFwZXMubm9tUGVzIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZy00XCIgKm5nSWY9XCJwcm9kdWNlckludm9pY2U/LnByb2R1Y2VyQmFsYW5jZUVudHJ5Q29udHJvbC5ydXJhbEVzdGF0ZS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPjxzdHJvbmc+e3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ydXJhbF9lc3RhdGVcIiB8IGxpYlRyYW5zbGF0ZSB9fTwvc3Ryb25nPjwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8cD57eyBwcm9kdWNlckludm9pY2U/LnByb2R1Y2VyQmFsYW5jZUVudHJ5Q29udHJvbC5ydXJhbEVzdGF0ZS5uYW1lIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZy00XCIgKm5nSWY9XCJzZWxlY3RlZFN0ZXA/LmNvbnRyb2xDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPjxzdHJvbmc+e3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jb250cm9sX2NvZGVcIiB8IGxpYlRyYW5zbGF0ZSB9fTwvc3Ryb25nPjwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8cD57eyBzZWxlY3RlZFN0ZXA/LmNvbnRyb2xDb2RlIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZy00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPjxzdHJvbmc+e3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5zdGF0dXNfbGFiZWxcIiB8IGxpYlRyYW5zbGF0ZSB9fTwvc3Ryb25nPjwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzZWxlY3RlZFN0ZXA/Lml0ZW0uc3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInU1VDQ0VTUydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzLWJhZGdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIkJhZGdlQ29sb3JzLkdyZWVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PVwie3sgJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLnBhbmVsX3RpdGxlX2V2ZW50c19jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5JyB8IGxpYlRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zLWJhZGdlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInUFJPQ0VTU0lORydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzLWJhZGdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIkJhZGdlQ29sb3JzLk9yYW5nZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD1cInt7ICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5wcm9jZXNzaW5nJyB8IGxpYlRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zLWJhZGdlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInRkFJTEVEJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHMtYmFkZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiQmFkZ2VDb2xvcnMuUmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PVwie3sgJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLnBhbmVsX3RpdGxlX2V2ZW50c19lbmRlZF93aXRoX2Vycm9yJyB8IGxpYlRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zLWJhZGdlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInUEVORElORydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzLWJhZGdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIkJhZGdlQ29sb3JzLkdyYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJ7eyAnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMucGVuZGluZycgfCBsaWJUcmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcy1iYWRnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZy00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPjxzdHJvbmc+e3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5sYXN0X3VwZGF0ZV9kYXRlXCIgfCBsaWJUcmFuc2xhdGUgfX08L3N0cm9uZz48L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHA+e3sgc2VsZWN0ZWRTdGVwPy5pdGVtLmxhc3RNb2RpZmllZERhdGUgfCBkYXRlOiBcImRkL01NL3l5eXkgSEg6bW06c3NcIiB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpLWctNFwiICpuZ0lmPVwic2VsZWN0ZWRTdGVwPy5pdGVtLnN0YXR1cyA9PT0gJ0ZBSUxFRCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PHN0cm9uZz57eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmV2ZW50X2Vycm9yX21lc3NhZ2VcIiB8IGxpYlRyYW5zbGF0ZSB9fTwvc3Ryb25nPjwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8cD57eyBzZWxlY3RlZFN0ZXA/Lml0ZW0ubWVzc2FnZSB8fCBcIi1cIiB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3AtZmllbGRzZXQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzLWZvb3RlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1nLTEyIHdpZHRoLWZpdFwiPlxyXG4gICAgICAgICAgICAgICAgPHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzaWRlYmFyLWNsb3NlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ByaW9yaXR5XT1cIkJ1dHRvblByaW9yaXR5LlByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXZlbnRzX2Nsb3NlJyB8IGxpYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlU2lkZWJhcigpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwvcy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8cy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dSZXByb2Nlc3NCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwic2lkZWJhci1yZXByb2Nlc3MtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJpb3JpdHldPVwiQnV0dG9uUHJpb3JpdHkuU2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS1yZWZyZXNoXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLnJlcHJvY2Vzc19ldmVudCcgfCBsaWJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdXhpbGlhcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuTW9kYWwoKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L3MtYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3Mtc2lkZWJhcj5cclxuXHJcbjxwLWRpYWxvZyBbaGVhZGVyXT1cIidhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ldmVudF9tb2RhbF90aXRsZScgfCBsaWJUcmFuc2xhdGVcIiBbKHZpc2libGUpXT1cImRpc3BsYXlNb2RhbFwiIFttb2RhbF09XCJ0cnVlXCIgY2xhc3M9XCJkaWFsb2dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJldmVudC1tb2RhbC10ZXh0XCI+e3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ldmVudF9tb2RhbFwiIHwgbGliVHJhbnNsYXRlIH19PC9kaXY+XHJcbiAgICA8cC1mb290ZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVpLWRpYWxvZy1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBpZD1cIm1vZGFsLXllc1wiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1jaGVja1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29uZmlybU1vZGFsKClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLnllcycgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGlkPVwibW9kYWwtbm9cIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtY2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbE1vZGFsKClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLm5vJyB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvcC1mb290ZXI+XHJcbjwvcC1kaWFsb2c+XHJcbiJdfQ==
|
|
610
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtY29udHJvbC1ib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY29tcG9uZW50cy9ldmVudC1jb250cm9sLWJvYXJkL2V2ZW50LWNvbnRyb2wtYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NvbXBvbmVudHMvZXZlbnQtY29udHJvbC1ib2FyZC9ldmVudC1jb250cm9sLWJvYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sUUFBUSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQWdDLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQVEsU0FBUyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHN0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUs3RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxF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LEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQzsrVkFHN0MsT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWdpc3RlckxvY2FsZURhdGEgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCBsb2NhbGVQdCBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvcHRcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBMT0NBTEVfSUQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgU3RlcCwgU3RlcFN0YXRlIH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvc3RlcHBlclwiO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCJwcmltZW5nL2FwaVwiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcInByaW1lbmcvZHluYW1pY2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEFHUk9fTlVNQkVSUyB9IGZyb20gXCIuLi8uLi9lbnVtcy9hZ3JvLW51bWJlcnMuZW51bVwiO1xyXG5pbXBvcnQgeyBMaWJUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbGliLXRyYW5zbGF0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUHJvZHVjZXJJbnZvaWNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9wcm9kdWNlci1pbnZvaWNlXCI7XHJcbmltcG9ydCB7IFdlYnNvY2tldFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvd2Vic29ja2V0XCI7XHJcbmltcG9ydCB7IENhbmNlbEV2ZW50RGlhbG9nQ29uZmlnIH0gZnJvbSBcIi4uL2NhbmNlbC1ldmVudC1kaWFsb2cvY2FuY2VsLWV2ZW50LWRpYWxvZy1jb25maWdcIjtcclxuaW1wb3J0IHsgQ2FuY2VsRXZlbnREaWFsb2dDb21wb25lbnQgfSBmcm9tIFwiLi4vY2FuY2VsLWV2ZW50LWRpYWxvZy9jYW5jZWwtZXZlbnQtZGlhbG9nLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBldmVudEl0ZW0gfSBmcm9tIFwiLi9jb21tb24vZXZlbnQtY29udHJvbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRXZlbnRPcGVyYXRpb24gfSBmcm9tIFwiLi9jb21tb24vZXZlbnQtb3BlcmF0aW9uXCI7XHJcbmltcG9ydCB7IEV2ZW50T3JpZ2luIH0gZnJvbSBcIi4vY29tbW9uL2V2ZW50LW9yaWdpblwiO1xyXG5pbXBvcnQgeyBFdmVudFN0YXR1cyB9IGZyb20gXCIuL2NvbW1vbi9ldmVudC1zdGF0dXNcIjtcclxuaW1wb3J0IHsgaW52b2ljZVR5cGVUcmFuc2xhdGUgfSBmcm9tIFwiLi9jb21tb24vaW5wdXQtZmllbGRzLXRyYW5zbGF0ZVwiO1xyXG5pbXBvcnQgeyBMb29rdXBFcnJvck1lc3NhZ2VzIH0gZnJvbSBcIi4vY29tbW9uL2xvb2t1cC1lcnJvci1tZXNzYWdlLmNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFMDcwRW1wIH0gZnJvbSBcIi4vc2VydmljZS9lMDcwZW1wL2UwNzBlbXBcIjtcclxuaW1wb3J0IHsgRTA3MEZpbCB9IGZyb20gXCIuL3NlcnZpY2UvZTA3MGZpbC9lMDcwZmlsXCI7XHJcbmltcG9ydCB7IEV2ZW50Q29udHJvbEl0ZW0gfSBmcm9tIFwiLi9zZXJ2aWNlL2V2ZW50LWNvbnRyb2wtaXRlbS9ldmVudC1jb250cm9sLWl0ZW1cIjtcclxuaW1wb3J0IHsgRXZlbnRDb250cm9sSXRlbVNlcnZpY2UsIFJlcHJvY2Vzc0ZhaWxlZEV2ZW50IH0gZnJvbSBcIi4vc2VydmljZS9ldmVudC1jb250cm9sLWl0ZW0vZXZlbnQtY29udHJvbC1pdGVtLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXZlbnRDb250cm9sIH0gZnJvbSBcIi4vc2VydmljZS9ldmVudC1jb250cm9sL2V2ZW50LWNvbnRyb2xcIjtcclxuaW1wb3J0IHsgRXZlbnRDb250cm9sU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2UvZXZlbnQtY29udHJvbC9ldmVudC1jb250cm9sLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFnaW5hdG9yU3RvcmFnZVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlL3BhZ2luYXRvci1zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRmllbGRDb25maWcgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9keW5hbWljLWZvcm1cIjtcclxuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcInMtZXZlbnQtY29udHJvbC1ib2FyZFwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9ldmVudC1jb250cm9sLWJvYXJkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vZXZlbnQtY29udHJvbC1ib2FyZC5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTE9DQUxFX0lELCB1c2VWYWx1ZTogXCJwdC1CUlwiIH1dLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXZlbnRDb250cm9sQm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICAgIEBJbnB1dCgpIGNvbXBhbnkhOiBFMDcwRW1wO1xyXG4gICAgQElucHV0KCkgYnJhbmNoITogRTA3MEZpbDtcclxuICAgIEBJbnB1dCgpIGNvbnRyb2xDb2RlITogc3RyaW5nW107XHJcbiAgICBASW5wdXQoKSBldmVudE9yaWdpbiE6IEV2ZW50T3JpZ2luO1xyXG4gICAgQElucHV0KCkgZXZlbnRTdGF0dXMhOiBFdmVudFN0YXR1cztcclxuICAgIEBJbnB1dCgpIGV4dGVybmFsSWQhOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBjcmVhdGVkRGF0ZSE6IERhdGU7XHJcbiAgICBASW5wdXQoKSBzdGFuZGFsb25lITogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHNob3dDYW5jZWxCdXR0b24hOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY2FuY2VsRXZlbnREaWFsb2dDb25maWchOiBDYW5jZWxFdmVudERpYWxvZ0NvbmZpZztcclxuICAgIEBPdXRwdXQoKSBwcm9jZXNzZWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBwdWJsaWMgcHJvZHVjZXJJbnZvaWNlITogYW55O1xyXG5cclxuICAgIHB1YmxpYyBzdGVwczogU3RlcFtdID0gW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRTdGVwOiBhbnk7XHJcbiAgICBwdWJsaWMgZXZlbnRJZCE6IFwiXCI7XHJcbiAgICBwdWJsaWMgc2hvd1NpZGViYXIgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93UmVwcm9jZXNzQnV0dG9uID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2lkZWJhclRpdGxlITogc3RyaW5nO1xyXG4gICAgcHVibGljIHNpZGViYXJMb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgZmlsdGVyRm9ybUdyb3VwITogRm9ybUdyb3VwO1xyXG4gICAgcHVibGljIGZpbHRlckZpZWxkcyE6IEZpZWxkQ29uZmlnW107XHJcblxyXG4gICAgcHVibGljIGdyaWREYXRhOiBhbnlbXSA9IFtdO1xyXG4gICAgcHVibGljIGdyaWREYXRhUmVzb2x2ZWQ6IGFueVtdID0gW107XHJcbiAgICBwdWJsaWMgZ3JpZENvbHVtbnMhOiBhbnlbXTtcclxuICAgIHB1YmxpYyBncmlkVG90YWxSZWNvcmRzID0gQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICBwdWJsaWMgZ3JpZExvYWRpbmcgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBkaXNwbGF5TW9kYWwgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgQnV0dG9uUHJpb3JpdHkgPSB7XHJcbiAgICAgICAgUHJpbWFyeTogJ3ByaW1hcnknIGFzIGNvbnN0LFxyXG4gICAgICAgIFNlY29uZGFyeTogJ3NlY29uZGFyeScgYXMgY29uc3QsXHJcbiAgICAgICAgTGluazogJ2xpbmsnIGFzIGNvbnN0LFxyXG4gICAgfTtcclxuICAgIHB1YmxpYyByZWFkb25seSBCYWRnZUNvbG9ycyA9IHtcclxuICAgICAgICBHcmVlbjogJ2dyZWVuJyBhcyBjb25zdCxcclxuICAgICAgICBPcmFuZ2U6ICdvcmFuZ2UnIGFzIGNvbnN0LFxyXG4gICAgICAgIFJlZDogJ3JlZCcgYXMgY29uc3QsXHJcbiAgICAgICAgR3JheTogJ2dyYXknIGFzIGNvbnN0LFxyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgcGVybWlzc2lvbnM6IGFueSA9IHt9O1xyXG4gICAgcHVibGljIGxvY2FsZUNvbmZpZzogYW55ID0ge307XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRMaXN0UGFyYW1zOiBhbnkgPSB7XHJcbiAgICAgICAgcGFnZTogQUdST19OVU1CRVJTLlpFUk8sXHJcbiAgICAgICAgc2l6ZTogQUdST19OVU1CRVJTLlRFTixcclxuICAgICAgICBkaXNwbGF5RmllbGRzOiB0aGlzLmdldERpc3BsYXlGaWVsZHMoKSxcclxuICAgICAgICBzb3J0OiBbXSxcclxuICAgICAgICBmaWx0ZXJEYXRhOiB7fVxyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBldmVudEl0ZW0gPSBldmVudEl0ZW07XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGludm9pY2VUeXBlVHJhbnNsYXRlID0gaW52b2ljZVR5cGVUcmFuc2xhdGU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IExpYlRyYW5zbGF0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHdlYnNvY2tldFNlcnZpY2U6IFdlYnNvY2tldFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBldmVudENvbnRyb2xTZXJ2aWNlOiBFdmVudENvbnRyb2xTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnaW5hdG9yU3RvcmFnZVNlcnZpY2U6IFBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRDb250cm9sSXRlbVNlcnZpY2U6IEV2ZW50Q29udHJvbEl0ZW1TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjZXJJbnZvaWNlU2VydmljZTogUHJvZHVjZXJJbnZvaWNlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHJlZ2lzdGVyTG9jYWxlRGF0YShsb2NhbGVQdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuZ3JpZENvbHVtbnMgPSB0aGlzLnNldEdyaWRDb2x1bW5zKCk7XHJcbiAgICAgICAgdGhpcy5jYWxsV2Vic29ja2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1Hcm91cCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcGFueUFuZEJyYW5jaEZvcm1GaWVsZHMoY2hhbmdlcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVFdmVudE9yaWdpbkFuZENvbnRyb2xDb2RlRm9ybUZpZWxkcyhjaGFuZ2VzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUV2ZW50U3RhdHVzQW5kQ3JlYXRlZERhdGVGb3JtRmllbGRzKGNoYW5nZXMpO1xyXG4gICAgICAgIHRoaXMub25TZWFyY2goKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNvbXBhbnlBbmRCcmFuY2hGb3JtRmllbGRzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlc1snY29tcGFueSddICYmIGNoYW5nZXNbJ2NvbXBhbnknXS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXNbJ2NvbXBhbnknXS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldChcImNvbXBhbnlcIik/LnNldFZhbHVlKGNoYW5nZXNbJ2NvbXBhbnknXS5jdXJyZW50VmFsdWUgPz8gbnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlc1snYnJhbmNoJ10gJiYgY2hhbmdlc1snYnJhbmNoJ10uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydicmFuY2gnXS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldChcImJyYW5jaFwiKT8uc2V0VmFsdWUoY2hhbmdlc1snYnJhbmNoJ10uY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUV2ZW50T3JpZ2luQW5kQ29udHJvbENvZGVGb3JtRmllbGRzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlc1snZXZlbnRPcmlnaW4nXSAmJiBjaGFuZ2VzWydldmVudE9yaWdpbiddLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snZXZlbnRPcmlnaW4nXS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldChcImV2ZW50T3JpZ2luXCIpPy5zZXRWYWx1ZShjaGFuZ2VzWydldmVudE9yaWdpbiddLmN1cnJlbnRWYWx1ZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzWydjb250cm9sQ29kZSddICYmIGNoYW5nZXNbJ2NvbnRyb2xDb2RlJ10uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydjb250cm9sQ29kZSddLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KFwiY29udHJvbENvZGVcIik/LnNldFZhbHVlKGNoYW5nZXNbJ2NvbnRyb2xDb2RlJ10uY3VycmVudFZhbHVlID8/IG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUV2ZW50U3RhdHVzQW5kQ3JlYXRlZERhdGVGb3JtRmllbGRzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlc1snZXZlbnRTdGF0dXMnXSAmJiBjaGFuZ2VzWydldmVudFN0YXR1cyddLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snZXZlbnRTdGF0dXMnXS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldChcInN0YXR1c1wiKT8uc2V0VmFsdWUoY2hhbmdlc1snZXZlbnRTdGF0dXMnXS5jdXJyZW50VmFsdWUgPz8gbnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlc1snY3JlYXRlZERhdGUnXSAmJiBjaGFuZ2VzWydjcmVhdGVkRGF0ZSddLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snY3JlYXRlZERhdGUnXS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldChcImNyZWF0ZWREYXRlXCIpPy5zZXRWYWx1ZShjaGFuZ2VzWydjcmVhdGVkRGF0ZSddLmN1cnJlbnRWYWx1ZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplRm9ybUdyb3VwKCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgIGNvbXBhbnk6IFt7IHZhbHVlOiB0aGlzLmNvbXBhbnkgPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBicmFuY2g6IFt7IHZhbHVlOiB0aGlzLmJyYW5jaCA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgICAgIGNvbnRyb2xDb2RlOiBbeyB2YWx1ZTogdGhpcy5jb250cm9sQ29kZSA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgICAgIGV4dGVybmFsSWQ6IFt7IHZhbHVlOiB0aGlzLmV4dGVybmFsSWQgPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBldmVudE9yaWdpbjogW3sgdmFsdWU6IHRoaXMuZXZlbnRPcmlnaW4gPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBzdGF0dXM6IFt7IHZhbHVlOiB0aGlzLmV2ZW50U3RhdHVzID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgY3JlYXRlZERhdGU6IFt7IHZhbHVlOiB0aGlzLmNyZWF0ZWREYXRlID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEZvcm1GaWVsZHMoKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJGaWVsZHMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29tcGFueVwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NoaXBzJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJicmFuY2hcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGlwcycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29udHJvbENvZGVcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGlwcycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiZXh0ZXJuYWxJZFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiZXZlbnRPcmlnaW5cIixcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdlbnVtJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJzdGF0dXNcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdlbnVtJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJjcmVhdGVkRGF0ZVwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2RhdGUnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRHcmlkQ29sdW1ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7IGZpZWxkOiBcImNvbXBhbnlcIiwgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuY29tcGFueVwiKSB9LFxyXG4gICAgICAgICAgICB7IGZpZWxkOiBcImJyYW5jaFwiLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5sYWJlbF9icmFuY2hcIikgfSxcclxuICAgICAgICAgICAgeyBmaWVsZDogXCJldmVudE9yaWdpblwiLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ldmVudF9vcmlnaW5fbGFiZWxcIikgfSxcclxuICAgICAgICAgICAgeyBmaWVsZDogXCJjb250cm9sQ29kZVwiLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jb250cm9sX2NvZGVcIikgfSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLndlYnNvY2tldFNlcnZpY2UuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYWxsV2Vic29ja2V0KCkge1xyXG4gICAgICAgIHRoaXMud2Vic29ja2V0U2VydmljZVxyXG4gICAgICAgICAgICAub25FdmVudDxhbnk+KHtcclxuICAgICAgICAgICAgICAgIGRvbWFpbjogXCJhZ3JvXCIsXHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlOiBcImFncm9fZXZlbnRzXCIsXHJcbiAgICAgICAgICAgICAgICBwcmltaXRpdmU6IFwicHJvY2Vzc2VkRXZlbnRcIixcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybmFsSWQgPSBtZXNzYWdlPy5kYXRhPy5leHRlcm5hbElkO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWV4dGVybmFsSWQgfHwgdGhpcy5leHRlcm5hbElkID09PSBleHRlcm5hbElkIHx8IHRoaXMuZ3JpZERhdGE/LnNvbWUoKGl0ZW06IGFueSkgPT4gaXRlbS5leHRlcm5hbElkID09PSBleHRlcm5hbElkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR3JpZCh7IGZpbHRlckRhdGEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRFdmVudC5lbWl0KG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy53ZWJzb2NrZXRTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5vbkV2ZW50PGFueT4oe1xyXG4gICAgICAgICAgICAgICAgZG9tYWluOiBcInBsYXRmb3JtXCIsXHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlOiBcIm5vdGlmaWNhdGlvbnNcIixcclxuICAgICAgICAgICAgICAgIHByaW1pdGl2ZTogXCJ1c2VyTm90aWZpZWRcIixcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TZWFyY2goKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNldEdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xyXG4gICAgICAgIHRoaXMudXBkYXRlR3JpZCh7IGZpbHRlckRhdGEgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0R3JpZChsaXN0UGFyYW1zPzogYW55KSB7XHJcbiAgICAgICAgaWYgKGxpc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcyA9IHsgLi4udGhpcy5jdXJyZW50TGlzdFBhcmFtcywgLi4ubGlzdFBhcmFtcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnBhZ2UgPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUdyaWQobGlzdFBhcmFtczogYW55ID0ge30pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zID0geyAuLi50aGlzLmN1cnJlbnRMaXN0UGFyYW1zLCAuLi5saXN0UGFyYW1zIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQ/Lmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydCA9IHRoaXMuc3RhbmRhbG9uZSA/XHJcbiAgICAgICAgICAgICAgICBbeyBmaWVsZDogXCJjcmVhdGVkRGF0ZVwiLCBvcmRlcjogMSB9XSA6XHJcbiAgICAgICAgICAgICAgICBbeyBmaWVsZDogXCJsYXN0TW9kaWZpZWREYXRlXCIsIG9yZGVyOiAtMSB9XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudExpc3RQYXJhbXMuZmlsdGVyUXVlcnkgPSB0aGlzLmdldEZpbHRlcigpO1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW50Q29udHJvbFNlcnZpY2VcclxuICAgICAgICAgICAgLmxpc3QodGhpcy5jdXJyZW50TGlzdFBhcmFtcylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWREYXRhID0gbGlzdC5jb250ZW50cztcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ncmlkRGF0YSB8fCB0aGlzLmdyaWREYXRhLmxlbmd0aCA8PSBBR1JPX05VTUJFUlMuWkVSTykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NFdmVudENvbnRyb2xJdGVtcygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEZpbHRlcigpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHsgZmlsdGVyRGF0YSB9ID0gdGhpcy5jdXJyZW50TGlzdFBhcmFtcztcclxuICAgICAgICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoZmlsdGVyRGF0YVtcImNvbXBhbnlcIl0/LmlkKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaChgZTA3MGVtcC5pZCBlcSAnJHtmaWx0ZXJEYXRhW1wiY29tcGFueVwiXS5pZH0nYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmlsdGVyRGF0YVtcImJyYW5jaFwiXT8uaWQpIHtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKGBlMDcwZmlsLmlkIGVxICcke2ZpbHRlckRhdGFbXCJicmFuY2hcIl0uaWR9J2ApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29udHJvbENvZGUgPSBmaWx0ZXJEYXRhW1wiY29udHJvbENvZGVcIl07XHJcbiAgICAgICAgaWYgKGNvbnRyb2xDb2RlICYmIEFycmF5LmlzQXJyYXkoY29udHJvbENvZGUpICYmIGNvbnRyb2xDb2RlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgY29kZXMgPSBjb250cm9sQ29kZS5tYXAoKGNvZGU6IHN0cmluZykgPT4gcGFyc2VJbnQoY29kZSwgMTApKS5qb2luKFwiLFwiKTtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKGBjb250cm9sQ29kZSBpbiAoJHtjb2Rlc30pYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmlsdGVyRGF0YVtcImV4dGVybmFsSWRcIl0pIHtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKGBleHRlcm5hbElkIGVxICcke2ZpbHRlckRhdGFbXCJleHRlcm5hbElkXCJdfSdgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXJEYXRhW1wiZXZlbnRPcmlnaW5cIl0pIHtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKGBldmVudE9yaWdpbiBlcSAnJHtmaWx0ZXJEYXRhW1wiZXZlbnRPcmlnaW5cIl19J2ApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpbHRlckRhdGFbXCJzdGF0dXNcIl0pIHtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKGBldmVudENvbnRyb2xJdGVtLnN0YXR1cyBlcSAnJHtmaWx0ZXJEYXRhW1wic3RhdHVzXCJdfSdgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXJEYXRhW1wiY3JlYXRlZERhdGVcIl0pIHtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKGBjcmVhdGVkRGF0ZSBnZSAnJHt0aGlzLmdldFN0YXJ0RGF0ZShmaWx0ZXJEYXRhW1wiY3JlYXRlZERhdGVcIl0pfSdgKTtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKGBjcmVhdGVkRGF0ZSBsZSAnJHt0aGlzLmdldEVuZERhdGUoZmlsdGVyRGF0YVtcImNyZWF0ZWREYXRlXCJdKX0nYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmlsdGVycy5qb2luKFwiIGFuZCBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRFbmREYXRlKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBtb21lbnQodmFsdWUpLmVuZE9mKFwiZGF5XCIpLmZvcm1hdChcIllZWVktTU0tRERUSEg6bW06c3NcIikgKyBcIlpcIjtcclxuICAgICAgICByZXR1cm4gZW5kRGF0ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0U3RhcnREYXRlKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG1vbWVudCh2YWx1ZSkuc3RhcnRPZihcImRheVwiKS5mb3JtYXQoXCJZWVlZLU1NLUREVEhIOm1tOnNzXCIpICsgXCJaXCI7XHJcbiAgICAgICAgcmV0dXJuIHN0YXJ0RGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERpc3BsYXlGaWVsZHMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICcqJyxcclxuICAgICAgICAgICAgJ2NvbXBhbnkuKicsXHJcbiAgICAgICAgICAgICdicmFuY2guKicsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLmV2ZW50RG9tYWluJyxcclxuICAgICAgICAgICAgJ2V2ZW50Q29udHJvbEl0ZW0uaWQnLFxyXG4gICAgICAgICAgICAnZXZlbnRDb250cm9sSXRlbS5ldmVudERvbWFpbicsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLmV2ZW50U2VydmljZScsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLmV2ZW50UHJpbWl0aXZlJyxcclxuICAgICAgICAgICAgJ2V2ZW50Q29udHJvbEl0ZW0uZXZlbnRDb250cm9sJyxcclxuICAgICAgICAgICAgJ2V2ZW50Q29udHJvbEl0ZW0uZXZlbnRHcm91cCcsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLnNlcXVlbmNlJyxcclxuICAgICAgICAgICAgJ2V2ZW50Q29udHJvbEl0ZW0uZXZlbnRPcGVyYXRpb24nLFxyXG4gICAgICAgICAgICAnZXZlbnRDb250cm9sSXRlbS5vdXRwdXQnLFxyXG4gICAgICAgICAgICAnZXZlbnRDb250cm9sSXRlbS5pbnB1dCcsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLnN0YXR1cycsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLnN1YlRpdGxlJyxcclxuICAgICAgICAgICAgJ2V2ZW50Q29udHJvbEl0ZW0ubWVzc2FnZScsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLmNyZWF0ZWRCeScsXHJcbiAgICAgICAgICAgICdldmVudENvbnRyb2xJdGVtLmNyZWF0ZWREYXRlJyxcclxuICAgICAgICAgICAgJ2V2ZW50Q29udHJvbEl0ZW0ubGFzdE1vZGlmaWVkQnknLFxyXG4gICAgICAgICAgICAnZXZlbnRDb250cm9sSXRlbS5sYXN0TW9kaWZpZWREYXRlJyxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc0V2ZW50Q29udHJvbEl0ZW1zKCkge1xyXG4gICAgICAgIHRoaXMuZ3JpZERhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRJdGVtcyA9IGl0ZW0uZXZlbnRDb250cm9sSXRlbS5zb3J0KChhOiBFdmVudENvbnRyb2xJdGVtLCBiOiBFdmVudENvbnRyb2xJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5zZXF1ZW5jZSAtIGIuc2VxdWVuY2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBzdGVwcyA9IHNvcnRlZEl0ZW1zLm1hcCgoZGV0YWlsOiBFdmVudENvbnRyb2xJdGVtLCBpbmRleDogbnVtYmVyKSA9PiB0aGlzLmNyZWF0ZVN0ZXAoZGV0YWlsLCBpdGVtLCBpbmRleCkpO1xyXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuY2FsY3VsYXRlQWN0aXZlSW5kZXgoc29ydGVkSXRlbXMpO1xyXG4gICAgICAgICAgICBpdGVtLmdyb3VwcyA9IFt7IHN0ZXBzLCBhY3RpdmVJbmRleCB9XTtcclxuICAgICAgICAgICAgaXRlbS5hY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZ3JpZERhdGFSZXNvbHZlZCA9IHRoaXMuZ3JpZERhdGE7XHJcbiAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FsY3VsYXRlQWN0aXZlSW5kZXgoZGV0YWlsczogRXZlbnRDb250cm9sSXRlbVtdKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBsYXN0QWN0aXZlID0gZGV0YWlscy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChsYXN0SW5kZXgsIGRldGFpbCwgY3VycmVudEluZGV4KSA9PiAoZGV0YWlsLnN0YXR1cyAhPT0gRXZlbnRTdGF0dXMuUEVORElORyA/IGN1cnJlbnRJbmRleCA6IGxhc3RJbmRleCksXHJcbiAgICAgICAgICAgIC0xXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAobGFzdEFjdGl2ZSAhPT0gLTEgJiYgZGV0YWlsc1tsYXN0QWN0aXZlXS5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLlNVQ0NFU1MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxhc3RBY3RpdmUgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGFzdEFjdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZVN0ZXAoZGV0YWlsOiBFdmVudENvbnRyb2xJdGVtLCBpdGVtOiBFdmVudENvbnRyb2wsIGRldGFpbEluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnRGV0YWlsOicsIGRldGFpbCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaXRlbTogZGV0YWlsLFxyXG4gICAgICAgICAgICBjb250cm9sQ29kZTogaXRlbS5jb250cm9sQ29kZSxcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiBpdGVtLmV2ZW50T3JpZ2luLFxyXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRFdmVudExhYmVsKGRldGFpbCksXHJcbiAgICAgICAgICAgIHN1YkxhYmVsOiB0aGlzLmZvcm1hdFN1YnRpdGxlKGRldGFpbCksXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBkZXRhaWwuc3RhdHVzID09PSBFdmVudFN0YXR1cy5QRU5ESU5HICYmIGRldGFpbEluZGV4ICE9PSB0aGlzLmNhbGN1bGF0ZUFjdGl2ZUluZGV4KGl0ZW0uZXZlbnRDb250cm9sSXRlbSksXHJcbiAgICAgICAgICAgIHRvb2x0aXA6IHRoaXMuZ2V0RXZlbnRMYWJlbChkZXRhaWwpLFxyXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5kZXRlcm1pbmVTdGVwU3RhdGUoZGV0YWlsKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGV0ZXJtaW5lU3RlcFN0YXRlKGRldGFpbDogeyBzdGF0dXM6IEV2ZW50U3RhdHVzIH0pOiBTdGVwU3RhdGUge1xyXG4gICAgICAgIGlmIChkZXRhaWwuc3RhdHVzID09PSBFdmVudFN0YXR1cy5TVUNDRVNTKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTdGVwU3RhdGUuU3VjY2VzcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRldGFpbC5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RlcFN0YXRlLldhcm5pbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTdGVwU3RhdGUuRGVmYXVsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEV2ZW50TGFiZWwoZGV0YWlsOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50TGFiZWwgPSB0aGlzLmV2ZW50SXRlbS5maW5kKChlKSA9PiBlLnZhbHVlID09PSBkZXRhaWwuZXZlbnRPcGVyYXRpb24pPy5sYWJlbDtcclxuICAgICAgICBjb25zb2xlLmxvZygnR2V0dGluZyBsYWJlbCBmb3IgZXZlbnQgb3BlcmF0aW9uOicsIGV2ZW50TGFiZWwpO1xyXG4gICAgICAgIGlmIChldmVudExhYmVsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGV2ZW50TGFiZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsb2NhbExhYmVsID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLlwiICsgZGV0YWlsLmV2ZW50T3BlcmF0aW9uKTtcclxuICAgICAgICBpZiAobG9jYWxMYWJlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxMYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRldGFpbC5ldmVudE9wZXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZvcm1hdFN1YnRpdGxlKGRldGFpbDogRXZlbnRDb250cm9sSXRlbSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IHsgZXZlbnRPcGVyYXRpb24sIHN1YlRpdGxlIH0gPSBkZXRhaWw7XHJcblxyXG4gICAgICAgIGNvbnN0IGludm9pY2VPcGVyYXRpb25zID0gW1xyXG4gICAgICAgICAgICBFdmVudE9wZXJhdGlvbi5DUkVBVEVfSU5WT0lDRV9GSVhBVElPTixcclxuICAgICAgICAgICAgRXZlbnRPcGVyYXRpb24uQ0FOQ0VMX0lOVk9JQ0VfRklYQVRJT04sXHJcbiAgICAgICAgICAgIEV2ZW50T3BlcmF0aW9uLk9SSUdJTkFUSU9OX0NSRUFURV9JTlZPSUNFXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3QgbnVtYmVyUHJlZml4T3BlcmF0aW9ucyA9IFtcclxuICAgICAgICAgICAgRXZlbnRPcGVyYXRpb24uQ0xPU0VfSU5WT0lDRV9GSVhBVElPTixcclxuICAgICAgICAgICAgRXZlbnRPcGVyYXRpb24uUkVPUEVOX0lOVk9JQ0VfRklYQVRJT05cclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBwcmVzY3JpcHRpb25PcGVyYXRpb25zID0gW1xyXG4gICAgICAgICAgICBFdmVudE9wZXJhdGlvbi5QUkVTQ1JJUFRJT05fREFUQV9MT0FEX1BST0RVQ1RfVFlQRSxcclxuICAgICAgICAgICAgRXZlbnRPcGVyYXRpb24uUFJFU0NSSVBUSU9OX0RBVEFfTE9BRF9BQ1RJVkVfUFJJTkNJUExFLFxyXG4gICAgICAgICAgICBFdmVudE9wZXJhdGlvbi5QUkVTQ1JJUFRJT05fREFUQV9MT0FEX0ZPUk1VTEFUSU9OLFxyXG4gICAgICAgICAgICBFdmVudE9wZXJhdGlvbi5QUkVTQ1JJUFRJT05fREFUQV9MT0FEX0JVTExFVElOLFxyXG4gICAgICAgICAgICBFdmVudE9wZXJhdGlvbi5QUkVTQ1JJUFRJT05fREFUQV9MT0FEX0FQUExJQ0FUSU9OX1VOSVQsXHJcbiAgICAgICAgICAgIEV2ZW50T3BlcmF0aW9uLlBSRVNDUklQVElPTl9EQVRBX0xPQURfU1BFQ0lFLFxyXG4gICAgICAgICAgICBFdmVudE9wZXJhdGlvbi5QUkVTQ1JJUFRJT05fREFUQV9MT0FEX0FQUExJQ0FUSU9OX1RZUEUsXHJcbiAgICAgICAgICAgIEV2ZW50T3BlcmF0aW9uLlBSRVNDUklQVElPTl9EQVRBX0xPQURfUFJPQkxFTVMsXHJcbiAgICAgICAgICAgIEV2ZW50T3BlcmF0aW9uLlBSRVNDUklQVElPTl9EQVRBX0xPQURfQVBQTElDQVRJT05cclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBsZXQgZm9ybWF0dGVkU3VidGl0bGU6IHN0cmluZyB8IG51bGwgPSBzdWJUaXRsZSA/PyBudWxsO1xyXG4gICAgICAgIGlmIChpbnZvaWNlT3BlcmF0aW9ucy5pbmNsdWRlcyhldmVudE9wZXJhdGlvbikpIHtcclxuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmludm9pY2VUeXBlVHJhbnNsYXRlLmZpbmQoKGUpID0+IGUudmFsdWUgPT09IHN1YlRpdGxlKT8ubGFiZWw7XHJcbiAgICAgICAgICAgIGZvcm1hdHRlZFN1YnRpdGxlID0gbGFiZWwgPyB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGxhYmVsKSA6IChzdWJUaXRsZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChudW1iZXJQcmVmaXhPcGVyYXRpb25zLmluY2x1ZGVzKGV2ZW50T3BlcmF0aW9uKSkge1xyXG4gICAgICAgICAgICBmb3JtYXR0ZWRTdWJ0aXRsZSA9IHN1YlRpdGxlID8gYG7CsCAke3N1YlRpdGxlfWAgOiAoc3ViVGl0bGUgPz8gbnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocHJlc2NyaXB0aW9uT3BlcmF0aW9ucy5pbmNsdWRlcyhldmVudE9wZXJhdGlvbikpIHtcclxuICAgICAgICAgICAgZm9ybWF0dGVkU3VidGl0bGUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5uZXdfcHJlc2NyaXB0aW9uX3BhZ2UnLCB7IGNvdW50OiBzdWJUaXRsZSB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWRTdWJ0aXRsZTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHB1YmxpYyBvbkdyaWRDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSBldmVudD8ucm93cztcclxuICAgICAgICBjb25zdCBwYWdlID0gZXZlbnQ/LmZpcnN0IC8gc2l6ZTtcclxuICAgICAgICBjb25zdCBzb3J0ID0gZXZlbnQubXVsdGlTb3J0TWV0YTtcclxuICAgICAgICB0aGlzLmdyaWRMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAoc2l6ZSAhPT0gQUdST19OVU1CRVJTLlRFTiB8fCBwYWdlICE9PSBBR1JPX05VTUJFUlMuWkVSTyB8fCAoc29ydCAmJiBzb3J0Lmxlbmd0aCA+IEFHUk9fTlVNQkVSUy5aRVJPKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlLnN0b3JlUGFnaW5hdG9yKFwiRXZlbnRDb250cm9sQm9hcmRQYWdpbmF0b3JcIiwgeyBwYWdlLCBzaXplLCBzb3J0IH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlR3JpZCh7IHBhZ2UsIHNpemUsIHNvcnQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFBhZ2VTaXplKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFJvd0luZGV4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnBhZ2UgKiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNvcnRGaWVsZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydCB8fCB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQubGVuZ3RoIDw9IEFHUk9fTlVNQkVSUy5aRVJPKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWRDb2x1bW5zW0FHUk9fTlVNQkVSUy5aRVJPXS5maWVsZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydFtBR1JPX05VTUJFUlMuWkVST10uZmllbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNvcnRPcmRlcigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydCB8fCB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQubGVuZ3RoIDw9IEFHUk9fTlVNQkVSUy5aRVJPKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBBR1JPX05VTUJFUlMuT05FO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydFtBR1JPX05VTUJFUlMuWkVST10ub3JkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEVycm9yTWVzc2FnZXMoKSB7XHJcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZEVycm9yTWVzc2FnZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBMb29rdXBFcnJvck1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgIGlmIChMb29rdXBFcnJvck1lc3NhZ2VzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmdldChMb29rdXBFcnJvck1lc3NhZ2VzW2tleV0pLnN1YnNjcmliZSgocmVzOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkRXJyb3JNZXNzYWdlc1trZXldID0gcmVzO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWRFcnJvck1lc3NhZ2VzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2R1Y2VySW52b2ljZUlkRnJvbVBhcmFtcyhwYXJhbTogYW55KTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKCFwYXJhbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHBhcmFtLnByb2R1Y2VySW52b2ljZUlkcz8uWzBdLFxyXG4gICAgICAgICAgICBwYXJhbS5pbnZvaWNlPy5nZW5lcmFsRGF0YT8udHJhbnNhY3Rpb25hbElkLFxyXG4gICAgICAgICAgICBwYXJhbS5wcm9kdWNlckludm9pY2VJZCxcclxuICAgICAgICAgICAgcGFyYW0uZXh0ZXJuYWxJZCxcclxuICAgICAgICAgICAgcGFyYW0uZXh0ZXJuYWxJbnZvaWNlSWRzPy5bMF0sXHJcbiAgICAgICAgXS5maW5kKChpZCkgPT4gaWQpID8/IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZHVjZXJCYWxhbmNlRW50cnlDb250cm9sSWRGcm9tUGFyYW1zKHBhcmFtOiBhbnkpIHtcclxuICAgICAgICBjb25zdCB7IHByb2R1Y2VyQmFsYW5jZUVudHJ5Q29udHJvbElkIH0gPSBwYXJhbTtcclxuICAgICAgICByZXR1cm4gcHJvZHVjZXJCYWxhbmNlRW50cnlDb250cm9sSWQgPyBwcm9kdWNlckJhbGFuY2VFbnRyeUNvbnRyb2xJZCA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0ZXBTZWxlY3RlZChldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXAgPSBldmVudC5zdGVwO1xyXG4gICAgICAgIHRoaXMuYXBwbHlTaWRlYmFyVGl0bGUoXCJcIik7XHJcblxyXG4gICAgICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFN0ZXAuZXZlbnRUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRPcmlnaW4uQkFMQU5DRV9FTlRSWV9DT05UUk9MOlxyXG4gICAgICAgICAgICBjYXNlIEV2ZW50T3JpZ2luLlRJQ0tFVDpcclxuICAgICAgICAgICAgY2FzZSBFdmVudE9yaWdpbi5JTlZPSUNFOlxyXG4gICAgICAgICAgICBjYXNlIEV2ZW50T3JpZ2luLkNSRUFURV9JTlZPSUNFOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW0gPSBKU09OLnBhcnNlKHRoaXMuc2VsZWN0ZWRTdGVwLml0ZW0uaW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VySW52b2ljZUlkID0gdGhpcy5nZXRQcm9kdWNlckludm9pY2VJZEZyb21QYXJhbXMocGFyYW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJRdWVyeSA9IFwiXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZHVjZXJJbnZvaWNlSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjZXJCYWxhbmNlRW50cnlDb250cm9sSWQgPSB0aGlzLmdldFByb2R1Y2VyQmFsYW5jZUVudHJ5Q29udHJvbElkRnJvbVBhcmFtcyhwYXJhbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2R1Y2VyQmFsYW5jZUVudHJ5Q29udHJvbElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZGViYXJMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gYHByb2R1Y2VyQmFsYW5jZUVudHJ5Q29udHJvbC5pZCBlcSAnJHtwcm9kdWNlckJhbGFuY2VFbnRyeUNvbnRyb2xJZH0nYDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGBpZCBlcSAnJHtwcm9kdWNlckludm9pY2VJZH0nYDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjZXJJbnZvaWNlU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubGlzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGRzOiBbXCIqXCIsIFwicHJvZHVjZXJCYWxhbmNlRW50cnlDb250cm9sLipcIiwgXCJwcm9kdWNlckJhbGFuY2VFbnRyeUNvbnRyb2wucHJvZHVjZXIuKlwiXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWNlckludm9pY2UgPSByZXN1bHQ/LmNvbnRlbnRzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjZXJJbnZvaWNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2lkZWJhckxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5U2lkZWJhclRpdGxlKHRoaXMuZ2V0UHJvZHVjZXJJbnZvaWNlTnVtYmVyQW5kU2VyaWUoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2lkZWJhckxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEV2ZW50T3JpZ2luLkZJWEFUSU9OOlxyXG4gICAgICAgICAgICBjYXNlIEV2ZW50T3JpZ2luLkNBTkNFTF9GSVhBVElPTjpcclxuICAgICAgICAgICAgY2FzZSBFdmVudE9yaWdpbi5DSEFOR0VfUkVRVUVTVDpcclxuICAgICAgICAgICAgY2FzZSBFdmVudE9yaWdpbi5UUkFOU0ZFUjpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zaG93UmVwcm9jZXNzQnV0dG9uID0gZXZlbnQuc3RlcC5zdGF0ZSA9PT0gU3RlcFN0YXRlLldhcm5pbmc7XHJcblxyXG4gICAgICAgIHRoaXMuc2hvd1NpZGViYXIgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXBwbHlTaWRlYmFyVGl0bGUodGl0bGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2lkZWJhclRpdGxlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmV2ZW50X3NpZGViYXJfdGl0bGVcIiwgeyBldmVudE51bWJlcjogdGl0bGUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQcm9kdWNlckludm9pY2VOdW1iZXJBbmRTZXJpZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnByb2R1Y2VySW52b2ljZT8ubnVtYmVyICYmIHRoaXMucHJvZHVjZXJJbnZvaWNlPy5zZXJpZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMucHJvZHVjZXJJbnZvaWNlLm51bWJlcn0gLSAke3RoaXMucHJvZHVjZXJJbnZvaWNlLnNlcmllc31gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVwcm9jZXNzRXZlbnQoKSB7XHJcbiAgICAgICAgY29uc3QgcmVwcm9jZXNzRXZlbnRPYmo6IFJlcHJvY2Vzc0ZhaWxlZEV2ZW50ID0ge1xyXG4gICAgICAgICAgICBldmVudENvbnRyb2xJdGVtSWQ6IHRoaXMuc2VsZWN0ZWRTdGVwLml0ZW0uaWQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmV2ZW50Q29udHJvbEl0ZW1TZXJ2aWNlXHJcbiAgICAgICAgICAgIC5yZXByb2Nlc3NGYWlsZWRFdmVudChyZXByb2Nlc3NFdmVudE9iailcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImluZm9cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5yZXByb2Nlc3NpbmdfZXZlbnRfbWVzc2FnZV90aXRsZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLnJlcHJvY2Vzc2luZ19ldmVudF9tZXNzYWdlX2Rlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5lcnJvcl9yZXByb2Nlc3NpbmdfZXZlbnRfbWVzc2FnZV90aXRsZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmVycm9yX3JlcHJvY2Vzc2luZ19ldmVudF9tZXNzYWdlX2Rlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkTWVzc2FnZShzZXZlcml0eTogc3RyaW5nLCBzdW1tYXJ5OiBzdHJpbmcsIGRldGFpbDogc3RyaW5nLCBsaWZlID0gQUdST19OVU1CRVJTLkZJVkVfU0VDT05EUykge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgICAgc2V2ZXJpdHksXHJcbiAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoc3VtbWFyeSksXHJcbiAgICAgICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChkZXRhaWwpLFxyXG4gICAgICAgICAgICBsaWZlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuTW9kYWwoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5TW9kYWwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NpZGViYXIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkNhbmNlbE1vZGFsKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY2FuY2VsRXZlbnREaWFsb2dDb25maWcuYmVmb3JlT3Blbj8uKCk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2FuY2VsRXZlbnREaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLmNhbmNlbEV2ZW50RGlhbG9nQ29uZmlnPy5oZWFkZXIsXHJcbiAgICAgICAgICAgIGNvbnRlbnRTdHlsZTogeyBoZWlnaHQ6IFwiMTAwJVwiIH0sXHJcbiAgICAgICAgICAgIGNsb3NhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBjbG9zZU9uRXNjYXBlOiBmYWxzZSxcclxuICAgICAgICAgICAgZGF0YTogeyBjYW5jZWxFdmVudERpYWxvZ0NvbmZpZzogdGhpcy5jYW5jZWxFdmVudERpYWxvZ0NvbmZpZyB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25maXJtTW9kYWwoKSB7XHJcbiAgICAgICAgdGhpcy5yZXByb2Nlc3NFdmVudCgpO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheU1vZGFsID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbE1vZGFsKCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheU1vZGFsID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlU2lkZWJhcigpIHtcclxuICAgICAgICB0aGlzLnNob3dTaWRlYmFyID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqc0xvYWRpbmdTdGF0ZT1cImdyaWRMb2FkaW5nXCI+XHJcbiAgICA8cC1wYW5lbD5cclxuICAgICAgICA8cC1oZWFkZXI+XHJcbiAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXZlbnRfY29udHJvbF9oZWFkZXJcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvcC1oZWFkZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zcGFuLTFcIj5cclxuICAgICAgICAgICAgICAgIDxzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwicmVmcmVzaC1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcmlvcml0eV09XCJCdXR0b25Qcmlvcml0eS5QcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS1yZWZyZXNoXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLnJlZnJlc2gnIHwgbGliVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWFyY2goKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L3MtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGFuZGFsb25lICYmIHNob3dDYW5jZWxCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiY2FuY2VsLWJ1dHRvbi1hZ3JvLWV2ZW50cy1saWJcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb25DbGFzcz1cImZhIGZhLXRpbWVzXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLmNhbmNlbCcgfCBsaWJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ2FuY2VsTW9kYWwoKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L3MtYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNwYW4tMVwiICpuZ0lmPVwiZ3JpZERhdGEubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8cy1lbXB0eS1zdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGljb25DbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ub3RoaW5nX2ZvdW5kJyB8IGxpYlRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dQcmltYXJ5QWN0aW9uXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cInt7ICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy50YWJsZV9lbXB0eV9kZXNjcmlwdGlvbicgfCBsaWJUcmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9zLWVtcHR5LXN0YXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyaWREYXRhLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cImN1c3RvbS10YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgI2V2ZW50Q29udHJvbFRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdyaWREYXRhUmVzb2x2ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImdyaWRDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICBkYXRhS2V5PVwiaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYXp5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwYWdpbmF0b3JdPVwiIXN0YW5kYWxvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b3RhbFJlY29yZHNdPVwiZ3JpZFRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiMTBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZXNwb25zaXZlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbkxhenlMb2FkKT1cIm9uR3JpZENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbc29ydE9yZGVyXT1cImdldFNvcnRPcmRlcigpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZmlyc3RdPVwiZ2V0Um93SW5kZXgoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhenlMb2FkT25Jbml0XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBzb3J0TW9kZT1cIm11bHRpcGxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcm93c109XCJnZXRQYWdlU2l6ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxMCwgMjAsIDUwLCAxMDBdXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3RhbmRhbG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBjbGFzcz1cInctMzJcIiBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiIHNjb3BlPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZW5pb3ItaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbmlvci1oZWFkZXItdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtc29ydEljb24gW2ZpZWxkXT1cImNvbC5maWVsZFwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidy1mdWxsIG1pbi13LTBcIiBzY29wZT1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMucGFuZWxfdGl0bGVfZXZlbnRzX2V2ZW50c1wiIHwgbGliVHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93RGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdGFuZGFsb25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidy0zMiBhbGlnbi10b3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcm93RGF0YS5lMDcwZW1wPy5ub21FbXAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInctMzIgYWxpZ24tdG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGEuZTA3MGZpbD8ubm9tRmlsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3LTMyIGFsaWduLXRvcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJyb3dEYXRhLmV2ZW50T3JpZ2luXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ0JBTEFOQ0VfRU5UUllfQ09OVFJPTCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmJhbGFuY2VfZW50cnlfY29udHJvbF9ldmVudFwiIHwgbGliVHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ1RJQ0tFVCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLnRpY2tldF9tYWludGVuYW5jZV9oZWFkZXJcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidUUkFOU0ZFUidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLnRyYW5zZmVyX29yaWdpbl9ldmVudFwiIHwgbGliVHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ0lOVk9JQ0UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5DUkVBVEVfSU5WT0lDRV9GSVhBVElPTlwiIHwgbGliVHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ0NIQU5HRV9SRVFVRVNUJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuY2hhbmdlX3JlcXVlc3RfZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidGSVhBVElPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmZpeGF0aW9uX2V2ZW50XCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInQ0FOQ0VMX0ZJWEFUSU9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuY2FuY2VsX2ZpeGF0aW9uX2V2ZW50XCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInVFJBTlNGRVJfQ0FOQ0VMTEFUSU9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMudHJhbnNmZXJfY2FuY2VsbGF0aW9uX2V2ZW50XCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInQUdST05PTUlDX1BSRVNDUklQVElPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmFncm9ub21pY19wcmVzY3JpcHRpb25fb3JpZ2luX2V2ZW50XCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInUFJFU0NSSVBUSU9OX0lOVEVHUkFUSU9OX0hVQidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmFncm9ub21pY19wcmVzY3JpcHRpb25fb3JpZ2luX2V2ZW50XCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3LTMyIGFsaWduLXRvcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByb3dEYXRhLmNvbnRyb2xDb2RlIHx8IFwiXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3LWZ1bGwgbWluLXctMCBhbGlnbi10b3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiByb3dEYXRhLmdyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXctZnVsbCBvdmVyZmxvdy14LWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzLWV2ZW50LXN0ZXBzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0ZXBzXT1cImdyb3VwLnN0ZXBzIHx8IFtdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSW5kZXhdPVwiZ3JvdXAuYWN0aXZlSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGVwU2VsZWN0ZWQpPVwic3RlcFNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zLWV2ZW50LXN0ZXBzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCIhc3RhbmRhbG9uZVwiIHBUZW1wbGF0ZT1cInBhZ2luYXRvcnJpZ2h0XCIgY2xhc3M9XCJjdXN0b20tdGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLnJlZ2lzdGVyc19mb3VuZFwiIHwgbGliVHJhbnNsYXRlOiB7IHRvdGFsOiBncmlkVG90YWxSZWNvcmRzIH0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L3AtdGFibGU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9wLXBhbmVsPlxyXG48L25nLWNvbnRhaW5lcj5cclxuPHMtc2lkZWJhclxyXG4gICAgW3Zpc2libGVdPVwic2hvd1NpZGViYXJcIlxyXG4gICAgKHZpc2libGVDaGFuZ2UpPVwiY2xvc2VTaWRlYmFyKClcIlxyXG4gICAgaGVhZGVyPVwie3sgJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLmV2ZW50X2RldGFpbHNfaGVhZGVyJyB8IGxpYlRyYW5zbGF0ZSB9fVwiXHJcbj5cclxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICA8cC1maWVsZHNldCBbbGVnZW5kXT1cInNpZGViYXJUaXRsZVwiIFt0b2dnbGVhYmxlXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IG1kOmZsZXgtcm93IG1kOmZsZXgtd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kOnctMS8zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPjxzdHJvbmc+e3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ldmVudF9vcmlnaW5fbGFiZWxcIiB8IGxpYlRyYW5zbGF0ZSB9fTwvc3Ryb25nPjwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzZWxlY3RlZFN0ZXA/LmV2ZW50VHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ0JBTEFOQ0VfRU5UUllfQ09OVFJPTCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuYmFsYW5jZV9lbnRyeV9jb250cm9sX2V2ZW50XCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ1RJQ0tFVCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMudGlja2V0X21haW50ZW5hbmNlX2hlYWRlclwiIHwgbGliVHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nU3dpdGNoQ2FzZT1cIidUUkFOU0ZFUidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMudHJhbnNmZXJfb3JpZ2luX2V2ZW50XCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ0lOVk9JQ0UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLkNSRUFURV9JTlZPSUNFX0ZJWEFUSU9OXCIgfCBsaWJUcmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ0NIQU5HRV9SRVFVRVNUJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jaGFuZ2VfcmVxdWVzdF9ldmVudFwiIHwgbGliVHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nU3dpdGNoQ2FzZT1cIidGSVhBVElPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZml4YXRpb25fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInQ0FOQ0VMX0ZJWEFUSU9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jYW5jZWxfZml4YXRpb25fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInVFJBTlNGRVJfQ0FOQ0VMTEFUSU9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy50cmFuc2Zlcl9jYW5jZWxsYXRpb25fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInQUdST05PTUlDX1BSRVNDUklQVElPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuYWdyb25vbWljX3ByZXNjcmlwdGlvbl9vcmlnaW5fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ1N3aXRjaENhc2U9XCInUFJFU0NSSVBUSU9OX0lOVEVHUkFUSU9OX0hVQidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuYWdyb25vbWljX3ByZXNjcmlwdGlvbl9vcmlnaW5fZXZlbnRcIiB8IGxpYlRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZDp3LTEvM1wiICpuZ0lmPVwicHJvZHVjZXJJbnZvaWNlPy5wcm9kdWNlckJhbGFuY2VFbnRyeUNvbnRyb2wucHJvZHVjZXIuZTAwMXBlcy5ub21QZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PHN0cm9uZz57eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLnN1cHBsaWVyXCIgfCBsaWJUcmFuc2xhdGUgfX08L3N0cm9uZz48L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHA+e3sgcHJvZHVjZXJJbnZvaWNlPy5wcm9kdWNlckJhbGFuY2VFbnRyeUNvbnRyb2wucHJvZHVjZXIuZTAwMXBlcy5ub21QZXMgfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZDp3LTEvM1wiICpuZ0lmPVwicHJvZHVjZXJJbnZvaWNlPy5wcm9kdWNlckJhbGFuY2VFbnRyeUNvbnRyb2wucnVyYWxFc3RhdGUubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48c3Ryb25nPnt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMucnVyYWxfZXN0YXRlXCIgfCBsaWJUcmFuc2xhdGUgfX08L3N0cm9uZz48L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHA+e3sgcHJvZHVjZXJJbnZvaWNlPy5wcm9kdWNlckJhbGFuY2VFbnRyeUNvbnRyb2wucnVyYWxFc3RhdGUubmFtZSB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kOnctMS8zXCIgKm5nSWY9XCJzZWxlY3RlZFN0ZXA/LmNvbnRyb2xDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPjxzdHJvbmc+e3sgXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5jb250cm9sX2NvZGVcIiB8IGxpYlRyYW5zbGF0ZSB9fTwvc3Ryb25nPjwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8cD57eyBzZWxlY3RlZFN0ZXA/LmNvbnRyb2xDb2RlIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWQ6dy0xLzNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PHN0cm9uZz57eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLnN0YXR1c19sYWJlbFwiIHwgbGliVHJhbnNsYXRlIH19PC9zdHJvbmc+PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInNlbGVjdGVkU3RlcD8uaXRlbS5zdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nU3dpdGNoQ2FzZT1cIidTVUNDRVNTJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHMtYmFkZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiQmFkZ2VDb2xvcnMuR3JlZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJ7eyAnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMucGFuZWxfdGl0bGVfZXZlbnRzX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHknIHwgbGliVHJhbnNsYXRlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3MtYmFkZ2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nU3dpdGNoQ2FzZT1cIidQUk9DRVNTSU5HJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHMtYmFkZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiQmFkZ2VDb2xvcnMuT3JhbmdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PVwie3sgJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLnByb2Nlc3NpbmcnIHwgbGliVHJhbnNsYXRlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3MtYmFkZ2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nU3dpdGNoQ2FzZT1cIidGQUlMRUQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cy1iYWRnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJCYWRnZUNvbG9ycy5SZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJ7eyAnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMucGFuZWxfdGl0bGVfZXZlbnRzX2VuZGVkX3dpdGhfZXJyb3InIHwgbGliVHJhbnNsYXRlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3MtYmFkZ2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nU3dpdGNoQ2FzZT1cIidQRU5ESU5HJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHMtYmFkZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiQmFkZ2VDb2xvcnMuR3JheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD1cInt7ICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5wZW5kaW5nJyB8IGxpYlRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zLWJhZGdlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZDp3LTEvM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48c3Ryb25nPnt7IFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubGFzdF91cGRhdGVfZGF0ZVwiIHwgbGliVHJhbnNsYXRlIH19PC9zdHJvbmc+PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IHNlbGVjdGVkU3RlcD8uaXRlbS5sYXN0TW9kaWZpZWREYXRlIHwgZGF0ZTogXCJkZC9NTS95eXl5IEhIOm1tOnNzXCIgfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZDp3LTEvM1wiICpuZ0lmPVwic2VsZWN0ZWRTdGVwPy5pdGVtLnN0YXR1cyA9PT0gJ0ZBSUxFRCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PHN0cm9uZz57eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmV2ZW50X2Vycm9yX21lc3NhZ2VcIiB8IGxpYlRyYW5zbGF0ZSB9fTwvc3Ryb25nPjwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8cD57eyBzZWxlY3RlZFN0ZXA/Lml0ZW0ubWVzc2FnZSB8fCBcIi1cIiB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3AtZmllbGRzZXQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzLWZvb3RlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBqdXN0aWZ5LWVuZCBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1lbmQgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgIDxzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwic2lkZWJhci1jbG9zZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcmlvcml0eV09XCJCdXR0b25Qcmlvcml0eS5QcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLmV2ZW50c19jbG9zZScgfCBsaWJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdXhpbGlhcnldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZVNpZGViYXIoKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L3MtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93UmVwcm9jZXNzQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cInNpZGViYXItcmVwcm9jZXNzLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ByaW9yaXR5XT1cIkJ1dHRvblByaW9yaXR5LlNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtcmVmcmVzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5yZXByb2Nlc3NfZXZlbnQnIHwgbGliVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1vZGFsKClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9zLWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9zLXNpZGViYXI+XHJcblxyXG48cy1kaWFsb2dcclxuICAgIFtoZWFkZXJdPVwiJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLmV2ZW50X21vZGFsX3RpdGxlJyB8IGxpYlRyYW5zbGF0ZVwiXHJcbiAgICBbKHZpc2libGUpXT1cImRpc3BsYXlNb2RhbFwiXHJcbiAgICBzaXplPVwibWRcIlxyXG4+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImV2ZW50LW1vZGFsLXRleHRcIj57eyBcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmV2ZW50X21vZGFsXCIgfCBsaWJUcmFuc2xhdGUgfX08L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgc1RlbXBsYXRlPVwiZm9vdGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBpZD1cIm1vZGFsLXllc1wiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLnllcycgfCBsaWJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIlxyXG4gICAgICAgICAgICAgICAgW3ByaW9yaXR5XT1cIkJ1dHRvblByaW9yaXR5LlByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJjb25maXJtTW9kYWwoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cclxuICAgICAgICAgICAgPHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBpZD1cIm1vZGFsLW5vXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInYWdyby5hbmd1bGFyX2NvbXBvbmVudHMubm8nIHwgbGliVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIGljb25DbGFzcz1cImZhIGZhLWNsb3NlXCJcclxuICAgICAgICAgICAgICAgIFtwcmlvcml0eV09XCJCdXR0b25Qcmlvcml0eS5TZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJjYW5jZWxNb2RhbCgpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L3MtYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9zLWRpYWxvZz5cclxuIl19
|