@sachin9822/reports-lib 0.0.147 → 0.0.149

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.
@@ -547,13 +547,13 @@ export class SearchFilterComponent {
547
547
  }
548
548
  }
549
549
  SearchFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SearchFilterComponent, deps: [{ token: i1.ReportService }, { token: i2.FormBuilder }, { token: i3.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
550
- SearchFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SearchFilterComponent, selector: "lib-search-filter", inputs: { ReportName: "ReportName" }, outputs: { searchClicked: "searchClicked" }, ngImport: i0, template: "<h6 class=\"Breadcrumb\">\r\n <a class=\"BreadCrumbLink\" [routerLink]=\"['/reports']\">\r\n <h1>Reports</h1>\r\n </a>\r\n <a href=\"BreadCrumbLink\"></a>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <a class=\"BreadCrumbLink\">\r\n <h2>{{ ReportName }}</h2>\r\n </a>\r\n</h6>\r\n\r\n<app-loader *ngIf=\"loadingState === ComponentLoadingState.Loading\"></app-loader>\r\n<section>\r\n <form [formGroup]=\"searchForm\" (ngSubmit)=\"onSearch()\">\r\n <div class=\"row\">\r\n <div class=\"col-custom-10-5\">\r\n <div class=\"filter-grid\">\r\n\r\n <!-- Dynamically render filters in order -->\r\n <ng-container *ngFor=\"let field of visibleFields\">\r\n <ng-container [ngSwitch]=\"field\">\r\n\r\n <!-- Client -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'client'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"clients1\" bindLabel=\"businessPartnerName\" bindValue=\"businessPartnerCode\"\r\n placeholder=\"Select Client\" [clearable]=\"false\" formControlName=\"client\" required\r\n (change)=\"onClientChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Branch -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'branch'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"branches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n placeholder=\"Select Branch\" [clearable]=\"false\" formControlName=\"branch\" required\r\n (change)=\"onBranchChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" formControlName=\"fromDate\" autocomplete=\"off\" />\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\" />\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'product'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"products\" bindLabel=\"productName\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- User -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'userId'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">User<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"users\" bindLabel=\"userName\" bindValue=\"userId\" placeholder=\"Select User\"\r\n [clearable]=\"false\" formControlName=\"userId\" required (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Currency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'currency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindLabel=\"currencyCode\" bindValue=\"currencyCode\"\r\n placeholder=\"Select Currency\" [clearable]=\"false\" formControlName=\"currency\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction Status (Multi-select) -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionStatus'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Status<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select class=\"transaction-status-select\" [items]=\"transactionStatuses\"\r\n bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\" [multiple]=\"true\"\r\n placeholder=\"Select Transaction Status\" formControlName=\"transactionStatus\"\r\n [closeOnSelect]=\"false\" [clearable]=\"false\" [searchable]=\"false\" required>\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction No -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionNo'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Number</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <input class=\"form-control dpicker\" formControlName=\"transactionNo\"\r\n placeholder=\"Enter transaction number\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Value Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'valueDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-3\">\r\n <label class=\"form-label label-data\">Value Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\" />\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toDateInput.toggle()\">\r\n <i class=\"fa fa-calendar\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Send Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"sendCountry\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'receiveCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Receive Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"receiveCountry\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Transaction Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionProduct'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"transactionProducts\" bindLabel=\"name\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Value Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'valueDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-3\">\r\n <label class=\"form-label label-data\">Value Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\" />\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toDateInput.toggle()\">\r\n <i class=\"fa fa-calendar\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Type -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'dateType'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date Type</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select placeholder=\"- Please select -\" formControlName=\"dateType\" [clearable]=\"false\"\r\n required>\r\n <ng-option [value]=\"1\">\r\n Value Date\r\n </ng-option>\r\n <ng-option [value]=\"2\">\r\n Posting Date\r\n </ng-option>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'date'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"date\" autocomplete=\"off\" />\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-custom-1-5\">\r\n <!-- View Report Button (Always at Top-Right) -->\r\n <div class=\"form-field view-report-btn\">\r\n <button type=\"submit\" class=\"btn btn-report\">View</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</section>\r\n<hr>\r\n<!-- Error Messages -->\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"formValidationError && hasSearched\">\r\n Please fill all required fields before submitting the form.\r\n</div>\r\n\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"errorMessage && loadingState === ComponentLoadingState.Error\">\r\n {{ errorMessage }}\r\n <button type=\"button\" class=\"btn-close\" (click)=\"errorMessage = ''\"></button>\r\n</div>", styles: ["@charset \"UTF-8\";.filter-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;grid-column:span 3}.form-field{display:flex;flex-direction:column;padding:0 4px 0 0!important;min-width:0}.col-custom-10-5{flex:0 0 87.5%!important;max-width:87.5%!important}.col-custom-1-5{flex:0 0 12.5%!important;max-width:12.5%!important;padding:0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{overflow:hidden;flex-wrap:nowrap}::ng-deep .ng-select .ng-select-container .ng-value-container .ng-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}::ng-deep .ng-select .ng-select-container{height:32px!important;min-height:32px!important;font-size:12px!important;align-items:center}.form-label{margin-bottom:0!important}.date-group{height:32px!important}::ng-deep .transaction-status-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:4px 0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{padding-top:0}::ng-deep .ng-dropdown-panel .ng-option{font-size:12px}.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px;padding:4px 15px!important;margin-left:10px!important;width:110px!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}.fa-calendar{--fa: \"\\f073\" !important}.dpicker{border:1px solid #ccc!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2;margin-left:0!important}.cal:focus{box-shadow:none!important}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}@media (max-width: 768px){.filter-grid{grid-template-columns:1fr;gap:12px}}.input-group-button{background:none!important;border:1px solid #1877F2!important;background-color:#1877f2!important;border-radius:0 3px 3px 0!important;min-width:35px;margin-left:1px;height:32px!important;cursor:pointer}.input-group-button .fa{color:#fff}.input-group-button:focus{box-shadow:0 0 5px 3px #009ee054}.input-group-button:focus{outline:none!important;box-shadow:none!important}.Breadcrumb h1,.Breadcrumb h2{font-weight:700}\n"], dependencies: [{ kind: "directive", type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i6.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i7.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "directive", type: i7.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "component", type: i8.LoaderComponent, selector: "app-loader" }] });
550
+ SearchFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SearchFilterComponent, selector: "lib-search-filter", inputs: { ReportName: "ReportName" }, outputs: { searchClicked: "searchClicked" }, ngImport: i0, template: "<h6 class=\"Breadcrumb\">\r\n <a class=\"BreadCrumbLink\" [routerLink]=\"['/reports']\">\r\n <h1>Reports</h1>\r\n </a>\r\n <a href=\"BreadCrumbLink\"></a>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <a class=\"BreadCrumbLink\">\r\n <h2>{{ ReportName }}</h2>\r\n </a>\r\n</h6>\r\n\r\n<app-loader *ngIf=\"loadingState === ComponentLoadingState.Loading\"></app-loader>\r\n<section>\r\n <form [formGroup]=\"searchForm\" (ngSubmit)=\"onSearch()\">\r\n <div class=\"row\">\r\n <div class=\"col-custom-10-5\">\r\n <div class=\"filter-grid\">\r\n\r\n <!-- Dynamically render filters in order -->\r\n <ng-container *ngFor=\"let field of visibleFields\">\r\n <ng-container [ngSwitch]=\"field\">\r\n\r\n <!-- Client -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'client'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"clients1\" bindLabel=\"businessPartnerName\" bindValue=\"businessPartnerCode\"\r\n placeholder=\"Select Client\" [clearable]=\"false\" formControlName=\"client\" required\r\n (change)=\"onClientChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Branch -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'branch'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"branches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n placeholder=\"Select Branch\" [clearable]=\"false\" formControlName=\"branch\" required\r\n (change)=\"onBranchChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" formControlName=\"fromDate\" autocomplete=\"off\" />\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\" />\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'product'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"products\" bindLabel=\"productName\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- User -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'userId'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">User<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"users\" bindLabel=\"userName\" bindValue=\"userId\" placeholder=\"Select User\"\r\n [clearable]=\"false\" formControlName=\"userId\" required (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Currency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'currency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindLabel=\"currencyCode\" bindValue=\"currencyCode\"\r\n placeholder=\"Select Currency\" [clearable]=\"false\" formControlName=\"currency\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction Status (Multi-select) -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionStatus'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Status<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select class=\"transaction-status-select\" [items]=\"transactionStatuses\"\r\n bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\" [multiple]=\"true\"\r\n placeholder=\"Select Transaction Status\" formControlName=\"transactionStatus\"\r\n [closeOnSelect]=\"false\" [clearable]=\"false\" [searchable]=\"false\" required>\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction No -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionNo'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Number</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <input class=\"form-control dpicker\" formControlName=\"transactionNo\"\r\n placeholder=\"Enter transaction number\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Value Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'valueDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-3\">\r\n <label class=\"form-label label-data\">Value Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\" />\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toDateInput.toggle()\">\r\n <i class=\"fa fa-calendar\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Send Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"sendCountry\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'receiveCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Receive Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"receiveCountry\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Transaction Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionProduct'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"transactionProducts\" bindLabel=\"name\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Type -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'dateType'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date Type</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select placeholder=\"- Please select -\" formControlName=\"dateType\" [clearable]=\"false\"\r\n required>\r\n <ng-option [value]=\"1\">\r\n Value Date\r\n </ng-option>\r\n <ng-option [value]=\"2\">\r\n Posting Date\r\n </ng-option>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'date'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"date\" autocomplete=\"off\" />\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-custom-1-5\">\r\n <!-- View Report Button (Always at Top-Right) -->\r\n <div class=\"form-field view-report-btn\">\r\n <button type=\"submit\" class=\"btn btn-report\">View</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</section>\r\n<hr>\r\n<!-- Error Messages -->\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"formValidationError && hasSearched\">\r\n Please fill all required fields before submitting the form.\r\n</div>\r\n\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"errorMessage && loadingState === ComponentLoadingState.Error\">\r\n {{ errorMessage }}\r\n <button type=\"button\" class=\"btn-close\" (click)=\"errorMessage = ''\"></button>\r\n</div>", styles: ["@charset \"UTF-8\";.filter-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;grid-column:span 3}.form-field{display:flex;flex-direction:column;padding:0 4px 0 0!important;min-width:0}.col-custom-10-5{flex:0 0 87.5%!important;max-width:87.5%!important}.col-custom-1-5{flex:0 0 12.5%!important;max-width:12.5%!important;padding:0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{overflow:hidden;flex-wrap:nowrap}::ng-deep .ng-select .ng-select-container .ng-value-container .ng-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}::ng-deep .ng-select .ng-select-container{height:32px!important;min-height:32px!important;font-size:12px!important;align-items:center}.form-label{margin-bottom:0!important}.date-group{height:32px!important}::ng-deep .transaction-status-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:4px 0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{padding-top:0}::ng-deep .ng-dropdown-panel .ng-option{font-size:12px}.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px;padding:4px 15px!important;margin-left:10px!important;width:110px!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}.fa-calendar{--fa: \"\\f073\" !important}.dpicker{border:1px solid #ccc!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2;margin-left:0!important}.cal:focus{box-shadow:none!important}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}@media (max-width: 768px){.filter-grid{grid-template-columns:1fr;gap:12px}}.input-group-button{background:none!important;border:1px solid #1877F2!important;background-color:#1877f2!important;border-radius:0 3px 3px 0!important;min-width:35px;margin-left:1px;height:32px!important;cursor:pointer}.input-group-button .fa{color:#fff}.input-group-button:focus{box-shadow:0 0 5px 3px #009ee054}.input-group-button:focus{outline:none!important;box-shadow:none!important}.Breadcrumb h1,.Breadcrumb h2{font-weight:700}\n"], dependencies: [{ kind: "directive", type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i6.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i7.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "directive", type: i7.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "component", type: i8.LoaderComponent, selector: "app-loader" }] });
551
551
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SearchFilterComponent, decorators: [{
552
552
  type: Component,
553
- args: [{ selector: 'lib-search-filter', template: "<h6 class=\"Breadcrumb\">\r\n <a class=\"BreadCrumbLink\" [routerLink]=\"['/reports']\">\r\n <h1>Reports</h1>\r\n </a>\r\n <a href=\"BreadCrumbLink\"></a>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <a class=\"BreadCrumbLink\">\r\n <h2>{{ ReportName }}</h2>\r\n </a>\r\n</h6>\r\n\r\n<app-loader *ngIf=\"loadingState === ComponentLoadingState.Loading\"></app-loader>\r\n<section>\r\n <form [formGroup]=\"searchForm\" (ngSubmit)=\"onSearch()\">\r\n <div class=\"row\">\r\n <div class=\"col-custom-10-5\">\r\n <div class=\"filter-grid\">\r\n\r\n <!-- Dynamically render filters in order -->\r\n <ng-container *ngFor=\"let field of visibleFields\">\r\n <ng-container [ngSwitch]=\"field\">\r\n\r\n <!-- Client -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'client'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"clients1\" bindLabel=\"businessPartnerName\" bindValue=\"businessPartnerCode\"\r\n placeholder=\"Select Client\" [clearable]=\"false\" formControlName=\"client\" required\r\n (change)=\"onClientChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Branch -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'branch'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"branches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n placeholder=\"Select Branch\" [clearable]=\"false\" formControlName=\"branch\" required\r\n (change)=\"onBranchChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" formControlName=\"fromDate\" autocomplete=\"off\" />\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\" />\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'product'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"products\" bindLabel=\"productName\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- User -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'userId'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">User<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"users\" bindLabel=\"userName\" bindValue=\"userId\" placeholder=\"Select User\"\r\n [clearable]=\"false\" formControlName=\"userId\" required (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Currency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'currency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindLabel=\"currencyCode\" bindValue=\"currencyCode\"\r\n placeholder=\"Select Currency\" [clearable]=\"false\" formControlName=\"currency\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction Status (Multi-select) -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionStatus'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Status<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select class=\"transaction-status-select\" [items]=\"transactionStatuses\"\r\n bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\" [multiple]=\"true\"\r\n placeholder=\"Select Transaction Status\" formControlName=\"transactionStatus\"\r\n [closeOnSelect]=\"false\" [clearable]=\"false\" [searchable]=\"false\" required>\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction No -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionNo'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Number</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <input class=\"form-control dpicker\" formControlName=\"transactionNo\"\r\n placeholder=\"Enter transaction number\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Value Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'valueDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-3\">\r\n <label class=\"form-label label-data\">Value Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\" />\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toDateInput.toggle()\">\r\n <i class=\"fa fa-calendar\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Send Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"sendCountry\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'receiveCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Receive Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"receiveCountry\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Transaction Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionProduct'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"transactionProducts\" bindLabel=\"name\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Value Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'valueDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-3\">\r\n <label class=\"form-label label-data\">Value Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\" />\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toDateInput.toggle()\">\r\n <i class=\"fa fa-calendar\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Type -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'dateType'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date Type</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select placeholder=\"- Please select -\" formControlName=\"dateType\" [clearable]=\"false\"\r\n required>\r\n <ng-option [value]=\"1\">\r\n Value Date\r\n </ng-option>\r\n <ng-option [value]=\"2\">\r\n Posting Date\r\n </ng-option>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'date'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"date\" autocomplete=\"off\" />\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-custom-1-5\">\r\n <!-- View Report Button (Always at Top-Right) -->\r\n <div class=\"form-field view-report-btn\">\r\n <button type=\"submit\" class=\"btn btn-report\">View</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</section>\r\n<hr>\r\n<!-- Error Messages -->\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"formValidationError && hasSearched\">\r\n Please fill all required fields before submitting the form.\r\n</div>\r\n\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"errorMessage && loadingState === ComponentLoadingState.Error\">\r\n {{ errorMessage }}\r\n <button type=\"button\" class=\"btn-close\" (click)=\"errorMessage = ''\"></button>\r\n</div>", styles: ["@charset \"UTF-8\";.filter-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;grid-column:span 3}.form-field{display:flex;flex-direction:column;padding:0 4px 0 0!important;min-width:0}.col-custom-10-5{flex:0 0 87.5%!important;max-width:87.5%!important}.col-custom-1-5{flex:0 0 12.5%!important;max-width:12.5%!important;padding:0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{overflow:hidden;flex-wrap:nowrap}::ng-deep .ng-select .ng-select-container .ng-value-container .ng-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}::ng-deep .ng-select .ng-select-container{height:32px!important;min-height:32px!important;font-size:12px!important;align-items:center}.form-label{margin-bottom:0!important}.date-group{height:32px!important}::ng-deep .transaction-status-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:4px 0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{padding-top:0}::ng-deep .ng-dropdown-panel .ng-option{font-size:12px}.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px;padding:4px 15px!important;margin-left:10px!important;width:110px!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}.fa-calendar{--fa: \"\\f073\" !important}.dpicker{border:1px solid #ccc!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2;margin-left:0!important}.cal:focus{box-shadow:none!important}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}@media (max-width: 768px){.filter-grid{grid-template-columns:1fr;gap:12px}}.input-group-button{background:none!important;border:1px solid #1877F2!important;background-color:#1877f2!important;border-radius:0 3px 3px 0!important;min-width:35px;margin-left:1px;height:32px!important;cursor:pointer}.input-group-button .fa{color:#fff}.input-group-button:focus{box-shadow:0 0 5px 3px #009ee054}.input-group-button:focus{outline:none!important;box-shadow:none!important}.Breadcrumb h1,.Breadcrumb h2{font-weight:700}\n"] }]
553
+ args: [{ selector: 'lib-search-filter', template: "<h6 class=\"Breadcrumb\">\r\n <a class=\"BreadCrumbLink\" [routerLink]=\"['/reports']\">\r\n <h1>Reports</h1>\r\n </a>\r\n <a href=\"BreadCrumbLink\"></a>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <a class=\"BreadCrumbLink\">\r\n <h2>{{ ReportName }}</h2>\r\n </a>\r\n</h6>\r\n\r\n<app-loader *ngIf=\"loadingState === ComponentLoadingState.Loading\"></app-loader>\r\n<section>\r\n <form [formGroup]=\"searchForm\" (ngSubmit)=\"onSearch()\">\r\n <div class=\"row\">\r\n <div class=\"col-custom-10-5\">\r\n <div class=\"filter-grid\">\r\n\r\n <!-- Dynamically render filters in order -->\r\n <ng-container *ngFor=\"let field of visibleFields\">\r\n <ng-container [ngSwitch]=\"field\">\r\n\r\n <!-- Client -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'client'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"clients1\" bindLabel=\"businessPartnerName\" bindValue=\"businessPartnerCode\"\r\n placeholder=\"Select Client\" [clearable]=\"false\" formControlName=\"client\" required\r\n (change)=\"onClientChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Branch -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'branch'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"branches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n placeholder=\"Select Branch\" [clearable]=\"false\" formControlName=\"branch\" required\r\n (change)=\"onBranchChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" formControlName=\"fromDate\" autocomplete=\"off\" />\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\" />\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'product'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"products\" bindLabel=\"productName\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- User -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'userId'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">User<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"users\" bindLabel=\"userName\" bindValue=\"userId\" placeholder=\"Select User\"\r\n [clearable]=\"false\" formControlName=\"userId\" required (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Currency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'currency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindLabel=\"currencyCode\" bindValue=\"currencyCode\"\r\n placeholder=\"Select Currency\" [clearable]=\"false\" formControlName=\"currency\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction Status (Multi-select) -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionStatus'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Status<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select class=\"transaction-status-select\" [items]=\"transactionStatuses\"\r\n bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\" [multiple]=\"true\"\r\n placeholder=\"Select Transaction Status\" formControlName=\"transactionStatus\"\r\n [closeOnSelect]=\"false\" [clearable]=\"false\" [searchable]=\"false\" required>\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction No -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionNo'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Number</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <input class=\"form-control dpicker\" formControlName=\"transactionNo\"\r\n placeholder=\"Enter transaction number\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Value Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'valueDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-3\">\r\n <label class=\"form-label label-data\">Value Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\" />\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toDateInput.toggle()\">\r\n <i class=\"fa fa-calendar\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Send Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"sendCountry\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'receiveCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Receive Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"receiveCountry\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Transaction Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionProduct'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"transactionProducts\" bindLabel=\"name\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Type -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'dateType'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date Type</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select placeholder=\"- Please select -\" formControlName=\"dateType\" [clearable]=\"false\"\r\n required>\r\n <ng-option [value]=\"1\">\r\n Value Date\r\n </ng-option>\r\n <ng-option [value]=\"2\">\r\n Posting Date\r\n </ng-option>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'date'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"date\" autocomplete=\"off\" />\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-custom-1-5\">\r\n <!-- View Report Button (Always at Top-Right) -->\r\n <div class=\"form-field view-report-btn\">\r\n <button type=\"submit\" class=\"btn btn-report\">View</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</section>\r\n<hr>\r\n<!-- Error Messages -->\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"formValidationError && hasSearched\">\r\n Please fill all required fields before submitting the form.\r\n</div>\r\n\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"errorMessage && loadingState === ComponentLoadingState.Error\">\r\n {{ errorMessage }}\r\n <button type=\"button\" class=\"btn-close\" (click)=\"errorMessage = ''\"></button>\r\n</div>", styles: ["@charset \"UTF-8\";.filter-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;grid-column:span 3}.form-field{display:flex;flex-direction:column;padding:0 4px 0 0!important;min-width:0}.col-custom-10-5{flex:0 0 87.5%!important;max-width:87.5%!important}.col-custom-1-5{flex:0 0 12.5%!important;max-width:12.5%!important;padding:0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{overflow:hidden;flex-wrap:nowrap}::ng-deep .ng-select .ng-select-container .ng-value-container .ng-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}::ng-deep .ng-select .ng-select-container{height:32px!important;min-height:32px!important;font-size:12px!important;align-items:center}.form-label{margin-bottom:0!important}.date-group{height:32px!important}::ng-deep .transaction-status-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:4px 0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{padding-top:0}::ng-deep .ng-dropdown-panel .ng-option{font-size:12px}.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px;padding:4px 15px!important;margin-left:10px!important;width:110px!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}.fa-calendar{--fa: \"\\f073\" !important}.dpicker{border:1px solid #ccc!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2;margin-left:0!important}.cal:focus{box-shadow:none!important}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}@media (max-width: 768px){.filter-grid{grid-template-columns:1fr;gap:12px}}.input-group-button{background:none!important;border:1px solid #1877F2!important;background-color:#1877f2!important;border-radius:0 3px 3px 0!important;min-width:35px;margin-left:1px;height:32px!important;cursor:pointer}.input-group-button .fa{color:#fff}.input-group-button:focus{box-shadow:0 0 5px 3px #009ee054}.input-group-button:focus{outline:none!important;box-shadow:none!important}.Breadcrumb h1,.Breadcrumb h2{font-weight:700}\n"] }]
554
554
  }], ctorParameters: function () { return [{ type: i1.ReportService }, { type: i2.FormBuilder }, { type: i3.ConfigService }]; }, propDecorators: { ReportName: [{
555
555
  type: Input
556
556
  }], searchClicked: [{
557
557
  type: Output
558
558
  }] } });
559
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL3NoYXJlZC9zZWFyY2gtZmlsdGVyL3NlYXJjaC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9zaGFyZWQvc2VhcmNoLWZpbHRlci9zZWFyY2gtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFnQixLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQW1CLFNBQVMsRUFBZSxTQUFTLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0csT0FBTyxFQUEyQyxxQkFBcUIsRUFBOEQsTUFBTSxtRUFBbUUsQ0FBQztBQUMvTSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBVzNDLE1BQU0sT0FBTyxxQkFBcUI7SUF1RGhDLFlBQ1UsYUFBNEIsRUFDNUIsRUFBZSxFQUNmLE1BQXFCO1FBRnJCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBeERyQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFHbEQsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzdCLGFBQVEsR0FBRyxJ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LENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzVELEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7WUFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7O2tIQW5tQlUscUJBQXFCO3NHQUFyQixxQkFBcUIsNElDakJsQyw2eGVBOFNNOzJGRDdSTyxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsbUJBQW1COzBKQU1wQixVQUFVO3NCQUFsQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3ksIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFVzZXJSZXBvcnREZWZhdWx0cywgQ29tcGFueVJlcG9ydENvbmZpZywgQ29tcG9uZW50TG9hZGluZ1N0YXRlLCBDbGllbnQsIEJyYW5jaCwgQ3VycmVuY3ksIFByb2R1Y3QsIFRyYW5zYWN0aW9uU3RhdHVzLCBVc2VyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RyYW5zYWN0aW9uLWVucXVpcnktcmVwb3J0L3RyYW5zYWN0aW9uLWVucXVpcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zZWFyY2gtZmlsdGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWZpbHRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU2VhcmNoRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIFJlcG9ydE5hbWUhOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHNlYXJjaENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgc2VhcmNoRm9ybSE6IEZvcm1Hcm91cDtcclxuICBmb3JtVmFsaWRhdGlvbkVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGxvYWRpbmdTdGF0ZTogQ29tcG9uZW50TG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZTtcclxuICBoYXNTZWFyY2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2Vycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIGN1cnJlbnRVc2VyOiBzdHJpbmcgPSAnJztcclxuICB1c2VybmFtZU1pc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0b2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc190b2tlbicpO1xyXG4gIGFwcGxpY2F0aW9uVHlwZSA9ICdlenJlbWl0JztcclxuICBjb21wYW55Q29kZSA9ICdCSCc7XHJcbiAgc2VydmljZVVybDogc3RyaW5nO1xyXG4gIHVzZXJSZXBvcnREZWZhdWx0czogVXNlclJlcG9ydERlZmF1bHRzIHwgbnVsbCA9IG51bGw7XHJcbiAgY29tcGFueVJlcG9ydENvbmZpZzogQ29tcGFueVJlcG9ydENvbmZpZyB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyBpc09wZW4gPSBmYWxzZTtcclxuXHJcbiAgY2xpZW50czE6IENsaWVudFtdID0gW107XHJcbiAgYnJhbmNoZXM6IEJyYW5jaFtdID0gW107XHJcbiAgdXNlcnM6IFVzZXJbXSA9IFtdO1xyXG4gIGN1cnJlbmNpZXM6IEN1cnJlbmN5W10gPSBbXTtcclxuICBwcm9kdWN0czogUHJvZHVjdFtdID0gW107XHJcbiAgdHJhbnNhY3Rpb25TdGF0dXNlczogVHJhbnNhY3Rpb25TdGF0dXNbXSA9IFtdO1xyXG4gIHNlbGVjdGVkU3RhdHVzZXM6IHN0cmluZ1tdID0gW107XHJcbiAgc2hvd1N0YXR1c0Ryb3Bkb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmlzaWJsZUZpZWxkS2V5czogc3RyaW5nW10gPSBbXTtcclxuICBwYXJhbXM6IGFueTtcclxuICBjb3VudHJpZXM6IGFueVtdID0gW107XHJcbiAgdHJhbnNhY3Rpb25Qcm9kdWN0czogYW55W10gPSBbXTtcclxuICBkYXRlVHlwZTogYW55ID0gMTtcclxuICBkYXRlOiBhbnk7XHJcblxyXG4gIC8vIEZpZWxkIHZpc2liaWxpdHkgbWFwLCAnZnJvbURhdGUnLCAndG9EYXRlJywncHJvZHVjdCcsJ3VzZXJJZCcsJ2N1cnJlbmN5JywndHJhbnNhY3Rpb25TdGF0dXMnLCd0cmFuc2FjdGlvbk5vJ1xyXG4gIHZpc2libGVGaWVsZHNNYXA6IHsgW3JlcG9ydDogc3RyaW5nXTogc3RyaW5nW10gfSA9IHtcclxuICAgICdUcmFuc2FjdGlvbiBFbnF1aXJ5JzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJywnYnJhbmNoJywgJ3Byb2R1Y3QnLCAnY3VycmVuY3knLCAndHJhbnNhY3Rpb25TdGF0dXMnLCd0cmFuc2FjdGlvbk5vJ10sXHJcbiAgICAnRkMgTGVkZ2VyJzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJywgJ2N1cnJlbmN5JywgJ3Byb2R1Y3QnXSxcclxuICAgICdCcmFuY2ggQWN0aXZpdHkgU2VuZCc6IFsnY2xpZW50JywgJ2Zyb21EYXRlJywgJ3RvRGF0ZScsICdicmFuY2gnLCAndHJhbnNhY3Rpb25Qcm9kdWN0JywgJ2N1cnJlbmN5JywgJ3RyYW5zYWN0aW9uU3RhdHVzJywgJ3NlbmRDb3VudHJ5JywgJ3JlY2VpdmVDb3VudHJ5J10sXHJcbiAgICAnQUNDIEdMIERldGFpbHMgRW5xdWlyeSc6IFsnZGF0ZVR5cGUnLCAnZGF0ZSddLFxyXG4gICAgLy8gQWRkIG1vcmUgcmVwb3J0IHR5cGVzIGhlcmVcclxuICB9O1xyXG5cclxuICBnZXQgdmlzaWJsZUZpZWxkcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlRmllbGRzTWFwW3RoaXMuUmVwb3J0TmFtZV0gfHwgW107XHJcbiAgfVxyXG5cclxuICBpc0ZpZWxkVmlzaWJsZShmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlRmllbGRzLmluY2x1ZGVzKGZpZWxkKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZXBvcnRTZXJ2aWNlOiBSZXBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5zZXJ2aWNlVXJsID0gdGhpcy5jb25maWcuZ2V0LnNlcnZpY2VVcmw7XHJcbiAgICBsZXQgZm9zc2lsVXNlciA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2Zvc3NpbHVzZXJuYW1lJyk7XHJcbiAgICBsZXQgZXpyZW1pdFVzZXIgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdlenJlbWl0dXNlcm5hbWUnKTtcclxuXHJcbiAgICBpZiAoZm9zc2lsVXNlcikgdGhpcy5jdXJyZW50VXNlciA9IGZvc3NpbFVzZXI7XHJcbiAgICBlbHNlIGlmIChlenJlbWl0VXNlcikgdGhpcy5jdXJyZW50VXNlciA9IGV6cmVtaXRVc2VyO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIHRoaXMuY3VycmVudFVzZXIgPSAndmlwdWwua2F0YWxlQHhwcmVzc21vbmV5LnRlY2gnO1xyXG4gICAgICB0aGlzLnVzZXJuYW1lTWlzc2luZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5jdXJyZW50VXNlci5yZXBsYWNlKC9eW1wiJ10oLiopW1wiJ10kLywgJyQxJyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hlY2tSZXBvcnQoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrUmVwb3J0KCkge1xyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyYW5zYWN0aW9uIEVucXVpcnlcIikge1xyXG4gICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5jdXJyZW50VXNlci5yZXBsYWNlKC9cIi9nLCAnJyk7XHJcblxyXG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpO1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kXCIpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YSgpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvRGF0ZUNoYW5nZXMoKTtcclxuICAgIH1cclxuICAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQUNDIEdMIERldGFpbHMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcblxyXG4gIGxvYWRJbml0aWFsRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gJ1RyYW5zYWN0aW9uIEVucXVpcnknKSB7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhZm9ydHhuRW5xdWlyeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZFwiKSB7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhZm9yQnJhbmNoQWN0aXZpdHlTZW5kKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplRm9ybSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmFuc2FjdGlvbiBFbnF1aXJ5XCIpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtID0gdGhpcy5mYi5ncm91cChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjbGllbnQ6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGZyb21EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0b0RhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGJyYW5jaDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdXNlcklkOiBbJy0xJ10sXHJcbiAgICAgICAgICBjdXJyZW5jeTogWydBbGwnXSxcclxuICAgICAgICAgIHByb2R1Y3Q6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uU3RhdHVzOiBbWydBbGwnXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbk5vOiBbJyddLFxyXG4gICAgICAgICAgY2FyZE5vOiBbJyddLFxyXG4gICAgICAgICAgaWRUeXBlOiBbJyddLFxyXG4gICAgICAgICAgaWRObzogWycnXSxcclxuICAgICAgICAgIHNlbmRlck5hbWU6IFsnJ10sXHJcbiAgICAgICAgICBiZW5lZmljaWFyeU5hbWU6IFsnJ10sXHJcbiAgICAgICAgICB0ZWxObzogWycnXSxcclxuICAgICAgICAgIHJlY2VpdmVBbW91bnQ6IFsnJ10sXHJcbiAgICAgICAgICBicmFuY2hOYW1lOiBbJyddLFxyXG4gICAgICAgICAgY291bnRyeTogWycnXSxcclxuICAgICAgICB9LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZFN0YXR1c2VzID0gWydBbGwnXTtcclxufVxyXG5pZiAodGhpcy5SZXBvcnROYW1lID09IFwiQUNDIEdMIERldGFpbHMgRW5xdWlyeVwiKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBkYXRlVHlwZTogWzEsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgfSk7XHJcbn1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZFwiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xpZW50OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBmcm9tRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdG9EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBicmFuY2g6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGN1cnJlbmN5OiBbJ0FsbCddLFxyXG4gICAgICAgICAgcHJvZHVjdDogWydBbGwnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uU3RhdHVzOiBbWydBbGwnXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBzZW5kQ291bnRyeTogWydBbGwnXSxcclxuICAgICAgICAgIHJlY2VpdmVDb3VudHJ5OiBbJ0FsbCddXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZEluaXRpYWxEYXRhZm9yQnJhbmNoQWN0aXZpdHlTZW5kKCkge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgcGFyYW1zOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0UGFyYW1zKCkucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHBhcmFtcycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKSxcclxuICAgICAgY2xpZW50czogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldFBheUluQWdlbnRzKHRoaXMuY3VycmVudFVzZXIpLnBpcGUoXHJcbiAgICAgICAgbWFwKChjbGllbnRzOiBhbnlbXSk6IENsaWVudFtdID0+XHJcbiAgICAgICAgICBjbGllbnRzLm1hcCgoY2xpZW50LCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyTmFtZTogY2xpZW50LmFnZW50LFxyXG4gICAgICAgICAgICBidXNpbmVzc1BhcnRuZXJDb2RlOiBjbGllbnQuY29kZSxcclxuICAgICAgICAgICAgZGlzcGxheU9yZGVyOiBpbmRleCAvLyBvciB1c2Ugc29tZSB2YWx1ZSBmcm9tIHRoZSBBUEkgaWYgYXZhaWxhYmxlXHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICApLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY2xpZW50cycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH0pLnN1YnNjcmliZShcclxuICAgICAge1xyXG4gICAgICAgIG5leHQ6ICh7IHBhcmFtcywgY2xpZW50cyB9KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgICAgICAgIHRoaXMuY2xpZW50czEgPSBjbGllbnRzO1xyXG4gICAgICAgICAgLy8gdGhpcy5jbGllbnRzRGF0YSA9IFsuLi5jbGllbnRzXTtcclxuICAgICAgICAgIHRoaXMuY291bnRyaWVzID0gWy4uLnBhcmFtcz8uY291bnRyaWVzXVxyXG4gICAgICAgICAgdGhpcy5jdXJyZW5jaWVzID0gWy4uLnBhcmFtcz8uY3VycmVuY2llc107XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMgPSBbLi4ucGFyYW1zPy50cmFuc2FjdGlvblN0YXR1c1R5cGVzXTtcclxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Qcm9kdWN0cyA9IFsuLi5wYXJhbXM/LnRyYW5zYWN0aW9uUHJvZHVjdFR5cGVzXTtcclxuICAgICAgICAgIGlmICghc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZm9zc2lsdXNlcm5hbWUnKSAmJiB0aGlzLmNsaWVudHMxPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RDbGllbnQodGhpcy5jbGllbnRzMVswXS5idXNpbmVzc1BhcnRuZXJDb2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgLy8gT2NjdXJzIG9ubHkgaWYgYW4gaW5uZXIgY2F0Y2hFcnJvciBzdGlsbCByZXRocm93c1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBmb3JrSm9pbiBlcnJvcicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICAgIHRoaXMub25DbGllbnRTZWxlY3RlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9hZEluaXRpYWxEYXRhZm9ydHhuRW5xdWlyeSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucmVwb3J0U2VydmljZVxyXG4gICAgICAgIC5nZXRQYWdlTG9hZERhdGEodGhpcy5jdXJyZW50VXNlcilcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmNsaWVudHMxID0gZGF0YS5jbGllbnRzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuY3VycmVuY2llcyA9IGRhdGEuY3VycmVuY2llcyB8fCBbXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMgPSAoZGF0YS50cmFuc2FjdGlvblN0YXR1c2VzIHx8IFtdKS5maWx0ZXIoXHJcbiAgICAgICAgICB0cyA9PiB0cy50cmFuc2FjdGlvblN0YXR1cyAhPT0gJydcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMuc29tZShcclxuICAgICAgICAgICAgcyA9PiBzLnRyYW5zYWN0aW9uU3RhdHVzID09PSAnQWxsJ1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvblN0YXR1c2VzLnVuc2hpZnQoe1xyXG4gICAgICAgICAgICB0cmFuc2FjdGlvblN0YXR1czogJ0FsbCcsXHJcbiAgICAgICAgICB9IGFzIFRyYW5zYWN0aW9uU3RhdHVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdEZvcm1WYWx1ZXMoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2xpZW50czEubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGNsaWVudDogdGhpcy5jbGllbnRzMVswXS5idXNpbmVzc1BhcnRuZXJDb2RlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLm9uQ2xpZW50Q2hhbmdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCB0byBsb2FkIGluaXRpYWwgZGF0YSc7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXRlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZnJvbURhdGVTdHIgPT4ge1xyXG4gICAgICBjb25zdCB0b0RhdGVDb250cm9sID0gdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXRlJyk7XHJcbiAgICAgIGNvbnN0IHRvRGF0ZVN0ciA9IHRvRGF0ZUNvbnRyb2w/LnZhbHVlO1xyXG4gICAgICBpZiAoIWZyb21EYXRlU3RyIHx8ICF0b0RhdGVTdHIpIHJldHVybjtcclxuICAgICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZVN0cik7XHJcbiAgICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKHRvRGF0ZVN0cik7XHJcblxyXG4gICAgICBjb25zdCBtYXhUb0RhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZSk7XHJcbiAgICAgIG1heFRvRGF0ZT8uc2V0RGF0ZShmcm9tRGF0ZS5nZXREYXRlKCkgKyAzMSk7XHJcbiAgICAgIGlmICh0b0RhdGUuc2V0SG91cnMoMCwwLDAsMCkgPiBtYXhUb0RhdGUuc2V0SG91cnMoMCwwLDAsMCkgfHwgdG9EYXRlLnNldEhvdXJzKDAsMCwwLDApIDwgZnJvbURhdGUuc2V0SG91cnMoMCwwLDAsMCkpIHsgXHJcbiAgICAgICAgbWF4VG9EYXRlLnNldEhvdXJzKDEyLDAsMCwwKTtcclxuICAgICAgICB0b0RhdGVDb250cm9sPy5wYXRjaFZhbHVlKG1heFRvRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codG9EYXRlQ29udHJvbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvRGF0ZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHRvRGF0ZVN0ciA9PiB7XHJcbiAgICAgIGNvbnN0IGZyb21EYXRlQ29udHJvbCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXRlJyk7XHJcbiAgICAgIGNvbnN0IGZyb21EYXRlU3RyID0gZnJvbURhdGVDb250cm9sPy52YWx1ZTtcclxuICAgICAgaWYgKCF0b0RhdGVTdHIgfHwgIWZyb21EYXRlU3RyKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKHRvRGF0ZVN0cik7XHJcbiAgICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUoZnJvbURhdGVTdHIpO1xyXG5cclxuICAgICAgY29uc3QgbWluRnJvbURhdGUgPSBuZXcgRGF0ZSh0b0RhdGUpO1xyXG4gICAgICBtaW5Gcm9tRGF0ZT8uc2V0RGF0ZSh0b0RhdGUuZ2V0RGF0ZSgpIC0gMzEpO1xyXG4gICAgICBpZiAoZnJvbURhdGUuc2V0SG91cnMoMCwwLDAsMCkgPCBtaW5Gcm9tRGF0ZS5zZXRIb3VycygwLDAsMCwwKSkgeyAgXHJcbiAgICAgICAgbWluRnJvbURhdGUuc2V0SG91cnMoMTIsMCwwLDApO1xyXG4gICAgICAgIGZyb21EYXRlQ29udHJvbD8ucGF0Y2hWYWx1ZShtaW5Gcm9tRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgc2V0RGVmYXVsdEZvcm1WYWx1ZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy51c2VyUmVwb3J0RGVmYXVsdHMpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIGN1cnJlbmN5OiB0aGlzLnVzZXJSZXBvcnREZWZhdWx0cy5Mb2NhbEN1cnJlbmN5IHx8ICdBbGwnLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBhc3luYyBvbkNsaWVudENoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmFuc2FjdGlvbiBFbnF1aXJ5XCIpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRDbGllbnQgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdjbGllbnQnKT8udmFsdWU7XHJcbiAgICAgIGlmICghc2VsZWN0ZWRDbGllbnQpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiAnJywgdXNlcklkOiAnJyB9KTtcclxuICAgICAgdGhpcy5icmFuY2hlcyA9IFtdO1xyXG4gICAgICB0aGlzLnByb2R1Y3RzID0gW107XHJcbiAgICAgIHRoaXMudXNlcnMgPSBbXTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgdGhpcy5sb2FkQnJhbmNoZXNCeUFnZW50KHNlbGVjdGVkQ2xpZW50KSxcclxuICAgICAgICAgIHRoaXMubG9hZFByb2R1Y3RzQnlBZ2VudChzZWxlY3RlZENsaWVudCksXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBwcm9kdWN0OiAnQWxsJyB9KTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIHRvIGxvYWQgYnJhbmNoL3Byb2R1Y3QnO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kXCIpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRDbGllbnQgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdjbGllbnQnKT8udmFsdWU7XHJcbiAgICAgIGlmICghc2VsZWN0ZWRDbGllbnQpIHJldHVybjtcclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEJyYW5jaEJ5QWdlbnQodGhpcy5jdXJyZW50VXNlciwgc2VsZWN0ZWRDbGllbnQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuYnJhbmNoZXMgPSBkYXRhO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiZXpyZW1pdHVzZXJuYW1lXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5icmFuY2hlcy5maW5kSW5kZXgoKGJyYW5jaCkgPT4gYnJhbmNoLmJyYW5jaENvZGUgPT09IFwiQWxsXCIpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHNbJ2JyYW5jaCddLnNldFZhbHVlKHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHNbJ2JyYW5jaCddLnNldFZhbHVlKCdBbGwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWRCcmFuY2hlc0J5QWdlbnQoYWdlbnRDb2RlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGJyYW5jaGVzID0gYXdhaXQgdGhpcy5yZXBvcnRTZXJ2aWNlXHJcbiAgICAgIC5nZXRCcmFuY2hlc0J5QWdlbnQoYWdlbnRDb2RlLCB0aGlzLmN1cnJlbnRVc2VyKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIHRoaXMuYnJhbmNoZXMgPSBicmFuY2hlcyB8fCBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5icmFuY2hlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBicmFuY2g6IHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSB9KTtcclxuICAgICAgLy8gYXdhaXQgdGhpcy5sb2FkVXNlcnNCeUJyYW5jaChhZ2VudENvZGUsIHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnJhbmNoZXMuc29tZShiID0+IGIuYnJhbmNoQ29kZSA9PT0gJ0FsbCcpKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiAnQWxsJyB9KTtcclxuICAgICAgLy8gYXdhaXQgdGhpcy5sb2FkVXNlcnNCeUJyYW5jaChhZ2VudENvZGUsICdBbGwnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiAnJyB9KTtcclxuICAgICAgdGhpcy51c2VycyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkUHJvZHVjdHNCeUFnZW50KGFnZW50Q29kZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwcm9kdWN0cyA9IGF3YWl0IHRoaXMucmVwb3J0U2VydmljZVxyXG4gICAgICAuZ2V0UHJvZHVjdHNCeUFnZW50KGFnZW50Q29kZSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB0aGlzLnByb2R1Y3RzID0gcHJvZHVjdHMgfHwgW107XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkJyYW5jaENoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmFuc2FjdGlvbiBFbnF1aXJ5XCIpIHtcclxuICAgIC8vICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgIC8vICAgY29uc3QgY2xpZW50ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgLy8gICBjb25zdCBicmFuY2ggPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdicmFuY2gnKT8udmFsdWU7XHJcbiAgICAvLyAgIGlmIChjbGllbnQgJiYgYnJhbmNoKSB7XHJcbiAgICAvLyAgICAgLy8gYXdhaXQgdGhpcy5sb2FkVXNlcnNCeUJyYW5jaChjbGllbnQsIGJyYW5jaCk7XHJcbiAgICAvLyAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgdGhpcy51c2VycyA9IFtdO1xyXG4gICAgLy8gICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuLy8gICBwcml2YXRlIGFzeW5jIGxvYWRVc2Vyc0J5QnJhbmNoKGFnZW50Q29kZTogc3RyaW5nLCBicmFuY2hDb2RlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuLy8gICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4vLyAgICAgdGhpcy5yZXBvcnRTZXJ2aWNlXHJcbi8vICAgICAgIC5nZXRVc2Vyc0J5QnJhbmNoKGFnZW50Q29kZSwgYnJhbmNoQ29kZSlcclxuLy8gICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4vLyAgICAgICAuc3Vic2NyaWJlKHtcclxuLy8gICAgICAgICBuZXh0OiAodXNlcnMpID0+IHtcclxuLy8gICAgICAgICAgIHRoaXMudXNlcnMgPSB1c2VycyB8fCBbXTtcclxuXHJcbi8vICAgICAgICAgICAvLyBUcnkgdG8gZmluZCBhIHVzZXIgaW5kaWNhdGluZyBcIkFsbFwiXHJcbi8vICAgICAgICAgICBjb25zdCBhbGxVc2VyID0gdGhpcy51c2Vycy5maW5kKFxyXG4vLyAgICAgICAgICAgICB1ID0+IHUudXNlck5hbWUgPT09ICdBbGwnIHx8IHUudXNlcklkID09PSAtMVxyXG4vLyAgICAgICAgICAgKTtcclxuXHJcbi8vICAgICAgICAgICBpZiAoYWxsVXNlcikge1xyXG4vLyAgICAgICAgICAgICAvLyBJZiBcIkFsbFwiIGlzIHByZXNlbnQsIHNlbGVjdCBpdFxyXG4vLyAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IHVzZXJJZDogYWxsVXNlci51c2VySWQgfSk7XHJcbi8vICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlcnMubGVuZ3RoID09PSAxKSB7XHJcbi8vICAgICAgICAgICAgIC8vIElmIG9ubHkgb25lIHVzZXIsIHNlbGVjdCB0aGF0IHVzZXJcclxuLy8gICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyB1c2VySWQ6IHRoaXMudXNlcnNbMF0udXNlcklkIH0pO1xyXG4vLyAgICAgICAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBjbGVhciB1c2VyIHNlbGVjdGlvblxyXG4vLyAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IHVzZXJJZDogJycgfSk7XHJcbi8vICAgICAgICAgICB9XHJcblxyXG4vLyAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4vLyAgICAgICAgIH0sXHJcbi8vICAgICAgICAgZXJyb3I6IChlcnIpID0+IHJlamVjdChlcnIpLFxyXG4vLyAgICAgICB9KTtcclxuLy8gICB9KTtcclxuLy8gfVxyXG5cclxuICBvblNlYXJjaCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmFuc2FjdGlvbiBFbnF1aXJ5XCIpIHtcclxuICAgICAgdGhpcy5oYXNTZWFyY2hlZCA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZvcm0uaW52YWxpZCkge1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb25FcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tYXJrRm9ybUdyb3VwVG91Y2hlZCh0aGlzLnNlYXJjaEZvcm0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hDbGlja2VkLmVtaXQodGhpcy5idWlsZFNlYXJjaENyaXRlcmlhKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZFwiKSB7XHJcbiAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIC8vIHRoaXMubWFya0Zvcm1Hcm91cFRvdWNoZWQodGhpcy5zZWFyY2hGb3JtKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQUNDIEdMIERldGFpbHMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIGNvbnN0IG1vZGFsID0ge1xyXG4gICAgICAgIHNlbGVjdGVkRGF0ZVR5cGU6IHRoaXMuc2VhcmNoRm9ybS5jb250cm9sc1tcImRhdGVUeXBlXCJdPy52YWx1ZSxcclxuICAgICAgICBzZWxlY3RlZERhdGU6IHRoaXMuc2VhcmNoRm9ybS5jb250cm9sc1tcImRhdGVcIl0/LnZhbHVlXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWFyY2hDbGlja2VkLmVtaXQobW9kYWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXJrRm9ybUdyb3VwVG91Y2hlZChmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSk6IHZvaWQge1xyXG4gICAgT2JqZWN0LnZhbHVlcyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICB0aGlzLm1hcmtGb3JtR3JvdXBUb3VjaGVkKGNvbnRyb2wpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRTZWFyY2hDcml0ZXJpYSgpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyYW5zYWN0aW9uIEVucXVpcnlcIikge1xyXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnNlYXJjaEZvcm0udmFsdWU7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgYmFuazogZm9ybVZhbHVlLmNsaWVudCxcclxuICAgICAgICBmcm9tRGF0ZTogdGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUuZnJvbURhdGUpLFxyXG4gICAgICAgIHRvRGF0ZTogdGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKSxcclxuICAgICAgICBicmFuY2g6IGZvcm1WYWx1ZS5icmFuY2gsXHJcbiAgICAgICAgdXNlcjogZm9ybVZhbHVlLnVzZXJJZCB8fCAnLTEnLFxyXG4gICAgICAgIGN1cnJlbmN5OiBmb3JtVmFsdWUuY3VycmVuY3ksXHJcbiAgICAgICAgcHJvZHVjdDogZm9ybVZhbHVlLnByb2R1Y3QsXHJcbiAgICAgICAgc3RhdHVzOiB0aGlzLnNlbGVjdGVkU3RhdHVzZXMuaW5jbHVkZXMoJ0FsbCcpID8gWycnXSA6IHRoaXMuc2VsZWN0ZWRTdGF0dXNlcyxcclxuICAgICAgICB0cmFuc2FjdGlvbk5vOiAoZm9ybVZhbHVlLnRyYW5zYWN0aW9uTm8gfHwgJycpLnRyaW0oKSxcclxuICAgICAgICBjYXJkTm86IGZvcm1WYWx1ZS5jYXJkTm8gfHwgJycsXHJcbiAgICAgICAgaWRUeXBlOiBmb3JtVmFsdWUuaWRUeXBlIHx8ICcnLFxyXG4gICAgICAgIGlkTm86IGZvcm1WYWx1ZS5pZE5vIHx8ICcnLFxyXG4gICAgICAgIHNlbmRlck5hbWU6IGZvcm1WYWx1ZS5zZW5kZXJOYW1lIHx8ICcnLFxyXG4gICAgICAgIGJlbmVmaWNpYXJ5TmFtZTogZm9ybVZhbHVlLmJlbmVmaWNpYXJ5TmFtZSB8fCAnJyxcclxuICAgICAgICB0ZWxObzogZm9ybVZhbHVlLnRlbE5vIHx8ICcnLFxyXG4gICAgICAgIHBheW91dEFtb3VudDogZm9ybVZhbHVlLnJlY2VpdmVBbW91bnQgfHwgJycsXHJcbiAgICAgICAgYnJhbmNoTmFtZTogZm9ybVZhbHVlLmJyYW5jaE5hbWUgfHwgJycsXHJcbiAgICAgICAgY29tcGFueTogdGhpcy5jb21wYW55Q29kZSB8fCAnJyxcclxuICAgICAgICBjb3VudHJ5OiBmb3JtVmFsdWUuY291bnRyeSB8fCAnJyxcclxuICAgICAgICBzeXNVc2VySUQ6IHRoaXMuY3VycmVudFVzZXIsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kXCIpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG1vZGFsOiBmb3JtVmFsdWUsXHJcbiAgICAgICAgc3lzVXNlcklEOiB0aGlzLmN1cnJlbnRVc2VyXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvSXNvRm9ybWF0KGRhdGVJbnB1dDogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghZGF0ZUlucHV0KSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIC8vIEhhbmRsZSB7IHllYXIsIG1vbnRoLCBkYXkgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0eXBlb2YgZGF0ZUlucHV0ID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICBkYXRlSW5wdXQueWVhciAmJlxyXG4gICAgICBkYXRlSW5wdXQubW9udGggJiZcclxuICAgICAgZGF0ZUlucHV0LmRheVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHllYXIgPSBkYXRlSW5wdXQueWVhcjtcclxuICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZUlucHV0Lm1vbnRoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZUlucHV0LmRheSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIEpTIERhdGUgb2JqZWN0XHJcbiAgICBpZiAoZGF0ZUlucHV0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICBpZiAoaXNOYU4oZGF0ZUlucHV0LmdldFRpbWUoKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIGNvbnN0IHllYXIgPSBkYXRlSW5wdXQuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZUlucHV0LmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZUlucHV0LmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIGRkL01NL3l5eXkgc3RyaW5nXHJcbiAgICBpZiAodHlwZW9mIGRhdGVJbnB1dCA9PT0gJ3N0cmluZycgJiYgZGF0ZUlucHV0LmluY2x1ZGVzKCcvJykpIHtcclxuICAgICAgY29uc3QgcGFydHMgPSBkYXRlSW5wdXQuc3BsaXQoJy8nKTtcclxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHBhcnRzO1xyXG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRoLnBhZFN0YXJ0KDIsICcwJyl9LSR7ZGF5LnBhZFN0YXJ0KDIsICcwJyl9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBJU08gc3RyaW5nICh5eXl5LU1NLWRkIG9yIHl5eXktTU0tZGRUSEg6bW06c3Muc3NzWilcclxuICAgIGlmICh0eXBlb2YgZGF0ZUlucHV0ID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9Ly50ZXN0KGRhdGVJbnB1dCkpIHtcclxuICAgICAgLy8gVXNlIG9ubHkgZGF0ZSBwYXJ0IGlmIGZ1bGwgSVNPIHN0cmluZ1xyXG4gICAgICByZXR1cm4gZGF0ZUlucHV0LnN1YnN0cmluZygwLCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIG9uT3BlbigpIHtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICB9XHJcbiAgb25DbG9zZSgpIHtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yTWVzc2FnZTtcclxuICB9XHJcblxyXG4gIHNldCBlcnJvck1lc3NhZ2UodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N0YXRlID09PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICB9XHJcblxyXG4gIGdldCBpc0Vycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N0YXRlID09PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuRXJyb3I7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDbGllbnQoY2xpZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5jb250cm9sc1tcImNsaWVudFwiXS5zZXRWYWx1ZShjbGllbnQpO1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzW1wiYnJhbmNoXCJdLnNldFZhbHVlKG51bGwpO1xyXG4gICAgdGhpcy5vbkFnZW50U2VsZWN0ZWQoY2xpZW50KTtcclxuICB9XHJcblxyXG4gIG9uQWdlbnRTZWxlY3RlZChjb2RlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaEZvcm0uY29udHJvbHNbJ2NsaWVudCddLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VhcmNoRm9ybS5jb250cm9sc1snYnJhbmNoJ10ucGF0Y2hWYWx1ZShudWxsKTtcclxuICAgIC8vIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Mb2FkaW5nO1xyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEJyYW5jaEJ5QWdlbnQodGhpcy5jdXJyZW50VXNlciwgY29kZSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmJyYW5jaGVzID0gZGF0YTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAvLyB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJlenJlbWl0dXNlcm5hbWVcIikpIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5icmFuY2hlcy5maW5kSW5kZXgoKGJyYW5jaCkgPT4gYnJhbmNoLmJyYW5jaENvZGUgPT09IFwiQWxsXCIpO1xyXG4gICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5jb250cm9sc1snYnJhbmNoJ10uc2V0VmFsdWUodGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzWydicmFuY2gnXS5zZXRWYWx1ZSgnQWxsJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiZm9zc2lsdXNlcm5hbWVcIikpe1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzWydicmFuY2gnXS5zZXRWYWx1ZSgnQWxsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DbGllbnRTZWxlY3RlZCgpIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2NsaWVudCcpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgdmFsID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICB0aGlzLm9uQWdlbnRTZWxlY3RlZCh2YWwpO1xyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIiwiPGg2IGNsYXNzPVwiQnJlYWRjcnVtYlwiPlxyXG4gIDxhIGNsYXNzPVwiQnJlYWRDcnVtYkxpbmtcIiBbcm91dGVyTGlua109XCJbJy9yZXBvcnRzJ11cIj5cclxuICAgIDxoMT5SZXBvcnRzPC9oMT5cclxuICA8L2E+XHJcbiAgPGEgaHJlZj1cIkJyZWFkQ3J1bWJMaW5rXCI+PC9hPlxyXG4gIDxzcGFuIGNsYXNzPVwiQnJlYWRDcnVtYkFycm93XCI+PC9zcGFuPlxyXG4gIDxhIGNsYXNzPVwiQnJlYWRDcnVtYkxpbmtcIj5cclxuICAgIDxoMj57eyBSZXBvcnROYW1lIH19PC9oMj5cclxuICA8L2E+XHJcbjwvaDY+XHJcblxyXG48YXBwLWxvYWRlciAqbmdJZj1cImxvYWRpbmdTdGF0ZSA9PT0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmdcIj48L2FwcC1sb2FkZXI+XHJcbjxzZWN0aW9uPlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwic2VhcmNoRm9ybVwiIChuZ1N1Ym1pdCk9XCJvblNlYXJjaCgpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtY3VzdG9tLTEwLTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRHluYW1pY2FsbHkgcmVuZGVyIGZpbHRlcnMgaW4gb3JkZXIgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHZpc2libGVGaWVsZHNcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZFwiPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIENsaWVudCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInY2xpZW50J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+Q2xpZW50PHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJjbGllbnRzMVwiIGJpbmRMYWJlbD1cImJ1c2luZXNzUGFydG5lck5hbWVcIiBiaW5kVmFsdWU9XCJidXNpbmVzc1BhcnRuZXJDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IENsaWVudFwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJjbGllbnRcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNsaWVudENoYW5nZSgpXCIgKG9wZW4pPVwib25PcGVuKClcIiAoY2xvc2UpPVwib25DbG9zZSgpXCIgW3NlYXJjaGFibGVdPVwiaXNPcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gQnJhbmNoIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidicmFuY2gnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5CcmFuY2g8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImJyYW5jaGVzXCIgYmluZExhYmVsPVwiYnVzaW5lc3NQYXJ0bmVyQnJhbmNoXCIgYmluZFZhbHVlPVwiYnJhbmNoQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBCcmFuY2hcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiYnJhbmNoXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25CcmFuY2hDaGFuZ2UoKVwiIChvcGVuKT1cIm9uT3BlbigpXCIgKGNsb3NlKT1cIm9uQ2xvc2UoKVwiIFtzZWFyY2hhYmxlXT1cImlzT3BlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gRnJvbSBEYXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2Zyb21EYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+RnJvbSBEYXRlPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgZGF0ZS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZHBpY2tlclwiIHBsYWNlaG9sZGVyPVwiZGQvbW0veXl5eVwiIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAjZnJvbURhdGVJbnB1dD1cIm5nYkRhdGVwaWNrZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJmcm9tRGF0ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC1ncm91cC1idXR0b24gY2FsXCIgKGNsaWNrKT1cImZyb21EYXRlSW5wdXQudG9nZ2xlKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRvIERhdGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndG9EYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VG8gRGF0ZTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGRhdGUtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGRwaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIiBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI3RvRGF0ZUlucHV0PVwibmdiRGF0ZXBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cInRvRGF0ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC1ncm91cC1idXR0b24gY2FsXCIgKGNsaWNrKT1cInRvRGF0ZUlucHV0LnRvZ2dsZSgpXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gUHJvZHVjdCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIncHJvZHVjdCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlByb2R1Y3Q8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInByb2R1Y3RzXCIgYmluZExhYmVsPVwicHJvZHVjdE5hbWVcIiBiaW5kVmFsdWU9XCJwcm9kdWN0Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBQcm9kdWN0XCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RcIiAob3Blbik9XCJvbk9wZW4oKVwiIChjbG9zZSk9XCJvbkNsb3NlKClcIiBbc2VhcmNoYWJsZV09XCJpc09wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBVc2VyIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIid1c2VySWQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5Vc2VyPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ1c2Vyc1wiIGJpbmRMYWJlbD1cInVzZXJOYW1lXCIgYmluZFZhbHVlPVwidXNlcklkXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgVXNlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwidXNlcklkXCIgcmVxdWlyZWQgKG9wZW4pPVwib25PcGVuKClcIiAoY2xvc2UpPVwib25DbG9zZSgpXCIgW3NlYXJjaGFibGVdPVwiaXNPcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gQ3VycmVuY3kgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+Q3VycmVuY3k8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImN1cnJlbmNpZXNcIiBiaW5kTGFiZWw9XCJjdXJyZW5jeUNvZGVcIiBiaW5kVmFsdWU9XCJjdXJyZW5jeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQ3VycmVuY3lcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3VycmVuY3lcIiAob3Blbik9XCJvbk9wZW4oKVwiIChjbG9zZSk9XCJvbkNsb3NlKClcIiBbc2VhcmNoYWJsZV09XCJpc09wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBUcmFuc2FjdGlvbiBTdGF0dXMgKE11bHRpLXNlbGVjdCkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3RyYW5zYWN0aW9uU3RhdHVzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VHhuLiBTdGF0dXM8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgY2xhc3M9XCJ0cmFuc2FjdGlvbi1zdGF0dXMtc2VsZWN0XCIgW2l0ZW1zXT1cInRyYW5zYWN0aW9uU3RhdHVzZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwidHJhbnNhY3Rpb25TdGF0dXNcIiBiaW5kVmFsdWU9XCJ0cmFuc2FjdGlvblN0YXR1c1wiIFttdWx0aXBsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFRyYW5zYWN0aW9uIFN0YXR1c1wiIGZvcm1Db250cm9sTmFtZT1cInRyYW5zYWN0aW9uU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbG9zZU9uU2VsZWN0XT1cImZhbHNlXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIFtzZWFyY2hhYmxlXT1cImZhbHNlXCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaXRlbSQ9XCJpdGVtJFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiaXRlbSQuc2VsZWN0ZWRcIiAvPiB7eyBpdGVtLnRyYW5zYWN0aW9uU3RhdHVzIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFRyYW5zYWN0aW9uIE5vIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIid0cmFuc2FjdGlvbk5vJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VHhuLiBOdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBkcGlja2VyXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJhbnNhY3Rpb25Ob1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHRyYW5zYWN0aW9uIG51bWJlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVmFsdWUgRGF0ZSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndmFsdWVEYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VmFsdWUgRGF0ZTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBkcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5XCIgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAjdG9EYXRlSW5wdXQ9XCJuZ2JEYXRlcGlja2VyXCIgZm9ybUNvbnRyb2xOYW1lPVwidG9EYXRlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b0RhdGVJbnB1dC50b2dnbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gU2VuZCBDb3VudHJ5IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidzZW5kQ291bnRyeSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlNlbmQgQ291bnRyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwiY291bnRyaWVzXCIgYmluZExhYmVsPVwiY291bnRyeVwiIGJpbmRWYWx1ZT1cImNvdW50cnlDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFByb2R1Y3RcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VuZENvdW50cnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBSZWNlaXZlIENvdW50cnkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3JlY2VpdmVDb3VudHJ5J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+UmVjZWl2ZSBDb3VudHJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJjb3VudHJpZXNcIiBiaW5kTGFiZWw9XCJjb3VudHJ5XCIgYmluZFZhbHVlPVwiY291bnRyeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgUHJvZHVjdFwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJyZWNlaXZlQ291bnRyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tVHJhbnNhY3Rpb24gUHJvZHVjdCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndHJhbnNhY3Rpb25Qcm9kdWN0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+UHJvZHVjdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwidHJhbnNhY3Rpb25Qcm9kdWN0c1wiIGJpbmRMYWJlbD1cIm5hbWVcIiBiaW5kVmFsdWU9XCJwcm9kdWN0Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBQcm9kdWN0XCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFZhbHVlIERhdGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndmFsdWVEYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VmFsdWUgRGF0ZTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGRwaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIiBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI3RvRGF0ZUlucHV0PVwibmdiRGF0ZXBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cInRvRGF0ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b0RhdGVJbnB1dC50b2dnbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBEYXRlIFR5cGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInZGF0ZVR5cGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5EYXRlIFR5cGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgcGxhY2Vob2xkZXI9XCItIFBsZWFzZSBzZWxlY3QgLVwiIGZvcm1Db250cm9sTmFtZT1cImRhdGVUeXBlXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctb3B0aW9uIFt2YWx1ZV09XCIxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLW9wdGlvbiBbdmFsdWVdPVwiMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3RpbmcgRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gRGF0ZSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+RGF0ZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGRhdGUtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGRwaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIiBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI3RvRGF0ZUlucHV0PVwibmdiRGF0ZXBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cImRhdGVcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnV0dG9uIGNhbFwiIChjbGljayk9XCJ0b0RhdGVJbnB1dC50b2dnbGUoKVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtY3VzdG9tLTEtNVwiPlxyXG4gICAgICAgIDwhLS0gVmlldyBSZXBvcnQgQnV0dG9uIChBbHdheXMgYXQgVG9wLVJpZ2h0KSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZCB2aWV3LXJlcG9ydC1idG5cIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1yZXBvcnRcIj5WaWV3PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9mb3JtPlxyXG48L3NlY3Rpb24+XHJcbjxocj5cclxuPCEtLSBFcnJvciBNZXNzYWdlcyAtLT5cclxuPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBtdC0zXCIgKm5nSWY9XCJmb3JtVmFsaWRhdGlvbkVycm9yICYmIGhhc1NlYXJjaGVkXCI+XHJcbiAgUGxlYXNlIGZpbGwgYWxsIHJlcXVpcmVkIGZpZWxkcyBiZWZvcmUgc3VibWl0dGluZyB0aGUgZm9ybS5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIG10LTNcIiAqbmdJZj1cImVycm9yTWVzc2FnZSAmJiBsb2FkaW5nU3RhdGUgPT09IENvbXBvbmVudExvYWRpbmdTdGF0ZS5FcnJvclwiPlxyXG4gIHt7IGVycm9yTWVzc2FnZSB9fVxyXG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgKGNsaWNrKT1cImVycm9yTWVzc2FnZSA9ICcnXCI+PC9idXR0b24+XHJcbjwvZGl2PiJdfQ==
559
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL3NoYXJlZC9zZWFyY2gtZmlsdGVyL3NlYXJjaC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9zaGFyZWQvc2VhcmNoLWZpbHRlci9zZWFyY2gtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFnQixLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQW1CLFNBQVMsRUFBZSxTQUFTLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0csT0FBTyxFQUEyQyxxQkFBcUIsRUFBOEQsTUFBTSxtRUFBbUUsQ0FBQztBQUMvTSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBVzNDLE1BQU0sT0FBTyxxQkFBcUI7SUF1RGhDLFlBQ1UsYUFBNEIsRUFDNUIsRUFBZSxFQUNmLE1BQXFCO1FBRnJCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBeERyQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFHbEQsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzdCLGFBQVEsR0FBRyxJ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LENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzVELEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7WUFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7O2tIQW5tQlUscUJBQXFCO3NHQUFyQixxQkFBcUIsNElDakJsQyw2eGNBNFJNOzJGRDNRTyxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsbUJBQW1COzBKQU1wQixVQUFVO3NCQUFsQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3ksIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFVzZXJSZXBvcnREZWZhdWx0cywgQ29tcGFueVJlcG9ydENvbmZpZywgQ29tcG9uZW50TG9hZGluZ1N0YXRlLCBDbGllbnQsIEJyYW5jaCwgQ3VycmVuY3ksIFByb2R1Y3QsIFRyYW5zYWN0aW9uU3RhdHVzLCBVc2VyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RyYW5zYWN0aW9uLWVucXVpcnktcmVwb3J0L3RyYW5zYWN0aW9uLWVucXVpcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zZWFyY2gtZmlsdGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWZpbHRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU2VhcmNoRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIFJlcG9ydE5hbWUhOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHNlYXJjaENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgc2VhcmNoRm9ybSE6IEZvcm1Hcm91cDtcclxuICBmb3JtVmFsaWRhdGlvbkVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGxvYWRpbmdTdGF0ZTogQ29tcG9uZW50TG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZTtcclxuICBoYXNTZWFyY2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2Vycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIGN1cnJlbnRVc2VyOiBzdHJpbmcgPSAnJztcclxuICB1c2VybmFtZU1pc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0b2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc190b2tlbicpO1xyXG4gIGFwcGxpY2F0aW9uVHlwZSA9ICdlenJlbWl0JztcclxuICBjb21wYW55Q29kZSA9ICdCSCc7XHJcbiAgc2VydmljZVVybDogc3RyaW5nO1xyXG4gIHVzZXJSZXBvcnREZWZhdWx0czogVXNlclJlcG9ydERlZmF1bHRzIHwgbnVsbCA9IG51bGw7XHJcbiAgY29tcGFueVJlcG9ydENvbmZpZzogQ29tcGFueVJlcG9ydENvbmZpZyB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyBpc09wZW4gPSBmYWxzZTtcclxuXHJcbiAgY2xpZW50czE6IENsaWVudFtdID0gW107XHJcbiAgYnJhbmNoZXM6IEJyYW5jaFtdID0gW107XHJcbiAgdXNlcnM6IFVzZXJbXSA9IFtdO1xyXG4gIGN1cnJlbmNpZXM6IEN1cnJlbmN5W10gPSBbXTtcclxuICBwcm9kdWN0czogUHJvZHVjdFtdID0gW107XHJcbiAgdHJhbnNhY3Rpb25TdGF0dXNlczogVHJhbnNhY3Rpb25TdGF0dXNbXSA9IFtdO1xyXG4gIHNlbGVjdGVkU3RhdHVzZXM6IHN0cmluZ1tdID0gW107XHJcbiAgc2hvd1N0YXR1c0Ryb3Bkb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmlzaWJsZUZpZWxkS2V5czogc3RyaW5nW10gPSBbXTtcclxuICBwYXJhbXM6IGFueTtcclxuICBjb3VudHJpZXM6IGFueVtdID0gW107XHJcbiAgdHJhbnNhY3Rpb25Qcm9kdWN0czogYW55W10gPSBbXTtcclxuICBkYXRlVHlwZTogYW55ID0gMTtcclxuICBkYXRlOiBhbnk7XHJcblxyXG4gIC8vIEZpZWxkIHZpc2liaWxpdHkgbWFwLCAnZnJvbURhdGUnLCAndG9EYXRlJywncHJvZHVjdCcsJ3VzZXJJZCcsJ2N1cnJlbmN5JywndHJhbnNhY3Rpb25TdGF0dXMnLCd0cmFuc2FjdGlvbk5vJ1xyXG4gIHZpc2libGVGaWVsZHNNYXA6IHsgW3JlcG9ydDogc3RyaW5nXTogc3RyaW5nW10gfSA9IHtcclxuICAgICdUcmFuc2FjdGlvbiBFbnF1aXJ5JzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJywnYnJhbmNoJywgJ3Byb2R1Y3QnLCAnY3VycmVuY3knLCAndHJhbnNhY3Rpb25TdGF0dXMnLCd0cmFuc2FjdGlvbk5vJ10sXHJcbiAgICAnRkMgTGVkZ2VyJzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJywgJ2N1cnJlbmN5JywgJ3Byb2R1Y3QnXSxcclxuICAgICdCcmFuY2ggQWN0aXZpdHkgU2VuZCc6IFsnY2xpZW50JywgJ2Zyb21EYXRlJywgJ3RvRGF0ZScsICdicmFuY2gnLCAndHJhbnNhY3Rpb25Qcm9kdWN0JywgJ2N1cnJlbmN5JywgJ3RyYW5zYWN0aW9uU3RhdHVzJywgJ3NlbmRDb3VudHJ5JywgJ3JlY2VpdmVDb3VudHJ5J10sXHJcbiAgICAnQUNDIEdMIERldGFpbHMgRW5xdWlyeSc6IFsnZGF0ZVR5cGUnLCAnZGF0ZSddLFxyXG4gICAgLy8gQWRkIG1vcmUgcmVwb3J0IHR5cGVzIGhlcmVcclxuICB9O1xyXG5cclxuICBnZXQgdmlzaWJsZUZpZWxkcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlRmllbGRzTWFwW3RoaXMuUmVwb3J0TmFtZV0gfHwgW107XHJcbiAgfVxyXG5cclxuICBpc0ZpZWxkVmlzaWJsZShmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlRmllbGRzLmluY2x1ZGVzKGZpZWxkKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZXBvcnRTZXJ2aWNlOiBSZXBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5zZXJ2aWNlVXJsID0gdGhpcy5jb25maWcuZ2V0LnNlcnZpY2VVcmw7XHJcbiAgICBsZXQgZm9zc2lsVXNlciA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2Zvc3NpbHVzZXJuYW1lJyk7XHJcbiAgICBsZXQgZXpyZW1pdFVzZXIgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdlenJlbWl0dXNlcm5hbWUnKTtcclxuXHJcbiAgICBpZiAoZm9zc2lsVXNlcikgdGhpcy5jdXJyZW50VXNlciA9IGZvc3NpbFVzZXI7XHJcbiAgICBlbHNlIGlmIChlenJlbWl0VXNlcikgdGhpcy5jdXJyZW50VXNlciA9IGV6cmVtaXRVc2VyO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIHRoaXMuY3VycmVudFVzZXIgPSAndmlwdWwua2F0YWxlQHhwcmVzc21vbmV5LnRlY2gnO1xyXG4gICAgICB0aGlzLnVzZXJuYW1lTWlzc2luZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5jdXJyZW50VXNlci5yZXBsYWNlKC9eW1wiJ10oLiopW1wiJ10kLywgJyQxJyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hlY2tSZXBvcnQoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrUmVwb3J0KCkge1xyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyYW5zYWN0aW9uIEVucXVpcnlcIikge1xyXG4gICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5jdXJyZW50VXNlci5yZXBsYWNlKC9cIi9nLCAnJyk7XHJcblxyXG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpO1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kXCIpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YSgpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvRGF0ZUNoYW5nZXMoKTtcclxuICAgIH1cclxuICAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQUNDIEdMIERldGFpbHMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcblxyXG4gIGxvYWRJbml0aWFsRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gJ1RyYW5zYWN0aW9uIEVucXVpcnknKSB7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhZm9ydHhuRW5xdWlyeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZFwiKSB7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhZm9yQnJhbmNoQWN0aXZpdHlTZW5kKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplRm9ybSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmFuc2FjdGlvbiBFbnF1aXJ5XCIpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtID0gdGhpcy5mYi5ncm91cChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjbGllbnQ6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGZyb21EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0b0RhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGJyYW5jaDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdXNlcklkOiBbJy0xJ10sXHJcbiAgICAgICAgICBjdXJyZW5jeTogWydBbGwnXSxcclxuICAgICAgICAgIHByb2R1Y3Q6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uU3RhdHVzOiBbWydBbGwnXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbk5vOiBbJyddLFxyXG4gICAgICAgICAgY2FyZE5vOiBbJyddLFxyXG4gICAgICAgICAgaWRUeXBlOiBbJyddLFxyXG4gICAgICAgICAgaWRObzogWycnXSxcclxuICAgICAgICAgIHNlbmRlck5hbWU6IFsnJ10sXHJcbiAgICAgICAgICBiZW5lZmljaWFyeU5hbWU6IFsnJ10sXHJcbiAgICAgICAgICB0ZWxObzogWycnXSxcclxuICAgICAgICAgIHJlY2VpdmVBbW91bnQ6IFsnJ10sXHJcbiAgICAgICAgICBicmFuY2hOYW1lOiBbJyddLFxyXG4gICAgICAgICAgY291bnRyeTogWycnXSxcclxuICAgICAgICB9LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZFN0YXR1c2VzID0gWydBbGwnXTtcclxufVxyXG5pZiAodGhpcy5SZXBvcnROYW1lID09IFwiQUNDIEdMIERldGFpbHMgRW5xdWlyeVwiKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBkYXRlVHlwZTogWzEsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgfSk7XHJcbn1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZFwiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xpZW50OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBmcm9tRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdG9EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBicmFuY2g6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGN1cnJlbmN5OiBbJ0FsbCddLFxyXG4gICAgICAgICAgcHJvZHVjdDogWydBbGwnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uU3RhdHVzOiBbWydBbGwnXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBzZW5kQ291bnRyeTogWydBbGwnXSxcclxuICAgICAgICAgIHJlY2VpdmVDb3VudHJ5OiBbJ0FsbCddXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZEluaXRpYWxEYXRhZm9yQnJhbmNoQWN0aXZpdHlTZW5kKCkge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgcGFyYW1zOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0UGFyYW1zKCkucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHBhcmFtcycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKSxcclxuICAgICAgY2xpZW50czogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldFBheUluQWdlbnRzKHRoaXMuY3VycmVudFVzZXIpLnBpcGUoXHJcbiAgICAgICAgbWFwKChjbGllbnRzOiBhbnlbXSk6IENsaWVudFtdID0+XHJcbiAgICAgICAgICBjbGllbnRzLm1hcCgoY2xpZW50LCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyTmFtZTogY2xpZW50LmFnZW50LFxyXG4gICAgICAgICAgICBidXNpbmVzc1BhcnRuZXJDb2RlOiBjbGllbnQuY29kZSxcclxuICAgICAgICAgICAgZGlzcGxheU9yZGVyOiBpbmRleCAvLyBvciB1c2Ugc29tZSB2YWx1ZSBmcm9tIHRoZSBBUEkgaWYgYXZhaWxhYmxlXHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICApLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY2xpZW50cycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH0pLnN1YnNjcmliZShcclxuICAgICAge1xyXG4gICAgICAgIG5leHQ6ICh7IHBhcmFtcywgY2xpZW50cyB9KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgICAgICAgIHRoaXMuY2xpZW50czEgPSBjbGllbnRzO1xyXG4gICAgICAgICAgLy8gdGhpcy5jbGllbnRzRGF0YSA9IFsuLi5jbGllbnRzXTtcclxuICAgICAgICAgIHRoaXMuY291bnRyaWVzID0gWy4uLnBhcmFtcz8uY291bnRyaWVzXVxyXG4gICAgICAgICAgdGhpcy5jdXJyZW5jaWVzID0gWy4uLnBhcmFtcz8uY3VycmVuY2llc107XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMgPSBbLi4ucGFyYW1zPy50cmFuc2FjdGlvblN0YXR1c1R5cGVzXTtcclxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Qcm9kdWN0cyA9IFsuLi5wYXJhbXM/LnRyYW5zYWN0aW9uUHJvZHVjdFR5cGVzXTtcclxuICAgICAgICAgIGlmICghc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZm9zc2lsdXNlcm5hbWUnKSAmJiB0aGlzLmNsaWVudHMxPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RDbGllbnQodGhpcy5jbGllbnRzMVswXS5idXNpbmVzc1BhcnRuZXJDb2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgLy8gT2NjdXJzIG9ubHkgaWYgYW4gaW5uZXIgY2F0Y2hFcnJvciBzdGlsbCByZXRocm93c1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBmb3JrSm9pbiBlcnJvcicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICAgIHRoaXMub25DbGllbnRTZWxlY3RlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9hZEluaXRpYWxEYXRhZm9ydHhuRW5xdWlyeSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucmVwb3J0U2VydmljZVxyXG4gICAgICAgIC5nZXRQYWdlTG9hZERhdGEodGhpcy5jdXJyZW50VXNlcilcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmNsaWVudHMxID0gZGF0YS5jbGllbnRzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuY3VycmVuY2llcyA9IGRhdGEuY3VycmVuY2llcyB8fCBbXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMgPSAoZGF0YS50cmFuc2FjdGlvblN0YXR1c2VzIHx8IFtdKS5maWx0ZXIoXHJcbiAgICAgICAgICB0cyA9PiB0cy50cmFuc2FjdGlvblN0YXR1cyAhPT0gJydcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMuc29tZShcclxuICAgICAgICAgICAgcyA9PiBzLnRyYW5zYWN0aW9uU3RhdHVzID09PSAnQWxsJ1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvblN0YXR1c2VzLnVuc2hpZnQoe1xyXG4gICAgICAgICAgICB0cmFuc2FjdGlvblN0YXR1czogJ0FsbCcsXHJcbiAgICAgICAgICB9IGFzIFRyYW5zYWN0aW9uU3RhdHVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdEZvcm1WYWx1ZXMoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2xpZW50czEubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGNsaWVudDogdGhpcy5jbGllbnRzMVswXS5idXNpbmVzc1BhcnRuZXJDb2RlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLm9uQ2xpZW50Q2hhbmdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCB0byBsb2FkIGluaXRpYWwgZGF0YSc7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXRlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZnJvbURhdGVTdHIgPT4ge1xyXG4gICAgICBjb25zdCB0b0RhdGVDb250cm9sID0gdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXRlJyk7XHJcbiAgICAgIGNvbnN0IHRvRGF0ZVN0ciA9IHRvRGF0ZUNvbnRyb2w/LnZhbHVlO1xyXG4gICAgICBpZiAoIWZyb21EYXRlU3RyIHx8ICF0b0RhdGVTdHIpIHJldHVybjtcclxuICAgICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZVN0cik7XHJcbiAgICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKHRvRGF0ZVN0cik7XHJcblxyXG4gICAgICBjb25zdCBtYXhUb0RhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZSk7XHJcbiAgICAgIG1heFRvRGF0ZT8uc2V0RGF0ZShmcm9tRGF0ZS5nZXREYXRlKCkgKyAzMSk7XHJcbiAgICAgIGlmICh0b0RhdGUuc2V0SG91cnMoMCwwLDAsMCkgPiBtYXhUb0RhdGUuc2V0SG91cnMoMCwwLDAsMCkgfHwgdG9EYXRlLnNldEhvdXJzKDAsMCwwLDApIDwgZnJvbURhdGUuc2V0SG91cnMoMCwwLDAsMCkpIHsgXHJcbiAgICAgICAgbWF4VG9EYXRlLnNldEhvdXJzKDEyLDAsMCwwKTtcclxuICAgICAgICB0b0RhdGVDb250cm9sPy5wYXRjaFZhbHVlKG1heFRvRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codG9EYXRlQ29udHJvbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvRGF0ZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHRvRGF0ZVN0ciA9PiB7XHJcbiAgICAgIGNvbnN0IGZyb21EYXRlQ29udHJvbCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXRlJyk7XHJcbiAgICAgIGNvbnN0IGZyb21EYXRlU3RyID0gZnJvbURhdGVDb250cm9sPy52YWx1ZTtcclxuICAgICAgaWYgKCF0b0RhdGVTdHIgfHwgIWZyb21EYXRlU3RyKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKHRvRGF0ZVN0cik7XHJcbiAgICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUoZnJvbURhdGVTdHIpO1xyXG5cclxuICAgICAgY29uc3QgbWluRnJvbURhdGUgPSBuZXcgRGF0ZSh0b0RhdGUpO1xyXG4gICAgICBtaW5Gcm9tRGF0ZT8uc2V0RGF0ZSh0b0RhdGUuZ2V0RGF0ZSgpIC0gMzEpO1xyXG4gICAgICBpZiAoZnJvbURhdGUuc2V0SG91cnMoMCwwLDAsMCkgPCBtaW5Gcm9tRGF0ZS5zZXRIb3VycygwLDAsMCwwKSkgeyAgXHJcbiAgICAgICAgbWluRnJvbURhdGUuc2V0SG91cnMoMTIsMCwwLDApO1xyXG4gICAgICAgIGZyb21EYXRlQ29udHJvbD8ucGF0Y2hWYWx1ZShtaW5Gcm9tRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgc2V0RGVmYXVsdEZvcm1WYWx1ZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy51c2VyUmVwb3J0RGVmYXVsdHMpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIGN1cnJlbmN5OiB0aGlzLnVzZXJSZXBvcnREZWZhdWx0cy5Mb2NhbEN1cnJlbmN5IHx8ICdBbGwnLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBhc3luYyBvbkNsaWVudENoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmFuc2FjdGlvbiBFbnF1aXJ5XCIpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRDbGllbnQgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdjbGllbnQnKT8udmFsdWU7XHJcbiAgICAgIGlmICghc2VsZWN0ZWRDbGllbnQpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiAnJywgdXNlcklkOiAnJyB9KTtcclxuICAgICAgdGhpcy5icmFuY2hlcyA9IFtdO1xyXG4gICAgICB0aGlzLnByb2R1Y3RzID0gW107XHJcbiAgICAgIHRoaXMudXNlcnMgPSBbXTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgdGhpcy5sb2FkQnJhbmNoZXNCeUFnZW50KHNlbGVjdGVkQ2xpZW50KSxcclxuICAgICAgICAgIHRoaXMubG9hZFByb2R1Y3RzQnlBZ2VudChzZWxlY3RlZENsaWVudCksXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBwcm9kdWN0OiAnQWxsJyB9KTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIHRvIGxvYWQgYnJhbmNoL3Byb2R1Y3QnO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kXCIpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRDbGllbnQgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdjbGllbnQnKT8udmFsdWU7XHJcbiAgICAgIGlmICghc2VsZWN0ZWRDbGllbnQpIHJldHVybjtcclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEJyYW5jaEJ5QWdlbnQodGhpcy5jdXJyZW50VXNlciwgc2VsZWN0ZWRDbGllbnQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuYnJhbmNoZXMgPSBkYXRhO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiZXpyZW1pdHVzZXJuYW1lXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5icmFuY2hlcy5maW5kSW5kZXgoKGJyYW5jaCkgPT4gYnJhbmNoLmJyYW5jaENvZGUgPT09IFwiQWxsXCIpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHNbJ2JyYW5jaCddLnNldFZhbHVlKHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHNbJ2JyYW5jaCddLnNldFZhbHVlKCdBbGwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWRCcmFuY2hlc0J5QWdlbnQoYWdlbnRDb2RlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGJyYW5jaGVzID0gYXdhaXQgdGhpcy5yZXBvcnRTZXJ2aWNlXHJcbiAgICAgIC5nZXRCcmFuY2hlc0J5QWdlbnQoYWdlbnRDb2RlLCB0aGlzLmN1cnJlbnRVc2VyKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIHRoaXMuYnJhbmNoZXMgPSBicmFuY2hlcyB8fCBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5icmFuY2hlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBicmFuY2g6IHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSB9KTtcclxuICAgICAgLy8gYXdhaXQgdGhpcy5sb2FkVXNlcnNCeUJyYW5jaChhZ2VudENvZGUsIHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnJhbmNoZXMuc29tZShiID0+IGIuYnJhbmNoQ29kZSA9PT0gJ0FsbCcpKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiAnQWxsJyB9KTtcclxuICAgICAgLy8gYXdhaXQgdGhpcy5sb2FkVXNlcnNCeUJyYW5jaChhZ2VudENvZGUsICdBbGwnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiAnJyB9KTtcclxuICAgICAgdGhpcy51c2VycyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkUHJvZHVjdHNCeUFnZW50KGFnZW50Q29kZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwcm9kdWN0cyA9IGF3YWl0IHRoaXMucmVwb3J0U2VydmljZVxyXG4gICAgICAuZ2V0UHJvZHVjdHNCeUFnZW50KGFnZW50Q29kZSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB0aGlzLnByb2R1Y3RzID0gcHJvZHVjdHMgfHwgW107XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkJyYW5jaENoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmFuc2FjdGlvbiBFbnF1aXJ5XCIpIHtcclxuICAgIC8vICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgIC8vICAgY29uc3QgY2xpZW50ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgLy8gICBjb25zdCBicmFuY2ggPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdicmFuY2gnKT8udmFsdWU7XHJcbiAgICAvLyAgIGlmIChjbGllbnQgJiYgYnJhbmNoKSB7XHJcbiAgICAvLyAgICAgLy8gYXdhaXQgdGhpcy5sb2FkVXNlcnNCeUJyYW5jaChjbGllbnQsIGJyYW5jaCk7XHJcbiAgICAvLyAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgdGhpcy51c2VycyA9IFtdO1xyXG4gICAgLy8gICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuLy8gICBwcml2YXRlIGFzeW5jIGxvYWRVc2Vyc0J5QnJhbmNoKGFnZW50Q29kZTogc3RyaW5nLCBicmFuY2hDb2RlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuLy8gICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4vLyAgICAgdGhpcy5yZXBvcnRTZXJ2aWNlXHJcbi8vICAgICAgIC5nZXRVc2Vyc0J5QnJhbmNoKGFnZW50Q29kZSwgYnJhbmNoQ29kZSlcclxuLy8gICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4vLyAgICAgICAuc3Vic2NyaWJlKHtcclxuLy8gICAgICAgICBuZXh0OiAodXNlcnMpID0+IHtcclxuLy8gICAgICAgICAgIHRoaXMudXNlcnMgPSB1c2VycyB8fCBbXTtcclxuXHJcbi8vICAgICAgICAgICAvLyBUcnkgdG8gZmluZCBhIHVzZXIgaW5kaWNhdGluZyBcIkFsbFwiXHJcbi8vICAgICAgICAgICBjb25zdCBhbGxVc2VyID0gdGhpcy51c2Vycy5maW5kKFxyXG4vLyAgICAgICAgICAgICB1ID0+IHUudXNlck5hbWUgPT09ICdBbGwnIHx8IHUudXNlcklkID09PSAtMVxyXG4vLyAgICAgICAgICAgKTtcclxuXHJcbi8vICAgICAgICAgICBpZiAoYWxsVXNlcikge1xyXG4vLyAgICAgICAgICAgICAvLyBJZiBcIkFsbFwiIGlzIHByZXNlbnQsIHNlbGVjdCBpdFxyXG4vLyAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IHVzZXJJZDogYWxsVXNlci51c2VySWQgfSk7XHJcbi8vICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlcnMubGVuZ3RoID09PSAxKSB7XHJcbi8vICAgICAgICAgICAgIC8vIElmIG9ubHkgb25lIHVzZXIsIHNlbGVjdCB0aGF0IHVzZXJcclxuLy8gICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyB1c2VySWQ6IHRoaXMudXNlcnNbMF0udXNlcklkIH0pO1xyXG4vLyAgICAgICAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBjbGVhciB1c2VyIHNlbGVjdGlvblxyXG4vLyAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IHVzZXJJZDogJycgfSk7XHJcbi8vICAgICAgICAgICB9XHJcblxyXG4vLyAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4vLyAgICAgICAgIH0sXHJcbi8vICAgICAgICAgZXJyb3I6IChlcnIpID0+IHJlamVjdChlcnIpLFxyXG4vLyAgICAgICB9KTtcclxuLy8gICB9KTtcclxuLy8gfVxyXG5cclxuICBvblNlYXJjaCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmFuc2FjdGlvbiBFbnF1aXJ5XCIpIHtcclxuICAgICAgdGhpcy5oYXNTZWFyY2hlZCA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZvcm0uaW52YWxpZCkge1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb25FcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tYXJrRm9ybUdyb3VwVG91Y2hlZCh0aGlzLnNlYXJjaEZvcm0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hDbGlja2VkLmVtaXQodGhpcy5idWlsZFNlYXJjaENyaXRlcmlhKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZFwiKSB7XHJcbiAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIC8vIHRoaXMubWFya0Zvcm1Hcm91cFRvdWNoZWQodGhpcy5zZWFyY2hGb3JtKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQUNDIEdMIERldGFpbHMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIGNvbnN0IG1vZGFsID0ge1xyXG4gICAgICAgIHNlbGVjdGVkRGF0ZVR5cGU6IHRoaXMuc2VhcmNoRm9ybS5jb250cm9sc1tcImRhdGVUeXBlXCJdPy52YWx1ZSxcclxuICAgICAgICBzZWxlY3RlZERhdGU6IHRoaXMuc2VhcmNoRm9ybS5jb250cm9sc1tcImRhdGVcIl0/LnZhbHVlXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWFyY2hDbGlja2VkLmVtaXQobW9kYWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXJrRm9ybUdyb3VwVG91Y2hlZChmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSk6IHZvaWQge1xyXG4gICAgT2JqZWN0LnZhbHVlcyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICB0aGlzLm1hcmtGb3JtR3JvdXBUb3VjaGVkKGNvbnRyb2wpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRTZWFyY2hDcml0ZXJpYSgpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyYW5zYWN0aW9uIEVucXVpcnlcIikge1xyXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnNlYXJjaEZvcm0udmFsdWU7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgYmFuazogZm9ybVZhbHVlLmNsaWVudCxcclxuICAgICAgICBmcm9tRGF0ZTogdGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUuZnJvbURhdGUpLFxyXG4gICAgICAgIHRvRGF0ZTogdGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKSxcclxuICAgICAgICBicmFuY2g6IGZvcm1WYWx1ZS5icmFuY2gsXHJcbiAgICAgICAgdXNlcjogZm9ybVZhbHVlLnVzZXJJZCB8fCAnLTEnLFxyXG4gICAgICAgIGN1cnJlbmN5OiBmb3JtVmFsdWUuY3VycmVuY3ksXHJcbiAgICAgICAgcHJvZHVjdDogZm9ybVZhbHVlLnByb2R1Y3QsXHJcbiAgICAgICAgc3RhdHVzOiB0aGlzLnNlbGVjdGVkU3RhdHVzZXMuaW5jbHVkZXMoJ0FsbCcpID8gWycnXSA6IHRoaXMuc2VsZWN0ZWRTdGF0dXNlcyxcclxuICAgICAgICB0cmFuc2FjdGlvbk5vOiAoZm9ybVZhbHVlLnRyYW5zYWN0aW9uTm8gfHwgJycpLnRyaW0oKSxcclxuICAgICAgICBjYXJkTm86IGZvcm1WYWx1ZS5jYXJkTm8gfHwgJycsXHJcbiAgICAgICAgaWRUeXBlOiBmb3JtVmFsdWUuaWRUeXBlIHx8ICcnLFxyXG4gICAgICAgIGlkTm86IGZvcm1WYWx1ZS5pZE5vIHx8ICcnLFxyXG4gICAgICAgIHNlbmRlck5hbWU6IGZvcm1WYWx1ZS5zZW5kZXJOYW1lIHx8ICcnLFxyXG4gICAgICAgIGJlbmVmaWNpYXJ5TmFtZTogZm9ybVZhbHVlLmJlbmVmaWNpYXJ5TmFtZSB8fCAnJyxcclxuICAgICAgICB0ZWxObzogZm9ybVZhbHVlLnRlbE5vIHx8ICcnLFxyXG4gICAgICAgIHBheW91dEFtb3VudDogZm9ybVZhbHVlLnJlY2VpdmVBbW91bnQgfHwgJycsXHJcbiAgICAgICAgYnJhbmNoTmFtZTogZm9ybVZhbHVlLmJyYW5jaE5hbWUgfHwgJycsXHJcbiAgICAgICAgY29tcGFueTogdGhpcy5jb21wYW55Q29kZSB8fCAnJyxcclxuICAgICAgICBjb3VudHJ5OiBmb3JtVmFsdWUuY291bnRyeSB8fCAnJyxcclxuICAgICAgICBzeXNVc2VySUQ6IHRoaXMuY3VycmVudFVzZXIsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kXCIpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG1vZGFsOiBmb3JtVmFsdWUsXHJcbiAgICAgICAgc3lzVXNlcklEOiB0aGlzLmN1cnJlbnRVc2VyXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvSXNvRm9ybWF0KGRhdGVJbnB1dDogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghZGF0ZUlucHV0KSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIC8vIEhhbmRsZSB7IHllYXIsIG1vbnRoLCBkYXkgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0eXBlb2YgZGF0ZUlucHV0ID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICBkYXRlSW5wdXQueWVhciAmJlxyXG4gICAgICBkYXRlSW5wdXQubW9udGggJiZcclxuICAgICAgZGF0ZUlucHV0LmRheVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHllYXIgPSBkYXRlSW5wdXQueWVhcjtcclxuICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZUlucHV0Lm1vbnRoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZUlucHV0LmRheSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIEpTIERhdGUgb2JqZWN0XHJcbiAgICBpZiAoZGF0ZUlucHV0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICBpZiAoaXNOYU4oZGF0ZUlucHV0LmdldFRpbWUoKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIGNvbnN0IHllYXIgPSBkYXRlSW5wdXQuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZUlucHV0LmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZUlucHV0LmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIGRkL01NL3l5eXkgc3RyaW5nXHJcbiAgICBpZiAodHlwZW9mIGRhdGVJbnB1dCA9PT0gJ3N0cmluZycgJiYgZGF0ZUlucHV0LmluY2x1ZGVzKCcvJykpIHtcclxuICAgICAgY29uc3QgcGFydHMgPSBkYXRlSW5wdXQuc3BsaXQoJy8nKTtcclxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHBhcnRzO1xyXG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRoLnBhZFN0YXJ0KDIsICcwJyl9LSR7ZGF5LnBhZFN0YXJ0KDIsICcwJyl9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBJU08gc3RyaW5nICh5eXl5LU1NLWRkIG9yIHl5eXktTU0tZGRUSEg6bW06c3Muc3NzWilcclxuICAgIGlmICh0eXBlb2YgZGF0ZUlucHV0ID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9Ly50ZXN0KGRhdGVJbnB1dCkpIHtcclxuICAgICAgLy8gVXNlIG9ubHkgZGF0ZSBwYXJ0IGlmIGZ1bGwgSVNPIHN0cmluZ1xyXG4gICAgICByZXR1cm4gZGF0ZUlucHV0LnN1YnN0cmluZygwLCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIG9uT3BlbigpIHtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICB9XHJcbiAgb25DbG9zZSgpIHtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yTWVzc2FnZTtcclxuICB9XHJcblxyXG4gIHNldCBlcnJvck1lc3NhZ2UodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N0YXRlID09PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICB9XHJcblxyXG4gIGdldCBpc0Vycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N0YXRlID09PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuRXJyb3I7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDbGllbnQoY2xpZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5jb250cm9sc1tcImNsaWVudFwiXS5zZXRWYWx1ZShjbGllbnQpO1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzW1wiYnJhbmNoXCJdLnNldFZhbHVlKG51bGwpO1xyXG4gICAgdGhpcy5vbkFnZW50U2VsZWN0ZWQoY2xpZW50KTtcclxuICB9XHJcblxyXG4gIG9uQWdlbnRTZWxlY3RlZChjb2RlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaEZvcm0uY29udHJvbHNbJ2NsaWVudCddLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VhcmNoRm9ybS5jb250cm9sc1snYnJhbmNoJ10ucGF0Y2hWYWx1ZShudWxsKTtcclxuICAgIC8vIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Mb2FkaW5nO1xyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEJyYW5jaEJ5QWdlbnQodGhpcy5jdXJyZW50VXNlciwgY29kZSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmJyYW5jaGVzID0gZGF0YTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAvLyB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJlenJlbWl0dXNlcm5hbWVcIikpIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5icmFuY2hlcy5maW5kSW5kZXgoKGJyYW5jaCkgPT4gYnJhbmNoLmJyYW5jaENvZGUgPT09IFwiQWxsXCIpO1xyXG4gICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5jb250cm9sc1snYnJhbmNoJ10uc2V0VmFsdWUodGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzWydicmFuY2gnXS5zZXRWYWx1ZSgnQWxsJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiZm9zc2lsdXNlcm5hbWVcIikpe1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzWydicmFuY2gnXS5zZXRWYWx1ZSgnQWxsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DbGllbnRTZWxlY3RlZCgpIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2NsaWVudCcpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgdmFsID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICB0aGlzLm9uQWdlbnRTZWxlY3RlZCh2YWwpO1xyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIiwiPGg2IGNsYXNzPVwiQnJlYWRjcnVtYlwiPlxyXG4gIDxhIGNsYXNzPVwiQnJlYWRDcnVtYkxpbmtcIiBbcm91dGVyTGlua109XCJbJy9yZXBvcnRzJ11cIj5cclxuICAgIDxoMT5SZXBvcnRzPC9oMT5cclxuICA8L2E+XHJcbiAgPGEgaHJlZj1cIkJyZWFkQ3J1bWJMaW5rXCI+PC9hPlxyXG4gIDxzcGFuIGNsYXNzPVwiQnJlYWRDcnVtYkFycm93XCI+PC9zcGFuPlxyXG4gIDxhIGNsYXNzPVwiQnJlYWRDcnVtYkxpbmtcIj5cclxuICAgIDxoMj57eyBSZXBvcnROYW1lIH19PC9oMj5cclxuICA8L2E+XHJcbjwvaDY+XHJcblxyXG48YXBwLWxvYWRlciAqbmdJZj1cImxvYWRpbmdTdGF0ZSA9PT0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmdcIj48L2FwcC1sb2FkZXI+XHJcbjxzZWN0aW9uPlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwic2VhcmNoRm9ybVwiIChuZ1N1Ym1pdCk9XCJvblNlYXJjaCgpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtY3VzdG9tLTEwLTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRHluYW1pY2FsbHkgcmVuZGVyIGZpbHRlcnMgaW4gb3JkZXIgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHZpc2libGVGaWVsZHNcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZFwiPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIENsaWVudCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInY2xpZW50J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+Q2xpZW50PHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJjbGllbnRzMVwiIGJpbmRMYWJlbD1cImJ1c2luZXNzUGFydG5lck5hbWVcIiBiaW5kVmFsdWU9XCJidXNpbmVzc1BhcnRuZXJDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IENsaWVudFwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJjbGllbnRcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNsaWVudENoYW5nZSgpXCIgKG9wZW4pPVwib25PcGVuKClcIiAoY2xvc2UpPVwib25DbG9zZSgpXCIgW3NlYXJjaGFibGVdPVwiaXNPcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gQnJhbmNoIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidicmFuY2gnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5CcmFuY2g8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImJyYW5jaGVzXCIgYmluZExhYmVsPVwiYnVzaW5lc3NQYXJ0bmVyQnJhbmNoXCIgYmluZFZhbHVlPVwiYnJhbmNoQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBCcmFuY2hcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiYnJhbmNoXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25CcmFuY2hDaGFuZ2UoKVwiIChvcGVuKT1cIm9uT3BlbigpXCIgKGNsb3NlKT1cIm9uQ2xvc2UoKVwiIFtzZWFyY2hhYmxlXT1cImlzT3BlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gRnJvbSBEYXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2Zyb21EYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+RnJvbSBEYXRlPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgZGF0ZS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZHBpY2tlclwiIHBsYWNlaG9sZGVyPVwiZGQvbW0veXl5eVwiIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAjZnJvbURhdGVJbnB1dD1cIm5nYkRhdGVwaWNrZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJmcm9tRGF0ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC1ncm91cC1idXR0b24gY2FsXCIgKGNsaWNrKT1cImZyb21EYXRlSW5wdXQudG9nZ2xlKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRvIERhdGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndG9EYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VG8gRGF0ZTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGRhdGUtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGRwaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIiBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI3RvRGF0ZUlucHV0PVwibmdiRGF0ZXBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cInRvRGF0ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC1ncm91cC1idXR0b24gY2FsXCIgKGNsaWNrKT1cInRvRGF0ZUlucHV0LnRvZ2dsZSgpXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gUHJvZHVjdCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIncHJvZHVjdCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlByb2R1Y3Q8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInByb2R1Y3RzXCIgYmluZExhYmVsPVwicHJvZHVjdE5hbWVcIiBiaW5kVmFsdWU9XCJwcm9kdWN0Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBQcm9kdWN0XCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RcIiAob3Blbik9XCJvbk9wZW4oKVwiIChjbG9zZSk9XCJvbkNsb3NlKClcIiBbc2VhcmNoYWJsZV09XCJpc09wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBVc2VyIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIid1c2VySWQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5Vc2VyPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ1c2Vyc1wiIGJpbmRMYWJlbD1cInVzZXJOYW1lXCIgYmluZFZhbHVlPVwidXNlcklkXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgVXNlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwidXNlcklkXCIgcmVxdWlyZWQgKG9wZW4pPVwib25PcGVuKClcIiAoY2xvc2UpPVwib25DbG9zZSgpXCIgW3NlYXJjaGFibGVdPVwiaXNPcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gQ3VycmVuY3kgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+Q3VycmVuY3k8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImN1cnJlbmNpZXNcIiBiaW5kTGFiZWw9XCJjdXJyZW5jeUNvZGVcIiBiaW5kVmFsdWU9XCJjdXJyZW5jeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQ3VycmVuY3lcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3VycmVuY3lcIiAob3Blbik9XCJvbk9wZW4oKVwiIChjbG9zZSk9XCJvbkNsb3NlKClcIiBbc2VhcmNoYWJsZV09XCJpc09wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBUcmFuc2FjdGlvbiBTdGF0dXMgKE11bHRpLXNlbGVjdCkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3RyYW5zYWN0aW9uU3RhdHVzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VHhuLiBTdGF0dXM8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgY2xhc3M9XCJ0cmFuc2FjdGlvbi1zdGF0dXMtc2VsZWN0XCIgW2l0ZW1zXT1cInRyYW5zYWN0aW9uU3RhdHVzZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwidHJhbnNhY3Rpb25TdGF0dXNcIiBiaW5kVmFsdWU9XCJ0cmFuc2FjdGlvblN0YXR1c1wiIFttdWx0aXBsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFRyYW5zYWN0aW9uIFN0YXR1c1wiIGZvcm1Db250cm9sTmFtZT1cInRyYW5zYWN0aW9uU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbG9zZU9uU2VsZWN0XT1cImZhbHNlXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIFtzZWFyY2hhYmxlXT1cImZhbHNlXCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaXRlbSQ9XCJpdGVtJFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiaXRlbSQuc2VsZWN0ZWRcIiAvPiB7eyBpdGVtLnRyYW5zYWN0aW9uU3RhdHVzIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFRyYW5zYWN0aW9uIE5vIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIid0cmFuc2FjdGlvbk5vJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VHhuLiBOdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBkcGlja2VyXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJhbnNhY3Rpb25Ob1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHRyYW5zYWN0aW9uIG51bWJlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVmFsdWUgRGF0ZSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndmFsdWVEYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VmFsdWUgRGF0ZTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBkcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5XCIgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAjdG9EYXRlSW5wdXQ9XCJuZ2JEYXRlcGlja2VyXCIgZm9ybUNvbnRyb2xOYW1lPVwidG9EYXRlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b0RhdGVJbnB1dC50b2dnbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gU2VuZCBDb3VudHJ5IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidzZW5kQ291bnRyeSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlNlbmQgQ291bnRyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwiY291bnRyaWVzXCIgYmluZExhYmVsPVwiY291bnRyeVwiIGJpbmRWYWx1ZT1cImNvdW50cnlDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFByb2R1Y3RcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VuZENvdW50cnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBSZWNlaXZlIENvdW50cnkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3JlY2VpdmVDb3VudHJ5J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+UmVjZWl2ZSBDb3VudHJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJjb3VudHJpZXNcIiBiaW5kTGFiZWw9XCJjb3VudHJ5XCIgYmluZFZhbHVlPVwiY291bnRyeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgUHJvZHVjdFwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJyZWNlaXZlQ291bnRyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tVHJhbnNhY3Rpb24gUHJvZHVjdCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndHJhbnNhY3Rpb25Qcm9kdWN0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+UHJvZHVjdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwidHJhbnNhY3Rpb25Qcm9kdWN0c1wiIGJpbmRMYWJlbD1cIm5hbWVcIiBiaW5kVmFsdWU9XCJwcm9kdWN0Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBQcm9kdWN0XCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIERhdGUgVHlwZSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlVHlwZSdcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPkRhdGUgVHlwZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBwbGFjZWhvbGRlcj1cIi0gUGxlYXNlIHNlbGVjdCAtXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZVR5cGVcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1vcHRpb24gW3ZhbHVlXT1cIjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctb3B0aW9uIFt2YWx1ZV09XCIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zdGluZyBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBEYXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5EYXRlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgZGF0ZS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZHBpY2tlclwiIHBsYWNlaG9sZGVyPVwiZGQvbW0veXl5eVwiIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAjdG9EYXRlSW5wdXQ9XCJuZ2JEYXRlcGlja2VyXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC1ncm91cC1idXR0b24gY2FsXCIgKGNsaWNrKT1cInRvRGF0ZUlucHV0LnRvZ2dsZSgpXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1jdXN0b20tMS01XCI+XHJcbiAgICAgICAgPCEtLSBWaWV3IFJlcG9ydCBCdXR0b24gKEFsd2F5cyBhdCBUb3AtUmlnaHQpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkIHZpZXctcmVwb3J0LWJ0blwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXJlcG9ydFwiPlZpZXc8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Zvcm0+XHJcbjwvc2VjdGlvbj5cclxuPGhyPlxyXG48IS0tIEVycm9yIE1lc3NhZ2VzIC0tPlxyXG48ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIG10LTNcIiAqbmdJZj1cImZvcm1WYWxpZGF0aW9uRXJyb3IgJiYgaGFzU2VhcmNoZWRcIj5cclxuICBQbGVhc2UgZmlsbCBhbGwgcmVxdWlyZWQgZmllbGRzIGJlZm9yZSBzdWJtaXR0aW5nIHRoZSBmb3JtLlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgbXQtM1wiICpuZ0lmPVwiZXJyb3JNZXNzYWdlICYmIGxvYWRpbmdTdGF0ZSA9PT0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkVycm9yXCI+XHJcbiAge3sgZXJyb3JNZXNzYWdlIH19XHJcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiAoY2xpY2spPVwiZXJyb3JNZXNzYWdlID0gJydcIj48L2J1dHRvbj5cclxuPC9kaXY+Il19